/*
* GeoTools - The Open Source Java GIS Toolkit
* http://geotools.org
*
* (C) 2007-2008, Open Source Geospatial Foundation (OSGeo)
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation;
* version 2.1 of the License.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*/
package org.geotools.resources.i18n;
import java.util.Arrays;
import java.util.Locale;
import org.geotools.resources.Arguments;
import org.geotools.resources.XArray;
/**
* Static i18n methods.
*
* @since 2.4
* @source $URL$
* @version $Id$
* @author Martin Desruisseaux
*/
public final class Locales {
/**
* Do not allow instantiation of this class.
*/
private Locales() {
}
/**
* Returns available languages.
*
* @return Available languages.
*
* @todo Current implementation returns a hard-coded list.
* Future implementations may perform a more intelligent work.
*/
public static Locale[] getAvailableLanguages() {
return new Locale[] {
Locale.ENGLISH,
Locale.FRENCH,
Locale.GERMAN
// TODO: missing constants for SPANISH, PORTUGUES and GREEK
};
}
/**
* Returns the list of available locales.
*
* @return Available locales.
*/
public static Locale[] getAvailableLocales() {
final Locale[] languages = getAvailableLanguages();
Locale[] locales = Locale.getAvailableLocales();
int count = 0;
for (int i=0; i<locales.length; i++) {
final Locale locale = locales[i];
if (containsLanguage(languages, locale)) {
locales[count++] = locale;
}
}
locales = XArray.resize(locales, count);
return locales;
}
/**
* Returns {@code true} if the specified array of locales contains at least
* one element with the specified language.
*/
private static boolean containsLanguage(final Locale[] locales, final Locale language) {
final String code = language.getLanguage();
for (int i=0; i<locales.length; i++) {
if (code.equals(locales[i].getLanguage())) {
return true;
}
}
return false;
}
/**
* Returns the list of available locales formatted as string in the specified locale.
*
* @param locale The locale to use for formatting the strings to be returned.
* @return String descriptions of available locales.
*/
public static String[] getAvailableLocales(final Locale locale) {
final Locale[] locales = getAvailableLocales();
final String[] display = new String[locales.length];
for (int i=0; i<locales.length; i++) {
display[i] = locales[i].getDisplayName(locale);
}
Arrays.sort(display);
return display;
}
/**
* Prints the list of available locales.
*
* @param args Command-lines arguments.
*/
public static void main(String[] args) {
final Arguments arguments = new Arguments(args);
args = arguments.getRemainingArguments(0);
final String[] locales = getAvailableLocales(arguments.locale);
for (int i=0; i<locales.length; i++) {
arguments.out.println(locales[i]);
}
}
}