Yii2多语言

背景: 如果项目有要求需要用到多语言的话,那么就需要引入语言包了。

要添加语言包,需要现在config/main.php配置:

'i18n' => [
            'translations' => [
                'lang*' => [
                    'class' => 'yii\i18n\PhpMessageSource',
                ]
            ],
        ],

上面的 lang*表示可以加载lang+任意合法文件名的文件如:

 

接下来是lang.php的内容:

return [
    'title' => '',
    'ws_id' => '工号',
    'phone' => '手机',
    'next'  =>  '下一步',
    'cancel'    =>  '取消',

];

调用方式如下:

$this->title = Yii::t('lang_home', 'Title');

 

另外,有时候会遇到一些比较特殊需要转化的字符串如   常量+变量+常量 (这边文章在2017年发表了) 2017就是变量,像这种要怎么做呢?

我们先来看一下 Yii2 自带的函数 t 

    public static function t($category, $message, $params = [], $language = null)
    {
        if (static::$app !== null) {
            return static::$app->getI18n()->translate($category, $message, $params, $language ?: static::$app->language);
        }

        $placeholders = [];
        foreach ((array) $params as $name => $value) {
            $placeholders['{' . $name . '}'] = $value;
        }

        return ($placeholders === []) ? $message : strtr($message, $placeholders);
    }

上面第三个参数是对参数的解析,什么参数呢?我们来看看下面的例子:

 'password {passwdMinLength}'
                                => '密码长度必须大于或等于{passwdMinLength}',

那么可以这么解析:

$this->title = Yii::t('文件名', password',['passwdMinLength' => 5]);

那么结果就是:密码长度必须大于或等于5

 

posted @ 2017-03-13 19:55  WilburXu  阅读(444)  评论(0编辑  收藏  举报