Yii2多语言

Posted WilburXu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

 

以上是关于Yii2多语言的主要内容,如果未能解决你的问题,请参考以下文章

yii2 多语言 配置, 带cookie

Yii 2 —— 基于Mustache的页面多语言解决方案

WPF中的多语言[关闭]

从 .cs 部分代码访问多语言资源

低代码平台多语言国际化(i18n)技术方案

php WPML多语言短代码