JaBa/helpers/languages.js

52 lines
1.3 KiB
JavaScript
Raw Normal View History

const i18next = require("i18next"),
2022-08-29 21:31:36 +05:00
Backend = require("i18next-fs-backend"),
path = require("path"),
fs = require("fs").promises;
2022-01-04 02:18:28 +05:00
async function walkDirectory(dir, namespaces = [], folderName = "") {
const files = await fs.readdir(dir);
const languages = [];
for (const file of files) {
const stat = await fs.stat(path.join(dir, file));
if (stat.isDirectory()) {
const isLanguage = file.includes("-");
if (isLanguage) languages.push(file);
const folder = await walkDirectory(path.join(dir, file), namespaces, isLanguage ? "" : `${file}/`);
namespaces = folder.namespaces;
} else {
namespaces.push(`${folderName}${file.substr(0, file.length - 5)}`);
2022-01-13 00:26:23 +05:00
}
}
2022-01-04 02:18:28 +05:00
return {
namespaces: [...new Set(namespaces)],
languages
};
2022-01-13 00:26:23 +05:00
}
2022-01-04 02:18:28 +05:00
module.exports = async () => {
const options = {
jsonIndent: 2,
loadPath: path.resolve(__dirname, "../languages/{{lng}}/{{ns}}.json")
};
const { namespaces, languages } = await walkDirectory(path.resolve(__dirname, "../languages/"));
i18next.use(Backend);
await i18next.init({
backend: options,
debug: false,
fallbackLng: "ru-RU",
initImmediate: false,
interpolation: { escapeValue: false },
load: "all",
ns: namespaces,
preload: languages
});
return new Map(languages.map(item => [item, i18next.getFixedT(item)]));
};