Yii技巧汇总

在Yii的学习中总会遇见各种问题,这个时候如果每个问题都重新开一篇文章反倒是显得有些混乱了。所以开了这篇文章。之后的Yii的一些问题,技巧都会汇总在这篇文章里。如果您是Yii的新手,欢迎来本博客一起学习和探讨知识。

1.Yii国际化,改变目标为中文

一个 Yii 应用使用两种语言:yii\base\Application::$sourceLanguage 和 yii\base\Application::$language 。前者指的是写在代码中的语言,后者是向最终用户显示内容的语言。 而信息翻译服务主要是将文本消息从原语言翻译到目标语言。

可以用类似下面的应用程序配置来配置应用程序语言:

return [
    // 设置目标语言为中文
    'language' => 'zh-CN',

    // 设置源语言为英语
    'sourceLanguage' => 'en-US',

    ......
];

默认的 yii\base\Application::$sourceLanguage 值是 en-US,即美国英语。 建议你保留此默认值不变,因为通常让人将英语翻译成其它语言要比将其它语言翻译成其它语言容易得多。

你经常需要根据不同的因素来动态地设置 yii\base\Application::$language ,如最终用户的语言首选项。 要在应用程序配置中配置它,你可以使用下面的语句来更改目标语言:

// 改变目标语言为中文
\Yii::$app->language = 'zh-CN';

消息翻译

消息翻译服务用于将一条文本信息从一种语言(通常是 yii\base\Application::$sourceLanguage ) 翻译成另一种语言(通常是 yii\base\Application::$language)。 它的翻译原理是通过在语言文件中查找要翻译的信息以及翻译的结果。如果要翻译的信息可以在语言文件中找到,会返回相应的翻译结果; 否则会返回原始未翻译的信息。

为了使用消息翻译服务,需要做如下工作:

调用 Yii::t() 方法且在其中包含每一条要翻译的消息;
配置一个或多个消息来源,能在其中找得到要翻译的消息和翻译结果;
让译者翻译信息并将它们存储在消息来源。
这个 Yii::t() 方法的用法如下,

echo \Yii::t('app', 'This is a string to translate!');

第一个参数指储存消息来源的类别名称,第二个参数指需要被翻译的消息。

这个 Yii::t() 方法会调用 i18n 应用组件 来实现翻译工作。这个组件可以在应用程序中按下面的代码来配置,

'components' => [
    // ...
    'i18n' => [
        'translations' => [
            'app*' => [
                'class' => 'yii\i18n\PhpMessageSource',
                //'basePath' => '@app/messages',
                //'sourceLanguage' => 'en-US',
                'fileMap' => [
                    'app' => 'app.php',
                    'app/error' => 'error.php',
                ],
            ],
        ],
    ],
],

在上面的代码中,配置了由 yii\i18n\PhpMessageSource 所支持的消息来源。模式 app* 表示所有以 app 开头的消息类别名称都使用这个翻译的消息来源。该 yii\i18n\PhpMessageSource 类使用 PHP 文件来存储消息翻译。 每 PHP 文件对应单一类别的消息。默认情况下,文件名应该与类别名称相同。但是,你可以配置 yii\i18n\PhpMessageSource::fileMap 来映射一个类别到不同名称的 PHP 文件。在上面的例子中, 类别 app/error 被映射到PHP文件 @app/messages/zh-CN/app.php(假设 zh-CN 为目标语言)。如果没有此配置, 该类别将被映射到 @app/messages/zh-CN/app/error.php 。

下面写个简单的例子,配置映射到app.php文件的时候,我们需要在app文件中return出我们需要翻译的数据。

return[
    'STATUS_ACTIVE' => '启用',
    'STATUS_INACTIVE' => '禁用',
    'STATUS_DELETED' => '删除',
    'YES' => '是',
    'NO' => '否',
    'Login'=>'登陆',
];

在controller或者views文件中使用Yii::t()来调用

<?= Html::submitButton( Yii::t('app', 'Login'), ['class' => 'boton-dark top-mini', 'name' => 'login-button','style'=>'width:100%;']) ?>

这样就够将需要翻译的替换成为中文,如需更多详细内容,请查看官方文档
http://www.yiichina.com/doc/guide/2.0/tutorial-i18n

2 条评论

发表评论

*

    • 是否映射到app文件,以及你的app文件是否包含需要翻译的信息,如果你的信息不是中文而是英文那输出的时候也是英文,要确保你的app文件所对应的信息就是中文