webmaster@1: domain); franck@19: if (!empty($parts['host']) && ($_SERVER['HTTP_HOST'] == $parts['host'])) { webmaster@1: return $language; webmaster@1: } webmaster@1: } webmaster@1: return language_default(); webmaster@1: webmaster@1: case LANGUAGE_NEGOTIATION_PATH_DEFAULT: webmaster@1: case LANGUAGE_NEGOTIATION_PATH: webmaster@1: // $_GET['q'] might not be available at this time, because webmaster@1: // path initialization runs after the language bootstrap phase. webmaster@1: $args = isset($_GET['q']) ? explode('/', $_GET['q']) : array(); webmaster@1: $prefix = array_shift($args); webmaster@1: // Search prefix within enabled languages. webmaster@1: foreach ($languages as $language) { webmaster@1: if (!empty($language->prefix) && $language->prefix == $prefix) { webmaster@1: // Rebuild $GET['q'] with the language removed. webmaster@1: $_GET['q'] = implode('/', $args); webmaster@1: return $language; webmaster@1: } webmaster@1: } webmaster@1: if ($mode == LANGUAGE_NEGOTIATION_PATH_DEFAULT) { webmaster@1: // If we did not found the language by prefix, choose the default. webmaster@1: return language_default(); webmaster@1: } webmaster@1: break; webmaster@1: } webmaster@1: webmaster@1: // User language. webmaster@1: if ($user->uid && isset($languages[$user->language])) { webmaster@1: return $languages[$user->language]; webmaster@1: } webmaster@1: webmaster@1: // Browser accept-language parsing. webmaster@1: if ($language = language_from_browser()) { webmaster@1: return $language; webmaster@1: } webmaster@1: webmaster@1: // Fall back on the default if everything else fails. webmaster@1: return language_default(); webmaster@1: } webmaster@1: webmaster@1: /** webmaster@1: * Identify language from the Accept-language HTTP header we got. webmaster@1: */ webmaster@1: function language_from_browser() { webmaster@1: // Specified by the user via the browser's Accept Language setting webmaster@1: // Samples: "hu, en-us;q=0.66, en;q=0.33", "hu,en-us;q=0.5" webmaster@1: $browser_langs = array(); webmaster@1: webmaster@1: if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) { webmaster@1: $browser_accept = explode(",", $_SERVER['HTTP_ACCEPT_LANGUAGE']); webmaster@1: for ($i = 0; $i < count($browser_accept); $i++) { webmaster@1: // The language part is either a code or a code with a quality. webmaster@1: // We cannot do anything with a * code, so it is skipped. webmaster@1: // If the quality is missing, it is assumed to be 1 according to the RFC. webmaster@1: if (preg_match("!([a-z-]+)(;q=([0-9\\.]+))?!", trim($browser_accept[$i]), $found)) { webmaster@1: $browser_langs[$found[1]] = (isset($found[3]) ? (float) $found[3] : 1.0); webmaster@1: } webmaster@1: } webmaster@1: } webmaster@1: webmaster@1: // Order the codes by quality webmaster@1: arsort($browser_langs); webmaster@1: webmaster@1: // Try to find the first preferred language we have webmaster@1: $languages = language_list('enabled'); webmaster@1: foreach ($browser_langs as $langcode => $q) { webmaster@1: if (isset($languages['1'][$langcode])) { webmaster@1: return $languages['1'][$langcode]; webmaster@1: } webmaster@1: } webmaster@1: } webmaster@1: webmaster@1: /** webmaster@1: * Rewrite URL's with language based prefix. Parameters are the same webmaster@1: * as those of the url() function. webmaster@1: */ webmaster@1: function language_url_rewrite(&$path, &$options) { webmaster@1: global $language; webmaster@1: webmaster@1: // Only modify relative (insite) URLs. webmaster@1: if (!$options['external']) { webmaster@1: webmaster@1: // Language can be passed as an option, or we go for current language. webmaster@1: if (!isset($options['language'])) { webmaster@1: $options['language'] = $language; webmaster@1: } webmaster@1: webmaster@1: switch (variable_get('language_negotiation', LANGUAGE_NEGOTIATION_NONE)) { webmaster@1: case LANGUAGE_NEGOTIATION_NONE: webmaster@1: // No language dependent path allowed in this mode. webmaster@1: unset($options['language']); webmaster@1: break; webmaster@1: webmaster@1: case LANGUAGE_NEGOTIATION_DOMAIN: webmaster@1: if ($options['language']->domain) { webmaster@1: // Ask for an absolute URL with our modified base_url. webmaster@1: $options['absolute'] = TRUE; webmaster@1: $options['base_url'] = $options['language']->domain; webmaster@1: } webmaster@1: break; webmaster@1: webmaster@1: case LANGUAGE_NEGOTIATION_PATH_DEFAULT: webmaster@1: $default = language_default(); webmaster@1: if ($options['language']->language == $default->language) { webmaster@1: break; webmaster@1: } webmaster@1: // Intentionally no break here. webmaster@1: webmaster@1: case LANGUAGE_NEGOTIATION_PATH: webmaster@1: if (!empty($options['language']->prefix)) { webmaster@1: $options['prefix'] = $options['language']->prefix .'/'; webmaster@1: } webmaster@1: break; webmaster@1: } webmaster@1: } webmaster@1: }