From abc434d1ec52bc4f7bd9bc212860eb46e65f8019 Mon Sep 17 00:00:00 2001
From: Robert Goldmann <deadlocker@gmx.de>
Date: Sun, 18 Oct 2020 13:03:12 +0200
Subject: [PATCH] #537 - display localized news: - split localization in base
 and news

---
 .../de/deadlocker8/budgetmaster/Main.java     | 10 ++++-
 .../controller/AboutController.java           | 11 +++++
 .../budgetmaster/controller/NewsEntry.java    | 39 ++++++++++++++++++
 .../services/LocalizationService.java         | 10 ++++-
 .../{_de.properties => base_de.properties}    |  0
 .../{_en.properties => base_en.properties}    |  0
 .../resources/languages/news_de.properties    | 14 +++++++
 .../resources/languages/news_en.properties    | 14 +++++++
 .../resources/templates/whatsNewModal.ftl     | 40 ++++---------------
 9 files changed, 101 insertions(+), 37 deletions(-)
 create mode 100644 src/main/java/de/deadlocker8/budgetmaster/controller/NewsEntry.java
 rename src/main/resources/languages/{_de.properties => base_de.properties} (100%)
 rename src/main/resources/languages/{_en.properties => base_en.properties} (100%)
 create mode 100644 src/main/resources/languages/news_de.properties
 create mode 100644 src/main/resources/languages/news_en.properties

diff --git a/src/main/java/de/deadlocker8/budgetmaster/Main.java b/src/main/java/de/deadlocker8/budgetmaster/Main.java
index 510847955..65a80695a 100644
--- a/src/main/java/de/deadlocker8/budgetmaster/Main.java
+++ b/src/main/java/de/deadlocker8/budgetmaster/Main.java
@@ -48,9 +48,9 @@ public class Main extends SpringBootServletInitializer implements ApplicationRun
 			}
 
 			@Override
-			public String getBaseResource()
+			public String[] getBaseResources()
 			{
-				return "languages/";
+				return new String[]{"languages/base", "languages/news"};
 			}
 
 			@Override
@@ -58,6 +58,12 @@ public class Main extends SpringBootServletInitializer implements ApplicationRun
 			{
 				return new JavaMessageFormatter();
 			}
+
+			@Override
+			public boolean useMultipleResourceBundles()
+			{
+				return true;
+			}
 		});
 		Localization.load();
 
diff --git a/src/main/java/de/deadlocker8/budgetmaster/controller/AboutController.java b/src/main/java/de/deadlocker8/budgetmaster/controller/AboutController.java
index d5e85325b..888454abd 100644
--- a/src/main/java/de/deadlocker8/budgetmaster/controller/AboutController.java
+++ b/src/main/java/de/deadlocker8/budgetmaster/controller/AboutController.java
@@ -8,6 +8,9 @@ import org.springframework.ui.Model;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 
+import java.util.ArrayList;
+import java.util.List;
+
 
 @Controller
 @RequestMapping(Mappings.ABOUT)
@@ -31,6 +34,14 @@ public class AboutController extends BaseController
 	@GetMapping("/whatsNewModal")
 	public String fromTransactionModal(Model model)
 	{
+		final List<NewsEntry> newsEntries =  new ArrayList<>();
+		newsEntries.add(NewsEntry.createWithLocalizationKeys("news.templates.headline", "news.templates.description"));
+		newsEntries.add(NewsEntry.createWithLocalizationKeys("news.backup.headline", "news.backup.description"));
+		newsEntries.add(NewsEntry.createWithLocalizationKeys("news.suggestions.headline", "news.suggestions.description"));
+		newsEntries.add(NewsEntry.createWithLocalizationKeys("news.charts.headline", "news.charts.description"));
+		newsEntries.add(NewsEntry.createWithLocalizationKeys("news.commandline.headline", "news.commandline.description"));
+
+		model.addAttribute("newsEntries", newsEntries);
 		return "whatsNewModal";
 	}
 }
\ No newline at end of file
diff --git a/src/main/java/de/deadlocker8/budgetmaster/controller/NewsEntry.java b/src/main/java/de/deadlocker8/budgetmaster/controller/NewsEntry.java
new file mode 100644
index 000000000..c7ed16289
--- /dev/null
+++ b/src/main/java/de/deadlocker8/budgetmaster/controller/NewsEntry.java
@@ -0,0 +1,39 @@
+package de.deadlocker8.budgetmaster.controller;
+
+import de.thecodelabs.utils.util.Localization;
+
+public class NewsEntry
+{
+	private String headline;
+	private String description;
+
+	public NewsEntry(String headline, String description)
+	{
+		this.headline = headline;
+		this.description = description;
+	}
+
+	public static NewsEntry createWithLocalizationKeys(String headlineKey, String descriptionKey)
+	{
+		return new NewsEntry(Localization.getString(headlineKey), Localization.getString(descriptionKey));
+	}
+
+	public String getHeadline()
+	{
+		return headline;
+	}
+
+	public String getDescription()
+	{
+		return description;
+	}
+
+	@Override
+	public String toString()
+	{
+		return "NewsEntry{" +
+				"headline='" + headline + '\'' +
+				", description='" + description + '\'' +
+				'}';
+	}
+}
diff --git a/src/main/java/de/deadlocker8/budgetmaster/services/LocalizationService.java b/src/main/java/de/deadlocker8/budgetmaster/services/LocalizationService.java
index 4b2c3326f..b17f89124 100644
--- a/src/main/java/de/deadlocker8/budgetmaster/services/LocalizationService.java
+++ b/src/main/java/de/deadlocker8/budgetmaster/services/LocalizationService.java
@@ -30,9 +30,9 @@ public class LocalizationService implements  Localization.LocalizationDelegate
 	}
 
 	@Override
