From fa1000b6a5e41f9e1e3a6ce867146d11c57066d2 Mon Sep 17 00:00:00 2001
From: Robert Goldmann <deadlocker@gmx.de>
Date: Sun, 4 Mar 2018 16:04:07 +0100
Subject: [PATCH] #286 - localized category page

---
 .../advices/LocalizationAdvice.java           | 22 +++++++++++++++++++
 .../controller/CategoryController.java        |  2 ++
 src/main/resources/languages/_de.properties   |  6 ++---
 src/main/resources/languages/_en.properties   |  6 ++---
 src/main/resources/templates/newCategory.ftl  | 13 ++++++-----
 5 files changed, 35 insertions(+), 14 deletions(-)
 create mode 100644 src/main/java/de/deadlocker8/budgetmaster/advices/LocalizationAdvice.java

diff --git a/src/main/java/de/deadlocker8/budgetmaster/advices/LocalizationAdvice.java b/src/main/java/de/deadlocker8/budgetmaster/advices/LocalizationAdvice.java
new file mode 100644
index 000000000..8f729fc1b
--- /dev/null
+++ b/src/main/java/de/deadlocker8/budgetmaster/advices/LocalizationAdvice.java
@@ -0,0 +1,22 @@
+package de.deadlocker8.budgetmaster.advices;
+
+import freemarker.ext.beans.BeansWrapper;
+import freemarker.ext.beans.BeansWrapperBuilder;
+import freemarker.template.Configuration;
+import freemarker.template.TemplateHashModel;
+import org.springframework.web.bind.annotation.ControllerAdvice;
+import org.springframework.web.bind.annotation.ModelAttribute;
+
+@ControllerAdvice
+public class LocalizationAdvice
+{
+	@ModelAttribute("localization")
+	public TemplateHashModel getLocalization()
+	{
+		BeansWrapperBuilder builder = new BeansWrapperBuilder(Configuration.VERSION_2_3_27);
+		builder.setUseModelCache(true);
+		builder.setExposeFields(true);
+		BeansWrapper beansWrapper = builder.build();
+		return beansWrapper.getStaticModels();
+	}
+}
\ No newline at end of file
diff --git a/src/main/java/de/deadlocker8/budgetmaster/controller/CategoryController.java b/src/main/java/de/deadlocker8/budgetmaster/controller/CategoryController.java
index 72751fe4f..a0d571eb4 100644
--- a/src/main/java/de/deadlocker8/budgetmaster/controller/CategoryController.java
+++ b/src/main/java/de/deadlocker8/budgetmaster/controller/CategoryController.java
@@ -5,6 +5,8 @@ import de.deadlocker8.budgetmaster.entities.Category;
 import de.deadlocker8.budgetmaster.entities.CategoryType;
 import de.deadlocker8.budgetmaster.repositories.CategoryRepository;
 import de.deadlocker8.budgetmaster.utils.*;
+import freemarker.ext.beans.BeansWrapper;
+import freemarker.template.TemplateHashModel;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.stereotype.Controller;
diff --git a/src/main/resources/languages/_de.properties b/src/main/resources/languages/_de.properties
index 9a2526145..d9d3cdd54 100644
--- a/src/main/resources/languages/_de.properties
+++ b/src/main/resources/languages/_de.properties
@@ -62,6 +62,7 @@ chart.categories.title.incomes=Einnahmen nach Kategorien
 chart.categories.title.payments=Ausgaben nach Kategorien
 ok=OK
 cancel=Abbrechen
+save=Speichern
 home.placeholder=Keine Daten verf�gbar
 home.budget=von {0} verbleibend
 payments.placeholder=Keine Daten verf�gbar
@@ -277,10 +278,7 @@ 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
+category.new.label.name=Name
 
 payment.new.label.name=Name:
 payment.new.label.max.characters.name=(max. 150 Zeichen)
