- Баллы
- 173
- Имя в Minecraft
- Jampire
После внедрения следующей системы в ваш плагин, пользователи сами смогут локализировать ваш плагин, не вскрывая его сторонними программами.
Особенности:
Особенности:
- Не создает нагрузки на сервер, даже уменьшает ее.
- Меньше времени занимает перевод плагина на другой язык.
- Смена языка в плагине в 2 клика.
- В памяти хранится только выбранный перед запуском плагина язык.
- Создаем в своем плагине класс под названием 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 - Пакет вашего плагина
- Создаем в корне плагина файл lang.yml и наполняем его подобным содержимым:
Java:ru: msg1: Плагин включен. msg2: Плагин отключен. en: msg1: Plugin enabled. msg2: Plugin disabled.- ru / en - раздел локализации
- msgX - сообщения
- Заставляем плагин выгрузить 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() напрямую.
- Добавляем в ваш config.yml опцию lang, равную стандартому языку. Пример: lang: ru
- Прописываем все сообщения плагина в файле lang.yml на всех стандартных языках.
- В коде плагина меняем все сообщения плагина на подобные строки:
Java:
Lang.getMessage("msg1")
Упростим же жизнь переводчиков
