nestjs-i18n
Version:
The i18n module for Nest.
67 lines • 2.46 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.parse = parse;
exports.pick = pick;
function isString(s) {
return typeof s === 'string';
}
function parse(al) {
if (!al)
return [];
const parts = al.split(',');
const result = [];
for (let i = 0; i < parts.length; i++) {
const m = parts[i].trim();
if (!m)
continue;
const bits = m.split(';');
const ietf = bits[0].split('-');
const hasScript = ietf.length === 3;
result.push({
code: ietf[0],
script: hasScript ? ietf[1] : null,
region: hasScript ? ietf[2] : ietf[1] || null,
quality: bits[1] ? parseFloat(bits[1].split('=')[1]) : 1.0
});
}
return result.sort((a, b) => b.quality - a.quality);
}
function pick(supportedLanguages, acceptLanguage, options = {}) {
if (!supportedLanguages || !supportedLanguages.length || !acceptLanguage) {
return null;
}
let parsedAcceptLanguage;
if (isString(acceptLanguage)) {
parsedAcceptLanguage = parse(acceptLanguage);
}
else {
parsedAcceptLanguage = acceptLanguage;
}
const supported = supportedLanguages.map((support) => {
const bits = support.split('-');
const hasScript = bits.length === 3;
return {
code: bits[0],
script: hasScript ? bits[1] : null,
region: hasScript ? bits[2] : bits[1] || null
};
});
for (let i = 0; i < parsedAcceptLanguage.length; i++) {
const lang = parsedAcceptLanguage[i];
const langCode = lang.code.toLowerCase();
const langRegion = lang.region ? lang.region.toLowerCase() : null;
const langScript = lang.script ? lang.script.toLowerCase() : null;
for (let j = 0; j < supported.length; j++) {
const supportedCode = supported[j].code.toLowerCase();
const supportedScript = supported[j].script?.toLowerCase() ?? null;
const supportedRegion = supported[j].region?.toLowerCase() ?? null;
if (langCode === supportedCode &&
(options.loose || !langScript || langScript === supportedScript) &&
(options.loose || !langRegion || langRegion === supportedRegion)) {
return supportedLanguages[j];
}
}
}
return null;
}
//# sourceMappingURL=accept-language-parser.js.map