1. 程式人生 > 程式設計 >PHP專案多語言配置平臺實現過程解析

PHP專案多語言配置平臺實現過程解析

這個月用ant design的方式重構了我在15年的時候寫的一個給主端專案寫的多語言配置後臺。發現當時的設計很“深”,深到有些功能根本就沒用過,根據這幾年的使用情況,重構了這一版本,無論是體驗上還是實用性上都有所提高。今天抽時間把當時的一些想當然的需求拿出來總結下吧:

使用的技術

我們的專案主要是PHP為主要開發語言。使用gettext擴充套件實現國際化的。即通過人工的方式按照規則寫入.po檔案,然後呼叫某函式生成.mo 檔案,放到生產環境的資料夾下,然後在程式碼裡初始化一些內容進行引用。

gettext

gettext是php實現國際化的基本方式。使用方法如下:

安裝php擴充套件gettext,這個同php其他擴充套件一樣,這裡就不詳細介紹了。

linux環境安裝msgfmt,安好後可用此命令將po檔案生成.mo檔案。

基本使用

建立檔案如:zh_CN.po (.po是個文字檔案),內容如下:

msgid "repeat content!"
msgstr "文字內容相同"

利用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'); // 函式設定地區資訊(地域資訊)

bindtextdomain($lang,{$pofile_path})); // 用來設定文字域目錄
textdomain($lang); // 設定預設域
bind_textdomain_codeset($lang,'UTF-8');

在php的請求裡面使用如下方法即可得到語境下對應片語的內容:

gettext("repeat content!") // 文字內容必須與1中的內容一致。

或者

_("repeat content!"); // 與上面函式相同

管理後臺

以前都是開發人員自己上傳,後來為了解放開發者,讓產品自己操作,我們進行了如下改進:

  • 做成可配置後臺,產品自己根據內容填寫。
  • 配置後臺分成入口(許可權控制),展示列表頁,即每個片語key對應各種語言下的內容。
  • 詳情頁,詳情頁支援批量新增。
  • 點選按鈕觸發釋出。
  • 釋出高階功能:生成列表和支援比對,對歷史版本釋出(拷貝歷史版本到對應的資料夾下)。

改進

經過一段時間的使用,我決定根據實際使用情況重構一版。

  • 頁面全部採用ant design pro為基礎的框架,採用前後端分離的樣式,我特別推崇ant design的設計思想,和人機互動的開發方法,是後端開發者的福音。
  • 淡化歷史版本的記錄。雖然有個好些,但是這個確實看的人少,基本沒有。
  • 重新發布,如果有時間就做,沒時間就不做。
  • 對於一些特殊內容的規定,如如果一個片語key在某種語言環境下顯示為空,該怎麼處理等等。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。