
// // Copyright (c) 2007, Brian Frank and Andy Frank // Licensed under the Academic Free License version 3.0 // // History: // 03 Nov 07 Brian Frank Creation // ** ** Locale models a cultural language and region/country. ** See `docLang::Localization` for details. ** @simple const class Locale { ////////////////////////////////////////////////////////////////////////// // Construction ////////////////////////////////////////////////////////////////////////// ** ** Parse a locale according to the `toStr` format. ** static Locale fromStr(Str s) ** ** Private constructor ** private new privateMake() ////////////////////////////////////////////////////////////////////////// // Thread ////////////////////////////////////////////////////////////////////////// ** ** Get the current thread's locale. ** static Locale current() ** ** Set the current thread's locale. ** Throw NullErr if null is passed. ** static Void setCurrent(Locale locale) ** ** Run the specified function using this locale as the ** the thread's current locale. This method guarantees ** that upon return the thread current's locale remains ** unchanged. ** Void with(|,| func) ////////////////////////////////////////////////////////////////////////// // Identity ////////////////////////////////////////////////////////////////////////// ** ** Get the language as a lowercase ISO 639 two letter code. ** Str lang() ** ** Get the country/region as an uppercase ISO 3166 two ** letter code. Return null if the country is unspecified. ** Str country() ** ** Compute hash code base on normalized toStr format. ** override Int hash() ** ** Equality is based on the normalized toStr format. ** override Bool equals(Obj obj) ** ** Return string representation: ** <locale> := <lang> ["-" <country>] ** <lang> := lowercase ISO 636 two letter code ** <country> := uppercase ISO 3166 two letter code ** override Str toStr() ////////////////////////////////////////////////////////////////////////// // Properties ////////////////////////////////////////////////////////////////////////// ** ** Resolve a localized property for the specified pod/key pair. ** The following rules are used for resolution: ** 1. Find the pod and use its resource files ** 2. Lookup via '/locale/{Locale.toStr}.props' ** 3. Lookup via '/locale/{Locale.lang}.props' ** 4. Lookup via '/locale/en.props' ** 5. If all else fails return 'pod::key' ** Str prop(Str pod, Str key) }