如何使用带有CD MessageSource的Yiic消息命令

时间:2014-04-04 19:44:13

标签: yii

我以前使用CPhpMessageSource但我想尝试CDbMessageSource我虽然我只需要改变它...

'components' => array(
        'message' => array(
//            'class' => 'CPhpMessageSource',
            'class' => 'CDbMessageSource',
        ),

但是,当我执行Yiic消息以在数据库中插入翻译数据时,它仍然会在protected / messages /" files" .php中生成文件 ...

我一定错过了一点......

我遵循此http://www.yiiframework.com/doc/api/1.1/CDbMessageSource

1 个答案:

答案 0 :(得分:2)

即使Yii有一个"读者"对于数据库翻译,它没有" writer"。我通常最终做的是编写一些可以使用生成的翻译文件填充表格的代码。

您还可以撰写衍生的"消息"对Yii的命令并使用它直接插入数据库,它没那么多工作:

<?php

Yii::import('system.cli.commands.MessageCommand', TRUE);

class DbMessageCommand extends MessageCommand
{
   protected function generateMessageFile($messages,$fileName,$overwrite,$removeOld,$sort)
   {
      if (preg_match('@/(..)/([^\\/:"*?<>|]+?)\.php$@i', $fileName, $matches))
      {
         $language = $matches[1];
         $category = $matches[2];

         foreach ($messages as $message)
         {
            // $message contains the string, $category has the category and $language is the current language
            // Add to your DB here
         }
      }
   }
}

只需在您的命令子目录中创建一个DbMessageCommand.php文件并完成代码即可开始营业。

简而言之,这样做是使用常规消息命令来解析文件,但是当调用generateMessageFile - 函数来写入php文件时,它会使用正则表达式来确定要写入的内容(它按语言/类别调用)并将其添加到数据库中。

我还没有包含该代码,因为我没有使用这些模型,因为它们包含在Yii中。我有自己的CDbMessageSource - 变体和我自己的字符串表。