From c86958fad6a0077d3234146f615b94d6ab9eb3f0 Mon Sep 17 00:00:00 2001 From: Alemiz Date: Sat, 25 Mar 2023 15:02:50 +0100 Subject: [PATCH] Implement context arguments --- .../common/string/LocalStringBase.java | 2 +- .../common/string/TranslationContext.java | 25 +++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/common/src/main/java/eu/mizerak/alemiz/translationlib/common/string/LocalStringBase.java b/common/src/main/java/eu/mizerak/alemiz/translationlib/common/string/LocalStringBase.java index c88c7fb..ab61989 100644 --- a/common/src/main/java/eu/mizerak/alemiz/translationlib/common/string/LocalStringBase.java +++ b/common/src/main/java/eu/mizerak/alemiz/translationlib/common/string/LocalStringBase.java @@ -80,7 +80,7 @@ public String getText(T object) { formatted = formatted.replaceAll("\\{" + entry.getKey() + "\\}", entry.getValue().apply(ctx)); } } - return formatted; + return ctx.handlePostFormat(formatted); } @Override diff --git a/common/src/main/java/eu/mizerak/alemiz/translationlib/common/string/TranslationContext.java b/common/src/main/java/eu/mizerak/alemiz/translationlib/common/string/TranslationContext.java index bf4b6ac..e8e666a 100644 --- a/common/src/main/java/eu/mizerak/alemiz/translationlib/common/string/TranslationContext.java +++ b/common/src/main/java/eu/mizerak/alemiz/translationlib/common/string/TranslationContext.java @@ -1,9 +1,13 @@ package eu.mizerak.alemiz.translationlib.common.string; +import java.util.HashMap; import java.util.Locale; +import java.util.Map; +import java.util.function.Function; public abstract class TranslationContext { private final T object; + private Map> localArguments; public TranslationContext(T object) { this.object = object; @@ -15,6 +19,27 @@ public T getObject() { return this.object; } + public TranslationContext argument(String argument, Object value) { + return this.argument(argument, t -> String.valueOf(value)); + } + + public TranslationContext argument(String argument, Function function) { + if (this.localArguments == null) { + this.localArguments = new HashMap<>(); + } + this.localArguments.put(argument, function); + return this; + } + + public String handlePostFormat(String string) { + if (this.localArguments != null) { + for (Map.Entry> entry : this.localArguments.entrySet()) { + string = string.replaceAll("\\{" + entry.getKey() + "\\}", entry.getValue().apply(this.object)); + } + } + return string; + } + public interface Factory { TranslationContext create(T object); }