function qtranxf_get_url_info($url) { $urlinfo = qtranxf_parseURL($url); qtranxf_complete_url_info($urlinfo); qtranxf_complete_url_info_path($urlinfo); return $urlinfo; }
/** * Expects to be set before call: * - $url_info['host'] * - $url_info['path'] * - $url_info['query'] * - $url_info['path-base'] * - $url_info['path-base-length'] */ function qtranxf_parse_language_info(&$url_info, $link = false) { global $q_config; qtranxf_complete_url_info_path($url_info); if (!isset($url_info['wp-path'])) { return false; } // url is not from this WP installation $doredirect = false; if (!defined('WP_ADMIN') || $link) { $lang = null; $url_mode = $q_config['url_mode']; switch ($url_mode) { case QTX_URL_PATH: // pre path if (!empty($url_info['wp-path']) && preg_match('!^/([a-z]{2})(/|$)!i', $url_info['wp-path'], $match)) { $lang = qtranxf_resolveLangCase($match[1], $doredirect); if ($lang) { $url_info['lang_url'] = $lang; $url_info['wp-path'] = substr($url_info['wp-path'], 3); $url_info['doing_front_end'] = true; if (WP_DEBUG) { $url_info['url_mode'] = 'pre-path'; } } } //} break; case QTX_URL_DOMAIN: // pre domain if (!empty($url_info['host'])) { if (preg_match('#^([a-z]{2})\\.#i', $url_info['host'], $match)) { $lang = qtranxf_resolveLangCase($match[1], $doredirect); if ($lang) { $url_info['lang_url'] = $lang; $url_info['host'] = substr($url_info['host'], 3); $url_info['doing_front_end'] = true; if (WP_DEBUG) { $url_info['url_mode'] = 'pre-domain'; } } } } break; case QTX_URL_DOMAINS: // domain per language if (!empty($url_info['host'])) { foreach ($q_config['enabled_languages'] as $lang) { //todo should have hash host->lang if (!isset($q_config['domains'][$lang])) { continue; } if ($q_config['domains'][$lang] != $url_info['host']) { continue; } $url_info['lang_url'] = $lang; if ($lang != $q_config['default_language'] || strpos(get_option('siteurl'), $url_info['host']) === FALSE) { $url_info['doing_front_end'] = true; } if (WP_DEBUG) { $url_info['url_mode'] = 'per-domain'; } break; } } break; default: /** * Hook for possible other methods * Set, if applicable: * $url_info['lang_url'] * $url_info['doing_front_end'] * $url_info['path'] - convert to language neutral or default */ $url_info = apply_filters('qtranslate_parse_language_info_mode', $url_info, $q_config['url_mode']); if (isset($url_info['lang_url'])) { $lang = $url_info['lang_url']; } break; } } $lang = null; if (!$link) { if (isset($_GET['lang'])) { $lang = qtranxf_resolveLangCase($_GET['lang'], $doredirect); if ($lang) { $url_info['lang_query_get'] = $lang; } } else { if (isset($_POST['lang'])) { $lang = qtranxf_resolveLangCase($_POST['lang'], $doredirect); if ($lang) { $url_info['lang_query_post'] = $lang; } //todo excessive? } } } elseif (!empty($url_info['query']) && preg_match('/(^|&|&|&|\\?)lang=([a-z]{2})/i', $url_info['query'], $match)) { //rx is changed in 3.4.6.5: https://github.com/qTranslate-Team/qtranslate-x/issues/288 $lang = qtranxf_resolveLangCase($match[2], $doredirect); if ($lang) { $url_info['lang_query_link'] = $lang; } //todo excessive? } if ($lang) { $url_info['lang_query'] = $lang; qtranxf_del_query_arg($url_info['query'], 'lang'); //if(isset($url_info['lang_url'])){ // if($lang !== $url_info['lang_url']) $doredirect=true; //}elseif(!defined('WP_ADMIN')){ if ($q_config['url_mode'] != QTX_URL_QUERY) { $doredirect = true; } //} } else { if (isset($url_info['lang_url'])) { $lang = $url_info['lang_url']; if ($q_config['hide_default_language'] && $lang == $q_config['default_language']) { $doredirect = true; } } } if ($lang) { $url_info['language'] = $lang; } if ($doredirect) { $url_info['doredirect'] = 'detected in parse_language_info'; } if (!isset($url_info['doing_front_end'])) { $language_neutral_path = qtranxf_language_neutral_path($url_info['wp-path']); $url_info['language_neutral_path'] = $language_neutral_path; if (!$language_neutral_path) { $url_info['doing_front_end'] = true; } } /** * Hook for possible other methods * Set $url_info['language'] with the result */ $url_info = apply_filters('qtranslate_parse_language_info', $url_info, $link); //slug? if (isset($url_info['language'])) { $lang = $url_info['language']; } return $lang; }