-	public String getBaseResource()
+	public String[] getBaseResources()
 	{
-		return "languages/";
+		return new String[]{"languages/base", "languages/news"};
 	}
 
 	@Override
@@ -40,4 +40,10 @@ public class LocalizationService implements  Localization.LocalizationDelegate
 	{
 		return new JavaMessageFormatter();
 	}
+
+	@Override
+	public boolean useMultipleResourceBundles()
+	{
+		return true;
+	}
 }
\ No newline at end of file
diff --git a/src/main/resources/languages/_de.properties b/src/main/resources/languages/base_de.properties
similarity index 100%
rename from src/main/resources/languages/_de.properties
rename to src/main/resources/languages/base_de.properties
diff --git a/src/main/resources/languages/_en.properties b/src/main/resources/languages/base_en.properties
similarity index 100%
rename from src/main/resources/languages/_en.properties
rename to src/main/resources/languages/base_en.properties
diff --git a/src/main/resources/languages/news_de.properties b/src/main/resources/languages/news_de.properties
new file mode 100644
index 000000000..914328658
--- /dev/null
+++ b/src/main/resources/languages/news_de.properties
@@ -0,0 +1,14 @@
+news.templates.headline=Transaction templates
+news.templates.description=Allows the creation of templates for similar transactions.
+
+news.backup.headline=Auto backup
+news.backup.description=Allows the scheduling of automatic BudgetMaster data backups.
+
+news.suggestions.headline=Transaction name suggestions
+news.suggestions.description=Shows suggestions based on the last 25 created transactions.
+
+news.charts.headline=New charts
+news.charts.description=Two new default charts (income/expenditures per year and rest per month).
+
+news.commandline.headline=Command line option to set custom directory
+news.commandline.description=Specify a folder where settings, database and backups are stored (more details in the wiki).
\ No newline at end of file
diff --git a/src/main/resources/languages/news_en.properties b/src/main/resources/languages/news_en.properties
new file mode 100644
index 000000000..914328658
--- /dev/null
+++ b/src/main/resources/languages/news_en.properties
@@ -0,0 +1,14 @@
+news.templates.headline=Transaction templates
+news.templates.description=Allows the creation of templates for similar transactions.
+
+news.backup.headline=Auto backup
+news.backup.description=Allows the scheduling of automatic BudgetMaster data backups.
+
+news.suggestions.headline=Transaction name suggestions
+news.suggestions.description=Shows suggestions based on the last 25 created transactions.
+
+news.charts.headline=New charts
+news.charts.description=Two new default charts (income/expenditures per year and rest per month).
+
+news.commandline.headline=Command line option to set custom directory
+news.commandline.description=Specify a folder where settings, database and backups are stored (more details in the wiki).
\ No newline at end of file
diff --git a/src/main/resources/templates/whatsNewModal.ftl b/src/main/resources/templates/whatsNewModal.ftl
index 23e17ea90..2f72ae43d 100644
--- a/src/main/resources/templates/whatsNewModal.ftl
+++ b/src/main/resources/templates/whatsNewModal.ftl
@@ -9,40 +9,14 @@
             </div>
         </div>
 
-        <div class="row">
-            <div class="col s12">
-                <h5>Transaction templates</h5>
-                Allows the creation of templates for similar transactions.
-            </div>
-        </div>
-
-        <div class="row">
-            <div class="col s12">
-                <h5>Auto backup</h5>
-                Allows the scheduling of automatic BudgetMaster data backups.
-            </div>
-        </div>
-
-        <div class="row">
-            <div class="col s12">
-                <h5>Transaction name suggestions</h5>
-                Shows suggestions based on the last 25 created transactions.
-            </div>
-        </div>
-
-        <div class="row">
-            <div class="col s12">
-                <h5>New charts</h5>
-                Two new default charts (income/expenditures per year and rest per month).
-            </div>
-        </div>
-
-        <div class="row">
-            <div class="col s12">
-                <h5>Command line option to set custom directory</h5>
-                Specify a folder where settings, database and backups are stored (more details in the wiki).
+        <#list newsEntries as entry>
+            <div class="row">
+                <div class="col s12">
+                    <h5>${entry.getHeadline()}</h5>
+                    ${entry.getDescription()}
+                </div>
             </div>
-        </div>
+        </#list>
 
         <div class="row">
             <div class="col s12">
-- 
GitLab