WordPress插件国际化完整指南:从__()到wp_set_script_translations
插件国际化(i18n)经常被推迟到”发布前最后一周”才处理。但此时代码中的字符串已经散落在数百个文件中,逐个包裹翻译函数的成本远超预期。正确的做法是从第一行代码开始就为i18n做好准备。
PHP侧:不止__()和_e()
大多数人只用__()和_e(),但真正需要掌握的还有:_n()(单复数,中文虽无复数但英文和其他语言必须处理);_x()(带上下文,同一个”Post”在不同位置可能翻译为”文章”或”发布”);esc_html__()(翻译+转义,防止翻译字符串中的XSS);sprintf(__())组合(变量插入,务必用占位符而非字符串拼接)。关键纪律:永远不要在翻译函数内使用变量或拼接字符串,否则翻译工具的字符串提取器无法识别。
JavaScript侧的变革
Gutenberg时代,大量插件逻辑在JavaScript中。wp_set_script_translations配合@wordpress/i18n包的__()函数,实现了JS代码的国际化。翻译文件(.json)通过wp i18n make-json从.po文件自动生成。一个易忽略的细节:wp_set_script_translations的第三个参数是翻译文件的路径,很多人在插件更新后忘记更新这个路径导致翻译加载失败。
翻译工作流自动化
手动维护.po/.mo文件是不可持续的。推荐:代码中用标准翻译函数 → wp i18n make-pot自动提取.pot模板 → translate.wordpress.org或Crowdin做协作翻译 → CI中自动拉取翻译文件并打包进release。这整套流程的初始搭建需要2-3小时,但之后每个版本的翻译更新只需5分钟。

发表回复