PHP項(xiàng)目多語言配置平臺(tái)實(shí)現(xiàn)過程解析
這個(gè)月用ant design的方式重構(gòu)了我在15年的時(shí)候?qū)懙囊粋€(gè)給主端項(xiàng)目寫的多語言配置后臺(tái)。發(fā)現(xiàn)當(dāng)時(shí)的設(shè)計(jì)很“深”,深到有些功能根本就沒用過,根據(jù)這幾年的使用情況,重構(gòu)了這一版本,無論是體驗(yàn)上還是實(shí)用性上都有所提高。今天抽時(shí)間把當(dāng)時(shí)的一些想當(dāng)然的需求拿出來總結(jié)下吧:
使用的技術(shù)
我們的項(xiàng)目主要是PHP為主要開發(fā)語言。使用gettext擴(kuò)展實(shí)現(xiàn)國(guó)際化的。即通過人工的方式按照規(guī)則寫入.po文件,然后調(diào)用某函數(shù)生成.mo 文件,放到生產(chǎn)環(huán)境的文件夾下,然后在代碼里初始化一些內(nèi)容進(jìn)行引用。
gettext
gettext是php實(shí)現(xiàn)國(guó)際化的基本方式。使用方法如下:
安裝php擴(kuò)展gettext,這個(gè)同php其他擴(kuò)展一樣,這里就不詳細(xì)介紹了。
linux環(huán)境安裝msgfmt,安好后可用此命令將po文件生成.mo文件。
基本使用
建立文件如:zh_CN.po (.po是個(gè)文本文件),內(nèi)容如下:
msgid "repeat content!"
msgstr "文本內(nèi)容相同"
利用msgfmt將.po文件生成.mo文件。
msgfmt -o {$lang_path}/zh_CN.mo {$lang_path}/zh_CN.po
將生成的.po文件拷貝到你指定的文件夾 target_dir 下。
在php代碼里面初始化。
$lang = 'zh_CN'; //
setlocale(LC_MESSAGES, 'en_US.UTF-8'); // 函數(shù)設(shè)置地區(qū)信息(地域信息)
bindtextdomain($lang, {$pofile_path})); // 用來設(shè)置文本域目錄
textdomain($lang); // 設(shè)置默認(rèn)域
bind_textdomain_codeset($lang, 'UTF-8');
在php的請(qǐng)求里面使用如下方法即可得到語境下對(duì)應(yīng)詞組的內(nèi)容:
gettext("repeat content!") // 文本內(nèi)容必須與1中的內(nèi)容一致。
或者
_("repeat content!"); // 與上面函數(shù)相同
管理后臺(tái)
以前都是開發(fā)人員自己上傳,后來為了解放開發(fā)者,讓產(chǎn)品自己操作,我們進(jìn)行了如下改進(jìn):
- 做成可配置后臺(tái),產(chǎn)品自己根據(jù)內(nèi)容填寫。
- 配置后臺(tái)分成入口(權(quán)限控制),展示列表頁,即每個(gè)詞組key對(duì)應(yīng)各種語言下的內(nèi)容。
- 詳情頁,詳情頁支持批量添加。
- 點(diǎn)擊按鈕觸發(fā)發(fā)布。
- 發(fā)布高級(jí)功能:生成列表和支持比對(duì),對(duì)歷史版本發(fā)布(拷貝歷史版本到對(duì)應(yīng)的文件夾下)。
改進(jìn)
經(jīng)過一段時(shí)間的使用,我決定根據(jù)實(shí)際使用情況重構(gòu)一版。
- 頁面全部采用ant design pro為基礎(chǔ)的框架,采用前后端分離的樣式,我特別推崇ant design的設(shè)計(jì)思想,和人機(jī)交互的開發(fā)方法,是后端開發(fā)者的福音。
- 淡化歷史版本的記錄。雖然有個(gè)好些,但是這個(gè)確實(shí)看的人少,基本沒有。
- 重新發(fā)布,如果有時(shí)間就做,沒時(shí)間就不做。
- 對(duì)于一些特殊內(nèi)容的規(guī)定,如如果一個(gè)詞組key在某種語言環(huán)境下顯示為空,該怎么處理等等。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Swoole實(shí)現(xiàn)異步投遞task任務(wù)案例詳解
這篇文章主要介紹了Swoole實(shí)現(xiàn)異步投遞task任務(wù)案例,結(jié)合實(shí)例形式詳細(xì)分析了Swoole異步投遞task任務(wù)的原理、實(shí)現(xiàn)方法及操作注意事項(xiàng),需要的朋友可以參考下2019-04-04PHP數(shù)據(jù)源架構(gòu)模式之表入口模式實(shí)例分析
這篇文章主要介紹了PHP數(shù)據(jù)源架構(gòu)模式之表入口模式,結(jié)合實(shí)例形式分析了PHP表入口模式的相關(guān)概念、原理、使用方法及操作注意事項(xiàng),需要的朋友可以參考下2020-01-01PHP實(shí)現(xiàn)的用戶注冊(cè)表單驗(yàn)證功能簡(jiǎn)單示例
這篇文章主要介紹了PHP實(shí)現(xiàn)的用戶注冊(cè)表單驗(yàn)證功能,結(jié)合簡(jiǎn)單實(shí)例形式分析了php form表單提交、數(shù)據(jù)庫(kù)查詢、正則驗(yàn)證等相關(guān)操作技巧,需要的朋友可以參考下2019-02-02PHP pthreads v3下的Volatile簡(jiǎn)介與使用方法示例
這篇文章主要介紹了PHP pthreads v3下的Volatile簡(jiǎn)介與使用方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了PHP pthreads v3下Volatile的功能、原理、使用方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2020-02-02php中操作memcached緩存進(jìn)行增刪改查數(shù)據(jù)的實(shí)現(xiàn)代碼
這篇文章主要介紹了php中操作memcached緩存進(jìn)行增刪改查數(shù)據(jù)的實(shí)現(xiàn)代碼,需要的朋友可以參考下2014-08-08php rmdir使用遞歸函數(shù)刪除非空目錄實(shí)例詳解
我們大家都知道,php rmdir()函數(shù)用于刪除空目錄,但如果要?jiǎng)h除非空目錄,我們必須將非空目錄中的文件或子目錄刪除,本文章向大家介紹php如何使用遞歸函數(shù)刪除非空目錄,需要的朋友可以參考一下2016-10-10