resory 2012-11-26 11:36:11 2688次浏览 1条回复 0 0 0

Yii 含有如下几种信息源。你也可以扩展 CMessageSource 创建自己的信息源类型。

CPhpMessageSource: 信息的翻译存储在一个 PHP 的 键值对 数组中。 原始信息为键,翻译后的信息为值。每个数组表示一个特定信息分类的翻译,分别存储在不同的 PHP 脚本文件中,文件名即分类名。 针对同一种语言的 PHP 翻译文件存储在同一个以区域 ID 命名的目录中。而所有的这些目录位于 basePath 指定的目录中。

CGettextMessageSource: 信息的翻译存储在 GNU Gettext 文件中。

CDbMessageSource: 信息的翻译存储在数据库的表中。更多细节,请查看 CDbMessageSource 的 API 文档。

我的做法是:YII默認是用CPhpMessageSource做翻譯的也就是在message下面建一個文件夾如zh_cn,裏面再建一個分類如default.php,然後再default裏面寫上數組實現翻譯。

現在的問題是:由於翻譯可能需要修改。所以想做一個模塊。對翻譯進行增加與修改功能。而如果用CPhpMessageSource方法。每次增加或者修改。就要修改文件裏面的數組。也就意味著這個文件清空。重新寫入。。所以我想用CDbMessageSource方法。把翻譯的數據寫入數據庫。剛才也提到YII默認是用CPhpMessageSource做翻譯的。那我如何使CDbMessageSource生效而CPhpMessageSource失效了?

  • 回复于 2012-11-27 09:05 举报

    先把数据表结构导入:

    CREATE TABLE SourceMessage
     (
         id INTEGER PRIMARY KEY,
         category VARCHAR(32),
         message TEXT
     );
     CREATE TABLE Message
     (
         id INTEGER,
         language VARCHAR(16),
         translation TEXT,
         PRIMARY KEY (id, language),
         CONSTRAINT FK_Message_SourceMessage FOREIGN KEY (id)
               REFERENCES SourceMessage (id) ON DELETE CASCADE ON UPDATE RESTRICT
      );
    

    然后在配置文件里配置组件:

    'message'=>array(
        'class'=>'CDbMessageSource',
        'connectionID'=>'db',
        'sourceMessageTable'=>'{{SourceMessage}}',
        'translatedMessageTable'=>'{{Message}}',
    ),
    

    接下来就尽情使用吧,哈哈

您需要登录后才可以回复。登录 | 立即注册