From ada4a47b3f31122f5edce48cedb1755d9f5c8ae8 Mon Sep 17 00:00:00 2001
From: Robert Goldmann <deadlocker@gmx.de>
Date: Fri, 9 Feb 2018 22:59:46 +0100
Subject: [PATCH] added Tools to maven; added Logger and Localization

---
 pom.xml                                       |   6 +
 src/main/java/Main.java                       |  21 --
 .../budgetmaster/logic/utils/Colors.java      |  36 ++
 .../budgetmaster/logic/utils/Helpers.java     | 112 ++++++
 .../budgetmaster/logic/utils/Strings.java     | 240 ++++++++++++
 .../deadlocker8/budgetmaster/main/Main.java   |  40 ++
 .../de/deadlocker8/budgetmaster/icon.png      | Bin 0 -> 6873 bytes
 .../budgetmaster/languages/_de.properties     | 350 ++++++++++++++++++
 .../budgetmaster/languages/_en.properties     | 350 ++++++++++++++++++
 9 files changed, 1134 insertions(+), 21 deletions(-)
 delete mode 100644 src/main/java/Main.java
 create mode 100644 src/main/java/de/deadlocker8/budgetmaster/logic/utils/Colors.java
 create mode 100644 src/main/java/de/deadlocker8/budgetmaster/logic/utils/Helpers.java
 create mode 100644 src/main/java/de/deadlocker8/budgetmaster/logic/utils/Strings.java
 create mode 100644 src/main/java/de/deadlocker8/budgetmaster/main/Main.java
 create mode 100644 src/main/resources/de/deadlocker8/budgetmaster/icon.png
 create mode 100644 src/main/resources/de/deadlocker8/budgetmaster/languages/_de.properties
 create mode 100644 src/main/resources/de/deadlocker8/budgetmaster/languages/_en.properties

diff --git a/pom.xml b/pom.xml
index 3a758b0af..03acbe264 100644
--- a/pom.xml
+++ b/pom.xml
@@ -33,6 +33,12 @@
             <artifactId>spring-boot-starter-test</artifactId>
             <scope>test</scope>
         </dependency>
+
+        <dependency>
+            <groupId>de.deadlocker8</groupId>
+            <artifactId>tools</artifactId>
+            <version>1.0.0</version>
+        </dependency>
     </dependencies>
 
     <build>
