workadventure/front/src/Translator/TranslationCompiler.ts

72 lines
2.5 KiB
TypeScript
Raw Normal View History

2021-12-08 01:34:50 +01:00
import fs from "fs";
2022-01-10 16:12:58 +01:00
export type LanguageFound = {
id: string;
language: string;
country: string;
default: boolean;
};
2021-12-08 01:34:50 +01:00
const translationsBasePath = "./translations";
const fallbackLanguage = process.env.FALLBACK_LANGUAGE || "en-US";
const getAllLanguagesByFiles = (dirPath: string, languages: Array<LanguageFound> | undefined) => {
const files = fs.readdirSync(dirPath);
languages = languages || new Array<LanguageFound>();
files.forEach(function (file) {
if (fs.statSync(dirPath + "/" + file).isDirectory()) {
languages = getAllLanguagesByFiles(dirPath + "/" + file, languages);
} else {
const parts = file.split(".");
if (parts.length !== 3 || parts[0] !== "index" || parts[2] !== "json") {
return;
}
const rawData = fs.readFileSync(dirPath + "/" + file, "utf-8");
const languageObject = JSON.parse(rawData);
2022-01-07 01:50:47 +01:00
if (
"language" in languageObject && typeof languageObject.language === "string" &&
"country" in languageObject && typeof languageObject.country === "string" &&
"default" in languageObject && typeof languageObject.default === "boolean"
) {
languages?.push({
id: parts[1],
language: languageObject.language,
country: languageObject.country,
default: languageObject.default
});
}
2021-12-08 01:34:50 +01:00
}
});
return languages;
};
const getFallbackLanguageObject = (dirPath: string, languageObject: Object | undefined) => {
const files = fs.readdirSync(dirPath);
languageObject = languageObject || {};
files.forEach(function (file) {
if (fs.statSync(dirPath + "/" + file).isDirectory()) {
languageObject = getFallbackLanguageObject(dirPath + "/" + file, languageObject);
} else {
const parts = file.split(".");
if (parts.length !== 3 || parts[1] !== fallbackLanguage || parts[2] !== "json") {
return;
}
const rawData = fs.readFileSync(dirPath + "/" + file, "utf-8");
languageObject = { ...languageObject, ...JSON.parse(rawData) };
}
});
return languageObject;
};
export const languages = getAllLanguagesByFiles(translationsBasePath, undefined);
export const fallbackLanguageObject = getFallbackLanguageObject(translationsBasePath, undefined);