diff --git a/Essentials/src/com/earth2me/essentials/Essentials.java b/Essentials/src/com/earth2me/essentials/Essentials.java index 68e48ca8c..023e8d0ee 100644 --- a/Essentials/src/com/earth2me/essentials/Essentials.java +++ b/Essentials/src/com/earth2me/essentials/Essentials.java @@ -200,6 +200,8 @@ public class Essentials extends JavaPlugin { iConf.reloadConfig(); } + + Util.updateLocale(settings.getLocale(), this.getDataFolder()); for (User user : users.values()) { diff --git a/Essentials/src/com/earth2me/essentials/Util.java b/Essentials/src/com/earth2me/essentials/Util.java index 43b1b9e7f..bd68d19cb 100644 --- a/Essentials/src/com/earth2me/essentials/Util.java +++ b/Essentials/src/com/earth2me/essentials/Util.java @@ -3,7 +3,6 @@ package com.earth2me.essentials; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; -import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.io.InputStream; @@ -15,8 +14,11 @@ import java.text.MessageFormat; import java.util.Calendar; import java.util.Enumeration; import java.util.GregorianCalendar; +import java.util.HashSet; import java.util.Locale; +import java.util.MissingResourceException; import java.util.ResourceBundle; +import java.util.Set; import java.util.logging.Level; import java.util.logging.Logger; import java.util.regex.Matcher; @@ -29,6 +31,8 @@ import org.bukkit.block.Block; public class Util { + private final static Logger logger = Logger.getLogger("Minecraft"); + public static String sanitizeFileName(String name) { return name.toLowerCase().replaceAll("[^a-z0-9]", "_"); @@ -110,13 +114,13 @@ public class Util public static long parseDateDiff(String time, boolean future) throws Exception { Pattern timePattern = Pattern.compile( - "(?:([0-9]+)\\s*y[a-z]*[,\\s]*)?" - + "(?:([0-9]+)\\s*mo[a-z]*[,\\s]*)?" - + "(?:([0-9]+)\\s*w[a-z]*[,\\s]*)?" - + "(?:([0-9]+)\\s*d[a-z]*[,\\s]*)?" - + "(?:([0-9]+)\\s*h[a-z]*[,\\s]*)?" - + "(?:([0-9]+)\\s*m[a-z]*[,\\s]*)?" - + "(?:([0-9]+)\\s*(?:s[a-z]*)?)?", Pattern.CASE_INSENSITIVE); + "(?:([0-9]+)\\s*y[a-z]*[,\\s]*)?" + + "(?:([0-9]+)\\s*mo[a-z]*[,\\s]*)?" + + "(?:([0-9]+)\\s*w[a-z]*[,\\s]*)?" + + "(?:([0-9]+)\\s*d[a-z]*[,\\s]*)?" + + "(?:([0-9]+)\\s*h[a-z]*[,\\s]*)?" + + "(?:([0-9]+)\\s*m[a-z]*[,\\s]*)?" + + "(?:([0-9]+)\\s*(?:s[a-z]*)?)?", Pattern.CASE_INSENSITIVE); Matcher m = timePattern.matcher(time); int years = 0; int months = 0; @@ -279,9 +283,10 @@ public class Util public static String formatCurrency(double value) { - String str = Essentials.getStatic().getSettings().getCurrencySymbol()+df.format(value); - if (str.endsWith(".00")) { - str = str.substring(0, str.length()-3); + String str = Essentials.getStatic().getSettings().getCurrencySymbol() + df.format(value); + if (str.endsWith(".00")) + { + str = str.substring(0, str.length() - 3); } return str; } @@ -338,8 +343,9 @@ public class Util BufferedReader br = new BufferedReader(new FileReader(file)); String version = br.readLine(); br.close(); - if (version == null || !version.equals("#version: "+Essentials.getStatic().getDescription().getVersion())) { - Logger.getLogger("Minecraft").log(Level.WARNING, "Translation file "+file+" is not updated for Essentials version. Will use default."); + if (version == null || !version.equals("#version: " + Essentials.getStatic().getDescription().getVersion())) + { + logger.log(Level.WARNING, String.format("Translation file %s is not updated for Essentials version. Will use default.", file)); return cl.getResourceAsStream(string); } return new FileInputStream(file); @@ -385,10 +391,18 @@ public class Util private static final Locale defaultLocale = Locale.getDefault(); public static Locale currentLocale = defaultLocale; private static ResourceBundle bundle = ResourceBundle.getBundle("messages", defaultLocale); + private static ResourceBundle defaultBundle = ResourceBundle.getBundle("messages", Locale.US); public static String i18n(String string) { - return bundle.getString(string); + try { + return bundle.getString(string); + } + catch (MissingResourceException ex) + { + logger.log(Level.WARNING, String.format("Missing translation key \"%s\" in translation file %s", ex.getKey(), bundle.getLocale().toString())); + return defaultBundle.getString(string); + } } public static String format(String string, Object... objects) @@ -403,7 +417,7 @@ public class Util { return; } - String[] parts = loc.split("_"); + String[] parts = loc.split("[_\\.]"); if (parts.length == 1) { currentLocale = new Locale(parts[0]); @@ -412,6 +426,14 @@ public class Util { currentLocale = new Locale(parts[0], parts[1]); } + if (parts.length == 3) + { + currentLocale = new Locale(parts[0], parts[1], parts[2]); + } + logger.log(Level.INFO, String.format("Using locale %s", currentLocale.toString())); bundle = ResourceBundle.getBundle("messages", currentLocale, new ConfigClassLoader(dataFolder, Util.class.getClassLoader())); + if (!bundle.keySet().containsAll(defaultBundle.keySet())) { + logger.log(Level.WARNING, String.format("Translation file %s does not contain all translation keys.", currentLocale.toString())); + } } } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandkit.java b/Essentials/src/com/earth2me/essentials/commands/Commandkit.java index e6b5d1cd1..8065234ab 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandkit.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandkit.java @@ -5,7 +5,6 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import org.bukkit.Server; -import com.earth2me.essentials.Essentials; import com.earth2me.essentials.User; import com.earth2me.essentials.Util; import java.util.GregorianCalendar; @@ -40,7 +39,7 @@ public class Commandkit extends EssentialsCommand } if (list.length() > 0) { - user.sendMessage("ยง7Kits:" + list.toString()); + user.sendMessage(Util.format("kits", list.toString())); } else { diff --git a/Essentials/src/messages.properties b/Essentials/src/messages.properties index 81202212e..2ec6bb426 100644 --- a/Essentials/src/messages.properties +++ b/Essentials/src/messages.properties @@ -1,4 +1,5 @@ #version: TeamCity +# Single quotes have to be doubled: '' # Translations start here loadinfo = Loaded {0} build {1} by {2} markedAsNotAway = \u00a77You are no longer marked as away. @@ -96,7 +97,7 @@ cooldownWithMessage = \u00a7cCooldown: {0} warpingTo = \u00a77Warping to {0}. timeBeforeTeleport = Time before next teleport: {0} pendingTeleportCancelled = \u00a7cPending teleportation request cancelled. -dontMoveMessage = \u00a77Teleportation will commence in {0}. Don't move. +dontMoveMessage = \u00a77Teleportation will commence in {0}. Don''t move. noHomeSet = You have not set a home. noHomeSetPlayer = Player has not set a home. timeBeforeHeal = Time before next heal: {0} @@ -132,7 +133,7 @@ questionFormat = \u00a77[Question]\u00a7f {0} notAllowedToQuestion = \u00a7cYou are not authorized to use question. localFormat = Local: <{0}> {1} geoipJoinFormat = Player {0} comes from {1} -cantFindGeoIpDB = Can't find GeoIP database! +cantFindGeoIpDB = Can''t find GeoIP database! cantReadGeoIpDB = Failed to read GeoIP database! geoIpUrlEmpty = GeoIP download url is empty. downloadingGeoIp = Downloading GeoIP database ... this might take a while (country: 0.6 MB, city: 20MB) @@ -172,7 +173,7 @@ invSee = You see the inventory of {0}. invSeeHelp = Use /invsee to restore your inventory. cantSpawnItem = \u00a7cYou are not allowed to spawn the item {0} itemSpawn = \u00a77Giving {0} of {1} -jumpError = That would hurt your computer's brain. +jumpError = That would hurt your computer''s brain. kickDefault = Kicked from server kill = \u00a77Killed {0}. noKits = \u00a77There are no kits available yet @@ -180,7 +181,7 @@ kitError = \u00a7cThere are no valid kits. kitError2 = \u00a7cThat kit does not exist or is improperly defined. kitErrorHelp = \u00a7cPerhaps an item is missing a quantity in the configuration? noKitPermission = \u00a7cYou need the \u00a7c{0}\u00a7c permission to use that kit. -kitTimed = \u00a7cYou can't use that kit again for another {0} +kitTimed = \u00a7cYou can''t use that kit again for another {0}. kitInvFull = \u00a7cYour inventory was full, placing kit on the floor kitGive = \u00a77Giving kit {0}. lightningUse = \u00a77Smiting {0} @@ -205,7 +206,7 @@ nickInUse = \u00a7cThat name is already in use. nickSet = \u00a77Your nickname is now \u00a7c{0} nickChanged = Nickname changed. pong = Pong! -powerToolAir = Command can't be attached to air. +powerToolAir = Command can''t be attached to air. powerToolAttach = Command assigned to {0} powerToolRemove = Command removed from {0} foreverAlone = \u00a7cYou have nobody to whom you can reply. @@ -301,4 +302,5 @@ unignorePlayer = You are not ignoring player {0} anymore. ignorePlayer = You ignore player {0} from now on. illegalDate = Illegal date format. timePattern = (?:([0-9]+)\\s*y[a-z]*[,\\s]*)?(?:([0-9]+)\\s*mo[a-z]*[,\\s]*)?(?:([0-9]+)\\s*w[a-z]*[,\\s]*)?(?:([0-9]+)\\s*d[a-z]*[,\\s]*)?(?:([0-9]+)\\s*h[a-z]*[,\\s]*)?(?:([0-9]+)\\s*m[a-z]*[,\\s]*)?(?:([0-9]+)\\s*(?:s[a-z]*)?)? -msgFormat = [{0} -> {1}\u00a7f] {2} \ No newline at end of file +msgFormat = [{0} -> {1}\u00a7f] {2} +kits = \u00a77Kits: {0} \ No newline at end of file diff --git a/Essentials/src/messages_de.properties b/Essentials/src/messages_de.properties index 09a839d97..627a4195c 100644 --- a/Essentials/src/messages_de.properties +++ b/Essentials/src/messages_de.properties @@ -1,4 +1,5 @@ #version: TeamCity +# Single quotes have to be doubled: '' # Translations start here loadinfo = Plugin {0} Version {1} geladen, erstellt von {2}, \u00fcbersetzt von snowleo markedAsNotAway = \u00a77Du wirst nicht mehr als abwesend angezeigt. @@ -301,4 +302,5 @@ unignorePlayer = Du ignorierst Spieler {0} nicht mehr. ignorePlayer = Du ignorierst ab jetzt Spieler {0}. illegalDate = Ung\u00fcltiges Datumsformat. timePattern = (?:([0-9]+)\\s*[yj][a-z]*[,\\s]*)?(?:([0-9]+)\\s*mo[a-z]*[,\\s]*)?(?:([0-9]+)\\s*w[a-z]*[,\\s]*)?(?:([0-9]+)\\s*[dt][a-z]*[,\\s]*)?(?:([0-9]+)\\s*(?:h|st)[a-z]*[,\\s]*)?(?:([0-9]+)\\s*m[a-z]*[,\\s]*)?(?:([0-9]+)\\s*(?:s[a-z]*)?)? -msgFormat = [{0} -> {1}\u00a7f] {2} \ No newline at end of file +msgFormat = [{0} -> {1}\u00a7f] {2} +kits = \u00a77Ausr\u00fcstungen: {0} \ No newline at end of file diff --git a/Essentials/src/messages_en.properties b/Essentials/src/messages_en.properties new file mode 100644 index 000000000..2ec6bb426 --- /dev/null +++ b/Essentials/src/messages_en.properties @@ -0,0 +1,306 @@ +#version: TeamCity +# Single quotes have to be doubled: '' +# Translations start here +loadinfo = Loaded {0} build {1} by {2} +markedAsNotAway = \u00a77You are no longer marked as away. +markedAsAway = \u00a77You are now marked as away. +userIsNotAway = {0} is no longer AFK +userIsAway = {0} is now AFK +backupStarted = Backup started +backupFinished = Backup finished +invalidServer = Invalid server! +usingTempFolderForTesting = Using temp folder for testing: +versionMismatch = Version mismatch! Please update {0} to the same version. +notRecommendedBukkit = Bukkit version is not the recommended build for Essentials. +bukkitFormatChanged = Bukkit version format changed. Version not checked. +itemsCsvNotLoaded = Could not load items.csv. +corruptNodeInConfig = \u00a74Notice: Your configuration file has a corrupt {0} node. +youHaveNewMail = \u00a7cYou have {0} messages!\u00a7f Type \u00a77/mail read\u00a7f to view your mail. +commandNotLoaded = \u00a7cCommand {0} is improperly loaded. +deniedAccessCommand = {0} was denied access to command. +noAccessCommand = \u00a7cYou do not have access to that command. +errorCallingCommand = Error calling command /{0} +commandFailed = Command {0} failed: +bannedPlayersFileNotFound = banned-players.txt not found +bannedPlayersFileError = Error reading banned-players.txt +bannedIpsFileNotFound = banned-ips.txt not found +bannedIpsFileError = Error reading banned-ips.txt +noDestroyPermission = \u00a7cYou do not have permission to destroy that {0}. +noAccessPermission = \u00a7cYou do not have permission to access that {0}. +moreThanZero = Quantities must be greater than 0. +errorWithMessage = \u00a7cError: {0} +creatingConfigFromTemplate = Creating config from template: {0} +creatingEmptyConfig = Creating empty config: {0} +failedToCreateConfig = Failed to create config {0} +couldNotFindTemplate = Could not find template {0} +failedToWriteConfig = Failed to write config {0} +failedToCloseConfig = Failed to close config {0} +notEnoughMoney = You do not have sufficient funds. +missingItems = You do not have {0}x {1}. +tradeSignEmpty = The trade sign does not have enough supply left. +tradeCompleted = \u00a77Trade completed. +backAfterDeath = \u00a77Use the /back command to return to your death point. +mutedUserSpeaks = {0} tried to speak, but is muted. +userCreatedPortal = {0} used a portal and generated an exit portal. +generatingPortal = \u00a77Generating an exit portal. +userUsedPortal = {0} used an existing exit portal. +usingPortal = \u00a77Teleporting via portal to an existing portal. +teleportingPortal = \u00a77Teleporting via portal. +freedMemory = Freed {0} MB. +defaultBanReason = The Ban Hammer has spoken! +noNewMail = \u00a77You have no new mail. +serverFull = Server is full +returnPlayerToJailError = Error occured when trying to return player to jail. +jailMessage = \u00a7cYou do the crime, you do the time. +homeSetToBed = \u00a77Your home is now set to this bed. +moneyTaken = {0} taken from your bank account. +youAreHealed = \u00a77You have been healed. +markMailAsRead = \u00a7cTo mark your mail as read, type /mail clear +balance = \u00a77Balance: {0} +backUsageMsg = \u00a77Returning to previous location. +playerBanned = \u00a7cPlayer {0} banned +banIpAddress = \u00a77Banned IP address +bigTreeSuccess = \u00a77Big tree spawned. +bigTreeFailure = \u00a7cBig tree generation failure. Try again on grass or dirt. +broadcast = [\u00a7cBroadcast\u00a7f]\u00a7a {0} +burnMsg = \u00a77You set {0} on fire for {1} seconds. +playerNotFound = \u00a7cPlayer not found. +inventoryCleared = \u00a77Inventory Cleared. +inventoryClearedOthers = \u00a77Inventory of \u00a7c{0}\u00a77 cleared. +compassBearing = \u00a77Bearing: {0} ({1} degrees). +deleteJail = \u00a77Jail {0} has been removed. +deleteWarp = \u00a77Warp {0} has been removed. +depth = \u00a77You are at sea level. +depthAboveSea = \u00a77You are {0} block(s) above sea level. +depthBelowSea = \u00a77You are {0} block(s) below sea level. +extinguish = \u00a77You extinguished yourself. +extinguishOthers = \u00a77You extinguished {0}. +canTalkAgain = \u00a77You can talk again +haveBeenReleased = \u00a77You have been released +upgradingFilesError = Error while upgrading the files +configFileMoveError = Failed to move config.yml to backup location. +configFileRenameError = Failed to rename temp file to config.yml +fileRenameError = Renaming file {0} failed +userdataMoveError = Failed to move userdata/{0} to userdata/{1}.tmp +duplicatedUserdata = Duplicated userdata: {0} and {1} +userdataMoveBackError = Failed to move userdata/{0}.tmp to userdata/{1} +parseError = Error parsing {0} on line {1} +unknownItemName = Unknown item name: {0} +unknownItemId = Unknown item id: {0} +jailNotExist = That jail does not exist. +unableToSpawnMob = Unable to spawn mob. +creatingPortal = Creating portal at {0},{1},{2}. +notSupportedYet = Not supported yet. +unknownItemInList = Unknown item {0} in {1} list. +teleportationCommencing = \u00a77Teleportation commencing... +cooldownWithMessage = \u00a7cCooldown: {0} +warpingTo = \u00a77Warping to {0}. +timeBeforeTeleport = Time before next teleport: {0} +pendingTeleportCancelled = \u00a7cPending teleportation request cancelled. +dontMoveMessage = \u00a77Teleportation will commence in {0}. Don''t move. +noHomeSet = You have not set a home. +noHomeSetPlayer = Player has not set a home. +timeBeforeHeal = Time before next heal: {0} +addedToAccount = \u00a7a{0} has been added to your account. +moneySentTo = \u00a7a{0} has been sent to {1} +moneyRecievedFrom = \u00a7a{0} has been recieved from {1} +takenFromAccount = \u00a7c{0} has been taken from your account. +emptyWorldName = Set Home: World name is null or empty. +now = now +year = year +years = years +month = month +months = months +day = day +days = days +hour = hour +hours = hours +minute = minute +minutes = minutes +second = second +seconds = seconds +destinationNotSet = Destination not set +holeInFloor = Hole in floor +warpNotExist = That warp does not exist. +similarWarpExist = A warp with a similar name already exists. +warpDeleteError = Problem deleting the warp file. +versionMismatchAll = Version mismatch! Please update all Essentials jars to the same version. +missingPrefixSuffix = Missing a prefix or suffix for {0} +permissionsError = Missing Permissions/GroupManager; chat prefixes/suffixes will be disabled. +shoutFormat = \u00a77[Shout]\u00a7f {0} +notAllowedToShout = \u00a7cYou are not authorized to shout. +questionFormat = \u00a77[Question]\u00a7f {0} +notAllowedToQuestion = \u00a7cYou are not authorized to use question. +localFormat = Local: <{0}> {1} +geoipJoinFormat = Player {0} comes from {1} +cantFindGeoIpDB = Can''t find GeoIP database! +cantReadGeoIpDB = Failed to read GeoIP database! +geoIpUrlEmpty = GeoIP download url is empty. +downloadingGeoIp = Downloading GeoIP database ... this might take a while (country: 0.6 MB, city: 20MB) +geoIpUrlInvalid = GeoIP download url is invalid. +connectionFailed = Failed to open connection. +alertFormat = \u00a73[{0}] \u00a7f {1} \u00a76 {2} at: {3} +alertPlaced = placed: +alertBroke = broke: +alertUsed = used: +buildAlert = \u00a7cYou are not permitted to build +protectionOwner = \u00a76[EssentialsProtect] Protection owner: {0} +spawnSet = \u00a77Spawn location set for group {0}. +teleportNewPlayerError = Failed to teleport new player +essentialsReload = \u00a77Essentials Reloaded {0} +gcmax = Maximum memory: {0} MB +gcmin = Minimum memory: {0} MB +gcchunks = chunks, +gcentities = entities +godMode = \u00a77God mode {0}. +enabled = enabled +disabled = disabled +godEnabledFor = enabled for {0} +godDisabledFor = disabled for {0} +heal = \u00a77You have been healed. +healOther = \u00a77Healed {0}. +helpPages = Page \u00a7c{0}\u00a7f of \u00a7c{1}\u00a7f: +helpConsole = To view help from the console, type ?. +helpOp = \u00a7c[HelpOp]\u00a7f \u00a77{0}:\u00a7f {1} +infoFileDoesNotExist = File info.txt does not exist. Creating one for you. +infoPages = Page \u00a7c{0}\u00a7f of \u00a7c{1}\u00a7f: +infoChapter = Select chapter: +infoUnknownChapter = Unknown chapter. +infoChapterPages = Chapter {0}, page \u00a7c{1}\u00a7f of \u00a7c{2}\u00a7f: +invBigger = The other users inventory is bigger than yours. +invRestored = Your inventory has been restored. +invSee = You see the inventory of {0}. +invSeeHelp = Use /invsee to restore your inventory. +cantSpawnItem = \u00a7cYou are not allowed to spawn the item {0} +itemSpawn = \u00a77Giving {0} of {1} +jumpError = That would hurt your computer''s brain. +kickDefault = Kicked from server +kill = \u00a77Killed {0}. +noKits = \u00a77There are no kits available yet +kitError = \u00a7cThere are no valid kits. +kitError2 = \u00a7cThat kit does not exist or is improperly defined. +kitErrorHelp = \u00a7cPerhaps an item is missing a quantity in the configuration? +noKitPermission = \u00a7cYou need the \u00a7c{0}\u00a7c permission to use that kit. +kitTimed = \u00a7cYou can''t use that kit again for another {0}. +kitInvFull = \u00a7cYour inventory was full, placing kit on the floor +kitGive = \u00a77Giving kit {0}. +lightningUse = \u00a77Smiting {0} +lightningSmited = \u00a77You have just been smited +connectedPlayers = Connected players: +noMail = You do not have any mail +mailClear = \u00a7cTo mark your mail as read, type /mail clear +noMailSendPerm = \u00a7cYou do not have the \u00a7fessentials.mail.send\u00a7c permission. +playerNeverOnServer = \u00a7cPlayer {0} was never on this server. +mailSent = \u00a77Mail sent! +mailCleared = \u00a77Mail Cleared! +voiceSilenced = \u00a77Your voice has been silenced +noMotd = \u00a7cThere is no message of the day." +me = me +mutedPlayerFor = Player {0} muted for {1}. +mutedPlayer = Player {0} muted. +unmutedPlayer = Player {0} unmuted. +nickOthersPermission = \u00a7cYou do not have permission to change the nickname of others +nickNoMore = \u00a7You no longer have a nickname. +nickNamesAlpha = \u00a7cNicknames must be alphanumeric. +nickInUse = \u00a7cThat name is already in use. +nickSet = \u00a77Your nickname is now \u00a7c{0} +nickChanged = Nickname changed. +pong = Pong! +powerToolAir = Command can''t be attached to air. +powerToolAttach = Command assigned to {0} +powerToolRemove = Command removed from {0} +foreverAlone = \u00a7cYou have nobody to whom you can reply. +is = is +reloadAllPlugins = \u00a77Reloaded all plugins. +noRules = \u00a7cThere are no rules specified yet. +seenOnline = Player {0} is online since {1} +seenOffline = Player {0} is offline since {1} +itemCannotBeSold = That item cannot be sold to the server. +itemMustBeStacked = Item must be traded in stacks. A quantity of 2s would be two stacks, etc. +itemNotEnough1 = \u00a7cYou do not have enough of that item to sell. +itemNotEnough2 = \u00a77If you meant to sell all of your items of that type, use /sell itemname +itemNotEnough3 = \u00a77/sell itemname -1 will sell all but one item, etc. +itemSold = \u00a77Sold for \u00a7c {0} \u00a77 ({1} items at {2} each) +itemSoldConsole = {0} sold {1} for \u00a77 {2} \u00a77 ({3} items at {4} each) +itemSellAir = You really tried to sell Air? Put an item in your hand. +homeSet = \u00a77Home set. +jailSet = \u00a77Jail {0} has been set +warpSet = \u00a77Warp {0} set. +worthSet = Worth value set +mobSpawnTarget = Target block must be a mob spawner. +mobSpawnError = Error while changing mob spawner. +invalidMob = Invalid mob type. +unableToSpawnMob = Unable to spawn mob. +mobSpawnLimit = Mob quantity limited to server limit +soloMob = That mob likes to be alone +numberRequired = A number goes there, silly. +spawned = spawned +slimeMalformedSize = Malformed size. +sheepMalformedColor = Malformed color. +suicideMessage = \u00a77Goodbye Cruel World... +suicideSuccess = \u00a77{0} took their own life +tempBanned = Temporarily banned from server for {0} +thunderDuration = You {0} thunder in your world for {1} seconds. +thunder = You {0} thunder in your world +deleteFileError = Could not delete file: {0} +userDoesNotExist = The user {0} does not exist. +negativeBalanceError = User is not allowed to have a negative balance. +timeSet = Time set in all worlds. +onlyDayNight = /time only supports day/night. +mayNotJail = \u00a7cYou may not jail that person +userJailed = \u00a77You have been jailed +playerJailed = \u00a77Player {0} jailed. +playerJailedFor = \u00a77Player {0} jailed for {1}. +playerInJail = \u00a7cPlayer is already in jail {0}. +teleportTop = \u00a77Teleporting to top. +teleporting = \u00a77Teleporting... +teleportDisabled = {0} has teleportation disabled. +needTpohere = You need access to /tpohere to teleport other players. +teleportAtoB = \u00a77{0}\u00a77 teleported you to {1}\u00a77. +teleportRequest = \u00a7c{0}\u00a7c has requested to teleport to you. +typeTpaccept = \u00a77To teleport, type \u00a7c/tpaccept\u00a77. +typeTpdeny = \u00a77To deny this request, type \u00a7c/tpdeny\u00a77. +requestSent = \u00a77Request sent to {0}\u00a77. +teleportHereRequest = \u00a7c{0}\u00a7c has requested that you teleport to him/her. +teleportAll = \u00a77Teleporting all players... +noPendingRequest = You do not have a pending request. +requestDenied = \u00a77Teleport request denied. +requestAccepted = \u00a77Teleport request accepted. +teleportationEnabled = \u00a77Teleportation enabled. +teleportationDisabled = \u00a77Teleportation disabled. +treeSpawned = \u00a77Tree spawned. +treeFailure = \u00a7cTree generation failure. Try again on grass or dirt. +unbannedPlayer = Unbanned player. +unbannedIP = Unbanned IP address. +unlimitedItems = Unlimited items: +none = none +unlimitedItemPermission = \u00a7cNo permission for unlimited item {0}. +disableUnlimited = \u00a77Disable unlimited placing of {0} for {1}. +enableUnlimited = \u00a77Giving unlimited amount of {0} to {1}. +warpListPermission = \u00a7cYou do not have Permission to list that warps. +noWarpsDefined = No warps defined +warpUsePermission = \u00a7cYou do not have Permission to use that warp. +weatherSunFor = \u00a77You set the weather to sun in your world for {0} seconds +weatherSun = \u00a77You set the weather to sun in your world +weatherStormFor = \u00a77You set the weather to storm in your world for {0} seconds +weatherStorm = \u00a77You set the weather to storm in your world +whoisIs = {0} is {1} +whoisHealth = \u00a79 - Health: {0}/20 +whoisLocation = \u00a79 - Location: ({0}, {1}, {2}, {3}) +whoisMoney = \u00a79 - Money: {0} +whoisStatusAway = \u00a79 - Status: \u00a7cAway\u00a7f +whoisStatusAvailable = \u00a79 - Status: Available +whoisIPAddress = \u00a79 - IP Address: {0} +whoisGeoLocation = \u00a79 - Location: {0} +invalidWorld = \u00a7cInvalid world. +possibleWorlds = \u00a77Possible worlds are the numbers 0 through {0}. +typeWorldName = \u00a77You can also type the name of a specific world. +worth = \u00a77Stack of {0} worth \u00a7c{1}\u00a77 ({2} item(s) at {3} each) +worthMeta = \u00a77Stack of {0} with metadata of {1} worth \u00a7c{2}\u00a77 ({3} item(s) at {4} each) +onlyPlayers = Only in-game players can use {0}. +unignorePlayer = You are not ignoring player {0} anymore. +ignorePlayer = You ignore player {0} from now on. +illegalDate = Illegal date format. +timePattern = (?:([0-9]+)\\s*y[a-z]*[,\\s]*)?(?:([0-9]+)\\s*mo[a-z]*[,\\s]*)?(?:([0-9]+)\\s*w[a-z]*[,\\s]*)?(?:([0-9]+)\\s*d[a-z]*[,\\s]*)?(?:([0-9]+)\\s*h[a-z]*[,\\s]*)?(?:([0-9]+)\\s*m[a-z]*[,\\s]*)?(?:([0-9]+)\\s*(?:s[a-z]*)?)? +msgFormat = [{0} -> {1}\u00a7f] {2} +kits = \u00a77Kits: {0} \ No newline at end of file