🎨 Simplify locale handling and add tests
authorDavid ‘Bombe’ Roden <bombe@freenetproject.org>
Thu, 27 Nov 2025 12:04:04 +0000 (13:04 +0100)
committerDavid ‘Bombe’ Roden <bombe@freenetproject.org>
Thu, 27 Nov 2025 12:11:07 +0000 (13:11 +0100)
src/main/java/de/todesbaum/jsite/i18n/I18n.java
src/main/java/de/todesbaum/jsite/main/Main.java
src/test/java/de/todesbaum/jsite/i18n/I18nTest.java [new file with mode: 0644]
src/test/resources/de/todesbaum/jsite/i18n/jSite_en.properties [new file with mode: 0644]
src/test/resources/de/todesbaum/jsite/i18n/jSite_test.properties [new file with mode: 0644]

index 0c40be2..cd7863d 100644 (file)
@@ -30,41 +30,15 @@ import java.util.ResourceBundle;
 public class I18n {
 
        /** The default locale, English. */
-       private static Locale defaultLocale = new Locale("en");
-
-       /** The current locale. */
-       private static Locale currentLocale;
-
-       /**
-        * Returns the currently set locale.
-        *
-        * @return The current locale
-        */
-       public static Locale getLocale() {
-               if (currentLocale == null) {
-                       currentLocale = Locale.getDefault();
-               }
-               return currentLocale;
-       }
-
-       /**
-        * Sets the current locale.
-        *
-        * @param locale
-        *            The new current locale
-        */
-       public static void setLocale(Locale locale) {
-               currentLocale = locale;
-               Locale.setDefault(locale);
-       }
+       private static final Locale defaultLocale = new Locale("en");
 
        /**
         * Returns the resource bundle for the current locale.
         *
         * @return The resource bundle for the current locale
         */
-       public static ResourceBundle getResourceBundle() {
-               return getResourceBundle(getLocale());
+       private static ResourceBundle getResourceBundle() {
+               return getResourceBundle(Locale.getDefault());
        }
 
        /**
@@ -74,7 +48,7 @@ public class I18n {
         *            The locale to get the resource bundle for
         * @return The resource bundle for the given locale
         */
-       public static ResourceBundle getResourceBundle(Locale locale) {
+       private static ResourceBundle getResourceBundle(Locale locale) {
                return ResourceBundle.getBundle("de.todesbaum.jsite.i18n.jSite", locale);
        }
 
index b76f3c5..8421b25 100644 (file)
@@ -192,7 +192,6 @@ public class Main implements ActionListener, ListSelectionListener, WizardListen
                configuration = new Configuration(configurationLocator, originalLocation);
 
                Locale.setDefault(configuration.getLocale());
-               I18n.setLocale(configuration.getLocale());
                wizard = new TWizard();
                createActions();
                wizard.setJMenuBar(createMenuBar());
@@ -470,7 +469,7 @@ public class Main implements ActionListener, ListSelectionListener, WizardListen
                Action languageAction = languageActions.get(supportedLocale);
                JRadioButtonMenuItem menuItem = (JRadioButtonMenuItem) languageAction.getValue("menuItem");
                menuItem.setSelected(true);
-               I18n.setLocale(supportedLocale);
+               Locale.setDefault(supportedLocale);
                for (Runnable i18nRunnable : I18nContainer.getInstance()) {
                        try {
                                i18nRunnable.run();
diff --git a/src/test/java/de/todesbaum/jsite/i18n/I18nTest.java b/src/test/java/de/todesbaum/jsite/i18n/I18nTest.java
new file mode 100644 (file)
index 0000000..be8a171
--- /dev/null
@@ -0,0 +1,43 @@
+package de.todesbaum.jsite.i18n;
+
+import java.util.Locale;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.equalTo;
+
+public class I18nTest {
+
+       @Test
+       public void getKeyReturnsValueFromCurrentLocaleIfItExists() {
+               Locale.setDefault(new Locale("test"));
+               assertThat(I18n.getMessage("locale"), equalTo("test"));
+       }
+
+       @Test
+       public void getKeyReturnsValueFromFallbackLocaleIfItDoesNotExist() {
+               Locale.setDefault(new Locale("test"));
+               assertThat(I18n.getMessage("fallback"), equalTo("value"));
+       }
+
+       @Test
+       public void getKeyReturnsKeyIfTranslationDoesNotExist() {
+               Locale.setDefault(new Locale("test"));
+               assertThat(I18n.getMessage("non-existent"), equalTo("non-existent"));
+       }
+
+       @Before
+       public void rememberLocale() {
+               previousLocale = Locale.getDefault();
+       }
+
+       @After
+       public void restoreLocal() {
+               Locale.setDefault(previousLocale);
+       }
+
+       private Locale previousLocale;
+
+}
diff --git a/src/test/resources/de/todesbaum/jsite/i18n/jSite_en.properties b/src/test/resources/de/todesbaum/jsite/i18n/jSite_en.properties
new file mode 100644 (file)
index 0000000..d44eaab
--- /dev/null
@@ -0,0 +1,2 @@
+locale=en
+fallback=value
diff --git a/src/test/resources/de/todesbaum/jsite/i18n/jSite_test.properties b/src/test/resources/de/todesbaum/jsite/i18n/jSite_test.properties
new file mode 100644 (file)
index 0000000..02c666a
--- /dev/null
@@ -0,0 +1 @@
+locale=test