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