跳到正文
本頁目錄

🛫 國際化 API

隨著我們的社區越來越大,語言成為了各個國家的用戶和玩家之間交流的障礙。為了解決這個問題,我們提供了I18nAPI並鼓勵插件創作者使用國際化接口。

加載翻譯數據

i18n.load(path, defaultLocaleName, defaultLangData)

  • 參數:
    • path: String
      翻譯數據所在的文件1/目錄2
    • defaultLocaleName: String
      默認的語言名稱,形如zh_CN或en(如果沒有提供目標語言給i18n.tr或i18n.get的翻譯,這個參數將被使用)
      若傳入空字符串,則默認跟隨系統語言
    • defaultLangData: Object
      該參數將用於補全或創建翻譯文件,形如
      JavaScript
      {
        localeName: {
          "src": "translation"
        },
        zh_CN: {
          "a.b.c.d.114514": "1919810",
          "src": "源"
        }
      }
  • 拋出:
    • 參數無效
JSON
{
"localeName": {
  "src": "translation"
},
"zh_CN": {
  "a.b.c.d.114514": "1919810",
  "src": "源"
}
}
Text Only
      ┌ LOCALE_name.json
[Dir] ┼ en.json
      └ zh_CN.json

其中的每個文件內容都應類似:

JSON
{
"a.c.b.d": "translation",
"use": {
  "nested": {
    "src": "translation"
  },
  "114514": {
    "1919810": "heng heng aaaaaaaaaaaaaaaaaaaaaaaaa",
    "a": "此处的ID为use.nested.114514.a",
    "b": "The ID of this will be use.nested.114514.b"
  }
}
}

獲取文本的指定語言翻譯

i18n.get(key[,localeName])

  • 參數:
    • key: String
      文本或ID
    • localeName: String(可選)
      目標語言,默認為i18n.load時傳入的defaultLocaleName
  • 返回值: String 翻譯內容(若經過多次回落仍未找到翻譯,則返回key)
  • 拋出:
    • 參數無效

使用指定語言翻譯文本並格式化

i18n.trl(localeName, key, ...)

  • 參數:
    • localeName: String
      目標語言
    • key: String
      文本或ID
    • ...: 任意类型
      格式化參數
  • 返回值: String 翻譯並格式化後的文本
  • 注意: 格式化應遵循語法
  • 拋出:
    • 參數無效

使用默認語言翻譯文本並格式化

i18n.tr(key, ...)

  • 參數:
    • key: String
      文本或ID
    • ...: 任意类型
      格式化參數
  • 返回值: String 翻譯並格式化後的文本
  • 注意: 格式化應遵循語法
  • 拋出:
    • 參數無效

完整樣例

JavaScript
i18n.load("plugins/feature-llse-i18n-test/language.json", "" /* "zh_CN" */, {
    "zh_CN": {
        "{1}, {0}, named_arg(float.2): {named_arg:.2f}": "测试: {1}, {0}, named_arg(float.2): {named_arg:.2f}",
        "{} {} {a} {b}": "测试2: {} {} {a} {b}",
        "welcome": "Hi, {}! 欢迎来到服务器!"
    },
    "en": {
        "welcome": "Hi, {}! Welcome to the SERVER!"
    }
});

LLSE_Player.prototype._sendText = LLSE_Player.prototype.sendText;
LLSE_Player.prototype.sendText = function () {
    let args = Array.from(arguments);
    let text = args.shift();
    this._sendText(i18n.trl(this.langCode, text, ...args));
}

logger.info(tr("{1}, {0}, named_arg(float.2): {named_arg:.2f}", "string0", 1, {
    named_arg: 114.51419 // Named arguments should be object
}));
// Out: 测试: 1, string0, named_arg(float.2): 114.51

logger.info(tr("{} {} {a} {b}", "arg0", "arg1", {
    a: "114514",
    b: "1919810"
}));

mc.listen("onJoin", (pl) => {
    pl.sendText("welcome", pl.realName);
});

Footnotes

  1. 文件必須為JSON格式,且文件內容應類似: ↩

  2. 請在路徑的末尾加上路徑分隔符(/或\)。 目錄內容應類似: ↩