由于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 | Română |
| 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 |
