feat: add support for hidden labels when diffing Lokalise labels

This commit is contained in:
Michael Zetterberg
2025-05-22 14:00:52 +02:00
parent 14ca1775d8
commit b5b4a61c41
4 changed files with 33 additions and 10 deletions

View File

@@ -62,4 +62,5 @@ variables.css
# i18n generated files
i18n/tooling/extracted.json
i18n/tooling/translations/
i18n/tooling/translations-all/
.swc

View File

@@ -1,4 +1,5 @@
import fromLokalise from "./translations/en.json" with { type: "json" }
import filteredLokalise from "./translations/en.json" with { type: "json" }
import allLokalise from "./translations-all/en.json" with { type: "json" }
import fromCodebase from "./extracted.json" with { type: "json" }
function diffArray(json1, json2) {
@@ -24,20 +25,24 @@ function resolveLabels(ids, arr) {
})
}
const labelsToRemove = diffArray(fromLokalise, fromCodebase)
const labelsToAdd = diffArray(fromCodebase, fromLokalise)
const labelsHidden = diffArray(allLokalise, filteredLokalise)
const labelsToRemove = diffArray(filteredLokalise, fromCodebase)
const labelsToAdd = diffArray(fromCodebase, filteredLokalise).filter(
(key) => !labelsHidden.includes(key)
)
if (labelsToRemove.length === 0 && labelsToAdd.length === 0) {
console.log(`Nothing has changed!`)
} else {
console.log(`Labels to REMOVE from Lokalise: ${labelsToRemove.length}`)
console.log(`Labels to ADD to Lokalise: ${labelsToAdd.length}`)
console.log(`Labels HIDDEN in Lokalise: ${labelsHidden.length}`)
console.log("")
}
if (labelsToRemove.length) {
console.log(`${labelsToRemove.length} labels to remove from Lokalise:`)
console.table(resolveLabels(labelsToRemove, fromLokalise))
console.table(resolveLabels(labelsToRemove, filteredLokalise))
console.log("")
}
@@ -48,10 +53,18 @@ if (labelsToAdd.length) {
console.log("")
}
if (labelsHidden.length) {
console.log("")
console.log(`${labelsHidden.length} labels are hidden in Lokalise`)
console.table(resolveLabels(labelsHidden, allLokalise))
console.log("")
}
if (labelsToRemove.length === 0 && labelsToAdd.length === 0) {
console.log(`Nothing has changed!`)
} else {
console.log(`Labels to REMOVE from Lokalise: ${labelsToRemove.length}`)
console.log(`Labels to ADD to Lokalise: ${labelsToAdd.length}`)
console.log(`Labels HIDDEN in Lokalise: ${labelsHidden.length}`)
console.log("")
}

View File

@@ -4,11 +4,13 @@ import { config } from "dotenv"
config({ path: `${process.cwd()}/.env.local` })
const extractPath = path.resolve(__dirname, "translations")
const filteredExtractPath = path.resolve(__dirname, "translations")
const allExtractPath = path.resolve(__dirname, "translations-all")
async function main() {
const { download } = await import("./lokalise")
await download(extractPath)
await download(filteredExtractPath, false)
await download(allExtractPath, true)
}
main()

View File

@@ -36,7 +36,6 @@ const perf = new PerformanceObserver((items) => {
}
performance.clearMeasures()
})
perf.observe({ type: "measure" })
async function waitUntilUploadDone(processId: string) {
return new Promise<void>((resolve, reject) => {
@@ -87,6 +86,8 @@ async function waitUntilUploadDone(processId: string) {
}
export async function upload(filepath: string) {
perf.observe({ type: "measure" })
try {
log(`Uploading ${filepath}...`)
@@ -143,9 +144,15 @@ export async function upload(filepath: string) {
await performanceMetrics
}
export async function download(extractPath: string) {
export async function download(extractPath: string, all: boolean = false) {
perf.observe({ type: "measure" })
try {
log("Downloading translations...")
log(
all
? "Downloading all translations..."
: "Downloading filtered translations..."
)
performance.mark("downloadStart")
@@ -158,7 +165,7 @@ export async function download(extractPath: string) {
icu_numeric: true,
bundle_structure: "%LANG_ISO%.%FORMAT%",
directory_prefix: "",
filter_data: ["translated", "nonhidden"],
filter_data: all ? [] : ["translated", "nonhidden"],
export_empty_as: "skip",
})
performance.mark("lokaliseDownloadInitEnd")