複数言語に対応するwebページを作っているときに、
・とりあえず検索エンジンに拾われたい
・URLの表示上は複数に見えなくしたい
・アクセスしてきたユーザの言語環境(場所じゃなくて)
によって対応する言語に切り替えたい
と思い、やってみた。
まずはhtmlで使用している言語を日本語以外です
というか英語か、フランス語か、ドイツ語です、と明記。
これで各言語ごとの検索エンジンに登録したのでたぶん検索インデックスされると思う。
参考にしたのは
複数言語でのHTML、主言語と他の言語指定の方法
次に、.htaccessで言語環境による振り分け。
これがなかなか手こずった。
ここらへんを参考。
言語ネゴシエーションの例
.htaccessで言語別にリダイレクトする。|WEBデザイン Tips
Multiviewsのススメ
まずディレクトリのインデックスファイルを複数用意する。
日本語用ファイル: index.php.jp
英語圏用ファイル: index.php.en
フランス語圏用ファイル: index.php.fr
ドイツ語用ファイル: index.php.de
ここはまあクリア。
いじっていると、アパッチに標準装備なのか
AddLanguageの記述は無くても動く。
LanguagePriority en
Options +MultiViews
ただ、同じファイルを別URLで公開していたところ
DirectoryIndex index
これを追加しておかないと、へんなところに飛ばされる場合があった。
さらに、携帯などの一部のシステムでなぜか406エラーが出るので
ErrorDocument 406 http://www.takewari.com/index.php.en
でエラー飛ばし先を設定。
次に、
検索結果のページも複数言語用意した。
日本語用ファイル: result.php.jp
英語圏用ファイル: result.php.en
フランス語圏用ファイル: result.php.fr
ドイツ語用ファイル: result.php.de
こうしておくと、
result.php?keyword=test
というURLに対して自動で言語環境に応じて
result.php.ja?keyword=test
というURLの内容が表示されることになる。
はずなのだが、
日本、英語、フランス語、ドイツ語以外の環境だとエラーになってしまった。
ここで、
ForceLanguagePriority Prefer Fallback
を指示しておくと優先度の高い言語にリダイレクトされ、かつ406エラーも
でないはずなのだが、.htaccessにこれを追加すると
500エラーになってしまった。もしかするとアパッチのバージョンが低いのか。
よくわからないので竹マットに相談。
ForceLanguagePriority ディレクティブ
ちなみに自分の言語環境を帰るには下記の方法があるのだが、
どうもうまくいかない。ブラウザじゃなくてOSの言語を見に行くのだろうか。
firefoxで日本語以外の言語システムを起動させる方法
firefoxアドオン Locale Switcher 2.1
仕方ないので、ipod touchで言語環境を切り替えてアクセスすると
きちんと動いた。