國際化翻譯:為走向國際化提前做好翻譯準(zhǔn)備

2018-11-21 21:17 更新

Your new understanding has made you powerful. Please use your new powers for good.

1.25.1 固定的中文寫法

一直以來,我們都是硬編碼方式返回中文的文案或者提示,如:

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

這種寫法在項(xiàng)目根本不需要考慮國際化翻譯時,是完全沒問題的。

1.25.2 通用的翻譯寫法

當(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' => '用戶不存在',
);

(1)當(dāng)存在動態(tài)變量時?

有時,我們需要動態(tài)返回一些值,這里可以用 大括號 將需要動態(tài)替換的值包住并提供替換的參數(shù)即可,一如:

echo T('hello {name}', array('name' => 'dogstar'));  

如果對應(yīng)的中文翻譯是:

'hello {name}' => '您好,{name}',

將會看到輸出:

您好,dogstar

(2)當(dāng)多個動態(tài)變量時,還可以這樣省略變量名

如果要簡化動態(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

(3)當(dāng)翻譯不存在時?

翻譯不存在,有兩種場景:一是指定的語言包不存在;二是語言包存在但翻譯不存在。無論何種情況,找不到翻譯時,都會用代碼硬編碼的內(nèi)容返回。

1.25.3 語言的設(shè)定

當(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']);

1.25.4 添加語言翻譯包

有時需要手動添加語言翻譯包,因?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)目路徑,其他的加載過程和原來的一樣。

1.25.5 建議

所以,你可以輕松看到,所謂的翻譯也只是通過數(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)為也是有用的:

  • 1、便于產(chǎn)品維護(hù)接口返回的提示文案;
  • 2、被同行問到時,你們有支持i18n嗎?我們也可以笑著回答:有 ^_^ ;

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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號