blob: 2e82af518375968b6b08f044ede821bd23831116 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2006 Sybase, Inc. and others.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Sybase, Inc. - initial API and implementation
*******************************************************************************/
package org.eclipse.jst.pagedesigner.meta.internal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
/**
* @author mengbo
* @version 1.5
* @deprecated
*/
public class LocaleFallback {
private static Map map = new HashMap();
/**
* @param locale
* @return the list of local values
*/
public static synchronized String[] fallBack(Locale locale) {
if (map.get(locale) != null) {
return (String[]) map.get(locale);
}
// first compute the fallback locales according to the input locale
List inputLocaleList = calculateLocaleNames(locale);
String[] ins = reverseList(inputLocaleList);
// then compute the fallback locales accroding to the system default
// locale
int defsSize = 0;
String[] defs = null;
if (!locale.equals(Locale.getDefault())) {
List defLocaleList = calculateLocaleNames(Locale.getDefault());
defs = reverseList(defLocaleList);
defsSize = defs.length;
}
int insSize = ins.length;
int size = insSize + defsSize;
String[] options = new String[size + 1];
for (int i = 0; i < size; i++) {
if (i < insSize) {
options[i] = ins[i];
} else {
options[i] = defs[i - insSize];
}
}
// last add blank string in order to search the base file
options[size] = ""; //$NON-NLS-1$
map.put(locale, options);
return options;
}
private static List calculateLocaleNames(Locale locale) {
List list = new ArrayList();
StringBuffer item;
String language = locale.getLanguage();
String country = locale.getCountry();
String variant = locale.getVariant();
int languageLength = language.length();
int countryLength = country.length();
int variantLength = variant.length();
if (languageLength == 0 && countryLength == 0 && variantLength == 0) {
// The locale is "", "", "".
return list;
}
item = new StringBuffer();
item = item.append('_').append(language);
list.add(item.toString());
if (countryLength == 0 && variantLength == 0) {
return list;
}
item.append('_').append(country);
list.add(item.toString());
if (variantLength == 0) {
return list;
}
item.append('_').append(variantLength);
list.add(item.toString());
return list;
}
private static String[] reverseList(List list) {
int size = list.size();
String[] vals = new String[size];
for (int i = 0; i < size; i++) {
vals[i] = (String) list.get(size - 1 - i);
}
return vals;
}
}