diff --git a/src/main/java/Main.java b/src/main/java/Main.java
deleted file mode 100644
index f1c8e7ec6..000000000
--- a/src/main/java/Main.java
+++ /dev/null
@@ -1,21 +0,0 @@
-import org.springframework.boot.*;
-import org.springframework.boot.autoconfigure.*;
-import org.springframework.stereotype.*;
-import org.springframework.web.bind.annotation.*;
-
-@Controller
-@EnableAutoConfiguration
-public class Main
-{
-	@RequestMapping("/")
-	@ResponseBody
-	String home()
-	{
-		return "Hello World!";
-	}
-
-	public static void main(String[] args) throws Exception
-	{
-		SpringApplication.run(Main.class, args);
-	}
-}
\ No newline at end of file
diff --git a/src/main/java/de/deadlocker8/budgetmaster/logic/utils/Colors.java b/src/main/java/de/deadlocker8/budgetmaster/logic/utils/Colors.java
new file mode 100644
index 000000000..1403601fb
--- /dev/null
+++ b/src/main/java/de/deadlocker8/budgetmaster/logic/utils/Colors.java
@@ -0,0 +1,36 @@
+package de.deadlocker8.budgetmaster.logic.utils;
+
+import javafx.scene.paint.Color;
+
+public class Colors 
+{
+    public static final Color TEXT = Color.web("#212121");
+    public static final Color TEXT_RED = Color.web("#CC0000");
+    public static final Color INCOME = Color.web("#22BAD9");
+    public static final Color PAYMENT = Color.web("#F2612D");
+    public static final Color BACKGROUND = Color.web("#F4F4F4");
+    public static final Color BACKGROUND_MAIN = Color.web("#DDDDDD");
+    public static final Color BACKGROUND_BUTTON_BLUE = Color.web("#2E79B9");
+    public static final Color BACKGROUND_BUTTON_DARK_BLUE = Color.web("#246091");
+    public static final Color BACKGROUND_BUTTON_RED = Color.web("#FF5047");
+    public static final Color BACKGROUND_NOTIFICATION = Color.web("#323232");
+    public static final Color BACKGROUND_REPORT_TABLE_HEADER_DISABLED = Color.SALMON;
+    public static final Color BACKGROUND_CHART_LEGEND = Color.web("#DDDDDD");
+
+    // CATEGORIES
+    public static final Color CATEGORIES_LIGHT_GREY = Color.web("#EEEEEE");
+    public static final Color CATEGORIES_GREY = Color.web("#888888");
+    public static final Color CATEGORIES_DARK_GREY = Color.web("#333333");
+    public static final Color CATEGORIES_LIGHT_YELLOW = Color.rgb(255,241,119);
+    public static final Color CATEGORIES_YELLOW = Color.rgb(255,204,0);
+    public static final Color CATEGORIES_ORANGE = Color.rgb(255,149,0);
+    public static final Color CATEGORIES_RED = Color.rgb(255,59,48);
+    public static final Color CATEGORIES_DARK_RED = Color.rgb(169,3,41);
+    public static final Color CATEGORIES_PINK = Color.rgb(255,81,151);
+    public static final Color CATEGORIES_PURPLE = Color.rgb(155,89,182);    
+    public static final Color CATEGORIES_DARK_PURPLE = Color.rgb(88,86,214);
+    public static final Color CATEGORIES_BLUE = Color.rgb(0,122,250);
+    public static final Color CATEGORIES_LIGHT_BLUE = Color.rgb(90,200,250);
+    public static final Color CATEGORIES_LIGHT_GREEN = Color.rgb(76,217,100);
+    public static final Color CATEGORIES_DARK_GREEN = Color.rgb(46,124,43);
+}
\ No newline at end of file
diff --git a/src/main/java/de/deadlocker8/budgetmaster/logic/utils/Helpers.java b/src/main/java/de/deadlocker8/budgetmaster/logic/utils/Helpers.java
new file mode 100644
index 000000000..6bd8a0a6c
--- /dev/null
+++ b/src/main/java/de/deadlocker8/budgetmaster/logic/utils/Helpers.java
@@ -0,0 +1,112 @@
+package de.deadlocker8.budgetmaster.logic.utils;
+
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
+import java.text.DecimalFormat;
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+
+import javafx.scene.paint.Color;
+import tools.Localization;
+
+public class Helpers
+{
+	public static final DecimalFormat NUMBER_FORMAT = new DecimalFormat("0.00");
+	public static final String SALT = "ny9/Y+G|WrJ,82|oIYQQ X %i-sq#4,uA-qKPtwFPnw+s(k2`rV)^-a1|t{D3Z>S";
+	public static final String ROADMAP_URL = "https://deadlocker.thecodelabs.de/roadmap/php/index.php?id=1";
+	
+	public static String getCurrencyString(int amount, String currency)
+	{
+		return String.valueOf(NUMBER_FORMAT.format(amount / 100.0).replace(".", ",")) + " " + currency;
+	}
+
+	public static String getCurrencyString(double amount, String currency)
+	{
+		return String.valueOf(NUMBER_FORMAT.format(amount).replace(".", ",")) + " " + currency;
+	}
+	
+	public static String getURLEncodedString(String input)
+	{
+		try
+		{
+			return URLEncoder.encode(input, "UTF-8");
+		}
+		catch(UnsupportedEncodingException e)
+		{
+			return input;
+		}
+	}
+
+	public static String getDateString(LocalDate date)
+	{
+		if(date == null)
+		{
+			return "";
+		}
+		DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+		return date.format(formatter);
+	}
+
+	public static ArrayList<String> getMonthList()
+	{
+		ArrayList<String> monthNames = new ArrayList<>();
+		monthNames.add(Localization.getString(Strings.MONTH_JANUARY));
+		monthNames.add(Localization.getString(Strings.MONTH_FEBRUARY));
+		monthNames.add(Localization.getString(Strings.MONTH_MARCH));
+		monthNames.add(Localization.getString(Strings.MONTH_APRIL));
+		monthNames.add(Localization.getString(Strings.MONTH_MAY));
+		monthNames.add(Localization.getString(Strings.MONTH_JUNE));
+		monthNames.add(Localization.getString(Strings.MONTH_JULY));
+		monthNames.add(Localization.getString(Strings.MONTH_AUGUST));
+		monthNames.add(Localization.getString(Strings.MONTH_SEPTEMBER));
+		monthNames.add(Localization.getString(Strings.MONTH_OCTOBER));
+		monthNames.add(Localization.getString(Strings.MONTH_NOVEMBER));
+		monthNames.add(Localization.getString(Strings.MONTH_DECEMBER));
+		return monthNames;
+	}
+
+	public static ArrayList<String> getYearList()
+	{
+		ArrayList<String> years = new ArrayList<>();
+		for(int i = 2000; i < 2100; i++)
+		{
+			years.add(String.valueOf(i));
+		}
+		return years;
+	}
+	
+	public static ArrayList<Color> getCategoryColorList()
+	{
+	    ArrayList<Color> colors = new ArrayList<>();       
+        colors.add(Colors.CATEGORIES_LIGHT_GREY);        
+        colors.add(Colors.CATEGORIES_GREY);
+        colors.add(Colors.CATEGORIES_DARK_GREY);
+        colors.add(Colors.CATEGORIES_LIGHT_YELLOW);
+        colors.add(Colors.CATEGORIES_YELLOW);
+        colors.add(Colors.CATEGORIES_ORANGE);
+        colors.add(Colors.CATEGORIES_RED);
+        colors.add(Colors.CATEGORIES_DARK_RED);
+        colors.add(Colors.CATEGORIES_PINK);
+        colors.add(Colors.CATEGORIES_PURPLE);
+        colors.add(Colors.CATEGORIES_DARK_PURPLE);
+        colors.add(Colors.CATEGORIES_BLUE);
+        colors.add(Colors.CATEGORIES_LIGHT_BLUE);
+        colors.add(Colors.CATEGORIES_LIGHT_GREEN);
+        colors.add(Colors.CATEGORIES_DARK_GREEN);    
+        
+        return colors;
+	}	
+	
+	/**
+	 * Replaces line breaks and tabs with spaces
+	 * @param text
+	 * @return String
+	 */
+	public static String getFlatText(String text)
+	{
+		text = text.replace("\n", " ");
+		text = text.replace("\t", " ");
+		return text;
+	}
+}
\ No newline at end of file
diff --git a/src/main/java/de/deadlocker8/budgetmaster/logic/utils/Strings.java b/src/main/java/de/deadlocker8/budgetmaster/logic/utils/Strings.java
new file mode 100644
index 000000000..f972c712b
--- /dev/null
+++ b/src/main/java/de/deadlocker8/budgetmaster/logic/utils/Strings.java
@@ -0,0 +1,240 @@
+package de.deadlocker8.budgetmaster.logic.utils;
+
+public class Strings 
+{    
+    //APP_INFO
+    public static final String APP_NAME = "app.name";
+    public static final String VERSION_CODE = "version.code";
+    public static final String VERSION_NAME = "version.name";
+    public static final String VERSION_DATE = "version.date";
+    public static final String AUTHOR = "author";
+    public static final String CREDITS = "credits";
+    public static final String FOLDER = "folder";
+    public static final String ROADMAP_URL = "roadmap.url";
+    public static final String GITHUB_URL = "github.url";
+    
+    //TITLE
+    public static final String TITLE_INCOMES = "title.incomes";
+    public static final String TITLE_INCOME = "title.income";
+    public static final String TITLE_PAYMENTS = "title.payments";
+    public static final String TITLE_PAYMENT = "title.payment";
+    public static final String TITLE_CATEGORY = "title.category";
+    public static final String TITLE_CATEGORIES = "title.categories";
+    public static final String TITLE_CATEGORY_BUDGETS = "title.category.budgets";
+    public static final String TITLE_AMOUNT = "title.amount";
+    public static final String TITLE_INFO = "title.info";
+    public static final String TITLE_WARNING = "title.warning";
+    public static final String TITLE_ERROR = "title.error";
+    public static final String TITLE_CATEGORY_NEW = "title.category.new";  
+    public static final String TITLE_CATEGORY_EDIT = "title.category.edit";  
+    public static final String TITLE_CHART_EXPORT = "title.chart.export";
+    public static final String TITLE_MODAL = "title.modal";
+    public static final String TITLE_PAYMENT_EDIT = "title.payment.edit";
+    public static final String TITLE_PAYMENT_NEW = "title.payment.new";
+    public static final String TITLE_FILTER = "title.filter";
+    public static final String TITLE_SEARCH = "title.search";
+    public static final String TITLE_REPORT_SAVE = "title.report.save";
+    public static final String TITLE_DATABASE_EXPORT = "title.database.export";
+    public static final String TITLE_DATABASE_IMPORT = "title.database.import";
+    public static final String TITLE_DATEPICKER = "title.datepicker";
+    public static final String TITLE_TAGS = "title.tags";
+    
+    //LOAD
+    public static final String LOAD_CHARTS = "load.charts";
+    public static final String LOAD_DATA = "load.data";
+    public static final String LOAD_REPORT_TAB = "load.report.tab";
+    public static final String LOAD_REPORT = "load.report";
+    public static final String LOAD_DATABASE_EXPORT = "load.database.export";
+    public static final String LOAD_DATABASE_IMPORT = "load.database.import";
+    public static final String LOAD_DATABASE_DELETE = "load.database.delete";
+    public static final String LOAD_UPDATE = "load.update";
+    public static final String LOAD_SEARCH = "load.search";
+    public static final String LOAD_LOCAL_SERVER = "load.local.server";
+    public static final String LOAD_DOWNLOAD_LOCAL_SERVER = "load.download.local.server";
+    public static final String LOAD_LOCAL_SERVER_CONNECT = "load.local.server.connect";
+    public static final String LOAD_LOCAL_SERVER_RETRY = "load.local.server.retry";
+    
+    
+    //MISC
+    public static final String CATEGORY_NONE = "category.none";
+    public static final String CATEGORY_REST = "category.rest";
+    public static final String TOOLTIP_CHART_CATEGORIES = "tooltip.chart.categories";
+    public static final String CHART_MONTH_LINE_SUM = "chart.month.line.sum";
+    public static final String CATEGORIES_PLACEHOLDER = "categories.placeholder";
+    public static final String CHART_CATEGORIES_TITLE_INCOMES = "chart.categories.title.incomes";
+    public static final String CHART_CATEGORIES_TITLE_PAYMENTS = "chart.categories.title.payments";
+    public static final String OK = "ok";
+    public static final String CANCEL = "cancel";
+    public static final String HOME_PLACEHOLDER = "home.placeholder";
+    public static final String HOME_BUDGET = "home.budget";
+    public static final String PAYMENTS_PLACEHOLDER = "payments.placeholder";
+    public static final String URL_PLACEHOLDER = "url.placeholder";
+    public static final String CURRENCY_PLACEHOLDER = "currency.placeholder";
+    public static final String TRUSTED_HOSTS_PLACEHOLDER = "trusted.hosts.placeholder";
+    public static final String VERSION = "version";
+    public static final String UNDEFINED = "undefined";
+    public static final String TAGFIELD_PLACEHOLDER = "tagfield.placeholder";
+    public static final String SHORTCUT_DEV_CONSOLE = "shortcut.dev.console";
+    public static final String LOCAL_SERVER_STATUS_OK = "local.server.status.ok";
+    public static final String LOCAL_SERVER_STATUS_NOT_STARTED = "local.server.status.not.started";
+    public static final String LOCAL_SERVER_ACTION_NOT_STARTED = "local.server.action.not.started";
+    public static final String LOCAL_SERVER_STATUS_NOT_PRESENT = "local.server.status.not.present";
+    public static final String LOCAL_SERVER_ACTION_NOT_PRESENT = "local.server.action.not.present";
+    public static final String LOCAL_SERVER_STATUS_INCOMPATIBLE = "local.server.status.incompatible";
+    public static final String LOCAL_SERVER_ACTION_INCOMPATIBLE = "local.server.action.incompatible";
+    
+    //REPORT
+    public static final String REPORT_POSITION = "report.position";
+    public static final String REPORT_DATE = "report.date";
+    public static final String REPORT_REPEATING = "report.repeating";
+    public static final String REPORT_CATEGORY = "report.category";
+    public static final String REPORT_NAME = "report.name";
+    public static final String REPORT_DESCRIPTION = "report.description";
+    public static final String REPORT_TAGS = "report.tags";
+    public static final String REPORT_RATING = "report.rating";
+    public static final String REPORT_AMOUNT = "report.amount";
+    public static final String REPORT_HEADLINE = "report.headline";
+    public static final String REPORT_HEADLINE_PAYMENTS_OVERVIEW = "report.headline.payments.overview";
+    public static final String REPORT_SUM_TOTAL = "report.sum.total";
+    public static final String REPORT_SUM = "report.sum";
+    public static final String REPORT_FOOTER_LEFT = "report.footer.left";
+    public static final String REPORT_FOOTER_CENTER = "report.footer.center";
+    public static final String REPORT_REPEATING_YES ="report.repeating.yes";
+    public static final String REPORT_REPEATING_NO ="report.repeating.no";
+    public static final String REPORT_INITIAL_FILENAME ="report.initial.filename"; 
+    public static final String REPORT_BUDGET = "report.budget";
+    public static final String REPORT_INCOMES = "report.incomes";
+    public static final String REPORT_PAYMENTS = "report.payments";
+    public static final String REPORT_BUDGET_REST = "report.budget.rest";
+    
+    //MONTH_NAMES
+    public static final String MONTH_JANUARY ="month.january"; 
+    public static final String MONTH_FEBRUARY ="month.february"; 
+    public static final String MONTH_MARCH ="month.march"; 
+    public static final String MONTH_APRIL ="month.april"; 
+    public static final String MONTH_MAY ="month.may"; 
+    public static final String MONTH_JUNE ="month.june"; 
+    public static final String MONTH_JULY ="month.july"; 
+    public static final String MONTH_AUGUST ="month.august"; 
+    public static final String MONTH_SEPTEMBER ="month.september"; 
+    public static final String MONTH_OCTOBER ="month.october"; 
+    public static final String MONTH_NOVEMBER ="month.november"; 
+    public static final String MONTH_DECEMBER ="month.december";
+    
+    //NOTIFICATION
+    public static final String NOTIFICATION_CHART_EXPORT = "notification.chart.export";
+    public static final String NOTIFICATION_REPORT_SAVE = "notification.report.save";
+    public static final String NOTIFICATION_SETTINGS_SAVE = "notification.settings.save";
+    public static final String NOTIFICATION_NO_UPDATE_AVAILABLE = "notification.no.update.available";
+    
+    //INFO
+    public static final String INFO_TITLE_CATEGORY_DELETE = "info.title.category.delete";
+    public static final String INFO_TEXT_CATEGORY_DELETE = "info.text.category.delete";
+    public static final String INFO_TITLE_PAYMENT_DELETE = "info.title.payment.delete";
+    public static final String INFO_TEXT_PAYMENT_DELETE = "info.text.payment.delete";
+    public static final String INFO_TEXT_PAYMENT_REPEATING_DELETE = "info.text.payment.repeating.delete";
+    public static final String INFO_TEXT_PAYMENT_REPEATING_DELETE_ALL = "info.text.payment.repeating.delete.all";
+    public static final String INFO_TEXT_PAYMENT_REPEATING_DELETE_FUTURES = "info.text.payment.repeating.delete.futures";
+    public static final String INFO_FIRST_START = "info.first.start";
+    public static final String INFO_TITLE_CHART_EXPORT = "info.title.chart.export";
+    public static final String INFO_TEXT_CHART_EXPORT = "info.text.chart.export";
+    public static final String INFO_TEXT_CHART_EXPORT_OPEN_FOLDER = "info.text.chart.export.open.folder";
+    public static final String INFO_TEXT_CHART_EXPORT_OPEN_CHART = "info.text.chart.export.open.chart";
+    public static final String INFO_TITLE_REPORT_SAVE = "info.title.report.save";
+    public static final String INFO_TEXT_REPORT_SAVE = "info.text.report.save";
+    public static final String INFO_TEXT_REPORT_SAVE_OPEN_FOLDER = "info.text.report.save.open.folder";
+    public static final String INFO_TEXT_REPORT_SAVE_OPEN_REPORT = "info.text.report.save.open.report";
+    public static final String INFO_TITLE_DATABASE_EXPORT = "info.title.database.export";
+    public static final String INFO_TEXT_DATABASE_EXPORT = "info.text.database.export";
+    public static final String INFO_TITLE_DATABASE_IMPORT = "info.title.database.import";
+    public static final String INFO_TEXT_DATABASE_IMPORT = "info.text.database.import";
+    public static final String INFO_TITLE_DATABASE_IMPORT_DIALOG = "info.title.database.import.dialog";
+    public static final String INFO_TEXT_DATABASE_IMPORT_DIALOG = "info.text.database.import.dialog";
+    public static final String INFO_TEXT_DATABASE_IMPORT_DIALOG_DELETE = "info.text.database.import.dialog.delete";
+    public static final String INFO_TEXT_DATABASE_IMPORT_DIALOG_APPEND = "info.text.database.import.dialog.append";
+    public static final String INFO_TITLE_DATABASE_DELETE = "info.title.database.delete";
+    public static final String INFO_HEADER_TEXT_DATABASE_DELETE = "info.header.text.database.delete";
+    public static final String INFO_TEXT_DATABASE_DELETE = "info.text.database.delete";
+    public static final String INFO_TITLE_WELCOME = "info.title.welcome";
+    public static final String INFO_HEADER_TEXT_WELCOME = "info.header.text.welcome";
+    public static final String INFO_TEXT_WELCOME_FIRST_START = "info.text.welcome.first.start";
+    public static final String INFO_TEXT_WELCOME_COMPATIBILITY = "info.text.welcome.compatibility";
+    public static final String INFO_TITLE_LANGUAGE_CHANGED = "info.title.language.changed";
+    public static final String INFO_TEXT_LANGUAGE_CHANGED = "info.text.language.changed";
+    public static final String INFO_TEXT_LANGUAGE_CHANGED_RESTART_NOW = "info.text.language.changed.restart.now";
+    public static final String INFO_TEXT_LANGUAGE_CHANGED_RESTART_LATER = "info.text.language.changed.restart.later";
+    public static final String INFO_TITLE_UPDATE_AVAILABLE = "info.title.update.available";
+    public static final String INFO_TEXT_UPDATE_AVAILABLE = "info.text.update.available";
+    public static final String INFO_TEXT_UPDATE_AVAILABLE_SHOW_CHANGES = "info.text.update.available.show.changes";
+    public static final String INFO_TEXT_UPDATE_AVAILABLE_SHOW_CHANGES_DETAILED = "info.text.update.available.show.changes.detailed";
+    public static final String INFO_TEXT_UPDATE_AVAILABLE_NOW = "info.text.update.available.now";
+    public static final String INFO_TITLE_START_AFTER_UPDATE = "info.title.start.after.update";
+    public static final String INFO_HEADER_TEXT_START_AFTER_UPDATE = "info.header.text.start.after.update";
+    public static final String INFO_TEXT_START_AFTER_UPDATE = "info.text.start.after.update";
+    public static final String INFO_TAGS = "info.tags";
+    public static final String INFO_TITLE_SHUTDOWN = "info.title.shutdown";
+    public static final String INFO_TEXT_SHUTDOWN = "info.text.shutdown";
+        
+    //WARNING
+    public static final String WARNING_ENDDATE_BEFORE_STARTDATE = "warning.enddate.before.startdate";
+    public static final String WARNING_EMPTY_WIDTH_IN_PIXELS = "warning.empty.width.in.pixels";
+    public static final String WARNING_INTEGER_WIDTH_IN_PIXELS = "warning.integer.width.in.pixels";
+    public static final String WARNING_EMPTY_HEIGHT_IN_PIXELS = "warning.empty.height.in.pixels";
+    public static final String WARNING_INTEGER_HEIGHT_IN_PIXELS = "warning.integer.height.in.pixels";
+    public static final String WARNING_EMPTY_SAVEPATH_CHART = "warning.empty.savepath.chart";
+    public static final String WARNING_EMPTY_CATEGORY_NAME = "warning.empty.category.name";
+    public static final String WARNING_EMPTY_PAYMENT_NAME = "warning.empty.payment.name";
+    public static final String WARNING_NAME_CHARACTER_LIMIT_REACHED_45 = "warning.name.character.limit.reached.45";
+    public static final String WARNING_NAME_CHARACTER_LIMIT_REACHED_150 = "warning.name.character.limit.reached.150";
+    public static final String WARNING_DESCRIPTION_CHARACTER_LIMIT_REACHED_150 = "warning.description.character.limit.reached.150";
+    public static final String WARNING_TAG_CHARACTER_LIMIT_REACHED_45 = "warning.tag.character.limit.reached.45";
+    public static final String WARNING_PAYMENT_AMOUNT = "warning.payment.amount";
+    public static final String WARNING_EMPTY_PAYMENT_DATE = "warning.empty.payment.date";
+    public static final String WARNING_PAYMENT_REPEATING = "warning.payment.repeating";    
+    public static final String WARNING_EMPTY_SECRET_CLIENT = "warning.empty.secret.client";
+    public static final String WARNING_EMPTY_URL = "warning.empty.url";
+    public static final String WARNING_EMPTY_SECRET_SERVER = "warning.empty.secret.server";
+    public static final String WARNING_EMPTY_CURRENCY = "warning.empty.currency";
+    public static final String WARNING_WRONG_VERIFICATION_CODE = "warning.wrong.verificationcode";
+    public static final String WARNING_EMPTY_PASSWORD = "warning.empty.password";
+    public static final String WARNING_WRONG_PASSWORD = "warning.wrong.password";
+    public static final String WARNING_SERVER_VERSION = "warning.server.version";
+    public static final String WARNING_EMPTY_YEAR = "warning.empty.year";
+    public static final String WARNING_WRONG_YEAR = "warning.wrong.year";
+    
+    //ERROR
+    public static final String ERROR_UNKNOWN_HOST = "error.unknown.host";
+    public static final String ERROR_UNKNOWN_ERROR = "error.unknown.error";
+    public static final String ERROR_CONNECTION_REFUSED = "error.connection.refused";
+    public static final String ERROR_HTTPS_HOSTNAME_WRONG = "error.https.hostname.wrong";
+    public static final String ERROR_400 = "error.400";
+    public static final String ERROR_401 = "error.401";
+    public static final String ERROR_500 = "error.500";
+    public static final String ERROR_CREATE_UI = "error.create.ui";
+    public static final String ERROR_SERVER_CONNECTION = "error.server.connection";
+    public static final String ERROR_SERVER_CONNECTION_WITH_DETAILS = "error.server.connection.with.details";
+    public static final String ERROR_OPEN_FOLDER = "error.open.folder";
+    public static final String ERROR_OPEN_CHART = "error.open.chart";
+    public static final String ERROR_OPEN_REPORT = "error.open.report";
+    public static final String ERROR_CHART_EXPORT = "error.chart.export";
+    public static final String ERROR_REPORT_SAVE = "error.report.save";
+    public static final String ERROR_SETTINGS_SAVE = "error.settings.save";
+    public static final String ERROR_DATABASE_IMPORT = "error.database.import";
+    public static final String ERROR_DATABASE_IMPORT_WRONG_FILE = "error.database.import.wrong.file";
+    public static final String ERROR_PASSWORD_SAVE = "error.password.save";
+    public static final String ERROR_UPDATER_GET_LATEST_VERSION = "error.updater.get.latest.version";
+    public static final String ERROR_UPDATER_DOWNLOAD_LATEST_VERSION = "error.updater.download.latest.version";
+    public static final String ERROR_OPEN_BROWSER = "error.open.browser";
+    public static final String ERROR_LOCAL_SERVER_START = "error.local.server.start";
+    public static final String ERROR_LOCAL_SERVER_DOWNLOAD = "error.local.server.download";
+    
+    //ABOUT
+    public static final String ABOUT = "about";
+    public static final String ABOUT_ROADMAP_LINK = "about.roadmap.link";
+    public static final String ABOUT_VERSION = "about.version";
+    public static final String ABOUT_DATE = "about.date";
+    public static final String ABOUT_AUTHOR = "about.author";
+    public static final String ABOUT_ROADMAP = "about.roadmap";
+    public static final String ABOUT_SOURCECODE = "about.sourcecode";
+    public static final String ABOUT_CREDITS = "about.credits";
+}
\ No newline at end of file
diff --git a/src/main/java/de/deadlocker8/budgetmaster/main/Main.java b/src/main/java/de/deadlocker8/budgetmaster/main/Main.java
new file mode 100644
index 000000000..c431586fe
--- /dev/null
+++ b/src/main/java/de/deadlocker8/budgetmaster/main/Main.java
@@ -0,0 +1,40 @@
+package de.deadlocker8.budgetmaster.main;
+
+import de.deadlocker8.budgetmaster.logic.utils.Strings;
+import logger.FileOutputMode;
+import logger.Logger;
+import org.springframework.boot.ApplicationArguments;
+import org.springframework.boot.ApplicationRunner;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import tools.Localization;
+import tools.PathUtils;
+
+import java.io.File;
+import java.util.Locale;
+
+
+@SpringBootApplication
+public class Main implements ApplicationRunner
+{
+	public static void main(String[] args)
+	{
+		SpringApplication.run(Main.class, args);
+	}
+
+	@Override
+	public void run(ApplicationArguments args) throws Exception
+	{
+		Localization.init("de/deadlocker8/budgetmaster/languages/");
+		Localization.loadLanguage(Locale.ENGLISH);
+
+		String logLevelParam = args.getOptionValues("loglevel").get(0);
+		Logger.setLevel(logLevelParam);
+
+		File logFolder = new File(PathUtils.getOSindependentPath() + Localization.getString(Strings.FOLDER));
+		PathUtils.checkFolder(logFolder);
+		Logger.enableFileOutput(logFolder, System.out, System.err, FileOutputMode.COMBINED);
+
+		Logger.appInfo(Localization.getString(Strings.APP_NAME), Localization.getString(Strings.VERSION_NAME), Localization.getString(Strings.VERSION_CODE), Localization.getString(Strings.VERSION_DATE));
+	}
+}
\ No newline at end of file
diff --git a/src/main/resources/de/deadlocker8/budgetmaster/icon.png b/src/main/resources/de/deadlocker8/budgetmaster/icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..be71fa009b5091dc1b6cdd99c2c171609d25339e
GIT binary patch
literal 6873
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

