示例#1
0
 /**
  * @param $locale
  */
 public function setLocale($locale)
 {
     if ((string) $locale != self::$locale && \Zend_Locale::isLocale($locale)) {
         $locale = new \Zend_Locale($locale);
         \Zend_Registry::set('Zend_Locale', $locale);
         $this->getResponse()->setHeader("Content-Language", strtolower(str_replace("_", "-", (string) $locale)), true);
         // now we prepare everything for setlocale()
         $localeList = [(string) $locale . ".utf8"];
         if ($locale->getRegion()) {
             // add only the language to the list as a fallback
             $localeList[] = $locale->getLanguage() . ".utf8";
         } else {
             // try to get a list of territories for this language
             // usually OS have no "language only" locale, only the combination language-territory (eg. Debian)
             $languageRegionMapping = (include PIMCORE_PATH . "/config/data/cldr-language-territory-mapping.php");
             if (isset($languageRegionMapping[$locale->getLanguage()])) {
                 foreach ($languageRegionMapping[$locale->getLanguage()] as $territory) {
                     $localeList[] = $locale->getLanguage() . "_" . $territory . ".utf8";
                 }
             }
         }
         // currently we have to exclude LC_MONETARY from being set, because of issues in combination with
         // Zend_Currency -> see also https://github.com/zendframework/zf1/issues/706
         // once this is resolved we can safely set the locale for LC_MONETARY as well.
         setlocale(LC_ALL & ~LC_MONETARY, $localeList);
         // reconfigure translation management
         if (\Zend_Registry::isRegistered("Zend_Translate")) {
             $translator = \Zend_Registry::get("Zend_Translate");
             if ($translator instanceof Translate) {
                 $translator->setLocale($locale);
             }
         }
         self::$locale = (string) $locale;
     }
 }