Перейти к основному содержимому

Руководство по i18n

Регистрация i18n для плагинов

Рассмотрим на примере проекта ExamplePlugin-Maven.

Вам необходимо зарегистрировать i18n в главном классе вашего плагина.

ExamplePlugin.java
package cn.nukkitmot.exampleplugin;

import cn.nukkit.lang.PluginI18n;
import cn.nukkit.lang.PluginI18nManager;
import cn.nukkit.plugin.PluginBase;

public class ExamplePlugin extends PluginBase {
public static ExamplePlugin INSTANCE;
public static PluginI18n I18N;
public static LangCode serverLangCode;

@Override
public void onLoad() {
//save Plugin Instance
INSTANCE = this;
//register the plugin i18n
I18N = PluginI18nManager.register(this);
initServerLangCode();
}

public void initServerLangCode() {
switch (Server.getInstance().getLanguage().getLang()) {
case "eng" -> {
serverLangCode = LangCode.en_US;
}
case "chs" -> {
serverLangCode = LangCode.zh_CN;
}
case "deu" -> {
serverLangCode = LangCode.de_DE;
}
case "rus" -> {
serverLangCode = LangCode.ru_RU;
}
default -> {
try {
serverLangCode = LangCode.valueOf(Server.getInstance().getLanguage().getLang());
} catch (IllegalArgumentException e) {
serverLangCode = LangCode.en_US;
}
}
}
}
}

Здесь я использую PlayerLocallyInitializedEvent, чтобы продемонстрировать применение:

EventListener.java
package cn.nukkitmot.exampleplugin;

import cn.nukkit.Server;
import cn.nukkit.Player;
import cn.nukkit.lang.LangCode;
import cn.nukkit.event.player.PlayerLocallyInitializedEvent;

import static cn.nukkitmot.exampleplugin.ExamplePlugin.INSTANCE;
import static cn.nukkitmot.exampleplugin.ExamplePlugin.I18N;
import static cn.nukkitmot.exampleplugin.ExamplePlugin.serverLangCode;

public class EventListener implements Listener {
@EventHandler
public void joinEvent(PlayerLocallyInitializedEvent event) {
Player player = event.getPlayer();
LangCode playerLangCode = player.getLanguageCode();
// This is how to get the player's LangCode
player.sendMessage(I18N.tr(playerLangCode, "exampleplugin.helloworld", playerName));
// We can also get the server's LangCode
INSTANCE.getLogger().info(I18N.tr(serverLangCode, "exampleplugin.helloworld", playerName));
}
}

Добавление языковых файлов в ресурсы

Затем нам нужно создать папку language в src/main/resources для хранения языковых файлов <LangCode>.json. Ваш каталог разработки плагина будет выглядеть примерно так:

📁ExamplePlugin-Maven
📁lib
📁src
📁main
📁java
📁resources
📁language
🌍en_US.lang
📁target

Формат языковых файлов

Поддерживается многоязычный текст с параметрами, например exampleplugin.helloworld=Hello {%0}!

{%n} будет заменён аргументом с индексом n

exampleplugin.helloworld=Hello {%0}!
exampleplugin.examplecommand.description=this is a test command.

LangCode

См. cn.nukkit.lang.LangCode. Ниже приведена таблица кодов для удобства использования:

примечание

Здесь «Регион» не обозначает страну.

Код языкаЯзыкРегион
en_USEnglishUnited States
en_GBEnglishUnited Kingdom
de_DEDeutschDeutschland
es_ESEspañolEspaña
es_MXEspañolMéxico
fr_FRFrançaisFrance
fr_CAFrançaisCanada
it_ITItalianoItalia
ja_JP日本語日本
ko_KR한국어대한민국
pt_BRPortuguêsBrasil
pt_PTPortuguêsPortugal
ru_RUРусскийРоссия
zh_CN中文(简体)中国
zh_TW中文(繁體)中国台湾
nl_NLNederlandsNederland
bg_BGБългарскиБългария
cs_CZČeštinaČesko
da_DKDanskDanmark
el_GRΕλληνικάΕλλάδα
fi_FISuomiSuomi
hu_HUMagyarMagyarország
id_IDIndonesiaIndonesia
nb_NONorsk bokmålNorge
pl_PLPolskiPolska
sk_SKSlovenčinaSlovensko
sv_SESvenskaSverige
tr_TRTürkçeTürkiye
uk_UAУкраїнськаУкраїна