Use accepts library.

This commit is contained in:
gaba
2017-06-02 08:24:21 -07:00
parent 44d82f8b13
commit b9b62e5764
3 changed files with 11 additions and 50 deletions
+2 -1
View File
@@ -5,6 +5,7 @@ const CommentsService = require('../../../services/comments');
const mailer = require('../../../services/mailer');
const errors = require('../../../errors');
const authorization = require('../../../middleware/authorization');
const i18n = require('../../../services/i18n');
const {
ROOT_URL
} = require('../../../config');
@@ -114,7 +115,7 @@ const SendEmailConfirmation = (app, userID, email, referer) => UsersService
rootURL: ROOT_URL,
email
},
subject: 'email.confirm.subject',
subject: i18n.t('email.confirm.subject'),
to: email
});
});
+7 -48
View File
@@ -5,57 +5,15 @@ const yaml = require('yamljs');
const es = yaml.load('./locales/es.yml');
const en = yaml.load('./locales/en.yml');
const accepts = require('accepts');
// default language
let defaultLanguage = 'en';
let language = defaultLanguage;
const languages = ['en', 'es'];
const translations = Object.assign(en, es);
/**
* guess language setting based on http headers
*/
const guessLanguage = (request) => {
if (typeof request === 'object') {
let languageHeader = request.headers ? request.headers['accept-language'] : undefined;
const acceptedLanguages = getAcceptedLanguagesFromHeader(languageHeader);
let lang;
for (let i = 0; i < acceptedLanguages.length; i++) {
lang = acceptedLanguages[i].split('-', 2)[0];
}
return lang;
}
return defaultLanguage;
};
/**
* Get a sorted list of accepted languages from the HTTP Accept-Language header
*/
const getAcceptedLanguagesFromHeader = (header) => {
let languages = header.split(',');
let preferences = {};
return languages.map((item) => {
let preferenceParts = item.trim().split(';q=');
if (preferenceParts.length < 2) {
preferenceParts[1] = 1.0;
} else {
let quality = parseFloat(preferenceParts[1]);
preferenceParts[1] = quality ? quality : 0.0;
}
preferences[preferenceParts[0]] = preferenceParts[1];
return preferenceParts[0];
})
.filter(function(lang) {
return preferences[lang] > 0;
})
.sort(function sortLanguages(a, b) {
return preferences[b] - preferences[a];
});
};
/**
* Exposes a service object to allow translations.
* @type {Object}
@@ -66,7 +24,8 @@ const i18n = {
* Create the new Task kue.
*/
init(req) {
language = guessLanguage(req);
const lang = accepts(req).language(languages);
language = lang ? lang : defaultLanguage;
},
/**
@@ -76,7 +35,7 @@ const i18n = {
if (has(translations[language], key)) {
let translation = get(translations, key);
let translation = get(translations[language], key);
// replace any {n} with the arguments passed to this method
replacements.forEach((str, i) => {
+2 -1
View File
@@ -80,6 +80,7 @@ const mailer = module.exports = {
}),
sendSimple({template, locals, to, subject}) {
if (!to) {
return Promise.reject('sendSimple requires a comma-separated list of "to" addresses');
}
@@ -89,7 +90,7 @@ const mailer = module.exports = {
}
// Prefix the subject with `[Talk]`.
subject = `[Talk] {t(${subject})}`;
subject = `[Talk] ${subject}`;
locals['t'] = i18n.t;