由于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 |