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