未发布版本 v6.3.0-SNAPSHOT。 本页内容来自 alpha 分支,随时可能变更,不属于任何已发布版本。

commit 49619c6 · 注入于 2026-09-13 12:23 UTC

Skip to content

I18n 多语言

UltiTools 提供了一个易用的多语言 API,让你可以轻松的为你的插件添加多语言支持。

创建语言文件

resources 文件夹中创建一个 lang 文件夹。按照你的需求放入你的插件语言文件。

json
{
  "test": "测试",
  "test2": "测试2"
}

将文件名命名为 zh.json,其中 zh 为语言代码。

语言代码可参照此表

YAML 语言文件

也支持 .yml/.yaml 字典

v6.3.0 起,模块的 lang 目录也可以使用 .yml/.yaml 而不是 .json——Language.fromYaml 会把嵌套键用点号展开,且分区节点本身不会变成字符串条目。

只提供 .yml 的模块仍可能加载不到自己的字典

每个内部模块与核心 UltiTools 插件共用同一个类加载器,所以对 jar 内 lang/<语言码>.json 的查找可能先解析到核心自己的 .json 文件,.yml 永远不会被尝试,i18n(...) 因此只会返回原始 key(issue #412)——在这个问题解决之前,请在 .yml 旁再放一份 lang/<语言码>.json(哪怕内容近似)作为临时办法。

注册语言代码

实际使用的语言由 UltiTools 主插件配置决定

实际使用的语言取自 UltiTools 主插件配置中的 language 键,由 getLanguageCode() 读取。v6.3.0 起,构造该语言之前会先查询 supported():配置的语言码不受支持时会输出警告,并退回一个确实存在的语言,而不再静默加载空字典。

supported() 的默认实现取自模块自身的 lang/*.json 文件,因此只要把语言文件命名为 lang/<语言码>.json 就无需重写它。重写它依然有效并优先生效,适用于模块想声明支持某个语言码、却没有对应文件的少数情形。

UltiTools 需要知道你的插件支持哪些语言,因此你需要在你的插件继承了 UltiToolsPlugin 的类进行注册

一种很简便的方法就是在继承了 UltiToolsPlugin 的类添加 @I18n 并添加语言代码:

java
@I18n({"zh", "en"})

当然你也可以重写 supported() 方法,返回一个含有语言代码的 List<String> 即可:

java
@Override
public List<String> supported() {
    return Arrays.asList("zh", "en");
}

使用多语言

在你的插件继承了 UltiToolsPlugin 的类中,有一个 i18n 方法,用于获取多语言字符串。

java
String test = i18n("test");

// 输出:测试

如果语言文件中不存在该字符串,将会返回该字符串本身。

java
String test3 = i18n("test3");

// 输出:test3

TIP

在仅有两种语言的情况下,你可以仅创建一个语言文件,其中的键值对的键为原文,值为译文。

贡献者

暂无相关贡献者

基于 MIT 许可发布