translation diff export
Use this skill when you need a small UniGetUI translation patch instead of sending a full language JSON file for review or translation.
It exports only the active untranslated or source-changed strings, creates the translator handoff files, and prepares the patch set needed by translation-diff-translate and translation-diff-import.
Prerequisites
- PowerShell 7 (
pwsh). gitavailable onPATH.cirupavailable onPATH.
When source strings changed, run translation-source-sync first so lang_en.json reflects current source usage before exporting downstream translation patches.
Scripts
scripts/export-translation-diff.ps1: Exports JSON patch artifacts and generates a translation handoff prompt.scripts/test-translation-diff.ps1: Runs a local end-to-end smoke test against the checked-in UniGetUI language files.
Use this skill's wrapper scripts first; the downstream translate and import steps are documented in translation-diff-translate and translation-diff-import.
Usage
Export untranslated French strings only:
pwsh ./.agents/skills/translation-diff-export/scripts/export-translation-diff.ps1 \
-NeutralJson ./src/Languages/lang_en.json \
-TargetJson ./src/Languages/lang_fr.json \
-Language fr
Export untranslated French strings plus English source values changed since origin/main:
pwsh ./.agents/skills/translation-diff-export/scripts/export-translation-diff.ps1 \
-NeutralJson ./src/Languages/lang_en.json \
-TargetJson ./src/Languages/lang_fr.json \
-Language fr \
-BaseRef origin/main
Optional parameters:
-OutputDir(default:generated/translation-diff-export)-KeepIntermediate
Run the built-in smoke test:
pwsh ./.agents/skills/translation-diff-export/scripts/test-translation-diff.ps1
Output
For lang_en.json and language fr, the script generates:
generated/translation-diff-export/lang.diff.fr.source.jsongenerated/translation-diff-export/lang.diff.fr.translated.jsongenerated/translation-diff-export/lang.diff.fr.reference.jsongenerated/translation-diff-export/lang.diff.fr.prompt.md
If -KeepIntermediate is used, git-baseline snapshots are kept under generated/translation-diff-export/tmp/.
The smoke test writes its temporary artifacts under generated/translation-diff-export-demo/.
Validate The Export
After export, confirm the patch is usable before handing it off:
- Check that
.source.jsonis not empty unless you expected no work for that language. - Confirm
.translated.jsonis sparse and does not contain copied English placeholders for unfinished keys. - If the patch should include recent English changes, rerun with
-BaseRefand compare the resulting.source.json. - Run the smoke test if you changed the export workflow itself.
Hand Off To Translate
After exporting the patch, use the generated .prompt.md file with translation-diff-translate to update the sparse translated working copy.
Hand Off To Import
After translating the patch, merge it back into the full language file with translation-diff-import:
pwsh ./.agents/skills/translation-diff-import/scripts/import-translation-diff.ps1 \
-TranslatedPatch ./generated/translation-diff-export/lang.diff.fr.translated.json \
-SourcePatch ./generated/translation-diff-export/lang.diff.fr.source.json \
-TargetJson ./src/Languages/lang_fr.json \
-NeutralJson ./src/Languages/lang_en.json \
-OutputJson ./src/Languages/lang_fr.merged.json
Keep the .translated.json file sparse. If a key is not translated yet, leave it out instead of copying the English source value into the working copy.