您好我想正如标题所说使用按钮来更改网站的语言,但这不改变网址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>
更改语言不改变网址
有没有办法做到这一点? 如果是这样,怎么样?
提前致谢。
您需要将所需的值发送到服务器,当按钮被点击,所以你的链接就必须有语言的字符串像?lang=es
。
然后你就可以处理它在服务器端和存储当前访问者的语言中,例如一个数据库(登录用户),会话或饼干。
然后你可以使用一个header
重定向用户到网站重定向没有语言的字符串,并在顶部检查DB-进入/会话/ cookie设置并使用该语言。
虽然您可以动态地处理请求,您需要提供另一种方法,这里的原因。 据谷歌,如果你计较什么SEO ,你要确保页面的语言是显而易见的。 你可以在飞行中的帽子戏法和交换机通过语言首选项的语言,但你还需要提供一个链接到一个网页,总是在其他语言,如果你希望得到来自搜索引擎,语言的任何流量。
如果此页面动态检测的语言,那么任何一种语言,谷歌公司时,它抓取是它会使页面的语言。
http://www.example.com/
如果网站包含一个查询串旗为另一种语言的网站很可能在两种语言被抓取,如果有您网站上的第二语言的链接的地方。 这些都是很好的例子( 一个单独的域是最好的选择 ),用于显示谷歌在那里西班牙网页将驻留。
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中的链接。 据谷歌网站管理员的指导方针:
使用文本浏览器,如山猫检查您的网站,因为大多数搜索引擎Spider查看网站的方式与Lynx一样。 如果因应用了Javascript,Cookie,会话ID,框架,DHTML或Flash等您无法在文本浏览器中查看整个网站,那么搜索引擎蜘蛛可能有麻烦抓取您的网站。
你可以使用AJAX点击的变化,但是在那里AJAX会听将需要传递的参数和这些通常是通过传递的网址$_GET
变量。
IP查询
一些人已经尝试另一种方法是检查IP地址和反向查找的位置,看看那里原产国,那么他们就会挑民族语言。 这样做的问题是:
- 人们出行
- 一些IP地址被注册到其他国家的业主(企业认为块)而不是用户所在的浏览器的国家。
- 一些IP地址列表是非常不准确的。
饼干
并非所有用户都能接受的饼干和一些企业的防火墙,甚至可能剥离饼干。
我不明白你需要做的正是,但我想你想刷新页面,以应用更改,当您单击该按钮,无所添加到您的网址! 如果我是正确的,你可以使用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调用发送哪些用户正在选择的语言,如果翻译这样选择可我返回OK,最后我重新加载页面的JS。 你可以了解gettext的LIB或检查文档在这里
如果这不是你想要什么,请添加更多的细节来呈现明确你的问题