- 由于準(zhǔn)備做一個國際商城,因此避免不了要進行多語言的切換,目前第一版只做中英文的切換;在網(wǎng)上查找了很多資料,實現(xiàn)的方式基本大同小異;不同的語言生成不同的語言包文件,或者通過前端調(diào)用渲染頁面,或者直接通過后端渲染;比較之后決定采取 php 的 gettext 來實現(xiàn)多語言;
第一步:確保本地啟用 gettext 擴展,win 下,打開 php.ini 配置文件,去掉 extension=php_gettext.dll 前面的 “;”,保存重啟服務(wù);
第二步:現(xiàn)在語言包生成工具,gettext 工具(安裝完成后將其添加進系統(tǒng)環(huán)境變量)和 Poedit工具(用來生成語言包二進制文件)
第三步:書寫測試代碼
- 新建 setLan.php 文件,接收前臺傳入?yún)?shù),決定使用那個語言包
$lan = isset($_GET [ 'lan' ]) ? $_GET [ 'lan' ] : 'en_US';
if ( $lan == 'zh_CN' ) {
putenv('LANG=zh_CN'); //設(shè)置環(huán)境變量
} elseif ( $lan == 'en_US' ) {
putenv('LANG=en_US');
} else {
putenv('LANG=zh_TW');
}
$domain = 'index'; //域名,可以任意取個有意義的名字,不過要跟相應(yīng)的.mo文件的文件名相同(不包括擴展名)。
bindtextdomain($domain, "../../locale/" ); //設(shè)置某個域的mo文件路徑
bind_textdomain_codeset($domain, 'UTF-8' ); //設(shè)置mo文件的編碼為UTF-8
textdomain($domain);
- 新建 test.php 渲染 html 頁面
<div style="margin-left:200px">
<div><?php echo gettext('test1');?></div>
</div>
- 進入 cmd 界面,cd 到 test.php 目錄下,執(zhí)行命令
xgettext -d index test.php --from-code=utf-8
index 為生成的 po 文件的名字
- 通過 Poedit 打開 index.po 文價,編輯保存,生成 index.mo 二進制文件,此文件為語言包文件,通過該文件實現(xiàn)多語言切換
注意:
1、語言包的目錄結(jié)構(gòu)固定,必須按照下圖書寫

image.png
2、如果想要在老的 po 文件基礎(chǔ)上添加新的字段,首先到開老的 po 文件,選擇“編目->從 POT 文件更新”,在右下角選擇 PO 翻譯文件,找到新的 po 文件打開,兩文件即能合并到一起;
3、重新編輯添加新的翻譯字段后,可能翻譯無法馬上實現(xiàn),修改語言包文件 mo 的名字即可生效。