From e325abbc174ede9ba17773d61c36c494e85ec23b Mon Sep 17 00:00:00 2001
From: boy0001 <jessepaleg@gmail.com>
Date: Sun, 10 May 2015 21:14:56 +1000
Subject: [PATCH] Translations redesign

Grouping of translation messages
credit: @soulofwolf18
---
 .../intellectualcrafters/plot/config/C.java   | 547 ++++++++--------
 .../plot/config/C_german.java                 | 612 ------------------
 .../plot/database/SQLManager.java             |   2 +-
 .../translation/YamlTranslationFile.java      | 145 +++--
 .../translation/bukkit/TranslationPlugin.java |   2 +-
 5 files changed, 379 insertions(+), 929 deletions(-)
 delete mode 100644 PlotSquared/src/main/java/com/intellectualcrafters/plot/config/C_german.java

diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/config/C.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/config/C.java
index 7598e8787..1e0e3cb33 100644
--- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/config/C.java
+++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/config/C.java
@@ -32,309 +32,309 @@ import com.intellectualsites.translation.bukkit.BukkitTranslation;
 /**
  * Captions class.
  *
- * @author Citymonstret	
+ * @author Citymonstret 
  */
 public enum C {
     /*
      * Confirm
      */
-    FAILED_CONFIRM("$2You have no pending actions to confirm!"),
-    REQUIRES_CONFIRM("$2Are you sure you wish to execute: $1%s$2?\n$2This cannot be undone! If you are sure: $1/plot confirm"),
+    FAILED_CONFIRM("$2You have no pending actions to confirm!", "Confirm"),
+    REQUIRES_CONFIRM("$2Are you sure you wish to execute: $1%s$2?\n$2This cannot be undone! If you are sure: $1/plot confirm", "Confirm"),
     /*
      * Move
      */
-    MOVE_SUCCESS("$4Successfully moved plot."),
-    COPY_SUCCESS("$4Successfully copied plot."),
-    REQUIRES_UNOWNED("$2The location specified is already occupied."),
+    MOVE_SUCCESS("$4Successfully moved plot.", "Move"),
+    COPY_SUCCESS("$4Successfully copied plot.", "Move"),
+    REQUIRES_UNOWNED("$2The location specified is already occupied.", "Move"),
     /*
      * Compass
      */
-    COMPASS_TARGET("$4Successfully targeted plot with compass"),
+    COMPASS_TARGET("$4Successfully targeted plot with compass", "Compass"),
     /*
      * Cluster
      */
-    CLUSTER_AVAILABLE_ARGS("$1The following sub commands are available: $4list$2, $4create$2, $4delete$2, $4resize$2, $4invite$2, $4kick$2, $4leave$2, $4helpers$2, $4info$2, $4tp$2, $4sethome"),
-    CLUSTER_LIST_HEADING("$2There are $1%s$2 clusters in this world"),
-    CLUSTER_LIST_ELEMENT("$2 - $1%s\n"),
-    CLUSTER_INTERSECTION("$2The proposed area overlaps with $1%s$2 existing cluster/s"),
-    CLUSTER_ADDED("$4Successfully created the cluster."),
-    CLUSTER_DELETED("$4Successfully deleted the cluster."),
-    CLUSTER_RESIZED("$4Successfully resized the cluster."),
-    CLUSTER_ADDED_USER("$4Successfully added user to the cluster."),
-    CANNOT_KICK_PLAYER("$2You cannot kick that player"),
-    CLUSTER_INVITED("$1You have been invited to the following cluster: $2%s"),
-    CLUSTER_REMOVED("$1You have been removed from cluster: $2%s"),
-    CLUSTER_KICKED_USER("$4Successfully kicked the user"),
-    INVALID_CLUSTER("$1Invalid cluster name: $2%s"),
-    CLUSTER_NOT_ADDED("$2That player was not added to the plot cluster"),
-    CLUSTER_CANNOT_LEAVE("$1You must delete or transfer ownership before leaving"),
-    CLUSTER_ADDED_HELPER("$4Successfully added a helper to the cluster"),
-    CLUSTER_REMOVED_HELPER("$4Successfully removed a helper to the cluster"),
-    CLUSTER_REGENERATED("$4Successfully started cluster regeneration"),
-    CLUSTER_TELEPORTING("$4Teleporting..."),
-    CLUSTER_INFO("$1Current cluster: $2%id%\n$1Name: $2%name%\n$1Owner: $2%owner%\n$1Size: $2%size%\n$1Rights: $2%rights%"),
-    CLUSTER_CURRENT_PLOTID("$1Current plot: $2%s"),
+    CLUSTER_AVAILABLE_ARGS("$1The following sub commands are available: $4list$2, $4create$2, $4delete$2, $4resize$2, $4invite$2, $4kick$2, $4leave$2, $4helpers$2, $4info$2, $4tp$2, $4sethome", "Cluster"),
+    CLUSTER_LIST_HEADING("$2There are $1%s$2 clusters in this world", "Cluster"),
+    CLUSTER_LIST_ELEMENT("$2 - $1%s\n", "Cluster"),
+    CLUSTER_INTERSECTION("$2The proposed area overlaps with $1%s$2 existing cluster/s", "Cluster"),
+    CLUSTER_ADDED("$4Successfully created the cluster.", "Cluster"),
+    CLUSTER_DELETED("$4Successfully deleted the cluster.", "Cluster"),
+    CLUSTER_RESIZED("$4Successfully resized the cluster.", "Cluster"),
+    CLUSTER_ADDED_USER("$4Successfully added user to the cluster.", "Cluster"),
+    CANNOT_KICK_PLAYER("$2You cannot kick that player", "Cluster"),
+    CLUSTER_INVITED("$1You have been invited to the following cluster: $2%s", "Cluster"),
+    CLUSTER_REMOVED("$1You have been removed from cluster: $2%s", "Cluster"),
+    CLUSTER_KICKED_USER("$4Successfully kicked the user", "Cluster"),
+    INVALID_CLUSTER("$1Invalid cluster name: $2%s", "Cluster"),
+    CLUSTER_NOT_ADDED("$2That player was not added to the plot cluster", "Cluster"),
+    CLUSTER_CANNOT_LEAVE("$1You must delete or transfer ownership before leaving", "Cluster"),
+    CLUSTER_ADDED_HELPER("$4Successfully added a helper to the cluster", "Cluster"),
+    CLUSTER_REMOVED_HELPER("$4Successfully removed a helper to the cluster", "Cluster"),
+    CLUSTER_REGENERATED("$4Successfully started cluster regeneration", "Cluster"),
+    CLUSTER_TELEPORTING("$4Teleporting...", "Cluster"),
+    CLUSTER_INFO("$1Current cluster: $2%id%\n$1Name: $2%name%\n$1Owner: $2%owner%\n$1Size: $2%size%\n$1Rights: $2%rights%", "Cluster"),
+    CLUSTER_CURRENT_PLOTID("$1Current plot: $2%s", "Cluster"),
     /*
      * Border
      */
-    BORDER("$2You are outside the current map border"),
+    BORDER("$2You are outside the current map border", "Border"),
     /*
      * Unclaim
      */
-    UNCLAIM_SUCCESS("$4You successfully unclaimed the plot."),
+    UNCLAIM_SUCCESS("$4You successfully unclaimed the plot.", "Unclaim"),
     /*
      * WorldEdit masks
      */
-    REQUIRE_SELECTION_IN_MASK("$2%s of your selection is not within your plot mask. You can only make edits within your plot."),
-    WORLDEDIT_VOLUME("$2You cannot select a volume of %current%. The maximum volume you can modify is %max%."),
-    WORLDEDIT_ITERATIONS("$2You cannot iterate %current% times. The maximum number of iterations allowed is %max%."),
-    WORLDEDIT_UNSAFE("$2Access to that command has been blocked"),
-    WORLDEDIT_BYPASS("$2&oTo bypass your restrictions use $4/plot wea"),
-    WORLDEDIT_UNMASKED("$1Your WorldEdit is now unrestricted."),
-    WORLDEDIT_RESTRICTED("$1Your WorldEdit is now restricted."),
+    REQUIRE_SELECTION_IN_MASK("$2%s of your selection is not within your plot mask. You can only make edits within your plot.", "WorldEdit Masks"),
+    WORLDEDIT_VOLUME("$2You cannot select a volume of %current%. The maximum volume you can modify is %max%.", "WorldEdit Masks"),
+    WORLDEDIT_ITERATIONS("$2You cannot iterate %current% times. The maximum number of iterations allowed is %max%.", "WorldEdit Masks"),
+    WORLDEDIT_UNSAFE("$2Access to that command has been blocked", "WorldEdit Masks"),
+    WORLDEDIT_BYPASS("$2&oTo bypass your restrictions use $4/plot wea", "WorldEdit Masks"),
+    WORLDEDIT_UNMASKED("$1Your WorldEdit is now unrestricted.", "WorldEdit Masks"),
+    WORLDEDIT_RESTRICTED("$1Your WorldEdit is now restricted.", "WorldEdit Masks"),
     /*
      * Records
      */
-    RECORD_PLAY("$2%player $2started playing record $1%name"),
-    NOTIFY_ENTER("$2%player $2entered your plot ($1%plot$2)"),
-    NOTIFY_LEAVE("$2%player $2left your plot ($1%plot$2)"),
+    RECORD_PLAY("$2%player $2started playing record $1%name", "Records"),
+    NOTIFY_ENTER("$2%player $2entered your plot ($1%plot$2)", "Records"),
+    NOTIFY_LEAVE("$2%player $2left your plot ($1%plot$2)", "Records"),
     /*
      * Swap
      */
-    SWAP_OVERLAP("$2The proposed areas are not allowed to overlap"),
-    SWAP_DIMENSIONS("$2The proposed areas must have comparable dimensions"),
-    SWAP_SYNTAX("$2/plots swap <plot id>"),
-    SWAP_SUCCESS("$4Successfully swapped plots"),
-    STARTED_SWAP("$2Started plot swap task. You will be notified when it finishes"),
+    SWAP_OVERLAP("$2The proposed areas are not allowed to overlap", "Swap"),
+    SWAP_DIMENSIONS("$2The proposed areas must have comparable dimensions", "Swap"),
+    SWAP_SYNTAX("$2/plots swap <plot id>", "Swap"),
+    SWAP_SUCCESS("$4Successfully swapped plots", "Swap"),
+    STARTED_SWAP("$2Started plot swap task. You will be notified when it finishes", "Swap"),
     /*
      * Comment
      */
-    NOT_VALID_INBOX_INDEX("$2No comment at index %s"),
-    INBOX_ITEM("$2 - $4%s"),
-    COMMENT_SYNTAX("$2Use /plots comment [X;Z] <%s> <comment>"),
-    INVALID_INBOX("$2That is not a valid inbox.\n$1Accepted values: %s"),
-    NO_PERM_INBOX("$2You do not have permission for that inbox"),
-    NO_PERM_INBOX_MODIFY("$2You do not have permission to modify that inbox"),
-    NO_PLOT_INBOX("$2You must  stand in or supply a plot argument"),
-    COMMENT_REMOVED("$4Successfully deleted comment/s:n$2 - '$3%s$2'"),
-    COMMENT_ADDED("$4A comment has been left"),
-    COMMENT_HEADER("$2====== Comments ======"),
+    NOT_VALID_INBOX_INDEX("$2No comment at index %s", "Comment"),
+    INBOX_ITEM("$2 - $4%s", "Comment"),
+    COMMENT_SYNTAX("$2Use /plots comment [X;Z] <%s> <comment>", "Comment"),
+    INVALID_INBOX("$2That is not a valid inbox.\n$1Accepted values: %s", "Comment"),
+    NO_PERM_INBOX("$2You do not have permission for that inbox", "Comment"),
+    NO_PERM_INBOX_MODIFY("$2You do not have permission to modify that inbox", "Comment"),
+    NO_PLOT_INBOX("$2You must  stand in or supply a plot argument", "Comment"),
+    COMMENT_REMOVED("$4Successfully deleted comment/s:n$2 - '$3%s$2'", "Comment"),
+    COMMENT_ADDED("$4A comment has been left", "Comment"),
+    COMMENT_HEADER("$2====== Comments ======", "Comment"),
     /*
      * Console
      */
-    NOT_CONSOLE("$2For safety reasons, this command can only be executed by console."),
-    IS_CONSOLE("$2This command can only be executed by a player."),
+    NOT_CONSOLE("$2For safety reasons, this command can only be executed by console.", "Console"),
+    IS_CONSOLE("$2This command can only be executed by a player.", "Console"),
     /*
      * Clipboard
      */
-    CLIPBOARD_SET("$2The current plot is now copied to your clipboard, use $1/plot paste$2 to paste it"),
-    PASTED("$4The plot selection was successfully pasted. It has been cleared from your clipboard."),
-    PASTE_FAILED("$2Failed to paste the selection. Reason: $2%s"),
-    NO_CLIPBOARD("$2You don't have a selection in your clipboard"),
-    CLIPBOARD_INFO("$2Current Selection - Plot ID: $1%id$2, Width: $1%width$2, Total Blocks: $1%total$2"),
+    CLIPBOARD_SET("$2The current plot is now copied to your clipboard, use $1/plot paste$2 to paste it", "Clipboard"),
+    PASTED("$4The plot selection was successfully pasted. It has been cleared from your clipboard.", "Clipboard"),
+    PASTE_FAILED("$2Failed to paste the selection. Reason: $2%s", "Clipboard"),
+    NO_CLIPBOARD("$2You don't have a selection in your clipboard", "Clipboard"),
+    CLIPBOARD_INFO("$2Current Selection - Plot ID: $1%id$2, Width: $1%width$2, Total Blocks: $1%total$2", "Clipboard"),
     /*
      * Ratings
      */
-    RATING_NOT_VALID("$2You need to specify a number between 1 and 10"),
-    RATING_ALREADY_EXISTS("$2You have already rated plot $2%s"),
-    RATING_APPLIED("$4You successfully rated plot $2%s"),
-    RATING_NOT_YOUR_OWN("$2You cannot rate your own plot"),
-    RATING_NOT_OWNED("$2You cannot rate a plot that is not claimed by anyone"),
+    RATING_NOT_VALID("$2You need to specify a number between 1 and 10", "Ratings"),
+    RATING_ALREADY_EXISTS("$2You have already rated plot $2%s", "Ratings"),
+    RATING_APPLIED("$4You successfully rated plot $2%s", "Ratings"),
+    RATING_NOT_YOUR_OWN("$2You cannot rate your own plot", "Ratings"),
+    RATING_NOT_OWNED("$2You cannot rate a plot that is not claimed by anyone", "Ratings"),
     /*
      * Economy Stuff
      */
-    ECON_DISABLED("$2Economy is not enabled"),
-    CANNOT_AFFORD_PLOT("$2You cannot afford to buy this plot. It costs $1%s"),
-    NOT_FOR_SALE("$2This plot is not for sale"),
-    CANNOT_BUY_OWN("$2You cannot buy your own plot"),
-    PLOT_SOLD("$4Your plot; $1%s$4, has been sold to $1%s$4 for $1$%s"),
-    CANNOT_AFFORD_MERGE("$2You cannot afford to merge the plots. It costs $1%s"),
-    ADDED_BALANCE("$1%s $2has been added to your balance"),
-    REMOVED_BALANCE("$1%s $2has been taken from your balance"),
+    ECON_DISABLED("$2Economy is not enabled", "Economy"),
+    CANNOT_AFFORD_PLOT("$2You cannot afford to buy this plot. It costs $1%s", "Economy"),
+    NOT_FOR_SALE("$2This plot is not for sale", "Economy"),
+    CANNOT_BUY_OWN("$2You cannot buy your own plot", "Economy"),
+    PLOT_SOLD("$4Your plot; $1%s$4, has been sold to $1%s$4 for $1$%s", "Economy"),
+    CANNOT_AFFORD_MERGE("$2You cannot afford to merge the plots. It costs $1%s", "Economy"),
+    ADDED_BALANCE("$1%s $2has been added to your balance", "Economy"),
+    REMOVED_BALANCE("$1%s $2has been taken from your balance", "Economy"),
     /*
      * Setup Stuff
      */
-    SETUP_INIT("$1Usage: $2/plot setup <value>"),
-    SETUP_STEP("$3[$1Step %s$3] $1%s $2- $1Expecting: $2%s $1Default: $2%s"),
-    SETUP_INVALID_ARG("$2%s is not a valid argument for step %s. To cancel setup use: $1/plot setup cancel"),
-    SETUP_VALID_ARG("$2Value $1%s $2set to %s"),
-    SETUP_FINISHED("$3If you are using MULTIVERSE or MULTIWORLD the world should have just been created. Otherwise you will need to add the world manually through the bukkit.yml"),
-    SETUP_WORLD_TAKEN("$2%s is already a registered plotworld"),
-    SETUP_MISSING_WORLD("$2You need to specify a world name ($1/plot setup &l<world>$1 <generator>$2)\n$1Additional commands:\n$2 - $1/plot setup <value>\n$2 - $1/plot setup back\n$2 - $1/plot setup cancel"),
-    SETUP_MISSING_GENERATOR("$2You need to specify a generator ($1/plot setup <world> &l<generator>&r$2)\n$1Additional commands:\n$2 - $1/plot setup <value>\n$2 - $1/plot setup back\n$2 - $1/plot setup cancel"),
-    SETUP_INVALID_GENERATOR("$2Invalid generator. Possible options: %s"),
+    SETUP_INIT("$1Usage: $2/plot setup <value>", "Setup"),
+    SETUP_STEP("$3[$1Step %s$3] $1%s $2- $1Expecting: $2%s $1Default: $2%s", "Setup"),
+    SETUP_INVALID_ARG("$2%s is not a valid argument for step %s. To cancel setup use: $1/plot setup cancel", "Setup"),
+    SETUP_VALID_ARG("$2Value $1%s $2set to %s", "Setup"),
+    SETUP_FINISHED("$3If you are using MULTIVERSE or MULTIWORLD the world should have just been created. Otherwise you will need to add the world manually through the bukkit.yml", "Setup"),
+    SETUP_WORLD_TAKEN("$2%s is already a registered plotworld", "Setup"),
+    SETUP_MISSING_WORLD("$2You need to specify a world name ($1/plot setup &l<world>$1 <generator>$2)\n$1Additional commands:\n$2 - $1/plot setup <value>\n$2 - $1/plot setup back\n$2 - $1/plot setup cancel", "Setup"),
+    SETUP_MISSING_GENERATOR("$2You need to specify a generator ($1/plot setup <world> &l<generator>&r$2)\n$1Additional commands:\n$2 - $1/plot setup <value>\n$2 - $1/plot setup back\n$2 - $1/plot setup cancel", "Setup"),
+    SETUP_INVALID_GENERATOR("$2Invalid generator. Possible options: %s", "Setup"),
     /*
      * Schematic Stuff
      */
-    SCHEMATIC_MISSING_ARG("$2You need to specify an argument. Possible values: $1test <name>$2 , $1save$2 , $1paste $2, $1exportall"),
-    SCHEMATIC_INVALID("$2That is not a valid schematic. Reason: $2%s"),
-    SCHEMATIC_VALID("$2That is a valid schematic"),
-    SCHEMATIC_PASTE_FAILED("$2Failed to paste the schematic"),
-    SCHEMATIC_PASTE_SUCCESS("$4The schematic pasted successfully"),
+    SCHEMATIC_MISSING_ARG("$2You need to specify an argument. Possible values: $1test <name>$2 , $1save$2 , $1paste $2, $1exportall", "Schematics"),
+    SCHEMATIC_INVALID("$2That is not a valid schematic. Reason: $2%s", "Schematics"),
+    SCHEMATIC_VALID("$2That is a valid schematic", "Schematics"),
+    SCHEMATIC_PASTE_FAILED("$2Failed to paste the schematic", "Schematics"),
+    SCHEMATIC_PASTE_SUCCESS("$4The schematic pasted successfully", "Schematics"),
     /*
      * Title Stuff
      */
-    TITLE_ENTERED_PLOT("Plot: %world%;%x%;%z%"),
-    TITLE_ENTERED_PLOT_COLOR("GOLD"),
-    TITLE_ENTERED_PLOT_SUB("Owned by %s"),
-    TITLE_ENTERED_PLOT_SUB_COLOR("RED"),
-    TITLE_LEFT_PLOT("You left plot %s"),
-    TITLE_LEFT_PLOT_COLOR("GOLD"),
-    TITLE_LEFT_PLOT_SUB("Owned by %s"),
-    TITLE_LEFT_PLOT_SUB_COLOR("RED"),
-    PREFIX_GREETING("$1%id%$2> "),
-    PREFIX_FAREWELL("$1%id%$2> "),
+    TITLE_ENTERED_PLOT("Plot: %world%;%x%;%z%", "Titles"),
+    TITLE_ENTERED_PLOT_COLOR("GOLD", "Titles"),
+    TITLE_ENTERED_PLOT_SUB("Owned by %s", "Titles"),
+    TITLE_ENTERED_PLOT_SUB_COLOR("RED", "Titles"),
+    TITLE_LEFT_PLOT("You left plot %s", "Titles"),
+    TITLE_LEFT_PLOT_COLOR("GOLD", "Titles"),
+    TITLE_LEFT_PLOT_SUB("Owned by %s", "Titles"),
+    TITLE_LEFT_PLOT_SUB_COLOR("RED", "Titles"),
+    PREFIX_GREETING("$1%id%$2> ", "Titles"),
+    PREFIX_FAREWELL("$1%id%$2> ", "Titles"),
     /*
      * Core Stuff
      */
-    PREFIX("$3[$1P2$3] $2"),
-    ENABLED("$1PlotSquared is now enabled"),
-    EXAMPLE_MESSAGE("$2This is an example message &k!!!"),
+    PREFIX("$3[$1P2$3] $2", "Core"),
+    ENABLED("$1PlotSquared is now enabled", "Core"),
+    EXAMPLE_MESSAGE("$2This is an example message &k!!!", "Core"),
     /*
      * Reload
      */
-    RELOADED_CONFIGS("$1Translations and world settings have been reloaded"),
-    RELOAD_FAILED("$2Failed to reload file configurations"),
+    RELOADED_CONFIGS("$1Translations and world settings have been reloaded", "Reload"),
+    RELOAD_FAILED("$2Failed to reload file configurations", "Reload"),
     /*
      * BarAPI
      */
-    BOSSBAR_CLEARING("$2Clearing plot: $1%id%"),
+    BOSSBAR_CLEARING("$2Clearing plot: $1%id%", "Bar API"),
     /*
      * Alias
      */
-    ALIAS_SET_TO("$2Plot alias set to $1%alias%"),
-    MISSING_ALIAS("$2You need to specify an alias"),
-    ALIAS_TOO_LONG("$2The alias must be < 50 characters in length"),
-    ALIAS_IS_TAKEN("$2That alias is already taken"),
+    ALIAS_SET_TO("$2Plot alias set to $1%alias%", "Alias"),
+    MISSING_ALIAS("$2You need to specify an alias", "Alias"),
+    ALIAS_TOO_LONG("$2The alias must be < 50 characters in length", "Alias"),
+    ALIAS_IS_TAKEN("$2That alias is already taken", "Alias"),
     /*
      * Position
      */
-    MISSING_POSITION("$2You need to specify a position. Possible values: $1none"),
-    POSITION_SET("$1Home position set to your current location"),
-    HOME_ARGUMENT("$2Use /plot set home [none]"),
-    INVALID_POSITION("$2That is not a valid position value"),
+    MISSING_POSITION("$2You need to specify a position. Possible values: $1none", "Position"),
+    POSITION_SET("$1Home position set to your current location", "Position"),
+    HOME_ARGUMENT("$2Use /plot set home [none]", "Position"),
+    INVALID_POSITION("$2That is not a valid position value", "Position"),
     /*
      * Time
      */
-    TIME_FORMAT("$1%hours%, %min%, %sec%"),
+    TIME_FORMAT("$1%hours%, %min%, %sec%", "Time"),
     /*
      * Permission
      */
-    NO_SCHEMATIC_PERMISSION("$2You don't have the permission required to use schematic $1%s"),
-    NO_PERMISSION("$2You are lacking the permission node: $1%s"),
-    NO_PLOT_PERMS("$2You must be the plot owner to perform this action"),
-    CANT_CLAIM_MORE_PLOTS("$2You can't claim more plots."),
-    CANT_TRANSFER_MORE_PLOTS("$2You can't send more plots to that user"),
-    CANT_CLAIM_MORE_PLOTS_NUM("$2You can't claim more than $1%s $2plots at once"),
-    YOU_BE_DENIED("$2You are not allowed to enter this plot"),
-    NO_PERM_MERGE("$2You are not the owner of the plot: $1%plot%"),
-    UNLINK_REQUIRED("$2An unlink is required to do this."),
-    UNLINK_IMPOSSIBLE("$2You can only unlink a mega-plot"),
-    UNLINK_SUCCESS("$2Successfully unlinked plots."),
-    NO_MERGE_TO_MEGA("$2Mega plots cannot be merged into. Please merge from the desired mega plot."),
-    MERGE_NOT_VALID("$2This merge request is no longer valid."),
-    MERGE_ACCEPTED("$2The merge request has been accepted"),
-    SUCCESS_MERGE("$2Plots have been merged!"),
-    MERGE_REQUESTED("$2Successfully sent a merge request"),
-    MERGE_REQUEST_CONFIRM("merge request from %s"),
+    NO_SCHEMATIC_PERMISSION("$2You don't have the permission required to use schematic $1%s", "Permission"),
+    NO_PERMISSION("$2You are lacking the permission node: $1%s", "Permission"),
+    NO_PLOT_PERMS("$2You must be the plot owner to perform this action", "Permission"),
+    CANT_CLAIM_MORE_PLOTS("$2You can't claim more plots.", "Permission"),
+    CANT_TRANSFER_MORE_PLOTS("$2You can't send more plots to that user", "Permission"),
+    CANT_CLAIM_MORE_PLOTS_NUM("$2You can't claim more than $1%s $2plots at once", "Permission"),
+    YOU_BE_DENIED("$2You are not allowed to enter this plot", "Permission"),
+    NO_PERM_MERGE("$2You are not the owner of the plot: $1%plot%", "Permission"),
+    UNLINK_REQUIRED("$2An unlink is required to do this.", "Permission"),
+    UNLINK_IMPOSSIBLE("$2You can only unlink a mega-plot", "Permission"),
+    UNLINK_SUCCESS("$2Successfully unlinked plots.", "Permission"),
+    NO_MERGE_TO_MEGA("$2Mega plots cannot be merged into. Please merge from the desired mega plot.", "Permission"),
+    MERGE_NOT_VALID("$2This merge request is no longer valid.", "Permission"),
+    MERGE_ACCEPTED("$2The merge request has been accepted", "Permission"),
+    SUCCESS_MERGE("$2Plots have been merged!", "Permission"),
+    MERGE_REQUESTED("$2Successfully sent a merge request", "Permission"),
+    MERGE_REQUEST_CONFIRM("merge request from %s", "Permission"),
     /*
      * Commands
      */
-    NOT_VALID_SUBCOMMAND("$2That is not a valid subcommand"),
-    DID_YOU_MEAN("$2Did you mean: $1%s"),
-    NAME_LITTLE("$2%s name is too short, $1%s$2<$1%s"),
-    NO_COMMANDS("$2I'm sorry, but you're not permitted to use any subcommands."),
-    SUBCOMMAND_SET_OPTIONS_HEADER("$2Possible Values: "),
-    COMMAND_SYNTAX("$1Usage: $2%s"),
+    NOT_VALID_SUBCOMMAND("$2That is not a valid subcommand", "Commands"),
+    DID_YOU_MEAN("$2Did you mean: $1%s", "Commands"),
+    NAME_LITTLE("$2%s name is too short, $1%s$2<$1%s", "Commands"),
+    NO_COMMANDS("$2I'm sorry, but you're not permitted to use any subcommands.", "Commands"),
+    SUBCOMMAND_SET_OPTIONS_HEADER("$2Possible Values: ", "Commands"),
+    COMMAND_SYNTAX("$1Usage: $2%s", "Commands"),
     /*
      * Player not found
      */
-    INVALID_PLAYER("$2Player not found: $1%s."),
+    INVALID_PLAYER("$2Player not found: $1%s.", "Errors"),
     /*
      *
      */
-    COMMAND_WENT_WRONG("$2Something went wrong when executing that command..."),
+    COMMAND_WENT_WRONG("$2Something went wrong when executing that command...", "Errors"),
     /*
      * purge
      */
-    PURGE_SYNTAX("Use /plot purge <x;z|player|unowned|unknown|all> <world>"),
-    PURGE_SUCCESS("$4Successfully purged %s plots"),
+    PURGE_SYNTAX("Use /plot purge <x;z|player|unowned|unknown|all> <world>", "Purge"),
+    PURGE_SUCCESS("$4Successfully purged %s plots", "Purge"),
     /*
      * trim
      */
-    TRIM_SYNTAX("Use /plot trim <all|x;y> <world>"),
-    TRIM_START("Starting a world trim task..."),
-    TRIM_IN_PROGRESS("A world trim task is already in progress!"),
-    NOT_VALID_HYBRID_PLOT_WORLD("The hybrid plot manager is required to perform this action"),
+    TRIM_SYNTAX("Use /plot trim <all|x;y> <world>", "Trim"),
+    TRIM_START("Starting a world trim task...", "Trim"),
+    TRIM_IN_PROGRESS("A world trim task is already in progress!", "Trim"),
+    NOT_VALID_HYBRID_PLOT_WORLD("The hybrid plot manager is required to perform this action", "Trim"),
     /*
      * No <plot>
      */
-    NO_FREE_PLOTS("$2There are no free plots available"),
-    NOT_IN_PLOT("$2You're not in a plot"),
-    NOT_IN_CLUSTER("$2You must be within a plot cluster to perform that action"),
-    NOT_IN_PLOT_WORLD("$2You're not in a plot world"),
-    PLOTWORLD_INCOMPATIBLE("$2The two worlds must be compatible"),
-    NOT_VALID_WORLD("$2That is not a valid world (case sensitive)"),
-    NOT_VALID_PLOT_WORLD("$2That is not a valid plot world (case sensitive)"),
-    NO_PLOTS("$2You don't have any plots"),
+    NO_FREE_PLOTS("$2There are no free plots available", "Errors"),
+    NOT_IN_PLOT("$2You're not in a plot", "Errors"),
+    NOT_IN_CLUSTER("$2You must be within a plot cluster to perform that action", "Errors"),
+    NOT_IN_PLOT_WORLD("$2You're not in a plot world", "Errors"),
+    PLOTWORLD_INCOMPATIBLE("$2The two worlds must be compatible", "Errors"),
+    NOT_VALID_WORLD("$2That is not a valid world (case sensitive)", "Errors"),
+    NOT_VALID_PLOT_WORLD("$2That is not a valid plot world (case sensitive)", "Errors"),
+    NO_PLOTS("$2You don't have any plots", "Errors"),
     /*
      * Block List
      */
-    NOT_VALID_BLOCK_LIST_HEADER("$2That's not a valid block. Valid blocks are:\\n"),
-    BLOCK_LIST_ITEM(" $1%mat%$2,"),
-    BLOCK_LIST_SEPARATER("$1,$2 "),
+    NOT_VALID_BLOCK_LIST_HEADER("$2That's not a valid block. Valid blocks are:\\n", "Block List"),
+    BLOCK_LIST_ITEM(" $1%mat%$2,", "Block List"),
+    BLOCK_LIST_SEPARATER("$1,$2 ", "Block List"),
     /*
      * Biome
      */
-    NEED_BIOME("$2You need to specify a valid biome."),
-    BIOME_SET_TO("$2Plot biome set to $2"),
+    NEED_BIOME("$2You need to specify a valid biome.", "Biome"),
+    BIOME_SET_TO("$2Plot biome set to $2", "Biome"),
     /*
      * Teleport / Entry
      */
-    TELEPORTED_TO_PLOT("$1You have been teleported"),
-    TELEPORTED_TO_ROAD("$2You got teleported to the road"),
-    TELEPORT_IN_SECONDS("$1Teleporting in %s seconds. Do not move..."),
-    TELEPORT_FAILED("$2Teleportation cancelled due to movement or damage"),
+    TELEPORTED_TO_PLOT("$1You have been teleported", "Teleport"),
+    TELEPORTED_TO_ROAD("$2You got teleported to the road", "Teleport"),
+    TELEPORT_IN_SECONDS("$1Teleporting in %s seconds. Do not move...", "Teleport"),
+    TELEPORT_FAILED("$2Teleportation cancelled due to movement or damage", "Teleport"),
     /*
      * Set Block
      */
-    SET_BLOCK_ACTION_FINISHED("$1The last setblock action is now finished."),
+    SET_BLOCK_ACTION_FINISHED("$1The last setblock action is now finished.", "Set Block"),
     /*
      * Debug
      */
-    DEUBG_HEADER("$1Debug Information\\n"),
-    DEBUG_SECTION("$2>> $1&l%val%"),
-    DEBUG_LINE("$2>> $1%var%$2:$1 %val%\\n"),
+    DEUBG_HEADER("$1Debug Information\\n", "Debug"),
+    DEBUG_SECTION("$2>> $1&l%val%", "Debug"),
+    DEBUG_LINE("$2>> $1%var%$2:$1 %val%\\n", "Debug"),
     /*
      * Invalid
      */
-    NOT_VALID_DATA("$2That's not a valid data id."),
-    NOT_VALID_BLOCK("$2That's not a valid block."),
-    NOT_VALID_NUMBER("$2That's not a valid number"),
-    NOT_VALID_PLOT_ID("$2That's not a valid plot id."),
-    PLOT_ID_FORM("$2The plot id must be in the form: $1X;Y $2e.g. $1-5;7"),
-    NOT_YOUR_PLOT("$2That is not your plot."),
-    NO_SUCH_PLOT("$2There is no such plot"),
-    PLAYER_HAS_NOT_BEEN_ON("$2That player hasn't been in the plotworld"),
-    FOUND_NO_PLOTS("$2Found no plots with your search query"),
+    NOT_VALID_DATA("$2That's not a valid data id.", "Invalid"),
+    NOT_VALID_BLOCK("$2That's not a valid block.", "Invalid"),
+    NOT_VALID_NUMBER("$2That's not a valid number", "Invalid"),
+    NOT_VALID_PLOT_ID("$2That's not a valid plot id.", "Invalid"),
+    PLOT_ID_FORM("$2The plot id must be in the form: $1X;Y $2e.g. $1-5;7", "Invalid"),
+    NOT_YOUR_PLOT("$2That is not your plot.", "Invalid"),
+    NO_SUCH_PLOT("$2There is no such plot", "Invalid"),
+    PLAYER_HAS_NOT_BEEN_ON("$2That player hasn't been in the plotworld", "Invalid"),
+    FOUND_NO_PLOTS("$2Found no plots with your search query", "Invalid"),
     /*
      * Camera
      */
-    CAMERA_STARTED("$2You have entered camera mode for plot $1%s"),
-    CAMERA_STOPPED("$2You are no longer in camera mode"),
+    CAMERA_STARTED("$2You have entered camera mode for plot $1%s", "Camera"),
+    CAMERA_STOPPED("$2You are no longer in camera mode", "Camera"),
     /*
      * Need
      */
-    NEED_PLOT_NUMBER("$2You've got to specify a plot number or alias"),
-    NEED_BLOCK("$2You've got to specify a block"),
-    NEED_PLOT_ID("$2You've got to specify a plot id."),
-    NEED_PLOT_WORLD("$2You've got to specify a plot world."),
-    NEED_USER("$2You need to specify a username"),
+    NEED_PLOT_NUMBER("$2You've got to specify a plot number or alias", "Need"),
+    NEED_BLOCK("$2You've got to specify a block", "Need"),
+    NEED_PLOT_ID("$2You've got to specify a plot id.", "Need"),
+    NEED_PLOT_WORLD("$2You've got to specify a plot world.", "Need"),
+    NEED_USER("$2You need to specify a username", "Need"),
     /*
      * Info
      */
-    PLOT_UNOWNED("$2The current plot must have an owner to perform this action"),
-    PLOT_INFO_UNCLAIMED("$2Plot $1%s$2 is not yet claimed"),
+    PLOT_UNOWNED("$2The current plot must have an owner to perform this action", "Info"),
+    PLOT_INFO_UNCLAIMED("$2Plot $1%s$2 is not yet claimed", "Info"),
     /*
      * PLOT_INFO("" +
      * "$1ID$2: $4%id%$2\n" +
@@ -349,133 +349,133 @@ public enum C {
      * "$1Can build$2: $4%build%"
      * ),
      */
-    PLOT_INFO_HEADER("$3====== $1INFO $3======", false),
-    PLOT_INFO("$1ID: $2%id%$1\n" + "$1Alias: $2%alias%$1\n" + "$1Owner: $2%owner%$1\n" + "$1Biome: $2%biome%$1\n" + "$1Can Build: $2%build%$1\n" + "$1Rating: $2%rating%$1/$210$1\n" + "$1Helpers: $2%helpers%$1\n" + "$1Trusted: $2%trusted%$1\n" + "$1Denied: $2%denied%$1\n" + "$1Flags: $2%flags%"),
-    PLOT_INFO_HELPERS("$1Helpers:$2 %helpers%"),
-    PLOT_INFO_TRUSTED("$1Trusted:$2 %trusted%"),
-    PLOT_INFO_DENIED("$1Denied:$2 %denied%"),
-    PLOT_INFO_FLAGS("$1Flags:$2 %flags%"),
-    PLOT_INFO_BIOME("$1Biome:$2 %biome%"),
-    PLOT_INFO_RATING("$1Rating:$2 %rating%"),
-    PLOT_INFO_OWNER("$1Owner:$2 %owner%"),
-    PLOT_INFO_ID("$1ID:$2 %id%"),
-    PLOT_INFO_ALIAS("$1Alias:$2 %alias%"),
-    PLOT_INFO_SIZE("$1Size:$2 %size%"),
-    PLOT_USER_LIST(" $1%user%$2,"),
-    INFO_SYNTAX_CONSOLE("$2/plot info <world> X;Y"),
+    PLOT_INFO_HEADER("$3====== $1INFO $3======", false, "Info"),
+    PLOT_INFO("$1ID: $2%id%$1\n" + "$1Alias: $2%alias%$1\n" + "$1Owner: $2%owner%$1\n" + "$1Biome: $2%biome%$1\n" + "$1Can Build: $2%build%$1\n" + "$1Rating: $2%rating%$1/$210$1\n" + "$1Helpers: $2%helpers%$1\n" + "$1Trusted: $2%trusted%$1\n" + "$1Denied: $2%denied%$1\n" + "$1Flags: $2%flags%", "Info"),
+    PLOT_INFO_HELPERS("$1Helpers:$2 %helpers%", "Info"),
+    PLOT_INFO_TRUSTED("$1Trusted:$2 %trusted%", "Info"),
+    PLOT_INFO_DENIED("$1Denied:$2 %denied%", "Info"),
+    PLOT_INFO_FLAGS("$1Flags:$2 %flags%", "Info"),
+    PLOT_INFO_BIOME("$1Biome:$2 %biome%", "Info"),
+    PLOT_INFO_RATING("$1Rating:$2 %rating%", "Info"),
+    PLOT_INFO_OWNER("$1Owner:$2 %owner%", "Info"),
+    PLOT_INFO_ID("$1ID:$2 %id%", "Info"),
+    PLOT_INFO_ALIAS("$1Alias:$2 %alias%", "Info"),
+    PLOT_INFO_SIZE("$1Size:$2 %size%", "Info"),
+    PLOT_USER_LIST(" $1%user%$2,", "Info"),
+    INFO_SYNTAX_CONSOLE("$2/plot info <world> X;Y", "Info"),
     /*
      * Generating
      */
-    GENERATING_COMPONENT("$1Started generating component from your settings"),
+    GENERATING_COMPONENT("$1Started generating component from your settings", "Working"),
     /*
      * Clearing
      */
-    CLEARING_PLOT("$2Clearing plot async."),
-    CLEARING_DONE("$4Clear completed! Took %sms."),
+    CLEARING_PLOT("$2Clearing plot async.", "Working"),
+    CLEARING_DONE("$4Clear completed! Took %sms.", "Working"),
     /*
      * Claiming
      */
-    PLOT_NOT_CLAIMED("$2Plot not claimed"),
-    PLOT_IS_CLAIMED("$2This plot is already claimed"),
-    CLAIMED("$4You successfully claimed the plot"),
+    PLOT_NOT_CLAIMED("$2Plot not claimed", "Working"),
+    PLOT_IS_CLAIMED("$2This plot is already claimed", "Working"),
+    CLAIMED("$4You successfully claimed the plot", "Working"),
     /*
      * List
      */
-    PLOT_LIST_HEADER_PAGED("$2(Page $1%cur$2/$1%max$2) $1List of %word% plots"),
-    PLOT_LIST_HEADER("$1List of %word% plots"),
-    PLOT_LIST_ITEM("$2>> $1%id$2:$1%world $2- $1%owner"),
-    PLOT_LIST_ITEM_ORDERED("$2[$1%in$2] >> $1%id$2:$1%world $2- $1%owner"),
-    PLOT_LIST_FOOTER("$2>> $1%word% a total of $2%num% $1claimed %plot%."),
+    PLOT_LIST_HEADER_PAGED("$2(Page $1%cur$2/$1%max$2) $1List of %word% plots", "List"),
+    PLOT_LIST_HEADER("$1List of %word% plots", "List"),
+    PLOT_LIST_ITEM("$2>> $1%id$2:$1%world $2- $1%owner", "List"),
+    PLOT_LIST_ITEM_ORDERED("$2[$1%in$2] >> $1%id$2:$1%world $2- $1%owner", "List"),
+    PLOT_LIST_FOOTER("$2>> $1%word% a total of $2%num% $1claimed %plot%.", "List"),
     /*
      * Left
      */
-    LEFT_PLOT("$2You left a plot"),
+    LEFT_PLOT("$2You left a plot", "Left"),
     /*
      * PlotMe
      */
-    NOT_USING_PLOTME("$2This server uses the $1PlotSquared $2plot management system. Please use the $1/ps &2or $1/p2 $2or $1/plots $2instead"),
+    NOT_USING_PLOTME("$2This server uses the $1PlotSquared $2plot management system. Please use the $1/ps &2or $1/p2 $2or $1/plots $2instead", "Errors"),
     /*
      * Wait
      */
-    WAIT_FOR_TIMER("$2A setblock timer is bound to either the current plot or you. Please wait for it to finish"),
+    WAIT_FOR_TIMER("$2A setblock timer is bound to either the current plot or you. Please wait for it to finish", "Errors"),
     /*
      * Chat
      */
-    PLOT_CHAT_FORMAT("$2[$1Plot Chat$2][$1%plot_id%$2] $1%sender%$2: $1%msg%"),
-    PLOT_CHAT_FORCED("$2This world forces everyone to use plot chat."),
-    PLOT_CHAT_ON("$4Plot chat enabled."),
-    PLOT_CHAT_OFF("$4Plot chat disabled."),
+    PLOT_CHAT_FORMAT("$2[$1Plot Chat$2][$1%plot_id%$2] $1%sender%$2: $1%msg%", "Chat"),
+    PLOT_CHAT_FORCED("$2This world forces everyone to use plot chat.", "Chat"),
+    PLOT_CHAT_ON("$4Plot chat enabled.", "Chat"),
+    PLOT_CHAT_OFF("$4Plot chat disabled.", "Chat"),
     /*
      * Denied
      */
-    DENIED_REMOVED("$4You successfully undenied the player from this plot"),
-    DENIED_ADDED("$4You successfully denied the player from this plot"),
-    DENIED_NEED_ARGUMENT("$2Arguments are missing. $1/plot denied add <name> $2or $1/plot denied remove <name>"),
-    WAS_NOT_DENIED("$2That player was not denied on this plot"),
+    DENIED_REMOVED("$4You successfully undenied the player from this plot", "Deny"),
+    DENIED_ADDED("$4You successfully denied the player from this plot", "Deny"),
+    DENIED_NEED_ARGUMENT("$2Arguments are missing. $1/plot denied add <name> $2or $1/plot denied remove <name>", "Deny"),
+    WAS_NOT_DENIED("$2That player was not denied on this plot", "Deny"),
     /*
      * Rain
      */
-    NEED_ON_OFF("$2You need to specify a value. Possible values: $1on$2, $1off"),
-    SETTING_UPDATED("$4You successfully updated the setting"),
+    NEED_ON_OFF("$2You need to specify a value. Possible values: $1on$2, $1off", "Rain"),
+    SETTING_UPDATED("$4You successfully updated the setting", "Rain"),
     /*
      * Flag
      */
-    FLAG_KEY("$2Key: %s"),
-    FLAG_TYPE("$2Type: %s"),
-    FLAG_DESC("$2Desc: %s"),
-    NEED_KEY("$2Possible values: $1%values%"),
-    NOT_VALID_FLAG("$2That is not a valid flag"),
-    NOT_VALID_VALUE("$2Flag values must be alphanumerical"),
-    FLAG_NOT_IN_PLOT("$2The plot does not have that flag"),
-    FLAG_NOT_REMOVED("$2The flag could not be removed"),
-    FLAG_NOT_ADDED("$2The flag could not be added"),
-    FLAG_REMOVED("$4Successfully removed flag"),
-    FLAG_ADDED("$4Successfully added flag"),
+    FLAG_KEY("$2Key: %s", "Flag"),
+    FLAG_TYPE("$2Type: %s", "Flag"),
+    FLAG_DESC("$2Desc: %s", "Flag"),
+    NEED_KEY("$2Possible values: $1%values%", "Flag"),
+    NOT_VALID_FLAG("$2That is not a valid flag", "Flag"),
+    NOT_VALID_VALUE("$2Flag values must be alphanumerical", "Flag"),
+    FLAG_NOT_IN_PLOT("$2The plot does not have that flag", "Flag"),
+    FLAG_NOT_REMOVED("$2The flag could not be removed", "Flag"),
+    FLAG_NOT_ADDED("$2The flag could not be added", "Flag"),
+    FLAG_REMOVED("$4Successfully removed flag", "Flag"),
+    FLAG_ADDED("$4Successfully added flag", "Flag"),
     /*
      * Helper
      */
-    HELPER_ADDED("$4You successfully added a helper to the plot"),
-    HELPER_REMOVED("$4You successfully removed a helper from the plot"),
-    HELPER_NEED_ARGUMENT("$2Arguments are missing. $1/plot helpers add <name> $2or $1/plot helpers remove <name>"),
-    WAS_NOT_ADDED("$2That player was not added as a helper on this plot"),
-    PLOT_REMOVED_HELPER("$1Plot %s of which you were added to has been deleted due to owner inactivity"),
+    HELPER_ADDED("$4You successfully added a helper to the plot", "Helper"),
+    HELPER_REMOVED("$4You successfully removed a helper from the plot", "Helper"),
+    HELPER_NEED_ARGUMENT("$2Arguments are missing. $1/plot helpers add <name> $2or $1/plot helpers remove <name>", "Helper"),
+    WAS_NOT_ADDED("$2That player was not added as a helper on this plot", "Helper"),
+    PLOT_REMOVED_HELPER("$1Plot %s of which you were added to has been deleted due to owner inactivity", "Helper"),
     /*
      * Trusted
      */
-    ALREADY_OWNER("$2That user is already the plot owner."),
-    ALREADY_ADDED("$2That user is already added to that category."),
-    TRUSTED_ADDED("$4You successfully added a trusted user to the plot"),
-    TRUSTED_REMOVED("$1You successfully removed a trusted user from the plot"),
-    TRUSTED_NEED_ARGUMENT("$2Arguments are missing. $1/plot trusted add <name> $2or $1/plot trusted remove <name>"),
-    T_WAS_NOT_ADDED("$2That player was not added as a trusted user on this plot"),
+    ALREADY_OWNER("$2That user is already the plot owner.", "Trusted"),
+    ALREADY_ADDED("$2That user is already added to that category.", "Trusted"),
+    TRUSTED_ADDED("$4You successfully added a trusted user to the plot", "Trusted"),
+    TRUSTED_REMOVED("$1You successfully removed a trusted user from the plot", "Trusted"),
+    TRUSTED_NEED_ARGUMENT("$2Arguments are missing. $1/plot trusted add <name> $2or $1/plot trusted remove <name>", "Trusted"),
+    T_WAS_NOT_ADDED("$2That player was not added as a trusted user on this plot", "Trusted"),
     /*
      * Set Owner
      */
-    SET_OWNER("$4You successfully set the plot owner"),
-    NOW_OWNER("$4You are now owner of plot %s"),
+    SET_OWNER("$4You successfully set the plot owner", "Owner"),
+    NOW_OWNER("$4You are now owner of plot %s", "Owner"),
     /*
      * Signs
      */
-    OWNER_SIGN_LINE_1("$1ID: $1%id%"),
-    OWNER_SIGN_LINE_2("$1Owner:"),
-    OWNER_SIGN_LINE_3("$2%plr%"),
-    OWNER_SIGN_LINE_4("$3Claimed"),
+    OWNER_SIGN_LINE_1("$1ID: $1%id%", "Signs"),
+    OWNER_SIGN_LINE_2("$1Owner:", "Signs"),
+    OWNER_SIGN_LINE_3("$2%plr%", "Signs"),
+    OWNER_SIGN_LINE_4("$3Claimed", "Signs"),
     /*
      * Help
      */
-    HELP_HEADER("$3====== $1Plot\u00B2 Help $3======"),
-    HELP_CATEGORY("$1Category: $2%category%$2,$1 Page: $2%current%$3/$2%max%$2,$1 Displaying: $2%dis%$3/$2%total%"),
-    HELP_INFO("$3====== $1Choose a Category $3======", false),
-    HELP_INFO_ITEM("$1/plots help %category% $3- $2%category_desc%"),
-    HELP_ITEM("$1%usage% [%alias%]\n $3- $2%desc%\n"),
+    HELP_HEADER("$3====== $1Plot\u00B2 Help $3======", "Help"),
+    HELP_CATEGORY("$1Category: $2%category%$2,$1 Page: $2%current%$3/$2%max%$2,$1 Displaying: $2%dis%$3/$2%total%", "Help"),
+    HELP_INFO("$3====== $1Choose a Category $3======", false, "Help"),
+    HELP_INFO_ITEM("$1/plots help %category% $3- $2%category_desc%", "Help"),
+    HELP_ITEM("$1%usage% [%alias%]\n $3- $2%desc%\n", "Help"),
     /*
      * Direction
      */
-    DIRECTION("$1Current direction: %dir%"),
+    DIRECTION("$1Current direction: %dir%", "Help"),
     /*
      * Custom
      */
-    CUSTOM_STRING("-");
+    CUSTOM_STRING("-", "-");
     /**
      * Special Language
      *
@@ -503,6 +503,10 @@ public enum C {
      * Translated
      */
     private String s;
+    /**
+     * What locale category should this translation fall under
+     */
+    private String cat;
     /**
      * Should the string be prefixed?
      */
@@ -523,12 +527,13 @@ public enum C {
      * @param d default
      * @param prefix use prefix
      */
-    C(final String d, final boolean prefix) {
+    C(final String d, final boolean prefix, String cat) {
         this.d = d;
         if (this.s == null) {
             this.s = "";
         }
         this.prefix = prefix;
+        this.cat = cat.toLowerCase();
     }
 
     /**
@@ -536,13 +541,13 @@ public enum C {
      *
      * @param d default
      */
-    C(final String d) {
-        this(d, true);
+    C(final String d, String cat) {
+        this(d, true, cat.toLowerCase());
     }
 
     public static void setupTranslations() {
         manager = new TranslationManager();
-        defaultFile = new YamlTranslationFile(BukkitTranslation.getParent(), lang, "PlotSquared", manager).read();
+        defaultFile = new YamlTranslationFile(BukkitTranslation.getParent(), lang, "PlotSquared", manager, true).read();
         // register everything in this class
         for (final C c : values()) {
             manager.addTranslationObject(new TranslationObject(c.toString(), c.d, "", ""));
@@ -574,18 +579,6 @@ public enum C {
     public String s() {
         final String s = manager.getTranslated(toString(), lang).getTranslated().replaceAll("&-", "\n").replaceAll("\\n", "\n");
         return s.replace("$1", COLOR_1.toString()).replace("$2", COLOR_2.toString()).replace("$3", COLOR_3.toString()).replace("$4", COLOR_4.toString());
-        /*
-         * if (PlotSquared.translations != null) {
-         * final String t = PlotSquared.translations.getString(this.toString());
-         * if (t != null) {
-         * this.s = t;
-         * }
-         * }
-         * if (this.s.length() < 1) {
-         * return "";
-         * }
-         * return this.s.replace("\\n", "\n");
-         */
     }
 
     public boolean usePrefix() {
@@ -600,4 +593,12 @@ public enum C {
     public String translated() {
         return ChatColor.translateAlternateColorCodes('&', this.s());
     }
+
+    public String getCat() {
+        return cat;
+    }
+
+    public void setCat(String cat) {
+        this.cat = cat;
+    }
 }
diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/config/C_german.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/config/C_german.java
deleted file mode 100644
index 455e80d6c..000000000
--- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/config/C_german.java
+++ /dev/null
@@ -1,612 +0,0 @@
-////////////////////////////////////////////////////////////////////////////////////////////////////
-// PlotSquared - A plot manager and world generator for the Bukkit API                             /
-// Copyright (c) 2014 IntellectualSites/IntellectualCrafters                                       /
-//                                                                                                 /
-// This program is free software; you can redistribute it and/or modify                            /
-// it under the terms of the GNU General Public License as published by                            /
-// the Free Software Foundation; either version 3 of the License, or                               /
-// (at your option) any later version.                                                             /
-//                                                                                                 /
-// This program is distributed in the hope that it will be useful,                                 /
-// but WITHOUT ANY WARRANTY; without even the implied warranty of                                  /
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                                   /
-// GNU General Public License for more details.                                                    /
-//                                                                                                 /
-// You should have received a copy of the GNU General Public License                               /
-// along with this program; if not, write to the Free Software Foundation,                         /
-// Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA                               /
-//                                                                                                 /
-// You can contact us via: support@intellectualsites.com                                           /
-////////////////////////////////////////////////////////////////////////////////////////////////////
-package com.intellectualcrafters.plot.config;
-
-import org.bukkit.ChatColor;
-
-import com.intellectualsites.translation.TranslationFile;
-import com.intellectualsites.translation.TranslationLanguage;
-import com.intellectualsites.translation.TranslationManager;
-import com.intellectualsites.translation.TranslationObject;
-import com.intellectualsites.translation.YamlTranslationFile;
-import com.intellectualsites.translation.bukkit.BukkitTranslation;
-
-/**
- * Captions class.
- *
- * @author Citymonstret
- */
-public enum C_german {
-    /*
-     * Confirm
-     */
-    FAILED_CONFIRM("$2Es gibt keine zur Bestätigung ausstehenden Befehle!"),
-    REQUIRES_CONFIRM("$2Bist du sicher, dass du diesen Befehl ausführen willst: $1%s$2?\n$2Die Änderung ist unwiderruflich! Wenn du sicher bist: $1/plot confirm"),
-    /*
-     * Move
-     */
-    MOVE_SUCCESS("$4Plot erfolgreich verschoben."),
-    COPY_SUCCESS("$4Plot erfolgreich kopiert."),
-    REQUIRES_UNOWNED("$2Der angegebene Ort ist bereits belegt."),
-    /*
-     * Compass
-     */
-    COMPASS_TARGET("$4Plot erfolgreich mit dem Kompass anvisiert."),
-    /*
-     * Cluster
-     */
-    CLUSTER_AVAILABLE_ARGS("$1Die folgenden Parameter sind verfügbar: $4list$2, $4create$2, $4delete$2, $4resize$2, $4invite$2, $4kick$2, $4leave$2, $4helpers$2, $4info$2, $4tp$2, $4sethome"),
-    CLUSTER_LIST_HEADING("$2Es gibt $1%s$2 Cluster in dieser Welt."),
-    CLUSTER_LIST_ELEMENT("$2 - $1%s\n"),
-    CLUSTER_INTERSECTION("$2Der vorgeschlagene Bereich überlappt mit $1%s$2 existierendem/n Cluster/n"),
-    CLUSTER_ADDED("$4Cluster erfolgreich erstellt."),
-    CLUSTER_DELETED("$4Cluster erfolgreich gelöscht."),
-    CLUSTER_RESIZED("$4Größe des Clusters wurde erfolgreich geändert."),
-    CLUSTER_ADDED_USER("$4Spieler erfolgreich zum Cluster hinzugefügt."),
-    CANNOT_KICK_PLAYER("$2Du kannst diesen Spieler nicht kicken."),
-
-    CLUSTER_INVITED("$1Du wurdest in folgenden Cluster eingeladen: $2%s"),
-    CLUSTER_REMOVED("$1Du wurdest aus folgendem Cluster enfernt: $2%s"),
-    CLUSTER_KICKED_USER("$4Spieler erfolgreich gekickt."),
-    INVALID_CLUSTER("$1Clustername ungültig: $2%s"),
-    CLUSTER_NOT_ADDED("$2Dieser Spieler war nicht zum Cluster hinzugefügt."),
-    CLUSTER_CANNOT_LEAVE("$1Du musst deinen Besitz löschen oder transferieren bevor du gehen kannst."),
-    CLUSTER_ADDED_HELPER("$4Helfer erfolgreich hinzugefügt."),
-    CLUSTER_REMOVED_HELPER("$4Helfer erfolgreich vom Cluster entfernt."),
-    CLUSTER_REGENERATED("$4Clusterregeneration erfolgreich gestartet"),
-    CLUSTER_TELEPORTING("$4Teleportiere..."),
-    CLUSTER_INFO("$1Aktueller Cluster: $2%id%\n$1Name: $2%name%\n$1Besitzer: $2%owner%\n$1Größe: $2%size%\n$1Rechte: $2%rights%"),
-    CLUSTER_CURRENT_PLOTID("$1Aktueller Plot: $2%s"),
-	
-	
-	
-	
-	
-	
-	
-	
-    /*
-     * Border
-     */
-    BORDER("$2Du befindest dich ausserhalb der aktuellen Weltengrenze"),
-    /*
-     * Unclaim
-     */
-    UNCLAIM_SUCCESS("$4Dieser Plot gehört dir jetzt nicht mehr."),
-    /*
-     * WorldEdit masks
-     */
-	 
-    REQUIRE_SELECTION_IN_MASK("$2%s deiner Selektion befindet sich nicht innerhalb deines Plots. Du kannst Änderungen nur innerhalb deines Plots vornehmen."),
-    WORLDEDIT_VOLUME("$2Du kannst die Menge %current% nicht auswählen. Die maximale Grenze liegt bei %max%."),
-    WORLDEDIT_ITERATIONS("$2Du kannst nicht %current% mal wiederholen. Die maximalen Wiederholungen liegen bei %max%."),
-    WORLDEDIT_UNSAFE("$2Der Zugriff auf diesen Befehl wurde verwehrt."),
-    WORLDEDIT_BYPASS("$2&oUm die Beschränkung außer Kraft zu setzen verwende $4/plot wea"),
-    WORLDEDIT_UNMASKED("$1Dein WorldEdit jetzt nicht mehr begrenzt."),
-    WORLDEDIT_RESTRICTED("$1Dein WorldEdit ist jetzt begrenzt."),
-    /*
-     * Records
-     */
-    RECORD_PLAY("$2%player $2startete Spielaufzeichnung $1%name"),
-    NOTIFY_ENTER("$2%player $2betritt deinen Plot ($1%plot$2)"),
-    NOTIFY_LEAVE("$2%player $2verlies deinen Plot ($1%plot$2)"),
-    /*
-     * Swap
-     */
-
-    SWAP_OVERLAP("$2Der geplante Bereich darf nicht überlappen."),
-    SWAP_DIMENSIONS("$2Die geplanten Bereiche müssen vergleichbare Dimensionen aufweisen."),
-    SWAP_SYNTAX("$2/plots swap <plot id>"),
-    SWAP_SUCCESS("$4Plots erfolgreich getauscht"),
-    STARTED_SWAP("$2Plot swap Aufgabe gestartet. Du erhälst eine Meldung wenn sie beendet ist."),
-    /*
-     * Comment
-     */
-    NOT_VALID_INBOX_INDEX("$2Keine Kommentar auf Seite %s"),
-    INBOX_ITEM("$2 - $4%s"),
-    COMMENT_SYNTAX("$2Verwende /plots comment [X;Z] <%s> <comment>"),
-    INVALID_INBOX("$2Dieses Postfach ist ungültig.\n$1Akzeptierte Werte: %s"),
-    NO_PERM_INBOX("$2Du hast keine Berechtigung für dieses Postfach"),
-    NO_PERM_INBOX_MODIFY("$2Du hast keine Berechtigung"),
-    NO_PLOT_INBOX("$2Du musst ein einem Plot stehen oder einen solchen angeben."),
-    COMMENT_REMOVED("$4Kommentar/e n$2 - '$3%s$2' erfolgreich gelöscht."),
-    COMMENT_ADDED("$4Ein Kommentar wurde hinterlassen."),
-    COMMENT_HEADER("$2====== Kommentare ======"),
-    /*
-     * Console
-     */
-    NOT_CONSOLE("$2Aus Sicherheitsgründen kann dieser Befehl nur von der Konsole ausgeführt werden."),
-    IS_CONSOLE("$2Dieser Befehl kann nur von einem Spieler ausgeführt werden."),
-    /*
-     * Clipboard
-     */
-    CLIPBOARD_SET("$2Der aktuelle Plot wird in die Zwischenablage kopiert. Benutze $1/plot paste$2 um ihn einzufügen."),
-    PASTED("$4Die Plotauswahl wurde erfolgreich eingefügt. Die Zwischenablage wurde geleert."),
-    PASTE_FAILED("$2Einfügen fehlgeschlagen: $2%s"),
-    NO_CLIPBOARD("$2Deine Zwischenablage ist leer."),
-    CLIPBOARD_INFO("$2Aktuelle Auswahl - Plot ID: $1%id$2, Breite: $1%width$2, Anzahl Blöcke: $1%total$2"),
-    /*
-     * Ratings
-     */
-    RATING_NOT_VALID("$2Wähle eine Zahl zwischen 1 und 10"),
-    RATING_ALREADY_EXISTS("$2Du hast diesen Plot bereits bewertet: $2%s"),
-    RATING_APPLIED("$4Du hast diesen Plot erfolgreich bewertet: $2%s"),
-    RATING_NOT_YOUR_OWN("$2Du kannst deinen eigenen Plot nicht selbst bewerten."),
-    RATING_NOT_OWNED("$2Plots ohne Besitzer können nicht bewertet werden."),
-    /*
-     * Economy Stuff
-     */
-    ECON_DISABLED("$2Ökonomie ist nicht aktiviert."),
-    CANNOT_AFFORD_PLOT("$2Du kannst dir diesen Plot nicht leisten. Er kostet $1%s"),
-    NOT_FOR_SALE("$2Dieser Plot steht nicht zum Verkauf."),
-    CANNOT_BUY_OWN("$2Du kannst deinen eigenen Plot nicht kaufen."),
-    PLOT_SOLD("$4Dein Plot $1%s$4, wurde an $1%s$4 für $1$%s$4 verkauft."),
-    CANNOT_AFFORD_MERGE("$2Du kannst dir das Zusammenfügen der Plots nicht leisten. Es kostet $1%s"),
-    ADDED_BALANCE("$1%s $2wurden deinem Guthaben hinzugefügt."),
-    REMOVED_BALANCE("$1%s $2wurden von deinem Guthaben abgezogen."),
-    /*
-     * Setup Stuff
-     */
-    SETUP_INIT("$1Verwendung: $2/plot setup <value>"),
-    SETUP_STEP("$3[$1Schritt %s$3] $1%s $2- $1Erwarte: $2%s $1Standard: $2%s"),
-    SETUP_INVALID_ARG("$2%s ist kein gültiger Wer für Schritt %s. Um Setup abzubrechen verwende: $1/plot setup cancel"),
-    SETUP_VALID_ARG("$2Wert $1%s $2gesetzt auf %s"),
-    SETUP_FINISHED("$3Falls du MULTIVERSE oder MULTIWORLD verwendest sollte die Welt generiert worden sein. Andernfalls musst du die Welt manuell über bukkit.yml hinzufügen."),
-    SETUP_WORLD_TAKEN("$2%s ist bereits eine bekannte Plotwelt"),
-    SETUP_MISSING_WORLD("$2Du musst einen Namen für die Welt vergeben ($1/plot setup &l<world>$1 <generator>$2)\n$1Zusätzliche Befehle:\n$2 - $1/plot setup <value>\n$2 - $1/plot setup back\n$2 - $1/plot setup cancel"),
-    SETUP_MISSING_GENERATOR("$2Du musst einen Generator angeben ($1/plot setup <world> &l<generator>&r$2)\n$1Zusätzliche Befehle:\n$2 - $1/plot setup <value>\n$2 - $1/plot setup back\n$2 - $1/plot setup cancel"),
-    SETUP_INVALID_GENERATOR("$2Ungültiger Generarator. Mögliche Optionen: %s"),
-    /*
-     * Schematic Stuff
-     */
-    SCHEMATIC_MISSING_ARG("$2Du musst einen Wert angeben. Gültige Werte: $1test <name>$2 , $1save$2 , $1paste $2, $1exportall"),
-    SCHEMATIC_INVALID("$2Diese Schematic ist ungültig: $2%s"),
-    SCHEMATIC_VALID("$2Diese Schematic ist gültig."),
-    SCHEMATIC_PASTE_FAILED("$2Einfügen der Schematic fehlgeschlagen"),
-    SCHEMATIC_PASTE_SUCCESS("$4Einfügen der Schematic erfolgreich."),
-    /*
-     * Title Stuff
-     */
-    TITLE_ENTERED_PLOT("Du betrittst Plot %world%;%x%;%z%"),
-    TITLE_ENTERED_PLOT_COLOR("GOLD"),
-    TITLE_ENTERED_PLOT_SUB("Besitzer: %s"),
-    TITLE_ENTERED_PLOT_SUB_COLOR("RED"),
-    TITLE_LEFT_PLOT("Du verlässt Plot %s"),
-    TITLE_LEFT_PLOT_COLOR("GOLD"),
-    TITLE_LEFT_PLOT_SUB("Besitzer: %s"),
-    TITLE_LEFT_PLOT_SUB_COLOR("RED"),
-    PREFIX_GREETING("$1%id%$2> "),
-    PREFIX_FAREWELL("$1%id%$2> "),
-    /*
-     * Core Stuff
-     */
-    PREFIX("$3[$1P\u00B2$3] "),
-    ENABLED("$1PlotSquared wurde aktiviert"),
-    EXAMPLE_MESSAGE("$2Das ist eine Beispielnachricht &k!!!"),
-    /*
-     * Reload
-     */
-    RELOADED_CONFIGS("$1Übersetzungen und Welteneinstellungen wurden neu geladen"),
-    RELOAD_FAILED("$2Erneutes Laden der Konfiguration fehlgeschlagen"),
-    /*
-     * BarAPI
-     */
-    BOSSBAR_CLEARING("$2Leere Plot: $1%id%"),
-    /*
-     * Alias
-     */
-    ALIAS_SET_TO("$2Plot Alias geseztt auf $1%alias%"),
-    MISSING_ALIAS("$2Du musst ein Alias angeben"),
-    ALIAS_TOO_LONG("$2Der Alias darf nicht länger als 50 Zeichen sein"),
-    ALIAS_IS_TAKEN("$2Dieser Alias wird bereits verwendet"),
-    /*
-     * Position
-     */
-    MISSING_POSITION("$2Du musst eine Position angeben. Mögliche Werte: $1none"),
-    POSITION_SET("$1Die Position wurde auf deinen aktuellen Standort gesetzt"),
-    HOME_ARGUMENT("$2Verwende /plot set home [none]"),
-    INVALID_POSITION("$2That is not a valid position value"),
-    /*
-     * Time
-     */
-    TIME_FORMAT("$1%hours%, %min%, %sec%"),
-    /*
-     * Permission
-     */
-    NO_SCHEMATIC_PERMISSION("$2Du hast keine Berechtigung Schmatics zu verwenden: $1%s"),
-    NO_PERMISSION("$2Dir fehlt folgende Berechtigung: $1%s"),
-    NO_PLOT_PERMS("$2Diese Aktion kann nur der Besitzer des Plots"),
-    CANT_CLAIM_MORE_PLOTS("$2Du kannst keine weiteren Plots besitzen."),
-    CANT_TRANSFER_MORE_PLOTS("$2Du kannst keine weiteren Plots diesem Spieler schicken."),
-    CANT_CLAIM_MORE_PLOTS_NUM("$2Du kannst nicht mehr als $1%s $2Plots auf einmal einnehmen."),
-    YOU_BE_DENIED("$2Es ist dir nicht gestattet diesen Plot zu betreten."),
-    NO_PERM_MERGE("$2Du bist nicht Besitzer des Plots $1%plot%"),
-    UNLINK_REQUIRED("$2Die Plots müssen vorher getrennt (unlink) werden."),
-    UNLINK_IMPOSSIBLE("$2Die Trennung (unlink) funktioniert nur auf Megaplots."),
-    UNLINK_SUCCESS("$2Trennung erfolgreich."),
-    NO_MERGE_TO_MEGA("$2Füge einzelne Plots deinem Megaplot hinzu, nicht anders herum."),
-    MERGE_NOT_VALID("$2Diese Zusammenführanfrage ist nicht länger gültig."),
-    MERGE_ACCEPTED("$2Die Zusammenführanfrage wurde akzeptiert."),
-    SUCCESS_MERGE("$2Plots wurden zusammengeführt."),
-    MERGE_REQUESTED("$2Zusammenführanfrage erfolgreich verschickt."),
-    MERGE_REQUEST_CONFIRM("Zusammenführanfrage von %s"),
-    /*
-     * Commands
-     */
-    NOT_VALID_SUBCOMMAND("$2Das ist kein gültiger Parameter."),
-    DID_YOU_MEAN("$2Meinst du: $1%s"),
-    NAME_LITTLE("$2%s Name ist zu kurz, $1%s$2<$1%s"),
-    NO_COMMANDS("$2Du hast für keinen Befehl eine Berechtigung."),
-    SUBCOMMAND_SET_OPTIONS_HEADER("$2Mögliche Werte: "),
-    COMMAND_SYNTAX("$1Verwendung: $2%s"),
-    /*
-     * Player not found
-     */
-    INVALID_PLAYER("$2Spieler nicht gefunden: $1%s."),
-    /*
-     *
-     */
-    COMMAND_WENT_WRONG("$2Beim ausführen des Befehls ging etwas schief..."),
-    /*
-     * purge
-     */
-    PURGE_SYNTAX("Verwende /plot purge <x;z|player|unowned|unknown|all> <world>"),
-    PURGE_SUCCESS("$4%s Plots erfolgreich gelöscht."),
-    /*
-     * trim
-     */
-    TRIM_SYNTAX("Verwende /plot trim <all|x;y> <world>"),
-    TRIM_START("Starte Weltenbeschneidung..."),
-    TRIM_IN_PROGRESS("Die Weltenbeschneidung ist bereits gestartet!"),
-    NOT_VALID_HYBRID_PLOT_WORLD("Hybrid Plot Manager wird für diese Aktion benötigt."),
-    /*
-     * No <plot>
-     */
-    NO_FREE_PLOTS("$2Es sind keine freien Plots verfügbar."),
-    NOT_IN_PLOT("$2Du befindest dich nicht auf einem Plot."),
-    NOT_IN_CLUSTER("$2Du musst dich innerhalb eines Plot Clusters befinden um das zu tun."),
-    NOT_IN_PLOT_WORLD("$2Du befindest dich nicht in einer Plotwelt."),
-    PLOTWORLD_INCOMPATIBLE("$2Die beiden Welten müssen kompatibel sein."),
-    NOT_VALID_WORLD("$2Das ist keine gültige Welt (Groß- / Kleinschreibung beachten)"),
-    NOT_VALID_PLOT_WORLD("$2Das ist keine gültige Plotwelt (Groß- / Kleinschreibung beachten)"),
-    NO_PLOTS("$2Du hast keine Plots"),
-    /*
-     * Block List
-     */
-    NOT_VALID_BLOCK_LIST_HEADER("$2Das ist kein gültiger Block. Gültige Blöcke sind:\\n"),
-    BLOCK_LIST_ITEM(" $1%mat%$2,"),
-    BLOCK_LIST_SEPARATER("$1,$2 "),
-    /*
-     * Biome
-     */
-    NEED_BIOME("$2Du musst ein Biom angeben."),
-    BIOME_SET_TO("$2Plot biome gesetzt: $2"),
-    /*
-     * Teleport / Entry
-     */
-    TELEPORTED_TO_PLOT("$1Du wurdest teleportiert."),
-    TELEPORTED_TO_ROAD("$2Du wurdest auf die Straße teleportiert."),
-    TELEPORT_IN_SECONDS("$1Teleportiere in %s Sekunden. Bewege dich nicht..."),
-    TELEPORT_FAILED("$2Teleportation wurde wegen einer Bewegen or Schaden abgebrochen."),
-    /*
-     * Set Block
-     */
-    SET_BLOCK_ACTION_FINISHED("$1The last setblock action is now finished."),
-    /*
-     * Debug
-     */
-    DEUBG_HEADER("$1Debug Information\\n"),
-    DEBUG_SECTION("$2>> $1&l%val%"),
-    DEBUG_LINE("$2>> $1%var%$2:$1 %val%\\n"),
-    /*
-     * Invalid
-     */
-    NOT_VALID_DATA("$2Das ist kein gültiger Datenwert."),
-    NOT_VALID_BLOCK("$2Das ist kein gültiger Block."),
-    NOT_VALID_NUMBER("$2Das ist keine gültige Zahl."),
-    NOT_VALID_PLOT_ID("$2Das ist keine gültige Plot-ID."),
-    PLOT_ID_FORM("$2Die Plot-ID muss wie folgt angegeben werden: $1X;Y $2z.B. $1-5;7"),
-    NOT_YOUR_PLOT("$2Das ist nicht dein Plot."),
-    NO_SUCH_PLOT("$2Ein solcher Plot existiert nicht."),
-    PLAYER_HAS_NOT_BEEN_ON("$2Dieser Spieler war nicht in der Plotwelt."),
-    FOUND_NO_PLOTS("$2Dein Suchmuster ergab keine Treffer."),
-    /*
-     * Camera
-     */
-    CAMERA_STARTED("$2Du verwendest den Kameramodus für Plot $1%s"),
-    CAMERA_STOPPED("$2Der Kameramodus wurde abeschaltet."),
-    /*
-     * Need
-     */
-    NEED_PLOT_NUMBER("$2Du musst eine Plotnummer oder einen Alias angeben."),
-    NEED_BLOCK("$2Du musst einen Block angeben."),
-    NEED_PLOT_ID("$2Du musst eine Plot-ID angeben."),
-    NEED_PLOT_WORLD("$2Du musst eine Plotwelt angeben."),
-    NEED_USER("$2Du musst einen Spielernamen angeben."),
-    /*
-     * Info
-     */
-    PLOT_UNOWNED("$2Für diese Aktion muss dieser Plot einen Besitzer aufweisen."),
-    PLOT_INFO_UNCLAIMED("$2Plot $1%s$2 hat bisher keinen Besitzer."),
-    /*
-     * PLOT_INFO("" +
-     * "$1ID$2: $4%id%$2\n" +
-     * "$1Alias$2: $4%alias%\n" +
-     * "$1Owner$2: $4%owner%\n" +
-     * "$1Helpers$2: $4%helpers%\n" +
-     * "$1Trusted$2: $4%trusted%\n" +
-     * "$1Denied$2: $4%denied%\n" +
-     * "$1Flags$2: $4%flags%\n" +
-     * "$1Biome$2: $4%biome%\n" +
-     * "$1Rating$2: $4%rating%$2/$410\n" +
-     * "$1Can build$2: $4%build%"
-     * ),
-     */
-    PLOT_INFO_HEADER("$3====== $1INFO $3======", false),
-    PLOT_INFO("$1ID: $2%id%$1\n" + "$1Alias: $2%alias%$1\n" + "$1Besitzer: $2%owner%$1\n" + "$1Biom: $2%biome%$1\n" + "$1Baurechte: $2%build%$1\n" + "$1Wertung: $2%rating%$1/$210$1\n" + "$1Helfer: $2%helpers%$1\n" + "$1Vertraut: $2%trusted%$1\n" + "$1Verboten: $2%denied%$1\n" + "$1Flags: $2%flags%"),
-    PLOT_INFO_HELPERS("$1Helfer:$2 %helpers%"),
-    PLOT_INFO_TRUSTED("$1Vertraute:$2 %trusted%"),
-    PLOT_INFO_DENIED("$1Verboten:$2 %denied%"),
-    PLOT_INFO_FLAGS("$1Flags:$2 %flags%"),
-    PLOT_INFO_BIOME("$1Biom:$2 %biome%"),
-    PLOT_INFO_RATING("$1Wertung:$2 %rating%"),
-    PLOT_INFO_OWNER("$1Besitzer:$2 %owner%"),
-    PLOT_INFO_ID("$1ID:$2 %id%"),
-    PLOT_INFO_ALIAS("$1Alias:$2 %alias%"),
-    PLOT_INFO_SIZE("$1Größe:$2 %size%"),
-    PLOT_USER_LIST(" $1%user%$2,"),
-    INFO_SYNTAX_CONSOLE("$2/plot info <world> X;Y"),
-    /*
-     * Generating
-     */
-    GENERATING_COMPONENT("$1Die Generierung wurde gemäß deiner Einstellungen gestartet."),
-    /*
-     * Clearing
-     */
-    CLEARING_PLOT("$2Plot wird asyncron geleert."),
-    CLEARING_DONE("$4Erfolgreich geleert. Dauerte %sms."),
-    /*
-     * Claiming
-     */
-    PLOT_NOT_CLAIMED("$2Dieser Plot hat keinen Besitzer"),
-    PLOT_IS_CLAIMED("$2Dieser Plot hat bereits einen Besitzer."),
-    CLAIMED("$4Plot erfolgreich in Besitz genommen."),
-    /*
-     * List
-     */
-    PLOT_LIST_HEADER_PAGED("$2(Seite $1%von$2/$1%max$2) $1Liste Plots nach %word%"),
-    PLOT_LIST_HEADER("$1Liste aller %word% Plots"),
-    PLOT_LIST_ITEM("$2>> $1%id$2:$1%Welt $2- $1%owner"),
-    PLOT_LIST_ITEM_ORDERED("$2[$1%in$2] >> $1%id$2:$1%Welt $2- $1%owner"),
-    PLOT_LIST_FOOTER("$2>> $1%word% umfasst insgesamt $2%num% $1Plots %plot%."),
-    /*
-     * Left
-     */
-    LEFT_PLOT("$2Du hast einen Plot verlassen."),
-    /*
-     * PlotMe
-     */
-    NOT_USING_PLOTME("$2Dieser Server verwendet das $1PlotSquared $2Plotmanagement System. Verwende stattdessen $1/plots"),
-    /*
-     * Wait
-     */
-    WAIT_FOR_TIMER("$2Ein zeitgeber wurde an den Plot oder an dich gebunden. Bitte warte bis die Zeit abgelaufen."),
-    /*
-     * Chat
-     */
-    PLOT_CHAT_FORMAT("$2[$1Plot Chat$2][$1%plot_id%$2] $1%sender%$2: $1%msg%"),
-    /*
-     * Denied
-     */
-    DENIED_REMOVED("$4Der Spieler darf diesen Plot wieder betreten."),
-    DENIED_ADDED("$4Der Spieler darf diesen Plot nicht mehr betreten."),
-    DENIED_NEED_ARGUMENT("$2Argumente fehlen. $1/plot denied add <name> $2oder $1/plot helpers remove <name>"),
-    WAS_NOT_DENIED("$2Der Spieler durfte diesen Plot bereits betreten."),
-    /*
-     * Rain
-     */
-    NEED_ON_OFF("$2Du musst einen Wert angeben. Mögliche Werte: $1on$2, $1off"),
-    SETTING_UPDATED("$4Einstellungen erfolgreich aktualisiert."),
-    /*
-     * Flag
-     */
-    FLAG_KEY("$2Schlüssel: %s"),
-    FLAG_TYPE("$2Typ: %s"),
-    FLAG_DESC("$2Beschreibung: %s"),
-    NEED_KEY("$2Mögliche Werte: $1%values%"),
-    NOT_VALID_FLAG("$2Ungültige Flag"),
-    NOT_VALID_VALUE("$2Wert der Flag muss alphanumerisch angegeben werden."),
-    FLAG_NOT_IN_PLOT("$2Diese Flag wurde in diesem Plot nicht gesetzt."),
-    FLAG_NOT_REMOVED("$2Die Flag konnte nicht entfernt werden."),
-    FLAG_NOT_ADDED("$2Flag konnte nicht gesetzt werden."),
-    FLAG_REMOVED("$4Flag erfolgreich entfernt."),
-    FLAG_ADDED("$4Successfully added flag"),
-    /*
-     * Helper
-     */
-    HELPER_ADDED("$4Helfer erfolgreich zu diesem Plot hinzugefügt."),
-    HELPER_REMOVED("$4Helfer erfolgreich von diesem Plot enfernt."),
-    HELPER_NEED_ARGUMENT("$2Argumente fehlen. $1/plot helpers add <name> $2oder $1/plot helpers remove <name>"),
-    WAS_NOT_ADDED("$2Dieser Spieler war bisher kein Helfer auf diesem Plot."),
-    PLOT_REMOVED_HELPER("$1Plot %s auf dem du Helfer warst wurde wegen Inaktivität des Besitzers gelöscht."),
-    /*
-     * Trusted
-     */
-    ALREADY_OWNER("$2Dieser Spieler ist bereits Besitzer des Plots."),
-    ALREADY_ADDED("$2Dieser Spieler ist bereits in dieser Kategorie."),
-    TRUSTED_ADDED("$4Spieler erfolgreich in diesem Plot vertraut."),
-    TRUSTED_REMOVED("$1Diesem Spieler wird auf diesem Plot nicht mehr vertraut."),
-    TRUSTED_NEED_ARGUMENT("$2Argumente fehlen. $1/plot trusted add <name> $2oder $1/plot trusted remove <name>"),
-    T_WAS_NOT_ADDED("$2Diesem Spieler wurde bisher nicht vertraut."),
-    /*
-     * Set Owner
-     */
-    SET_OWNER("$4lotbesitzer erfolgreich gesetzt."),
-    NOW_OWNER("$4Du bist jetzt Besitzer des Plots %s"),
-    /*
-     * Signs
-     */
-    OWNER_SIGN_LINE_1("$1ID: $1%id%"),
-    OWNER_SIGN_LINE_2("$1Besitzer:"),
-    OWNER_SIGN_LINE_3("$2%plr%"),
-    OWNER_SIGN_LINE_4("$3in Besitz"),
-    /*
-     * Help
-     */
-    HELP_HEADER("$3====== $1Plot\u00B2 Hilfe $3======"),
-    HELP_CATEGORY("$1Kategorie: $2%category%$2,$1 Seite: $2%currentt%$3/$2%max%$2,$1 Zeige: $2%dis%$3/$2%total%"),
-    HELP_INFO("$3====== $1Wähle eine Kategorie $3======", false),
-    HELP_INFO_ITEM("$1/plots help %category% $3- $2%category_desc%"),
-    HELP_ITEM("$1%usage% [%alias%]\n $3- $2%desc%\n"),
-    /*
-     * Direction
-     */
-    DIRECTION("$1Aktuelle Himmelsrichtung: %dir%"),
-    /*
-     * Custom
-     */
-    CUSTOM_STRING("-");
-    /**
-     * Special Language
-     *
-     * @see com.intellectualsites.translation.TranslationLanguage
-     */
-    protected final static TranslationLanguage lang = new TranslationLanguage("PlotSquared", "this", "use");
-    public static String COLOR_1 = "&6", COLOR_2 = "&7", COLOR_3 = "&8", COLOR_4 = "&3";
-    /**
-     * The TranslationManager
-     *
-     * @see com.intellectualsites.translation.TranslationManager
-     */
-    private static TranslationManager manager;
-    /**
-     * The default file
-     *
-     * @see com.intellectualsites.translation.TranslationFile
-     */
-    private static TranslationFile defaultFile;
-    /**
-     * Default
-     */
-    private String d;
-    /**
-     * Translated
-     */
-    private String s;
-    /**
-     * Should the string be prefixed?
-     */
-    private boolean prefix;
-
-    /**
-     * Constructor for custom strings.
-     */
-    C_german() {
-
-        /*
-         * use setCustomString();
-         */
-    }
-
-    /**
-     * Constructor
-     *
-     * @param d default
-     * @param prefix use prefix
-     */
-    C_german(final String d, final boolean prefix) {
-        this.d = d;
-        if (this.s == null) {
-            this.s = "";
-        }
-        this.prefix = prefix;
-    }
-
-    /**
-     * Constructor
-     *
-     * @param d default
-     */
-    C_german(final String d) {
-        this(d, true);
-    }
-
-    public static void setupTranslations() {
-        manager = new TranslationManager();
-        defaultFile = new YamlTranslationFile(BukkitTranslation.getParent(), lang, "PlotSquared", manager).read();
-        // register everything in this class
-        for (final C_german c : values()) {
-            manager.addTranslationObject(new TranslationObject(c.toString(), c.d, "", ""));
-        }
-    }
-
-    public static void saveTranslations() {
-        try {
-            manager.saveAll(defaultFile).saveFile(defaultFile);
-        } catch (final Exception e) {
-            e.printStackTrace();
-        }
-    }
-
-    /**
-     * Get the default string
-     *
-     * @return default
-     */
-    public String d() {
-        return this.d;
-    }
-
-    /**
-     * Get translated if exists
-     *
-     * @return translated if exists else default
-     */
-    public String s() {
-        final String s = manager.getTranslated(toString(), lang).getTranslated().replaceAll("&-", "\n").replaceAll("\\n", "\n");
-        return s.replace("$1", COLOR_1.toString()).replace("$2", COLOR_2.toString()).replace("$3", COLOR_3.toString()).replace("$4", COLOR_4.toString());
-        /*
-         * if (PlotSquared.translations != null) {
-         * final String t = PlotSquared.translations.getString(this.toString());
-         * if (t != null) {
-         * this.s = t;
-         * }
-         * }
-         * if (this.s.length() < 1) {
-         * return "";
-         * }
-         * return this.s.replace("\\n", "\n");
-         */
-    }
-
-    public boolean usePrefix() {
-        return this.prefix;
-    }
-
-    /**
-     * @return translated and color decoded
-     *
-     * @see org.bukkit.ChatColor#translateAlternateColorCodes(char, String)
-     */
-    public String translated() {
-        return ChatColor.translateAlternateColorCodes('&', this.s());
-    }
-}
diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/database/SQLManager.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/database/SQLManager.java
index 0c7aa2447..83193fa9b 100644
--- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/database/SQLManager.java
+++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/database/SQLManager.java
@@ -926,7 +926,7 @@ public class SQLManager implements AbstractDB {
                                 flags.add(new Flag(FlagManager.getFlag(element, true), ""));
                             }
                             else {
-                                System.out.print("INVALID FLAG: " + element);
+                                PlotSquared.log("INVALID FLAG: " + element);
                             }
                         }
                     }
diff --git a/PlotSquared/src/main/java/com/intellectualsites/translation/YamlTranslationFile.java b/PlotSquared/src/main/java/com/intellectualsites/translation/YamlTranslationFile.java
index 9111c8d72..1e60a63d4 100644
--- a/PlotSquared/src/main/java/com/intellectualsites/translation/YamlTranslationFile.java
+++ b/PlotSquared/src/main/java/com/intellectualsites/translation/YamlTranslationFile.java
@@ -3,11 +3,16 @@ package com.intellectualsites.translation;
 import java.io.File;
 import java.io.FileReader;
 import java.io.FileWriter;
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
+import com.intellectualcrafters.plot.PlotSquared;
+import com.intellectualcrafters.plot.config.C;
+
+import org.bukkit.configuration.file.YamlConfiguration;
 import org.yaml.snakeyaml.DumperOptions;
 import org.yaml.snakeyaml.Yaml;
 
@@ -24,6 +29,7 @@ public class YamlTranslationFile extends TranslationFile {
     private HashMap<String, String> map;
     private String[] header;
     private boolean fancyHead = false;
+    private boolean isC = false;
     private YamlTranslationFile instance;
     /**
      * YAML Object
@@ -37,10 +43,11 @@ public class YamlTranslationFile extends TranslationFile {
      * @param language translation language
      * @param name     project name
      */
-    public YamlTranslationFile(final File path, final TranslationLanguage language, final String name, final TranslationManager manager) {
+    public YamlTranslationFile(final File path, final TranslationLanguage language, final String name, final TranslationManager manager, final boolean isC) {
         this.language = language;
         this.name = name;
         this.manager = manager;
+        this.isC  = isC;
         if (!path.exists()) {
             if (!path.mkdirs()) {
                 throw new RuntimeException("Could not create: " + path.getAbsolutePath());
@@ -136,39 +143,54 @@ public class YamlTranslationFile extends TranslationFile {
      */
     @Override
     public void saveFile() {
-        try {
-            if (!this.file.exists()) {
-                this.file.getParentFile().mkdirs();
-                this.file.createNewFile();
+        if (this.isC()) {
+            YamlConfiguration conf = YamlConfiguration.loadConfiguration(this.file);
+            for (String key : this.map.keySet()) {
+                C c = C.valueOf(key.toUpperCase());
+                conf.set("locale." + c.getCat() + "." + key, this.map.get(key));
+                conf.set(key, null);
             }
-            final FileWriter writer = new FileWriter(this.file);
-            // String s = getYaml().dump(map);
-            if ((this.header != null) && !this.fancyHead) {
-                for (final String head : this.header) {
-                    writer.write("# " + head + "\n");
-                }
-            } else if ((this.header != null) && this.fancyHead) {
-                for (final String head : this.header) {
-                    writer.write(head);
-                }
+            try {
+                conf.save(this.file);
+            } catch (IOException e) {
+                e.printStackTrace();
             }
-            final int length = this.map.size();
-            int current = 0;
-            for (final Map.Entry<String, String> entry : this.map.entrySet()) {
-                final String var = entry.getKey();
-                final String val = entry.getValue();
-                final String des = this.manager.getDescription(var);
-                if (des.equals("")) {
-                    writer.write(var + ": \"" + val + "\"" + (current < (length - 1) ? "\n" : ""));
-                } else {
-                    writer.write(des + "\n" + var + ": \"" + val + "\"" + (current < (length - 1) ? "\n" : ""));
+        } else {
+            try {
+                if (!this.file.exists()) {
+                    this.file.getParentFile().mkdirs();
+                    this.file.createNewFile();
                 }
-                ++current;
+                final FileWriter writer = new FileWriter(this.file);
+                // String s = getYaml().dump(map);
+                if ((this.header != null) && !this.fancyHead) {
+                    for (final String head : this.header) {
+                        writer.write("# " + head + "\n");
+                    }
+                } else if ((this.header != null) && this.fancyHead) {
+                    for (final String head : this.header) {
+                        writer.write(head);
+                    }
+                }
+                final int length = this.map.size();
+                int current = 0;
+                for (final Map.Entry<String, String> entry : this.map.entrySet()) {
+                    final String var = entry.getKey();
+                    final String val = entry.getValue();
+                    final String des = this.manager.getDescription(var);
+                    if (des.equals("")) {
+                        writer.write(var + ": \"" + val + "\"" + (current < (length - 1) ? "\n" : ""));
+                    } else {
+                        writer.write(des + "\n" + var + ": \"" + val + "\"" + (current < (length - 1) ? "\n" : ""));
+                    }
+                    ++current;
+                }
+                writer.close();
+            } catch (final Exception e) {
+                e.printStackTrace();
             }
-            writer.close();
-        } catch (final Exception e) {
-            e.printStackTrace();
         }
+
     }
 
     /**
@@ -196,19 +218,58 @@ public class YamlTranslationFile extends TranslationFile {
      */
     @Override
     public YamlTranslationFile read() {
-        try {
-            this.map = (HashMap<String, String>) getYaml().load(new FileReader(this.file));
-        } catch (final Exception e) {
-            e.printStackTrace();
-        }
-        if (this.map == null) {
-            this.map = new HashMap<String, String>();
-        }
-        for (final Map.Entry<String, String> objects : this.map.entrySet()) {
-            final String key = objects.getKey();
-            final String val = objects.getValue();
-            this.manager.addTranslation(key, new TranslationAsset(null, val, this.language));
+        if (this.isC()) {
+            YamlConfiguration conf = YamlConfiguration.loadConfiguration(this.file);
+            if (conf.get("locale") == null) {
+                try {
+                    this.map = (HashMap<String, String>) getYaml().load(new FileReader(this.file));
+                } catch (final Exception e) {
+                    e.printStackTrace();
+                }
+                if (this.map == null) {
+                    this.map = new HashMap<String, String>();
+                }
+                for (final Map.Entry<String, String> objects : this.map.entrySet()) {
+                    final String key = objects.getKey();
+                    final String val = objects.getValue();
+                    this.manager.addTranslation(key, new TranslationAsset(null, val, this.language));
+                }
+                this.saveFile();
+            } else {
+                if (this.map == null) {
+                    this.map = new HashMap<String, String>();
+                }
+                for (String label : conf.getConfigurationSection("locale").getKeys(false)) {
+                    for (String key : conf.getConfigurationSection("locale." + label).getKeys(false)) {
+                        String val = conf.getString("locale." + label + "." + key);
+                        this.map.put(key, val);
+                        this.manager.addTranslation(key, new TranslationAsset(null, val, this.language));
+                    }
+                }
+            }
+        } else {
+            try {
+                this.map = (HashMap<String, String>) getYaml().load(new FileReader(this.file));
+            } catch (final Exception e) {
+                e.printStackTrace();
+            }
+            if (this.map == null) {
+                this.map = new HashMap<String, String>();
+            }
+            for (final Map.Entry<String, String> objects : this.map.entrySet()) {
+                final String key = objects.getKey();
+                final String val = objects.getValue();
+                this.manager.addTranslation(key, new TranslationAsset(null, val, this.language));
+            }
         }
         return this.instance;
     }
-}
+
+    public boolean isC() {
+        return isC;
+    }
+
+    public void setIsC(boolean isC) {
+        this.isC = isC;
+    }
+}
\ No newline at end of file
diff --git a/PlotSquared/src/main/java/com/intellectualsites/translation/bukkit/TranslationPlugin.java b/PlotSquared/src/main/java/com/intellectualsites/translation/bukkit/TranslationPlugin.java
index 091e64610..a84518be9 100644
--- a/PlotSquared/src/main/java/com/intellectualsites/translation/bukkit/TranslationPlugin.java
+++ b/PlotSquared/src/main/java/com/intellectualsites/translation/bukkit/TranslationPlugin.java
@@ -29,7 +29,7 @@ public class TranslationPlugin extends JavaPlugin {
             e.printStackTrace();
         }
         // Now let's create some default files :D
-        this.english = new YamlTranslationFile(BukkitTranslation.getParent(), TranslationLanguage.englishAmerican, getName(), manager).read().header("Example file", "@author Citymonstret");
+        this.english = new YamlTranslationFile(BukkitTranslation.getParent(), TranslationLanguage.englishAmerican, getName(), manager, true).read().header("Example file", "@author Citymonstret");
         // That created the file, read it, and made a default header
         getLogger().log(Level.INFO, BukkitTranslation.convert(manager.getTranslated("translator_loaded", TranslationLanguage.englishAmerican)));
     }
