PHPで表示言語を自動判別
仕事で「日本語環境からアクセスすると日本語ページ」「英語環境からアクセスすると英語ページ」のような切り替えを自動で行う方法を尋ねられたので、具体的な方法を調べてみた。
なかなか目当ての情報にたどり着けなかったけど、主に以下のページを参考にプログラムを作成してみた。
例えば、日本語・英語・中国語を自動判別するなら以下のようなコードで大丈夫そう。
<?php
$languages = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
$languages = array_reverse($languages);
$result = '';
foreach ($languages as $language) {
if (preg_match('/^ja/i', $language)) {
$result = 'Japanese';
} elseif (preg_match('/^en/i', $language)) {
$result = 'English';
} elseif (preg_match('/^zh/i', $language)) {
$result = 'Chinese';
}
}
if ($result == '') {
$result = 'Japanese';
}
echo $result;
?>
環境変数の「HTTP_ACCEPT_LANGUAGE」にブラウザの言語設定が格納されているので、それをもとに自動判別。
言語は複数設定できる上に優先順位も設定できるので、その対策もしておいた。(単純に「HTTP_ACCEPT_LANGUAGEにenが含まれていたら英語環境」のように判別すると、表示言語を複数設定している場合に問題が起きるので、一つ一つ判別。)
稀に大文字で情報が格納されていることもあるそうなので、大文字小文字は区別しないようにもしておいた。
なお、言語が判別できなかった場合は強制的に日本語環境とみなすようにしています。