stylebot-harmony/scripts/build-locales.ts
2023-08-03 20:09:32 -04:00

43 lines
1.2 KiB
JavaScript
Executable File

#!/usr/bin/env -S node -r esbin
import { execSync } from "child_process"
import { resolve } from "path"
import en from "../src/shared/i18n/resources/en-US/index.json"
import { writeFormatted } from "./utils"
const languages = process.argv.slice(2).includes("-f")
? execSync("crowdin list languages --code=locale --plain")
.toString()
.trim()
.split("\n")
.concat("en-US")
.sort()
: ["de-DE", "en-US", "es-ES", "fr-CA", "fr-FR", "ja-JP", "ko-KR", "zh-CN", "zh-TW"]
const keys: string[] = Array.from(
(function* keys(
obj: Record<string, unknown>,
prefixes: string[] = [],
): Generator<string, void, undefined> {
for (const [key, value] of Object.entries(obj)) {
if (value != null && typeof value === "object") {
yield* keys(value as any, prefixes.concat(key))
} else {
yield prefixes.concat(key).join(".")
}
}
})(en),
).sort()
const code = [
`export const languages = ${JSON.stringify(languages, null, 2)};`,
"",
"export type TranslationKey =",
keys.map(key => " | " + JSON.stringify(key)).join("\n"),
";\n",
]
writeFormatted(
resolve(__dirname, "../src/shared/i18n/data.generated.ts"),
code.join("\n"),
)