翻译WordPress:在定义语言时我应该使用哪种命名约定?

时间:2014-02-21 11:13:46

标签: wordpress internationalization

我的目标是更改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

2 个答案:

答案 0 :(得分:1)

在阅读了我的评论答案之后。

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

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

我已经在非常极端的情况下(字面意思是xx_XX

这样做了

HOWEVER:

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

原因是如果应用标准代码(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 :(得分:-1)

我在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.