📄 language.java
字号:
/******************************************************************************
* The contents of this file are subject to the Compiere License Version 1.1
* ("License"); You may not use this file except in compliance with the License
* You may obtain a copy of the License at http://www.compiere.org/license.html
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
* the specific language governing rights and limitations under the License.
* The Original Code is Compiere ERP & CRM Smart Business Solution. The Initial
* Developer of the Original Code is Jorg Janke. Portions created by Jorg Janke
* are Copyright (C) 1999-2005 Jorg Janke.
* All parts are Copyright (C) 1999-2005 ComPiere, Inc. All Rights Reserved.
* Contributor(s): ______________________________________.
*****************************************************************************/
package org.compiere.util;
import java.awt.*;
import java.io.*;
import java.text.*;
import java.util.*;
import java.util.logging.*;
import javax.print.attribute.standard.*;
/**
* Language Management.
*
* @author Jorg Janke
* @version $Id: Language.java,v 1.52 2005/12/02 16:21:09 jjanke Exp $
*/
public class Language implements Serializable
{
/**************************************************************************
* Languages
* http://www.ics.uci.edu/pub/ietf/http/related/iso639.txt
* Countries
* http://www.chemie.fu-berlin.de/diverse/doc/ISO_3166.html
*************************************************************************/
/** Base Language */
public static final String AD_Language_en_US = "en_US";
/** Additional Languages */
private static final String AD_Language_en_GB = "en_GB";
private static final String AD_Language_en_AU = "en_AU";
private static final String AD_Language_ca_ES = "ca_ES";
private static final String AD_Language_hr_HR = "hr_HR";
private static final String AD_Language_de_DE = "de_DE";
private static final String AD_Language_it_IT = "it_IT";
private static final String AD_Language_es_ES = "es_ES";
private static final String AD_Language_fr_FR = "fr_FR";
private static final String AD_Language_bg_BG = "bg_BG";
private static final String AD_Language_th_TH = "th_TH";
private static final String AD_Language_pl_PL = "pl_PL";
private static final String AD_Language_zh_TW = "zh_TW";
private static final String AD_Language_nl_NL = "nl_NL";
private static final String AD_Language_no_NO = "no_NO";
private static final String AD_Language_pt_BR = "pt_BR";
private static final String AD_Language_ru_RU = "ru_RU";
private static final String AD_Language_sl_SI = "sl_SI";
private static final String AD_Language_sv_SE = "sv_SE";
private static final String AD_Language_vi_VN = "vi_VN";
private static final String AD_Language_zh_CN = "zh_CN";
private static final String AD_Language_da_DK = "da_DK";
private static final String AD_Language_ml_ML = "ml_ML";
private static final String AD_Language_fa_IR = "fa_IR";
private static final String AD_Language_fi_FI = "fi_FI";
private static final String AD_Language_ro_RO = "ro_RO";
private static final String AD_Language_ja_JP = "ja_JP";
private static final String AD_Language_in_ID = "in_ID";
private static final String AD_Language_ar_TN = "ar_TN";
/***
* System Languages.
* If you want to add a language, extend the array
* - or use the addLanguage() method.
**/
static private Language[] s_languages = {
new Language ("English",
AD_Language_en_US, Locale.US, null, null,
MediaSize.NA.LETTER), // Base Language
new Language ("\u7b80\u4f53\u4e2d\u6587 (CN)",
AD_Language_zh_CN, Locale.CHINA, null, "yyyy-MM-dd",
MediaSize.ISO.A4),
new Language ("\u7e41\u9ad4\u4e2d\u6587 (TW)",
AD_Language_zh_TW, Locale.TAIWAN, null, null, // dd.MM.yy
MediaSize.ISO.A4),
// ordered by locale
// Not predefined Locales - need to define decimal Point and date pattern (not sure about time)
new Language ("\uFE94\uFEF4\uFE91\uFEAE\uFECC\uFEDF\uFE8D (AR)",
AD_Language_ar_TN, new Locale("ar","TN"), new Boolean(true), "dd.MM.yyyy",
MediaSize.ISO.A4),
new Language ("\u0411\u044A\u043B\u0433\u0430\u0440\u0441\u043A\u0438 (BG)",
AD_Language_bg_BG, new Locale("bg","BG"), new Boolean(false), "dd/MM/yyyy",
MediaSize.ISO.A4),
new Language ("Catal\u00e0",
AD_Language_ca_ES, new Locale("ca", "ES"), null, "dd/MM/yyyy",
MediaSize.ISO.A4),
new Language ("Deutsch",
AD_Language_de_DE, Locale.GERMANY, null, null,
MediaSize.ISO.A4),
new Language ("Dansk",
AD_Language_da_DK, new Locale("da","DK"), new Boolean(false), "dd-MM-yyyy",
MediaSize.ISO.A4),
new Language ("English (AU)",
AD_Language_en_AU, new Locale("en","AU"), null, "dd/MM/yyyy",
MediaSize.ISO.A4),
new Language ("English (UK)",
AD_Language_en_GB, Locale.UK, null, null,
MediaSize.ISO.A4),
new Language ("Espa\u00f1ol",
AD_Language_es_ES, new Locale("es","ES"), new Boolean(false), "dd/MM/yyyy",
MediaSize.ISO.A4),
new Language ("Farsi",
AD_Language_fa_IR, new Locale("fa","IR"), new Boolean(false), "dd-MM-yyyy",
MediaSize.ISO.A4),
new Language ("Finnish",
AD_Language_fi_FI, new Locale("fi","FI"), new Boolean(true), "dd.MM.yyyy",
MediaSize.ISO.A4),
new Language ("Fran\u00e7ais",
AD_Language_fr_FR, Locale.FRANCE, null, null, // dd.MM.yy
MediaSize.ISO.A4),
new Language ("Hrvatski",
AD_Language_hr_HR, new Locale("hr", "HR"), null, "dd.MM.yyyy",
MediaSize.ISO.A4),
new Language ("Indonesia Bahasa",
AD_Language_in_ID, new Locale("in","ID"), new Boolean(false), "dd-MM-yyyy",
MediaSize.ISO.A4),
new Language ("Italiano",
AD_Language_it_IT, Locale.ITALY, null, null, // dd.MM.yy
MediaSize.ISO.A4),
new Language ("\u65e5\u672c\u8a9e (JP)",
AD_Language_ja_JP, Locale.JAPAN, null, null,
MediaSize.ISO.A4),
new Language ("Malay",
AD_Language_ml_ML, new Locale("ml","ML"), new Boolean(false), "dd-MM-yyyy",
MediaSize.ISO.A4),
new Language ("Nederlands",
AD_Language_nl_NL, new Locale("nl","NL"), new Boolean(false), "dd-MM-yyyy",
MediaSize.ISO.A4),
new Language ("Norsk",
AD_Language_no_NO, new Locale("no","NO"), new Boolean(false), "dd/MM/yyyy",
MediaSize.ISO.A4),
new Language ("Polski",
AD_Language_pl_PL, new Locale("pl","PL"), new Boolean(false), "dd-MM-yyyy",
MediaSize.ISO.A4),
new Language ("Portuguese (BR)",
AD_Language_pt_BR, new Locale("pt","BR"), new Boolean(false), "dd/MM/yyyy",
MediaSize.ISO.A4),
new Language ("Rom\u00e2n\u0103",
AD_Language_ro_RO, new Locale("ro","RO"), new Boolean(false), "dd.MM.yyyy",
MediaSize.ISO.A4),
new Language ("\u0420\u0443\u0441\u0441\u043a\u0438\u0439 (Russian)",
AD_Language_ru_RU, new Locale("ru","RU"), new Boolean(false), "dd-MM-yyyy",
MediaSize.ISO.A4),
new Language ("Slovenski",
AD_Language_sl_SI, new Locale("sl", "SI"), null, "dd.MM.yyyy",
MediaSize.ISO.A4),
new Language ("Svenska",
AD_Language_sv_SE, new Locale("sv","SE"), new Boolean(false), "dd.MM.yyyy",
MediaSize.ISO.A4),
new Language ("\u0e44\u0e17\u0e22 (TH)",
AD_Language_th_TH, new Locale("th","TH"), new Boolean(false), "dd/MM/yyyy",
MediaSize.ISO.A4),
new Language ("Vi\u1EC7t Nam",
AD_Language_vi_VN, new Locale("vi","VN"), new Boolean(false), "dd-MM-yyyy",
MediaSize.ISO.A4)
};
/** Default Language */
private static Language s_loginLanguage = s_languages[0];
/** Logger */
private static Logger log = Logger.getLogger(Language.class.getName());
/**
* Get Number of Languages
* @return Language count
*/
public static int getLanguageCount()
{
return s_languages.length;
} // getLanguageCount
/**
* Get Language
* @param index index
* @return Language
*/
public static Language getLanguage (int index)
{
if (index < 0 || index >= s_languages.length)
return s_loginLanguage;
return s_languages[index];
} // getLanguage
/**
* Add Language to supported Languages
* @param language new language
*/
public static void addLanguage (Language language)
{
if (language == null)
return;
ArrayList<Language> list = new ArrayList<Language>(Arrays.asList(s_languages));
list.add(language);
s_languages = new Language[list.size()];
list.toArray(s_languages);
} // addLanguage
/**************************************************************************
* Get Language.
* If language does not exist, create it on the fly assuming taht it is valid
* @param langInfo either language (en) or locale (en-US) or display name
* @return Name (e.g. Deutsch)
*/
public static Language getLanguage (String langInfo)
{
String lang = langInfo;
if (lang == null || lang.length() == 0)
lang = System.getProperty("user.language", "");
// Search existing Languages
for (int i = 0; i < s_languages.length; i++)
{
if (lang.equals(s_languages[i].getName())
|| lang.equals(s_languages[i].getLanguageCode())
|| lang.equals(s_languages[i].getAD_Language()))
return s_languages[i];
}
// Create Language on the fly
if (lang.length() == 5) // standard format <language>_<Country>
{
String language = lang.substring(0,2);
String country = lang.substring(3);
Locale locale = new Locale(language, country);
log.info ("Adding Language=" + language + ", Country=" + country + ", Locale=" + locale);
Language ll = new Language (lang, lang, locale);
// Add to Languages
ArrayList<Language> list = new ArrayList<Language>(Arrays.asList(s_languages));
list.add(ll);
s_languages = new Language [list.size()];
list.toArray(s_languages);
// Return Language
return ll;
}
// Get the default one
return s_loginLanguage;
} // getLanguage
/**
* Is it the base language
* @param langInfo either language (en) or locale (en-US) or display name
* @return true if base language
*/
public static boolean isBaseLanguage (String langInfo)
{
if (langInfo == null || langInfo.length() == 0
|| langInfo.equals(s_languages[0].getName())
|| langInfo.equals(s_languages[0].getLanguageCode())
|| langInfo.equals(s_languages[0].getAD_Language()))
return true;
return false;
} // isBaseLanguage
/**
* Get Base Language
* @return Base Language
*/
public static Language getBaseLanguage()
{
return s_languages[0];
} // getBase
/**
* Get Base Language code. (e.g. en-US)
* @return Base Language
*/
public static String getBaseAD_Language()
{
return s_languages[0].getAD_Language();
} // getBase
/**
* Get Supported Locale
* @param langInfo either language (en) or locale (en-US) or display name
* @return Supported Locale
*/
public static Locale getLocale (String langInfo)
{
return getLanguage(langInfo).getLocale();
} // getLocale
/**
* Get Supported Language
* @param langInfo either language (en) or locale (en-US) or display name
* @return AD_Language (e.g. en-US)
*/
public static String getAD_Language (String langInfo)
{
return getLanguage(langInfo).getAD_Language();
} // getAD_Language
/**
* Get Supported Language
* @param locale Locale
* @return AD_Language (e.g. en-US)
*/
public static String getAD_Language (Locale locale)
{
if (locale != null)
{
for (int i = 0; i < s_languages.length; i++)
{
if (locale.equals(s_languages[i].getLocale()))
return s_languages[i].getAD_Language();
}
}
return s_loginLanguage.getAD_Language();
} // getLocale
/**
* Get Language Name
* @param langInfo either language (en) or locale (en-US) or display name
* @return Langauge Name (e.g. English)
*/
public static String getName (String langInfo)
{
return getLanguage(langInfo).getName();
} // getAD_Language
/**
* Returns true if Decimal Point (not comma)
* @param langInfo either language (en) or locale (en-US) or display name
* @return use of decimal point
*/
public static boolean isDecimalPoint(String langInfo)
{
return getLanguage(langInfo).isDecimalPoint();
} // getAD_Language
/**
* Get Display names of supported languages
* @return Array of Language names
*/
public static String[] getNames()
{
String[] retValue = new String[s_languages.length];
for (int i = 0; i < s_languages.length; i++)
retValue[i] = s_languages[i].getName();
return retValue;
} // getNames
/**************************************************************************
* Get Default Login Language
* @return default Language
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -