这几天一直在捣鼓wordpres,想弄一份关于自动识辨用户的一些语言环境以切换themes的语言包.
在做测试时,参考了部分优秀的开源themes,但大多数并不支持多语言的切换的.
只找到一份K2的风格,里面带有这方面的功能.
wordpress中,取得语言包的函数为 load_theme_textdomain(),其语言的定义取决于wp-config.php中WP-LANG的定义.也就是说,是由博主手动指定的,默认为en_US.
而我想实现的是判断目标用户的环境,自动匹配语言包.其实我只想实现zh_cn和en_US两种语言的自动匹配.呵呵~
用PHP代码,网上有很多,我也稀里糊涂地查阅了一些.
在ThinkPHP中,其实已经有一段很好的代码了.
preg_match('/^([a-z-]+)/i', $_SERVER['HTTP_ACCEPT_LANGUAGE'], $matches);
$langSet = $matches[1];
但这仍有不足的地方,搜索到的一些网站上也有提及到,就是用户可以手动改变这个值!
其实这不违背我的要求,依目标用户的喜好,提供友好的语言环境,这正是交互页面所追求的~
只是我在IE,FF,Chrome这三个浏览器下,分别测试,结果却有所不同.FF和Chrome都能正常提取到我所处的环境,但IE却始终是en_US.
这让我很苦恼,我不知道这是什么原因.哎,所以得想办法完善一下.
在我的测试页面里,我一直使用的是google Ajax api;
今天无意去查看了一下这个api的源文件.很意外地发现,google已经在这个文件里将用户的一些环境信息列举了出来,比如用户所在的经度,纬度,所在的国家,省份,城市以及所在国家的语种,这不是一般的兴奋…
随后我做了个测试页面
<script src="http://www.google.com/jsapi"></script>
<script>
var obj = google.loader.ClientLocation.address;
var text = '';
for (var key in obj )
{
text += key +':'+obj[key]+'n';
}
alert(text);
</script>
让不同地方的朋友打开测试,呵呵.能很准确标示出他们所在的地理位置;
这让我小激动了一下.呵呵~随后上google搜索google.loader.ClientLocation,找到了这篇靠前的文章:google.loader.ClientLocation,这篇日志发布于2008-10-8日,呵呵~而我今天才发现…后知后觉啊~~
看来还是得好好看看GG的相关文档的.
现在给我的问题是,有了这些客户端资料,如何能让服务器端知晓并能第一时间作出处理呢?
网上也搜索了些有关JS和PHP参数传递的问题,呵呵,有提到用cookie,也有提到用
<img src="img.php?args=..." />
的方法.
可是我觉得不管用哪种方法,都不能在用户第一次访问时就作出判断并选择正确的语言包~条件是不刷新不跳转!
该如何处理?…你知道吗?
看来只能通过交互提示的方式实现了~再研究研究去!呵呵~