1
22
23 package com.liferay.portal.kernel.util;
24
25 import com.liferay.portal.kernel.log.Log;
26 import com.liferay.portal.kernel.log.LogFactoryUtil;
27
28 import java.util.HashMap;
29 import java.util.Locale;
30 import java.util.Map;
31
32
38 public class LocaleUtil {
39
40 public static Locale fromLanguageId(String languageId) {
41 return _instance._fromLanguageId(languageId);
42 }
43
44 public static Locale[] fromLanguageIds(String[] languageIds) {
45 return _instance._fromLanguageIds(languageIds);
46 }
47
48 public static Locale getDefault() {
49 return _instance._getDefault();
50 }
51
52 public static LocaleUtil getInstance() {
53 return _instance;
54 }
55
56 public static void setDefault(
57 String userLanguage, String userCountry, String userVariant) {
58
59 _instance._setDefault(userLanguage, userCountry, userVariant);
60 }
61
62 public static String toLanguageId(Locale locale) {
63 return _instance._toLanguageId(locale);
64 }
65
66 public static String[] toLanguageIds(Locale[] locales) {
67 return _instance._toLanguageIds(locales);
68 }
69
70 private LocaleUtil() {
71 _locale = new Locale("en", "US");
72 }
73
74 private Locale _fromLanguageId(String languageId) {
75 if (languageId == null) {
76 return _locale;
77 }
78
79 Locale locale = null;
80
81 try {
82 locale = _locales.get(languageId);
83
84 if (locale == null) {
85 int pos = languageId.indexOf(StringPool.UNDERLINE);
86
87 if (pos == -1) {
88 locale = new Locale(languageId);
89 }
90 else {
91 String languageCode = languageId.substring(0, pos);
92 String countryCode = languageId.substring(
93 pos + 1, languageId.length());
94
95 locale = new Locale(languageCode, countryCode);
96 }
97
98 _locales.put(languageId, locale);
99 }
100 }
101 catch (Exception e) {
102 if (_log.isWarnEnabled()) {
103 _log.warn(languageId + " is not a valid language id");
104 }
105 }
106
107 if (locale == null) {
108 locale = _locale;
109 }
110
111 return locale;
112 }
113
114 private Locale[] _fromLanguageIds(String[] languageIds) {
115 Locale[] locales = new Locale[languageIds.length];
116
117 for (int i = 0; i < languageIds.length; i++) {
118 locales[i] = _fromLanguageId(languageIds[i]);
119 }
120
121 return locales;
122 }
123
124 private Locale _getDefault() {
125 return _locale;
126 }
127
128 public void _setDefault(
129 String userLanguage, String userCountry, String userVariant) {
130
131 if (Validator.isNotNull(userLanguage) &&
132 Validator.isNull(userCountry) && Validator.isNull(userVariant)) {
133
134 _locale = new Locale(userLanguage);
135 }
136 else if (Validator.isNotNull(userLanguage) &&
137 Validator.isNotNull(userCountry) &&
138 Validator.isNull(userVariant)) {
139
140 _locale = new Locale(userLanguage, userCountry);
141 }
142 else if (Validator.isNotNull(userLanguage) &&
143 Validator.isNotNull(userCountry) &&
144 Validator.isNotNull(userVariant)) {
145
146 _locale = new Locale(userLanguage, userCountry, userVariant);
147 }
148 }
149
150 private String _toLanguageId(Locale locale) {
151 if (locale == null) {
152 locale = _locale;
153 }
154
155 StringBuilder sb = new StringBuilder();
156
157 sb.append(locale.getLanguage());
158
159 if (Validator.isNotNull(locale.getCountry())) {
160 sb.append(StringPool.UNDERLINE);
161 sb.append(locale.getCountry());
162 }
163
164 return sb.toString();
165 }
166
167 private String[] _toLanguageIds(Locale[] locales) {
168 String[] languageIds = new String[locales.length];
169
170 for (int i = 0; i < locales.length; i++) {
171 languageIds[i] = _toLanguageId(locales[i]);
172 }
173
174 return languageIds;
175 }
176
177 private static Log _log = LogFactoryUtil.getLog(LocaleUtil.class);
178
179 private static LocaleUtil _instance = new LocaleUtil();
180
181 private Locale _locale;
182 private Map<String, Locale> _locales = new HashMap<String, Locale>();
183
184 }