我终于成功建立了一个多语言 cakephp 网站。 虽然尚未完成,但这是我第一次可以在 Bootstrap 中更改 DEFAULT_LANGUAGE,并且可以看到要更改的语言。
我现在的问题是我不太明白如何正确使用 po 文件。 根据我使用的教程,我需要创建一个文件夹/app/locale ,并在该文件夹内按以下格式为每种语言创建一个文件夹:/locale/eng/LC_MESSAGES。
我已经做到了,并且我还设法使用 cake i18n extract 提取了 default.pot 文件。看来所有出现的 __() 函数都已成功找到。
在我的应用程序中,我使用两种语言:eng 和 gre。 我明白为什么每种语言都需要一个单独的文件夹。 然而,就我而言,当我编辑每个文件夹中的 po 文件时,什么也没有发生……好吧,几乎什么也没有发生。如果我编辑/app/locale/gre/LC_MESSAGES/default.po 我没有语言更改。如果我编辑/app/locale/engstrong>/LC_MESSAGES/default.po,则语言会更改为新值(在翻译字段上),并且不会切换到其他语言。
我做错了什么。 我希望我尽可能清楚地表达自己的意思。
最佳答案
有不同的方法可以解决这个问题。最简单的方法是使用主要语言对应用程序进行编码,并将所有可翻译字符串包装在 __()
中。稍后您可以为您可能需要的每个翻译添加 .po
文件。
这种方法的问题是,如果您要更改原始语言的文本,您还需要更改每个 中该字符串的
文件。如果您必须支持多种不同的语言,这可能会变得相当麻烦。msgid
条目您可能拥有的 .po
请忽略上面的旧信息。正确设置的 i18n 工作流程将使用 xgettext 或类似实用程序自动从源代码中提取 __()
包装的字符串,并生成、更新和合并 .po 文件。没什么麻烦的。
另一种方法是在源文件中使用“描述符”文本,并将实际文本放入 .po
文件中,即使对于主要语言也是如此。即:
__('PRODUCT CAPTION');
/eng/.po
msgid "PRODUCT CAPTION"
msgstr "Buy our awesome products!"
/ger/.po
msgid "PRODUCT CAPTION"
msgstr "Kaufen Sie unsere Produkte!"
哪种方法效果更好取决于项目和您,您必须弄清楚......
关于cakephp、i18n .po 文件,如何正确使用它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2507271/