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}