web-dev-qa-db-fra.com

Comment puis-je obtenir la langue du navigateur dans node.js (express.js)?

L'utilisateur demande une page et je veux savoir (côté serveur) quelle est la langue de son navigateur. Je pourrais donc rendre un modèle avec les bons messages. 

Côté client, c'est facile:

var language = window.navigator.userLanguage || window.navigator.language
36
Oleg Dats

Vous pouvez utiliser req.headers ["accept-language"] pour obtenir la langue/les paramètres régionaux définis par l'utilisateur dans son navigateur.

Pour faciliter la prise en charge, vous voudrez peut-être examiner un module locale .

58
Joachim Isaksson

request.acceptsLanguages contiendra une version analysée de request.headers['accept-language'].

Voir: http://expressjs.com/fr/api.html#req.acceptsLanguages ​​

23
cGuille

Avec Express 4.x, vous pouvez utiliser la construction req.acceptsLanguages ​​(lang [ ...]) pour vérifier si certaines langues sont acceptées.

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

Pour obtenir la liste de toutes les langues acceptées, à l'aide d'Express 4.x, vous pouvez utiliser le module accepte .

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

Vous devrez analyser la chaîne dans req.headers["accept-language"]. Ce qui vous donnera une liste prioritaire des langues préférées du client. Vous pouvez également vérifier req.acceptsLanguages(lang [, ...]) si votre langue est prise en charge ou non.

Je recommande fortement d'utiliser express-request-language pour effectuer tout travail de correspondance linguistique, car il pourrait être très difficile de l'exécuter correctement la première fois. 

La plupart du temps, faire correspondre une langue ne suffit pas. Un utilisateur peut vouloir changer une langue préférée. express-request-language vous aide à stocker une langue préférée dans un cookie, il donne également à votre serveur un chemin d’URL pour modifier une langue préférée. 

Toutes les fonctionnalités ci-dessus peuvent être réalisées avec quelques lignes de code:

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

En l'absence de correspondance, le middleware correspondra également à une langue par défaut (en-US ci-dessus). 

0
einstein