2.7 PhalApi 2.x 國際化

2018-07-28 21:25 更新

i18n國際化

一直以來,在項(xiàng)目開發(fā)中,都是以硬編碼方式返回中文文案或者提示信息的,如:

$rs['msg'] = '用戶不存在';

這種寫法在根本不需要考慮國際化翻譯的項(xiàng)目中是沒問題的,但當(dāng)開發(fā)的項(xiàng)目面向的是國際化用戶人群時(shí),使用i18n則是很有必要的。

語言設(shè)定

在初始化文件./public/init.php中,通過快速函數(shù)\PhalApi\SL($language)可以設(shè)定當(dāng)前所使用的語言。例如設(shè)置語言為簡體中文,可以:

// 翻譯語言包設(shè)定
\PhalApi\SL('zh_cn');   

設(shè)定的語言即為語言目錄下對應(yīng)語言的目錄名稱,例如可以是:de、en、zh_cn、zh_tw等。

$ tree ./language/
./Language/
├── de
├── en
...
├── zh_cn
└── zh_tw

此處,也可以通過客戶端傳遞參數(shù)動(dòng)態(tài)選擇語言。簡單地:

\PhalApi\SL(isset($_GET['lan'] ? $_GET['lan'] : 'zh_cn');

翻譯包

翻譯包的文件路徑為:./language/語言/common.php,例如簡體中文zh_cn對應(yīng)的翻譯包文件為:./Language/zh_cn/common.php。此翻譯包文件返回的是一個(gè)數(shù)組,其中鍵為待翻譯的內(nèi)容,值為翻譯后的內(nèi)容。例如:

return array(
    'Hi {name}, welcome to use PhalApi!' => '{name}您好,歡迎使用PhalApi!',
    'user not exists' => '用戶不存在',
);

對于需要?jiǎng)討B(tài)替換的參數(shù),可以使用大括號括起來,如名字參數(shù)name對應(yīng)為{name}。除了這種關(guān)聯(lián)數(shù)組的方式,還可以使用索引數(shù)組的方式來傳遞動(dòng)態(tài)參數(shù)。例如:

return array(
    ... ...
    'I love {0} because {1}' => '我愛{0},因?yàn)閧1}',
);

通用的翻譯寫法

當(dāng)需要進(jìn)行翻譯時(shí),可以使用快速函數(shù)\PhalApi\T($msg, $params = array()),第一個(gè)參數(shù)為待翻譯的內(nèi)容,第二個(gè)參數(shù)為可選的動(dòng)態(tài)參數(shù)。例如前面的文案調(diào)整成:

$rs['msg'] = \PhalApi\T('user not exists');

最后顯示的內(nèi)容將是對應(yīng)翻譯包里的翻譯內(nèi)容,如這里對應(yīng)的是:

// 文件 ./language/zh_cn/common.php
return array(
    ... ...
    'user not exists' => '用戶不存在',
);

當(dāng)翻譯中存在動(dòng)態(tài)參數(shù)時(shí),根據(jù)待翻譯中參數(shù)的傳遞方式,可以相應(yīng)提供對應(yīng)的動(dòng)態(tài)參數(shù)。例如對于關(guān)聯(lián)數(shù)組方式,可以:

// 輸出:dogstar您好,歡迎使用PhalApi!
echo \PhalApi\T('Hi {name}, welcome to use PhalApi!', array('name' => 'dogstar'));

關(guān)聯(lián)數(shù)組方式中參數(shù)的對應(yīng)關(guān)系由鍵名對應(yīng),而索引數(shù)組方式則要嚴(yán)格按參數(shù)出現(xiàn)的順序?qū)?yīng)傳值,例如:

// 輸出:我愛PhalApi,因?yàn)樗鼘W⒂诮涌陂_發(fā)
echo \PhalApi\T('I love {0} because {1}', array('PhalApi', '它專注于接口開發(fā)'));

若是翻譯不存在時(shí)怎么辦?翻譯不存在,有兩種情況:一種是指定的語言包不存在;另一種是語言包存在但翻譯不存在。無論何種情況,當(dāng)找不到翻譯時(shí),都會(huì)返回待翻譯時(shí)的內(nèi)容。

擴(kuò)展:添加翻譯包

默認(rèn)的翻譯包存放在項(xiàng)目根目錄的language目錄下。當(dāng)需要添加其他路徑的翻譯包時(shí),例如在進(jìn)行擴(kuò)展類庫開發(fā)時(shí)。

對于也擁有翻譯包的擴(kuò)展類庫,其翻譯包文件可以放在擴(kuò)展類庫本身目錄的language子目錄中,其結(jié)構(gòu)一樣。但由于不在項(xiàng)目根目錄下,這時(shí)需要手動(dòng)引入翻譯包目錄,以便框架可以加載識別。當(dāng)需要加載其他路徑的翻譯包時(shí),可以使用PhalApi/Translator::addMessage($path)進(jìn)行添加,后面添加的翻譯包會(huì)覆蓋前面的翻譯包。例如User擴(kuò)展類庫中的:

PhalApi\Translator::addMessage('/path/to/user/language');

這樣,就可以添加/path/to/user/language目錄下的翻譯包了。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號