WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:ブラウザの言語によってページを切り替えるJavaScript

0:[投稿] sky [2003/03/23 08:36 ][環境:わからない わからない]

日本語のブラウザ-でアクセスした時と、英語のブラウザ-(又は日本語以外の外国語)でアクセスした時で、表示が変わるようにしたいです。
ページは全て日本語で制作したのですが、訪れた人のブラウザ-の言語が日本語以外の外国語だった場合、自動的にもう一つの英語だけで制作したサイトへ振り分けるJavaScriptが知りたいです。

JavaScriptに関しては、サンプルを見てなんとなく分かる程度の初心者です。
こんな風に書き出してみましたが・・・、自信がありません。お力をかして下さい。m(._.)m
<script language="JavaScript">
<!--
navigator.browserLanguage=navigator.platform;
if(navigator.browserLanguage.indexOf("en") >= 0)location.href="http://aaa.jp/~eigo/"
//
navigator.language=navigator.platform;
if(navigator.language.indexOf("en") >= 0)
location.href="http://aaa.jp/~eigo/"
-->
</script>

と、こんな感じになるのでしょうか・・・?!
誤りを、正しく訂正していただけませんか。

上部はIE用に、下部はNN向けに対応させたつもりです。
自分のブラウザ-が英語でない為、これで正しく機能するのか確認もできません。


1:[回答] chintara [2003/03/24 11:06 ]

こんな感じでどうでしょうか。

<script>
<!--
var lang = '';

if (navigator.browserLanguage) {
    lang = navigator.browserLanguage;
} else if (navigator.language) {
    lang = navigator.language;
}

if (lang.length > 2) {
    lang = lang.substr(0, 2);
}

if (lang != 'ja') {
    location.href = 'http://aaa.jp/~eigo/';
}
//-->
</script>


2:[回答] ひじ [2003/03/24 23:43 ]

navigator.browserLanguage や、 navigator.language は、ブラウザの言語ではありません。ユーザがブラウザに設定する希望言語の優先順位です。この希望言語の優先順位設定は、ユーザが設定することができるようになっています(WinIEであれば、[オプション]→[全般]タブ→[言語])。

Webブラウザは、サーバにユーザが設定した希望言語の情報を送ります。
ユーザが1.日本語、2.英語 というような設定をしていれば、
Accept-Language: ja, en
というヘッダを送ります。サーバはこれを解釈して、適切な言語のリソースがあれば
これを返すことができます(これをContent Negotiationと呼びます)。

サーバがApacheであれば、 .htaccess に
Options +MultiViews
AddLanguage ja ja
AddLanguage en en
と書いてあれば、
hoge.html.ja (日本語)
hoge.html.en (英語)
hoge.html.html (その他)
の3つのファイルを置いてある場合に hoge.html というURLを要求された場合には、ブラウザで日本語を希望するように設定されていれば、サーバはhoge.html.jaを返します。
もし中国語、フランス語、クリンゴン語だとかを要求されるような場合は、サーバはhoge.html.html を返します。

JavaScriptで言語の振り分けを行うことは推奨しません。JavaScriptを使った振り分けは、JavaScriptをOffにしたブラウザ、JavaScript非対応ブラウザ、ロボットにとっては致命的となります。


3:[回答] chintara [2003/03/25 10:42 ]

関連記事:
http://www.ybi.co.jp/koike/qa2000/qa2033.htm


4:[回答] ma-to [2003/03/25 14:00 ]


環境に「わからない」と書く人の環境は、
* HTTPサーバーがApache 1.3である。
* Optionsを使えない可能性が低くはない。
と想像されるが、いかがでしょう。

ともかく、
http://www.ietf.org/rfc/rfc2616.txt の12章
http://httpd.apache.org/docs/content-negotiation.html
を読んで知識を得てもらうのが遠回りのようで近道かと。

最悪、SSIならば、
http://httpd.apache.org/docs/howto/ssi.html#conditionalexpressions
あたりを見れば、簡単な制御は出来るようになると思う。
CGIを起動せざるを得ない、というのなら、
    for ($ENV{HTTP_ACCEPT_LANGUAGE}) {
        $uri = /^ja/ && "..." ||
        ...
        ;
    }
    print "Location: $uri\n\n";
    exit;
というかんじのコードを何処か(cgi-mlかPerl Cookbook立ち読みか)で見た記憶があるので、質問者自身の時間を使って調べれば何とでもなると思う。

ここまでの何れも利用できなければ、諦めて終了せざるを得ないということは、>>2でも>>3でも指摘されている。出来ないんだから。
そして、極論すれば、出来る出来ないに関わらず、クライアント側(JavaScriptやLWPなど)では、オイシイとは言えない。このことは、rfc2616の12.2で指摘されている。

回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]

ChaichanPAPA's World