001    /*
002     * Copyright 1999,2004 The Apache Software Foundation.
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     */
016    
017    package org.apache.commons.feedparser.tools;
018    
019    import java.util.HashMap;
020    import java.util.Locale;
021    import java.util.StringTokenizer;
022    
023    public class RFC3066LocaleParser {
024    
025        static HashMap locales = new HashMap();
026        
027        public static Locale parse( String input ) {
028    
029            StringTokenizer tok = new StringTokenizer( input, "-" );
030    
031            while ( tok.hasMoreElements() ) {
032                String current = (String)tok.nextElement();
033    
034                current = current.toLowerCase();
035    
036                if ( current.length() == 2 ) {
037                    return getLocale( current );
038                }
039                
040            }
041    
042            return null;
043    
044        }
045    
046        public static Locale getLocale( String language ) {
047            return (Locale)locales.get( language );
048        }
049        
050        private static void initLocale( String name ) {
051            locales.put( name, new Locale( name ) );
052        }
053        
054        static {
055    
056            // Taken from: http://www.w3.org/WAI/ER/IG/ert/iso639.htm
057            
058            initLocale( "aa" ); //afar"
059            initLocale( "ab" ); //abkhazian"
060            initLocale( "af" ); //afrikaans"
061            initLocale( "am" ); //amharic"
062            initLocale( "ar" ); //arabic"
063            initLocale( "as" ); //assamese"
064            initLocale( "ay" ); //aymara"
065            initLocale( "az" ); //azerbaijani"
066            initLocale( "ba" ); //bashkir"
067            initLocale( "be" ); //byelorussian"
068            initLocale( "bg" ); //bulgarian"
069            initLocale( "bh" ); //bihari"
070            initLocale( "bi" ); //bislama"
071            initLocale( "bn" ); //bengali"" ); //bangla"
072            initLocale( "bo" ); //tibetan"
073            initLocale( "br" ); //breton"
074            initLocale( "ca" ); //catalan"
075            initLocale( "co" ); //corsican"
076            initLocale( "cs" ); //czech"
077            initLocale( "cy" ); //welsh"
078            initLocale( "da" ); //danish"
079            initLocale( "de" ); //german"
080            initLocale( "dz" ); //bhutani"
081            initLocale( "el" ); //greek"
082            initLocale( "en" ); //english"" ); //american"
083            initLocale( "eo" ); //esperanto"
084            initLocale( "es" ); //spanish"
085            initLocale( "et" ); //estonian"
086            initLocale( "eu" ); //basque"
087            initLocale( "fa" ); //persian"
088            initLocale( "fi" ); //finnish"
089            initLocale( "fj" ); //fiji"
090            initLocale( "fo" ); //faeroese"
091            initLocale( "fr" ); //french"
092            initLocale( "fy" ); //frisian"
093            initLocale( "ga" ); //irish"
094            initLocale( "gd" ); //gaelic"" ); //scots gaelic"
095            initLocale( "gl" ); //galician"
096            initLocale( "gn" ); //guarani"
097            initLocale( "gu" ); //gujarati"
098            initLocale( "ha" ); //hausa"
099            initLocale( "hi" ); //hindi"
100            initLocale( "hr" ); //croatian"
101            initLocale( "hu" ); //hungarian"
102            initLocale( "hy" ); //armenian"
103            initLocale( "ia" ); //interlingua"
104            initLocale( "ie" ); //interlingue"
105            initLocale( "ik" ); //inupiak"
106            initLocale( "in" ); //indonesian"
107            initLocale( "is" ); //icelandic"
108            initLocale( "it" ); //italian"
109            initLocale( "iw" ); //hebrew"
110            initLocale( "ja" ); //japanese"
111            initLocale( "ji" ); //yiddish"
112            initLocale( "jw" ); //javanese"
113            initLocale( "ka" ); //georgian"
114            initLocale( "kk" ); //kazakh"
115            initLocale( "kl" ); //greenlandic"
116            initLocale( "km" ); //cambodian"
117            initLocale( "kn" ); //kannada"
118            initLocale( "ko" ); //korean"
119            initLocale( "ks" ); //kashmiri"
120            initLocale( "ku" ); //kurdish"
121            initLocale( "ky" ); //kirghiz"
122            initLocale( "la" ); //latin"
123            initLocale( "ln" ); //lingala"
124            initLocale( "lo" ); //laothian"
125            initLocale( "lt" ); //lithuanian"
126            initLocale( "lv" ); //latvian"" ); //lettish"
127            initLocale( "mg" ); //malagasy"
128            initLocale( "mi" ); //maori"
129            initLocale( "mk" ); //macedonian"
130            initLocale( "ml" ); //malayalam"
131            initLocale( "mn" ); //mongolian"
132            initLocale( "mo" ); //moldavian"
133            initLocale( "mr" ); //marathi"
134            initLocale( "ms" ); //malay"
135            initLocale( "mt" ); //maltese"
136            initLocale( "my" ); //burmese"
137            initLocale( "na" ); //nauru"
138            initLocale( "ne" ); //nepali"
139            initLocale( "nl" ); //dutch"
140            initLocale( "no" ); //norwegian"
141            initLocale( "oc" ); //occitan"
142            initLocale( "om" ); //oromo"" ); //afan"
143            initLocale( "or" ); //oriya"
144            initLocale( "pa" ); //punjabi"
145            initLocale( "pl" ); //polish"
146            initLocale( "ps" ); //pashto"" ); //pushto"
147            initLocale( "pt" ); //portuguese"
148            initLocale( "qu" ); //quechua"
149            initLocale( "rm" ); //rhaeto-romance"
150            initLocale( "rn" ); //kirundi"
151            initLocale( "ro" ); //romanian"
152            initLocale( "ru" ); //russian"
153            initLocale( "rw" ); //kinyarwanda"
154            initLocale( "sa" ); //sanskrit"
155            initLocale( "sd" ); //sindhi"
156            initLocale( "sg" ); //sangro"
157            initLocale( "sh" ); //serbo-croatian"
158            initLocale( "si" ); //singhalese"
159            initLocale( "sk" ); //slovak"
160            initLocale( "sl" ); //slovenian"
161            initLocale( "sm" ); //samoan"
162            initLocale( "sn" ); //shona"
163            initLocale( "so" ); //somali"
164            initLocale( "sq" ); //albanian"
165            initLocale( "sr" ); //serbian"
166            initLocale( "ss" ); //siswati"
167            initLocale( "st" ); //sesotho"
168            initLocale( "su" ); //sudanese"
169            initLocale( "sv" ); //swedish"
170            initLocale( "sw" ); //swahili"
171            initLocale( "ta" ); //tamil"
172            initLocale( "te" ); //tegulu"
173            initLocale( "tg" ); //tajik"
174            initLocale( "th" ); //thai"
175            initLocale( "ti" ); //tigrinya"
176            initLocale( "tk" ); //turkmen"
177            initLocale( "tl" ); //tagalog"
178            initLocale( "tn" ); //setswana"
179            initLocale( "to" ); //tonga"
180            initLocale( "tr" ); //turkish"
181            initLocale( "ts" ); //tsonga"
182            initLocale( "tt" ); //tatar"
183            initLocale( "tw" ); //twi"
184            initLocale( "uk" ); //ukrainian"
185            initLocale( "ur" ); //urdu"
186            initLocale( "uz" ); //uzbek"
187            initLocale( "vi" ); //vietnamese"
188            initLocale( "vo" ); //volapuk"
189            initLocale( "wo" ); //wolof"
190            initLocale( "xh" ); //xhosa"
191            initLocale( "yo" ); //yoruba"
192            initLocale( "zh" ); //chinese"
193            initLocale( "zu" ); //Zulu"
194        
195        }
196        
197    }