2.7 PhalApi 2.x 國(guó)際化

2018-07-28 21:25 更新

i18n國(guó)際化

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

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

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

語(yǔ)言設(shè)定

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

  1. // 翻譯語(yǔ)言包設(shè)定
  2. \PhalApi\SL('zh_cn');

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

  1. $ tree ./language/
  2. ./Language/
  3. ├── de
  4. ├── en
  5. ...
  6. ├── zh_cn
  7. └── zh_tw

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

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

翻譯包

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

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

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

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

通用的翻譯寫法

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)