Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Dismiss Notice

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

Discussion in 'Руководства, инструкции, утилиты' started by Jampire, Dec 15, 2012.

  1. Автор темы
    Jampire

    Jampire Старожил Пользователь

    Trophy Points:
    173
    Skype:
    jampire-h
    Имя в Minecraft:
    Jampire
    После внедрения следующей системы в ваш плагин, пользователи сами смогут локализировать ваш плагин, не вскрывая его сторонними программами.

    Особенности:
    • Не создает нагрузки на сервер, даже уменьшает ее.
    • Меньше времени занимает перевод плагина на другой язык.
    • Смена языка в плагине в 2 клика.
    • В памяти хранится только выбранный перед запуском плагина язык.
    Установка:
    1. Создаем в своем плагине класс под названием Lang со следующим кодом:
      Code:
      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 и наполняем его подобным содержимым:
      Code:
      ru:
        msg1: Плагин включен.
        msg2: Плагин отключен.
      en:
        msg1: Plugin enabled.
        msg2: Plugin disabled.
      • ru / en - раздел локализации
      • msgX - сообщения
    3. Заставляем плагин выгрузить lang.yml при первой загрузке:
      Code:
      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. В коде плагина меняем все сообщения плагина на подобные строки:
      Code:
      Lang.getMessage("msg1")
    Упростим же жизнь переводчиков :D
     
    MINser, syllik, tOshKa and 1 other person like this.
  2. Хостинг MineCraft
    <

Share This Page