【发布时间】:2011-09-23 12:36:04
【问题描述】:
我正在网站上设置本地化,但遇到了一些麻烦。
我找到了一个教程,它完全符合我的需要:http://nuts-and-bolts-of-cakephp.com/2008/11/28/cakephp-url-based-language-switching-for-i18n-and-l10n-internationalization-and-localization/ (在主机名之后直接使用语言)。
所以我已经完成了这个网站上写的所有内容:
- 我已经生成了一个 pot 文件,用这个 pot 文件,我用 PoEdit 创建了三个 po 文件(eng、ger 和 fre),我翻译了两个测试字段。
- 我已将这些文件放入 app/locale/eng|fre|ger
- 我添加了路由Router::connect('/:language/:controller/:action/*', array(),array('language' => '[a-z]{3}'));在正确的文件中
- 我设置了默认语言:Configure::write('Config.language', 'fre');
- 我创建了三个链接来更改语言:link('Français', array('language'=>'fre')); ?>
- 我在 appController 中设置了 _setLanguage 方法(并在 beforeFilter() 中调用它)
- 我创建了一个 appHelper,不必每次都指定当前语言
我的链接生成良好,没有任何异常/错误,我的本地文件是可读的,但是当我继续尝试使用 variable() 的模板时,我只看到“testTranslation”作为文本,没有翻译文本。
为什么这不起作用?看起来它找不到我的文件,但我不知道为什么:(
任何帮助将不胜感激!
编辑:我用 cakePhp 进行了一些调试,似乎在调用 i18n.php 文件的方法 translate 时,我收到了 $domain = default_ger var。我的翻译都在 default.po 文件中,我想他正在搜索 default_ger.po?为什么这个?如何强制它读取 default.po 文件?
编辑:我发现了一些问题:我的控制器有问题,我忘记在我的子控制器中声明 parent::beforeFilter(),然后没有调用控制器中的方法并且语言始终是德语一。在我解决这个问题后,法语和英语工作正常,但德语仍然只显示关键而不是我在翻译文件中的值。这真的很奇怪,我已经删除了缓存中的所有文件,删除了我的 /app/locale/ger 文件夹并将我的 /app/locale/fre 复制到 /app/locale/ger(不更改文件中的任何内容),这仍然不起作用。有什么不同?
【问题讨论】:
-
你把.po文件放到LC_MESSAGES目录(/app/locale/eng/LC_MESSAGES/)了吗?
-
是的,我有:/app/locale/eng/LC_MESSAGES/default.po、/app/locale/fre/LC_MESSAGES/default.po 和 /app/locale/ger/LC_MESSAGES/default。宝
标签: php cakephp localization