Beispiel #1
0
function caGetUserLocaleRules($ps_item_locale = null, $pa_preferred_locales = null)
{
    global $g_ui_locale, $g_ui_locale_id, $g_user_locale_rules;
    if (isset($g_user_locale_rules[$ps_item_locale])) {
        return $g_user_locale_rules[$ps_item_locale];
    }
    $o_config = Configuration::load();
    $va_default_locales = $o_config->getList('locale_defaults');
    $va_preferred_locales = array();
    if ($ps_item_locale) {
        // if item locale is passed as locale_id we need to convert it to a code
        if (is_numeric($ps_item_locale)) {
            $t_locales = new ca_locales();
            if ($t_locales->load($ps_item_locale)) {
                $ps_item_locale = $t_locales->getCode();
            } else {
                $ps_item_locale = null;
            }
        }
        if ($ps_item_locale) {
            $va_preferred_locales[$ps_item_locale] = true;
        }
    }
    if (is_array($pa_preferred_locales)) {
        foreach ($pa_preferred_locales as $vs_preferred_locale) {
            $va_preferred_locales[$vs_preferred_locale] = true;
        }
    }
    $va_fallback_locales = array();
    if (is_array($va_default_locales)) {
        foreach ($va_default_locales as $vs_fallback_locale) {
            if (!isset($va_preferred_locales[$vs_fallback_locale]) || !$va_preferred_locales[$vs_fallback_locale]) {
                $va_fallback_locales[$vs_fallback_locale] = true;
            }
        }
    }
    if ($g_ui_locale) {
        if (!isset($va_preferred_locales[$g_ui_locale]) || !$va_preferred_locales[$g_ui_locale]) {
            $va_preferred_locales[$g_ui_locale] = true;
        }
    }
    $va_rules = array('preferred' => $va_preferred_locales, 'fallback' => $va_fallback_locales);
    if ($ps_item_locale) {
        $g_user_locale_rules[$ps_item_locale] = $va_rules;
    }
    return $va_rules;
}