php gettext只有空白

时间:2013-07-25 19:23:14

标签: php gettext

我已确认我的服务器上安装了gettext。我使用this教程开始并遵循其指示。

我还阅读了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"目录完全,但没有帮助。

1 个答案:

答案 0 :(得分:0)

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

这就是我在windows / linux服务器上测试使用gettext的方法:

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文件和翻译。