Добрый вечер, смотри, у нас есть класс класс под название LanguageType, в котором идёт ссылка на GitLab-репозиторий с локализацией проекта, так же есть класс LocalizationResource, в котором идут методы получения ресурса, получения сообщений, которые содержатся в этой локализации. Так вот, здесь оно просто получает локализацию из одного файла general.yml, а нам нужно разбить эти файлы на несколько файлов к примеру: skywars.yml, lobby.yml, core.yml и др. Видел некоторые проекты, которые сделали это с помощь json файла, в котором указан путь на эти файлы, но не знаю как это реализовать в коде
LocalizationResource:
@RequiredArgsConstructor
public class LocalizationResource {
private final String resourceURL;
@Getter
private final Map<String, Object> localizationMessages = new LinkedHashMap<>();
private synchronized Yaml newYaml() {
Constructor constructor = new Constructor();
PropertyUtils propertyUtils = new PropertyUtils();
propertyUtils.setSkipMissingProperties(true);
constructor.setPropertyUtils(propertyUtils);
return new Yaml(constructor);
}
@SneakyThrows
public synchronized LocalizationResource initResources() {
localizationMessages.clear();
try (InputStreamReader inputStream = new InputStreamReader(new URL(resourceURL).openStream())) {
localizationMessages.putAll(newYaml().loadAs(inputStream, LinkedHashMap.class));
}
return this;
}
public synchronized String getMessage(@NonNull String messageKey, Object... format) {
return ChatColor.translateAlternateColorCodes('&', String.format(new String(localizationMessages.getOrDefault(messageKey, ChatColor.RED + messageKey).toString().getBytes()), format));
}
public synchronized List<String> getMessageList(@NonNull String messageKey, Object... format) {
// return new ArrayList<>((List<String>) localizationMessages.get(messageKey));
List<String> nonFormatted = new ArrayList<>((List<String>) localizationMessages.get(messageKey));
String joined = ChatColor.translateAlternateColorCodes('&', String.join("\n", nonFormatted.toArray(new String[]{})));
return Arrays.asList(String.format(joined, format).split("\n"));
}
public synchronized boolean hasMessage(@NonNull String messageKey) {
return localizationMessages.containsKey(messageKey);
}
public synchronized boolean isText(@NonNull String messageKey) {
return localizationMessages.get(messageKey) instanceof String;
}
public synchronized boolean isList(@NonNull String messageKey) {
return localizationMessages.get(messageKey) instanceof List;
}
}
LocalizationType:
@RequiredArgsConstructor
@Getter
public enum LanguageType {
RUSSIAN("Русский", new LocalizationResource("здесь указываем ссылку на репозиторий"));
public static LanguageType[] VALUES = values();
private final String displayName;
private final LocalizationResource resource;
}
upd: Если что-то не понятно, то могу показать пример
Добавлю: подобная штука есть на сервере LastCraft