/* * WPCleaner: A tool to help on Wikipedia maintenance tasks. * Copyright (C) 2013 Nicolas Vervelle * * See README.txt file for licensing information. */ package org.wikipediacleaner.api.constants; import java.util.ArrayList; import java.util.List; import java.util.Locale; import java.util.ResourceBundle; import org.wikipediacleaner.i18n.Messages; /** * Encapsulate possible languages. */ public enum EnumLanguage { AST (new Locale("ast") , "Asturian"), AZ (new Locale("az") , "Azerbaijani"), BN (new Locale("bn") , "Bengali"), CS (new Locale("cs") , "Czech"), DA (new Locale("da") , "Danish"), DE (Locale.GERMAN , "German"), EL (new Locale("el") , "Greek"), EN (Locale.ENGLISH , "English"), EN_GB(new Locale("en_GB") , "English (United Kingdom)"), EO (new Locale("eo") , "Esperanto"), ES (new Locale("es") , "Spanish"), FA (new Locale("fa") , "Persian"), FR (Locale.FRENCH , "Français"), GL (new Locale("gl") , "Galician"), HE (new Locale("he") , "Hebrew"), HU (new Locale("hu") , "Hungarian"), ID (new Locale("id") , "Indonesian"), IS (new Locale("is") , "Icelandic"), IT (Locale.ITALIAN , "Italian"), JA (Locale.JAPANESE , "Japanese"), KO (Locale.KOREAN , "Korean"), MS (new Locale("ms") , "Malay"), NB (new Locale("nb") , "Norwegian Bokmal"), NL (new Locale("nl") , "Dutch"), OC (new Locale("oc") , "Occitan"), PL (new Locale("pl") , "Polish"), PS (new Locale("ps") , "Pashto"), PT_BR(new Locale("pt", "BR"), "Brazilian Portuguese"), RU (new Locale("ru") , "Russian"), SV (new Locale("sv") , "Swedish"), TR (new Locale("tr") , "Turkish"), UK (new Locale("uk") , "Ukrainian"), UR (new Locale("ur") , "Urdu"), ZH_CN(new Locale("zh", "CN"), "Chinese (Simplified)"); private final String code; private final Locale locale; private final String language; private final ResourceBundle bundle; /** * @param locale Locale. * @param language Language. */ EnumLanguage(Locale locale, String language) { this.code = locale.toString(); this.locale = locale; this.language = language; ResourceBundle tmpBundle = null; try { Class bundleClass = Class.forName(Messages.class.getName() + "_" + code); if ((bundleClass != null) && (ResourceBundle.class.isAssignableFrom(bundleClass))) { tmpBundle = (ResourceBundle) bundleClass.newInstance(); } } catch (ClassNotFoundException e) { // No bundle, we simply don't have translation for this language } catch (IllegalAccessException e) { // Shouldn't happen, but same consequence as ClassNotFoundException } catch (InstantiationException e) { // Shouldn't happen, but same consequence as ClassNotFoundException } bundle = tmpBundle; } /** * @return Vector of all languages. */ public static List<EnumLanguage> getList() { List<EnumLanguage> list = new ArrayList<EnumLanguage>(EnumLanguage.values().length); for (EnumLanguage e : EnumLanguage.values()) { list.add(e); } return list; } /** * @param code Requested code language. * @return Corresponding language. */ public static EnumLanguage getLanguage(String code) { for (EnumLanguage e : EnumLanguage.values()) { if (e.getCode().equals(code)) { return e; } } return getDefaultLanguage(); } /** * @return Language. */ public static EnumLanguage getDefaultLanguage() { Locale locale = Locale.getDefault(); if ((locale != null) && (locale.getLanguage() != null)) { for (EnumLanguage e : EnumLanguage.values()) { if (e.getCode().equals(locale.getLanguage())) { return e; } } } return EN; } /** * @return Code. */ public String getCode() { return code; } /** * @return Locale. */ public Locale getLocale() { return locale; } /** * @return Language. */ public String getLanguage() { return language; } /** * @return Resource bundle for translation. */ public final ResourceBundle getResourceBundle() { return bundle; } /* (non-Javadoc) * @see java.lang.Enum#toString() */ @Override public String toString() { return getCode() + " - " + getLanguage(); } }