由于WordPress原生的翻譯僅支持PHP而不支持JS,因此本主題使用的翻譯方法是主題開發者自己發明的。因此,本主題中的翻譯可同時支持JS和PHP并且無需使用翻譯編輯器來進行編譯,直接編寫json文件即可實現
國際化
本主題使用了主題專用的?_t8()?_t8n()?_et8()?_et8n()?來實現文本的翻譯。
并配合?語言名稱.json?翻譯文件來實現頁面上的文本替換。下面介紹翻譯方法和原理。
主題翻譯
主題默認使用“WordPress后臺設置選擇的語言”,在不修改WordPress默認語言的前提下,也可使用主題的翻譯功能強制修改主題語言。詳見PHP過濾器:pf_get_translation部分。
開始翻譯
假定:當前已經將WordPress切換到英文語言(或:在 pf_get_translation 過濾波器中返回”en_US”)。以此來翻譯主題的英文版
步驟:在R\pandastudio_plugins\public_translation\lang文件夾中將主題默認的default.json翻譯文件復制一份,命名為en_US.json,然后對文件中的JSON對象進行翻譯即可
注意:翻譯時務必注意JSON文件格式,不要出現JSON格式錯誤的情況。
代碼實現
在二次開發的過程中,無論是 Javascript 還是 PHP 都可能出現文本,那么這些文本在 Javascript 和 PHP 中是怎么實現翻譯的呢?
簡單翻譯
_t8("待翻譯的文字",多個替換參數);
t8表示:translate,t后面有8個字符,因此被簡化為t8
待翻譯的文字中可使用{{number}}來替換參數,參數可有多個,將一一對應替換
使用示例
_t8("{{2}}班有{{1}}個學生", 53, 3);
默認顯示時,將第一個替換參數 53 替換到{{1}}的位置,第二個替換參數 3 替換到{{2}}的位置。默認語言顯示結果為:“3班有53個學生”。
若此時有翻譯文件內容如下:
{"{{2}}班有{{1}}個學生": "There are {{1}} students in class {{2}}"}
則參數 53 將替換到 {{1}} 的位置,參數 3 將替換到 {{2}} 的位置。翻譯結果為:“There are 53 students in class 3”
單復數翻譯
_t8n("待翻譯的單數文字","待翻譯的復數文字",多個替換參數);
在上面的例子中我們看到了:當出現數量為單數時,students的翻譯明顯是錯誤的。因此引入單復數識別的翻譯。在原有的t8名稱后加上了n。單復數識別僅識別第一個替換參數,若第一個替換參數為1,則顯示單數翻譯,否則使用復數翻譯。類似于:
if (number <= 1) {_t8("單數內容");} else {_t8("復數內容");}
使用示例
_t8n("{{2}}班有{{1}}個學生{{備注:單數}}","{{2}}班有{{1}}個學生{{備注:復數}}",1,3);
我們可以看到,中間加入了雙花括號的備注來進行區分,在顯示時,備注將自動去除。若此時有語言文件JSON內容如下:
{"{{2}}班有{{1}}個學生{{備注:單數}}": "There is only {{1}} student in class {{2}}","{{2}}班有{{1}}個學生{{備注:復數}}": "There are {{1}} students in class {{2}}"}
由于學生數量1是單數,因此在翻譯時候將使用單數翻譯,翻譯結果為:“There is only 1 student in class 3”
若調用時參數仍然為53:
_t8n("{{2}}班有{{1}}個學生{{備注:單數}}","{{2}}班有{{1}}個學生{{備注:復數}}",53,3);
則翻譯結果為:“There are 53 students in class 3”
其他
上述_t8()與_t8n()方法在自定義JS與自定義PHP中均有效。且翻譯文件不存在時,將自動回退為代碼中的語言。因此,在編寫完二次開發的 Javascript 或 PHP 代碼后,應手動將待翻譯的字符串添加到 JSON 語言文件中,才可以實現翻譯。
PHP獨有
在PHP中存在顯示文字的情況(echo),為方便使用,在上述兩個方法前加上e來進行標識。如:_et8()與_et8n(),使用方法一致。
關于備注
替換參數僅識別 {{number}} 的情況。凡是待翻譯內容 、翻譯內容中的雙花括號,都被識別為備注,將默認去除。備注可為翻譯者提供翻譯幫助,如語言文件JSON翻譯為:
{"編輯{{名詞}}": "Editor","編輯{{動詞}}": "Edit",}
如何翻譯/文本替換
翻譯功能不僅可以用于真正的某種語言,還可以用于文本替換。原理:將主題語言定義為當前地區使用的語言,再次進行翻譯
例:對中文語言本身實現文本替換:
- 復制lang文件夾的
default.json,并重命名為當前WP后臺選中的當地語言:zh_CN.json - 對內容進行翻譯,例如將 “閱讀全文” 翻譯為 “去看看”
這樣就實現了主題的翻譯/文本替換。
注:翻譯時請嚴格按照 JSON 格式編輯,任何格式錯誤都將導致翻譯失敗或報錯!
附:語言文件名稱一覽表
| 文件名 (.json) | 語言名稱 |
|---|---|
| en_US | English (United States) |
| zh_CN | 中文 (簡體) |
| zh_TW | 中文 (臺灣) |
| zh_HK | 中文 (香港) |
| af | Afrikaans |
| ar | ??????? |
| ary | ??????? ???????? |
| as | ??????? |
| az | Az?rbaycan dili |
| azb | ????? ????????? |
| bel | Беларуская мова |
| bg_BG | Български |
| bn_BD | ????? |
| bo | ??????? |
| bs_BA | Bosanski |
| ca | Català |
| ceb | Cebuano |
| cs_CZ | ?e?tina |
| cy | Cymraeg |
| da_DK | Dansk |
| de_CH_informal | Deutsch (Schweiz, Du) |
| de_DE | Deutsch |
| de_CH | Deutsch (Schweiz) |
| de_DE_formal | Deutsch (Sie) |
| de_AT | Deutsch (?sterreich) |
| dzo | ?????? |
| el | Ελληνικ? |
| en_GB | English (UK) |
| en_ZA | English (South Africa) |
| en_AU | English (Australia) |
| en_CA | English (Canada) |
| en_NZ | English (New Zealand) |
| eo | Esperanto |
| es_VE | Espa?ol de Venezuela |
| es_ES | Espa?ol |
| es_GT | Espa?ol de Guatemala |
| es_MX | Espa?ol de México |
| es_CR | Espa?ol de Costa Rica |
| es_CO | Espa?ol de Colombia |
| es_PE | Espa?ol de Perú |
| es_AR | Espa?ol de Argentina |
| es_CL | Espa?ol de Chile |
| et | Eesti |
| eu | Euskara |
| fa_IR | ????? |
| fi | Suomi |
| fr_FR | Fran?ais |
| fr_CA | Fran?ais du Canada |
| fr_BE | Fran?ais de Belgique |
| fur | Friulian |
| gd | Gàidhlig |
| gl_ES | Galego |
| gu | ??????? |
| haz | ????? ?? |
| he_IL | ???????? |
| hi_IN | ?????? |
| hr | Hrvatski |
| hu_HU | Magyar |
| hy | ??????? |
| id_ID | Bahasa Indonesia |
| is_IS | íslenska |
| it_IT | Italiano |
| ja | 日本語 |
| jv_ID | Basa Jawa |
| ka_GE | ??????? |
| kab | Taqbaylit |
| kk | ?аза? т?л? |
| km | ????????? |
| kn | ????? |
| ko_KR | ??? |
| ckb | ?????? |
| lo | ??????? |
| lt_LT | Lietuvi? kalba |
| lv | Latvie?u valoda |
| mk_MK | Македонски ?азик |
| ml_IN | ?????? |
| mn | Монгол |
| mr | ????? |
| ms_MY | Bahasa Melayu |
| my_MM | ????? |
| nb_NO | Norsk bokm?l |
| ne_NP | ?????? |
| nl_BE | Nederlands (Belgi?) |
| nl_NL | Nederlands |
| nl_NL_formal | Nederlands (Formeel) |
| nn_NO | Norsk nynorsk |
| oci | Occitan |
| pa_IN | ?????? |
| pl_PL | Polski |
| ps | ???? |
| pt_BR | Português do Brasil |
| pt_AO | Português de Angola |
| pt_PT_ao90 | Português (AO90) |
| pt_PT | Português |
| rhg | Ruáinga |
| ro_RO | Roman? |
| ru_RU | Русский |
| sah | Сахалыы |
| si_LK | ????? |
| sk_SK | Sloven?ina |
| skr | ??????? |
| sl_SI | Sloven??ina |
| sq | Shqip |
| sr_RS | Српски ?език |
| sv_SE | Svenska |
| szl | ?lōnsk? g?dka |
| ta_IN | ????? |
| te | ?????? |
| th | ??? |
| tl | Tagalog |
| tr_TR | Türk?e |
| tt_RU | Татар теле |
| tah | Reo Tahiti |
| ug_CN | ???????? |
| uk | Укра?нська |
| ur | ???? |
| uz_UZ | O‘zbekcha |
| vi | Ti?ng Vi?t |
