mirror of
https://github.com/BentoBoxWorld/BentoBox.git
synced 2024-12-17 22:57:52 +01:00
Added an admin locale analysis command.
Shows what strings are missing from which locale files.
This commit is contained in:
parent
17493966d2
commit
6f00db0cc1
@ -119,4 +119,11 @@ public class BentoBoxLocale {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the config
|
||||
*/
|
||||
public YamlConfiguration getConfig() {
|
||||
return config;
|
||||
}
|
||||
}
|
||||
|
@ -22,6 +22,7 @@ public class BentoBoxCommand extends CompositeCommand {
|
||||
new BentoBoxManageCommand(this);
|
||||
new BentoBoxCatalogCommand(this);
|
||||
new BentoBoxReloadCommand(this);
|
||||
new BentoBoxLocaleCommand(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -0,0 +1,36 @@
|
||||
package world.bentobox.bentobox.commands;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import world.bentobox.bentobox.api.commands.CompositeCommand;
|
||||
import world.bentobox.bentobox.api.commands.ConfirmableCommand;
|
||||
import world.bentobox.bentobox.api.user.User;
|
||||
|
||||
/**
|
||||
* Manages localization.
|
||||
*
|
||||
* @author tastybento
|
||||
*/
|
||||
public class BentoBoxLocaleCommand extends ConfirmableCommand {
|
||||
|
||||
/**
|
||||
* Localization management command
|
||||
* @param parent command parent
|
||||
*/
|
||||
public BentoBoxLocaleCommand(CompositeCommand parent) {
|
||||
super(parent, "locale");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setup() {
|
||||
setPermission("admin.locale");
|
||||
setDescription("commands.bentobox.locale.description");
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean execute(User user, String label, List<String> args) {
|
||||
// Basic operation to start
|
||||
getPlugin().getLocalesManager().analyzeLocales(user, false);
|
||||
return true;
|
||||
}
|
||||
}
|
@ -15,6 +15,7 @@ import java.util.jar.JarFile;
|
||||
|
||||
import org.bukkit.configuration.file.YamlConfiguration;
|
||||
|
||||
import net.md_5.bungee.api.ChatColor;
|
||||
import world.bentobox.bentobox.BentoBox;
|
||||
import world.bentobox.bentobox.api.addons.Addon;
|
||||
import world.bentobox.bentobox.api.localization.BentoBoxLocale;
|
||||
@ -238,5 +239,57 @@ public class LocalesManager {
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads all the locales available in the locale folder given. Used for loading all locales from plugin and addons
|
||||
*
|
||||
* @param localeFolder - locale folder location relative to the plugin's data folder
|
||||
*/
|
||||
public void analyzeLocales(User user, boolean fix) {
|
||||
languages.clear();
|
||||
user.sendRawMessage(ChatColor.AQUA + "*************************************************");
|
||||
plugin.log(ChatColor.AQUA + "Analyzing BentoBox locale files");
|
||||
user.sendRawMessage(ChatColor.AQUA + "*************************************************");
|
||||
loadLocalesFromFile(BENTOBOX);
|
||||
analyze(user, fix);
|
||||
user.sendRawMessage(ChatColor.AQUA + "Analyzing Addon locale files");
|
||||
plugin.getAddonsManager().getAddons().forEach(addon -> {
|
||||
user.sendRawMessage(ChatColor.AQUA + "*************************************************");
|
||||
user.sendRawMessage(ChatColor.AQUA + "Analyzing addon " + addon.getDescription().getName());
|
||||
user.sendRawMessage(ChatColor.AQUA + "*************************************************");
|
||||
languages.clear();
|
||||
loadLocalesFromFile(addon.getDescription().getName());
|
||||
analyze(user, fix);
|
||||
});
|
||||
reloadLanguages();
|
||||
}
|
||||
|
||||
private void analyze(User user, boolean fix) {
|
||||
if (!languages.containsKey(Locale.US)) return;
|
||||
user.sendRawMessage(ChatColor.GREEN + "The following locales are supported:");
|
||||
languages.forEach((k,v) -> {
|
||||
user.sendRawMessage(ChatColor.GOLD + k.toLanguageTag() + " " + k.getDisplayCountry() + " " + k.getDisplayLanguage());
|
||||
});
|
||||
// Start with US English
|
||||
YamlConfiguration usConfig = languages.get(Locale.US).getConfig();
|
||||
languages.entrySet().stream().filter(e -> !e.getKey().equals(Locale.US)).map(Map.Entry::getValue).forEach(l -> {
|
||||
user.sendRawMessage(ChatColor.GREEN + "*************************************************");
|
||||
user.sendRawMessage(ChatColor.GREEN + "Analyzing locale file " + l.toLanguageTag() + ":");
|
||||
YamlConfiguration c = l.getConfig();
|
||||
boolean complete = true;
|
||||
for (String path : usConfig.getKeys(true)) {
|
||||
if (!c.contains(path, true)) {
|
||||
complete = false;
|
||||
user.sendRawMessage(ChatColor.RED + "Missing " + path);
|
||||
if (fix) {
|
||||
// TODO: add an option to add missing strings to locale files.
|
||||
}
|
||||
}
|
||||
}
|
||||
if (complete) {
|
||||
user.sendRawMessage(ChatColor.GREEN + "Language file covers all strings.");
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user