mirror of
https://github.com/wassname/talk.git
synced 2026-08-09 12:30:42 +08:00
Use accepts library.
This commit is contained in:
@@ -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
@@ -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
@@ -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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user