Сейчас мой проект поддерживает несколько языков с помощью гигантского синглтона с единственным публичным методом:
public String getMessage(String ietfCode, String target) {
if (!verifyLangTarget(target))
throw new IllegalArgumentException("Invalid target \"" + target + "\"");
switch (ietfCode) {
case "ru" -> ruList.get(target);
case "ua" -> uaList.get(target);
case "be" -> beList.get(target);
case "pl" -> plList.get(target);
default -> enList.get(target);
}
}
Здесь ruList, uaList и т.д. - это экземпляры HashMap, которые я заполняю при запуске программы из приватных функций типа initRu(){}, initUa(){} и т.д., вызываемых при создании класса.
Работать-то оно работает, но я хотел бы сделать возможность подключения новых и изменения существующих языков без редактирования кода и вообще вынести все строки из кода.
В данный момент я обдумываю такой вариант: создать публичный репозиторий в GitHub, в котором будет папка с файлом конфигурации (какие языки есть) и с папкой, где содержатся все языки в виде json файлов (ua.json, pl.json и т.д.). JSON формат сам по себе легко читать и менять + любой желающий сможет сделать вклад в виде улучшения перевода или добавления нового языка.
Так как моя программа работает в интернете, то всегда сможет прочитать содержимое этого репозитория. Сначала она читает файл конфигурации, а затем подгружает языковые файлы.
Насколько такое решение хорошее? Может быть, есть вариант получше?