cakephp,i18n .po文件,如何正确使用它们

时间:2010-03-24 11:41:37

标签: cakephp internationalization poedit

我终于设法建立了一个多语种的cakephp网站。 虽然没有完成,但这是我第一次在引导程序中更改DEFAULT_LANGUAGE,我可以看到要更改的语言。

我现在的问题是我无法理解如何正确使用po文件。 根据我使用过的教程,我需要创建一个文件夹/ app / locale,并在该文件夹中为每种语言创建一个文件夹,格式如下:/ locale / eng / LC_MESSAGES。

我已经做到了,我还设法使用cake i18n extract提取default.pot文件。并且看起来所有出现的__()函数都已成功找到。

在我的应用程序中,我使用的是2种语言:eng和gre。 我可以看到为什么你需要一个单独的文件夹为每种语言。 但是在我的情况下,当我编辑每个文件夹中的po文件时没有任何反应....几乎没有。如果我编辑/app/locale/gre/LC_MESSAGES/default.po我没有语言更改。如果我编辑/app/locale/eng/LC_MESSAGES/default.po,则语言将更改为新值(在翻译字段上),并且不会切换到其他语言。

我做错了什么。 我希望我尽可能清楚自己。

2 个答案:

答案 0 :(得分:4)

有不同的方法可以解决这个问题。最简单的方法是使用主要语言对应用程序进行编码,并将所有可翻译字符串包装在__()中。稍后,您可以为每个可能需要的翻译添加.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!"

什么效果更好取决于项目和你,你必须弄清楚......

答案 1 :(得分:1)

使用

Configure::write('Config.language', 'fr');

将用户的语言设置为法语。