我可以不为核心中使用的术语保留插件textdomain吗?


10

我有一个插件,可将发布状态放入发布类型的管理菜单中。我正在将其国际化,我想知道如何处理这种情况。

该插件使用一些唯一的字符串,这些字符串将获得如下所示的文本域:

__( 'Select the post statuses to <strong>exclude</strong> from post type admin menus', 'csmpmsi' )

但是在某些情况下,我也会使用与核心相关的词作为其与核心相关的含义,例如:__( 'Pages' )。在这种情况下,排除文本域并利用已经本地化的术语对我来说似乎是很有意义的。但是,编解码器似乎非常明确:

如果您尝试翻译插件,则适用与上述相同的建议,除了

  • 您必须使用一个域,该域已加载到插件的挂钩中

  • 每个翻译调用都必须成为__('text','domain-name')

那是WP-犹太洁食店吗?


1
感谢您提出发人深省的问题,答案(到目前为止,来自toscho和Mark Kaplun)对我来说很有趣且有用!
webaware 2012年

Answers:


14

切勿依赖核心字符串进行翻译,它们可能随时更改或获取context参数。一旦发生这种情况,您的用户将获得部分翻译的界面,而您的翻译则无法解决该问题。

另外请记住,不必在任何地方使用相同的单词翻译相同的字符串。即使没有上下文参数,使用某些语言为插件使用其他翻译也可能会很有用。但是,如果您未在插件中包含字符串,则不可能。

请看我们几天前关于此主题的聊天讨论


另外请记住,即使没有文本域,该字符串仍将显示在您的POT文件中。
scribu 2012年

@scribu取决于解析器。代码样式化本地化插件将忽略它。
fuxia

在一个几乎完全相同的问题上,这个答案和这个答案之间似乎有些分歧……
mrwweb

4

是的,但是请不要。这就像编码标准,即使您绕过它可以获得一点好处,也最好遵循它。

更好的理由:

  1. 在版本3.5中,WordPress没有整体翻译文件,出于性能原因将其分为3部分。如果这种趋势持续下去,当您尝试在其中使用默认域时,是否可以确定将默认加载默认域__('Pages')

  2. 您无需将工作保存到本地化器中-诸如poedit之类的翻译工具不知道如何在一个文件中处理两个翻译域,在您的示例中,它们将生成一个包含单词'Pages'的.po文件,即使您使用默认域。除非他需要了解上下文,否则本地化人员不会检查翻译的字符串的实际用法,这样他就不会注意到不同的域并会翻译该单词。此外,如果本地化人员知道他的工具,那么他将拥有一个基于WordPress核心翻译文件的翻译数据库,该数据库可以使poedit自动翻译“页面”之类的单词。


0

你可以尝试一下

add_action('wp',function(){
    load_default_textdomain();
    _e('Settings');
});

要么

add_action('wp',function(){
    $locale = is_admin() ? get_user_locale() : get_locale();
    load_textdomain( 'default', WP_LANG_DIR . "/$locale.mo" );
    load_textdomain( 'default', WP_LANG_DIR . "/admin-$locale.mo" );

    // WPMU
    //load_textdomain( 'default', WP_LANG_DIR . "/ms-$locale.mo" );
    //load_textdomain( 'default', WP_LANG_DIR . "/admin-network-$locale.mo" );

    _e('Settings');
    _e('First Name');
    _e('Last Name');
});

参考:https : //v123.tw/use-wordpress-core-translation/

祝好运!!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.