Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,20 @@ public interface TranslationContext {
*/
void addGlobalTranslation(Language language, String key, String translation);

/**
* Gets the language by default.
*
* @return default language
*/
Language getDefaultLanguage();

/**
* Sets the language by default
*
* @param language language to set
*/
void setDefaultLanguage(Language language);

/**
* Gets the current language standard.
*
Expand Down
2 changes: 1 addition & 1 deletion build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ java {

allprojects {
group = "com.luminiadev.polyglot"
version = "1.0.2-SNAPSHOT"
version = "1.0.3-SNAPSHOT"
}

subprojects {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,23 +23,25 @@
public class BaseTranslation implements Translation {

private final TranslationContext context;
private final Map<Language, Map<String, String>> localTranslations;
private final Map<Language, Map<String, String>> translations;
private final Map<Class<? extends TrParameters>, TrParameterFormatter> formatters;

private Language defaultLanguage;
private Function<String, String> fallbackStrategy;

public BaseTranslation(TranslationContext context, TranslationProvider provider) {
this.context = context;
this.localTranslations = new HashMap<>();
this.translations = new HashMap<>();
this.formatters = new HashMap<>();

this.formatters.put(SimpleTrParameters.class, new BracketSimpleParameterFormatter());
this.formatters.put(KeyedTrParameters.class, new BraceKeyedParameterFormatter());

if (provider != null) {
localTranslations.putAll(provider.getTranslations());
translations.putAll(provider.getTranslations());
}

this.defaultLanguage = context.getDefaultLanguage();
}

@Override
Expand Down Expand Up @@ -68,6 +70,7 @@ private Language resolveLanguage(Language requestedLanguage) {
if (this.isLanguageAvailable(requestedLanguage)) {
return requestedLanguage;
}
Language defaultLanguage = this.defaultLanguage != null ? this.defaultLanguage : context.getDefaultLanguage();
if (this.isLanguageAvailable(defaultLanguage)) {
return defaultLanguage;
}
Expand All @@ -76,7 +79,7 @@ private Language resolveLanguage(Language requestedLanguage) {

private boolean isLanguageAvailable(Language language) {
if (language == null) return false;
if (localTranslations.containsKey(language) || !context.getGlobalTranslations(language).isEmpty()) {
if (translations.containsKey(language) || !context.getGlobalTranslations(language).isEmpty()) {
return true;
}
return this.getAvailableLanguages().stream().anyMatch(language::isCompatibleWith);
Expand All @@ -87,7 +90,7 @@ private String getTranslationFromMap(Map<String, String> translations, String ke
}

private String findTranslation(Language language, String key) {
String result = this.getTranslationFromMap(localTranslations.get(language), key);
String result = this.getTranslationFromMap(translations.get(language), key);
if (result != null) {
return result;
}
Expand All @@ -97,7 +100,7 @@ private String findTranslation(Language language, String key) {
return result;
}

for (Map.Entry<Language, Map<String, String>> entry : localTranslations.entrySet()) {
for (Map.Entry<Language, Map<String, String>> entry : translations.entrySet()) {
if (language.isCompatibleWith(entry.getKey())) {
result = this.getTranslationFromMap(entry.getValue(), key);
if (result != null) {
Expand Down Expand Up @@ -170,7 +173,7 @@ public void addTranslation(Language language, String key, String value) {
if (language == null || key == null || value == null) {
return;
}
localTranslations.computeIfAbsent(language, k -> new HashMap<>()).put(key, value);
translations.computeIfAbsent(language, k -> new HashMap<>()).put(key, value);
}

@Override
Expand All @@ -182,9 +185,9 @@ public <T extends TrParameters> void setParameterFormatter(Class<T> parameterTyp

@Override
public Set<Language> getAvailableLanguages() {
Set<Language> languages = new HashSet<>(localTranslations.keySet());
Set<Language> languages = new HashSet<>(translations.keySet());

for (Language lang : localTranslations.keySet()) {
for (Language lang : translations.keySet()) {
if (!context.getGlobalTranslations(lang).isEmpty()) {
languages.add(lang);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ public class BaseTranslationContext implements TranslationContext {

private final Map<Language, Map<String, String>> globalTranslations;
private KeyedTrParameters globalParameters;
private Language defaultLanguage;
private LanguageStandard languageStandard;

public BaseTranslationContext() {
Expand Down Expand Up @@ -80,6 +81,16 @@ public void addGlobalTranslation(Language language, String key, String translati
this.addGlobalTranslations(language, Map.of(key, translation));
}

@Override
public Language getDefaultLanguage() {
return defaultLanguage;
}

@Override
public void setDefaultLanguage(Language defaultLanguage) {
this.defaultLanguage = defaultLanguage;
}

@Override
public LanguageStandard getLanguageStandard() {
return languageStandard;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,10 @@
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.*;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

/**
* YAML file translation provider.
Expand Down