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 088 if (locale.equals("bg")){ 089 tr = r.bg(); 090 LANGUAGE = "bg"; 091 } else if (locale.equals("br")) { 092 tr = r.br(); 093 LANGUAGE = "br"; 094 } else if (locale.equals("cs")) { 095 tr = r.cs(); 096 LANGUAGE = "cs"; 097 } else if (locale.equals("da")) { 098 tr = r.da(); 099 LANGUAGE = "da"; 100 } else if (locale.equals("de")) { 101 tr = r.de(); 102 LANGUAGE = "de"; 103 } else if (locale.equals("es")) { 104 tr = r.es(); 105 LANGUAGE = "es"; 106 } else if (locale.equals("fi")) { 107 tr = r.fi(); 108 LANGUAGE = "fi"; 109 } else if (locale.equals("fr")) { 110 tr = r.fr(); 111 LANGUAGE = "fr"; 112 } else if (locale.equals("id")) { 113 tr = r.id(); 114 LANGUAGE = "id"; 115 } else if (locale.equals("is")) { 116 tr = r.is(); 117 LANGUAGE = "is"; 118 } else if (locale.equals("it")) { 119 tr = r.it(); 120 LANGUAGE = "it"; 121 } else if (locale.equals("ja")) { 122 tr = r.ja(); 123 LANGUAGE = "ja"; 124 } else if (locale.equals("kr")) { 125 tr = r.kr(); 126 LANGUAGE = "kr"; 127 } else if (locale.equals("lt")) { 128 tr = r.lt(); 129 LANGUAGE = "lt"; 130 } else if (locale.equals("lv")) { 131 tr = r.lv(); 132 LANGUAGE = "lv"; 133 } else if (locale.equals("ms")) { 134 tr = r.ms(); 135 LANGUAGE = "ms"; 136 } else if (locale.equals("nb")) { 137 tr = r.nb(); 138 LANGUAGE = "nb"; 139 } else if (locale.equals("nl")) { 140 tr = r.nl(); 141 LANGUAGE = "nl"; 142 } else if (locale.equals("pl")) { 143 tr = r.pl(); 144 LANGUAGE = "pl"; 145 } else if (locale.equals("pt-BR")) { 146 tr = r.pt_BR(); 147 LANGUAGE = "pt-BR"; 148 } else if (locale.equals("pt")) { 149 tr = r.pt(); 150 LANGUAGE = "pt"; 151 } else if (locale.equals("ru")) { 152 tr = r.ru(); 153 LANGUAGE = "ru"; 154 } else if (locale.equals("sl")) { 155 tr = r.sl(); 156 LANGUAGE = "sl"; 157 } else if (locale.equals("sv")) { 158 tr = r.sv(); 159 LANGUAGE = "sv"; 160 } else if (locale.equals("th")) { 161 tr = r.th(); 162 LANGUAGE = "th"; 163 } else if (locale.equals("tr")) { 164 tr = r.tr(); 165 LANGUAGE = "tr"; 166 } else if (locale.equals("zh-CN")) { 167 tr = r.zh_CN(); 168 LANGUAGE = "zh-TW"; 169 } else if (locale.equals("zh-TW")) { 170 tr = r.zh_TW(); 171 LANGUAGE = "zh-TW"; 172 } else { 173 tr = null; 174 LANGUAGE = "en"; 175 } 176 177 loaded.add(LANGUAGE); 178 179 return tr; 180 } 181}