/** * gets a supported locale * * @param string $_localeString * @return Zend_Locale * @throws Tinebase_Exception_NotFound */ public static function getLocale($_localeString = 'auto') { Zend_Locale::$compatibilityMode = false; if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) { Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . " given localeString '{$_localeString}'"); } try { $locale = new Zend_Locale($_localeString); // check if we suppot the locale $supportedLocales = array(); $availableTranslations = self::getAvailableTranslations(); foreach ($availableTranslations as $translation) { $supportedLocales[] = $translation['locale']; } if (!in_array($_localeString, $supportedLocales)) { if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) { Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . " '{$locale}' is not supported, checking fallback"); } // check if we find suiteable fallback $language = $locale->getLanguage(); switch ($language) { case 'zh': $locale = new Zend_Locale('zh_CN'); break; default: if (in_array($language, $supportedLocales)) { $locale = new Zend_Locale($language); } else { if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) { Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . " no suiteable lang fallback found within this locales: " . print_r($supportedLocales, true)); } throw new Tinebase_Exception_NotFound('No suiteable lang fallback found.'); } break; } } } catch (Exception $e) { if (Tinebase_Core::isLogLevel(Zend_Log::NOTICE)) { Tinebase_Core::getLogger()->notice(__METHOD__ . '::' . __LINE__ . ' ' . $e->getMessage() . ', falling back to locale en.'); } if (Tinebase_Core::isLogLevel(Zend_Log::TRACE)) { Tinebase_Core::getLogger()->trace(__METHOD__ . '::' . __LINE__ . ' ' . $e->getTraceAsString()); } $locale = new Zend_Locale('en'); } if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) { Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . " selected locale: '{$locale}'"); } return $locale; }