diff --git a/pom.xml b/pom.xml index 4a1c083..8fad246 100644 --- a/pom.xml +++ b/pom.xml @@ -72,6 +72,14 @@ jackson-databind 2.18.1 + + + + javax.inject + javax.inject + 1 + + diff --git a/src/main/java/ua/com/javarush/gnew/m2/cli/PhoneBookCLI.java b/src/main/java/ua/com/javarush/gnew/m2/cli/PhoneBookCLI.java index 6a62acb..8a135fc 100644 --- a/src/main/java/ua/com/javarush/gnew/m2/cli/PhoneBookCLI.java +++ b/src/main/java/ua/com/javarush/gnew/m2/cli/PhoneBookCLI.java @@ -5,6 +5,8 @@ import picocli.CommandLine; import picocli.CommandLine.Command; import ua.com.javarush.gnew.m2.cli.commands.*; +import ua.com.javarush.gnew.m2.service.LocalizationService; +import java.util.Locale; @Command( name = "phonebook", @@ -13,21 +15,24 @@ description = "CLI для управління контактами в телефонній книзі") public class PhoneBookCLI implements CliCommand { - @Override + LocalizationService localizationService = new LocalizationService(Locale.getDefault()); + + @Override public Integer call() { - System.out.println("Використовуйте одну з команд: user, add, search, edit, delete, list"); + System.out.println(localizationService.getMessage("app.commands").replace("{0}","user, add, search, edit, delete, list, locale")); return 0; } + public static int init(String[] args) { return new CommandLine(getBean(PhoneBookCLI.class)) - .addSubcommand("add", getBean(AddContact.class)) - .addSubcommand("search", getBean(SearchContact.class)) - .addSubcommand("edit", getBean(EditContact.class)) - .addSubcommand("delete", getBean(DeleteContact.class)) - .addSubcommand("list", getBean(ListContacts.class)) - .addSubcommand("user", getBean(SetUser.class)) - .addSubcommand("locale", getBean(SetLocale.class)) + .addSubcommand("command.add", getBean(AddContact.class)) + .addSubcommand("command.search", getBean(SearchContact.class)) + .addSubcommand("command.edit", getBean(EditContact.class)) + .addSubcommand("command.delete", getBean(DeleteContact.class)) + .addSubcommand("command.list", getBean(ListContacts.class)) + .addSubcommand("command.user", getBean(SetUser.class)) + .addSubcommand("command.locale", getBean(SetLocale.class)) .execute(args); } } diff --git a/src/main/java/ua/com/javarush/gnew/m2/cli/commands/SetLocale.java b/src/main/java/ua/com/javarush/gnew/m2/cli/commands/SetLocale.java index 0afd638..6b4ebc8 100644 --- a/src/main/java/ua/com/javarush/gnew/m2/cli/commands/SetLocale.java +++ b/src/main/java/ua/com/javarush/gnew/m2/cli/commands/SetLocale.java @@ -1,11 +1,18 @@ package ua.com.javarush.gnew.m2.cli.commands; import java.io.IOException; +import java.util.Arrays; +import java.util.Locale; + +import com.fasterxml.jackson.annotation.JacksonInject; import picocli.CommandLine; import ua.com.javarush.gnew.m2.cli.CliCommand; import ua.com.javarush.gnew.m2.configuration.PhoneBookContext; +import ua.com.javarush.gnew.m2.service.LocalizationService; import ua.com.javarush.gnew.m2.service.SettingsServiceInterface; +import javax.inject.Inject; + @CommandLine.Command( name = "locale", aliases = {"-l", "--locale"}, @@ -14,20 +21,32 @@ public class SetLocale implements CliCommand { private final SettingsServiceInterface settingsService = - PhoneBookContext.getBean(SettingsServiceInterface.class); + PhoneBookContext.getBean(SettingsServiceInterface.class); + +LocalizationService localizationService = new LocalizationService(Locale.getDefault()); @CommandLine.Parameters(index = "0", description = "language", arity = "1") private String newLocale; - @Override - public Integer call() { - try { - settingsService.setLocale(newLocale); - System.out.println("Локаль установлена на: " + newLocale); - return 0; - } catch (IOException e) { - System.err.println("Ошибка при установке локали: " + e.getMessage()); - return 1; + + + @Override + public Integer call() { + try { + Locale locale = new Locale(newLocale); + if (!Arrays.asList(Locale.getAvailableLocales()).contains(locale)) { + System.err.println(localizationService.getMessage("error.dontUse.notfound").replace("{0}", newLocale)); + return 1; + } + settingsService.setLocale(newLocale); + localizationService.setLocale(new Locale(newLocale)); + System.out.println(localizationService.getMessage("success.locale.changed").replace("{0}", newLocale)); + System.out.println(localizationService.getMessage("locale.current").replace("{0}", newLocale)); + return 0; + + } catch (IOException e) { + System.err.println(localizationService.getMessage("error.command.notfound").replace("{0}", newLocale)); + return 1; + } } - } } diff --git a/src/main/java/ua/com/javarush/gnew/m2/service/LocalizationService.java b/src/main/java/ua/com/javarush/gnew/m2/service/LocalizationService.java index a50dc3d..5ca9a2b 100644 --- a/src/main/java/ua/com/javarush/gnew/m2/service/LocalizationService.java +++ b/src/main/java/ua/com/javarush/gnew/m2/service/LocalizationService.java @@ -1,5 +1,6 @@ package ua.com.javarush.gnew.m2.service; +import java.nio.charset.StandardCharsets; import java.util.Locale; import java.util.ResourceBundle; @@ -13,13 +14,15 @@ public LocalizationService(Locale locale) { public void setLocale(Locale locale) { - this.resourceBundle = ResourceBundle.getBundle("messages", locale); + this.resourceBundle = ResourceBundle.getBundle("Localization", locale); } + public String getMessage(String key) { try { - return resourceBundle.getString(key); + String message = resourceBundle.getString(key); + return new String(message.getBytes(StandardCharsets.UTF_8), StandardCharsets.UTF_8); } catch (Exception e) { return "Message not found for key: " + key; } diff --git a/src/main/resources/messages_en.properties b/src/main/resources/Localization.properties similarity index 100% rename from src/main/resources/messages_en.properties rename to src/main/resources/Localization.properties diff --git a/src/main/resources/Localization_ru.properties b/src/main/resources/Localization_ru.properties new file mode 100644 index 0000000..fefb43f --- /dev/null +++ b/src/main/resources/Localization_ru.properties @@ -0,0 +1 @@ +RU diff --git a/src/main/resources/Localization_uk.properties b/src/main/resources/Localization_uk.properties new file mode 100644 index 0000000..3c8a2a8 --- /dev/null +++ b/src/main/resources/Localization_uk.properties @@ -0,0 +1,26 @@ +# Загальні повідомлення +app.description=CLI для управління контактами в телефонній книзі +app.version=Телефонна книга CLI 1.0 +app.commands=Використовуйте одну з команд: {0} + +# Команди +command.add=додати +command.search=пошук +command.edit=редагувати +command.delete=видалити +command.list=список +command.user=користувач +command.locale=мова + +# Підказки та помилки +error.command.notfound=Команду не знайдено: {0} +error.missing.argument=Відсутній обов'язковий аргумент: {0} +success.locale.changed=Мову успішно змінено на {0} +error.dontUse.notfound = невідома команда: {0} + + +# Мови +locale.current=Поточна мова: {0} +locale.available=Доступні мови: {0} + + diff --git a/src/main/resources/messages.properties b/src/main/resources/messages.properties deleted file mode 100644 index e69de29..0000000 diff --git a/src/main/resources/messages_ru.properties b/src/main/resources/messages_ru.properties deleted file mode 100644 index 02279b7..0000000 --- a/src/main/resources/messages_ru.properties +++ /dev/null @@ -1 +0,0 @@ -RU \ No newline at end of file diff --git a/src/main/resources/messages_ua.properties b/src/main/resources/messages_ua.properties deleted file mode 100644 index 6cf8072..0000000 --- a/src/main/resources/messages_ua.properties +++ /dev/null @@ -1 +0,0 @@ -UKR \ No newline at end of file