1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.myfaces.shared.util;
20
21 import java.util.Locale;
22 import java.util.StringTokenizer;
23 import java.util.logging.Level;
24 import java.util.logging.Logger;
25
26
27 public final class LocaleUtils
28 {
29
30 private static final Logger log = Logger.getLogger(LocaleUtils.class.getName());
31
32
33 private LocaleUtils()
34 {
35
36 }
37
38
39
40
41
42
43
44
45 public static Locale toLocale(String localeString)
46 {
47 if ((localeString == null) || (localeString.length() == 0))
48 {
49 Locale locale = Locale.getDefault();
50 if(log.isLoggable(Level.WARNING))
51 {
52 log.warning("Locale name in faces-config.xml null or empty, setting locale to default locale : "
53 + locale.toString());
54 }
55 return locale;
56 }
57
58 Locale locale = Locale.forLanguageTag(localeString);
59 if (locale != null && !locale.getLanguage().isEmpty())
60 {
61 return locale;
62 }
63
64 int separatorCountry = localeString.indexOf('_');
65 char separator;
66 if (separatorCountry >= 0)
67 {
68 separator = '_';
69 }
70 else
71 {
72 separatorCountry = localeString.indexOf('-');
73 separator = '-';
74 }
75
76 String language;
77 String country;
78 String variant;
79 if (separatorCountry < 0)
80 {
81 language = localeString;
82 country = "";
83 variant = "";
84 }
85 else
86 {
87 language = localeString.substring(0, separatorCountry);
88
89 int separatorVariant = localeString.indexOf(separator, separatorCountry + 1);
90 if (separatorVariant < 0)
91 {
92 country = localeString.substring(separatorCountry + 1);
93 variant = "";
94 }
95 else
96 {
97 country = localeString.substring(separatorCountry + 1, separatorVariant);
98 variant = localeString.substring(separatorVariant + 1);
99 }
100 }
101
102 return new Locale(language, country, variant);
103 }
104
105
106
107
108
109
110
111
112 public static Locale converterTagLocaleFromString(String name)
113 {
114 try
115 {
116 Locale locale;
117 StringTokenizer st = new StringTokenizer(name, "_");
118 String language = st.nextToken();
119
120 if(st.hasMoreTokens())
121 {
122 String country = st.nextToken();
123
124 if(st.hasMoreTokens())
125 {
126 String variant = st.nextToken();
127 locale = new Locale(language, country, variant);
128 }
129 else
130 {
131 locale = new Locale(language, country);
132 }
133 }
134 else
135 {
136 locale = new Locale(language);
137 }
138
139
140 return locale;
141 }
142 catch(Exception e)
143 {
144 throw new IllegalArgumentException("Locale parsing exception - " +
145 "invalid string representation '" + name + "'");
146 }
147 }
148 }