1

我已经确认我的服务器上安装了 gettext。我使用教程开始并按照它的指示进行操作。

我还在 PHP 手册的gettext()上的 gettext 页面上阅读过,如果在翻译表中找不到翻译,它将只使用未翻译的文本。

对于本地化,我有

$language = "en";
putenv("LANG=$language"); 
setlocale(LC_ALL, $language);

// Set the text domain as 'messages'
$domain = 'messages';
bindtextdomain($domain, 'home/www/translations'); 
textdomain($domain);

我设置了两个目录,一个用于 en (translations/en/LC_MESSAGES/message.po),另一个用于 zh (结构相同。) 我使用生成的 .po 文件

xgettext -n *.php

我的问题:“en”根本没有显示任何文字。原始字符串是英文的,我最初试图完全省略“en”目录,但这没有帮助。

4

1 回答 1

0

如果源文件中有英文文本,则不需要 en 版本的目录。尝试查看日志,文本应该出现,会有问题。还尝试重新启动服务器,目录被缓存。

这就是我使用 gettext 的方式,在 windows/linux 服务器上进行了测试:

function setLocaleByLang($lang)
{
    bindtextdomain('app', APPDIR . "/locale"); // APPDIR is definded constant including root of application
    bind_textdomain_codeset('app', "UTF-8");
    textdomain('app');

    $map = array(
        'cs' => array('cs_CZ.UTF-8', 'cs_CZ', 'cs', 'czech'),
        'en' => array('en_US.UTF-8', 'en_US', 'en', 'english'),
        'de' => array('de_DE.UTF-8', 'de_DE', 'de', 'german'),
        'pl' => array('pl_PL.UTF-8', 'pl_PL', 'pl', 'polish'),
        'sk' => array('sk_SK.UTF-8', 'sk_SK', 'sk', 'slovak')
    );

    $locale = key_exists($lang, $map) ? $map[$lang] : $map['en'];
    setlocale(LC_ALL, $locale);
    putenv('LC_ALL=' . $lang); // for windows and gettext
}

用法:

setLocaleByLang('en'); // received from user preferences or browser accept header

我使用Poedit来更新 .po 文件和翻译。

于 2013-07-25T19:39:06.093 回答