]> git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.cms/src/org/argeo/cms/LocaleUtils.java
Move qualified name to JCR bundle
[lgpl/argeo-commons.git] / org.argeo.cms / src / org / argeo / cms / LocaleUtils.java
1 package org.argeo.cms;
2
3 import java.security.AccessController;
4 import java.util.ArrayList;
5 import java.util.List;
6 import java.util.Locale;
7 import java.util.ResourceBundle;
8
9 import javax.security.auth.Subject;
10
11 import org.argeo.cms.auth.CurrentUser;
12
13 /** Utilities simplifying the development of localization enums. */
14 public class LocaleUtils {
15 public static String local(Enum<?> en) {
16 return local(en, getCurrentLocale(), "/OSGI-INF/l10n/bundle");
17 }
18
19 public static String local(Enum<?> en, Locale locale) {
20 return local(en, locale, "/OSGI-INF/l10n/bundle");
21 }
22
23 public static String local(Enum<?> en, Locale locale, String resource) {
24 return local(en, locale, resource, en.getClass().getClassLoader());
25 }
26
27 public static String local(Enum<?> en, Locale locale, String resource, ClassLoader classLoader) {
28 return local(en.name(), locale, resource, classLoader);
29 }
30
31 public static String local(String key, ClassLoader classLoader) {
32 return local(key, getCurrentLocale(), "/OSGI-INF/l10n/bundle", classLoader);
33 }
34
35 public static String local(String key, Locale locale, ClassLoader classLoader) {
36 return local(key, locale, "/OSGI-INF/l10n/bundle", classLoader);
37 }
38
39 public static String local(String key, Locale locale, String resource, ClassLoader classLoader) {
40 ResourceBundle rb = ResourceBundle.getBundle(resource, locale, classLoader);
41 assert key.length() > 2;
42 if (isLocaleKey(key))
43 key = key.substring(1);
44 return rb.getString(key);
45 }
46
47 public static boolean isLocaleKey(String str) {
48 if (str.length() > 2 && ('%' == str.charAt(0)))
49 return true;
50 else
51 return false;
52 }
53
54 public static String lead(String raw, Locale locale) {
55 return raw.substring(0, 1).toUpperCase(locale) + raw.substring(1);
56 }
57
58 public static String lead(Localized localized) {
59 return lead(localized, getCurrentLocale());
60 }
61
62 public static String lead(Localized localized, Locale locale) {
63 return lead(localized.local(locale).toString(), locale);
64 }
65
66 static Locale getCurrentLocale() {
67 if (Subject.getSubject(AccessController.getContext()) != null)
68 return CurrentUser.locale();
69 else
70 return Locale.getDefault();
71 // return UiContext.getLocale();
72 // FIXME look into Subject or settings
73 // return Locale.getDefault();
74 }
75
76 /** Returns null if argument is null. */
77 public static List<Locale> asLocaleList(Object locales) {
78 if (locales == null)
79 return null;
80 ArrayList<Locale> availableLocales = new ArrayList<Locale>();
81 String[] codes = locales.toString().split(",");
82 for (int i = 0; i < codes.length; i++) {
83 String code = codes[i];
84 // variant not supported
85 int indexUnd = code.indexOf("_");
86 Locale locale;
87 if (indexUnd > 0) {
88 String language = code.substring(0, indexUnd);
89 String country = code.substring(indexUnd + 1);
90 locale = new Locale(language, country);
91 } else {
92 locale = new Locale(code);
93 }
94 availableLocales.add(locale);
95 }
96 return availableLocales;
97 }
98 }