====== 创建语言文件======
你有没有注意到,你的物品显示的名称比较奇怪,例如 //item.tutorial.my_item//?这是因为您的物品名称没有使用游戏选择的语言进行翻译。翻译用于为单个字符串支持多种不同的语言。
===== 创建一个语言文件 =====
你可以使用语言文件为游戏内的可翻译字符串提供翻译。你需要创建的文件的名称应当是语言代码,参见 [[https://zh.minecraft.wiki/w/%E8%AF%AD%E8%A8%80#%E5%8F%AF%E7%94%A8%E8%AF%AD%E8%A8%80|Minecraft Wiki]]。英语是 en_us,简体中文是 zh_cn,台湾繁体中文是 zh_tw,香港繁体中文是 zh_hk,文言文是 lzh。有了语言代码后,在 ''resources/assets/模组id/lang/'' 的位置创建 JSON 文件,例如英文翻译的文件位置是 ''resources/assets/tutorial/lang/en_us.json''。
===== 添加翻译 =====
创建语言文件后,您可以使用此基本模板添加翻译:
{
"item.tutorial.my_item": "我的物品",
"item.tutorial.my_awesome.item": "我的物品真棒",
[...]
}
其中 JSON 中的键是翻译键。如果按照 wiki 教程操作,请记住将命名空间 ''tutorial'' 改成你实际使用的命名空间。
===== 使用自定义可翻译文本 =====
每当函数接受 '''' 时,您可以选择提供一个 ''new ()''(1.18.2之前)或 ''Text.literal()''(1.19之后),这意味着 Minecraft 将按原样使用构造函数参数中的字符串。但是,这是不可取的,因为如果这样做,将很难将文本翻译成另一种语言。 这就是为什么每当需要 '''' 对象时,都应给它一个带有翻译键的 ''new ()'' 或 ''Text.translatable()'',然后在语言文件中翻译该键。例如,添加工具提示时,可在物品类的子类执行以下操作:
@Override
public void method_9568(ItemStack stack, TooltipContext context, List tooltip, TooltipType type) {
// 1.18.2 之前
tooltip.add(new class_2588("item.tutorial.fabric_item.tooltip"));
// 1.19 之后
tooltip.add(Text.translatable("item.tutorial.fabric_item.tooltip"));
}
然后在语言文件中添加:
{
"item.tutorial.fabric_item.tooltip": "我的工具提示"
}
当游戏语言为简体中文时,该工具的提示将显示为“我的工具提示”!
===== 向可翻译文本添加动态值 =====
假您希望文本根据某些变量(例如当前日期和月份)进行更改。对于动态的数字,可以在语言项的值中,在你需要数字显示的位置放个 ''%s'',例如:
{
"item.tutorial.fabric_item.tooltip": "我在第%s天和第%s月的工具提示"
}
然后我们按照在文本中出现的顺序依次传入我们使用的变量。第一个是日期,第二个是月份:
int currentDay = 4;
int currentMonth = 7;
// 1.18 之前
tooltip.add(new class_2588("item.tutorial.fabric_item.tooltip", currentDay, currentMonth));
// 1.19 之后
tooltip.add(Text.translatable("item.tutorial.fabric_item.tooltip", currentDay, currentMonth));
在译文中,变量的顺序可能变,因此可以使用 ''%1$s'' 或 ''%2$s'' 这样的来显式地指定变量的索引。
如果需要直接显示 ''%'',使用 ''%%''。更多信息请参见 [[https://dzone.com/articles/java-string-format-examples|Java String.format]]。
==== 添加新行 ====
换行符 ''\n'' 在命令输出中可正常使用,但是在工具提示等情形中,不会正常生效。因此如果在工具提示中需要多行字符串,需要将翻译键拆分成多个键:
{
"item.tutorial.fabric_item.tooltip_1": "我的工具提示的第1行"
"item.tutorial.fabric_item.tooltip_2": "我的工具提示的第2行"
}
然后分别加入 '''' 或 ''Text.translatable'' 部分:
1.18.2之前:
tooltip.add(new class_2588("item.tutorial.fabric_item.tooltip_1"));
tooltip.add(new class_2588("item.tutorial.fabric_item.tooltip_2"));
1.19之后:
tooltip.add(Text.translatable("item.tutorial.fabric_item.tooltip_1"));
tooltip.add(Text.translatable("item.tutorial.fabric_item.tooltip_2"));
工具提示就会显示为:
我的工具提示的第1行
我的工具提示的第2行