主题开发中翻译函数__e()等是否必须传入英文字符串?
WordPress主题翻译:非英文原始字符串的可行性
嘿,这个问题问到点子上了!我来给你详细捋清楚:
技术上可行,但非常不推荐
WordPress的__()、_e()这些翻译函数本身并不限制你传入非英文字符串——比如你写_e('строчка','textdomain'),只要翻译文件配置正确,是可以正常匹配到对应翻译的。
但为什么不推荐这么做呢?核心原因是WordPress的国际化(i18n)体系是围绕「英文作为基准源语言」设计的,实际操作中会遇到不少麻烦:
- 工具兼容性问题:大多数翻译工具(比如Poedit)默认以英文作为源语言,处理非英文源文本时可能出现字符编码识别、字符串匹配的小问题,增加翻译流程的复杂度。
- 维护成本飙升:gettext系统是通过「源文本字符串」匹配翻译的,如果你的源文本是俄语,之后要修改这个字符串的话,所有翻译文件里对应的
msgid都得同步修改,非常繁琐。 - 协作障碍:大部分主题开发者、翻译贡献者都习惯以英文作为基准语言,用非英文作为源文本会让其他参与协作的人难以理解和上手。
官方推荐的最佳实践
按照WordPress的标准流程,正确的做法是:
- 所有原始字符串都用英文编写,比如:
_e('String', 'textdomain') - 生成以英文为源语言的
.pot模板文件 - 针对不同语言创建翻译文件(比如俄语的
.po/.mo),在其中将msgid "String"对应翻译为msgstr "строчка"
这样做完全贴合WordPress生态,工具支持完善,维护和协作都顺畅很多。
如果非要用非英文作为源语言(谨慎尝试)
如果你坚持要用非英文作为原始字符串,需要注意这几点:
- 确保主题的文本域加载正确:
load_theme_textdomain('textdomain', get_template_directory() . '/languages'); - 使用翻译工具(比如Poedit)时,手动设置源语言为你使用的非英文(比如俄语)
- 翻译文件中的
msgid必须和代码里的非英文字符串完全一致,才能匹配到翻译
内容的提问来源于stack exchange,提问作者Oleg
相关产品推荐
相关产品推荐

