首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP:检测用户语言并能够更改语言

PHP:检测用户语言并能够更改语言
EN

Stack Overflow用户
提问于 2018-02-18 19:02:26
回答 3查看 2.7K关注 0票数 2

我有一个有能力选择语言的网站。我想让用户第一次进入网站时,php获得他的系统语言并写入cookie (因此,默认情况下,每次用户进入时都会使用相同的语言)。但是当用户想要改变网站语言时,他会按下选择语言(例如俄语)的按钮,然后将网站语言设置为俄语,当他再次进入网站时,他将使用俄语。

到目前为止,我有这段代码,但它确实令人困惑,而且不能正常工作。

HTML:

代码语言:javascript
复制
<a href="index.php?language=en">
<a href="index.php?language=ru">

PHP:

代码语言:javascript
复制
<?php
ini_set('display_errors',1);
error_reporting(E_ALL);

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

if (empty($_COOKIE['language'])){
setcookie('language', $language);
}

if ( !empty($_GET['language']) ) {
    $_COOKIE['language'] = $_GET['language'] === 'en' ? 'en' : 'ru';
} else {
  switch ($language){
  case "ru":
      $language = 'ru';
      break;
  case "en":
      $language = 'en';
      break;
  default:
      $language = 'en';
      break;
}
}

if ( $_COOKIE['language'] == "en") {
   $language = 'en';
} else {
   $language = 'ru';
}

$xml = simplexml_load_file("language.xml") or die("Equestria forgot languages");

$s_nav_main = $xml->s_nav_main->$language;
$s_nav_more = $xml->s_nav_more->$language;
$s_nav_bot = $xml->s_nav_bot->$language;
$s_nav_partners = $xml->s_nav_partners->$language;
$s_nav_developer = $xml->s_nav_developer->$language;
$s_aboutus = $xml->s_aboutus->$language;
$s_title = $xml->s_title->$language;
$s_head_title = $xml->s_head_title->$language;
$s_head_info = $xml->s_head_info->$language;
$s_statistics_people = $xml->s_statistics_people->$language;
$s_statistics_online = $xml->s_statistics_online->$language;
$s_statistics_messages = $xml->s_statistics_messages->$language;
$s_why_we_best = $xml->s_why_we_best->$language;
$s_why_we_best_content_title = $xml->s_why_we_best_content_title->$language;
$s_why_we_best_content_info = $xml->s_why_we_best_content_info->$language;
$s_why_we_best_adm_title = $xml->s_why_we_best_adm_title->$language;
$s_why_we_best_adm_info = $xml->s_why_we_best_adm_info->$language;
$s_why_we_best_comfort_title = $xml->s_why_we_best_comfort_title->$language;
$s_why_we_best_comfort_info = $xml->s_why_we_best_comfort_info->$language;
$s_why_we_best_wtf_title = $xml->s_why_we_best_wtf_title->$language;
$s_why_we_best_wtf_info = $xml->s_why_we_best_wtf_info->$language;
$s_trusted_title = $xml->s_trusted_title->$language;
$s_trusted_info = $xml->s_trusted_info->$language;
$s_people_celestia = $xml->s_people_celestia->$language;
$s_people_celestia_comment = $xml->s_people_celestia_comment->$language;
$s_people_luna = $xml->s_people_luna->$language;
$s_people_luna_comment = $xml->s_people_luna_comment->$language;
$s_people_twilight = $xml->s_people_twilight->$language;
$s_people_twilight_comment = $xml->s_people_twilight_comment->$language;
$s_botinfo_info = $xml->s_botinfo_info->$language;
$s_botinfo_more = $xml->s_botinfo_more->$language;
?>
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-02-18 20:24:20

找到了如何做到这一点的方法:

代码语言:javascript
复制
$lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);

if ( !empty($_GET['language']) ) {
    $_COOKIE['language'] = $_GET['language'] === 'en' ? 'en' : 'ru';
} elseif (empty($_COOKIE['language'])) {
    $_COOKIE['language'] = $lang;
}
setcookie('language', $_COOKIE['language']);

if ( $_COOKIE['language'] == "en") {
   $language = 'en';
} else {
   $language = 'ru';
}
票数 0
EN

Stack Overflow用户

发布于 2018-02-18 20:40:27

首先,您应该寻找用户首选的语言是接受语言头。Geo查找是一种危险和昂贵的时间浪费(至少对于确定语言)。除此之外,你可以设置一个cookie来覆盖浏览器提供的选择,但这对欧洲的网站有法律意义。

代码语言:javascript
复制
 $avail_lang=array(
            'en'=>1,
            'fr'=>1,
            'de'=>1,
            'ru'=>1
            );
 define("DEFAULT_LANG", 'en');
 ...
 if ($_COOKIE['language'] && isset($avail_lang[$_COOKIE['language']]) {
    $use_lang=$_COOKIE['language'];
 }
 // override with GET if provided
 if ($_GET['language'] && isset($avail_lang[$_GET['language']]) {
    $use_lang=$_GET['language'];
 }
 // no language? check browser
 if (!$use_lang) {
    $request_lang=explode(",", $_SERVER['HTTP_ACCEPT_LANGUAGE']);
    foreach($request_lang as $i) {
            list($lang, $pref)=explode("=", trim($i));
            $pref=$pref ? 0.0+$pref : 1.0;
            list($lang, $country)=explode("-", $lang);
            $pref_lang[$lang]=$pref;
    }
    rsort($pref_lang);
    $use_lang=array_shift(array_intersect_key($pref_lang, $avail_lang));
    if (!$use_lang) $use_lang=DEFAULT_LANGUAGE;
}
if (user_accepts_cookies() && $use_lang!=$_COOKIE['language']) {
    set_lang_cookie($use_lang);
}
票数 2
EN

Stack Overflow用户

发布于 2018-02-18 19:26:55

这里可以采用一个简单的逻辑-

当用户登陆您的网站时,您应该跟踪他/她的IP地址,我们可以很容易地让他们的国家使用该IP。然后,你可以很容易地为他们服务语言。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48855444

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档