/** * This function add the language flag in the url. */ function uls_get_url_translated($url, $language, $type = 'prefix', $remove_default_language = true) { if (empty($url)) { return null; } //activate flag to avoid translations and get the real URL of the blog global $uls_permalink_convertion; $uls_permalink_convertion = true; //if URL will omit default language if ($remove_default_language) { //if language is the same for the user if (is_user_logged_in() && $language == uls_get_user_saved_language()) { $language = ''; } elseif (!is_user_logged_in() && $language == uls_get_site_language()) { $language = ''; } } //add language to the url switch ($type) { case 'query_var': $parts = parse_url($url); if (empty($parts['query'])) { if (!empty($language)) { $parts['query'] = 'lang=' . $language; } $url = $parts['scheme'] . '://' . $parts['host'] . (empty($parts['port']) ? '' : ':' . $parts['port']) . (empty($parts['path']) ? '' : $parts['path']) . (empty($parts['query']) ? '' : '?' . $parts['query']) . (empty($parts['fragment']) ? '' : '#' . $parts['fragment']); break; } $query_parts = explode('&', $parts['query']); $new_query_parts = array(); foreach ($query_parts as $var) { $var_value = explode('=', $var); if ($var_value[0] == 'lang') { if (!empty($language)) { $new_query_parts[] = 'lang=' . $language; } } else { $new_query_parts[] = $var; } } $parts['query'] = implode('&', $new_query_parts); $url = $parts['scheme'] . '://' . $parts['host'] . (empty($parts['port']) ? '' : ':' . $parts['port']) . (empty($parts['path']) ? '' : $parts['path']) . (empty($parts['query']) ? '' : '?' . $parts['query']) . (empty($parts['fragment']) ? '' : '#' . $parts['fragment']); break; case 'subdomain': break; default: $parts = parse_url($url); $blog_parts = parse_url(get_bloginfo('url')); if (empty($parts['path']) && !empty($language)) { $parts['path'] = '/' . $language . '/'; } else { //split path to detect if it contains a language flag already if (empty($blog_parts['path'])) { $parts['path'] = isset($parts['path']) ? $parts['path'] : '/'; $path_parts = explode('/', $parts['path']); $available_languages = uls_get_available_languages(); if (in_array($path_parts[1], $available_languages)) { unset($path_parts[1]); $parts['path'] = implode('/', $path_parts); } if (!empty($language)) { $parts['path'] = '/' . $language . $parts['path']; } } else { $path_parts = explode('/', str_replace($blog_parts['path'], '', $parts['path'])); $available_languages = uls_get_available_languages(); if (!empty($path_parts) && count($path_parts) > 1 && in_array($path_parts[1], $available_languages)) { unset($path_parts[1]); } if (empty($language)) { $parts['path'] = $blog_parts['path'] . implode('/', $path_parts); } else { $parts['path'] = $blog_parts['path'] . '/' . $language . implode('/', $path_parts); } } } //if the URL is a relative URL if (empty($parts['scheme']) && empty($parts['host'])) { // TO-DO: How to handle relative URLs if the site is not hosted in the root folder of the domain } else { $url = $parts['scheme'] . '://' . $parts['host'] . (empty($parts['port']) ? '' : ':' . $parts['port']) . (empty($parts['path']) ? '' : $parts['path']) . (empty($parts['query']) ? '' : '?' . $parts['query']) . (empty($parts['fragment']) ? '' : '#' . $parts['fragment']); } break; } //reset flag $uls_permalink_convertion = false; return $url; }
/** * This function add the language flag in the url. */ function uls_get_url_translated($url, $language, $type = 'prefix', $remove_default_language = true) { //if URL will omit default language if ($remove_default_language) { //if language is the same for the user if (function_exists('is_user_logged_in') && is_user_logged_in() && $language == uls_get_user_saved_language()) { $language = ''; } elseif (function_exists('is_user_logged_in') && !is_user_logged_in() && $language == uls_get_site_language()) { $language = ''; } } //add language to the url switch ($type) { case 'query_var': $parts = parse_url($url); if (empty($parts['query'])) { if (!empty($language)) { $parts['query'] = 'lang=' . $language; } $url = $parts['scheme'] . '://' . $parts['host'] . (empty($parts['port']) ? '' : ':' . $parts['port']) . (empty($parts['path']) ? '' : $parts['path']) . (empty($parts['query']) ? '' : '?' . $parts['query']) . (empty($parts['fragment']) ? '' : '#' . $parts['fragment']); return $url; } $query_parts = explode('&', $parts['query']); $new_query_parts = array(); foreach ($query_parts as $var) { $var_value = explode('=', $var); if ($var_value[0] == 'lang') { if (!empty($language)) { $new_query_parts[] = 'lang=' . $language; } } else { $new_query_parts[] = $var; } } $parts['query'] = implode('&', $new_query_parts); $url = $parts['scheme'] . '://' . $parts['host'] . (empty($parts['port']) ? '' : ':' . $parts['port']) . (empty($parts['path']) ? '' : $parts['path']) . (empty($parts['query']) ? '' : '?' . $parts['query']) . (empty($parts['fragment']) ? '' : '#' . $parts['fragment']); break; case 'subdomain': break; default: $parts = parse_url($url); $blog_parts = parse_url(get_bloginfo('url')); if (empty($parts['path']) && !empty($language)) { $parts['path'] = '/' . $language . '/'; } else { //split path to detect if it contains a language flag already if (empty($blog_parts['path'])) { $path_parts = explode('/', $parts['path']); $available_languages = uls_get_available_languages(); if (!empty($path_parts) && in_array($path_parts[1], $available_languages)) { unset($path_parts[1]); $parts['path'] = implode('/', $path_parts); } if (!empty($language)) { $parts['path'] = '/' . $language . $parts['path']; } } else { $path_parts = explode('/', str_replace($blog_parts['path'], '', $parts['path'])); $available_languages = uls_get_available_languages(); if (!empty($path_parts) && count($path_parts) > 1 && in_array($path_parts[1], $available_languages)) { unset($path_parts[1]); } if (empty($language)) { $parts['path'] = $blog_parts['path'] . implode('/', $path_parts); } else { $parts['path'] = $blog_parts['path'] . '/' . $language . implode('/', $path_parts); } } } $url = $parts['scheme'] . '://' . $parts['host'] . (empty($parts['port']) ? '' : ':' . $parts['port']) . (empty($parts['path']) ? '' : $parts['path']) . (empty($parts['query']) ? '' : '?' . $parts['query']) . (empty($parts['fragment']) ? '' : '#' . $parts['fragment']); break; } //echo "final: $url<br/>"; return $url; }