2012-08-07 12 views
26

ユーザーがいくつかのページを要求しています。私はブラウザの言語が何であるかを(サーバー側で)知りたいと思っています。だから私は適切なメッセージでテンプレートをレンダリングすることができました。クライアント側では
node.js(express.js)でブラウザ言語を取得するにはどうすればよいですか?

それは簡単です:

var language = window.navigator.userLanguage || window.navigator.language 

答えて

45

あなたはreq.headers [「受け入れ言語を」]を/は、ユーザーが自分のブラウザに設定しているロケールの言語を取得するために使用することができます。

簡単にサポートするため、locale moduleを調べるとよいでしょう。

+1

req.headers ["accept-language"]: "uk、ru; q = 0.8、en-us; q = 0.5、en; q = 0.3"選択された言語は "uk"です。リストからこの言語を取得するには? –

+4

@OlegDatsロケールモジュールは解析するのに役立ちますが、基本的には、ユーザーがロケール(優先順位順)、英語(英語)、英語(英語)、英語(英語)、英語英語)、qは重み係数であり、qが高いほど優先度が高いことを意味する。 –

+9

@JoachimIsaksson ukは英国語ではなく、 'en-gb'になります。おそらく英国はウクライナ語です。最初の2文字は常に地域ではなく、言語である。 – UpTheCreek

22

request.acceptsLanguagesには、request.headers['accept-language']の解析バージョンが含まれます。

参照してください:http://expressjs.com/en/api.html#req.acceptsLanguages

+2

下にあるパッケージは、交渉者https://github.com/federomero/negotiator –

+5

は速達4には当てはまりません。 – Offirmo

+1

Express 4では、ユーザーが単一のリストまたはリストを受け入れるかどうかを確認する方法として 'req.acceptedLanguages'を使用できます言語。それをチェックしてください:http://blog.hubii.com/dev-detecting-header-language-on-express-js/ – miduga

15

をExpressの4.xのでは、特定の言語が受け入れられるかどうかを確認するreq.acceptsLanguages(lang [, ...])でビルドを使用することができます。

var express = require('express'); 
app.get('/translation', function(request, response) { 
    var lang = request.acceptsLanguages('fr', 'es', 'en'); 
    if (lang) { 
     console.log('The first accepted of [fr, es, en] is: ' + lang); 
     ... 
    } else { 
     console.log('None of [fr, es, en] is accepted'); 
     ... 
    } 
}); 

エクスプレス4.xを使用して、すべての受理言語のリストを取得するには、モジュールacceptsを使用することができます。

var express = require('express'), accepts = require('accepts'); 
app.get('/translation', function(request, response) { 
    console.log(accepts(request).languages()); 
    ... 
}); 
+0

実際、 'req.acceptsLanguages'はacceptsモジュールを使って' apply'をします。もしあなたが引数を渡さなければ同じ言語のリストを得るでしょう(優先順位の配列として)。ただし、文書化された動作ではないことに注意してください.Expressのドキュメントでは、 'lang'引数が必要とされています。 – Inkling

0

req.headers["accept-language"]の文字列を解析する必要があります。クライアントからの優先言語の優先順位リストが表示されます。ご使用の言語がサポートされているかどうか確認することもできます。req.acceptsLanguages(lang [, ...])

express-request-languageを使用することを強くお勧めします。これは、最初に正しく理解することは非常に困難な場合があります。

ほとんどの場合、言語に一致するだけでは不十分です。ユーザーは優先言語を変更することができます。 express-request-languageは、クッキーに優先言語を保存するのに役立ちます。これは、サーバーに、優先言語を変更するURLパスも与えます。上記のすべての機能は、コードの行だけのカップルで行うことができます

:一致なしの場合

app.use(requestLanguage({ 
    languages: ['en-US', 'zh-CN'], 
    cookie: { 
    name: 'language', 
    options: { maxAge: 24*3600*1000 }, 
    url: '/languages/{language}' 
    } 
})); 

、ミドルウェアは、デフォルトの言語(上記en-US)と一致します。

関連する問題