问题描述
我有 a plugin 将帖子状态放置到帖子类型的管理菜单中。我正在国际化的中间,我想知道如何处理这种情况。
该插件使用一些唯一的字符串,将获得如下这样的文本域:
__( 'Select the post statuses to <strong>exclude</strong> from post type admin menus', 'csmpmsi' )
但是也有一些情况我使用的是 core-related 的 core-related,意思就是这样:__( 'Pages' )
。在这种情况下,对于我排除文本域并利用已经本地化在核心的术语,似乎是完全有道理的。然而,该法典似乎非常明确:
If you’re trying to translate a plugin, the same advice as above applies, except that
you must use a domain, which is loaded in a hook of your plugin
every translation call must become __(‘text’, ‘domain-name’)
那么这个 WP-kosher?
最佳解决方案
不要依赖核心字符串进行翻译,他们可能随时更改或获取 context
参数。一旦发生这种情况,您的用户将获得部分翻译的界面,您的翻译无法解决这个问题。
还要记住,同一个字符串不一定用同一个字来翻译。即使没有上下文参数,在某些语言中为插件使用不同的翻译也许是有用的。但是,如果您不在插件中包含字符串,这将是不可能的。
看到这个 chat discussion 我们有几天前关于这个话题。
次佳解决方案
是的,但请不要。这就像编码标准,更好地跟随它,即使你可以通过绕过它获得小的优势。
更好的理由:
-
在版本 3.5 中,WordPress 没有一个整体翻译文件,由于性能原因,它被分为 3 部分。如果这种趋势继续下去,当您尝试在
__('Pages')
中使用默认域时,您是否可以确保加载默认域? -
您不会将工作保存到本地化程序 – 像 poedit 这样的翻译工具不知道如何处理一个文件中的两个翻译域,在本例中,他们将生成一个.po 文件,其中包含单词’Pages’,即使您使用它的默认域。本地化人不会检查他翻译的字符串的实际使用情况,除非他需要了解上下文,以便他不会注意到不同的域并将其翻译出来。另外,如果本地化程序知道他的工具,他将有一个基于 WordPress 核心翻译文件的翻译 DB,使得 poedit 可以自动翻译像’Pages’ 这样的单词。
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。