literal 0
HcmV?d00001

diff --git a/src/main/resources/de/deadlocker8/budgetmaster/languages/_de.properties b/src/main/resources/de/deadlocker8/budgetmaster/languages/_de.properties
new file mode 100644
index 000000000..ec351e3a3
--- /dev/null
+++ b/src/main/resources/de/deadlocker8/budgetmaster/languages/_de.properties
@@ -0,0 +1,350 @@
+# DEFAULT
+app.name=BudgetMaster
+version.code=13
+version.name=1.8.0
+version.date=17.12.17
+author=Robert Goldmann
+credits=L�nderflaggen von Freepik auf https://www.flaticon.com\nVerwendete Schriftarten: OpenSans\nVerwendete Bibliotheken:\ngson 2.8.1\njoda-time 2.9.7\nitextpdf 5.0.6\nlaunch4j-maven-plugin 1.7.21\nspark-core 2.5.4\nslf4j 1.7.21\nmysql-connector 6.0.5\njunit 4.12\nsqlite-jdbc 3.21.0
+
+folder=Deadlocker/BudgetMaster
+roadmap.url=https://deadlocker.thecodelabs.de/roadmap/php/index.php?id=1
+github.url=https://github.com/deadlocker8/BudgetMaster
+
+
+# TITLE
+title.incomes=Einnahmen
+title.income=Einnahme
+title.payments=Ausgaben
+title.payment=Ausgabe
+title.categories=Kategorien
+title.category=Kategorie
+title.category.budgets=Verbrauch nach Kategorien
+title.amount=Betrag
+title.info=Hinweis
+title.warning=Warnung
+title.error=Fehler
+title.category.new=Neue Kategorie
+title.category.edit=Kategorie bearbeiten
+title.chart.export=Diagramm exportieren
+title.modal=Vorgang l�uft
+title.payment.edit={0} bearbeiten
+title.payment.new=Neue {0}
+title.filter=Filter
+title.search=Suchen
+title.report.save=Bericht speichern
+title.database.export=Datenbank exportieren
+title.database.import=Datenbank importieren
+title.datepicker=Datum w�hlen
+title.tags=Das Tag-Eingabefeld
+
+# LOAD
+load.charts=Lade Diagramme...
+load.data=Lade Daten...
+load.report.tab=Lade Monatsbericht...
+load.report=Der Monatsbericht wird erstellt, bitte warten...
+load.database.export=Die Datenbank wird exportiert, bitte warten...
+load.database.import=Die Datenbank wird importiert, bitte warten...
+load.database.delete=Die Datenbank wird gel�scht, bitte warten...
+load.update=Update wird heruntergeladen, bitte warten...
+load.search=Buchungen werden gesucht, bitte warten...
+load.local.server=Starte lokalen Server, bitte warten...
+load.download.local.server=Lade lokalen Server herunter, bitte warten...
+load.local.server.connect=Verbinde mit lokalem Server, bitte warten...
+load.local.server.retry=Verbinde mit lokalem Server... (Versuch {0}/{1})
+
+# MISC
+category.none=Keine Kategorie
+category.rest=�bertrag
+tooltip.chart.categories={0}\n{1} %\n{2}
+chart.month.line.sum=Summe in {0}
+categories.placeholder=Keine Kategorien verf�gbar
+chart.categories.title.incomes=Einnahmen nach Kategorien
+chart.categories.title.payments=Ausgaben nach Kategorien
+ok=OK
+cancel=Abbrechen
+home.placeholder=Keine Daten verf�gbar
+home.budget=von {0} verbleibend
+payments.placeholder=Keine Daten verf�gbar
+url.placeholder=z.B. https://yourdomain.de
+currency.placeholder=z.B. \u20AC, CHF, $
+trusted.hosts.placeholder=z.B. localhost
+undefined=unbekannt
+tagfield.placeholder=Neuen Tag hier eingeben
+shortcut.dev.console=F12
+local.server.status.ok=Server ist gestartet.
+local.server.status.not.started=Server konnte nicht gestartet werden.
+local.server.action.not.started=Starten
+local.server.status.not.present=Server nicht gefunden.
+local.server.action.not.present=Herunterladen
+local.server.status.incompatible=Server nicht kompatibel.
+local.server.action.incompatible=Aktualisieren
+
+# REPORT
+report.position=Nr.
+report.date=Datum
+report.repeating=Wiederholend
+report.category=Kategorie
+report.name=Name
+report.description=Notiz
+report.tags=Tags
+report.rating=+/-
+report.amount=Betrag
+report.headline=Monatsbericht - {0}
+report.headline.payments.overview=Buchungs�bersicht
+report.sum.total=Einnahmen: {0} / Ausgaben: {1}
+report.sum=Summe: {0}
+report.footer.left=BudgetMaster Monatsbericht
+report.footer.center=Seite {0}
+report.repeating.yes=Ja
+report.repeating.no=Nein
+report.initial.filename=BudgetMaster Monatsbericht - {0}_{1}.pdf
+report.budget=Budget
+report.incomes=Einnahmen: 
+report.payments=Ausgaben: 
+report.budget.rest=Restbudget: 
+
+# MONTH
+month.january=Januar
+month.february=Februar
+month.march=M�rz
+month.april=April
+month.may=Mai
+month.june=Juni
+month.july=Juli
+month.august=August
+month.september=September
+month.october=Oktober
+month.november=November
+month.december=Dezember
+
+# NOTIFICATION
+notification.chart.export=Diagramm erfolgreich exportiert.
+notification.report.save=Bericht erfolgreich gespeichert.
+notification.settings.save=Erfolgreich gespeichert.
+notification.no.update.available=Kein Update verf�gbar.
+
+# INFO
+info.title.category.delete=Kategorie l�schen
+info.text.category.delete=M�chtest du diese Kategorie wirklich unwiderruflich l�schen?
+info.title.payment.delete=Zahlung l�schen
+info.text.payment.delete=M�chtest du diese Zahlung wirklich unwiderruflich l�schen?
+info.text.payment.repeating.delete=Es handelt sich um eine wiederkehrende Zahlung. Welche Zahlungen sollen gel�scht werden?
+info.text.payment.repeating.delete.all=Alle
+info.text.payment.repeating.delete.futures=Alle zuk�nftigen
+info.first.start=Vor der ersten Benutzung musst du deine Serverdaten eingeben.
+info.title.chart.export=Erfolgreich erstellt
+info.text.chart.export=Das Diagramm wurde erfolgreich exportiert.
+info.text.chart.export.open.folder=Ordner �ffnen
+info.text.chart.export.open.chart=Diagramm �ffnen
+info.title.report.save=Erfolgreich erstellt
+info.text.report.save=Der Monatsbericht wurde erfolgreich erstellt.
+info.text.report.save.open.folder=Ordner �ffnen
+info.text.report.save.open.report=Bericht �ffnen
+info.title.database.export=Erfolgreich exportiert
+info.text.database.export=Die Datenbank wurde erfolgreich exportiert.
+info.title.database.import=Erfolgreich importiert
+info.text.database.import=Die Datenbank wurde erfolgreich importiert.
+info.title.database.import.dialog=Datebank importieren
+info.text.database.import.dialog=Soll die Datenbank vor dem Importieren gel�scht werden?
+info.text.database.import.dialog.delete=Ja, Datenbank l�schen
+info.text.database.import.dialog.append=Nein, Daten hinzuf�gen
+info.title.database.delete=Datenbank l�schen
+info.header.text.database.delete=Soll die Datenbank wirklich gel�scht werden?
+info.text.database.delete=Zur Best�tigung gib folgenden Code ein:\t{0}
+info.title.welcome=Willkommen
+info.header.text.welcome=Willkommen beim BudgetMaster
+info.text.welcome.first.start=Dies scheint dein erster Besuch zu sein, da noch keine Einstellungen existieren.\nDamit es losgehen kann, �berlege dir ein Passwort und trage es in das Passwortfeld ein.\n\n(Hinweis: Das Passwort kann sp�ter jederzeit ge�ndert werden.)\n\n
+info.text.welcome.compatibility=Deine Einstellungsdatei ist veraltet und muss aktualisert werden.\nSeit Version v1.3.0 wird ein Passwort ben�tigt, um BudgetMaster zu entsperren. Damit es losgehen kann, �berlege dir ein Passwort und trage es in das Passwortfeld ein.\n\n(Hinweis: Das Passwort kann sp�ter jederzeit ge�ndert werden.)\n\n
+info.title.language.changed=Neustarten
+info.text.language.changed=�nderungen der Sprache werden erst nach einem Neustart des Programms wirksam.
+info.text.language.changed.restart.now=Jetzt neustarten
+info.text.language.changed.restart.later=Sp�ter neustarten
+info.title.update.available=Update verf�gbar
+info.text.update.available=Ein Update ist verf�gbar.\nNeue Version: {0}\n\n
+info.text.update.available.show.changes=�nderungen anzeigen (�ffnet Webbrowser)
+info.text.update.available.show.changes.detailed=(detaillierte Infos auf GitHub.com)
+info.text.update.available.now=Jetzt updaten
+info.title.start.after.update=Update erfolgreich
+info.header.text.start.after.update=BudgetMaster wurde erfolgreich auf Version {0} aktualisiert
+info.text.start.after.update=Hinweis: Der BudgetMasterServer muss manuell von dir geupdated werden, sofern es sich um keinen lokalen Server handelt!
+info.tags=Es erscheinen Vorschl�ge basierend auf bereits verwendeten Tags sobald du zu tippen beginnst.\n\nEnter - F�gt den Inhalt des Eingabefelds als neuen Tag hinzu.\nPfeil nach unten - �ffnet die Vorschl�ge, wenn das Eingabefeld leer ist.
+info.title.shutdown=BudgetMaster beenden
+info.text.shutdown=M�chtest du BudgetMaster wirklich beenden?\nDies kann w�hrend der Ausf�hrung von Aufgaben zu unvorhersebaren Konsequenzen f�hren.
+
+# WARNING
+warning.enddate.before.startdate=Das Enddatum darf zeitlich nicht vor dem Startdatum liegen.
+warning.empty.width.in.pixels=Bitte gib eine Breite in Pixeln an.
+warning.integer.width.in.pixels=Nur ganzahlige Werte sind f�r das Feld Breite erlaubt.
+warning.empty.height.in.pixels=Bitte gib eine H�he in Pixeln an.
+warning.integer.height.in.pixels=Nur ganzahlige Werte sind f�r das Feld H�he erlaubt.
+warning.empty.savepath.chart=W�hle einen Speicherort f�r das Diagramm aus.
+warning.empty.category.name=Das Feld f�r den Namen darf nicht leer sein.
+warning.empty.payment.name=Das Feld f�r den Namen darf nicht leer sein.
+warning.name.character.limit.reached.45=Der Name darf maximal 45 Zeichen lang sein.
+warning.name.character.limit.reached.150=Der Name darf maximal 150 Zeichen lang sein.
+warning.description.character.limit.reached.200=Die Notiz darf maximal 200 Zeichen lang sein.
+warning.tag.character.limit.reached.45=Der Name eines Tags darf maximal 45 Zeichen lang sein.
+warning.payment.amount=Gib eine g�ltige Zahl f�r den Betrag ein.
+warning.empty.payment.date=Bitte w�hle ein Datum aus.
+warning.payment.repeating=Wenn Wiederholung aktiviert ist d�rfen nicht beide Eingabefelder 0 sein.\n(Zur Deaktivierung der Wiederholung einfach die Checkbox abw�hlen)
+warning.empty.secret.client=Das Feld f�r das Client Passwort darf nicht leer sein.
+warning.empty.url=Das Feld f�r die Server URL darf nicht leer sein.
+warning.empty.secret.server=Das Server Passwortfeld darf nicht leer sein.
+warning.empty.currency=Bitte gib deine gew�nschte W�hrung ein.
+warning.wrong.verificationcode=Die Eingabe stimmt nicht mit dem Best�tigungscode �berein.
+warning.empty.password=Bitte gib dein Passwort ein.
+warning.wrong.password=Das Passwort ist nicht korrekt.
+warning.server.version=Die installierte Serverversion (Version: {0}) ist nicht kompatibel mit deinem Client (Version: {1}).\n\nBitte aktualisiere deinen Server:\nSchritt 1: Server stoppen\nSchritt 2: BudgetMasterServer.jar mit aktuellester Version ersetzen\nSchritt 3: Server starten
+warning.empty.year=Bitte gib ein Jahr ein.
+warning.wrong.year=Bitte gib eine g�ltige Jahreszahl ein (4 Ziffern).
+
+# ERROR
+error.unknown.host=Es konnte keine Verbindung mit dem Internet hergestellt werden.
+error.unknown.error=Unbekannter Fehler ({0})
+error.connection.refused=Server nicht erreichbar.
+error.https.hostname.wrong=Der Server verwendet ein selbst signiertes Zertifkat f�r die Verschl�sselung. Aus Sicherheitsgr�nden werden diese Zertifikate standardm��ig blockiert. Wenn du dem Zertifikat trotzdem vertrauen m�chtest, dann f�ge den Hostnamen des Servers zur Liste der vertrauensw�rdigen Hosts in den Einstellungen hinzu.
+error.400=Der Server erhielt eine fehlerhafte Anfrage oder ung�ltige Parameter.
+error.401=Ung�ltiges Server Passwort.
+error.500=Beim Ausf�hren der Anfrage ist ein interner Serverfehler ist aufgetreten.
+error.create.ui=Beim Erstellen der Benutzeroberfl�che ist ein Fehler aufgetreten.
+error.server.connection=Beim Herstellen der Verbindung zum Server ist ein Fehler aufgetreten. Bitte �berpr�fe deine Einstellungen.
+error.server.connection.with.details=Beim Herstellen der Verbindung zum Server ist ein Fehler aufgetreten. Bitte �berpr�fe deine Einstellungen.\n\nFehlerdetails:\n{0}
+error.open.folder=Der Ordner konnte nicht ge�ffnet werden.\n\n{0}
+error.open.chart=Das Diagramm konnte nicht ge�ffnet werden.\n\n{0}
+error.open.report=Der Bericht konnte nicht ge�ffnet werden.\n\n{0}
+error.chart.export=Beim Exportieren des Diagramms ist ein Fehler aufgetreten:\n\n{0}
+error.report.save=Beim Erstellen des Monatsberichts ist ein Fehler aufgetreten:\n\n{0}
+error.settings.save=Beim Speichern der Einstellungen ist ein Fehler aufgetreten.
+error.database.import=Beim Einlesen der Datei ist ein Fehler aufgetreten.
+error.database.import.wrong.file=Die angegebene Datei enth�lt kein g�ltiges BudgetMaster-Datenformat und kann daher nicht importiert werden.
+error.password.save=Beim Speichern des Passworts ist ein Fehler aufgetreten.
+error.updater.get.latest.version=Beim �berpr�fen auf Updates ist ein Fehler aufgetreten. Informationen zu neuen Versionen konnten nicht abgerufen werden. Versuche es sp�ter noch einmal.
+error.updater.download.latest.version=Beim Herunterladen des Updates ist ein Fehler aufgetreten.\n\n{0}
+error.open.browser=Beim �ffnen des Standardwebbrowsers ist ein Fehler aufgetreten.
+error.local.server.start=Beim Starten des BudgetMasterServers ist ein Fehler aufgetreten.\n\n{0}
+error.local.server.download=Beim Herunterladen des BudgetMasterServers ist ein Fehler aufgetreten.\n\n{0}
+
+# UI
+categorytab.button.category.new=\ Neue Kategorie
+
+charttab.titlepane.chart.categories=Einnahmen/Ausgaben nach Kategorien
+charttab.titlepane.chart.months=Einnahmen/Ausgaben pro Monat
+charttab.label.start=Von:
+charttab.label.end=Bis:
+charttab.checkbox.bars=Balken
+charttab.checkbox.lines=Linien
+
+export.chart.label.width=Breite:
+export.chart.label.height=H�he:
+export.chart.label.savepath=Speicherort:
+export.chart.button.change=�ndern
+export.chart.button.export=Exportieren
+
+filter.headline=Filtern nach:
+filter.type=Art
+filter.type.income=Einnahme
+filter.type.payment=Ausgabe
+filter.repeating=Wiederholung
+filter.repeating.none=keine
+filter.repeating.monthday=monatlich
+filter.repeating.interval=alle X Tage
+filter.categories=Kategorien
+filter.categories.button.all=Alle
+filter.categories.button.none=Keine
+filter.name=Name
+filter.tags=Tags
+filter.tags.button.all=Alle
+filter.tags.button.none=Keine
+filter.button.reset=Zur�cksetzen
+filter.button.filter=Filtern
+
+search.headline=Nach Buchungen suchen
+search.by=Suchen in:
+search.by.name=Name
+search.by.description=Notiz
+search.by.category.name=Kategoriename
+search.by.tags=Tags
+search.by.amount=Betrag eingrenzen
+search.button.search=Suchen
+
+gui.tab.home=Startseite
+gui.tab.payments=Buchungen
+gui.tab.categories=Kategorien
+gui.tab.charts=Diagramme
+gui.tab.report=Monatsbericht
+gui.tab.settings=Einstellungen
+
+hometab.categorybudgets=Verbrauch nach Kategorien
+
+category.new.label.name=Name:
+category.new.label.max.characters=(max. 45 Zeichen)
+category.new.label.color=Farbe:
+category.new.button.save=Speichern
+
+payment.new.label.name=Name:
+payment.new.label.max.characters.name=(max. 150 Zeichen)
+payment.new.label.max.characters.description=(max. 200 Zeichen)
+payment.new.label.amount=Betrag:
+payment.new.label.category=Kategorie:
+payment.new.label.date=Datum:
+payment.new.label.description=Notiz:
+payment.new.label.tags=Tags:
+payment.new.label.repeating=Wiederholung:
+payment.new.label.repeating.all=Alle
+payment.new.label.repeating.days=Tage
+payment.new.label.repeating.monthday=jeden Monat am:
+payment.new.label.enddate=Enddatum:
+payment.new.button.save=Speichern
+
+paymenttab.button.new.income=\ Neue Einnahme
+paymenttab.button.new.payment=\ Neue Ausgabe
+paymenttab.button.filter=Filter
+paymenttab.label.filter.active=Filter aktiv
+paymenttab.label.incomes=Einnahmen:
+paymenttab.label.payments=Ausgaben:
+paymenttab.button.search=Suchen
+
+reporttab.checkbox.include.budget=Budgetkalkulation hinzuf�gen
+reporttab.checkbox.split.tables=Einnahmen und Ausgaben als getrennte Tabellen
+reporttab.checkbox.inclue.categorybudgets=Verbrauch nach Kategorien hinzuf�gen
+reporttab.button.generate.report=Bericht erzeugen
+
+settingstab.label.secret.client=Client Passwort:
+settingstab.label.status=Status:
+settingstab.label.url=Server URL:
+settingstab.label.secret.server=Server Passwort:
+settingstab.label.currency=W�hrung:
+settingstab.label.rest=�bertrag:
+settingstab.label.rest.activated=aktiviert
+settingstab.label.rest.deactivated=deaktiviert
+settingstab.label.trusted.hosts=Vertrauensw�rdige Hosts:
+settingstab.label.trusted.hosts.info=(ein Host pro Zeile)
+settingstab.label.language=Sprache:
+settingstab.label.database=Datenbank:
+settingstab.button.database.export=Exportieren
+settingstab.button.database.import=Importieren
+settingstab.button.database.delete=L�schen
+settingstab.label.updates=Updates:
+settingstab.button.updates.search=Suchen
+settingstab.button.updates.automatic=Automatisch suchen
+settingstab.label.updates.current.version=Installiert:
+settingstab.label.updates.latest.version=Verf�gbar:
+settingstab.button.save=Speichern
+settingstab.button.server.online=Online Server
+settingstab.button.server.local=Lokaler Server
+
+splashscreen.label.password=Passwort:
+
+datepicker.label.month=Monat:
+datepicker.label.year=Jahr:
+datepicker.button.confirm=�bernehmen
+
+# ABOUT
+about=�ber {0}
+about.roadmap.link=Roadmap �ffnen
+about.version=Version:
+about.date=Datum:
+about.author=Autor:
+about.roadmap=Roadmap:
+about.sourcecode=Quellcode:
+about.credits=Credits:
diff --git a/src/main/resources/de/deadlocker8/budgetmaster/languages/_en.properties b/src/main/resources/de/deadlocker8/budgetmaster/languages/_en.properties
new file mode 100644
index 000000000..4157b60f9
--- /dev/null
+++ b/src/main/resources/de/deadlocker8/budgetmaster/languages/_en.properties
@@ -0,0 +1,350 @@
+# DEFAULT
+app.name=BudgetMaster
+version.code=13
+version.name=1.8.0
+version.date=17.12.17
+author=Robert Goldmann
+credits=Flags by Freepik on https://www.flaticon.com\nFonts used: OpenSans\nLibraries used:\ngson 2.8.1\njoda-time 2.9.7\nitextpdf 5.0.6\nlaunch4j-maven-plugin 1.7.21\nspark-core 2.5.4\nslf4j 1.7.21\nmysql-connector 6.0.5\njunit 4.12\nsqlite-jdbc 3.21.0
+
+folder=Deadlocker/BudgetMaster
+roadmap.url=https://deadlocker.thecodelabs.de/roadmap/php/index.php?id=2
+github.url=https://github.com/deadlocker8/BudgetMaster
+
+
+# TITLE
+title.incomes=Incomes
+title.income=Income
+title.payments=Payments
+title.payment=Payment
+title.categories=Categories
+title.category=Category
+title.category.budgets=Consumption by categories
+title.amount=Amount
+title.info=Information
+title.warning=Warning
+title.error=Error
+title.category.new=New Category
+title.category.edit=Edit Category
+title.chart.export=Export Chart
+title.modal=Process is running
+title.payment.edit=Edit {0}
+title.payment.new=New {0}
+title.filter=Filter
+title.search=Search
+title.report.save=Save Report
+title.database.export=Export Database
+title.database.import=Import Database
+title.datepicker=Choose date
+title.tags=The Tag-Inputfield
+
+# LOAD
+load.charts=Loading Charts...
+load.data=Loading Data...
+load.report.tab=Loading Month Report...
+load.report=Please wait while the report is being generated...
+load.database.export=Please wait while the database is being exported...
+load.database.import=Please wait while the database is being imported...
+load.database.delete=Please wait while the database is being deleted...
+load.update=Please wait while the update is being downloaded...
+load.search=Please wait while payments are being searched...
+load.local.server=Please wait while the local server is being started...
+load.download.local.server=Please wait while the local server is being downloaded...
+load.local.server.connect=Connecting to local server...
+load.local.server.retry=Connecting to local server... (Retry {0}/{1})
+
+# MISC
+category.none=No Category
+category.rest=Rest
+tooltip.chart.categories={0}\n{1} %\n{2}
+chart.month.line.sum=Total in {0}
+categories.placeholder=No categories available
+chart.categories.title.incomes=Incomes by Categories
+chart.categories.title.payments=Payments by Categories
+ok=OK
+cancel=Cancel
+home.placeholder=No data available
+home.budget=of {0} remaining
+payments.placeholder=No data available
+url.placeholder=e.g. https://yourdomain.de
+currency.placeholder=e.g. \u20AC, CHF, $
+trusted.hosts.placeholder=e.g. localhost
+undefined=undefined
+tagfield.placeholder=Enter new Tag here
+shortcut.dev.console=F12
+local.server.status.ok=Server is running.
+local.server.status.not.started=Server couldn't be started.
+local.server.action.not.started=Start
+local.server.status.not.present=Server not found.
+local.server.action.not.present=Download
+local.server.status.incompatible=Server is incompatible.
+local.server.action.incompatible=Update
+
+# REPORT
+report.position=No.
+report.date=Date
+report.repeating=Repeating
+report.category=Category
+report.name=Name
+report.description=Description
+report.tags=Tags
+report.rating=+/-
+report.amount=Amount
+report.headline=Month Report - {0}
+report.headline.payments.overview=Payments Overview
+report.sum.total=Incomes: {0} / Payments: {1}
+report.sum=Total: {0}
+report.footer.left=BudgetMaster Month Report
+report.footer.center=Page {0}
+report.repeating.yes=Yes
+report.repeating.no=No
+report.initial.filename=BudgetMaster Month Report - {0}_{1}.pdf
+report.budget=Budget
+report.incomes=Incomes: 
+report.payments=Payments: 
+report.budget.rest=Remaining Budget: 
+
+# MONTH
+month.january=January
+month.february=February
+month.march=March
+month.april=April
+month.may=May
+month.june=June
+month.july=July
+month.august=August
+month.september=September
+month.october=October
+month.november=November
+month.december=December
+
+# NOTIFICATION
+notification.chart.export=Chart successfully exported.
+notification.report.save=Report successfully saved.
+notification.settings.save=Successfully saved.
+notification.no.update.available=No update available.
+
+# INFO
+info.title.category.delete=Delete Category
+info.text.category.delete=Do you really want to delete this category? This can't be undone.
+info.title.payment.delete=Delete Entry
+info.text.payment.delete=Do you really want to delete this entry? This can't be undone.
+info.text.payment.repeating.delete=The entry you want to delete is a repeating entry. What entries should be deleted?
+info.text.payment.repeating.delete.all=All Entries
+info.text.payment.repeating.delete.futures=Future Entries
+info.first.start=You must enter your server settings prior to first use.
+info.title.chart.export=Successfully Exported
+info.text.chart.export=The chart has been successfully exported.
+info.text.chart.export.open.folder=Open Folder
+info.text.chart.export.open.chart=Open Chart
+info.title.report.save=Successfully Created
+info.text.report.save=The month report has been successfully created.
+info.text.report.save.open.folder=Open Folder
+info.text.report.save.open.report=Open Report
+info.title.database.export=Successfully Exported
+info.text.database.export=The database has been successfully exported.
+info.title.database.import=Successfully Imported
+info.text.database.import=The database has been successfully imported.
+info.title.database.import.dialog=Import Database
+info.text.database.import.dialog=Do you want to delete the database before importing?
+info.text.database.import.dialog.delete=Yes, delete database
+info.text.database.import.dialog.append=No, append data
+info.title.database.delete=Delete Database
+info.header.text.database.delete=Do you really want to delete this entry? This can't be undone.
+info.text.database.delete=Please enter the following code for verification:\t{0}
+info.title.welcome=Welcome
+info.header.text.welcome=Welcome to BudgetMaster
+info.text.welcome.first.start=This seems to be your first visit because there are no settings yet.\nTo enter BudgetMaster consider yourself a password and enter it into the password field.\n\n(Note: the password can be changed at any time.)\n\n
+info.text.welcome.compatibility=Your settings file is deprecated and needs to be updated.\nSince version v1.3.0, a password is required to unlock BudgetMaster. To enter BudgetMaster consider yourself a password and enter it into the password field.\n\n(Please note that the password can be changed at any time.)\n\n
+info.title.language.changed=Restart
+info.text.language.changed=Changes to the language will only take effect after a restart of the program.
+info.text.language.changed.restart.now=Restart Now
+info.text.language.changed.restart.later=Restart Later
+info.title.update.available=Update available
+info.text.update.available=An update is available.\nNew version: {0}\n\n
+info.text.update.available.show.changes=Show Changes (opens web browsers)
+info.text.update.available.show.changes.detailed=(detailed information on GitHub.com)
+info.text.update.available.now=Update Now
+info.title.start.after.update=Update successful
+info.header.text.start.after.update=Successfully updated BudgetMaster to version {0}
+info.text.start.after.update=Note: You have to update the BudgetMasterServer manually, if it's no local server!
+info.tags=Suggestions based on already used tags will show up once you start typing.\n\nEnter - Appends the current input field content as a new tag.\nArrow Down - Opens the suggestions if the input field is empty.
+info.title.shutdown=Shutdown BudgetMaster
+info.text.shutdown=Do you really want to shutdown BudgetMaster? This could lead to unforeseen consequences during running tasks.
+
+# WARNING
+warning.enddate.before.startdate=The end date can not be earlier than the start date.
+warning.empty.width.in.pixels=Please enter a width in pixels.
+warning.integer.width.in.pixels=Only integer values are allowed for the width field.
+warning.empty.height.in.pixels=Please enter a height in pixels.
+warning.integer.height.in.pixels=Only integer values are allowed for the height field.
+warning.empty.savepath.chart=Please select a location where you want to save the chart.
+warning.empty.category.name=The field for the name can not be empty.
+warning.empty.payment.name=The field for the name can not be empty.
+warning.name.character.limit.reached.45=The name must not exceed 45 characters in length.
+warning.name.character.limit.reached.150=The name must not exceed 150 characters in length.
+warning.description.character.limit.reached.200=The description must not exceed 200 characters in length.
+warning.tag.character.limit.reached.45=A tag name must not exceed 45 characters in length.
+warning.payment.amount=Please enter a valid number in the amount field.
+warning.empty.payment.date=Please select a date.
+warning.payment.repeating=If repeating is activated, both input fields may not be 0.\n(To deactivate the repeat, simply deselect the checkbox).
+warning.empty.secret.client=The field for the client password can not be empty.
+warning.empty.url=The field for the server URL can not be empty.
+warning.empty.secret.server=The field for the server password can not be empty.
+warning.empty.currency=Please enter your desired currency.
+warning.wrong.verificationcode=The input does not match the verification code.
+warning.empty.password=Please enter your password.
+warning.wrong.password=The password is not correct.
+warning.server.version=The installed server version (version: {0}) is not compatible with your client (version: {1}).\n\nPlease update your server:\nStep 1: stop server\nStep 2: replace BudgetMasterServer.jar with latest version\nStep 3: start server
+warning.empty.year=Please enter a year.
+warning.wrong.year=Please enter a valid year (4 digits).
+
+# ERROR
+error.unknown.host=Could not connect to the Internet.
+error.unknown.error=Unknown Error ({0})
+error.connection.refused=Server not available.
+error.https.hostname.wrong=The server uses a self-signed certifier for encryption. For security reasons, these certificates are blocked by default. If you want to trust the certificate, add the hostname of the server to the list of trusted hosts in the settings.
+error.400=The server received a bad request or invalid parameters.
+error.401=Invalid Server Password.
+error.500=An internal server error occurred while processing the request.
+error.create.ui=An error occurred while creating the user interface.
+error.server.connection=An error occurred while connecting to the server. Please check your settings.
+error.server.connection.with.details=An error occurred while connecting to the server. Please check your settings.\n\nError details:\n{0}
+error.open.folder=The folder couldn't be opened.\n\n{0}
+error.open.chart=The chart couldn't be opened.\n\n{0}
+error.open.report=The report couldn't be opened.\n\n{0}
+error.chart.export=An error occurred while exporting the chart:\n\n{0}
+error.report.save=An error occurred while creating the month report:\n\n{0}
+error.settings.save=An error occurred while saving the settings.
+error.database.import=An error occurred while reading the file.
+error.database.import.wrong.file=The specified file does not contain a valid BudgetMaster data format thus can not be imported.
+error.password.save=An error occurred while saving the password.
+error.updater.get.latest.version=An error occurred while checking for updates. Information about latest versions could not be retrieved. Please try again later.
+error.updater.download.latest.version=An error occurred while downloading the update.\n\n{0}
+error.open.browser=An error occurred while opening the default web browser.
+error.local.server.start=An error occurred while starting the BudgetMasterServer.\n\n{0}
+error.local.server.download=An error occurred while downloading the BudgetMasterServer.\n\n{0}
+
+# UI
+categorytab.button.category.new=\ New Category
+
+charttab.titlepane.chart.categories=Incomes/Payments by Categories
+charttab.titlepane.chart.months=Incomes/Payments per Month
+charttab.label.start=From:
+charttab.label.end=To:
+charttab.checkbox.bars=Bars
+charttab.checkbox.lines=Lines
+
+export.chart.label.width=Width:
+export.chart.label.height=Height:
+export.chart.label.savepath=Location:
+export.chart.button.change=Change
+export.chart.button.export=Export
+
+filter.headline=Filter by:
+filter.type=Type
+filter.type.income=Income
+filter.type.payment=Payment
+filter.repeating=Repeating
+filter.repeating.none=none
+filter.repeating.monthday=monthly
+filter.repeating.interval=every X days
+filter.categories=Categories
+filter.categories.button.all=All
+filter.categories.button.none=None
+filter.name=Name
+filter.tags=Tags
+filter.tags.button.all=All
+filter.tags.button.none=None
+filter.button.reset=Reset
+filter.button.filter=Filter
+
+search.headline=Search for payments
+search.by=Search in:
+search.by.name=Name
+search.by.description=Description
+search.by.tags=Tags
+search.by.category.name=Category Name
+search.by.amount=Limit Amount
+search.button.search=Search
+
+gui.tab.home=Home
+gui.tab.payments=Payments
+gui.tab.categories=Categories
+gui.tab.charts=Charts
+gui.tab.report=Month Report
+gui.tab.settings=Settings
+
+hometab.categorybudgets=Consumption by categories
+
+category.new.label.name=Name:
+category.new.label.max.characters=(up to 45 characters)
+category.new.label.color=Color:
+category.new.button.save=Save
+
+payment.new.label.name=Name:
+payment.new.label.max.characters.name=(up to 150 characters)
+payment.new.label.max.characters.description=(up to 200 characters)
+payment.new.label.amount=Amount:
+payment.new.label.category=Category:
+payment.new.label.date=Date:
+payment.new.label.description=Description:
+payment.new.label.tags=Tags:
+payment.new.label.repeating=Repeating:
+payment.new.label.repeating.all=every
+payment.new.label.repeating.days=days
+payment.new.label.repeating.monthday=every month at:
+payment.new.label.enddate=Enddate:
+payment.new.button.save=Save
+
+paymenttab.button.new.income=\ New Income
+paymenttab.button.new.payment=\ New Payment
+paymenttab.button.filter=Filter
+paymenttab.label.filter.active=Filter active
+paymenttab.label.incomes=Incomes:
+paymenttab.label.payments=Payments:
+paymenttab.button.search=Search
+
+reporttab.checkbox.include.budget=Include budget calculation
+reporttab.checkbox.split.tables=Split incomes and payments into separate tables
+reporttab.checkbox.inclue.categorybudgets=Include consumption by categories
+reporttab.button.generate.report=Create Report
+
+settingstab.label.secret.client=Client Password:
+settingstab.label.status=Status:
+settingstab.label.url=Server URL:
+settingstab.label.secret.server=Server Password:
+settingstab.label.currency=Currency:
+settingstab.label.rest=Rest:
+settingstab.label.rest.activated=activated
+settingstab.label.rest.deactivated=deactivated
+settingstab.label.trusted.hosts=Trusted Hosts:
+settingstab.label.trusted.hosts.info=(one per line)
+settingstab.label.language=Language:
+settingstab.label.database=Database:
+settingstab.button.database.export=Export
+settingstab.button.database.import=Import
+settingstab.button.database.delete=Delete
+settingstab.label.updates=Updates:
+settingstab.button.updates.search=Search
+settingstab.button.updates.automatic=Automatic search
+settingstab.label.updates.current.version=Current Version:
+settingstab.label.updates.latest.version=Latest Version:
+settingstab.button.save=Save
+settingstab.button.server.online=Online Server
+settingstab.button.server.local=Local Server
+
+splashscreen.label.password=Password:
+
+datepicker.label.month=Month:
+datepicker.label.year=Year:
+datepicker.button.confirm=Apply
+
+# ABOUT
+about=About {0}
+about.roadmap.link=Open Roadmap
+about.version=Version:
+about.date=Date:
+about.author=Author:
+about.roadmap=Roadmap:
+about.sourcecode=Sourcecode:
+about.credits=Credits:
\ No newline at end of file
-- 
GitLab