From 135c31f0e79672d4f5ed950ef91332bc5b7c4f61 Mon Sep 17 00:00:00 2001 From: MEFRREEX Date: Mon, 26 Jan 2026 03:07:38 +0400 Subject: [PATCH] feat: language changes + change default translation context language standard to LocaleLanguageStandard --- build.gradle.kts | 2 +- .../core/context/BaseTranslationContext.java | 3 +- .../polyglot/core/language/BaseLanguage.java | 39 ++++++++++++++++++- .../core/language/LocaleLanguageStandard.java | 2 +- .../core/language/SimpleLanguageStandard.java | 2 +- 5 files changed, 42 insertions(+), 6 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index ae86d6c..569d8ae 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -12,7 +12,7 @@ java { allprojects { group = "org.densy.polyglot" - version = "1.1.0-SNAPSHOT" + version = "1.1.1-SNAPSHOT" } subprojects { diff --git a/core/src/main/java/org/densy/polyglot/core/context/BaseTranslationContext.java b/core/src/main/java/org/densy/polyglot/core/context/BaseTranslationContext.java index 760f949..86eef4d 100644 --- a/core/src/main/java/org/densy/polyglot/core/context/BaseTranslationContext.java +++ b/core/src/main/java/org/densy/polyglot/core/context/BaseTranslationContext.java @@ -6,6 +6,7 @@ import org.densy.polyglot.api.language.LanguageStandard; import org.densy.polyglot.api.provider.TranslationProvider; import org.densy.polyglot.core.BaseTranslation; +import org.densy.polyglot.core.language.LocaleLanguageStandard; import org.densy.polyglot.core.language.SimpleLanguageStandard; import org.densy.polyglot.core.parameter.KeyedTranslationParameters; import org.densy.polyglot.core.provider.EmptyProvider; @@ -26,7 +27,7 @@ public class BaseTranslationContext implements TranslationContext { public BaseTranslationContext() { this.globalTranslations = new HashMap<>(); this.globalParameters = new KeyedTranslationParameters(); - this.languageStandard = new SimpleLanguageStandard(); + this.languageStandard = new LocaleLanguageStandard(); } @Override diff --git a/core/src/main/java/org/densy/polyglot/core/language/BaseLanguage.java b/core/src/main/java/org/densy/polyglot/core/language/BaseLanguage.java index c78d804..4855531 100644 --- a/core/src/main/java/org/densy/polyglot/core/language/BaseLanguage.java +++ b/core/src/main/java/org/densy/polyglot/core/language/BaseLanguage.java @@ -1,8 +1,11 @@ package org.densy.polyglot.core.language; -import org.densy.polyglot.api.language.Language; import lombok.EqualsAndHashCode; import lombok.ToString; +import org.densy.polyglot.api.language.Language; + +import java.util.Locale; +import java.util.Objects; /** * Base implementation of the Language interface. @@ -59,11 +62,43 @@ public boolean isCompatibleWith(Language other) { * @return BaseLanguage class */ public static BaseLanguage parseLanguage(String languageCode) { + Objects.requireNonNull(languageCode, "language code must not be null"); if (languageCode.contains("_")) { String[] parts = languageCode.split("_"); return new BaseLanguage(parts[0], parts[1]); - } else { + } else { return new BaseLanguage(languageCode); } } + + /** + * Parses the language from locale. + * + * @param locale the locale + * @return BaseLanguage class + */ + public static BaseLanguage parseLocale(Locale locale) { + Objects.requireNonNull(locale, "locale must not be null"); + + String language = locale.getISO3Country(); + String country = locale.getCountry(); + + if (language.isEmpty() && country.isEmpty()) { + throw new IllegalArgumentException("Locale must have at least language or country"); + } + + if (!country.isEmpty()) { + return new BaseLanguage(language, country); + } + return new BaseLanguage(language); + } + + /** + * Gets the default system language. + * + * @return BaseLanguage class. + */ + public static BaseLanguage getDefault() { + return parseLocale(Locale.getDefault()); + } } diff --git a/core/src/main/java/org/densy/polyglot/core/language/LocaleLanguageStandard.java b/core/src/main/java/org/densy/polyglot/core/language/LocaleLanguageStandard.java index 6f587ca..47f2717 100644 --- a/core/src/main/java/org/densy/polyglot/core/language/LocaleLanguageStandard.java +++ b/core/src/main/java/org/densy/polyglot/core/language/LocaleLanguageStandard.java @@ -8,7 +8,7 @@ /** * Locale language standard implementation. - * Supports format: "ru_RU", "en_US", "en_GB" (language_COUNTRY). + * Supports format: "en_US", "en_GB", "ru_RU" (language_COUNTRY). */ public class LocaleLanguageStandard implements LanguageStandard { private static final Pattern PATTERN = Pattern.compile("^([a-z]{2})_([A-Z]{2})$"); diff --git a/core/src/main/java/org/densy/polyglot/core/language/SimpleLanguageStandard.java b/core/src/main/java/org/densy/polyglot/core/language/SimpleLanguageStandard.java index d5adbca..c7006dc 100644 --- a/core/src/main/java/org/densy/polyglot/core/language/SimpleLanguageStandard.java +++ b/core/src/main/java/org/densy/polyglot/core/language/SimpleLanguageStandard.java @@ -7,7 +7,7 @@ /** * Simple language standard implementation. - * Supports format: "eng", "rus", "ukr" (2-3 letter language codes). + * Supports format: "eng", "rus", "ukr" (ISO 639-1, 2-3 letter language codes). */ public class SimpleLanguageStandard implements LanguageStandard { private static final Pattern PATTERN = Pattern.compile("^[a-z]{2,3}$");