📄 locale.java
字号:
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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -