diff --git a/core/src/main/java/co/aikar/commands/ACFPatterns.java b/core/src/main/java/co/aikar/commands/ACFPatterns.java
index f11aa031..618f1586 100644
--- a/core/src/main/java/co/aikar/commands/ACFPatterns.java
+++ b/core/src/main/java/co/aikar/commands/ACFPatterns.java
@@ -45,6 +45,7 @@ final class ACFPatterns {
public static final Pattern NON_PRINTABLE_CHARACTERS = Pattern.compile("[^\\x20-\\x7F]");
public static final Pattern EQUALS = Pattern.compile("=");
public static final Pattern FORMATTER = Pattern.compile("\\d+)>(?.+?)", Pattern.CASE_INSENSITIVE);
+ public static final Pattern I18N_STRING = Pattern.compile("\\{@@(?.+?)}", Pattern.CASE_INSENSITIVE);
diff --git a/core/src/main/java/co/aikar/commands/CommandReplacements.java b/core/src/main/java/co/aikar/commands/CommandReplacements.java
index e4cd9ab7..661a1e8d 100644
--- a/core/src/main/java/co/aikar/commands/CommandReplacements.java
+++ b/core/src/main/java/co/aikar/commands/CommandReplacements.java
@@ -76,6 +76,6 @@ public class CommandReplacements {
text = entry.getKey().matcher(text).replaceAll(entry.getValue());
}
- return text;
+ return manager.getLocales().replaceI18NStrings(text);
}
}
diff --git a/core/src/main/java/co/aikar/commands/Locales.java b/core/src/main/java/co/aikar/commands/Locales.java
index c340ae1f..bdf0efa3 100644
--- a/core/src/main/java/co/aikar/commands/Locales.java
+++ b/core/src/main/java/co/aikar/commands/Locales.java
@@ -32,6 +32,7 @@ import org.jetbrains.annotations.NotNull;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
+import java.util.regex.Matcher;
@SuppressWarnings("WeakerAccess")
public class Locales {
@@ -100,4 +101,24 @@ public class Locales {
return message;
}
+ public String replaceI18NStrings(String message) {
+ if (message == null) {
+ return null;
+ }
+ Matcher matcher = ACFPatterns.I18N_STRING.matcher(message);
+ if (!matcher.matches()) {
+ return message;
+ }
+
+ CommandIssuer issuer = CommandManager.getCurrentCommandIssuer();
+
+ matcher.reset();
+ StringBuffer sb = new StringBuffer(message.length());
+ while (matcher.find()) {
+ MessageKey key = MessageKey.of(matcher.group("key"));
+ matcher.appendReplacement(sb, Matcher.quoteReplacement(getMessage(issuer, key)));
+ }
+ matcher.appendTail(sb);
+ return sb.toString();
+ }
}