我已确认我的服务器上安装了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"目录完全,但没有帮助。
答案 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文件和翻译。