我尝试为多语言PHP网站创建资源文件。 我创建了.po文件,然后使用这个小库https://github.com/josscrowcroft/php.mo转换为二进制.mo文件,但它们似乎不起作用。但是,如果我用Poedit打开生成的.po文件然后点击保存,我观察到.mo文件大小与初始文件大小相比有点变化,而.po文件可以正常工作。我不知道如何直接使用它,而不使用Poedit工具。
如果有,请给我一些建议!感谢
答案 0 :(得分:0)
以下文字是从http://php.net/manual/en/book.gettext.php
复制的” 要记住的重要事项: 不要忘记在.po文件中设置charset! 例如:
“Content-Type:text / plain; charset = UTF-8 \ n”
然后,PHP将能够使用msgfmt从.po文件WITH CHARSET SET中找到您生成的.mo文件。
因此,我浪费了大量时间来调试我的代码,测试人们对本手册和Internet建议的每一个小改动:
<?php
//this:
setlocale( LC_MESSAGES, 'pt_BR')
//or this:
setlocale( LC_MESSAGES, 'pt_BR.utf8')
//or this:
setlocale( LC_MESSAGES, '')
//this:
putenv("LANG=pt_BR.utf8");
//or this:
putenv("LANGUAGE=pt_BR.utf8");
//this:
bindtextdomain('mydomain', dirname(__FILE__).'/locale');
//or this:
bindtextdomain("*", dirname(__FILE__).'/locale');
//or this:
bindtextdomain('*', dirname(__FILE__).'/locale');
//setting or not "bind_textdomain_codeset()":
bind_textdomain_codeset("mydomain", 'UTF-8');
?>
以及要设置的区域设置目录名称:
./区域设置/ pt_BR.UTF8 / LC_MESSAGES / mydomain.mo
或
./区域设置/ pt_BR表示/ LC_MESSAGES / mydomain.mo
或
./区域设置/ PT / LC_MESSAGES / mydomain.mo
最后,带来正确翻译字符串的代码(也带有正确的字符集)是:
<?php
$directory = dirname(__FILE__).'/locale';
$domain = 'mydomain';
$locale ="pt_BR.utf8";
//putenv("LANG=".$locale); //not needed for my tests, but people say it's useful for windows
setlocale( LC_MESSAGES, $locale);
bindtextdomain($domain, $directory);
textdomain($domain);
bind_textdomain_codeset($domain, 'UTF-8');
?>
使用pt_BR.utf8语言环境完成了三个目录的名称。 (我的测试是重新启动Apache然后尝试每个目录。)
我希望帮助别人不要浪费我浪费的时间...... = P
使用: Ubuntu 8.04(耐寒) Apache 2.2.8 PHP 5.2.4-2ubuntu5.6 “