スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[PHP] $_SERVER['HTTP_ACCEPT_LANGUAGE'] からの言語設定の取得

ブラウザの言語設定をPHPで取得してあれやこれやするための前準備として。
具体的には英語圏からのアクセスは英語ページへ、などという用途があるかと思います。




ブラウザの言語設定は $_SERVER['HTTP_ACCEPT_LANGUAGE'] で取ることが出来ます。
内容としては上記サンプルの1行目のように、ja,en-us;q=0.7,en;q=0.3 みたいな形の文字列です。

[言語],[言語];q=[優先度],[言語];q=[優先度],[言語];q=[優先度]...
の並びの文字列なので、欲しい情報は得られていますが、あれこれするためには
配列か何かに展開すればいいでしょう。まず "," 、次に ";" で explode() すれば、
二次元の配列に整理できるはずです。

そのあとは、言語設定にXXXが含まれているか? 何が言語設定で最優先か? などは
配列を走査すればわかりますね。

上記のサンプルのソースはこんな感じ。

<?php
//言語設定リストの取得
$lang_list = isset( $_SERVER['HTTP_ACCEPT_LANGUAGE'] ) ? $_SERVER['HTTP_ACCEPT_LANGUAGE'] : "";

$buf = "HTTP_ACCEPT_LANGUAGE : ".$lang_list;
$buf .= "<br />";

//まずカンマで分解
$ary_lang = explode( ",", $lang_list );

//処理しやすいように配列に展開
$ary_lang_rate = array("");
for( $i = 0; $i < count( $ary_lang ); $i++ ){
//セミコロンで分解
$temp = explode( ";", $ary_lang[$i] );
//最優先は数値がついていない
if( count( $temp ) > 1 ){
$ary_lang_rate[$i]['lang'] = trim( $temp[0] );
$ary_lang_rate[$i]['rate'] = trim( str_replace( "q=", "", $temp[1] ) );
}else{
$ary_lang_rate[$i]['lang'] = $ary_lang[$i];
$ary_lang_rate[$i]['rate'] = 1;
}
}

//配列を出力してみる
for( $i = 0; $i < count( $ary_lang_rate ); $i++ ){
$buf .= $ary_lang_rate[$i]['lang'];
$buf .= " : ";
$buf .= $ary_lang_rate[$i]['rate'];
$buf .= "<br />";
}
include( "lang.tmpl" );
?>
関連記事
スポンサーサイト

テーマ : PHP
ジャンル : コンピュータ

comment

管理者にだけメッセージを送る

No title

このブログを参照して、ユーザーに最適な言語を取得するクラスをつくりました。

ありがとうございます!

No title

お役にたてたようでなによりです。
検索フォーム
リンク
最新記事
最新コメント
カテゴリ
RSSリンクの表示
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。