Moved loading and added default locale config option

This commit is contained in:
rtm516 2020-04-05 02:58:23 +01:00
parent b5ce83bbe2
commit 845c914492
9 changed files with 54 additions and 35 deletions

View file

@ -101,6 +101,9 @@ public class GeyserBukkitConfiguration implements IGeyserConfiguration {
return config.getBoolean("allow-third-party-capes", true); return config.getBoolean("allow-third-party-capes", true);
} }
@Override
public String getDefaultLocale() { return config.getString("default-locale", "en_us"); }
@Override @Override
public Path getFloodgateKeyFile() { public Path getFloodgateKeyFile() {
return Paths.get(dataFolder.toString(), config.getString("floodgate-key-file", "public-key.pem")); return Paths.get(dataFolder.toString(), config.getString("floodgate-key-file", "public-key.pem"));

View file

@ -102,6 +102,9 @@ public class GeyserBungeeConfiguration implements IGeyserConfiguration {
return config.getBoolean("allow-third-party-capes", true); return config.getBoolean("allow-third-party-capes", true);
} }
@Override
public String getDefaultLocale() { return config.getString("default-locale", "en_us"); }
@Override @Override
public Path getFloodgateKeyFile() { public Path getFloodgateKeyFile() {
return Paths.get(dataFolder.toString(), config.getString("floodgate-key-file", "public-key.pem")); return Paths.get(dataFolder.toString(), config.getString("floodgate-key-file", "public-key.pem"));

View file

@ -105,6 +105,9 @@ public class GeyserSpongeConfiguration implements IGeyserConfiguration {
return node.getNode("allow-third-party-capes").getBoolean(true); return node.getNode("allow-third-party-capes").getBoolean(true);
} }
@Override
public String getDefaultLocale() { return node.getNode("default-locale").getString("en_us"); }
@Override @Override
public Path getFloodgateKeyFile() { public Path getFloodgateKeyFile() {
return Paths.get(dataFolder.toString(), node.getNode("floodgate-key-file").getString("public-key.pem")); return Paths.get(dataFolder.toString(), node.getNode("floodgate-key-file").getString("public-key.pem"));

View file

@ -63,6 +63,9 @@ public class GeyserConfiguration implements IGeyserConfiguration {
@JsonProperty("allow-third-party-capes") @JsonProperty("allow-third-party-capes")
private boolean allowThirdPartyCapes; private boolean allowThirdPartyCapes;
@JsonProperty("default-locale")
private String defaultLocale;
private MetricsInfo metrics; private MetricsInfo metrics;
@Override @Override

View file

@ -63,6 +63,9 @@ public class GeyserVelocityConfiguration implements IGeyserConfiguration {
@JsonProperty("allow-third-party-capes") @JsonProperty("allow-third-party-capes")
private boolean allowThirdPartyCapes; private boolean allowThirdPartyCapes;
@JsonProperty("default-locale")
private String defaultLocale;
private MetricsInfo metrics; private MetricsInfo metrics;
@Override @Override

View file

@ -46,6 +46,8 @@ public interface IGeyserConfiguration {
boolean isAllowThirdPartyCapes(); boolean isAllowThirdPartyCapes();
String getDefaultLocale();
Path getFloodgateKeyFile(); Path getFloodgateKeyFile();
IMetricsInfo getMetrics(); IMetricsInfo getMetrics();

View file

@ -42,39 +42,6 @@ import java.io.InputStream;
import java.util.*; import java.util.*;
public class MessageUtils { public class MessageUtils {
private static final HashMap<String, HashMap<String, String>> LOCALE_MAPPINGS = new HashMap<>();
static {
/* Load the language mappings */
InputStream languagesStream = Toolbox.getResource("mappings/locales.json");
JsonNode locales;
try {
locales = Toolbox.JSON_MAPPER.readTree(languagesStream);
} catch (Exception e) {
throw new AssertionError("Unable to load Java locale list", e);
}
for (JsonNode localeNode : locales.get("locales")) {
String currentLocale = localeNode.asText();
InputStream stream = Toolbox.getResource("mappings/lang/" + currentLocale + ".json");
JsonNode lang;
try {
lang = Toolbox.JSON_MAPPER.readTree(stream);
} catch (Exception e) {
throw new AssertionError("Unable to load Java lang map for " + currentLocale, e);
}
Iterator<Map.Entry<String, JsonNode>> langIterator = lang.fields();
HashMap<String, String> langMap = new HashMap<>();
while (langIterator.hasNext()) {
Map.Entry<String, JsonNode> entry = langIterator.next();
langMap.put(entry.getKey(), entry.getValue().asText());
}
LOCALE_MAPPINGS.put(currentLocale.toLowerCase(), langMap);
}
}
public static List<String> getTranslationParams(Message[] messages) { public static List<String> getTranslationParams(Message[] messages) {
List<String> strings = new ArrayList<>(); List<String> strings = new ArrayList<>();
@ -138,9 +105,9 @@ public class MessageUtils {
} }
private static String getLocaleString(String messageText, String locale) { private static String getLocaleString(String messageText, String locale) {
HashMap<String, String> localeStrings = LOCALE_MAPPINGS.get(locale.toLowerCase()); HashMap<String, String> localeStrings = Toolbox.LOCALE_MAPPINGS.get(locale.toLowerCase());
if (localeStrings == null) if (localeStrings == null)
localeStrings = LOCALE_MAPPINGS.get("en_us"); localeStrings = Toolbox.LOCALE_MAPPINGS.get(GeyserConnector.getInstance().getConfig().getDefaultLocale());
String newLocaleString = localeStrings.getOrDefault(messageText, messageText); String newLocaleString = localeStrings.getOrDefault(messageText, messageText);

View file

@ -52,6 +52,8 @@ public class Toolbox {
public static final Int2ObjectMap<ItemEntry> ITEM_ENTRIES = new Int2ObjectOpenHashMap<>(); public static final Int2ObjectMap<ItemEntry> ITEM_ENTRIES = new Int2ObjectOpenHashMap<>();
public static final HashMap<String, HashMap<String, String>> LOCALE_MAPPINGS = new HashMap<>();
static { static {
/* Load biomes */ /* Load biomes */
InputStream biomestream = GeyserConnector.class.getClassLoader().getResourceAsStream("bedrock/biome_definitions.dat"); InputStream biomestream = GeyserConnector.class.getClassLoader().getResourceAsStream("bedrock/biome_definitions.dat");
@ -103,6 +105,36 @@ public class Toolbox {
entry.getValue().get("bedrock_id").intValue(), entry.getValue().get("bedrock_data").intValue())); entry.getValue().get("bedrock_id").intValue(), entry.getValue().get("bedrock_data").intValue()));
itemIndex++; itemIndex++;
} }
/* Load the language mappings */
stream = Toolbox.getResource("mappings/locales.json");
JsonNode locales;
try {
locales = Toolbox.JSON_MAPPER.readTree(stream);
} catch (Exception e) {
throw new AssertionError("Unable to load Java locale list", e);
}
for (JsonNode localeNode : locales.get("locales")) {
String currentLocale = localeNode.asText();
InputStream localeStream = Toolbox.getResource("mappings/lang/" + currentLocale + ".json");
JsonNode locale;
try {
locale = Toolbox.JSON_MAPPER.readTree(localeStream);
} catch (Exception e) {
throw new AssertionError("Unable to load Java lang map for " + currentLocale, e);
}
Iterator<Map.Entry<String, JsonNode>> localeIterator = locale.fields();
HashMap<String, String> langMap = new HashMap<>();
while (localeIterator.hasNext()) {
Map.Entry<String, JsonNode> entry = localeIterator.next();
langMap.put(entry.getKey(), entry.getValue().asText());
}
LOCALE_MAPPINGS.put(currentLocale.toLowerCase(), langMap);
}
} }
public static InputStream getResource(String resource) { public static InputStream getResource(String resource) {

View file

@ -57,6 +57,9 @@ general-thread-pool: 32
# OptiFine capes, LabyMod capes, 5Zig capes and MinecraftCapes # OptiFine capes, LabyMod capes, 5Zig capes and MinecraftCapes
allow-third-party-capes: true allow-third-party-capes: true
# The default locale if we dont have the one the client requested
default-locale: en_us
# bStats is a stat tracker that is entirely anonymous and tracks only basic information # bStats is a stat tracker that is entirely anonymous and tracks only basic information
# about Geyser, such as how many people are online, how many servers are using Geyser, # about Geyser, such as how many people are online, how many servers are using Geyser,
# what OS is being used, etc. You can learn more about bStats here: https://bstats.org/. # what OS is being used, etc. You can learn more about bStats here: https://bstats.org/.