Chore: translations are now sorted

This commit is contained in:
Pieter Vander Vennet 2025-07-26 00:58:43 +02:00
parent 9723b5898a
commit a144daa2f0

View file

@ -526,6 +526,25 @@ function generateTranslationsObjectFrom(
return langs
}
/**
* Inline sort of the object
* @param obj
*/
function sortTranslationObject(obj: Record<string, string>): void {
const keys = Object.keys(obj).filter(k => k !== "en" && k !== "_context")
keys.sort(/* fresh copy */)
keys.unshift("en")
keys.push("_context")
const copy = {...obj}
for (const k in obj) {
delete obj[k]
}
for (const key of keys) {
obj[key] = copy[key]
}
}
/**
* Merge two objects together
* @param source: where the translations come from
@ -548,22 +567,10 @@ function MergeTranslation(source: any, target: any, language: string, context: s
const targetV = target[keyRemapping?.get(key) ?? key]
if (typeof sourceV === "string") {
// Add the translation
if (targetV === undefined) {
if (typeof target === "string") {
throw `Trying to merge a translation for ${language} into a fixed string at ${context} for key ${key}`
}
target[key] = source[key]
continue
}
if (targetV[language] === sourceV) {
// Already the same
continue
}
if (sourceV === "") {
console.log("Ignoring empty string in the translations")
delete target[key]
return
}
if (typeof targetV === "string") {
@ -572,12 +579,20 @@ function MergeTranslation(source: any, target: any, language: string, context: s
)}`
}
targetV[language] = sourceV
let was = ""
if (targetV[language] !== undefined && targetV[language] !== sourceV) {
was = " (overwritten " + targetV[language] + ")"
if (targetV[language] === sourceV) {
// Already the same
continue
}
// console.log(" + ", context + "." + language, "-->", sourceV, was)
if (targetV === undefined) {
if (typeof target === "string") {
throw `Trying to merge a translation for ${language} into a fixed string at ${context} for key ${key}`
}
target[key] = sourceV
continue
}
targetV[language] = sourceV
continue
}
if (typeof sourceV === "object") {
@ -642,6 +657,7 @@ function mergeLayerTranslations(englishOnly: boolean = false) {
config = Utils.Clone(config)
removeNonEnglishTranslations(config)
}
sortTranslations(config)
writeFileSync(
layerFile.path,
JSON.stringify(config, null, " ") + (endsWithNewline ? "\n" : "")
@ -672,6 +688,19 @@ function removeNonEnglishTranslations(object: any) {
)
}
function sortTranslations(object: any) {
Utils.WalkObject(
object,
(leaf: any) => {
sortTranslationObject(leaf)
},
(possibleLeaf) =>
possibleLeaf !== null &&
typeof possibleLeaf === "object" &&
GenerateTranslations.isTranslation(possibleLeaf)
)
}
/**
* Load the translations into the theme files
*/
@ -690,7 +719,7 @@ function mergeThemeTranslations(englishOnly: boolean = false) {
config = Utils.Clone(config)
removeNonEnglishTranslations(config)
}
sortTranslations(config)
writeFileSync(
themeFile.path,
JSON.stringify(config, null, " ") + (endsWithNewline ? "\n" : "")