CakePHP 2:函数timeAgoInWords()的本地化和内化

时间:2012-12-01 18:40:58

标签: cakephp localization timeago

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

  1. Internationalization & Localization CakePHP
  2. I18N shell
  3. 我在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文件中。 BTW我将所有消息提取到单个文件中。

    但事实上:

    <?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"
    

    我无法理解我做错了什么。

1 个答案:

答案 0 :(得分:0)

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

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