diff --git a/src/main/resources/languages/_en.properties b/src/main/resources/languages/_en.properties
index 8788efcc8..3cbfdd148 100644
--- a/src/main/resources/languages/_en.properties
+++ b/src/main/resources/languages/_en.properties
@@ -62,6 +62,7 @@ chart.categories.title.incomes=Incomes by Categories
 chart.categories.title.payments=Payments by Categories
 ok=OK
 cancel=Cancel
+save=Save
 home.placeholder=No data available
 home.budget=of {0} remaining
 payments.placeholder=No data available
@@ -277,10 +278,7 @@ 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
+category.new.label.name=Name
 
 payment.new.label.name=Name:
 payment.new.label.max.characters.name=(up to 150 characters)
diff --git a/src/main/resources/templates/newCategory.ftl b/src/main/resources/templates/newCategory.ftl
index f2fef9342..24360fbb7 100644
--- a/src/main/resources/templates/newCategory.ftl
+++ b/src/main/resources/templates/newCategory.ftl
@@ -8,6 +8,7 @@
         <link type="text/css" rel="stylesheet" href="/css/style.css"/>
         <link type="text/css" rel="stylesheet" href="/css/categories.css"/>
         <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+        <#assign locale = localization["tools.Localization"]>
     </head>
     <body class="budgetmaster-blue-light">
         <ul id="slide-out" class="side-nav fixed">
@@ -46,7 +47,7 @@
             <div class="card main-card">
                 <div class="container">
                     <div class="section center-align">
-                        <div class="grey-text text-darken-4 headline"><#if model["category"].getID()??>Kategorie bearbeiten<#else>Neue Kategorie</#if></div>
+                        <div class="grey-text text-darken-4 headline"><#if model["category"].getID()??>${locale.getString("title.category.edit")}<#else>${locale.getString("title.category.new")}</#if></div>
                     </div>
                 </div>
                 <div class="container">
@@ -54,7 +55,7 @@
                         <div class="row">
                             <div class="input-field col s12 m12 l8 offset-l2">
                                 <input id="category-name" type="text" name="name" value="<#if model["category"].getName()??>${model["category"].getName()}</#if>">
-                                <label for="category-name">Name</label>
+                                <label for="category-name">${locale.getString("category.new.label.name")}</label>
                             </div>
                         </div>
                         <input type="hidden" name="color" id="categoryColor" value="${model["category"].getColor()}">
@@ -85,25 +86,25 @@
                         <br>
                         <div class="row hide-on-small-only">
                             <div class="col m6 l4 offset-l2 right-align">
-                                <a href="/categories" class="waves-effect waves-light btn budgetmaster-blue"><i class="material-icons left">clear</i>Abbrechen</a>
+                                <a href="/categories" class="waves-effect waves-light btn budgetmaster-blue"><i class="material-icons left">clear</i>${locale.getString("cancel")}</a>
                             </div>
 
                             <div class="col m6 l4 left-align">
                                 <button class="btn waves-effect waves-light budgetmaster-blue" type="submit" name="action">
-                                    <i class="material-icons left">save</i>Speichern
+                                    <i class="material-icons left">save</i>${locale.getString("save")}
                                 </button>
                             </div>
                         </div>
                         <div class="hide-on-med-and-up">
                             <div class="row center-align">
                                 <div class="col s12">
-                                    <a href="/categories" class="waves-effect waves-light btn budgetmaster-blue"><i class="material-icons left">clear</i>Abbrechen</a>
+                                    <a href="/categories" class="waves-effect waves-light btn budgetmaster-blue"><i class="material-icons left">clear</i>${locale.getString("cancel")}</a>
                                 </div>
                             </div>
                             <div class="row center-align">
                                 <div class="col s12">
                                     <button class="btn waves-effect waves-light budgetmaster-blue" type="submit" name="buttonSave">
-                                        <i class="material-icons left">save</i>Speichern
+                                        <i class="material-icons left">save</i>${locale.getString("save")}
                                     </button>
                                 </div>
                             </div>
-- 
GitLab