From ba1fb3698ab4e033b67b3f38c7452ed72c1d108f Mon Sep 17 00:00:00 2001 From: Mathieu Baudier Date: Sat, 3 Oct 2020 17:35:26 +0200 Subject: [PATCH] Make locale utils more generic. --- .../src/org/argeo/cms/LocaleUtils.java | 40 ++++++++++++++++--- 1 file changed, 34 insertions(+), 6 deletions(-) diff --git a/org.argeo.cms/src/org/argeo/cms/LocaleUtils.java b/org.argeo.cms/src/org/argeo/cms/LocaleUtils.java index c6c932bf8..24ca3558c 100644 --- a/org.argeo.cms/src/org/argeo/cms/LocaleUtils.java +++ b/org.argeo.cms/src/org/argeo/cms/LocaleUtils.java @@ -1,29 +1,54 @@ package org.argeo.cms; +import java.security.AccessController; import java.util.ArrayList; import java.util.List; import java.util.Locale; import java.util.ResourceBundle; +import javax.security.auth.Subject; + import org.argeo.cms.auth.CurrentUser; /** Utilities simplifying the development of localization enums. */ public class LocaleUtils { - public static Object local(Enum en) { + public static String local(Enum en) { return local(en, getCurrentLocale(), "/OSGI-INF/l10n/bundle"); } - public static Object local(Enum en, Locale locale) { + public static String local(Enum en, Locale locale) { return local(en, locale, "/OSGI-INF/l10n/bundle"); } - public static Object local(Enum en, Locale locale, String resource) { + public static String local(Enum en, Locale locale, String resource) { return local(en, locale, resource, en.getClass().getClassLoader()); } - public static Object local(Enum en, Locale locale, String resource, ClassLoader classLoader) { + public static String local(Enum en, Locale locale, String resource, ClassLoader classLoader) { + return local(en.name(), locale, resource, classLoader); + } + + public static String local(String key, ClassLoader classLoader) { + return local(key, getCurrentLocale(), "/OSGI-INF/l10n/bundle", classLoader); + } + + public static String local(String key, Locale locale, ClassLoader classLoader) { + return local(key, locale, "/OSGI-INF/l10n/bundle", classLoader); + } + + public static String local(String key, Locale locale, String resource, ClassLoader classLoader) { ResourceBundle rb = ResourceBundle.getBundle(resource, locale, classLoader); - return rb.getString(en.name()); + assert key.length() > 2; + if (isLocaleKey(key)) + key = key.substring(1); + return rb.getString(key); + } + + public static boolean isLocaleKey(String str) { + if (str.length() > 2 && ('%' == str.charAt(0))) + return true; + else + return false; } public static String lead(String raw, Locale locale) { @@ -39,7 +64,10 @@ public class LocaleUtils { } static Locale getCurrentLocale() { - return CurrentUser.locale(); + if (Subject.getSubject(AccessController.getContext()) != null) + return CurrentUser.locale(); + else + return Locale.getDefault(); // return UiContext.getLocale(); // FIXME look into Subject or settings // return Locale.getDefault(); -- 2.30.2