Theseus 模组文档
API 参考 / 渲染、资源与语言

LanguageRegistry


想先跑起来?

这一页是签名与行为参考。语言键的注册与查询,注意加载时机。直接做一遍:教程 · 贴图与译文。

用途:模组译文贡献入口,经 ModContext#language() 获取。两种等价方式:

  1. 资源文件(推荐):jar 内放 assets/<模组id>/lang/<locale>.json(形如 {"mymod.hud.label": "准度"}),宿主在模组装配后自动扫描;
  2. 代码注册:本接口的 add(String, Map),适合译文由配置或计算得出的场景。

完整签名

java
public interface LanguageRegistry {

    void add(String locale, Map<String, String> entries);

    Optional<String> get(String key);

    Optional<String> get(String locale, String key);
}

add(locale, entries)

签名:

java
void add(String locale, Map<String, String> entries);

行为:注册一批译文,可对同一 locale 多次调用,后注册的覆盖先注册的同名键。立即作用于当前语言(若 locale 恰为当前语言),之后每次切换语言都会重放。

键名约定:以模组 id 作前缀("<模组id>.<key>"),避免与内置译文(gameplay.* / settings.*)及其它模组冲突。

get(key)

签名:

java
Optional<String> get(String key);

行为:查询当前生效译文,解析顺序为「模组层 → 内置层 → 英文层 → 键名本身」,未命中返回空(由调用方决定展示什么)。

get(locale, key)

签名:

java
Optional<String> get(String locale, String key);

行为:查询指定语言下的译文,不切换当前语言;未命中返回空。

示例:代码注册并读取

java
ctx.language().add("zh", Map.of(
        "mymod.hud.combo", "连击",
        "mymod.hud.accuracy", "准度"));

String label = ctx.language().get("mymod.hud.combo").orElse("COMBO");

注意:宿主在本模组 onInit 返回之后才扫描 jar 内语言文件,所以在 onInit 里读自己的译文会是空——要么改用 add(...) 主动注册,要么放到 onPostInit 再读。