dorayakiBlog
~絵や興味ある事について書いてます~
header image

アクセスされた言語別にそれぞれの国ごとのサイトへの遷移をPHPで振り分ける方法

アクセスするユーザー情報に基づきどの国や地域からのアクセスかを判断してそのユーザーに対応した情報や言語などに合わせたページ遷移を促したい事もある。

webサイトのバックグラウンドのホストコンピュータであるサーバサイドでよく使われるプログラミング言語のPHPではMAXMIND(Geolite2ダウンロードページ)というデベロッパーにより有償または無償で提供されるライブラリのGeoIP関数があるので、PHPのサーバ変数の

$_SERVER['REMOTE_ADDR']

でユーザーのアクセス元(プロバイダ等)のIPアドレスを取得してGeoIP関数(geoip_country_code_by_name()等の)で国判定するのが良いのだろう。けれどもGeoIPをインストールするのが面倒なのでもっと簡単に気軽に国判定したい場合はアクセスするユーザーの使用言語を取得して国判定をするのが楽である。

ユーザーの(ブラウザで)使用している言語を取得するにはサーバ変数の

$_SERVER['HTTP_ACCEPT_LANGUAGE']

で取得する。例えば日本語ならjaやja-JP等の言語コードを返してくれるので各国の言語に対応した言語コードを取得し判定する。
返してくる文字列はまず文頭に第一言語であるが第二、第三言語も続けて返してきたりする事もある様なのと(自身の環境では第一言語のみ返してくるが)その他の情報を返してきて判定の邪魔になる可能性もあるので関数のsubstr()で判定に必要となる第一言語の言語コードの部分だけを抽出して切り取る。

(主要先進七国の言語コード)
日本 ja , ja-JP
アメリカ en , en-Us
イギリス en , en-GB
フランス fr , fr-FR
カナダ en , en-CA
ドイツ de , de-DE
イタリア it , it-IT

言語コードは2文字と5文字のパターンがあるのでsbstr()の引数に抽出したい文字列の始点と終点の値を

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

か又は、

substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 5);

にする。
この2文字と5文字のパターンの二種類(どちらのパターンを返すかは不明なので二種使用する)で使用している第一言語を判定すれば敢えて別言語でアクセスしていない限りはおおよそそのユーザーがどこの国の人か判定する事は出来る。ただ旅行や移住で他国で母国語を使用する人もいるだろうし第二言語第三言語を使用せざるを得ない人もいるだろうから必ずしも断定は出来ないが。ただそれはIPアドレスを取得しても同じ事が言えるので一番可能性の大きい条件による判定を選択するのが良さそうである。

GeoIPとHTTP_ACCEPT_LANGUAGEの両方を使用すればなお良いのは間違い無い。