All files / src/modules/shared/config JSONLocale.loader.ts

0% Statements 0/19
100% Branches 0/0
0% Functions 0/2
0% Lines 0/19

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36                                                                       
import fs from "node:fs";
import path from "node:path";
 
export class JSONLocaleLoader {
	public constructor(private readonly path: string) {}
 
	public async loadTranslations() {
		const locales: Record<string, Record<string, string>> = {};
		const folders = fs.readdirSync(this.path);
 
		for (const langFolder of folders) {
			const langPath = path.join(this.path, langFolder);
			const namespaces = fs.readdirSync(langPath);
			const langData = {};
 
			for (const namespace of namespaces) {
				const namespacePath = path.join(langPath, namespace);
				const files = fs.readdirSync(namespacePath);
				const namespaceData = {};
 
				for (const file of files) {
					const filePath = path.join(namespacePath, file);
					const jsonContent = fs.readFileSync(filePath, "utf-8");
					const jsonData = JSON.parse(jsonContent);
					namespaceData[file.replace(".json", "")] = jsonData;
				}
 
				langData[namespace] = namespaceData;
			}
 
			locales[langFolder] = langData;
		}
		return locales;
	}
}