| [ Index ] |
PHP Cross Reference of Drupal 6 (gatewave) |
[Summary view] [Print] [Text view]
1 <?php 2 // $Id: language.inc,v 1.14.2.2 2010/03/22 12:18:04 goba Exp $ 3 4 /** 5 * @file 6 * Multiple language handling functionality. 7 */ 8 9 /** 10 * Choose a language for the page, based on language negotiation settings. 11 */ 12 function language_initialize() { 13 global $user; 14 15 // Configured presentation language mode. 16 $mode = variable_get('language_negotiation', LANGUAGE_NEGOTIATION_NONE); 17 // Get a list of enabled languages. 18 $languages = language_list('enabled'); 19 $languages = $languages[1]; 20 21 switch ($mode) { 22 case LANGUAGE_NEGOTIATION_NONE: 23 return language_default(); 24 25 case LANGUAGE_NEGOTIATION_DOMAIN: 26 foreach ($languages as $language) { 27 $parts = parse_url($language->domain); 28 if (!empty($parts['host']) && ($_SERVER['HTTP_HOST'] == $parts['host'])) { 29 return $language; 30 } 31 } 32 return language_default(); 33 34 case LANGUAGE_NEGOTIATION_PATH_DEFAULT: 35 case LANGUAGE_NEGOTIATION_PATH: 36 // $_GET['q'] might not be available at this time, because 37 // path initialization runs after the language bootstrap phase. 38 $args = isset($_GET['q']) ? explode('/', $_GET['q']) : array(); 39 $prefix = array_shift($args); 40 // Search prefix within enabled languages. 41 foreach ($languages as $language) { 42 if (!empty($language->prefix) && $language->prefix == $prefix) { 43 // Rebuild $GET['q'] with the language removed. 44 $_GET['q'] = implode('/', $args); 45 return $language; 46 } 47 } 48 if ($mode == LANGUAGE_NEGOTIATION_PATH_DEFAULT) { 49 // If we did not found the language by prefix, choose the default. 50 return language_default(); 51 } 52 break; 53 } 54 55 // User language. 56 if ($user->uid && isset($languages[$user->language])) { 57 return $languages[$user->language]; 58 } 59 60 // Browser accept-language parsing. 61 if ($language = language_from_browser()) { 62 return $language; 63 } 64 65 // Fall back on the default if everything else fails. 66 return language_default(); 67 } 68 69 /** 70 * Identify language from the Accept-language HTTP header we got. 71 */ 72 function language_from_browser() { 73 // Specified by the user via the browser's Accept Language setting 74 // Samples: "hu, en-us;q=0.66, en;q=0.33", "hu,en-us;q=0.5" 75 $browser_langs = array(); 76 77 if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) { 78 $browser_accept = explode(",", $_SERVER['HTTP_ACCEPT_LANGUAGE']); 79 for ($i = 0; $i < count($browser_accept); $i++) { 80 // The language part is either a code or a code with a quality. 81 // We cannot do anything with a * code, so it is skipped. 82 // If the quality is missing, it is assumed to be 1 according to the RFC. 83 if (preg_match("!([a-z-]+)(;q=([0-9\\.]+))?!", trim($browser_accept[$i]), $found)) { 84 $browser_langs[$found[1]] = (isset($found[3]) ? (float) $found[3] : 1.0); 85 } 86 } 87 } 88 89 // Order the codes by quality 90 arsort($browser_langs); 91 92 // Try to find the first preferred language we have 93 $languages = language_list('enabled'); 94 foreach ($browser_langs as $langcode => $q) { 95 if (isset($languages['1'][$langcode])) { 96 return $languages['1'][$langcode]; 97 } 98 } 99 } 100 101 /** 102 * Rewrite URL's with language based prefix. Parameters are the same 103 * as those of the url() function. 104 */ 105 function language_url_rewrite(&$path, &$options) { 106 global $language; 107 108 // Only modify relative (insite) URLs. 109 if (empty($options['external'])) { 110 111 // Language can be passed as an option, or we go for current language. 112 if (!isset($options['language'])) { 113 $options['language'] = $language; 114 } 115 116 switch (variable_get('language_negotiation', LANGUAGE_NEGOTIATION_NONE)) { 117 case LANGUAGE_NEGOTIATION_NONE: 118 // No language dependent path allowed in this mode. 119 unset($options['language']); 120 break; 121 122 case LANGUAGE_NEGOTIATION_DOMAIN: 123 if ($options['language']->domain) { 124 // Ask for an absolute URL with our modified base_url. 125 $options['absolute'] = TRUE; 126 $options['base_url'] = $options['language']->domain; 127 } 128 break; 129 130 case LANGUAGE_NEGOTIATION_PATH_DEFAULT: 131 $default = language_default(); 132 if ($options['language']->language == $default->language) { 133 break; 134 } 135 // Intentionally no break here. 136 137 case LANGUAGE_NEGOTIATION_PATH: 138 if (!empty($options['language']->prefix)) { 139 $options['prefix'] = $options['language']->prefix .'/'; 140 } 141 break; 142 } 143 } 144 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
| Generated: Thu Mar 24 11:18:33 2011 | Cross-referenced by PHPXref 0.7 |