使用不同的语言重定向到exacly相同的路径

时间:2016-03-12 18:06:50

标签: php query-string

以下是我要做的事情:

无论客户打开的脚本是什么页面都会将他重定向到他的首选语言,请阅读$_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

1 个答案:

答案 0 :(得分:0)

您无需为每个请求重定向用户。这是解决问题的有效方法。

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

您是否尝试针对每个请求点击您的网络服务器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 | user ip | ...)

你可以安排优先事项。