private function generateLocaleName($locale, $displayLocale) { $name = null; $lang = \Locale::getPrimaryLanguage($locale); $script = \Locale::getScript($locale); $region = \Locale::getRegion($locale); $variants = \Locale::getAllVariants($locale); // Currently the only available variant is POSIX, which we don't want // to include in the list if (count($variants) > 0) { return null; } // Some languages are translated together with their region, // i.e. "en_GB" is translated as "British English" // we don't include these languages though because they mess up // the name sorting // $name = $this->langBundle->getLanguageName($displayLocale, $lang, $region); // Some languages are simply not translated // Example: "az" (Azerbaijani) has no translation in "af" (Afrikaans) if (null === ($name = $this->languageBundle->getLanguageName($lang, null, $displayLocale))) { return null; } // "as" (Assamese) has no "Variants" block //if (!$langBundle->get('Variants')) { // continue; //} $extras = array(); // Discover the name of the script part of the locale // i.e. in zh_Hans_MO, "Hans" is the script if ($script) { // Some scripts are not translated into every language if (null === ($scriptName = $this->languageBundle->getScriptName($script, $lang, $displayLocale))) { return null; } $extras[] = $scriptName; } // Discover the name of the region part of the locale // i.e. in de_AT, "AT" is the region if ($region) { // Some regions are not translated into every language if (null === ($regionName = $this->regionBundle->getCountryName($region, $displayLocale))) { return null; } $extras[] = $regionName; } if (count($extras) > 0) { // Remove any existing extras // For example, in German, zh_Hans is "Chinesisch (vereinfacht)". // The latter is the script part which is already included in the // extras and will be appended again with the other extras. if (preg_match('/^(.+)\\s+\\([^\\)]+\\)$/', $name, $matches)) { $name = $matches[1]; } $name .= ' (' . implode(', ', $extras) . ')'; } return $name; }
/** * Returns the variants of a locale. * * @return CArrayObject The locale's variants of type `CUStringObject` (always uppercased). */ public function variants() { assert('$this->hasVariants()', vs(isset($this), get_defined_vars())); $variants = Locale::getAllVariants($this->m_name); if (is_cmap($variants)) { return oop_a(CArray::fromPArray($variants)); } else { return oop_a(CArray::make()); } }
// Don't include ICU's root resource bundle if ($translatedLocale === 'root') { continue; } $langBundle = load_resource_bundle($translatedLocale, $langDir); $regionBundle = load_resource_bundle($translatedLocale, $regionDir); $localeNames = array(); foreach ($supportedLocales as $supportedLocale) { // Don't include ICU's root resource bundle if ($supportedLocale === 'root') { continue; } $lang = \Locale::getPrimaryLanguage($supportedLocale); $script = \Locale::getScript($supportedLocale); $region = \Locale::getRegion($supportedLocale); $variants = \Locale::getAllVariants($supportedLocale); // Currently the only available variant is POSIX, which we don't want // to include in the list if (count($variants) > 0) { continue; } $langName = $langBundle->get('Languages')->get($lang); $extras = array(); // Some languages are simply not translated // Example: "az" (Azerbaijani) has no translation in "af" (Afrikaans) if (!$langName) { continue; } // "af" (Afrikaans) has no "Scripts" block if (!$langBundle->get('Scripts')) { continue;
/** * Gets the variants for the input locale * * @return array A list of all variants subtag for the locale or NULL if not present */ public function getAllVariants() { return IntlLocale::getAllVariants($this->getLocale()); }