yidas/yii2-language

带有状态保持和映射功能的Yii 2框架语言扩展

安装: 69

依赖者: 0

建议者: 0

安全性: 0

星标: 3

关注者: 1

分支: 2

开放性问题: 0

类型:yii2-extension

1.1.0 2018-11-01 06:58 UTC

This package is auto-updated.

Last update: 2024-08-29 04:48:45 UTC


README

Yii 2语言扩展


带有状态保持和映射功能的Yii 2框架语言扩展

Latest Stable Version Latest Unstable Version License

特性

  • 语言映射与Yii2语言集成

  • 会话和Cookie存储支持

  • Yii2 i18n支持

概览

要求

此库需要以下内容

  • PHP 5.4.0+
  • Yii 2.0.0+

安装

通过Composer在您的Yii2项目中安装

composer require yidas/yii2-language

配置

使用yidas\components\Language添加组件,并配置相关设置

return [
    'bootstrap' => ['log', 'lang'],
    'language' => 'en-US',
    'components' => [
        'lang' => [
            'class' => 'yidas\components\Language',
            'languages' => [
                0 => 'en-US',
                1 => 'zh-TW',
                2 => 'zh-CN',
            ],
            'maps' => [
                'html' => [
                    0 => 'en',
                    1 => 'zh-Hant',
                    2 => 'zh-Hans',
                ],
            ],
            // 'storage' => 'session',
            // 'storageKey' => 'language',
        ],
        ...

引导

您可以将语言组件添加到bootstrap中,以保持会话和Cookie等语言存储工作

// `lang` component for example
return [
    'bootstrap' => ['lang'], 
    ...

使用

get()

获取当前语言

public string get($map=null)

示例

echo \Yii::$app->lang->get();  // en-US

您可以通过提供映射键作为第一个参数从映射中获取

echo \Yii::$app->lang->get('html');  // en

set()

同步设置当前语言到\Yii::$app->language

public boolean set($language)

示例

\Yii::$app->lang->set('zh-TW');

getByMap()

从$map获取自定义语言值

public string getByMap($mapKey)

示例

如果您必须按当前语言输出HTML语言值

echo \Yii::$app->lang->getByMap('html');  // en

setByMap()

使用$map中的自定义语言值进行设置

public boolean setByMap($mapKey, $mapValue)

示例

如果您必须通过输入HTML语言值来设置当前语言

$this->setByMap('html', 'zh-Hant');

isFirstCome()

首次访问检查,没有StorageRecord

hasStorageRecord()的逆别名

public boolean isFirstCome()

示例

if (Yii::$app->lang->isFirstCome()) {
    // Detetmine user ip to set current language
} 
else if (Yii::$app->lang->hasStorageRecord()) {
    // Means !(Yii::$app->lang->isFirstCome())
}

实现

更改语言的控制器

您可以添加控制器或操作来更改语言,如/language?language=zh-TW

<?php

namespace app\controllers;

use Yii;
use yii\web\Controller;

/**
 * The Controller for Language converting
 */
class LanguageController extends Controller
{
    public function actionIndex($language='')
    {
        $result = Yii::$app->lang->set($language);
        
        return $this->redirect(Yii::$app->request->referrer ?: Yii::$app->homeUrl);
    }
}

全局更改语言的BeforeAction

您可以在应用的引导阶段处理语言设置来全局设置语言。

例如,在on beforeAction函数中获取GET参数以设置语言

return [
    'on beforeAction' => function ($event) {
        // Always fetch language from get-parameter
        $lang = \Yii::$app->request->get('lang');
        // Set to given language with get-parameter
        if ($lang) {
            $result = \Yii::$app->lang->set($lang);
        }
    },
    ...
]

之后,通过在任何URL中提供lang参数,如/post/my-article?lang=zh-TW,即可更改语言。