Yii2語(yǔ)言國(guó)際化配置

轉(zhuǎn)載

Yii2語(yǔ)言國(guó)際化配置

最近想將博客做成支持多語(yǔ)言的,還好Yii2支持這個(gè)功能,于是查看了下官方的文檔,哎,看了半天不知道干嘛用的,于是各種百度,Google的搜索,最終才明白原來(lái)很簡(jiǎn)單,只是官方寫(xiě)的太復(fù)雜

下面介紹下具體的使用步驟,具體介紹我就不寫(xiě)了,官方寫(xiě)比我清楚,我就寫(xiě)怎么使用

第一步 創(chuàng)建i18n配置文件

./yii message/config @app/config/i18.php // yii 在項(xiàng)目目錄下 Yii2創(chuàng)建的時(shí)候自動(dòng)生成的

執(zhí)行完命令之后會(huì)在項(xiàng)目根目錄config下創(chuàng)建一個(gè)i18n.php文件

為什么要?jiǎng)?chuàng)建這個(gè)文件,因?yàn)槲覀優(yōu)榱硕嗾Z(yǔ)言處理,需要生成一個(gè)對(duì)應(yīng)的映射文件,只要生成就好了,稍后的配置程序會(huì)自動(dòng)調(diào)用處理

第二步 修改配置規(guī)則

打開(kāi)config/i18n.php,看下生成的配置文件的代碼,如下:

return [
    'color' => null,
    'interactive' => true,
    'help' => null,
    'sourcePath' => '@yii',
    'messagePath' => '@yii/messages',
    'languages' => [],
    'translator' => 'Yii::t',
    'sort' => false,
    'overwrite' => true,
    'removeUnused' => false,
    'markUnused' => true,
    'except' => [
        '.svn',
        '.git',
        '.gitignore',
        '.gitkeep',
        '.hgignore',
        '.hgkeep',
        '/messages',
        '/BaseYii.php',
    ],
    'only' => [
        '*.php',
    ],
    'format' => 'php',
    'db' => 'db',
    'sourceMessageTable' => '{{%source_message}}',
    'messageTable' => '{{%message}}',
    'catalog' => 'messages',
    'ignoreCategories' => [],
    'phpFileHeader' => '',
    'phpDocBlock' => null,
];

修改后的代碼,如下:

return [
    'color' => null,
    'interactive' => true,
    'help' => null,
    'sourcePath' => '@app',
    'messagePath' => '@app/messages',
    'languages' => ['zh-CN', 'ru-RU'],
    'translator' => 'Yii::t',
    'sort' => false,
    'overwrite' => true,
    'removeUnused' => false,
    'markUnused' => true,
    'except' => [
        '.svn',
        '.git',
        '.gitignore',
        '.gitkeep',
        '.hgignore',
        '.hgkeep',
        '/messages',
        '/BaseYii.php',
        'vendor',
    ],
    'only' => [
        '*.php',
    ],
    'format' => 'php',
    'db' => 'db',
    'sourceMessageTable' => '{{%source_message}}',
    'messageTable' => '{{%message}}',
    'catalog' => 'messages',
    'ignoreCategories' => [],
    'phpFileHeader' => '',
    'phpDocBlock' => null,
];

我這里只改了兩個(gè)地方

'sourcePath' => '@app', // 將@yii改為@app 只處理我們自己應(yīng)用中的代碼
'messagePath' => '@app/messages', // 將@yii/messages改為@app/messages 將需要翻譯的字段提取出來(lái)要放的目錄
'languages' => ['zh-CN', 'ru-RU'], // 要翻譯成目標(biāo)的語(yǔ)言,我這里定義了一個(gè)"中文"和"俄語(yǔ)"

'except' => [
    '.svn',
    '.git',
    '.gitignore',
    '.gitkeep',
    '.hgignore',
    '.hgkeep',
    '/messages',
    '/BaseYii.php',
    'vendor', // 將vendor目錄下的過(guò)濾掉,不然可能太多了
],

