function _setLocaleWindows($category, $locale) { fbDebug::enter(); static $locale_cache = array(); if (isset($locale_cache[$locale])) { return fbLocale::_setLocale($category, $locale_cache[$locale]); } $language_id2 = $locale; if (preg_match('/^([^_]+)_(.*)$/', $locale, $matches)) { $language_id2 = $matches[1]; $country_id2 = $matches[2]; } fbDebug::dump($language_id2, '$language_id2'); do { // get the full language name for the ISO 639 2 character language code $language_name = fbISO639::getLanguageName($language_id2); fbDebug::dump($language_name, '$language_name'); if (!$language_id2) { // if it's not a valid language, then try the locale and return $rv = fbLocale::_setLocale($category, $locale); break; } // first, try the full language name $rv = fbLocale::_setLocale($category, $language_name); if ($rv) { break; } $language_id3 = fbISO639_Alpha3::getLanguageID($language_name); fbDebug::dump($language_id3, '$language_id3'); if (!$language_id3) { $rv = fbLocale::_setLocale($category, $locale); break; } // next, try the ISO 639 3 character language code $rv = fbLocale::_setLocale($category, $language_id3); if ($rv) { break; } // next, try the ISO 639 2 character language code $rv = fbLocale::_setLocale($category, $language_id2); if ($rv) { break; } // finally, try the original locale $rv = fbLocale::_setLocale($category, $locale); } while (false); $locale_cache[$locale] = $rv; fbDebug::leave($rv); return $rv; }