Yii1.x 国际化三步走

2020-07-29  本文已影响0人  Nomandia

本文介绍了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]就可以用来自动生成配置文件,步骤如下:

  1. 复制/framework/messages/config.php到项目路径下/protected/messages/config.php,其中config.php也可以叫别的
  2. 输入命令 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,即当languagesourceLanguage一样时不会进行翻译

以后翻译直接写好代码,完事通过命令自动刷新翻译文件就行了。至于最终由谁来将中文译成其他文字那不在讨论范围了。

上一篇下一篇

猜你喜欢

热点阅读