001
002
003 /*
004 * Licensed to the Apache Software Foundation (ASF) under one
005 * or more contributor license agreements. See the NOTICE file
006 * distributed with this work for additional information
007 * regarding copyright ownership. The ASF licenses this file
008 * to you under the Apache License, Version 2.0 (the "License");
009 * you may not use this file except in compliance with the License.
010 * You may obtain a copy of the License at
011 *
012 * http://www.apache.org/licenses/LICENSE-2.0
013 *
014 * Unless required by applicable law or agreed to in writing, software
015 * distributed under the License is distributed on an "AS IS" BASIS,
016 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
017 * See the License for the specific language governing permissions and
018 * limitations under the License.
019 */
020 /*
021 * $Id: LocaleUtility.java 468655 2006-10-28 07:12:06Z minchau $
022 */
023
024 package org.apache.xml.utils;
025
026 import java.util.Locale;
027
028 /**
029 * @author Igor Hersht, igorh@ca.ibm.com
030 */
031 public class LocaleUtility {
032 /**
033 * IETF RFC 1766 tag separator
034 */
035 public final static char IETF_SEPARATOR = '-';
036 public final static String EMPTY_STRING = "";
037
038
039 public static Locale langToLocale(String lang) {
040 if((lang == null) || lang.equals(EMPTY_STRING)){ // not specified => getDefault
041 return Locale.getDefault();
042 }
043 String language = EMPTY_STRING;
044 String country = EMPTY_STRING;
045 String variant = EMPTY_STRING;
046
047 int i1 = lang.indexOf(IETF_SEPARATOR);
048 if (i1 < 0) {
049 language = lang;
050 } else {
051 language = lang.substring(0, i1);
052 ++i1;
053 int i2 = lang.indexOf(IETF_SEPARATOR, i1);
054 if (i2 < 0) {
055 country = lang.substring(i1);
056 } else {
057 country = lang.substring(i1, i2);
058 variant = lang.substring(i2+1);
059 }
060 }
061
062 if(language.length() == 2){
063 language = language.toLowerCase();
064 }else {
065 language = EMPTY_STRING;
066 }
067
068 if(country.length() == 2){
069 country = country.toUpperCase();
070 }else {
071 country = EMPTY_STRING;
072 }
073
074 if((variant.length() > 0) &&
075 ((language.length() == 2) ||(country.length() == 2))){
076 variant = variant.toUpperCase();
077 }else{
078 variant = EMPTY_STRING;
079 }
080
081 return new Locale(language, country, variant );
082 }
083
084
085
086 }
087
088