语言提供器

语言文件生成

继承 LanguageProvider 并实现 #addTranslations,即可为模组生成语言文件。每个子类代表一个独立的语言区域:例如 en_us 表示美式英语,es_es 表示西班牙语。实现后,必须将提供者添加到 DataGenerator。

每个 LanguageProvider 代表一个 locale,在 addTranslations 中通过 add 或便捷方法建立翻译键到本地化名称的映射。

原创说明图,依据 Forge 1.21.x 官方文档 绘制。

// 在模组事件总线上
@SubscribeEvent
public void gatherData(GatherDataEvent event) {
  event.getGenerator().addProvider(
    event.includeClient(), // 仅在生成客户端资源时运行
    output -> new MyLanguageProvider(output, MOD_ID, "en_us") // 美式英语本地化
  );
}

LanguageProvider

每个语言提供者本质上是字符串映射,将每个翻译键映射到本地化名称。可使用 #add 添加映射;也有方法使用 Block、Item、ItemStack、Enchantment、MobEffect 和 EntityType 的翻译键。

// 在 LanguageProvider#addTranslations 中
this.addBlock(EXAMPLE_BLOCK, "Example Block");
this.add("object.examplemod.example_object", "Example Object");

提示:包含美式英语以外字母或数字的本地化名称可以直接提供。提供者会自动将字符转换成对应的 Unicode 表示,供游戏读取。

// 编码为 'Example with a d\u00EDacritic'
this.addItem("example.diacritic", "Example with a díacritic");

原文:Language Generation。