我已经安装了poedit并通过它运行我的文件,它为它们创建了.po和.mo文件。但我有一个问题,加载和使用这些文件来翻译我的文本。我不知道如何加载或打开翻译的文件并显示翻译的内容。 任何人都可以帮我这个。我尝试了所有可能的来源,但没有成功。
答案 0 :(得分:13)
首先,您需要告知PHP您正在使用的区域设置和域。
putenv("LANG=da_DK");
setlocale('LC_ALL', "da_DK");
bindtextdomain("mycatalog", "./locale/");
textdomain("mycatalog");
在这种情况下,我有一个丹麦语翻译和一个名为mycatalog.mo(和.po)的文件。这些文件(从您的根目录)放在这里:locale / da_DK / LC_MESSAGES / mycatalog.mo / po
为了显示您的翻译,您将执行以下操作:
echo _("Hello world"); // Which would become "Hej verden"
_();是gettext()的别名;关于gettexts的聪明之处在于,如果没有翻译,你就不会有像#34; MSG_HELLO_WORLD"这样的丑陋语言代码。在你的用户界面中,而是一个更好的选择:简单的英文文本。
在messages.po文件中,您必须在此表单上包含所有消息(区分大小写,以及使用逗号,点,冒号等):
msgid "Hello world!"
msgstr "Hej verden!"
当您将此文件添加到.po文件后,您可以在poedit中打开此文件,点击"保存"它将生成一个.mo文件。此文件上载到与.po文件相同的目录(通常类似于\ locale \ da_DK \ LC_MESSAGES \,来自脚本根目录)
要翻译动态/可变内容,您可以使用 - 以及其他方式 - sprintf,以这种方式:
echo sprintf(_("My name is %s"), $name);
在这种情况下,%s将出现在.po文件中;当你有翻译的字符串(包含%s)时,sprintf将确保用可变内容替换%s。如果变量也必须翻译,你可以这样做:
echo sprintf(_("The color of my house is %s"), _($color));
然后你不需要为每种颜色都写一个完整的句子,但你仍然可以翻译颜色。
重要的是要注意,第一次在服务器上运行.mo时它会被缓存 - 并且没有重新启动就无法从缓存中删除此文件(Apache或类似物本身就足够了)。这意味着您在第一次使用后对.mo所做的任何更改都将无效。有很多黑客可以解决这个问题,但老实说,它们大多不是很漂亮(它们包括复制.mo,在它后面添加time()然后再次导入和缓存它)。如果你不是要立刻翻译整个事物,而是以大块的方式翻译,那么最后一段只是重要的。
如果您想在某个时候创建自己的翻译工具,此工具可帮助您使用PHP将.po转换为.mo:
http://www.josscrowcroft.com/2011/code/php-mo-convert-gettext-po-file-to-binary-mo-file-php/
答案 1 :(得分:0)
参见(和探索)http://php.net/manual/en/book.gettext.php。该页面上有用户评论,可以让您了解如何处理。
重复