locale.java
来自「纯java操作系统jnode,安装简单和操作简单的个人使用的Java操作系统」· Java 代码 · 共 767 行 · 第 1/2 页
JAVA
767 行
public String getLanguage()
{
return language;
}
/**
* Returns the country code of this locale.
*
* @return country code portion of this locale, or an empty String
*/
public String getCountry()
{
return country;
}
/**
* Returns the variant code of this locale.
*
* @return the variant code portion of this locale, or an empty String
*/
public String getVariant()
{
return variant;
}
/**
* Gets the string representation of the current locale. This consists of
* the language, the country, and the variant, separated by an underscore.
* The variant is listed only if there is a language or country. Examples:
* "en", "de_DE", "_GB", "en_US_WIN", "de__POSIX", "fr__MAC".
*
* @return the string representation of this Locale
* @see #getDisplayName()
*/
public final String toString()
{
if (language.length() == 0 && country.length() == 0)
return "";
else if (country.length() == 0 && variant.length() == 0)
return language;
StringBuffer result = new StringBuffer(language);
result.append('_').append(country);
if (variant.length() != 0)
result.append('_').append(variant);
return result.toString();
}
/**
* Returns the three-letter ISO language abbrevation of this locale.
*
* @throws MissingResourceException if the three-letter code is not known
*/
public String getISO3Language()
{
if ("".equals(language))
return "";
int index
= ("aa,ab,af,am,ar,as,ay,az,ba,be,bg,bh,bi,bn,bo,br,ca,co,cs,cy,da,"
+ "de,dz,el,en,eo,es,et,eu,fa,fi,fj,fo,fr,fy,ga,gd,gl,gn,gu,ha,iw,"
+ "hi,hr,hu,hy,ia,in,ie,ik,in,is,it,iu,iw,ja,ji,jw,ka,kk,kl,km,kn,"
+ "ko,ks,ku,ky,la,ln,lo,lt,lv,mg,mi,mk,ml,mn,mo,mr,ms,mt,my,na,ne,"
+ "nl,no,oc,om,or,pa,pl,ps,pt,qu,rm,rn,ro,ru,rw,sa,sd,sg,sh,si,sk,"
+ "sl,sm,sn,so,sq,sr,ss,st,su,sv,sw,ta,te,tg,th,ti,tk,tl,tn,to,tr,"
+ "ts,tt,tw,ug,uk,ur,uz,vi,vo,wo,xh,ji,yo,za,zh,zu")
.indexOf(language);
if (index % 3 != 0 || language.length() != 2)
throw new MissingResourceException
("Can't find ISO3 language for " + language,
"java.util.Locale", language);
// Don't read this aloud. These are the three letter language codes.
return
("aarabkaframharaasmaymazebakbelbulbihbisbenbodbrecatcoscescymdandeu"
+ "dzoellengepospaesteusfasfinfijfaofrafrygaigdhglggrngujhauhebhinhrv"
+ "hunhyeinaindileipkindislitaikuhebjpnyidjawkatkazkalkhmkankorkaskur"
+ "kirlatlinlaolitlavmlgmrimkdmalmonmolmarmsamltmyanaunepnldnorociorm"
+ "oripanpolpusporquerohrunronruskinsansndsagsrpsinslkslvsmosnasomsqi"
+ "srpsswsotsunsweswatamteltgkthatirtuktgltsntonturtsotattwiuigukrurd"
+ "uzbvievolwolxhoyidyorzhazhozul")
.substring(index, index + 3);
}
/**
* Returns the three-letter ISO country abbrevation of the locale.
*
* @throws MissingResourceException if the three-letter code is not known
*/
public String getISO3Country()
{
if ("".equals(country))
return "";
int index
= ("AD,AE,AF,AG,AI,AL,AM,AN,AO,AQ,AR,AS,AT,AU,AW,AZ,BA,BB,BD,BE,BF,"
+ "BG,BH,BI,BJ,BM,BN,BO,BR,BS,BT,BV,BW,BY,BZ,CA,CC,CF,CG,CH,CI,CK,"
+ "CL,CM,CN,CO,CR,CU,CV,CX,CY,CZ,DE,DJ,DK,DM,DO,DZ,EC,EE,EG,EH,ER,"
+ "ES,ET,FI,FJ,FK,FM,FO,FR,FX,GA,GB,GD,GE,GF,GH,GI,GL,GM,GN,GP,GQ,"
+ "GR,GS,GT,GU,GW,GY,HK,HM,HN,HR,HT,HU,ID,IE,IL,IN,IO,IQ,IR,IS,IT,"
+ "JM,JO,JP,KE,KG,KH,KI,KM,KN,KP,KR,KW,KY,KZ,LA,LB,LC,LI,LK,LR,LS,"
+ "LT,LU,LV,LY,MA,MC,MD,MG,MH,MK,ML,MM,MN,MO,MP,MQ,MR,MS,MT,MU,MV,"
+ "MW,MX,MY,MZ,NA,NC,NE,NF,NG,NI,NL,NO,NP,NR,NU,NZ,OM,PA,PE,PF,PG,"
+ "PH,PK,PL,PM,PN,PR,PT,PW,PY,QA,RE,RO,RU,RW,SA,SB,SC,SD,SE,SG,SH,"
+ "SI,SJ,SK,SL,SM,SN,SO,SR,ST,SV,SY,SZ,TC,TD,TF,TG,TH,TJ,TK,TM,TN,"
+ "TO,TP,TR,TT,TV,TW,TZ,UA,UG,UM,US,UY,UZ,VA,VC,VE,VG,VI,VN,VU,WF,"
+ "WS,YE,YT,YU,ZA,ZM,ZR,ZW")
.indexOf(country);
if (index % 3 != 0 || language.length() != 2)
throw new MissingResourceException
("Can't find ISO3 country for " + country,
"java.util.Locale", country);
// Don't read this aloud. These are the three letter country codes.
return
("ANDAREAFGATGAIAALBARMANTAGOATAARGASMAUTAUSABWAZEBIHBRBBGDBELBFABGR"
+ "BHRBDIBENBMUBRNBOLBRABHSBTNBVTBWABLRBLZCANCCKCAFCOGCHECIVCOKCHLCMR"
+ "CHNCOLCRICUBCPVCXRCYPCZEDEUDJIDNKDMADOMDZAECUESTEGYESHERIESPETHFIN"
+ "FJIFLKFSMFROFRAFXXGABGBRGRDGEOGUFGHAGIBGRLGMBGINGLPGNQGRCSGSGTMGUM"
+ "GNBGUYHKGHMDHNDHRVHTIHUNIDNIRLISRINDIOTIRQIRNISLITAJAMJORJPNKENKGZ"
+ "KHMKIRCOMKNAPRKKORKWTCYMKAZLAOLBNLCALIELKALBRLSOLTULUXLVALBYMARMCO"
+ "MDAMDGMHLMKDMLIMMRMNGMACMNPMTQMRTMSRMLTMUSMDVMWIMEXMYSMOZNAMNCLNER"
+ "NFKNGANICNLDNORNPLNRUNIUNZLOMNPANPERPYFPNGPHLPAKPOLSPMPCNPRIPRTPLW"
+ "PRYQATREUROMRUSRWASAUSLBSYCSDNSWESGPSHNSVNSJMSVKSLESMRSENSOMSURSTP"
+ "SLVSYRSWZTCATCDATFTGOTHATJKTKLTKMTUNTONTMPTURTTOTUVTWNTZAUKRUGAUMI"
+ "USAURYUZBVATVCTVENVGBVIRVNMVUTWLFWSMYEMMYTYUGZAFZMBZARZWE")
.substring(index, index + 3);
}
/**
* Gets the country name suitable for display to the user, formatted
* for the default locale. This has the same effect as
* <pre>
* getDisplayLanguage(Locale.getDefault());
* </pre>
*
* @return the language name of this locale localized to the default locale,
* with the ISO code as backup
*/
public String getDisplayLanguage()
{
return getDisplayLanguage(defaultLocale);
}
/**
* Gets the language name suitable for display to the user, formatted
* for a specified locale.
*
* @param locale locale to use for formatting
* @return the language name of this locale localized to the given locale,
* with the ISO code as backup
*/
public String getDisplayLanguage(Locale locale)
{
try
{
ResourceBundle bundle
= ResourceBundle.getBundle("gnu.java.locale.iso639", locale);
return bundle.getString(language);
}
catch (MissingResourceException ex)
{
return language;
}
}
/**
* Returns the country name of this locale localized to the
* default locale. If the localized is not found, the ISO code
* is returned. This has the same effect as
* <pre>
* getDisplayCountry(Locale.getDefault());
* </pre>
*
* @return the country name of this locale localized to the given locale,
* with the ISO code as backup
*/
public String getDisplayCountry()
{
return getDisplayCountry(defaultLocale);
}
/**
* Gets the country name suitable for display to the user, formatted
* for a specified locale.
*
* @param locale locale to use for formatting
* @return the country name of this locale localized to the given locale,
* with the ISO code as backup
*/
public String getDisplayCountry(Locale locale)
{
try
{
ResourceBundle bundle =
ResourceBundle.getBundle("gnu.java.locale.iso3166", locale);
return bundle.getString(country);
}
catch (MissingResourceException ex)
{
return country;
}
}
/**
* Returns the variant name of this locale localized to the
* default locale. If the localized is not found, the variant code
* itself is returned. This has the same effect as
* <pre>
* getDisplayVariant(Locale.getDefault());
* </pre>
*
* @return the variant code of this locale localized to the given locale,
* with the ISO code as backup
*/
public String getDisplayVariant()
{
return getDisplayVariant(defaultLocale);
}
/**
* Returns the variant name of this locale localized to the
* given locale. If the localized is not found, the variant code
* itself is returned.
*
* @param locale locale to use for formatting
* @return the variant code of this locale localized to the given locale,
* with the ISO code as backup
*/
public String getDisplayVariant(Locale locale)
{
// XXX - load a bundle?
return variant;
}
/**
* Gets all local components suitable for display to the user, formatted
* for the default locale. For the language component, getDisplayLanguage
* is called. For the country component, getDisplayCountry is called.
* For the variant set component, getDisplayVariant is called.
*
* <p>The returned String will be one of the following forms:<br>
* <pre>
* language (country, variant)
* language (country)
* language (variant)
* country (variant)
* language
* country
* variant
* </pre>
*
* @return String version of this locale, suitable for display to the user
*/
public String getDisplayName()
{
return getDisplayName(defaultLocale);
}
/**
* Gets all local components suitable for display to the user, formatted
* for a specified locale. For the language component,
* getDisplayLanguage(Locale) is called. For the country component,
* getDisplayCountry(Locale) is called. For the variant set component,
* getDisplayVariant(Locale) is called.
*
* <p>The returned String will be one of the following forms:<br>
* <pre>
* language (country, variant)
* language (country)
* language (variant)
* country (variant)
* language
* country
* variant
* </pre>
*
* @param locale locale to use for formatting
* @return String version of this locale, suitable for display to the user
*/
public String getDisplayName(Locale locale)
{
StringBuffer result = new StringBuffer();
int count = 0;
String[] delimiters = {"", " (", ","};
if (language.length() != 0)
{
result.append(delimiters[count++]);
result.append(getDisplayLanguage(locale));
}
if (country.length() != 0)
{
result.append(delimiters[count++]);
result.append(getDisplayCountry(locale));
}
if (variant.length() != 0)
{
result.append(delimiters[count++]);
result.append(getDisplayVariant(locale));
}
if (count > 1)
result.append(")");
return result.toString();
}
/**
* Does the same as <code>Object.clone()</code> but does not throw
* a <code>CloneNotSupportedException</code>. Why anyone would
* use this method is a secret to me, since this class is immutable.
*
* @return the clone
*/
public Object clone()
{
// This class is final, so no need to use native super.clone().
return new Locale(language, country, variant);
}
/**
* Return the hash code for this locale. The hashcode is the logical
* xor of the hash codes of the language, the country and the variant.
* The hash code is precomputed, since <code>Locale</code>s are often
* used in hash tables.
*
* @return the hashcode
*/
public synchronized int hashCode()
{
// This method is synchronized because writeObject() might reset
// the hashcode.
return hashcode;
}
/**
* Compares two locales. To be equal, obj must be a Locale with the same
* language, country, and variant code.
*
* @param obj the other locale
* @return true if obj is equal to this
*/
public boolean equals(Object obj)
{
if (! (obj instanceof Locale))
return false;
Locale l = (Locale) obj;
return (language.equals(l.language)
&& country.equals(l.country)
&& variant.equals(l.variant));
}
/**
* Write the locale to an object stream.
*
* @param output the stream to write to
* @throws IOException if the write fails
* @serialData the hashcode should always be written as -1, and recomputed
* when reading it back
*/
private synchronized void writeObject(ObjectOutputStream output)
throws IOException
{
// Synchronized so that hashCode() doesn't get wrong value.
int tmpHashcode = hashcode;
hashcode = -1;
output.defaultWriteObject();
hashcode = tmpHashcode;
}
/**
* Reads a locale from the input stream.
*
* @param input the stream to read from
* @throws IOException if reading fails
* @throws ClassNotFoundException if reading fails
* @serialData the hashCode is always invalid and must be recomputed
*/
private void readObject(ObjectInputStream input)
throws IOException, ClassNotFoundException
{
input.defaultReadObject();
hashcode = language.hashCode() ^ country.hashCode() ^ variant.hashCode();
}
} // class Locale
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?