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

Ŕéđàçţîöñ

Ŕéđàçţîöñ ŕéþļàçéš šéñšîţîṽé çöñţéñţ (þéöþļé, üñŕéļéàšéđ þŕöđüçţ ñàḿéš, îñţéŕñàļ ŕöļéš, šéçŕéţš) ŵîţĥ þŕöţéçţéđ þļàçéĥöļđéŕš ƃéƒöŕé à đöçüḿéñţ îš šéñţ ƒöŕ ÀÎ ţŕàñšļàţîöñ öŕ ĥàñđéđ ţö àñ éẋţéŕñàļ ţŕàñšļàţöŕ, ţĥéñ ŕéšţöŕéš ţĥé öŕîĝîñàļš öñçé ţĥé ţŕàñšļàţîöñ çöḿéš ƃàçķ. Ţĥé šéñšîţîṽé ṽàļüé ñéṽéŕ ļéàṽéš ţĥé ļöçàļ ḿàçĥîñé.

redacttranslate, then unredactEmail Sarah Chen the Project Halcyon launch date.Email <x id=1/> the launch date.what the model sees: opaque tokensEnvoyez à Sarah Chen la date de lancement de Project Halcyon.originals restored locally

Ƒöŕ ţĥé àŕçĥîţéçţüŕé àñđ đéšîĝñ đéçîšîöñš ƃéĥîñđ ţĥîš, šéé Ç-10: Çöñţéñţ Ŕéđàçţîöñ.

Îñ ţĥé ÇĻÎ, redact àñđ unredact àŕé þîþéļîñé šţéþš: ţĥé ƃüîļţ-îñ secure-translate ƒļöŵ ŕüñš ŕéđàçţ → ţŕàñšļàţé → üñŕéđàçţ (kapi run secure-translate), à þŕöĵéçţ ƒļöŵ çàñ þļàçé ţĥé šàḿé šţéþš àŕöüñđ îţš öŵñ þîþéļîñé, àñđ kapi extract --redact þŕöţéçţš à ţŕàñšļàţöŕ ĥàñđ-öƒƒ. Šéé Üñđéŕšţàñđîñĝ ţĥé ÇĻÎ ļàýéŕš ƒöŕ ţĥé ƒļöŵ àñđ šîñĝļé-ţööļ šüŕƒàçéš.

Ĥöŵ îţ šţàýš ļöçàļ

À ŕéđàçţéđ šþàñ ƃéçöḿéš à þļàçéĥöļđéŕ, ţĥé šàḿé þŕöţéçţéđ îñļîñé-çöđé þŕîḿîţîṽé kapi üšéš ƒöŕ ṽàŕîàƃļéš àñđ ţàĝš, ŵîţĥ à ţýþé ļîķé redaction:person. Ţĥé þļàçéĥöļđéŕ çàŕŕîéš öñļý à çàţéĝöŕý àñđ à šţàƃļé ţöķéñ; ţĥé öŕîĝîñàļ ţéẋţ îš ĥéļđ îñ à ļöçàļ ṽàüļţ àñđ îš ñéṽéŕ ŵŕîţţéñ îñţö ţĥé çöñţéñţ ţĥàţ ļéàṽéš ţĥé ḿàçĥîñé.

Ƒöŕ ÀÎ ţŕàñšļàţîöñ ţĥé þŕöţéçţîöñ îš šţŕüçţüŕàļ: kapi šéñđš ţĥé ḿöđéļ àñ öþàǫüé ţöķéñ (<x id="…"/>) îñ þļàçé öƒ éàçĥ þļàçéĥöļđéŕ, šö ţĥé ḿöđéļ ŕéçéîṽéš ñéîţĥéŕ ţĥé öŕîĝîñàļ ţéẋţ ñöŕ îţš ṽîšîƃļé ļàƃéļ, ţĥéñ ŕé-àţţàçĥéš ţĥé þļàçéĥöļđéŕ ƃý ţöķéñ ŵĥéñ ţĥé ţŕàñšļàţîöñ ŕéţüŕñš. Ƒöŕ éẋţéŕñàļ ţŕàñšļàţîöñ ţĥé þļàçéĥöļđéŕ ţŕàṽéļš îñ ţĥé ƃîļîñĝüàļ ƒîļé àš öŕđîñàŕý þŕöţéçţéđ ḿàŕķüþ ŵĥîļé ţĥé öŕîĝîñàļ↔ţöķéñ ḿàþþîñĝ šţàýš ƃéĥîñđ îñ à ĝîţîĝñöŕéđ šîđéçàŕ.

Đéţéçţîöñ

Ŕéđàçţîöñ ƒîñđš šéñšîţîṽé šþàñš ŵîţĥ öñé öŕ ƃöţĥ đéţéçţöŕš:

  • Ŕüļéš (đéƒàüļţ) àŕé ļîţéŕàļ ţéŕḿš àñđ ŕéĝüļàŕ éẋþŕéššîöñš ýöü đéçļàŕé. Ƒüļļý öƒƒļîñé àñđ đéţéŕḿîñîšţîç.

  • Éñţîţîéš (öþţ-îñ) àŕé ñàḿéđ éñţîţîéš (þéöþļé, öŕĝàñîžàţîöñš, þŕöđüçţš, ļöçàţîöñš, đàţéš, …) ŕéçöĝñîžéđ àüţöḿàţîçàļļý àñđ ŕéđàçţéđ ƃý çàţéĝöŕý. À ƒàšţ ļöçàļ ḿöđéļ ķééþš đéţéçţîöñ öñ ţĥé ḿàçĥîñé; à çļöüđ ḿöđéļ ţŕàđéš ţĥàţ ƒöŕ ƃŕöàđéŕ çöṽéŕàĝé đüŕîñĝ ţĥé đéţéçţîöñ šţéþ. Éñţîţý ŕéçöĝñîţîöñ îš ñöţ à šéþàŕàţé ţàšķ: îţ îš ţĥé šàḿé đéţéçţîöñ ţĥàţ þöŵéŕš éñţîţý-ĝéñéŕàļîžéđ çöñţéñţ-ḿéḿöŕý ŕéüšé, šö éñţîţîéš àññöţàţéđ öñçé šéŕṽé ƃöţĥ.

    Ţĥé entity-extract šţéþ šéļéçţš ţĥé đéţéçţöŕ ŵîţĥ engine: llm (ţĥé çöñƒîĝüŕéđ ÀÎ þŕöṽîđéŕ; ţĥé đéƒàüļţ), ner (àñ öñ-đéṽîçé ḿöđéļ, ŵîţĥ ñö þŕöṽîđéŕ çàļļ, ñö çŕéđéñţîàļš àñđ ñöţĥîñĝ ļéàṽîñĝ ţĥé ḿàçĥîñé), öŕ hybrid (ƃöţĥ, ḿéŕĝéđ). Ŵîţĥ engine: ner ţĥé šţéþ çàŕŕîéš ñö ŕéḿöţé-éĝŕéšš šîđé 郃éçţ, šö ţĥé þļàçéḿéñţ þàšš àççéþţš îţ àĥéàđ öƒ redact ŵîţĥöüţ ǫüàļîƒîçàţîöñ. Ţĥé ƃŕöŵšéŕ Ļàƃ ŕüñš ţĥîš éñđ ţö éñđ ŵîţĥ à ĜĻîÑÉŔ ÖÑÑẊ ḿöđéļ ļöàđéđ îñ ţĥé þàĝé.

Éàçĥ ḿàţçĥ îš àššîĝñéđ à çàţéĝöŕý. Ţĥé ŕéçöḿḿéñđéđ çàţéĝöŕîéš àŕé person, role, product, org, location, àñđ custom, ƃüţ çàţéĝöŕîéš àŕé ƒŕéé-ƒöŕḿ, šö üšé ŵĥàţéṽéŕ ţĥé þļàçéĥöļđéŕ ţéḿþļàţé šĥöüļđ đîšþļàý.

Ŕüļéš ƒîļé

Ţĥé ţéŕḿ ļîšţ îš îţšéļƒ šéñšîţîṽé, šö îţ ļîṽéš îñ à đéđîçàţéđ ƒîļé (ķééþ îţ ĝîţîĝñöŕéđ) ŕàţĥéŕ ţĥàñ îñ ţĥé çöḿḿîţţéđ ŕéçîþé:

# redaction.yaml — bind it with defaults.redaction.rules, and gitignore it
version: v1
placeholder: "[REDACTED:{category}]" # {category} and {n} are substituted
detectors: [rules]
rules:
- term: "Sarah Chen"
category: person
- term: "Project Halcyon" # unreleased codename
category: product
- pattern: "ACME-[A-Z]+-\\d+" # regular expression — internal SKUs
category: product
flags: [ignorecase] # also: wholeword (literal terms)

Ŵöŕķƒļöŵš

Îñ-þŕöçéšš: šéçüŕé-ţŕàñšļàţé

Ţĥé ƃüîļţ-îñ secure-translate ƒļöŵ ŕéđàçţš, ÀÎ-ţŕàñšļàţéš àĝàîñšţ ţĥé þļàçéĥöļđéŕš, àñđ ŕéšţöŕéš ţĥé öŕîĝîñàļš, àļļ îñ à šîñĝļé ŕüñ, šö ţĥé šéçŕéţ îš öñļý éṽéŕ îñ ḿéḿöŕý:

kapi run secure-translate -i src/locales/en.json --target-lang fr

Ţĥé ƒļöŵ îš reader → redact → translate → unredact → writer. redact îš àñ öŕđîñàŕý ţŕàñšƒöŕḿéŕ šţéþ: ţĥé ƒŕàḿéŵöŕķ àþþļîéŕ ŕéŵŕîţéš ţĥé šöüŕçé, ŕéþļàçîñĝ šéñšîţîṽé šþàñš ŵîţĥ þļàçéĥöļđéŕš àñđ ṽàüļţîñĝ ţĥé öŕîĝîñàļš ƒàîļ-çļöšéđ, ƃéƒöŕé ţĥé ñéẋţ šţéþ öƃšéŕṽéš îţ. Ƃéçàüšé ŕéđàçţîöñ'š éđîţ þļàñ îš šţŕüçţüŕéđ, ŕüñ-àñçĥöŕéđ öṽéŕļàýš àţţàçĥéđ üþšţŕéàḿ (ţéŕḿš, éñţîţîéš) šüŕṽîṽé ţĥé ŕéŵŕîţé ƃý ŕéƃàšîñĝ; öñļý šþàñš öṽéŕļàþþîñĝ à ŕéđàçţéđ šþàñ àŕé đŕöþþéđ. Ţĥé ƒļöŵ'š þļàçéḿéñţ þàšš ķééþš ţĥé öŕđéŕîñĝ šàƒé: îţ ŕéĵéçţš à redact þļàçéđ àƒţéŕ àñý šţéþ ţĥàţ šéñđš šöüŕçé ţö à ŕéḿöţé šéŕṽîçé. unredact îš àñ öŕđîñàŕý ļàţé šţéþ ţĥàţ ŕéšţöŕéš ţĥé öŕîĝîñàļš öñ ţĥé ŵàý öüţ. Ýöü çàñ çöḿþöšé ƃöţĥ îñţö ýöüŕ öŵñ ƒļöŵš àš öŕđéŕéđ šţéþš:

steps:
- tool: redact
- tool: translate
- tool: unredact

Éẋţéŕñàļ: éẋţŕàçţ, ţŕàñšļàţé, ḿéŕĝé

Ŵĥéñ à ĥüḿàñ ţŕàñšļàţöŕ öŕ ÇÀŢ ţööļ đöéš ţĥé ţŕàñšļàţîöñ, ŕéđàçţ öñ ţĥé ŵàý öüţ àñđ ŕéšţöŕé öñ ţĥé ŵàý ƃàçķ. kapi extract --redact éḿîţš à ƃîļîñĝüàļ ƒîļé çöñţàîñîñĝ öñļý þļàçéĥöļđéŕš àñđ ŵŕîţéš ţĥé öŕîĝîñàļš ţö à ļöçàļ ṽàüļţ šîđéçàŕ; kapi merge ŕéšţöŕéš ţĥéḿ àƒţéŕ ţĥé ţŕàñšļàţöŕ ŕéţüŕñš ţĥé ƒîļé.

# Emit redacted XLIFF — originals stay in .kapi/work/vault/redaction/<batch>.json
kapi extract --redact

# ... translator fills in targets, preserving the placeholders ...

# Restore the originals into the merged target
kapi merge -i out/app.en-to-fr.xliff

Þàšš --redact-rules <path> ţö þöîñţ àţ à ŕüļéš ƒîļé đîŕéçţļý, öŕ éñàƃļé ŕéđàçţîöñ îñ ţĥé ŕéçîþé (ƃéļöŵ) šö þļàîñ kapi extract ŕéđàçţš. Üšé kapi merge --no-restore ţö ķééþ ţĥé þļàçéĥöļđéŕš îñ ţĥé ḿéŕĝéđ öüţþüţ.

Ŕéçîþé çöñƒîĝüŕàţîöñ

Đéçļàŕé ŕéđàçţîöñ îñ ţĥé þŕöĵéçţ ŕéçîþé ţö ḿàķé îţ ţĥé đéƒàüļţ ƒöŕ extract. Îţ çàñ ƃé šéţ þŕöĵéçţ-ŵîđé üñđéŕ defaults àñđ öṽéŕŕîđđéñ þéŕ çöñţéñţ îţéḿ:

defaults:
source_language: en
target_languages: [fr, de]
redaction:
enabled: true
rules: redaction.yaml
detectors: [rules]
placeholder: "[REDACTED:{category}]"

collections:
- path: "src/locales/*.json"
format: json
redaction:
enabled: false # skip redaction for this entry

Ŵĥéŕé ţĥé öŕîĝîñàļš ļîṽé

ŴöŕķƒļöŵṼàüļţ
Îñ-þŕöçéšš (secure-translate, çüšţöḿ ƒļöŵš)Îñ ḿéḿöŕý öñ ţĥé ƃļöçķ; ŕéḿöṽéđ àƒţéŕ ŕéšţöŕé, àñđ ñéṽéŕ ŵŕîţţéñ ţö öüţþüţ
Éẋţéŕñàļ (extract --redactmerge).kapi/work/vault/redaction/<batch-id>.json, îñšîđé ţĥé þŕöĵéçţ'š öñé ĝîţîĝñöŕéđ þàţĥ, ŵŕîţţéñ þŕîṽàţé (0600)

Ţĥé ṽàüļţ šîţš ƃéšîđé ţĥé þŕöĵéçţ šţöŕé üñđéŕ .kapi/work/, àñđ đéļîƃéŕàţéļý ñöţ üñđéŕ .kapi/work/cache/. Éṽéŕýţĥîñĝ îñ ţĥé çàçĥé îš ƒŕéé ţö đéļéţé ƃéçàüšé îţ ŕéƃüîļđš; à ŵîţĥĥéļđ öŕîĝîñàļ ŕéƃüîļđš ƒŕöḿ ñöţĥîñĝ. Îţ îš ñéṽéŕ çöḿḿîţţéđ àñđ ñéṽéŕ šýñçéđ ţö à šéŕṽéŕ, šö ţĥé öñļý çöþý îš ţĥé öñé öñ ýöüŕ ḿàçĥîñé. rm -rf .kapi/work/cache šţàýš šàƒé àţ àñý ţîḿé; çļéàŕîñĝ .kapi/work ŵĥöļéšàļé šţŕàñđš àñý ƃàţçĥ ýöü ĥàṽé öüţ ŵîţĥ à ţŕàñšļàţöŕ, ƃéçàüšé ţĥé ḿéŕĝé ţĥàţ ŵöüļđ ŕéšţöŕé ţĥé öŕîĝîñàļš ĥàš ñöţĥîñĝ ļéƒţ ţö ŕéàđ.

Ŕéšţöŕàţîöñ ḿàţçĥéš þļàçéĥöļđéŕš ƃàçķ ţö öŕîĝîñàļš ƃý ţöķéñ ŵĥéŕé ţĥé ƒöŕḿàţ þŕéšéŕṽéš îñļîñé šţŕüçţüŕé (îñ-þŕöçéšš þîþéļîñéš àñđ ẊĻÎƑƑ), àñđ ƃý ţĥé üñîǫüé ṽîšîƃļé ţöķéñ ţéẋţ ŵĥéŕé ţĥé ƒöŕḿàţ ƒļàţţéñš þļàçéĥöļđéŕš ţö þļàîñ ţéẋţ (šüçĥ àš ĴŠÖÑ). Öñ extract, ŕéđàçţîöñ ŕüñš ƃéƒöŕé çöñţéñţ-ḿéḿöŕý þŕé-ƒîļļ, šö ñö šéñšîţîṽé ṽàļüé çàñ ŕéàçĥ ţĥé éḿîţţéđ ƒîļé ţĥŕöüĝĥ à ḿéḿöŕý ḿàţçĥ.