From 82eabc41fe82e178d8262b4041eed3def2816c24 Mon Sep 17 00:00:00 2001 From: Nybkox Date: Tue, 25 Feb 2025 16:23:23 +0100 Subject: [PATCH] feat: sort translation json keys alphabetically --- common/sortJsonKeysAlphabetically.js | 24 ++++++++++++++++++++++++ common/translations-cli/helpers.js | 8 ++++++-- 2 files changed, 30 insertions(+), 2 deletions(-) create mode 100644 common/sortJsonKeysAlphabetically.js diff --git a/common/sortJsonKeysAlphabetically.js b/common/sortJsonKeysAlphabetically.js new file mode 100644 index 000000000..17ba9f326 --- /dev/null +++ b/common/sortJsonKeysAlphabetically.js @@ -0,0 +1,24 @@ +// @ts-check + +/** + * @param {object|string} json + * @returns {object} + */ +function sortJsonKeysAlphabetically(json) { + const obj = typeof json === 'string' ? JSON.parse(json) : json; + + if (obj === null || typeof obj !== 'object' || Array.isArray(obj)) { + return obj; + } + + const sortedObj = Object.keys(obj) + .sort() + .reduce((result, key) => { + result[key] = obj[key]; + return result; + }, {}); + + return sortedObj; +} + +module.exports = sortJsonKeysAlphabetically; diff --git a/common/translations-cli/helpers.js b/common/translations-cli/helpers.js index c5217bdea..53f61cb53 100644 --- a/common/translations-cli/helpers.js +++ b/common/translations-cli/helpers.js @@ -2,6 +2,7 @@ const path = require('path'); const fs = require('fs'); const { defaultLanguage } = require('./constants'); +const sortJsonKeysAlphabetically = require('../sortJsonKeysAlphabetically'); /** * @param {string} file @@ -145,7 +146,9 @@ function getLanguageTranslations(language) { */ function setLanguageTranslations(language, translations) { const file = resolveFile(`translations/${language}.json`); - fs.writeFileSync(file, JSON.stringify(translations, null, 2)); + const sorted = sortJsonKeysAlphabetically(translations); + + fs.writeFileSync(file, JSON.stringify(sorted, null, 2)); } /** @@ -155,8 +158,9 @@ function setLanguageTranslations(language, translations) { function updateLanguageTranslations(language, newTranslations) { const translations = getLanguageTranslations(language); const updatedTranslations = { ...translations, ...newTranslations }; + const sorted = sortJsonKeysAlphabetically(updatedTranslations); - setLanguageTranslations(language, updatedTranslations); + setLanguageTranslations(language, sorted); } function getAllLanguages() {