2009-09-29 9 views
7

私は現在、ユーザの言語でコンテンツを提供するための自動ユーザ言語検出に取り組んでいます。PHPで安定したソリューションでユーザ言語を検出

もちろん、手動で言語を変更することは可能ですが、ユーザーがページを初めて訪れた場合は、自分の言語でコンテンツを提供したいと考えています。

de-de,de;q=0.8,en-us;q=0.5,en;q=0.3

最良の方法は、EN」のような明確な結果を得るために、この結果をフィルタリングするいただきました:そのような結果を得るためにヴァール -

は、だから私は$ _SERVER [「HTTP_ACCEPT_LANGUAGE」]をグーグルと発見されました"/" DE "/" IT "?

$rL = $_SERVER["HTTP_ACCEPT_LANGUAGE"]; // de-de,de;q=0.8,en-us;q=0.5,en;q=0.3 
$langCode = strtoupper($rl[0].$rl[1]); 

このServer-Varの第2の問題は、ブラウザがいくつかの情報を提供している場合にのみ結果が得られることです。それを扱う唯一の可能性はデフォルトのページ言語に設定されていますか?

私が興味を持っているのは、IPで言語を取得することです。だから私が言語を手に入れたら、おそらくユーザーの言語を知っているでしょう。しかし、スイス、ベルギーのような多言語国では何がありますか? tldは.com/.net/.orgのようになります。

どのような方法でユーザーの言語を検出しますか?

ありがとうございました。

答えて

5

Accept-Languageのスティック。すべてのブラウザーがヘッダーを渡し、ユーザーが望む言語である可能性が高いです。実際には単なる文字列でen/de/itを探しているのも、多少の偽の方法は、IPスニッフィングより良い作品ものの

PECLは、ヘッダを解析し、適切にあなたの言語を選択することができますhttp_negotiate_languageを持っています。

Whats with tld's like .com/.net/.org and so on.

ドメイン名は通常、いくつかの国に接続され、おそらくあるIP範囲の独自のバックエンドデータベースを有し、スニッフィングIPに関与していません。カントリー推測のための逆解読は、ccTLDに対して逆解決するIPがほとんどないためほとんど役に立たない。

+0

よく、http_negotiate_languageの例を使用しようとしたとき - 致命的なエラー:未定義の関数を呼び出すhttp_negotiate_language() - 何が間違っていますか? – wildhaber

+0

pecl_http拡張機能をインストールします。 http://uk.php.net/manual/en/http.install.phpまた、negotiate_languageページのコメントにネイティブPHPバージョンがあり、OKであるはずです。 – bobince

1

ベストプラクティスとして、私は実際によく開発されたZend FrameworkのZend_Localeコンポーネントを使用します。

ユーザーのローカル設定の検出から、多言語の国際化通貨、番号、日付書式設定、翻訳管理ソリューションまで、アプリケーションのI18nとローカライズに必要なすべての機能を備えています。

関連する問題