00001 <?php
00002
00003
00012 function language_initialize() {
00013 global $user;
00014
00015
00016 $mode = variable_get('language_negotiation', LANGUAGE_NEGOTIATION_NONE);
00017
00018 $languages = language_list('enabled');
00019 $languages = $languages[1];
00020
00021 switch ($mode) {
00022 case LANGUAGE_NEGOTIATION_NONE:
00023 return language_default();
00024
00025 case LANGUAGE_NEGOTIATION_DOMAIN:
00026 foreach ($languages as $language) {
00027 $parts = parse_url($language->domain);
00028 if (!empty($parts['host']) && ($_SERVER['SERVER_NAME'] == $parts['host'])) {
00029 return $language;
00030 }
00031 }
00032 return language_default();
00033
00034 case LANGUAGE_NEGOTIATION_PATH_DEFAULT:
00035 case LANGUAGE_NEGOTIATION_PATH:
00036
00037
00038 $args = isset($_GET['q']) ? explode('/', $_GET['q']) : array();
00039 $prefix = array_shift($args);
00040
00041 foreach ($languages as $language) {
00042 if (!empty($language->prefix) && $language->prefix == $prefix) {
00043
00044 $_GET['q'] = implode('/', $args);
00045 return $language;
00046 }
00047 }
00048 if ($mode == LANGUAGE_NEGOTIATION_PATH_DEFAULT) {
00049
00050 return language_default();
00051 }
00052 break;
00053 }
00054
00055
00056 if ($user->uid && isset($languages[$user->language])) {
00057 return $languages[$user->language];
00058 }
00059
00060
00061 if ($language = language_from_browser()) {
00062 return $language;
00063 }
00064
00065
00066 return language_default();
00067 }
00068
00072 function language_from_browser() {
00073
00074
00075 $browser_langs = array();
00076
00077 if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
00078 $browser_accept = explode(",", $_SERVER['HTTP_ACCEPT_LANGUAGE']);
00079 for ($i = 0; $i < count($browser_accept); $i++) {
00080
00081
00082
00083 if (preg_match("!([a-z-]+)(;q=([0-9\\.]+))?!", trim($browser_accept[$i]), $found)) {
00084 $browser_langs[$found[1]] = (isset($found[3]) ? (float) $found[3] : 1.0);
00085 }
00086 }
00087 }
00088
00089
00090 arsort($browser_langs);
00091
00092
00093 $languages = language_list('enabled');
00094 foreach ($browser_langs as $langcode => $q) {
00095 if (isset($languages['1'][$langcode])) {
00096 return $languages['1'][$langcode];
00097 }
00098 }
00099 }
00100
00105 function language_url_rewrite(&$path, &$options) {
00106 global $language;
00107
00108
00109 if (!$options['external']) {
00110
00111
00112 if (!isset($options['language'])) {
00113 $options['language'] = $language;
00114 }
00115
00116 switch (variable_get('language_negotiation', LANGUAGE_NEGOTIATION_NONE)) {
00117 case LANGUAGE_NEGOTIATION_NONE:
00118
00119 unset($options['language']);
00120 break;
00121
00122 case LANGUAGE_NEGOTIATION_DOMAIN:
00123 if ($options['language']->domain) {
00124
00125 $options['absolute'] = TRUE;
00126 $options['base_url'] = $options['language']->domain;
00127 }
00128 break;
00129
00130 case LANGUAGE_NEGOTIATION_PATH_DEFAULT:
00131 $default = language_default();
00132 if ($options['language']->language == $default->language) {
00133 break;
00134 }
00135
00136
00137 case LANGUAGE_NEGOTIATION_PATH:
00138 if (!empty($options['language']->prefix)) {
00139 $options['prefix'] = $options['language']->prefix . '/';
00140 }
00141 break;
00142 }
00143 }
00144 }