mapcomplete/scripts/automoveTranslations.ts

64 lines
2.4 KiB
TypeScript
Raw Normal View History

2022-09-08 21:40:48 +02:00
import { readFileSync, writeFileSync } from "fs"
2022-04-18 01:06:22 +02:00
/**
* Moves values around in 'section'. Section will be changed
* @param section
* @param referenceSection
* @param language
*/
function fixSection(section, referenceSection, language: string) {
2022-09-08 21:40:48 +02:00
if (section === undefined) {
2022-04-18 01:06:22 +02:00
return
}
outer: for (const key of Object.keys(section)) {
const v = section[key]
2022-09-08 21:40:48 +02:00
if (typeof v === "string" && referenceSection[key] === undefined) {
2022-04-18 01:06:22 +02:00
// Not found in reference, search for a subsection with this key
for (const subkey of Object.keys(referenceSection)) {
const subreference = referenceSection[subkey]
2022-09-08 21:40:48 +02:00
if (subreference[key] !== undefined) {
if (section[subkey] !== undefined && section[subkey][key] !== undefined) {
2022-04-18 01:40:00 +02:00
console.log(`${subkey}${key} is already defined... Looking furhter`)
2022-04-18 01:06:22 +02:00
continue
}
2022-09-08 21:40:48 +02:00
if (typeof section[subkey] === "string") {
console.log(
`NOT overwriting '${section[subkey]}' for ${subkey} (needed for ${key})`
)
} else {
2022-04-18 01:06:22 +02:00
// apply fix
2022-09-08 21:40:48 +02:00
if (section[subkey] === undefined) {
2022-04-18 01:06:22 +02:00
section[subkey] = {}
}
section[subkey][key] = section[key]
2022-09-08 21:40:48 +02:00
delete section[key]
console.log(
`Rewritten key: ${key} --> ${subkey}.${key} in language ${language}`
)
2022-04-18 01:06:22 +02:00
continue outer
}
}
}
2022-09-08 21:40:48 +02:00
console.log("No solution found for " + key)
2022-04-18 01:06:22 +02:00
}
}
}
2022-09-08 21:40:48 +02:00
function main(args: string[]): void {
2022-04-18 01:06:22 +02:00
const sectionName = args[0]
const l = args[1]
2022-09-08 21:40:48 +02:00
if (sectionName === undefined) {
console.log(
"Tries to automatically move translations to a new subsegment. Usage: 'sectionToCheck' 'language'"
)
2022-04-18 01:06:22 +02:00
return
}
2023-01-15 23:28:02 +01:00
const reference = JSON.parse(readFileSync("./langs/en.json", { encoding: "utf8" }))
2022-04-18 01:06:22 +02:00
const path = `./langs/${l}.json`
2023-01-15 23:28:02 +01:00
const file = JSON.parse(readFileSync(path, { encoding: "utf8" }))
2022-04-18 01:06:22 +02:00
fixSection(file[sectionName], reference[sectionName], l)
2022-09-08 21:40:48 +02:00
writeFileSync(path, JSON.stringify(file, null, " ") + "\n")
2022-04-18 01:06:22 +02:00
}
2022-09-08 21:40:48 +02:00
main(process.argv.slice(2))