【问题标题】:Translating WordPress: Which naming convention should I use when defining the language?翻译 WordPress:定义语言时应该使用哪种命名约定?
【发布时间】:2014-02-21 11:13:46
【问题描述】:

我的目标是更改 WordPress 中使用的一些文本字符串。至此,我已经下载了官方的WordPress .pot file,并保存在wp-content/lanuages/wordpress.pot下。我有一份Poedit 的副本,准备开始编辑。

在 config.php 中我不确定是 define('WPLANG', 'en'); 还是 define('WPLANG', 'en_US');。我的网站访问者来自不同的英语国家,如英国和美国。我应该使用非特定的命名约定,例如en,还是必须添加国家代码,例如en_US?

http://codex.wordpress.org/Translating_WordPress

【问题讨论】:

  • 它适用于任何名称#(例如 xx_XX )但我可以问一下它的最终目标是什么?一定有更好的办法..
  • 我的目标是更改 WordPress 中使用的一些文本字符串

标签: wordpress internationalization


【解决方案1】:

阅读您对我的评论的回答后。

直接回答您的问题:任何名称(例如xx_XX)都可以使用,您可以自己发明。

官方语言代码 can be found here(因为 wordpress 正在使用 gettext 实用程序)但就像我说的那样,将语言定义为 xx_XX 然后声明 define ('WPLANG', 'xx_XX'); 确实可以按预期工作。

我已经在一个非常极端的情况下这样做了(字面意思是xx_XX

但是:

这不是解决问题的正确方法。

原因是您的新翻译,如果使用标准代码 (en_US) 将在每次更新中被覆盖,而且您将很难维护它。 第二个原因是这只是一种不好的做法。

正确的方法是过滤输出,您有一个非常方便的过滤器,专门用于gettext

您可以将其用作(对于单个字符串):

function my_own_translation( $translated_text ) {
    if ( $translated_text == 'The old translation string' ) {
        $translated_text = 'My better translation string';
    }
    return $translated_text;
}
add_filter( 'gettext', 'my_own_translation', 20 );

或者如果你有多个

function my_own_translation( $translated_text ) {
    switch ( $translated_text ) {
        case 'Old translation string 1' :
            $translated_text = 'New Translation string 1';
            break;

        case 'Old translation string 2' :
            $translated_text = 'New Translation string 2';
            break;

        case 'Old translation string 3' :
            $translated_text = 'New Translation string 3';
            break;
    }
    return $translated_text;
}
add_filter( 'gettext', 'my_own_translation', 20 );

当然,如果你有很多字符串,数组会派上用场..

function my_own_translation( $translated ) {
    $text = array(
        'Old translation string  1' => 'New Translation string 1',
        'Old translation string t 2' => 'New Translation string 2',
        'Old translation string  3' => 'New Translation string 3',
    );
    $translated = str_ireplace(  array_keys($text),  $text,  $translated );
    return $translated;
}
add_filter(  'gettext',  'my_own_translation', 20 ); 

只需从中创建一个插件 - 就完成了。

编辑我

发布后阅读我的代码,并考虑到我们正在处理翻译,真正正确的方法是:

$translated_text = __( 'This is my new cool translateion', 'my_domain' );

另外,现在人们倾向于使用最优秀的codestyling localization,而不是 poedit 实用程序。它会让你的生活更轻松..

【讨论】:

  • 我不太确定我是否同意你的看法。 1. 你是说使用语言文件翻译 WordPress 文本字符串是一种不好的方法(不好的做法)? 2. 为什么你建议每次更新都会覆盖 wp-content/language/ 文件夹?
  • 1 。对核心文件的任何更改都是不好的做法 2. 是的,如果翻译文件将使用标准语言命名,并且该语言将在核心中更新 - 您的翻译将会丢失。
  • 使用语言文件更改文本字符串不涉及更改核心文件。您使用 wordpress.pot 文件生成包含所有自定义文本字符串的 .mo 文件。如果 WordPress 更新 wordpress.pot,那么您不会丢失任何自定义文本字符串,因为它们都在您的 .mo 文件中,并且保持不变。
  • 感谢您的信息,但我对 wp 翻译机制非常熟悉(在管理 200 多个多语言网站并编写了 100 多个翻译插件之后)。很遗憾地通知您,您是这个事实是错误的。 .mo 和 .po 文件确实会在非英文版本上更新,并且很快也会在英文版本上更新(新的即将发布的 wp 版本)。在这方面,它们被认为与core 相关。您可以在您将下载的任何非美国版本的wp-content/Languages dir 中找到它们。但照你的意思做 - 等待下一次升级,看看会发生什么..
  • 这不是讨论区。为什么我们是havingthisdiscussion? (那是 3 个链接)你可以自己 try 看看。此外,当您拥有 [codestyleing-localization] (wordpress.org/plugins/codestyling-localization/changelog) 时,几乎没有人再使用 Poedit
【解决方案2】:

我在http://codex.wordpress.org/Installing_WordPress_in_Your_Language看到了答案

为您的语言下载 .mo 语言文件(请参阅 WordPress 中的 您的语言以获取有关如何查找的提示)。的命名约定 .mo 文件基于 ISO-639 语言代码(例如 pt for 葡萄牙语)后跟 ISO-3166 国家代码(例如 _PT 表示 葡萄牙或 _BR 代表巴西)。因此,巴西葡萄牙语文件将 被称为 pt_BR.mo,并且将调用一个非特定的 Portuges 文件 pt.mo.

【讨论】:

  • 如果您对我从 WordPress Codex 引用的信息投了反对票,也许您可​​以用更有用的信息更新它?提前致谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多