Нужно создать объект(Возможно даже для каждого языка отдельный класс) который хранит в себе все сообщения. При нужде выводить пользователю сообщение в зависимости от его выбранного в настройках языка.
Мое приложение собирается поддерживать 3 языка: English Russian и Ukraine.
Решил их изобразить так.
public enum Language {
RUSSIAN(1), ENGLISH(2), UKRAINE(3);
private Integer id;
Language(Integer id) {
this.id = id;
}
public static Language reLang(Integer id) {
switch (id) {
case 1:
return RUSSIAN;
case 2:
return ENGLISH;
case 3:
return UKRAINE;
default:
return RUSSIAN;
}
}
public Integer getId() {
return id;
}
}
Выбранный язык пользователя я храню в виде числового идентификатора: Русский - 1 Английский - 2 Украинский - 3
Пример как я получаю язык пользователя.
User user = new User("UserName");
user.getLang(); // Получаю язык пользователя(enum). (Язык берется из базы данных Mysql).
Следующий этап который я прохожу это вывод сообщения пользователю. Здесь у меня возникли проблемы т.к раньше я никогда такого еще не делал (Да и реализация у меня не лучшего типа).
Я создал класс под
public class UtilChat {
public static void message(Language lang, User user, Messages messages){
//Знаю можно было получать язык юзера здесь. а не в методе его вводить
//отдельно
}
}
Этим статистическим методом я собираюсь выводить пользователю сообщение на выбранном им языке. Тут у меня возник вопрос.
Каким наилучшим способом я могу хранить каждого языка сообщения?
Был вариант под каждый язык создать свой класс но до меня так и не дошло как правильно брать нужные сообщения из класс (с учетом языка).
Может есть где нибудь уже похожая реализация?
Как сделать поддержку нескольких языков?
Главное в разработке - это не изобретать велосипеды.
За поддержку языков в Java отвечает класс Locale.
Что такой Locale?
Еще про Locale
Подобный вопрос на ru.stackoverflow: Поддержка нескольких языков
Соответственно нужно в конфигах/properties описать поддерживаемые языки.
Где хранить тексты приложения на разных языках?
Для этого используются шаблоны. Например Apache Velocity.
То есть на каждый язык создается набор файлов-шаблонов. И в зависимости от выставленного в текущий момент времени Locale
, подтягиваются шаблоны с нужным языком.
Зачем всё это нужно?
Описанный подход позволяет отделить саму реализацию бизнес логики от языковой зависимости. И также позволяет легко и быстро подключать новые языки без изменения бизнес логики.
enum Lang {
RUSSIAN(new String[]{
"сообщение1",
"сообщение2"
}),
ENGLISH(new String[]{
"message1",
"message2"
});
final String[] msg;
private Lang(final String[] str) {
this.msg = str;
}
}
В каком-то главном классе, делаем свойство, которое будет меняться:
private static Lang type = Lang.RUSSIAN;
И метод, который будет возвращать сообщения:
public static String msg(final int key) {
return type.msg[key];
}
Используем:
System.out.println(msg(0)); // сообщение1
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
С сервера приходит ответ в котором указано время в путиСуть в том, что иногда приходит в таком виде 45 ( то есть понимается что 45 минут) А иногда...
Подскажите, как получить количество строк в БД через ResultSet и запрос count?