通過 gettext 擴展實現(xiàn)多語言

  • 由于準(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 的名字即可生效。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容