1 const fs = require("fs");
3 const translationDir = "lemmy-translations/translations/";
4 const outDir = "src/shared/translations/";
5 fs.mkdirSync(outDir, { recursive: true });
6 fs.readdir(translationDir, (_err, files) => {
7 files.forEach(filename => {
8 const lang = filename.split(".")[0];
10 const json = JSON.parse(
11 fs.readFileSync(translationDir + filename, "utf8")
13 let data = `export const ${lang} = {\n translation: {`;
14 for (const key in json) {
16 const value = json[key].replace(/"/g, '\\"');
17 data += `\n ${key}: "${value}",`;
21 const target = outDir + lang + ".ts";
22 fs.writeFileSync(target, data);
29 // generate types for i18n keys
30 const baseLanguage = "en";
32 fs.readFile(`${translationDir}${baseLanguage}.json`, "utf8", (_, fileStr) => {
33 const keys = Object.keys(JSON.parse(fileStr));
35 const data = `import { i18n } from "i18next";
37 declare module "i18next" {
38 export type I18nKeys =
39 ${keys.map(key => ` | "${key}"`).join("\n")};
41 export interface TFunctionTyped {
44 TResult extends TFunctionResult = string,
45 TInterpolationMap extends Record<string, unknown> = StringMap
47 key: I18nKeys | I18nKeys[],
48 options?: TOptions<TInterpolationMap> | string
52 TResult extends TFunctionResult = string,
53 TInterpolationMap extends Record<string, unknown> = StringMap
55 key: I18nKeys | I18nKeys[],
56 defaultValue?: string,
57 options?: TOptions<TInterpolationMap> | string
61 export interface i18nTyped extends i18n {
67 fs.writeFileSync(`${outDir}i18next.d.ts`, data);