Revert "Deprecate API v2" (#7801)

This commit is contained in:
Matteo Pagliazzi
2016-07-17 18:15:25 +02:00
committed by GitHub
parent 45c31a2bcf
commit 590adb3438
193 changed files with 11487 additions and 230 deletions

View File

@@ -1,91 +0,0 @@
import { model as User } from '../models/user';
import accepts from 'accepts';
import common from '../../../common';
import _ from 'lodash';
import {
translations,
defaultLangCodes,
multipleVersionsLanguages,
} from '../libs/i18n';
const i18n = common.i18n;
function _getUniqueListOfLanguages (languages) {
let acceptableLanguages = _(languages).map((lang) => {
return lang.slice(0, 2);
}).uniq().value();
let uniqueListOfLanguages = _.intersection(acceptableLanguages, defaultLangCodes);
return uniqueListOfLanguages;
}
function _checkForApplicableLanguageVariant (originalLanguageOptions) {
let languageVariant = _.find(originalLanguageOptions, (accepted) => {
let trimmedAccepted = accepted.slice(0, 2);
return multipleVersionsLanguages[trimmedAccepted];
});
return languageVariant;
}
function _getFromBrowser (req) {
let originalLanguageOptions = accepts(req).languages();
let uniqueListOfLanguages = _getUniqueListOfLanguages(originalLanguageOptions);
let baseLanguage = (uniqueListOfLanguages[0] || '').toLowerCase();
let languageMapping = multipleVersionsLanguages[baseLanguage];
if (languageMapping) {
let languageVariant = _checkForApplicableLanguageVariant(originalLanguageOptions);
if (languageVariant) {
languageVariant = languageVariant.toLowerCase();
} else {
return 'en';
}
return languageMapping[languageVariant] || baseLanguage;
} else {
return baseLanguage || 'en';
}
}
function _getFromUser (user, req) {
let preferredLang = user && user.preferences && user.preferences.language;
let lang = translations[preferredLang] ? preferredLang : _getFromBrowser(req);
return lang;
}
export function attachTranslateFunction (req, res, next) {
res.t = function reqTranslation () {
return i18n.t(...arguments, req.language);
};
next();
}
export function getUserLanguage (req, res, next) {
if (req.query.lang) { // In case the language is specified in the request url, use it
req.language = translations[req.query.lang] ? req.query.lang : 'en';
return next();
} else if (req.locals && req.locals.user) { // If the request is authenticated, use the user's preferred language
req.language = _getFromUser(req.locals.user, req);
return next();
} else if (req.session && req.session.userId) { // Same thing if the user has a valid session
return User.findOne({
_id: req.session.userId,
}, 'preferences.language')
.lean()
.exec()
.then((user) => {
req.language = _getFromUser(user, req);
return next();
})
.catch(next);
} else { // Otherwise get from browser
req.language = _getFromUser(null, req);
return next();
}
}