001/* 002 * Copyright 2012 GWT-Bootstrap 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016package com.github.gwtbootstrap.datetimepicker.client.ui.util; 017 018import java.util.ArrayList; 019import java.util.List; 020 021import com.github.gwtbootstrap.client.ui.resources.JavaScriptInjector; 022import com.github.gwtbootstrap.datetimepicker.client.ui.resources.Resources; 023import com.google.gwt.resources.client.TextResource; 024 025/** 026 * A utility class to get the User's Browser Locale. 027 * 028 * @author Carlos A Becker 029 * @author Alain Penders 030 * @since 2.1.1.0 031 */ 032public class LocaleUtil { 033 034 private static String locale = null; 035 private static String LANGUAGE = null; 036 037 private static List<String> loaded = new ArrayList<String>(); 038 039 040 public static String getLanguage() { 041 if (LANGUAGE == null) { 042 setupLocale(); 043 } 044 return LANGUAGE; 045 } 046 047 048 /** 049 * Get the string of locale based on user's browser configuration. 050 * 051 * @return 052 */ 053 public static String getLocale() { 054 if (locale == null) { 055 locale = getBrowserLocale(); 056 } 057 return locale; 058 } 059 060 061 public static TextResource getLocaleJsResource() { 062 String locale = getLocale(); 063 if (locale == null) { 064 return null; 065 } 066 return setupLocale(); 067 } 068 069 070 private static final native String getBrowserLocale() /*-{ 071 return $wnd.navigator.userLanguage || $wnd.navigator.language; 072 }-*/; 073 074 075 public static final void forceLocale(String locale_) { 076 locale = locale_; 077 TextResource t = setupLocale(); 078 if (loaded.contains(locale) && t != null) { 079 JavaScriptInjector.inject(t.getText()); 080 } 081 } 082 083 084 private static TextResource setupLocale() { 085 Resources r = Resources.RESOURCES; 086 TextResource tr = null; 087 088 /* 089 Script used to gen the basic if-else block: 090 for a in `ls`; do echo "else if(locale.equals(\"`echo $a | cut -f2 -d.`\")) { tr = r.`echo $a | cut -f2 -d.`(); LANGUAGE = \"`echo $a | cut -f2 -d.`\"; }"; done 091 */ 092 093 if (locale.equals("bg")) { 094 tr = r.bg(); 095 LANGUAGE = "bg"; 096 } 097 else if (locale.equals("ca")) { 098 tr = r.cs(); 099 LANGUAGE = "ca"; 100 } 101 else if (locale.equals("cs")) { 102 tr = r.cs(); 103 LANGUAGE = "cs"; 104 } 105 else if (locale.equals("da")) { 106 tr = r.da(); 107 LANGUAGE = "da"; 108 } 109 else if (locale.equals("de")) { 110 tr = r.de(); 111 LANGUAGE = "de"; 112 } 113 else if (locale.equals("el")) { 114 tr = r.es(); 115 LANGUAGE = "el"; 116 } 117 else if (locale.equals("es")) { 118 tr = r.es(); 119 LANGUAGE = "es"; 120 } 121 else if (locale.equals("fi")) { 122 tr = r.fi(); 123 LANGUAGE = "fi"; 124 } 125 else if (locale.equals("fr")) { 126 tr = r.fr(); 127 LANGUAGE = "fr"; 128 } 129 else if (locale.equals("he")) { 130 tr = r.id(); 131 LANGUAGE = "he"; 132 } 133 else if (locale.equals("hr")) { 134 tr = r.id(); 135 LANGUAGE = "hr"; 136 } 137 else if (locale.equals("id")) { 138 tr = r.id(); 139 LANGUAGE = "id"; 140 } 141 else if (locale.equals("is")) { 142 tr = r.is(); 143 LANGUAGE = "is"; 144 } 145 else if (locale.equals("it")) { 146 tr = r.it(); 147 LANGUAGE = "it"; 148 } 149 else if (locale.equals("ja")) { 150 tr = r.ja(); 151 LANGUAGE = "ja"; 152 } 153 else if (locale.equals("kr")) { 154 tr = r.kr(); 155 LANGUAGE = "kr"; 156 } 157 else if (locale.equals("lt")) { 158 tr = r.lt(); 159 LANGUAGE = "lt"; 160 } 161 else if (locale.equals("lv")) { 162 tr = r.lv(); 163 LANGUAGE = "lv"; 164 } 165 else if (locale.equals("ms")) { 166 tr = r.ms(); 167 LANGUAGE = "ms"; 168 } 169 else if (locale.equals("nb")) { 170 tr = r.nb(); 171 LANGUAGE = "nb"; 172 } 173 else if (locale.equals("nl")) { 174 tr = r.nl(); 175 LANGUAGE = "nl"; 176 } 177 else if (locale.equals("pl")) { 178 tr = r.pl(); 179 LANGUAGE = "pl"; 180 } 181 else if (locale.equals("pt-BR")) { 182 tr = r.pt_BR(); 183 LANGUAGE = "pt-BR"; 184 } 185 else if (locale.equals("pt")) { 186 tr = r.pt(); 187 LANGUAGE = "pt"; 188 } 189 else if (locale.equals("ro")) { 190 tr = r.ru(); 191 LANGUAGE = "ro"; 192 } 193 else if (locale.equals("ru")) { 194 tr = r.ru(); 195 LANGUAGE = "ru"; 196 } 197 else if (locale.equals("sk")) { 198 tr = r.sl(); 199 LANGUAGE = "sk"; 200 } 201 else if (locale.equals("sl")) { 202 tr = r.sl(); 203 LANGUAGE = "sl"; 204 } 205 else if (locale.equals("sv")) { 206 tr = r.sv(); 207 LANGUAGE = "sv"; 208 } 209 else if (locale.equals("sw")) { 210 tr = r.sv(); 211 LANGUAGE = "sw"; 212 } 213 else if (locale.equals("th")) { 214 tr = r.th(); 215 LANGUAGE = "th"; 216 } 217 else if (locale.equals("tr")) { 218 tr = r.tr(); 219 LANGUAGE = "tr"; 220 } 221 else if (locale.equals("uk")) { 222 tr = r.tr(); 223 LANGUAGE = "uk"; 224 } 225 else if (locale.equals("zh-CN")) { 226 tr = r.zh_CN(); 227 LANGUAGE = "zh-TW"; 228 } 229 else if (locale.equals("zh-TW")) { 230 tr = r.zh_TW(); 231 LANGUAGE = "zh-TW"; 232 } 233 else { 234 tr = null; 235 LANGUAGE = "en"; 236 } 237 238 loaded.add(LANGUAGE); 239 240 return tr; 241 } 242}