57

ユーザーがいくつかのページを要求し、私は(サーバー側で)彼/彼女のブラウザーの言語が何であるかを知りたいです。だから私は正しいメッセージでテンプレートをレンダリングすることができました。

クライアント側では簡単です。

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

5 に答える 5

92

req.headers ["accept-language"]を使用して、ユーザーがブラウザーで設定した言語/ロケールを取得できます。

サポートを簡単にするために、ロケールモジュールを調べることをお勧めします。

于 2012-08-07T12:05:38.190 に答える
34

request.acceptsLanguagesの解析済みバージョンが含まれますrequest.headers['accept-language']

参照:http ://expressjs.com/en/api.html#req.acceptsLanguages

于 2013-11-12T08:38:26.307 に答える
32

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');
        ...
    }
});

Express 4.xを使用して、受け入れられるすべての言語のリストを取得するには、モジュールacceptsを使用できます。

var express = require('express'), accepts = require('accepts');
app.get('/translation', function(request, response) {
    console.log(accepts(request).languages());
    ...
});
于 2015-11-15T17:53:38.377 に答える
3

リクエスト言語を設定してグローバルに使用するミドルウェア:

// place this middleware before declaring any routes
app.use((req, res, next) => {
    // This reads the accept-language header
    // and returns the language if found or false if not
    const lang = req.acceptsLanguages('bg', 'en')
    
    if (lang) { // if found, attach it as property to the request
        req.lang = lang
    } else { // else set the default language
        req.lang = 'en'
    }

    next()
})

これで、「req.lang」にアクセスできます

app.get('/', (req, res) => {
    res.send(`The request language is '${req.lang}'`)
})

翻訳を使用した例

const translate = {
    en: {
        helloWorld: "Hello World!"
    },
    bg: {
        helloWorld: "Здравей Свят!"
    }
}
app.get('/hello-world', (req, res) => {
    res.send(translate[req.lang].helloWorld)
})
于 2020-12-26T11:54:17.903 に答える
0

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

最初は正しく理解するのが非常に難しい可能性があるため、言語マッチング作業にはexpress-request-languageを使用することを強くお勧めします。

ほとんどの場合、言語を一致させるだけでは十分ではありません。ユーザーは、優先言語を変更したい場合があります。express-request-language優先言語をCookieに保存するのに役立ち、サーバーに優先言語を変更するためのURLパスも提供します。

上記のすべての機能は、ほんの数行のコードで実行できます。

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

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

于 2016-09-15T15:55:44.160 に答える