【问题标题】:CakePHP 2: Localization&Internalization for function timeAgoInWords()CakePHP 2:函数 timeAgoInWords() 的本地化和内部化
【发布时间】:2012-12-01 18:40:57
【问题描述】:

我的问题是我无法将日期从英语翻译成俄语。 我遵循了这个指南:

  1. Internationalization & Localization CakePHP
  2. I18N shell

我在 AppController.php 中写了这段代码:

function beforeFilter() {
    parent::beforeFilter();
    setlocale(LC_ALL, "ru_RU.utf8");
    Configure::write('Config.language', 'rus');
    CakeSession::write('Config.language', 'rus');
}

我添加了一个文件夹“Locale\rus\LC_MESSAGES”并放在文件 default.po 中。 顺便说一句,我将所有消息提取到单个文件中。

但事实上:

<?php echo $this->Time->timeAgoInWords($feedback['Feedback']['created']); ?> 

什么也没做。

<?php echo __d('default', $this->Time->timeAgoInWords($feedback['Feedback']['created']), true); ?>

仅将字符串“just now”翻译为俄语,但其他时间格式仍为英语。 您可以在下面看到来自 default.po 的翻译示例:

成功

#: Lib\Cake\Utility\CakeTime.php:842
#: Utility\CakeTime.php:842
msgid "just now"
msgstr "translate"

失败

#: Lib\Cake\Utility\CakeTime.php:829
#: Utility\CakeTime.php:829
msgid "%d week"
msgid_plural "%d weeks"
msgstr[0] "%d translate"
msgstr[1] "%d translate"

我不明白我做错了什么。

【问题讨论】:

  • 我建议不要将所有翻译放在一个文件中 - 并使用 the localized repository (目前没有俄语翻译文件 - 但您可以创建一个 =)。 from the code 如果存在上述翻译,忽略它们是不合逻辑的 - 这可能表明您拥有的 default.po 文件在某些​​方面格式错误。

标签: cakephp localization timeago


【解决方案1】:

要翻译像 Lib\Cake\Utility 文件夹中的 CakePHP 核心字符串,您需要使用不同的翻译域。您的视图的默认域是“default”,但对于 CakePHP 核心字符串,它是“cake”。

您需要提供“cake.po”而不是“default.po”。否则您的翻译将无效。

【讨论】:

  • 感谢您的回答。但是我不再使用 CakePHP,所以我无法检查它。如果有人确认您的解决方案有效,那么我接受您的回答。谢谢。
  • 也许没有人会花时间仔细检查它。你知道有谁可以查吗?
猜你喜欢
  • 2012-05-11
  • 2019-01-30
  • 1970-01-01
  • 2012-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-11
  • 1970-01-01
相关资源
最近更新 更多