在Yii 2.0 中实现属性标签的国际化支持

1、因为是生成一些公有的模型至common目录中,且配置了多个数据库连接组件,因此针对kcucDb的模型皆以Kcuc为前缀,以防止命名冲突(不然,不推荐模型名加上相应表前缀),如图1:

针对kcucDb的模型皆以Kcuc为前缀,以防止命名冲突

2、Use Table Prefix:使用表前缀要勾选;Generate Labels from DB Comments:基于DB注释生成标签不勾选(因为后期要进行人工翻译处理);Enable I18N:启用国际化要勾选;Message Category:信息分类设置为commonAttributeLabels/kcucMembers,这是启用国际化的情况下被Yii::t()所使用的类别,以用于当前模型类下的属性标签,生成后如图2:

Generate Labels from DB Comments:基于DB注释生成标签不勾选(因为后期要进行人工翻译处理)

3、在应用程序中按下面的代码来配置消息翻译,如图3:

模式 commonAttributeLabels* 表示所有以 commonAttributeLabels 开头的消息类别名称都使用这个翻译的消息来源。

模式 attributeLabels* 表示所有以 attributeLabels 开头的消息类别名称都使用这个翻译的消息来源。其根路径为当前应用。

模式 * 表示指定默认翻译。其根路径为当前应用。

在应用程序中按下面的代码来配置消息翻译

4、新建\common\messages\zh-CN\commonAttributeLabels\kcucMembers.php、\common\messages\zh-CN\not_specified_category.php,如图4:

新建\common\messages\zh-CN\commonAttributeLabels\kcucMembers.php、\common\messages\zh-CN\not_specified_category.php

5、编辑\common\messages\zh-CN\commonAttributeLabels\kcucMembers.php,如图5:

编辑消息翻译文件

6、小技巧:zh-CN下可先勾选Generate Labels from DB Comments,Preview时复制模型类下的public function attributeLabels(),再编辑,如图6;

小技巧:zh-CN下可先勾选Generate Labels from DB Comments,Preview时复制模型类下的public function attributeLabels(),再编辑

7、测试,
$model = new \common\models\KcucMembers;

// 显示为 “Mobile”
echo $model->getAttributeLabel(‘mobile’);

默认的 [[yii\base\Application::$sourceLanguage|源语言]] 值是 en-US,即美国英语,保持不变,如果[[yii\base\Application::$language|目标语言]]未设置,或者设置为en-US,则
打印出”Mobile”,如图7:

如果[[yii\base\Application::$language|目标语言]]未设置,或者设置为en-US,则
打印出”Mobile”

8、默认的 [[yii\base\Application::$sourceLanguage|源语言]] 值是 en-US,即美国英语,保持不变,如果[[yii\base\Application::$language|目标语言]]设置为zh-CN,则
打印出”用户手机”,如图8:

如果[[yii\base\Application::$language|目标语言]]设置为zh-CN,则
打印出”用户手机”

永夜