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; }