19

私は自分のウェブサイトをやっていて、ブラウザの言語に応じてユーザーを言語バージョンに誘導するコードを書くことができました。スクリプトは次のとおりです。

<?php
  if ($_SERVER["HTTP_ACCEPT_LANGUAGE"] == "sv")
    header("location: index.php");
  if ($_SERVER["HTTP_ACCEPT_LANGUAGE"] == "pt")
    header("location: pt/index.php");
  else 
    header("location: en/index.html");
?>

これを .php の前に index.php に入れました。私は英語圏の国ではありませんが、ブラウザが英語であり、英語版にリダイレクトされているため、機能しているようです.

これは正しいです?これを行うためのより良い/よりクリーンな方法はありますか?

4

5 に答える 5

17

PHP 5.3.0+ には、ヘッダーlocale_accept_from_http()から優先言語を取得するものが付属しています。Accept-Language

ヘッダー フィールドは想像以上に複雑であるため、常にこのメソッドを自己記述メソッドよりも優先する必要があります。(重み付けされた設定のリストです。)

次のように言語を取得する必要があります。

$lang = locale_accept_from_http($_SERVER['HTTP_ACCEPT_LANGUAGE']);

しかし、それでも、enすべての英語ユーザーとesスペイン語ユーザーだけが利用できるわけではありません。それよりもはるかに難しくes-ESなる可能性があり、やのようなものes-USが標準です。

これは、試してみる正規表現のリストを反復処理し、その方法でページ言語を決定する必要があることを意味します。例については、 PHP-I18Nを参照してください。

于 2014-07-04T20:39:45.247 に答える
5

あなたのアイデアは素晴らしいと思います。コードを最短にするのに役立つかもしれません:

$lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
header("location: ".$lang."/index.php");
于 2013-07-23T07:24:18.750 に答える
2

それはうまくいくはずです。http_negotiate_languageを使用して、ここで議論することもできます

于 2013-07-23T07:24:54.427 に答える
-1

このコードが最も役立つ

    $lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
if(file_exists('system/lang/'.$lang.'.php'))
{
    include('system/lang/'.$lang.'.php');
}else{
    include('system/lang/en.php'); //set default lang here if not exists translated language in ur system
    }
于 2016-04-22T18:29:39.737 に答える