CakePHP 2.1中的.po文件/翻译无法正常工作

5

我在视图中使用<?php echo __("this is my string"); ?>来显示多语言文本。我为德语创建了一个.po文件目录:

=> app/Locale/ger/LC_MESSAGES/default.po

msgid "this is my string"

msgstr "dies ist meine zeichenkette"

当我在AppController.php的beforeFilter函数中添加Configure::write('Config.language','ger');时,文本仍然保持为"this is my string"。即使我创建了另一个带有不同msgstr的英语.po文件,文本仍然保持不变。

我需要更改特定设置以激活翻译吗?


我有一个后续问题:我在core.php中添加了Configure::write('Config.language','eng'); 来设置我的默认语言,但现在我无法更改该值,即使我尝试在AppController.php的beforeFilter中覆盖它:

Configure::write('Config.language', 'deu'); //'de' also doesn't work
CakeSession::write('Config.language', 'deu'); //'de' also doesn't work

如果我在core.php中更改值,它就可以完美地工作,但是一旦在core.php中设置了它,我就无法更改它。
解决方案:啊,我忘记在所有控制器的beforeFilter函数中添加parent :: beforeFilter()了。
附加信息:
如果您想定义默认语言(通常会这样做),请将Configure :: write('Config.language','eng')添加到core.php。
2个回答

9
你可以查看文件lib/Cake/I18n/L10n.php,了解如何调用每种语言。
德语设置:
Configure::write('Config.language','de');

=> app/Locale/deu/LC_MESSAGES/default.po


谢谢你提供 L10n.php 文件的提示,我会在以后的参考中使用它。 - Christian Strang

6

它是“deu”,不是“ger”。

CakePHP使用来自http://www.loc.gov/standards/iso639-2/php/code_list.php的官方(T)代码,对于CakePHP 1.3,它在国际化应用程序文档中有说明:

三字符区域设置代码符合ISO 639-2标准,但如果您创建区域性区域设置(如en_US、en_GB等),Cake将在适当的情况下使用它们。

ISO 639-2 |  ISO 639-1 | English name | French name | German name |
Code      |  Code      | of Language  | of Language | of Language |
-------------------------------------------------------------------
ger (B)   |            |              |             |             |
deu (T)   |  de        | German       | allemand    | Deutsch     |

1
啊,现在它可以工作了。对我来说并不明显,我也必须使用文件中的“T”值,很遗憾文档中没有提到,我认为很多其他CakePHP用户可能不知道这一点。 - Christian Strang
谢谢你的回答!我只能标记一个正确答案,我选择了del_dan的答案,因为它提到了L10n文件。 - Christian Strang
1
没有问题。至于文档:您可以通过推送到Github存储库https://github.com/cakephp/docs来参与,这样您就可以添加缺失的信息。 - mark

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接