]>
git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.cms/src/org/argeo/cms/LocaleUtils.java
3 import java
.security
.AccessController
;
4 import java
.util
.ArrayList
;
6 import java
.util
.Locale
;
7 import java
.util
.ResourceBundle
;
9 import javax
.security
.auth
.Subject
;
11 import org
.apache
.commons
.logging
.Log
;
12 import org
.apache
.commons
.logging
.LogFactory
;
13 import org
.argeo
.cms
.auth
.CurrentUser
;
15 /** Utilities simplifying the development of localization enums. */
16 public class LocaleUtils
{
17 private final static Log log
= LogFactory
.getLog(LocaleUtils
.class);
19 private final static ThreadLocal
<Locale
> threadLocale
= new ThreadLocal
<>();
21 public static void setThreadLocale(Locale locale
) {
22 threadLocale
.set(locale
);
25 public static String
local(Enum
<?
> en
) {
26 return local(en
, getCurrentLocale(), "/OSGI-INF/l10n/bundle");
29 public static String
local(Enum
<?
> en
, Locale locale
) {
30 return local(en
, locale
, "/OSGI-INF/l10n/bundle");
33 public static String
local(Enum
<?
> en
, Locale locale
, String resource
) {
34 return local(en
, locale
, resource
, en
.getClass().getClassLoader());
37 public static String
local(Enum
<?
> en
, Locale locale
, String resource
, ClassLoader classLoader
) {
38 return local(en
.name(), locale
, resource
, classLoader
);
41 public static String
local(String key
, ClassLoader classLoader
) {
42 return local(key
, getCurrentLocale(), "/OSGI-INF/l10n/bundle", classLoader
);
45 public static String
local(String key
, Locale locale
, ClassLoader classLoader
) {
46 return local(key
, locale
, "/OSGI-INF/l10n/bundle", classLoader
);
49 public static String
local(String key
, Locale locale
, String resource
, ClassLoader classLoader
) {
50 ResourceBundle rb
= ResourceBundle
.getBundle(resource
, locale
, classLoader
);
51 assert key
.length() > 2;
53 key
= key
.substring(1);
54 return rb
.getString(key
);
57 public static boolean isLocaleKey(String str
) {
58 if (str
.length() > 2 && ('%' == str
.charAt(0)))
64 public static String
lead(String raw
, Locale locale
) {
65 return raw
.substring(0, 1).toUpperCase(locale
) + raw
.substring(1);
68 public static String
lead(Localized localized
) {
69 return lead(localized
, getCurrentLocale());
72 public static String
lead(Localized localized
, Locale locale
) {
73 return lead(localized
.local(locale
).toString(), locale
);
76 static Locale
getCurrentLocale() {
77 Locale currentLocale
= null;
78 if (Subject
.getSubject(AccessController
.getContext()) != null)
79 currentLocale
= CurrentUser
.locale();
80 else if (threadLocale
.get() != null) {
81 currentLocale
= threadLocale
.get();
83 if (log
.isTraceEnabled())
84 log
.trace("Thread #" + Thread
.currentThread().getId() + " " + Thread
.currentThread().getName() + " locale: "
86 if (currentLocale
== null)
87 throw new IllegalStateException("No locale found");
89 // return UiContext.getLocale();
90 // FIXME look into Subject or settings
91 // return Locale.getDefault();
94 /** Returns null if argument is null. */
95 public static List
<Locale
> asLocaleList(Object locales
) {
98 ArrayList
<Locale
> availableLocales
= new ArrayList
<Locale
>();
99 String
[] codes
= locales
.toString().split(",");
100 for (int i
= 0; i
< codes
.length
; i
++) {
101 String code
= codes
[i
];
102 // variant not supported
103 int indexUnd
= code
.indexOf("_");
106 String language
= code
.substring(0, indexUnd
);
107 String country
= code
.substring(indexUnd
+ 1);
108 locale
= new Locale(language
, country
);
110 locale
= new Locale(code
);
112 availableLocales
.add(locale
);
114 return availableLocales
;