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

标签 cakephp internationalization poedit

我终于成功建立了一个多语言 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/eng/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/

相关文章:

java - Android 中的 BreakIterator 错误地计算字符

javascript - 包含小数的国际 pretty-print 字符串对象

doctrine-orm - 使用 poedit 和 zend translate 翻译数据库

Cakephp 3.0 登录

CakePHP 分页顺序不起作用

jquery - 设置和获取日期选择器日期的可靠的跨浏览器方法

gettext - 在 Poedit 的 PO 文件中,如何提供关键字列表,以便为每个关键字自动提取评论?

zend-framework - poEdit 不创建源文件

shell - Cakephp httpsocket ssl 不适用于控制台 shell

cakephp - 如何从 Controller 传递简单数据以在cakePHP中进行查看