ウェブサイトの他言語対応

ウェブサイト訪問者のユーザー言語を取得し、自動判別または表示言語の切り替えを行う方法を下記に紹介します。

1. パラメータ or ユーザー言語を取得し変数に格納

#URLのパラメータ指定がなければ、環境変数からユーザー言語を取得
  if ($_REQUEST["lang"]) $lang=$_REQUEST["lang"];
  else $lang=$_SERVER["HTTP_ACCEPT_LANGUAGE"];

2. 取得したユーザー言語の先頭2文字だけを抽出

#$lang変数の中身が "en-us"なら "en"、"ja-jp"なら "ja"と格納
  $lang=substr($lang,0,2);

この時点で大まかな言語の振り分けはできたので、あとは下記の要領で表示するコンテンツをユーザー言語によって分けていく。その前に、デフォルトのインクルード関数は不便が多いため、下記の関数を使用する。

3-1. 読み込むファイルがなければ処理を中断するインクルード関数を用意する

function get_include_contents($filename) {
   if (is_file($filename)) {
    ob_start();
    include $filename;
    $contents = ob_get_contents();
    ob_end_clean();
    return $contents;
   }
   return false;
  }

3-2. ユーザー言語によって表示するコンテンツ・処理を分岐させる

#インクルードファイルがあるディレクトリ名を指定
  $dir="include";

#ユーザー言語が日本のものならば日本語のファイルを格納
  if ($lang=="ja") $main = get_include_contents( $dir."/"."inc_main.inc" );
  #ユーザー言語が日本以外のものならば英語のファイルを格納
  else $main = get_include_contents( $dir."/"."inc_main_en.inc" );

#文字コードを "utf-8"に変換
  $main = mb_convert_encoding($main, "utf-8", "auto");

4. 読み込んだファイルの中身を表示したい個所に下記1行を記述

<?php echo $main; ?>

e.x.1. 上記の方法だと Googlebotがアクセスした際に英語版のページがクロールされてしまうので、下記の1行を追加しフラグを立て、条件を好みに応じて分けるとよい。

if (ereg("Googlebot", $UserAgent)) $isrobot=true;

e.x.2. Flashの _rootに取得したユーザー言語を引き継ぐ場合

//swfObjectを使用する場合は下記1行を追加する
  so.addVariable("lang", "<?php echo $lang ?>");

以上の手順で、英語圏のユーザーがアクセスした際は英語版のページが自動表示されるようになった。また、http://atziluth.jp/?lang=en と URLにパラメータを指定すれば、強制的に英語版のページが表示される。

ちなみに、AltaVistaなど海外サーチエンジンへの対策としては、英語版のページを http://en.atziluth.jp/ のようにサブドメインを切って分けるのがよい。方法の1つとしては、/enディレクトリに .htaccessを設置し、その中に下記リダイレクト設定を記述する。

Options +FollowSymLinks
  RewriteEngine On

RewriteRule ^$ http://atziluth.jp/?lang=en [R]