/
locale.js
32 lines (26 loc) · 921 Bytes
/
locale.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import logger from '../utils/logger';
const validateQueryLocale = (locale) => {
const language = locale;
if (!language) return null;
if (/^en/.test(language)) return 'en';
// if (/^fr/.test(language)) return 'fr';
if (/^zh/.test(language)) return 'zh';
return null;
};
const formatLocale = locale => locale.split(/-|_/)[0];
const localeMiddleware = () => async (ctx, next) => {
const queryLocale = validateQueryLocale(ctx.query.locale);
if (queryLocale) {
ctx.session.locale = queryLocale;
} else if (!ctx.session.locale) {
const locale = formatLocale(ctx.__getLocale());
ctx.session.locale = locale || 'zh';
}
const sessionLocale = ctx.session.locale;
ctx.state.locale = sessionLocale;
ctx.state.description = ctx.__('description');
ctx.state.keywords = ctx.__('keywords');
await next();
logger.info(`[LOCALE][${ctx.state.locale}]`);
};
export default localeMiddleware;