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.datepicker.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.datepicker.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 * @since 2.0.4.0 030 */ 031public class LocaleUtil { 032 033 private static String locale = null; 034 private static String LANGUAGE = null; 035 036 private static List<String> loaded = new ArrayList<String>(); 037 038 public static String getLanguage() { 039 if (LANGUAGE == null) { 040 setupLocale(); 041 } 042 return LANGUAGE; 043 } 044 045 /** 046 * Get the string of locale based on user's browser configuration. 047 * 048 * @return 049 */ 050 public static String getLocale() { 051 if (locale == null) { 052 locale = getBrowserLocale(); 053 } 054 return locale; 055 } 056 057 public static TextResource getLocaleJsResource() { 058 String locale = getLocale(); 059 if (locale == null) { 060 return null; 061 } 062 return setupLocale(); 063 } 064 065 private static final native String getBrowserLocale() /*-{ 066 return $wnd.navigator.userLanguage || $wnd.navigator.language; 067 }-*/; 068 069 070 public static final void forceLocale(String locale_) { 071 locale = locale_; 072 TextResource t = setupLocale(); 073 if (loaded.contains(locale) && t != null) { 074 JavaScriptInjector.inject(t.getText()); 075 } 076 } 077 078 private static TextResource setupLocale() { 079 Resources r = Resources.RESOURCES; 080 TextResource tr = null; 081 082 /* 083 Script used to gen the basic if-else block: 084 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 085 */ 086 087 String locale = getLocale(); 088 089 if (locale.equals("bg")){ 090 tr = r.bg(); 091 LANGUAGE = "bg"; 092 } else if (locale.equals("br")) { 093 tr = r.br(); 094 LANGUAGE = "br"; 095 } else if (locale.equals("cs")) { 096 tr = r.cs(); 097 LANGUAGE = "cs"; 098 } else if (locale.equals("da")) { 099 tr = r.da(); 100 LANGUAGE = "da"; 101 } else if (locale.equals("de")) { 102 tr = r.de(); 103 LANGUAGE = "de"; 104 } else if (locale.equals("es")) { 105 tr = r.es(); 106 LANGUAGE = "es"; 107 } else if (locale.equals("fi")) { 108 tr = r.fi(); 109 LANGUAGE = "fi"; 110 } else if (locale.equals("fr")) { 111 tr = r.fr(); 112 LANGUAGE = "fr"; 113 } else if (locale.equals("id")) { 114 tr = r.id(); 115 LANGUAGE = "id"; 116 } else if (locale.equals("is")) { 117 tr = r.is(); 118 LANGUAGE = "is"; 119 } else if (locale.equals("it")) { 120 tr = r.it(); 121 LANGUAGE = "it"; 122 } else if (locale.equals("ja")) { 123 tr = r.ja(); 124 LANGUAGE = "ja"; 125 } else if (locale.equals("kr")) { 126 tr = r.kr(); 127 LANGUAGE = "kr"; 128 } else if (locale.equals("lt")) { 129 tr = r.lt(); 130 LANGUAGE = "lt"; 131 } else if (locale.equals("lv")) { 132 tr = r.lv(); 133 LANGUAGE = "lv"; 134 } else if (locale.equals("ms")) { 135 tr = r.ms(); 136 LANGUAGE = "ms"; 137 } else if (locale.equals("nb")) { 138 tr = r.nb(); 139 LANGUAGE = "nb"; 140 } else if (locale.equals("nl")) { 141 tr = r.nl(); 142 LANGUAGE = "nl"; 143 } else if (locale.equals("pl")) { 144 tr = r.pl(); 145 LANGUAGE = "pl"; 146 } else if (locale.equals("pt-BR")) { 147 tr = r.pt_BR(); 148 LANGUAGE = "pt-BR"; 149 } else if (locale.equals("pt")) { 150 tr = r.pt(); 151 LANGUAGE = "pt"; 152 } else if (locale.equals("ru")) { 153 tr = r.ru(); 154 LANGUAGE = "ru"; 155 } else if (locale.equals("sl")) { 156 tr = r.sl(); 157 LANGUAGE = "sl"; 158 } else if (locale.equals("sv")) { 159 tr = r.sv(); 160 LANGUAGE = "sv"; 161 } else if (locale.equals("th")) { 162 tr = r.th(); 163 LANGUAGE = "th"; 164 } else if (locale.equals("tr")) { 165 tr = r.tr(); 166 LANGUAGE = "tr"; 167 } else if (locale.equals("zh-CN")) { 168 tr = r.zh_CN(); 169 LANGUAGE = "zh-TW"; 170 } else if (locale.equals("zh-TW")) { 171 tr = r.zh_TW(); 172 LANGUAGE = "zh-TW"; 173 } else { 174 tr = null; 175 LANGUAGE = "en"; 176 } 177 178 loaded.add(LANGUAGE); 179 180 return tr; 181 } 182}