在学习translate的用法之前,我们要了解一个东西:本地化键(也称『翻译识别符』)
每一种语言都有自己对应的语言文件,比如美式英语对应的就是en_us.lang,中文简体对应的就是zh_cn.lang。游戏中同一个地方的文本会翻译成不同的语言。这时候问题来了:我们该如何在不同的语言文件中正确找到用于这个地方的文本呢?
这时候本地化键就出场了。
把一个地方的文本在不同语言中的翻译都绑定到一串不变的ID上,根据ID找到对应的翻译文本,不就解决这个问题了吗?
小主,
举个例子,在下面两个不同的语言文件中分别有这么一行:
en_us.lang:
server.help.getgold=You can get gold by selling items and playing games.For example, you may get 500 coins if you win a game of Bed War.#
zh_cn.lang:
server.help.getgold=您可以通过售卖物品、玩小游戏来获得金币。比如当你赢得一局起床战争时,您可能会获得500枚金币。#
我们只需要在需要用到这一串文本的地方放上『server.help.getgold』,游戏就会自动根据不同的语言将这一串本地化键替换成对应语言的文本。
JSON文本内的translate组件就是干这行的。在translate的值内写上本地化键,游戏就会根据不同的语言将对应的内容呈现出来。比如:
{“rawtext“:[{“translate“:“server.help.getgold“}]}
如果你使用的是中文简体,最终这将会输出:『您可以通过售卖物品、玩小游戏来获得金币。比如当您赢得一局起床战争时,你可能会获得500枚金币。』
如果你使用的是美式英语,这反而会输出:『You can get gold by selling items and playing games.For example, you may get 500 coins if you win a game of Bed War.』
现在你明白了吗?
(注:上面这个server.help.getgold本地化键是编的,但接下来的几个本地化键都是真实存在于游戏中的。)
translate的使用肯定没有这么简单,这只是最基础的用法而已。有时候,本地化键对应的文本内会有一些特殊的部分。比如『death.attack.onFire』,如果你只是这么用它:
{“rawtext“:[{“translate“:“death.attack.onFire“}]}
最终它会输出:
%1$s 被烧死了
这是怎么回事?因为我们没有指定死亡的东西是什么。如果我们要指定,就得用到translate的配套组件:with
with的值是由多个文本组成的列表。至于为什么是个列表,是因为有些时候会有多个特殊的部分,这时候就需要使用列表来分别指定每个部分是什么。
我们待会再研究具有多个特殊部分的情况。先来试试使用with指定死亡的东西是『张三』:
{“rawtext“:[{“translate“:“death.attack.onFire“,“with“:[“张三“]}]}
这将会输出:张三被烧死了
现在我们再来看看有多个特殊部分的情况:
{“rawtext“:[{“translate“:“death.attack.arrow.item“}]}
这将会输出:%1$s 被%2$s 用%3$s 射杀
这句话虽然很短,但有三个特殊的部分。如何正确指定这三个特殊部分呢?按照从左到右的顺序指定:
{“rawtext“:[{“translate“:“death.attack.arrow.item“,“with“:[“枯藤“,“老树“,“昏鸦“]}]}
这会输出:枯藤被老树用昏鸦射杀
一般情况下,特殊部分会按照从左到右的顺序一一对应列表内的元素。在上面的例子中,%1$s最靠左,“枯藤”也在列表的最左边,因此%1$s就被“枯藤”替换了。剩下的%2$s和%3$s同理。