コード例 #1
0
/**
 * 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;
}
コード例 #2
0
/**
 * 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;
}