Tab? The drink?
This commit is contained in:
		@@ -39,132 +39,132 @@ import org.jetbrains.annotations.Nullable;
 | 
			
		||||
 */
 | 
			
		||||
public class LanguageManager {
 | 
			
		||||
 | 
			
		||||
	private final OpenInv plugin;
 | 
			
		||||
	private final String defaultLocale;
 | 
			
		||||
	private final Map<String, YamlConfiguration> locales;
 | 
			
		||||
    private final OpenInv plugin;
 | 
			
		||||
    private final String defaultLocale;
 | 
			
		||||
    private final Map<String, YamlConfiguration> locales;
 | 
			
		||||
 | 
			
		||||
	public LanguageManager(@NotNull OpenInv plugin, @NotNull String defaultLocale) {
 | 
			
		||||
		this.plugin = plugin;
 | 
			
		||||
		this.defaultLocale = defaultLocale;
 | 
			
		||||
		this.locales = new HashMap<>();
 | 
			
		||||
		getOrLoadLocale(defaultLocale);
 | 
			
		||||
	}
 | 
			
		||||
    public LanguageManager(@NotNull OpenInv plugin, @NotNull String defaultLocale) {
 | 
			
		||||
        this.plugin = plugin;
 | 
			
		||||
        this.defaultLocale = defaultLocale;
 | 
			
		||||
        this.locales = new HashMap<>();
 | 
			
		||||
        getOrLoadLocale(defaultLocale);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	private YamlConfiguration getOrLoadLocale(@NotNull String locale) {
 | 
			
		||||
		YamlConfiguration loaded = locales.get(locale);
 | 
			
		||||
		if (loaded != null) {
 | 
			
		||||
			return loaded;
 | 
			
		||||
		}
 | 
			
		||||
    private YamlConfiguration getOrLoadLocale(@NotNull String locale) {
 | 
			
		||||
        YamlConfiguration loaded = locales.get(locale);
 | 
			
		||||
        if (loaded != null) {
 | 
			
		||||
            return loaded;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
		InputStream resourceStream = plugin.getResource("locale/" + locale + ".yml");
 | 
			
		||||
		YamlConfiguration localeConfigDefaults;
 | 
			
		||||
		if (resourceStream == null) {
 | 
			
		||||
			localeConfigDefaults = new YamlConfiguration();
 | 
			
		||||
		} else {
 | 
			
		||||
			try (BufferedReader reader = new BufferedReader(new InputStreamReader(resourceStream))) {
 | 
			
		||||
				localeConfigDefaults = YamlConfiguration.loadConfiguration(reader);
 | 
			
		||||
			} catch (IOException e) {
 | 
			
		||||
				plugin.getLogger().log(Level.WARNING, "[LanguageManager] Unable to load resource " + locale + ".yml", e);
 | 
			
		||||
				localeConfigDefaults = new YamlConfiguration();
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
        InputStream resourceStream = plugin.getResource("locale/" + locale + ".yml");
 | 
			
		||||
        YamlConfiguration localeConfigDefaults;
 | 
			
		||||
        if (resourceStream == null) {
 | 
			
		||||
            localeConfigDefaults = new YamlConfiguration();
 | 
			
		||||
        } else {
 | 
			
		||||
            try (BufferedReader reader = new BufferedReader(new InputStreamReader(resourceStream))) {
 | 
			
		||||
                localeConfigDefaults = YamlConfiguration.loadConfiguration(reader);
 | 
			
		||||
            } catch (IOException e) {
 | 
			
		||||
                plugin.getLogger().log(Level.WARNING, "[LanguageManager] Unable to load resource " + locale + ".yml", e);
 | 
			
		||||
                localeConfigDefaults = new YamlConfiguration();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
		File file = new File(plugin.getDataFolder(), locale + ".yml");
 | 
			
		||||
		YamlConfiguration localeConfig;
 | 
			
		||||
        File file = new File(plugin.getDataFolder(), locale + ".yml");
 | 
			
		||||
        YamlConfiguration localeConfig;
 | 
			
		||||
 | 
			
		||||
		if (!file.exists()) {
 | 
			
		||||
			localeConfig = localeConfigDefaults;
 | 
			
		||||
			try {
 | 
			
		||||
				localeConfigDefaults.save(file);
 | 
			
		||||
			} catch (IOException e) {
 | 
			
		||||
				plugin.getLogger().log(Level.WARNING, "[LanguageManager] Unable to save resource " + locale + ".yml", e);
 | 
			
		||||
			}
 | 
			
		||||
		} else {
 | 
			
		||||
			localeConfig = YamlConfiguration.loadConfiguration(file);
 | 
			
		||||
        if (!file.exists()) {
 | 
			
		||||
            localeConfig = localeConfigDefaults;
 | 
			
		||||
            try {
 | 
			
		||||
                localeConfigDefaults.save(file);
 | 
			
		||||
            } catch (IOException e) {
 | 
			
		||||
                plugin.getLogger().log(Level.WARNING, "[LanguageManager] Unable to save resource " + locale + ".yml", e);
 | 
			
		||||
            }
 | 
			
		||||
        } else {
 | 
			
		||||
            localeConfig = YamlConfiguration.loadConfiguration(file);
 | 
			
		||||
 | 
			
		||||
			// Add new language keys
 | 
			
		||||
			List<String> newKeys = new ArrayList<>();
 | 
			
		||||
			for (String key : localeConfigDefaults.getKeys(true)) {
 | 
			
		||||
				if (localeConfigDefaults.isConfigurationSection(key)) {
 | 
			
		||||
					continue;
 | 
			
		||||
				}
 | 
			
		||||
            // Add new language keys
 | 
			
		||||
            List<String> newKeys = new ArrayList<>();
 | 
			
		||||
            for (String key : localeConfigDefaults.getKeys(true)) {
 | 
			
		||||
                if (localeConfigDefaults.isConfigurationSection(key)) {
 | 
			
		||||
                    continue;
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
				if (localeConfig.isSet(key)) {
 | 
			
		||||
					continue;
 | 
			
		||||
				}
 | 
			
		||||
                if (localeConfig.isSet(key)) {
 | 
			
		||||
                    continue;
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
				localeConfig.set(key, localeConfigDefaults.get(key));
 | 
			
		||||
				newKeys.add(key);
 | 
			
		||||
			}
 | 
			
		||||
                localeConfig.set(key, localeConfigDefaults.get(key));
 | 
			
		||||
                newKeys.add(key);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
			if (!newKeys.isEmpty()) {
 | 
			
		||||
				plugin.getLogger().info("[LanguageManager] Added new language keys: " + String.join(", ", newKeys));
 | 
			
		||||
				try {
 | 
			
		||||
					localeConfig.save(file);
 | 
			
		||||
				} catch (IOException e) {
 | 
			
		||||
					plugin.getLogger().log(Level.WARNING, "[LanguageManager] Unable to save resource " + locale + ".yml", e);
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
            if (!newKeys.isEmpty()) {
 | 
			
		||||
                plugin.getLogger().info("[LanguageManager] Added new language keys: " + String.join(", ", newKeys));
 | 
			
		||||
                try {
 | 
			
		||||
                    localeConfig.save(file);
 | 
			
		||||
                } catch (IOException e) {
 | 
			
		||||
                    plugin.getLogger().log(Level.WARNING, "[LanguageManager] Unable to save resource " + locale + ".yml", e);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
		if (!locale.equals(defaultLocale)) {
 | 
			
		||||
			localeConfigDefaults = locales.get(defaultLocale);
 | 
			
		||||
        if (!locale.equals(defaultLocale)) {
 | 
			
		||||
            localeConfigDefaults = locales.get(defaultLocale);
 | 
			
		||||
 | 
			
		||||
			// Check for missing keys
 | 
			
		||||
			List<String> newKeys = new ArrayList<>();
 | 
			
		||||
			for (String key : localeConfigDefaults.getKeys(true)) {
 | 
			
		||||
				if (localeConfigDefaults.isConfigurationSection(key)) {
 | 
			
		||||
					continue;
 | 
			
		||||
				}
 | 
			
		||||
            // Check for missing keys
 | 
			
		||||
            List<String> newKeys = new ArrayList<>();
 | 
			
		||||
            for (String key : localeConfigDefaults.getKeys(true)) {
 | 
			
		||||
                if (localeConfigDefaults.isConfigurationSection(key)) {
 | 
			
		||||
                    continue;
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
				if (localeConfig.isSet(key)) {
 | 
			
		||||
					continue;
 | 
			
		||||
				}
 | 
			
		||||
                if (localeConfig.isSet(key)) {
 | 
			
		||||
                    continue;
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
				newKeys.add(key);
 | 
			
		||||
			}
 | 
			
		||||
                newKeys.add(key);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
			if (!newKeys.isEmpty()) {
 | 
			
		||||
				plugin.getLogger().info("[LanguageManager] Missing translations from " + locale + ".yml: " + String.join(", ", newKeys));
 | 
			
		||||
			}
 | 
			
		||||
            if (!newKeys.isEmpty()) {
 | 
			
		||||
                plugin.getLogger().info("[LanguageManager] Missing translations from " + locale + ".yml: " + String.join(", ", newKeys));
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
			// Fall through to default locale
 | 
			
		||||
			localeConfig.setDefaults(localeConfigDefaults);
 | 
			
		||||
		}
 | 
			
		||||
            // Fall through to default locale
 | 
			
		||||
            localeConfig.setDefaults(localeConfigDefaults);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
		locales.put(locale, localeConfig);
 | 
			
		||||
		return localeConfig;
 | 
			
		||||
	}
 | 
			
		||||
        locales.put(locale, localeConfig);
 | 
			
		||||
        return localeConfig;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	@Nullable
 | 
			
		||||
	public String getValue(@NotNull String key, @Nullable String locale) {
 | 
			
		||||
		String value = getOrLoadLocale(locale == null ? defaultLocale : locale.toLowerCase()).getString(key);
 | 
			
		||||
		if (value == null || value.isEmpty()) {
 | 
			
		||||
			return null;
 | 
			
		||||
		}
 | 
			
		||||
    @Nullable
 | 
			
		||||
    public String getValue(@NotNull String key, @Nullable String locale) {
 | 
			
		||||
        String value = getOrLoadLocale(locale == null ? defaultLocale : locale.toLowerCase()).getString(key);
 | 
			
		||||
        if (value == null || value.isEmpty()) {
 | 
			
		||||
            return null;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
		value = ChatColor.translateAlternateColorCodes('&', value);
 | 
			
		||||
        value = ChatColor.translateAlternateColorCodes('&', value);
 | 
			
		||||
 | 
			
		||||
		return value;
 | 
			
		||||
	}
 | 
			
		||||
        return value;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	@Nullable
 | 
			
		||||
	public String getValue(@NotNull String key, @Nullable String locale, @NotNull String... replacements) {
 | 
			
		||||
		if (replacements.length % 2 != 0) {
 | 
			
		||||
			plugin.getLogger().log(Level.WARNING, "[LanguageManager] Replacement data is uneven", new Exception());
 | 
			
		||||
		}
 | 
			
		||||
    @Nullable
 | 
			
		||||
    public String getValue(@NotNull String key, @Nullable String locale, @NotNull String... replacements) {
 | 
			
		||||
        if (replacements.length % 2 != 0) {
 | 
			
		||||
            plugin.getLogger().log(Level.WARNING, "[LanguageManager] Replacement data is uneven", new Exception());
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
		String value = getValue(key, locale);
 | 
			
		||||
        String value = getValue(key, locale);
 | 
			
		||||
 | 
			
		||||
		if (value == null) {
 | 
			
		||||
			return null;
 | 
			
		||||
		}
 | 
			
		||||
        if (value == null) {
 | 
			
		||||
            return null;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
		for (int i = 0; i < replacements.length; i += 2) {
 | 
			
		||||
			value = value.replace(replacements[i], replacements[i + 1]);
 | 
			
		||||
		}
 | 
			
		||||
        for (int i = 0; i < replacements.length; i += 2) {
 | 
			
		||||
            value = value.replace(replacements[i], replacements[i + 1]);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
		return value;
 | 
			
		||||
	}
 | 
			
		||||
        return value;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user