diff --git a/routes/api/users/index.js b/routes/api/users/index.js index 57532b1f9..10d72fe3a 100644 --- a/routes/api/users/index.js +++ b/routes/api/users/index.js @@ -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 }); }); diff --git a/services/i18n.js b/services/i18n.js index d302303ec..eff827cac 100644 --- a/services/i18n.js +++ b/services/i18n.js @@ -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) => { diff --git a/services/mailer.js b/services/mailer.js index 3b3c262cc..27672a35c 100644 --- a/services/mailer.js +++ b/services/mailer.js @@ -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;