/** * Get options array for locale dropdown * * @param bool $translatedName translation flag * @return array * @SuppressWarnings(PHPMD.CyclomaticComplexity) */ protected function _getOptionLocales($translatedName = false) { $options = []; $locales = $this->_localeResolver->getLocale()->getLocaleList(); $languages = $this->_localeResolver->getLocale()->getTranslationList('language', $this->_localeResolver->getLocale()); $countries = $this->_localeResolver->getLocale()->getTranslationList('territory', $this->_localeResolver->getLocale(), 2); //Zend locale codes for internal allowed locale codes $allowed = $this->_config->getAllowedLocales(); $allowedAliases = []; foreach ($allowed as $code) { $allowedAliases[\Zend_Locale::getAlias($code)] = $code; } //Process translating to internal locale codes from Zend locale codes $processedLocales = []; foreach ($locales as $code => $active) { if (array_key_exists($code, $allowedAliases)) { $processedLocales[$allowedAliases[$code]] = $active; } else { $processedLocales[$code] = $active; } } foreach (array_keys($processedLocales) as $code) { if (strstr($code, '_')) { if (!in_array($code, $allowed)) { continue; } $data = explode('_', $code); if (!isset($languages[$data[0]]) || !isset($countries[$data[1]])) { continue; } if ($translatedName) { $label = ucwords($this->_localeResolver->getLocale()->getTranslation($data[0], 'language', $code)) . ' (' . $this->_localeResolver->getLocale()->getTranslation($data[1], 'country', $code) . ') / ' . $languages[$data[0]] . ' (' . $countries[$data[1]] . ')'; } else { $label = $languages[$data[0]] . ' (' . $countries[$data[1]] . ')'; } $options[] = ['value' => $code, 'label' => $label]; } } return $this->_sortOptionArray($options); }
/** * Internal function for checking the locale * * @param string|Zend_Locale $locale Locale to check * @return string * @throws Zend_Locale_Exception */ private static function _checkLocale($locale) { if (empty($locale)) { $locale = new Zend_Locale(); } if (!Zend_Locale::isLocale((string) $locale, null, false)) { // require_once 'Zend/Locale/Exception.php'; throw new Zend_Locale_Exception("Locale (" . (string) $locale . ") is a unknown locale"); } if (Zend_Locale::isAlias($locale)) { // Return a valid CLDR locale so that the XML file can be loaded. return Zend_Locale::getAlias($locale); } return (string) $locale; }
/** * Test that locale names that have been dropped from CLDR continue to * work. */ public function testAliases() { $locale = new Zend_Locale('zh_CN'); $this->assertEquals(true, $locale->isLocale('zh_CN')); $this->assertEquals('zh', $locale->getLanguage()); $this->assertEquals('CN', $locale->getRegion()); $this->assertEquals(true, Zend_Locale::isAlias($locale)); $this->assertEquals(true, Zend_Locale::isAlias('zh_CN')); $this->assertEquals('zh_Hans_CN', Zend_Locale::getAlias('zh_CN')); $locale = new Zend_Locale('zh_Hans_CN'); $this->assertEquals(true, $locale->isLocale('zh_Hans_CN')); $this->assertEquals('zh', $locale->getLanguage()); $this->assertEquals('CN', $locale->getRegion()); $this->assertEquals(false, Zend_Locale::isAlias('zh_Hans_CN')); $this->assertEquals('zh_Hans_CN', Zend_Locale::getAlias('zh_Hans_CN')); }
/** * Get all labels of the attributes * * @return string[] with 'locale' => 'label' */ public function getLabels() { if (isset($this->_labels)) { return $this->_labels; } $labelsNode = $this->_xmlElement->{'labels'}; $labels = []; if ($labelsNode->count() > 0) { foreach ($labelsNode->children() as $labelNode) { /** @var SimpleXmlElement $labelNode */ $locale = $labelNode->getName(); if (Zend_Locale::isAlias($locale)) { $locale = Zend_Locale::getAlias($locale); } $label = (string) $labelNode; $labels[$locale] = $label; } } $this->_labels = $labels; return $labels; }