Exemple #1
0
 /**
  * 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);
 }
Exemple #2
0
 /**
  * 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;
 }