重定向到具有不同语言的完全相同的路径


Redirect to exacly same path with diffrent languge

这是我正在尝试做的:

无论客户打开脚本是什么页面,都会将他重定向到他的首选语言,从$_SERVER["HTTP_ACCEPT_LANGUAGE"];

例:客户浏览器设置为西班牙语。如果他打开第 http://example.com/script-name.php?param1=aa&param2=bb

比脚本会将他重定向到http://example.com/es/script-name.php?param1=aa&param2=bb

有脚本为我提供已排序的浏览器$lang=substr(Get_Client_Prefered_Language(),0,2);的语言

比我有读取地址的脚本

$location = '';
parse_str(html_entity_decode($_SERVER['QUERY_STRING']),$query_string);
if(isset($query_string['language'])) {$query_string['language'] = null;}
$new_query_string = !empty($query_string) ? http_build_query($query_string) : '';
if($new_query_string != ''){$location .= '?'.$new_query_string;}

这为我提供了新的地址:

$location="https://macrohosting.co.uk/".$lang.$_SERVER["SCRIPT_NAME"].$location;

比我能用header('location: '.$location);

一切都很好,但是我已经重写了一些页面。

并且不确定如何调整上面的脚本,以便当客户访问http://example.com/page1.htm时,例如将被重定向到http://example.com/es/page1.htm

如果没有该修改,客户将被重定向到http://example.com/es/page_example.php?param=aa&param=bb

您无需

为每个请求重定向用户。 这是处理这个问题的有价值的方法。

您可以在前端控制器(例如索引.php文件)中获取用户浏览器语言,然后相应地生成链接。

您正在尝试为每个请求访问您的 Web 服务器 2 次?? 这不是一个选项。

如果您使用的是PHP框架,那么应该有更好的方法来处理该问题。

    <?php
    $lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
    $link_to_about_us_page = "http:://domain.com/$lang/about";

请记住,每个请求中域后的第一个参数是语言,根据该语言,您应该从存储中获取内容并显示数据。(这部分应该由你的路由器处理)

如果未提供语言,则将用户重定向到默认语言。例如

http://domain.com/contact

http://domain.com/en/contact
这就是

Drupal处理多语言的方式。 有多种因素会影响内容语言(用户浏览器| URL | 用户IP | ...)

您可以安排优先级。