/** * Checks if a locale identifier is a real locale or not * Examples: * "en_XX" refers to "en", which returns true * "XX_yy" refers to "root", which returns false * * @param string|Zend_Locale $locale Locale to check for * @param boolean $create If true, create a default locale, if $locale is empty * @return false|string false if given locale is not a locale, else the locale identifier is returned */ public static function isLocale($locale, $create = false) { if (empty($locale) and $create === true) { $locale = new self(); } if ($locale instanceof Zend_Locale) { return $locale->toString(); } if (!is_string($locale)) { return false; } if (empty(self::$_auto)) { $temp = new self($locale); self::$_auto = $temp->getDefault(null, false); self::$_browser = $temp->getDefault(self::BROWSER, false); self::$_environment = $temp->getDefault(self::ENVIRONMENT, false); } if ($locale == 'auto') { $locale = self::$_auto; } if ($locale == 'browser') { $locale = self::$_browser; } if ($locale == 'environment') { $locale = self::$_environment; } if (is_array($locale)) { $locale = key($locale); } if (array_key_exists($locale, self::$_localeData)) { return $locale; } else { $locale = explode('_', $locale); if (array_key_exists($locale[0], self::$_localeData)) { return $locale[0]; } } return false; }
/** * Internal function, returns a single locale on detection * * @param string|Zend_Locale $locale (Optional) Locale to work on * @param boolean $strict (Optional) Strict preparation * @throws Zend_Locale_Exception When no locale is set which is only possible when the class was wrong extended * @return string */ private static function _prepareLocale($locale, $strict = false) { if ($locale instanceof Zend_Locale) { $locale = $locale->toString(); } if (is_array($locale)) { return ''; } if (empty(self::$_auto) === true) { self::$_browser = self::getBrowser(); self::$_environment = self::getEnvironment(); self::$_breakChain = true; self::$_auto = self::getBrowser() + self::getEnvironment() + self::getDefault(); } if (!$strict) { if ($locale === 'browser') { $locale = self::$_browser; } if ($locale === 'environment') { $locale = self::$_environment; } if ($locale === 'default') { $locale = self::$_default; } if ($locale === 'auto' or $locale === null) { $locale = self::$_auto; } if (is_array($locale) === true) { $locale = key($locale); } } // This can only happen when someone extends Zend_Locale and erases the default if ($locale === null) { require_once 'Zend/Locale/Exception.php'; throw new Zend_Locale_Exception('Autodetection of Locale has been failed!'); } if (strpos($locale, '-') !== false) { $locale = strtr($locale, '-', '_'); } $parts = explode('_', $locale); if (!isset(self::$_localeData[$parts[0]])) { if (count($parts) == 1 && array_key_exists($parts[0], self::$_territoryData)) { return self::$_territoryData[$parts[0]]; } return ''; } foreach ($parts as $key => $value) { if (strlen($value) < 2 || strlen($value) > 3) { unset($parts[$key]); } } $locale = implode('_', $parts); return (string) $locale; }
/** * Internal function, returns a single locale on detection * * @param string|Zend_Locale $locale (Optional) Locale to work on * @param boolean $strict (Optional) Strict preparation * @throws Zend_Locale_Exception When no locale is set which is only possible when the class was wrong extended * @return string */ private static function _prepareLocale($locale, $strict = false) { if (is_array($locale)) { return ''; } if (empty(self::$_auto) === true) { self::$_browser = self::getBrowser(); self::$_environment = self::getEnvironment(); self::$_auto = self::getBrowser() + self::getEnvironment() + self::getDefault(); } if (!$strict) { if ($locale === 'browser') { $locale = self::$_browser; } if ($locale === 'environment') { $locale = self::$_environment; } if ($locale === 'default') { $locale = self::$_default; } if ($locale === 'auto' or empty($locale)) { $locale = self::$_auto; } if (is_array($locale) === true) { $locale = key($locale); } } // This can only happen when someone extends Zend_Locale and erases the default if (empty($locale)) { require_once 'Zend/Locale/Exception.php'; throw new Zend_Locale_Exception('Autodetection of Locale has been failed!'); } if (strpos($locale, '-') !== false) { $locale = strtr($locale, '-', '_'); } return (string) $locale; }