使用按钮更改网站的语言

时间:2013-06-15 00:43:53

标签: php http-accept-language

您好我想要标题说使用按钮更改网站的语言,但这不会更改网址mywebsite.com(不执行mywebsite.com?lang=es)只需更改此中的PHP个变量代码:

$xlang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);


if($xlang == "es")
{
$g_lang = "es";
}
else if ($xlang == "en")
{
$g_lang = "en";
}
else
{
$g_lang = "en";
}

然后使用此按钮

<a class="langx" href="#"></a>

更改语言而不更改网址

有办法吗?如果是这样,怎么样?

提前致谢。

3 个答案:

答案 0 :(得分:3)

单击按钮时,您需要将所需的值发送到服务器,因此您的链接必须具有?lang=es等语言字符串。

然后,您可以在服务器端处理它,并将当前访问者的语言存储在例如数据库(对于已登录的用户),会话或cookie中。

然后,您可以使用header重定向将用户重定向到没有语言字符串的站点,并在顶部检查是否设置了db-entry / session / cookie并使用该语言。

答案 1 :(得分:2)

虽然您可以动态处理请求,但您需要提供另一种方法,这就是原因。根据Google的说法,如果您关心SEO的任何内容,那么您需要{{} 3}}你可以动态做帽子技巧并通过语言偏好来切换语言,但如果你希望通过搜索获得该语言的任何流量,你还需要提供一个总是使用其他语言的页面的链接发动机。

如果此页面动态检测到该语言,则Google在抓取时看到的任何语言都是将该页面设为的语言。

http://www.example.com/

如果网站包含其他语言的查询字符串标记,则如果您网站上某处有第二语言链接,则该网站可能会以两种语言进行抓取。这些是用于显示西班牙语页面所在的Google的好例子(Make sure the page language is obvious.)。

http://es.example.com - best for SEO

http://www.example.com/?lang=es

http://www.example.com/es/

在您的PHP代码中,您只能捕获浏览器首选语言的初始2位数代码。有些人实际上读过一种以上的语言(基本上都不是美国人)。他们可能会使用其首选语言的其他语言,因此虽然来自法国的某人可能会使用fr作为首选语言,但他们也可能会理解英语(en),因此他们的浏览器接受的字符串可能看起来像这在Chrome中:

fr,en-US;q=0.8,en;q=0.6

或IE中的这个:

fr-FR,en-US;q=0.5

此代码将检查是否已为该语言设置$_GET标志并覆盖自动翻译。我找到了这个代码,然后将其修改为我的目的,因为它使用的网站是欧洲,大多数人会说多种语言。对于这段代码我在这里进行了修改,所以如果他们的首选语言不是西班牙语,它将默认为英语。这将进入像lang.php这样的文件,它将包含在每个页面上。

<?php
$langs = array();
if (!empty($_GET['lang'])){
    $tempLang = $_GET['lang'];
        //Setup the switch for all of the possible languages.
    switch($tempLang){
        case 'es':
        $pref='es';
        break;
        default:
        //english
        $pref='en'; 
    }

} elseif (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
    // break up string into pieces (languages and q factors)
    preg_match_all('/([a-z]{1,8}(-[a-z]{1,8})?)\s*(;\s*q\s*=\s*(1|0\.[0-9]+))?/i', $_SERVER['HTTP_ACCEPT_LANGUAGE'], $lang_parse);

    if (count($lang_parse[1])) {
        // create a list like "en" => 0.8

         $langs = array_combine($lang_parse[1], $lang_parse[4]);

        // set default to 1 for any without q factor
        foreach ($langs as $lang => $val) {
            if ($val === '') $val = 1;
        $lParse = strtolower(preg_replace('!\-.*$!','',$lang));
            if(!isset($newLangs[$lParse])){
                $newLangs[$lParse] = $val;
            }

        }

        // sort list based on value 
        arsort($newLangs, SORT_NUMERIC);
    }

//Set the preferred languages for the website (available translations)
$preferred = array('en','es');

//Check for overlap keeping the preference order
$intersect = array_values(array_intersect(array_keys($newLangs), $preferred));

//print_r($newLangs);

if(isset($intersect[0])){
    //Set the first preference
    $pref = $intersect[0];  
    if(preg_match('!^es!',$pref)){
        $pref='es';
    }   
} else {
    //default to english
    $pref = 'en';   
}


} else {
    //default to english
    $pref = 'en';   
}

?>

在包含lang.php的网页上,您需要检查$pref变量以显示该语言的正确翻译。

<强>的Javascript

您可以使用Javascript进行重定向,以使页面使用相同的代码加载其他语言,但搜索引擎通常只会查看Javascript的漏洞,而不会遵循Javascript中的链接。根据{{​​3}}

  

使用文本浏览器(例如a separate domain is the best option)检查您的网站,因为大多数情况   搜索引擎蜘蛛会像Lynx一样看到你的网站。如果看上去   JavaScript,Cookie,会话ID,框架,DHTML等功能   Flash会阻止您在文本浏览器中看到所有网站   搜索引擎蜘蛛可能无法抓取您的网站。

您可以使用AJAX单击进行更改,但是AJAX将侦听的URL需要传递参数,这些通常通过$_GET变量传递。

IP查询

有些人尝试的另一种方法是检查IP地址并反向查找位置以查看原产国的位置,然后他们将选择国家语言。这个问题是:

  1. 人们旅行
  2. 某些IP地址已注册到其他国家/地区的所有者(例如公司块),而不是用户是浏览器的国家/地区。
  3. 部分IP地址列表非常不准确。
  4. <强>缓存

    并非所有用户都接受Cookie,而某些公司防火墙甚至可能会删除Cookie。

答案 2 :(得分:0)

我不明白您需要做什么,但我认为您想刷新页面以便在单击按钮时应用更改而不向您的网址添加任何内容!如果我是对的,你可以使用Jquery location.reload()这样的函数:

// don't forget to add link to jquery file for example : <script type="text/javascript" src="jquery-1.3.2.min.js"></script>
<script type="text/javascript">

  $(document).ready(function(){
   $('.langx').click(function() {

          location.reload();

   });
  });

</script>

我亲自使用gettext库翻译我的网站:我制作一个语言列表,然后我使用ajax调用发送用户选择的语言,如果有这个选择的翻译,我会返回确定,最后我重新加载页面与js。 您可以了解gettext lib或检查文档here

如果这不是您想要的,请添加更多详细信息以清除您的问题