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}