本文介绍了Yii1.x版本的国际化方案及相关问题解决办法
一 、Yii 国际化配置
找到main.php
并按照如下修改配置
return [
'sourceLanguage'=>'zh_cn', // 源语言、即不需要翻译的默认语言
'language'=>'zh_cn', // 当前默认语言
'components' => [
// 组件配置
]
];
配置中
sourceLanguage
一般指定zh_cn
就好,中文是不需要翻译的;而language
默认跟他一样,需要注意的是:二者一样时是不会翻译文本而是原样输出。
二、 代码处理
这里主要指view
的代码
// 1. 普通
Yii::t('app', '要翻译的文字');
// 输出:要翻译的文字
// 2. 替换关键字
Yii::t('app', ' {0},你好!', ['0'=>'世界']);
// 输出:世界,你好!
// 3. 选择符
Yii::t('app', '1#有效|2#无效', 2); // 注意第三个参数必须是数字
// 输出:无效
// 4. 高级范
Yii::t('app', '1#有效|0#无效|n>1#神秘数字n', 5); // 此处n表示输入的第三个变量
// 输出:神秘数字n
其中app
表示文件名,可以根据需要自行分类。切换语言可以这样:
$targetLang = 'en_us';
Yii:app()->setLanguage($targetLang); // 切换后相当于配置中的language变为此语音
其实名字可以随便起,只需要确保有相关配置即可
三、生成翻译文件
大家都过yii的命令行吧,其中有一个 yiic message [option]
就可以用来自动生成配置文件,步骤如下:
- 复制
/framework/messages/config.php
到项目路径下/protected/messages/config.php
,其中config.php
也可以叫别的 - 输入命令
yiic message config.php
,等几秒后便根据配置自动生成了代码中用Yii::t
方法输出的翻译文件,连文件名都区分了
接下来我们看下config.php
都有什么
<?php
<?php
return array(
'sourcePath'=>dirname(__FILE__).DIRECTORY_SEPARATOR.'..', // 源语言目录
// 其他语言目录,sourcePath同级
'messagePath'=>dirname(__FILE__).DIRECTORY_SEPARATOR.'..'.DIRECTORY_SEPARATOR.'messages',
'languages'=>array('zh_cn','en_us','ko_kr'), // 待翻译的语言
'fileTypes'=>array('php'), // 检测的文件扩展名
'overwrite'=>true, // 是否覆盖源文件,开启后生成快
'exclude'=>array( // 要排除的文件或目录
'.svn',
'.gitignore',
'yiilite.php',
'yiit.php',
'/i18n/data',
'/messages',
'/vendors',
'/web/js',
),
);
FAQ
1. 语言不能正常切换
检查下sourceLanguage
是否为英文en_us
,即当language
和sourceLanguage
一样时不会进行翻译
以后翻译直接写好代码,完事通过命令自动刷新翻译文件就行了。至于最终由谁来将中文译成其他文字那不在讨论范围了。