Initial support for localization
Currently only the main config is localized, but eventually all messages will be localized @t3hk0d3 should start working on a russian translation
This commit is contained in:
parent
2e0cc645c7
commit
b0c6161f84
|
@ -19,8 +19,6 @@ import java.util.Map;
|
||||||
public class PlayerInformer {
|
public class PlayerInformer {
|
||||||
|
|
||||||
public final static String PERMISSION_DENIED = "Sorry, you don't have enough permissions";
|
public final static String PERMISSION_DENIED = "Sorry, you don't have enough permissions";
|
||||||
public final static String WHITELIST_MESSAGE = "You are not allowed to join this server. Goodbye!";
|
|
||||||
public final static String PROHIBITED_ITEM = "Prohibited item \"%s\" has been removed from your inventory.";
|
|
||||||
public final static String DEFAULT_MESSAGE_FORMAT = "&f[&2Modifyworld&f]&4 %s";
|
public final static String DEFAULT_MESSAGE_FORMAT = "&f[&2Modifyworld&f]&4 %s";
|
||||||
// Default message format
|
// Default message format
|
||||||
protected String messageFormat = DEFAULT_MESSAGE_FORMAT;
|
protected String messageFormat = DEFAULT_MESSAGE_FORMAT;
|
||||||
|
|
|
@ -19,6 +19,7 @@
|
||||||
package ru.tehkode.modifyworld.bukkit;
|
package ru.tehkode.modifyworld.bukkit;
|
||||||
|
|
||||||
import org.bukkit.configuration.ConfigurationSection;
|
import org.bukkit.configuration.ConfigurationSection;
|
||||||
|
import org.bukkit.configuration.InvalidConfigurationException;
|
||||||
import org.bukkit.configuration.file.FileConfiguration;
|
import org.bukkit.configuration.file.FileConfiguration;
|
||||||
import org.bukkit.configuration.file.YamlConfiguration;
|
import org.bukkit.configuration.file.YamlConfiguration;
|
||||||
import org.bukkit.plugin.Plugin;
|
import org.bukkit.plugin.Plugin;
|
||||||
|
@ -37,6 +38,7 @@ import java.io.InputStream;
|
||||||
import java.lang.reflect.Constructor;
|
import java.lang.reflect.Constructor;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Locale;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
|
@ -93,14 +95,6 @@ public class Modifyworld extends JavaPlugin {
|
||||||
config.set("use-material-names", true);
|
config.set("use-material-names", true);
|
||||||
config.set("drop-restricted-item", false);
|
config.set("drop-restricted-item", false);
|
||||||
config.set("item-use-check", false);
|
config.set("item-use-check", false);
|
||||||
|
|
||||||
// Messages
|
|
||||||
config.set("messages/message-format", PlayerInformer.DEFAULT_MESSAGE_FORMAT);
|
|
||||||
config.set("messages/default-message", PlayerInformer.PERMISSION_DENIED);
|
|
||||||
|
|
||||||
// Predefined messages
|
|
||||||
config.set("messages/modifyworld.login", PlayerInformer.WHITELIST_MESSAGE);
|
|
||||||
config.set("messages/modifyworld.items.have", PlayerInformer.PROHIBITED_ITEM);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void registerListeners() {
|
protected void registerListeners() {
|
||||||
|
@ -116,6 +110,73 @@ public class Modifyworld extends JavaPlugin {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public InputStream getLocalizedResource(String path) {
|
||||||
|
return getLocalizedResource(path, Locale.getDefault());
|
||||||
|
}
|
||||||
|
|
||||||
|
public InputStream getLocalizedResource(String path, Locale locale) {
|
||||||
|
InputStream ret;
|
||||||
|
ret = getResource("lang/" + locale.toString() + "/" + path); // Country-specific
|
||||||
|
if (ret == null && !locale.getCountry().isEmpty()) { // Available without country-specific variant
|
||||||
|
ret = getResource("lang/" + locale.getLanguage() + "/" + path);
|
||||||
|
}
|
||||||
|
if (ret == null) { // Unlocalized
|
||||||
|
ret = getResource(path);
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
private YamlConfiguration loadBaseLanguage(String path, Locale locale) throws IOException, InvalidConfigurationException {
|
||||||
|
InputStream load = getResource("lang/" + locale.getLanguage() + "/" + path);
|
||||||
|
if (load != null) {
|
||||||
|
YamlConfiguration conf = new YamlConfiguration();
|
||||||
|
conf.options().copyDefaults(true);
|
||||||
|
conf.load(load);
|
||||||
|
YamlConfiguration def = loadUnlocalized(path);
|
||||||
|
if (def != null) {
|
||||||
|
conf.setDefaults(def);
|
||||||
|
}
|
||||||
|
return conf;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private YamlConfiguration loadUnlocalized(String path) throws IOException, InvalidConfigurationException {
|
||||||
|
InputStream load = getResource(path);
|
||||||
|
if (load != null) {
|
||||||
|
YamlConfiguration conf = new YamlConfiguration();
|
||||||
|
conf.load(load);
|
||||||
|
return conf;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public YamlConfiguration getLocalizedConfig(String path) throws InvalidConfigurationException, IOException {
|
||||||
|
return getLocalizedConfig(path, Locale.getDefault());
|
||||||
|
}
|
||||||
|
|
||||||
|
public YamlConfiguration getLocalizedConfig(String path, Locale locale) throws InvalidConfigurationException, IOException {
|
||||||
|
YamlConfiguration base = new YamlConfiguration();
|
||||||
|
InputStream load = getResource("lang/" + locale.toString() + "/" + path); // Country-specific
|
||||||
|
if (load != null) {
|
||||||
|
base.load(load);
|
||||||
|
base.options().copyDefaults(true);
|
||||||
|
YamlConfiguration def = loadBaseLanguage(path, locale);
|
||||||
|
if (def == null) {
|
||||||
|
def = loadUnlocalized(path);
|
||||||
|
}
|
||||||
|
if (def != null) {
|
||||||
|
base.setDefaults(def);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
base = loadBaseLanguage(path, locale);
|
||||||
|
if (base == null) {
|
||||||
|
base = loadUnlocalized(path);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return base;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public FileConfiguration getConfig() {
|
public FileConfiguration getConfig() {
|
||||||
if (this.config == null) {
|
if (this.config == null) {
|
||||||
|
@ -143,7 +204,7 @@ public class Modifyworld extends JavaPlugin {
|
||||||
config.load(configFile);
|
config.load(configFile);
|
||||||
} catch (FileNotFoundException e) {
|
} catch (FileNotFoundException e) {
|
||||||
this.getLogger().severe("Configuration file not found - deploying default one");
|
this.getLogger().severe("Configuration file not found - deploying default one");
|
||||||
InputStream defConfigStream = getResource("config.yml");
|
InputStream defConfigStream = getLocalizedResource("config.yml");
|
||||||
if (defConfigStream != null) {
|
if (defConfigStream != null) {
|
||||||
try {
|
try {
|
||||||
this.config.load(defConfigStream);
|
this.config.load(defConfigStream);
|
||||||
|
@ -155,7 +216,7 @@ public class Modifyworld extends JavaPlugin {
|
||||||
this.getLogger().severe("Failed to load configuration file: " + e.getMessage());
|
this.getLogger().severe("Failed to load configuration file: " + e.getMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
InputStream defConfigStream = getResource("config.yml");
|
InputStream defConfigStream = getLocalizedResource("config.yml");
|
||||||
if (defConfigStream != null) {
|
if (defConfigStream != null) {
|
||||||
this.config.setDefaults(YamlConfiguration.loadConfiguration(defConfigStream));
|
this.config.setDefaults(YamlConfiguration.loadConfiguration(defConfigStream));
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,9 +1,3 @@
|
||||||
item-restrictions: false
|
|
||||||
inform-players: true
|
|
||||||
whitelist: false
|
|
||||||
use-material-names: true
|
|
||||||
drop-restricted-item: false
|
|
||||||
item-use-check: false
|
|
||||||
messages:
|
messages:
|
||||||
message-format: '&f[&2Modifyworld&f]&4 %s'
|
message-format: '&f[&2Modifyworld&f]&4 %s'
|
||||||
default-message: Sorry, you don't have enough permissions
|
default-message: Sorry, you don't have enough permissions
|
||||||
|
|
Loading…
Reference in New Issue