第三步 生成翻譯配置文件

執(zhí)行下面的命令

./yii message/extract @app/config/i18n.php

執(zhí)行完之后會(huì)在messages目錄下(如果沒(méi)有messages目錄的話需要手動(dòng)創(chuàng)建下)得到如下的目錄結(jié)構(gòu)

├── ru-RU
│   └── app.php
└── zh-CN
    └── app.php

提示下再做這個(gè)操作之前,需要在自己的項(xiàng)目中有類似Yii:t()的調(diào)用,比如我這里在components/HeaderWidget.php這個(gè)文件中

Yii::t('app', 'Home')

這里的app的作用是用來(lái)進(jìn)行文件分類的,我這里暫時(shí)沒(méi)有計(jì)劃生成的時(shí)候會(huì)將所有需要翻譯的字段放在app開(kāi)頭命名的php文件app.php文件中
如果像下面這樣調(diào)用的話

Yii::t('appp', 'Home')

會(huì)生成一個(gè)appp.php的文件

第四步 翻譯配置文件

看下中文的翻譯文件messages/zh-CN/app.php,我的是下面這個(gè)

return [
    'Archive' => '',
    'Autokid' => '',
    'Blog' => '',
    'Ctime' => '',
    'IP地址' => '',
    'UserAgent' => '',
    '主題' => '',
    '內(nèi)容' => '',
    '姓名' => '',
    '日期' => '',
    '郵箱地址' => '',
    '頁(yè)面路徑' => '',
    'Home' => '首頁(yè)', // 右邊的鍵值對(duì)應(yīng) Yii::t('app', 'Home')中的Home,只需要在value中寫(xiě)入需要的漢字就可以了。
];

第五步 修改目標(biāo)國(guó)際化語(yǔ)言

修改配置文件

'language' => 'zh-CN', // 指定為要翻譯的語(yǔ)言

再打開(kāi)網(wǎng)頁(yè),就可以看到已經(jīng)翻譯成了對(duì)應(yīng)需要的語(yǔ)言,當(dāng)然這樣的配置很不靈活,如果是部署多態(tài)機(jī)器并通過(guò)域名或者其他方式來(lái)實(shí)現(xiàn)的話,也是可以的,這里的話我建議如下方式

創(chuàng)建自己的Controller,然后將語(yǔ)言配置放在Session中,通過(guò)獲取Session中的語(yǔ)言來(lái)更換全站的語(yǔ)言。具體見(jiàn)后面分享

提示,網(wǎng)站很多地方提到要加個(gè)配置,官方也是

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

我這邊在配置的時(shí)候沒(méi)有加,運(yùn)行也都是正常的,如有遇到問(wèn)題,可以一起溝通交流下。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 寫(xiě)文初衷 i18n組件的主要作用就是用來(lái)轉(zhuǎn)化網(wǎng)站的展示語(yǔ)言的,即網(wǎng)站國(guó)際化。鑒于yii2關(guān)于i18n組件的配置使用...
    playwolf719閱讀 3,735評(píng)論 0 4
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,598評(píng)論 19 139
  • 點(diǎn)我查看本文集的說(shuō)明及目錄。 本項(xiàng)目相關(guān)內(nèi)容包括: 實(shí)現(xiàn)過(guò)程: CH7 創(chuàng)建在線商店 CH8 管理支付和訂單 CH...
    學(xué)以致用123閱讀 3,864評(píng)論 0 6
  • awesome-php 收集整理一些常用的PHP類庫(kù), 資源以及技巧. 以便在工作中迅速的查找所需... 這個(gè)列表...
    guanguans閱讀 4,763評(píng)論 0 34
  • “天道忌巧”,人生要有笨拙的功夫。一語(yǔ)出自曾國(guó)藩,當(dāng)時(shí)的晚清,在一種虛浮、圓滑、取巧的氛圍中,因此曾國(guó)藩大膽提...
    般若秋雪閱讀 2,877評(píng)論 1 2

友情鏈接更多精彩內(nèi)容