W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗(yàn)值獎勵
Your new understanding has made you powerful. Please use your new powers for good.
一直以來,我們都是硬編碼方式返回中文的文案或者提示,如:
$rs['msg'] = '用戶不存在';
這種寫法在項(xiàng)目根本不需要考慮國際化翻譯時,是完全沒問題的。
當(dāng)我們需要進(jìn)行翻譯時,可以這樣進(jìn)行調(diào)整:
$rs['msg'] = T('user not exists');
然后在對應(yīng)的翻譯文件中(如中文對應(yīng)文件是:./Language/zh_cn/common.php)添加對應(yīng)的翻譯即可:
// $vim ./Language/zh_cn/common.php
return array(
'user not exists' => '用戶不存在',
);
有時,我們需要動態(tài)返回一些值,這里可以用 大括號 將需要動態(tài)替換的值包住并提供替換的參數(shù)即可,一如:
echo T('hello {name}', array('name' => 'dogstar'));
如果對應(yīng)的中文翻譯是:
'hello {name}' => '您好,{name}',
將會看到輸出:
您好,dogstar
如果要簡化動態(tài)變量的傳遞,可以這樣:
echo T('{0} I love you because {1}', array('PhalApi', 'no reasons'));
如果對應(yīng)的中文翻譯是:
'{0} I love you because {1}' => '{0} 我愛你因?yàn)閧1}',
將會看到輸出:
PhalApi 我愛你因?yàn)閚o reasons
翻譯不存在,有兩種場景:一是指定的語言包不存在;二是語言包存在但翻譯不存在。無論何種情況,找不到翻譯時,都會用代碼硬編碼的內(nèi)容返回。
當(dāng)我們擁有了多種語言時,則可以在入口/初始化文件中,選擇設(shè)定需要的語言。
SL('zh_cn'); //SL()函數(shù)等效于PhalApi_Translator::setLanguage()
參數(shù)即為語言包的路徑名,如下面的en, zh_cn:
.
|-- en
| `-- common.php
`-- zh_cn
`-- common.php
此處,也可以通過客戶端傳遞參數(shù)來自行選擇語言。簡單地:
SL($_GET['lan']);
有時需要手動添加語言翻譯包,因?yàn)閷?yīng)的翻譯不一定在項(xiàng)目的./Language下,如擴(kuò)展類庫。
當(dāng)需要添加額外的語言翻譯包時,可以這樣添加:
PhalApi_Translator::addMessage(API_ROOT . '/Library/User');
在User這個目錄下的翻譯包類似地,為:
./Language/
└── zh_cn
└── common.php
1 directory, 1 file
相當(dāng)于追加一個額外的項(xiàng)目路徑,其他的加載過程和原來的一樣。
所以,你可以輕松看到,所謂的翻譯也只是通過數(shù)組下標(biāo)找一下對應(yīng)的內(nèi)容而已,沒有太多的技術(shù)性,也沒有過多的性能問題。
但正是有這樣提前周到的國際化準(zhǔn)備,我們可以對外(如像產(chǎn)品、BOSS和外界)傳送這樣一個隱喻: 我們的項(xiàng)目可以快速支持國際翻譯 。
這聽起來多么高大尚啊!因?yàn)槟切┎欢夹g(shù)的人,根本不在乎是用PHP的數(shù)組來存放還是什么技術(shù),而在于能不能走向國際化。
SO?既然翻譯”無傷大雅“(指對性能的影響和對代碼編寫的阻礙),統(tǒng)一使用翻譯的寫法是值得推薦的。
即使項(xiàng)目沒有機(jī)會用到真正的翻譯,但至少有兩點(diǎn)我認(rèn)為也是有用的:
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: