Šķîþ ţö ḿàîñ çöñţéñţ

ķđ

Çöḿþàŕé ţĥé ĥüḿàñ-ŕéàđàƃļé ţéẋţ îñšîđé àñý šüþþöŕţéđ ƒöŕḿàţ, ƃļöçķ ƃý ƃļöçķ, ŕàţĥéŕ ţĥàñ ƃýţé ƃý ƃýţé. À ŕéƒļöŵéđ Ŵöŕđ .docx, à ŕé-žîþþéđ çöñţàîñéŕ öŕ à ŕéöŕđéŕéđ ĴŠÖÑ çàţàļöĝ đö ñöţ ŕéĝîšţéŕ àš à đ. Öñļý ţĥé þŕöšé ţĥàţ àçţüàļļý çĥàñĝéđ đöéš. Ţĥîš îš ţĥé çĥàñĝéšéţ à ţŕàñšļàţöŕ (öŕ à ţŕàñšļàţîöñ éñĝîñé) çàŕéš àƃöüţ: ŵĥàţ çöñţéñţ ḿöṽéđ, ŵàš àđđéđ, ŵàš ŕéḿöṽéđ, öŕ ŵàš ŕéŵŕîţţéñ.

kdiff [flags] FILE_A [FILE_B]

Ŵîţĥ ñö ƒîļé éẋţéñšîöñ ţö ĝö ƃý, ţĥé ƒöŕḿàţ îš šñéđ ƒŕöḿ ţĥé çöñţéñţ. À ƒîļé öƒ - ŕéàđš šţàñđàŕđ îñþüţ.

Ţŵö ḿöđéš

Ŕéṽîšîöñ đ: ţŵö ƒîļéš

Ŵĥàţ ţéẋţ çĥàñĝéđ ƃéţŵééñ ţŵö ṽéŕšîöñš öƒ à đöçüḿéñţ.

# What changed between two catalog versions
kdiff old.json new.json

# What changed in a Word proposal — ignoring re-save / formatting noise
kdiff proposal.docx proposal-v2.docx

# What changed in the French translation specifically
kdiff --target fr old.xliff new.xliff

Çöṽéŕàĝé đ: öñé ƒîļé àĝàîñšţ îţš öŵñ ţŕàñšļàţîöñ

Þàšš à šîñĝļé ƒîļé ŵîţĥ --target LOCALE ţö çöḿþàŕé à ţŕàñšļàţîöñ àĝàîñšţ ţĥé šöüŕçé ŵîţĥîñ ţĥàţ ƒîļé, à ǫüîçķ çöṽéŕàĝé ŕéþöŕţ öƒ ŵĥîçĥ ƃļöçķš àŕé šţîļļ üñţŕàñšļàţéđ öŕ àŕé à ṽéŕƃàţîḿ çöþý öƒ ţĥé šöüŕçé.

kdiff --target fr messages.xliff
app [fr]: 18 translated, 3 untranslated, 1 identical to source
@@ "settings.title" (untranslated) @@
Settings
@@ "brand.name" (identical) @@
Acme

Ĥöŵ ƃļöçķš àŕé àļîĝñéđ

kdiff àļîĝñš ţĥé đöçüḿéñţ'š ƃļöçķš ŕàţĥéŕ ţĥàñ îţš ļîñé þöšîţîöñš. Ţĥé àļîĝñḿéñţ šţŕàţéĝý îš çĥöšéñ àüţöḿàţîçàļļý:

  • Ķéýéđ ƒöŕḿàţš (ĴŠÖÑ, ẊĻÎƑƑ, ÞÖ, .resx, àñđ àñýţĥîñĝ éļšé ŵîţĥ à šţàƃļé ƃļöçķ ķéý) àļîĝñ ƃý ķéý. Ŕéöŕđéŕîñĝ ķéýš îš ţĥéŕéƒöŕé ñöţ à đ; ŕéñàḿîñĝ ţĥé ṽàļüé üñđéŕ à ķéý îš à çĥàñĝé; à ñéŵ ķéý îš àñ àđđîţîöñ. Ŕéöŕđéŕéđ ķéýš àŕé ŕéþöŕţéđ àš moved, ñöţ àš à ŵĥöļéšàļé ŕéŵŕîţé ţĥé ŵàý à ļîñé đ ŵöüļđ šĥöŵ ţĥéḿ.
  • Þŕöšé ƒöŕḿàţš (Ŵöŕđ, Ḿàŕķđöŵñ, ĤŢḾĻ, ŵĥöšé ƃļöçķ îđéñţîţîéš àŕé þöšîţîöñàļ) àļîĝñ ƃý çöñţéñţ, üšîñĝ à ļöñĝéšţ-çöḿḿöñ-šüƃšéǫüéñçé ḿàţçĥ öṽéŕ ţĥé ƃļöçķ ţéẋţ. Îñšéŕţîñĝ à þàŕàĝŕàþĥ šĥöŵš üþ àš à šîñĝļé àđđéđ ƃļöçķ, ñöţ àš à çàšçàđé öƒ "éṽéŕýţĥîñĝ àƒţéŕ îţ çĥàñĝéđ".

Ƒöŕçé à šţŕàţéĝý ŵîţĥ --by id öŕ --by content ŵĥéñ ţĥé àüţöḿàţîç çĥöîçé îš ŵŕöñĝ ƒöŕ ýöüŕ ƒîļé.

Öüţþüţ

Ţĥé đéƒàüļţ öüţþüţ îš à ƃļöçķ-öŕîéñţéđ üñîƒîéđ đ: à @@ <key> (kind) @@ ĥéàđéŕ þéŕ çĥàñĝéđ ƃļöçķ, ţĥéñ ţĥé ŕéḿöṽéđ (-) àñđ àđđéđ (+) ţéẋţ.

--- a/old.json
+++ b/new.json
@@ "greeting" (changed) @@
- Hello
+ Hi there
@@ "welcome" (added) @@
+ Welcome!
@@ "farewell" (removed) @@
- Goodbye

--json éḿîţš ţĥé šàḿé çĥàñĝéšéţ àš šţŕüçţüŕéđ đàţà ƒöŕ šçŕîþţš àñđ ţööļš, àñđ --stat þŕéƒîẋéš à öñé-ļîñé šüḿḿàŕý (2 changed, 1 added, 1 removed). -q, --brief þŕîñţš öñļý ŵĥéţĥéŕ ţĥé îñþüţš đéŕ.

Éẋîţ šţàţüš

kdiff ƒöļļöŵš ţĥé çļàššîç diff çöñṽéñţîöñ, šö šĥéļļ šçŕîþţš àñđ ÇÎ çàñ ƃŕàñçĥ öñ ţĥé ŕéšüļţ:

ÇöđéḾéàñîñĝ
0Ţĥé îñþüţš àŕé éǫüîṽàļéñţ (öŕ ţĥé ţŕàñšļàţîöñ îš ƒüļļý çöṽéŕéđ).
1Ţĥéý đéŕ (öŕ ţĥéŕé îš üñţŕàñšļàţéđ / çöþîéđ çöñţéñţ).
2Àñ öþéŕàţîöñàļ éŕŕöŕ (à ƒîļé çöüļđ ñöţ ƃé ŕéàđ öŕ þàŕšéđ).

Éẋàḿþļéš

# Review what changed in a release's source catalog
kdiff v1/en.json v2/en.json

# Gate CI on a fully-translated file (exit 1 if anything is pending)
kdiff --target de -q messages.xliff || echo "German is incomplete"

# Machine-readable changeset for a re-translation pipeline
kdiff --json old.xliff new.xliff > changes.json

# Compare two drafts of a Word document, prose only
kdiff --by content draft.docx final.docx

Öþţîöñš

ƑļàĝḾéàñîñĝ
--by STRATEGYÀļîĝñḿéñţ: auto (đéƒàüļţ), id, öŕ content.
--target LOCALEÇöḿþàŕé ţĥé ţŕàñšļàţîöñ ƒöŕ LOCALE. Ŵîţĥ öñé ƒîļé, à çöṽéŕàĝé ŕéþöŕţ öƒ šöüŕçé ṽš. ţŕàñšļàţîöñ.
-q, --briefŔéþöŕţ öñļý ŵĥéţĥéŕ ţĥé îñþüţš đéŕ, ñöţ ţĥé çĥàñĝéš.
--statÞŕîñţ à öñé-ļîñé šüḿḿàŕý öƒ ţĥé çĥàñĝéš ƃéƒöŕé ţĥé đ.
--jsonÉḿîţ ţĥé đ àš ĴŠÖÑ.
--colorÇöļöŕîžé ţĥé đ: auto, always, never.
-f, --formatÖṽéŕŕîđé ƒöŕḿàţ đéţéçţîöñ (é.ĝ. -f json).
--source-langŠöüŕçé ļàñĝüàĝé (đéƒàüļţ en).
--encodingÎñþüţ éñçöđîñĝ (đéƒàüļţ UTF-8).