@ngneat/transloco
Version:
The internationalization (i18n) library for Angular
61 lines • 2.35 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const types_1 = require("../types");
const transloco_1 = require("../utils/transloco");
function reduceTranslations(host, dirPath, translationJson, lang, key = '') {
const dir = host.getDir(dirPath);
if (!transloco_1.hasFiles(dir))
return translationJson;
dir.subfiles
.filter(fileName => fileName.includes(`${lang}.json`))
.forEach(fileName => {
if (!translationJson[key]) {
return translationJson;
}
transloco_1.setFileContent(host, dir.path, fileName, translationJson[key]);
delete translationJson[key];
});
if (transloco_1.hasSubdirs(dir)) {
dir.subdirs.forEach(subDirName => {
const subDir = dir.dir(subDirName);
const nestedKey = transloco_1.getTranslationKey(key, subDirName);
reduceTranslations(host, subDir.path, translationJson, lang, nestedKey);
});
}
return translationJson;
}
function parserFactory(format) {
switch (format) {
case types_1.TranslationFileFormat.JSON:
return JSON.parse;
case types_1.TranslationFileFormat.PO:
// TODO:
// return jsonBuilder;
case types_1.TranslationFileFormat.XLIFF:
// TODO:
// return jsonBuilder;
default:
return JSON.parse;
}
}
function default_1(options) {
return (host, context) => {
const root = transloco_1.getTranslationsRoot(host, options);
const parser = parserFactory(options.format);
const translatedFiles = transloco_1.getTranslationFiles(host, options.source, parser);
const translationEntryPaths = transloco_1.getTranslationEntryPaths(host, root);
const newTranslation = {};
translatedFiles.forEach(t => {
newTranslation[t.lang] = translationEntryPaths.reduce((acc, path) => {
return reduceTranslations(host, path.path, t.translation, t.lang, path.scope);
}, t.translation);
});
host.getDir(root).subfiles.forEach(fileName => {
const lang = fileName.split('.')[0];
transloco_1.setFileContent(host, root, fileName, newTranslation[lang]);
});
return host;
};
}
exports.default = default_1;
//# sourceMappingURL=index.js.map