如何使用php中的数据库中的翻译字符串生成.po文件?

时间:2014-10-18 13:55:36

标签: php internationalization po poedit

我尝试为多语言PHP网站创建资源文件。 我创建了.po文件,然后使用这个小库https://github.com/josscrowcroft/php.mo转换为二进制.mo文件,但它们似乎不起作用。但是,如果我用Poedit打开生成的.po文件然后点击保存,我观察到.mo文件大小与初始文件大小相比有点变化,而.po文件可以正常工作。我不知道如何直接使用它,而不使用Poedit工具。

如果有,请给我一些建议!感谢

1 个答案:

答案 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 “