如何在php中使用数据库中翻译的strigs生成.po文件?

如何在php中使用数据库中翻译的strigs生成.po文件?,php,internationalization,po,poedit,Php,Internationalization,Po,Poedit,我尝试为多语言PHP网站创建资源文件。 我创建了.po文件,然后用这个小库将其转换为二进制.mo文件,但它们似乎不起作用。但是,如果我用Poedit打开生成的.po文件,然后点击save,我观察到.mo文件的大小与初始文件相比略有变化,.po文件可以正常工作。我不知道如何让它工作,直接,没有使用Poedit工具 请给我一些建议,如果你有!谢谢以下文字是从 " 要记住一件重要的事情: 不要忘记在.po文件中设置字符集! 例如: “内容类型:文本/纯文本;字符集=UTF-8\n“ 然后PHP将能够从

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


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

以下文字是从

" 要记住一件重要的事情: 不要忘记在.po文件中设置字符集! 例如:

“内容类型:文本/纯文本;字符集=UTF-8\n“

然后PHP将能够从带有字符集的.po文件中找到使用msgfmt生成的.mo文件

正因为如此,我浪费了大量时间调试我的代码,测试人们在本手册和互联网上建议的每一个小改动:

<?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');
?>

以及要设置的区域设置目录名称:

./locale/pt_BR.UTF8/LC_MESSAGES/mydomain.mo

./locale/pt\u BR/LC\u MESSAGES/mydomain.mo

./locale/pt/LC_MESSAGES/mydomain.mo

最后,产生正确翻译字符串(也具有正确的字符集)的代码是:


问题的可能重复之处不是.mo文件中.po的转换,而是.po文件的创建。如果我看一下我创建的.po文件和Poedit创建的.po文件,它们在内容上似乎相同,但不知何故大小有点不同!我希望我说得更清楚,感谢这为我使用pt_BR做了手脚(我的原始字符串是西班牙语,然后我翻译成pt_BR)。到目前为止,我还不需要pt_BR.utf8,但我正在做
bind_textdomain_代码集($domain,'ISO-8859-1')
,我想这是因为西班牙语。现在使用'UTF-8'作为第二个参数,它对所有人都很好(英语也一样)
<?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');
?>