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

View File

@@ -4,11 +4,13 @@ import { config } from "dotenv"
config({ path: `${process.cwd()}/.env.local` }) 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() { async function main() {
const { download } = await import("./lokalise") const { download } = await import("./lokalise")
await download(extractPath) await download(filteredExtractPath, false)
await download(allExtractPath, true)
} }
main() main()

View File

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