读取文件目录中的一堆翻译文件并将数据分配给全局对象,以便我可以使用i18nContent.messages.en.9999
提取翻译
文件树是这样的
locales
messages
en.json => {"9999": "Unexpected Error", "0": "Success"}
de.json => {"9999": "German Error", "0": "German Success"}
emails
en.json => {"signupEmail": "Thanks for signing up", "passwordEmail": "Password changed"}
de.json => {"signupEmail": "German signing up", "passwordEmail": "German Password changed"}
我能够获得每个嵌套对象的所有“名称”。但是,我无法在目录遍历期间组装总对象。
尝试1
global.i18nContent = {};
walkDir(dir, function (filePath, dir) {
if (filePath.substr(-5) === ".json") {
let directory = dir.split(/[\s\/]+/);
directory = directory[directory.length - 1];
let lang = filePath.split(/[\s\/]+/);
lang = lang[lang.length - 1].substr(-7, 2);
//this substr fix is to make this work on Macs
let rem = __dirname.toString().substr(0, __dirname.toString().length - 3);
let langFolder = {};
langFolder[lang] = require(filePath.replace(rem, '../'));
Object.assign(i18nContent[directory], langFolder);
}
});
ATTEMPT 2
已删除
let langFolder = {};
langFolder[lang] = require(filePath.replace(rem, '../'));
Object.assign(i18nContent[directory], langFolder);
并尝试了i18nContent[directory][lang] = require(filePath.replace(rem, '../'))
或i18nContent[directory[lang]] = require(filePath.replace(rem, '../'))
控制台输出显示['undefined']
应嵌套引用为i18nContent.messages.en.9999
答案 0 :(得分:0)
我假设您正在使用walkdir,对吗?然后我会像这样:
global.i18nContent = {};
const emitter = walkDir(yourDir);
emitter.on('file', filename => {
const parts = filename.match(/^.*\/locales\/(\w*)\/(\w*)\.json$/);
if (!parts) return;
const [, folderName, lang] = parts;
if (!global.i18nContent[folderName]) global.i18nContent[folderName] = {};
global.i18nContent[folderName][lang] = require(filename);
});