我正在使用CakePHP v2.5.6,并且我在CakePHP本地化之后关注this documentation。我已经阅读了100次,但它仍然无法正常工作!
使用蛋糕控制台i18n
任务,我创建了以下文件......
app/Locale/default.pot
app/Locale/fra/LC_MESSAGES/default.po
app/Locale/fra/LC_MESSAGES/default.mo
...我使用Poedit翻译了一些字符串(用于测试):
在bootstrap.php中我有:
Configure::write('Config.language', 'fra');
(我也试过将它放在我的AppController&{39} beforeFilter()
中也没有用)
在我看来,我有:
<?php
Debugger::dump( Configure::read('Config.language') );
Debugger::dump( CakeSession::read('Config.language') );
echo __('Find a Place');
?>
但是当我加载页面时,我只看到:
'fra'
null
Find a Place
为什么????? !!!!!!
更新1 @ndm提出了一些关于缓存的担忧......
在我的持久缓存中,将显示以下文件:
.../temp/cache/persistent/myapp_cake_core_cake_fra
.../temp/cache/persistent/myapp_cake_core_default_fra
.../temp/cache/persistent/myapp_cake_core_file_map
.../temp/cache/persistent/myapp_cake_core_method_cache
更新2 按照@ ndm的建议,我在.po文件中删除了除了一个翻译之外的所有内容并且它已经工作了!
# LANGUAGE translation of CakePHP Application
# Copyright YEAR NAME <EMAIL@ADDRESS>
#
msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"POT-Creation-Date: 2014-11-20 11:30-0500\n"
"PO-Revision-Date: 2014-11-20 11:43-0500\n"
"Last-Translator: SDP\n"
"Language-Team: <EMAIL@ADDRESS>\n"
"Language: fr_CA\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
"X-Generator: Poedit 1.6.10\n"
#: View/Elements/nav--main.ctp:3
#, fuzzy
msgid "Find a Place"
msgstr "Trouver une place"
显然我的文件有问题,但它很奇怪,因为它是由Poedit生成的全新文件,它通过了&#34; Validate&#34;功能没有问题。它只是说有很多条目尚未翻译。
我从文件中删除的行如下所示:
...
#: Controller/FavoritesController.php:38;73;101
msgid "Invalid favorite"
msgstr ""
#: Controller/FavoritesController.php:53;77
msgid "The favorite has been saved."
msgstr ""
#: Controller/FavoritesController.php:56;80
msgid "The favorite could not be saved. Please, try again."
msgstr ""
...
有什么问题吗?
答案 0 :(得分:5)
正如我们在评论中所述,这里的问题是问题翻译已标记为fuzzy
,并且此类条目未编译到.mo
文件中,除非明确请求使用标有-f
的{{1}}或--use-fuzzy
。
当msgfmt
和.pot
文件合并时,条目会自动标记为模糊,并且两个po
字符串非常接近但不完全匹配,因为这些匹配可能不正确默认情况下,它们不会被编译。
我应该在你的截图中看到,在工具栏和状态栏中清楚地显示模糊,我怀疑黄色标记的条目是模糊的,但它是已经很晚了。
msgid
个文件.mo
个文件
一个小小的Cake背景信息,即使(当前)没有文档,CakePHP将使用.po
个文件而不是.mo
个文件,以防它们存在。
这些编译的二进制变体通常更快解析(比较I18n::loadMo()
和I18n::loadPo()
),因为格式更简单(没有注释,不必要的(如模糊)翻译,等等...)和它可以被认为是有效的,当然.po
文件可能包含不应该被使用的条目,如那些模糊的条目:)