微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

CakePHP本地化拒绝工作

我正在使用CakePHP v2.5.6,我在CakePHP本地化上遵循this documentation.我已经阅读了100次,但仍然无法正常工作!

使用cake console 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的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生成一个全新的文件,它通过“验证”功能没有问题.它只是说有很多条目尚未翻译.

我从文件删除的行看起来像这样:

...
#: 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 ""
...

那有什么不对吗?

解决方法:

模糊条目未被编译

正如我们在评论中所看到的,这里的问题是问题翻译已被标记为模糊,并且此类条目未被编译到.mo文件中,除非使用-f或–use-fuzzy标志明确请求与msgfmt.

当合并.pot和po文件时,条目会自动标记为模糊,并且两个msgid字符串非常接近但不完全匹配,并且由于这些匹配可能不正确,因此认情况下它们不会被编译.

我应该在你的截图中看到,在工具栏和状态栏中清楚地显示了模糊,我怀疑黄色标记的条目是模糊的,但它已经很晚了.

CakePHP在.po文件上使用.mo文件

一个小蛋糕背景信息,即使(当前)没有文档,CakePHP将使用.mo文件而不是.po文件,以防它们存在.

这些编译的二进制变体通常更快解析(比较I18n::loadMo()I18n::loadPo()),因为格式更简单(没有注释,不必要的(如模糊)翻译等等)并且可以预期它是有效的,当然.po文件可能包含不应使用的条目,如那些模糊的:)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