View Javadoc
1   package org.argeo.cms;
2   
3   import java.util.ArrayList;
4   import java.util.List;
5   import java.util.Locale;
6   import java.util.ResourceBundle;
7   
8   import org.argeo.cms.auth.CurrentUser;
9   
10  /** Utilities simplifying the development of localization enums. */
11  public class LocaleUtils {
12  	public static Object local(Enum<?> en) {
13  		return local(en, getCurrentLocale(), "/OSGI-INF/l10n/bundle");
14  	}
15  
16  	public static Object local(Enum<?> en, Locale locale) {
17  		return local(en, locale, "/OSGI-INF/l10n/bundle");
18  	}
19  
20  	public static Object local(Enum<?> en, Locale locale, String resource) {
21  		return local(en, locale, resource, en.getClass().getClassLoader());
22  	}
23  
24  	public static Object local(Enum<?> en, Locale locale, String resource, ClassLoader classLoader) {
25  		ResourceBundle rb = ResourceBundle.getBundle(resource, locale, classLoader);
26  		return rb.getString(en.name());
27  	}
28  
29  	public static String lead(String raw, Locale locale) {
30  		return raw.substring(0, 1).toUpperCase(locale) + raw.substring(1);
31  	}
32  
33  	public static String lead(Localized localized) {
34  		return lead(localized, getCurrentLocale());
35  	}
36  
37  	public static String lead(Localized localized, Locale locale) {
38  		return lead(localized.local(locale).toString(), locale);
39  	}
40  
41  	static Locale getCurrentLocale() {
42  		return CurrentUser.locale();
43  		// return UiContext.getLocale();
44  		// FIXME look into Subject or settings
45  		// return Locale.getDefault();
46  	}
47  
48  	/** Returns null if argument is null. */
49  	public static List<Locale> asLocaleList(Object locales) {
50  		if (locales == null)
51  			return null;
52  		ArrayList<Locale> availableLocales = new ArrayList<Locale>();
53  		String[] codes = locales.toString().split(",");
54  		for (int i = 0; i < codes.length; i++) {
55  			String code = codes[i];
56  			// variant not supported
57  			int indexUnd = code.indexOf("_");
58  			Locale locale;
59  			if (indexUnd > 0) {
60  				String language = code.substring(0, indexUnd);
61  				String country = code.substring(indexUnd + 1);
62  				locale = new Locale(language, country);
63  			} else {
64  				locale = new Locale(code);
65  			}
66  			availableLocales.add(locale);
67  		}
68  		return availableLocales;
69  	}
70  }