Войти или зарегистрироваться

Совет Делаем возможность самостоятельной локализации в своем плагине

  • Автор темы Автор темы Jampire
  • Дата начала Дата начала

Jampire

Старожил
Пользователь
Баллы
173
Имя в Minecraft
Jampire
После внедрения следующей системы в ваш плагин, пользователи сами смогут локализировать ваш плагин, не вскрывая его сторонними программами.

Особенности:
  • Не создает нагрузки на сервер, даже уменьшает ее.
  • Меньше времени занимает перевод плагина на другой язык.
  • Смена языка в плагине в 2 клика.
  • В памяти хранится только выбранный перед запуском плагина язык.
Установка:
  1. Создаем в своем плагине класс под названием Lang со следующим кодом:
    Java:
    package ru.jampire.bukkit.MyCoolPlugin;
    import java.util.HashMap;
    import java.util.Map;
    import java.util.Map.Entry;
    
    import org.bukkit.configuration.file.YamlConfiguration;
    
    public class Lang {
        private static Map<String, String> language = new HashMap<String, String>();
    
        public static void load(YamlConfiguration langYml) {
            for (Entry<String, Object> entry : langYml.getConfigurationSection(Main.config.getString("lang")).getValues(false).entrySet()) {
                language.put(Main.config.getString("lang") + "." + entry.getKey(), String.valueOf(entry.getValue()));
            }
        }
    
        public static String getMessage(String target) {
            return language.get(Main.config.getString("lang") + "." + target);
        }}
    • Main.config - Путь к переменной, в которую записан ваш config
    • ru.jampire.bukkit.MyCoolPlugin - Пакет вашего плагина
  2. Создаем в корне плагина файл lang.yml и наполняем его подобным содержимым:
    Java:
    ru:
      msg1: Плагин включен.
      msg2: Плагин отключен.
    en:
      msg1: Plugin enabled.
      msg2: Plugin disabled.
    • ru / en - раздел локализации
    • msgX - сообщения
  3. Заставляем плагин выгрузить lang.yml при первой загрузке:
    Java:
    File flang = new File(plug.getDataFolder(), "lang.yml");
    if (!flang.exists()) {
        InputStream lang = Main.class.getResourceAsStream("/lang.yml");
        try {
            FileOutputStream fos = new FileOutputStream(flang);
            byte[] buff = new byte[65536];
            int n;
            while ((n = lang.read(buff)) > 0) {
                fos.write(buff, 0, n);
                fos.flush();
            }
            fos.close();
            buff = null;
        } catch (Exception e) {
            Bukkit.getConsoleSender().sendMessage(ChatColor.RED + "Error: " + e);
        }
    }
    Lang.load(YamlConfiguration.loadConfiguration(flang));
    • plug - Ваш плагин. В моем случае код находился в отдельном классе под названием ConfigHandler, что исключало возможность вызова getDataFolder() напрямую.
  4. Добавляем в ваш config.yml опцию lang, равную стандартому языку. Пример:lang: ru
  5. Прописываем все сообщения плагина в файле lang.yml на всех стандартных языках.
  6. В коде плагина меняем все сообщения плагина на подобные строки:
    Java:
    Lang.getMessage("msg1")
Упростим же жизнь переводчиков :D​
 
Назад
Верх