issue#52-update lang to locale

This commit is contained in:
Dan Ribbens
2019-01-29 06:23:37 -05:00
parent 3ec9cfb159
commit 1e1572146d
5 changed files with 55 additions and 55 deletions

View File

@@ -8,7 +8,7 @@ import User from '../demo/User/User.model';
import fileUpload from 'express-fileupload';
import assetRoutes from './routes/uploads.routes'
import config from '../demo/payload.config';
import language from './middleware/language';
import language from './middleware/locale';
module.exports = {
init: options => {

View File

@@ -1,27 +0,0 @@
import languageParser from 'accept-language-parser';
/**
* sets request language
*
* @param localization
* @returns {Function}
*/
export default function language(localization) {
return function (req, res, next) {
let query;
if (req.query.lang) {
query = localization.languages.find(lang => lang === req.query.lang);
if (query) {
req.language = query;
}
if (req.query.lang === '*' || req.query.lang === 'all')
return next();
}
if (!req.language && req.headers['accept-language'])
req.language = languageParser.pick(localization.languages, req.headers['accept-language']);
if (!req.language)
req.language = localization.defaultLanguage;
next();
}
}

27
src/middleware/locale.js Normal file
View File

@@ -0,0 +1,27 @@
import languageParser from 'accept-language-parser';
/**
* sets request locale
*
* @param localization
* @returns {Function}
*/
export default function locale(localization) {
return function (req, res, next) {
let query;
if (req.query.locale) {
query = localization.languages.find(locale => locale === req.query.locale);
if (query) {
req.locale = query;
}
if (req.query.locale === '*' || req.query.locale === 'all')
return next();
}
if (!req.locale && req.headers['accept-language'])
req.locale = languageParser.pick(localization.languages, req.headers['accept-language']);
if (!req.locale)
req.locale = localization.defaultLanguage;
next();
}
}

View File

@@ -1,6 +1,6 @@
import middleware from '../middleware';
import mockExpress from 'jest-mock-express';
import language from '../middleware/language';
import locale from '../middleware/locale';
let res = null;
let next = null;
@@ -41,7 +41,7 @@ describe('Payload Middleware', () => {
});
describe('Payload Language Middleware', () => {
describe('Payload Locale Middleware', () => {
let req, localization;
@@ -58,65 +58,65 @@ describe('Payload Middleware', () => {
});
it('Supports query params', () => {
req.query.lang = 'es';
req.query.locale = 'es';
language(localization)(req, res, next);
locale(localization)(req, res, next);
expect(next).toHaveBeenCalledTimes(1);
expect(req.language).toEqual(req.query.lang);
expect(req.locale).toEqual(req.query.locale);
});
it('Supports query param fallback to default', () => {
req.query.lang = 'pt';
language(localization)(req, res, next);
locale(localization)(req, res, next);
expect(next).toHaveBeenCalledTimes(1);
expect(req.language).toEqual(localization.defaultLanguage);
expect(req.locale).toEqual(localization.defaultLanguage);
});
it('Supports accept language header', () => {
it('Supports accept-language header', () => {
req.headers['accept-language'] = 'es,fr;';
language(localization)(req, res, next);
locale(localization)(req, res, next);
expect(next).toHaveBeenCalledTimes(1);
expect(req.language).toEqual('es');
expect(req.locale).toEqual('es');
});
it('Supports accept language header fallback', () => {
req.query.lang = 'pt';
it('Supports accept-language header fallback', () => {
req.query.locale = 'pt';
req.headers['accept-language'] = 'fr;';
language(localization)(req, res, next);
locale(localization)(req, res, next);
expect(next).toHaveBeenCalledTimes(1);
expect(req.language).toEqual(localization.defaultLanguage);
expect(req.locale).toEqual(localization.defaultLanguage);
});
it('Query param takes precedence over header', () => {
req.query.lang = 'es';
req.query.locale = 'es';
req.headers['accept-language'] = 'en;';
language(localization)(req, res, next);
locale(localization)(req, res, next);
expect(next).toHaveBeenCalledTimes(1);
expect(req.language).toEqual('es');
expect(req.locale).toEqual('es');
});
it('Supports default language', () => {
language(localization)(req, res, next);
locale(localization)(req, res, next);
expect(next).toHaveBeenCalledTimes(1);
expect(req.language).toEqual(localization.defaultLanguage);
expect(req.locale).toEqual(localization.defaultLanguage);
});
it('Supports language all', () => {
req.query.lang = 'all';
language(localization)(req, res, next);
req.query.locale = '*';
locale(localization)(req, res, next);
expect(next).toHaveBeenCalledTimes(1);
expect(req.language).toBeUndefined();
expect(req.locale).toBeUndefined();
});
});
});