- umtx_lock(NULL);
- UBool needInit = (gLocaleCache == NULL);
- umtx_unlock(NULL);
-
- if (needInit) {
- Locale *tLocaleCache = new Locale[(int)eMAX_LOCALES];
- if (tLocaleCache == NULL) {
- return NULL;
- }
- tLocaleCache[eROOT] = Locale("");
- tLocaleCache[eENGLISH] = Locale("en");
- tLocaleCache[eFRENCH] = Locale("fr");
- tLocaleCache[eGERMAN] = Locale("de");
- tLocaleCache[eITALIAN] = Locale("it");
- tLocaleCache[eJAPANESE] = Locale("ja");
- tLocaleCache[eKOREAN] = Locale("ko");
- tLocaleCache[eCHINESE] = Locale("zh");
- tLocaleCache[eFRANCE] = Locale("fr", "FR");
- tLocaleCache[eGERMANY] = Locale("de", "DE");
- tLocaleCache[eITALY] = Locale("it", "IT");
- tLocaleCache[eJAPAN] = Locale("ja", "JP");
- tLocaleCache[eKOREA] = Locale("ko", "KR");
- tLocaleCache[eCHINA] = Locale("zh", "CN");
- tLocaleCache[eTAIWAN] = Locale("zh", "TW");
- tLocaleCache[eUK] = Locale("en", "GB");
- tLocaleCache[eUS] = Locale("en", "US");
- tLocaleCache[eCANADA] = Locale("en", "CA");
- tLocaleCache[eCANADA_FRENCH] = Locale("fr", "CA");
-
- umtx_lock(NULL);
- if (gLocaleCache == NULL) {
- gLocaleCache = tLocaleCache;
- tLocaleCache = NULL;
- ucln_common_registerCleanup(UCLN_COMMON_LOCALE, locale_cleanup);
- }
- umtx_unlock(NULL);
- if (tLocaleCache) {
- delete [] tLocaleCache; // Fancy array delete will destruct each member.
- }
- }