4

我终于设法建立了一个多语言的 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 ,则语言会更改为新值(在翻译字段上)并且不会切换到其他语言。

我究竟做错了什么。 我希望我尽可能清楚地说明自己。

4

2 回答 2

4

有不同的方法来解决它。最简单的方法是以主要语言编写应用程序并将所有可翻译的字符串包装在__(). 稍后您可以.po为您可能需要的每个翻译添加文件。

这种方法的问题在于,如果您要更改原始语言的文本,您还需要更改您可能拥有msgid的每个文件中该字符串的条目。.po如果您必须支持许多不同的语言,这可能会变得非常麻烦。

请忽略上面的旧信息。正确设置的 i18n 工作流程将使用xgettext或类似的实用程序自动__()从源代码中提取包装字符串并生成、更新和合并 .po 文件。没有什么麻烦的。


另一种方法是在源文件中使用“描述符”文本并将实际文本放入.po文件中,即使对于主要语言也是如此。IE:

__('PRODUCT CAPTION');

/eng/.po
msgid "PRODUCT CAPTION"
msgstr "Buy our awesome products!"

/ger/.po
msgid "PRODUCT CAPTION"
msgstr "Kaufen Sie unsere Produkte!"

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

于 2010-03-25T01:41:08.103 回答
1

利用

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

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

于 2010-03-29T17:16:19.287 回答