Чтение набора файлов перевода в каталоге файлов и назначение данных глобальному объекту, чтобы я мог получить перевод с помощью 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);
}
});
ПОПЫТКА 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



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Я предполагаю, что вы используете 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);
});
на самом деле я использовал доморощенную версию walkDir, но я проверю это. Благодарность!