【发布时间】:2017-02-27 14:06:01
【问题描述】:
我在使用 Cakephp 3 时遇到了一个非常令人沮丧的问题。我刚刚更新了所有要使用的 .ctp 文件(双 _ ),但我无法让它打印本地化的字符串。
我已在 config/app.php 中将默认语言环境设置为 en_150:
App' => [
'namespace' => 'App',
'encoding' => env('APP_ENCODING', 'UTF-8'),
'defaultLocale' => env('APP_DEFAULT_LOCALE', 'en_150'),
...
我尝试直接在 config/bootstrap.php 中设置语言环境,但没有效果:
ini_set('intl.default_locale', Configure::read('App.defaultLocale'));
我使用 cake i18n 提取生成 .pot 文件,然后为 en_150 语言环境执行 cake i18n init。我相信他们走在正确的道路上:
$ find src/Locale/
src/Locale/
src/Locale/default.po
src/Locale/cake.pot
src/Locale/default.pot
src/Locale/en_150
src/Locale/en_150/default.po
src/Locale/en_150/default.po.po
src/Locale/en_150/cake.po
src/Locale/en_150/default.mo.po
src/Locale/default.mo
最奇怪的是,我更新了 Translator 类 (vendor/cakephp/cakephp/src/I18n/Translator.php) 以记录正在查找的每个消息键,我看到了我的键和 debugKit 的键。但是,debugKit 的键会被查找两次,一次是从内存中查找,然后是从回退中查找。但是,我的密钥从未通过后备方式查找。
debugkit 的键:
2017-02-27 13:47:16 Fallback lookup Event: Controller.beforeRender
2017-02-27 13:47:16 Event: Controller.beforeRender
2017-02-27 13:47:16 View Render start
2017-02-27 13:47:16 Fallback lookup View Render start
2017-02-27 13:47:16 View Render start
我的钥匙:
2017-02-27 13:47:16 AppName
2017-02-27 13:47:16 Sign in to start your session
2017-02-27 13:47:16 Email
2017-02-27 13:47:16 Password
2017-02-27 13:47:16 Remember Me
2017-02-27 13:47:16 Sign In
这有点让我觉得“后备”实际上是进入文件并读取翻译的内容。出于某种原因,我的翻译并没有发生这种情况。
到目前为止我已经尝试过:
- 删除缓存(超过 100 次)
- 将默认区域设置(在 config/app.php 中)设置为 en_150 以外的其他设置(我担心这会是 cakephp 的无效区域设置名称)
- 在 .pot 之间切换 翻译文件的 .po 文件扩展名
- 在 nano 和 poedit 中更新 .po 文件
过去 4 天我一直在尝试解决这个问题,所以我肯定尝试了许多其他我现在不记得的事情。
任何人都可以提供任何建议,我将不胜感激
【问题讨论】:
-
更新:我试过从 cakephp 3.3 升级到 3.4,问题依旧
标签: php cakephp localization internationalization translation