public static function fetchLocale($localeCode)
 {
     // Fetch locale list
     $localeList = eZLocale::localeList(false, true);
     $localeObj = eZLocale::instance($localeCode);
     // Check if $localeName exists
     if ($localeObj === null or is_object($localeObj) and !in_array($localeObj->localeFullCode(), $localeList)) {
         $result = array('error' => array('error_type' => 'kernel', 'error_code' => eZError::KERNEL_NOT_FOUND));
     } else {
         $result = array('result' => $localeObj);
     }
     return $result;
 }
Пример #2
0
function eZSetupLanguageList(&$languageList, &$defaultLanguage, &$defaultExtraLanguages)
{
    $locales = eZLocale::localeList(true);
    $languageList = array();
    $httpMap = array();
    $httpMapShort = array();
    // This alias array must be filled in with known names.
    // The key is the value from the locale INI file (HTTP group)
    // and the value is the HTTP alias.
    $httpAliases = array('no-bokmaal' => 'nb', 'no-nynorsk' => 'nn', 'ru-ru' => 'ru');
    foreach (array_keys($locales) as $localeKey) {
        $locale =& $locales[$localeKey];
        if (!$locale->attribute('country_variation')) {
            $languageList[] = $locale;
            $httpLocale = strtolower($locale->httpLocaleCode());
            $httpMap[$httpLocale] = $locale;
            list($httpLocaleShort) = explode('-', $httpLocale);
            $httpMapShort[$httpLocale] = $locale;
            if (isset($httpAliases[$httpLocale])) {
                $httpMapShort[$httpAliases[$httpLocale]] = $locale;
            }
        }
    }
    // bubble sort language based on language name. bubble bad, but only about 8-9 elements
    for ($i = 0; $i < count($languageList); $i++) {
        for ($n = 0; $n < count($languageList) - 1; $n++) {
            if (strcmp($languageList[$n]->attribute('language_name'), $languageList[$n + 1]->attribute('language_name')) > 0) {
                $tmpElement = $languageList[$n];
                $languageList[$n] = $languageList[$n + 1];
                $languageList[$n + 1] = $tmpElement;
            }
        }
    }
    $defaultLanguage = false;
    $defaultExtraLanguages = array();
    if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
        $acceptLanguages = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
        foreach ($acceptLanguages as $acceptLanguage) {
            list($acceptLanguageCode) = explode(';', $acceptLanguage);
            $acceptLanguageCode = strtolower($acceptLanguageCode);
            $languageCode = false;
            if (isset($httpMap[$acceptLanguageCode])) {
                $languageCode = $httpMap[$acceptLanguageCode]->localeCode();
            } elseif (isset($httpMapShort[$acceptLanguageCode])) {
                $languageCode = $httpMapShort[$acceptLanguageCode]->localeCode();
            }
            if ($languageCode) {
                if ($defaultLanguage === false) {
                    $defaultLanguage = $languageCode;
                }
                /*
                else
                {
                    $defaultExtraLanguages[] = $languageCode;
                }
                */
            }
        }
    }
    if ($defaultLanguage === false) {
        $defaultLanguage = 'eng-GB';
    }
    $defaultExtraLanguages = array_unique(array_diff($defaultExtraLanguages, array($defaultLanguage)));
}