diff --git a/build.gradle b/build.gradle index 4884c99..a5fa628 100644 --- a/build.gradle +++ b/build.gradle @@ -24,6 +24,7 @@ ext { 'commons-lang:commons-lang', 'org.yaml:snakeyaml' ]], + commons_text: 'org.apache.commons:commons-text:1.9', lombok: 'org.projectlombok:lombok:1.18.12' ] } @@ -42,4 +43,5 @@ dependencies { annotationProcessor libs.lombok compileOnly2 libs.bukkit + implementation libs.commons_text } \ No newline at end of file diff --git a/src/main/java/ghast/I18n.java b/src/main/java/ghast/I18n.java new file mode 100644 index 0000000..b9495e6 --- /dev/null +++ b/src/main/java/ghast/I18n.java @@ -0,0 +1,65 @@ +package ghast; + +import lombok.AccessLevel; +import lombok.NoArgsConstructor; +import lombok.experimental.UtilityClass; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.text.StringSubstitutor; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.Reader; +import java.util.HashMap; +import java.util.Map; + +@UtilityClass +@SuppressWarnings("unused") +public class I18n { + + private final Map messagesMap = new HashMap<>(); + + @SuppressWarnings("java:S112") + public void loadMessages(Reader reader) { + try { + BufferedReader bufferedReader = new BufferedReader(reader); + String line; + while ((line = bufferedReader.readLine()) != null) { + String[] split = line.split("=", 2); + messagesMap.put(split[0].trim(), split[1].trim()); + } + } catch (IOException e) { + throw new RuntimeException("Error load messages: " + e.getMessage(), e); + } + } + + public void loadMessages(Map messages) { + messagesMap.putAll(messages); + } + + public String getMessage(String key) { + return messagesMap.getOrDefault(key, StringUtils.EMPTY); + } + + public String getMessage(String key, Map params) { + return StringSubstitutor.replace(getMessage(key), params, "{", "}"); + } + + public ParamBuilder paramBuilder() { + return new ParamBuilder(); + } + + @NoArgsConstructor(access = AccessLevel.PRIVATE) + public static class ParamBuilder { + + private final Map params = new HashMap<>(); + + public ParamBuilder add(String key, Object value) { + params.put(key, value); + return this; + } + + public Map build() { + return params; + } + } +}