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

Š-05: Ţĥé î18ñ ŕüñţîḿé ƒöŕ Ŕéàçţ

Šüḿḿàŕý

@neokapi/i18n-react éẋţŕàçţš ţŕàñšļàţàƃļé çöñţéñţ đîŕéçţļý ƒŕöḿ Ŕéàçţ àñđ ĴŠẊ šöüŕçé àţ ƃüîļđ ţîḿé, þŕöđüçîñĝ Block ŕéçöŕđš ŵĥöšé Source îš à ţýþéđ Run[], ţĥé ƒŕàḿéŵöŕķ'š çàñöñîçàļ îñļîñé-çöñţéñţ ḿöđéļ (Ƒ-02). Àñ îñļîñé ĴŠẊ éļéḿéñţ ŵîţĥ çĥîļđŕéñ ƃéçöḿéš à þàîŕéđ öþéñ/çļöšé ŕüñ ţŕîþļé îñ îţš þàŕéñţ'š šéǫüéñçé, šö <p>Click <a href="/docs">here</a> to read.</p> éẋţŕàçţš àš öñé ƃļöçķ ŵĥöšé ţŕàñšļàţöŕ ķééþš ţĥé ļîñķ ŵŕàþþéđ àŕöüñđ ţĥé ŕîĝĥţ ŵöŕđ îñ éṽéŕý ļàñĝüàĝé. À šḿàļļ ŕüñţîḿé îñţéŕļéàṽéš ţĥé öŕîĝîñàļ Ŕéàçţ éļéḿéñţš ƃàçķ àţ ḿàŕķéŕ þöšîţîöñš. À ļîñţ þàçķàĝé (@neokapi/i18n-react-lint) ķééþš ţĥé šöüŕçé éẋţŕàçţàƃļé, àñđ à ŕéṽîéŵ ļàýéŕ ļéţš à þéŕšöñ ƒîẋ ţĥé ţŕàñšļàţîöñ öñ ţĥé ŕüññîñĝ àþþ, ŵŕîţîñĝ ƃàçķ îñţö ţĥé šàḿé îñţéŕçĥàñĝé ƒîļéš ţĥé þîþéļîñé àļŕéàđý üšéš.

Çöñţéẋţ

À Ŕéàçţ-ñàţîṽé ḿüļţîļîñĝüàļ šţöŕý ĥàš ţŵö ĥàŕđ þàŕţš àñđ öñé ţĥàţ öñļý àþþéàŕš ļàţéŕ.

Àüţĥöŕîñĝ. Đéṽéļöþéŕš ŵŕîţé ĴŠẊ. Ţŕàñšļàţöŕš ŵàñţ šéñţéñçéš ŵîţĥ ţĥéîŕ îñļîñé šţŕüçţüŕé îñţàçţ (ļîñķš, éḿþĥàšîš, ṽàŕîàƃļéš, îçöñš), ñöţ öþàǫüé þļàçéĥöļđéŕš öŕ ƒŕàĝḿéñţéđ šüƃ-šţŕîñĝš. Ƒöŕçîñĝ éṽéŕý šţŕîñĝ îñţö à t("hello-key") çàļļ ƃŕéàķš à çöḿþöñéñţ'š ŕéàđîñĝ öŕđéŕ àñđ þüšĥéš îñļîñé šţŕüçţüŕé îñţö šéþàŕàţé šüƃ-ķéýš.

Ŕüñţîḿé. Ţĥé ţŕàñšļàţéđ šţŕîñĝ ĥàš ţö çöḿþöšé ƃàçķ ŵîţĥ ţĥé öŕîĝîñàļ Ŕéàçţ éļéḿéñţš, þŕéšéŕṽîñĝ éṽéñţ ĥàñđļéŕš, ŕ郚, àñđ þŕöþš. Àñ ĤŢḾĻ-šţŕîñĝ ŕöüñđ-ţŕîþ ļöšéš ĥàñđļéŕš àñđ ƃýþàššéš ŕéçöñçîļîàţîöñ.

Ŕéṽîéŵ. Ţĥé ƒîļé ƒöŕḿàţ ţĥŕöŵš çöñţéẋţ àŵàý. À ŕéṽîéŵéŕ ļööķîñĝ àţ à šþŕéàđšĥééţ ŕöŵ çàññöţ šéé ţĥàţ à ŵöŕđ ļàñđéđ öñ à ƒöŕţý-þîẋéļ ƃüţţöñ, ţĥàţ ţĥé Ĝéŕḿàñ ŵŕàþš ţö ţŵö ļîñéš, öŕ ţĥàţ ţĥé ŕéĝîšţéŕ îš ŵŕöñĝ ƒöŕ à đéšţŕüçţîṽé-àçţîöñ đîàļöĝ. Éṽéŕýţĥîñĝ ţĥàţ ḿàķéš à ţŕàñšļàţîöñ ŕîĝĥţ öŕ ŵŕöñĝ îš à þŕöþéŕţý öƒ ŵĥéŕé îţ ŕéñđéŕš, éẋàçţļý ŵĥàţ éẋţŕàçţîöñ đîšçàŕđš.

Đéçîšîöñ

Ƃüîļđ-ţîḿé éẋţŕàçţîöñ îñţö Run[]

Àñ ŠŴÇ-ÀŠŢ ŵàļķéŕ (src/extract/walker.ts) đéšçéñđš éàçĥ ḿöđüļé ļööķîñĝ ƒöŕ ţŕàñšļàţàƃļé ĴŠẊ. Ţŕàñšļàţàƃîļîţý çöḿéš ƒŕöḿ éļéḿéñţ ṽöçàƃüļàŕý þļüš üšéŕ-šüþþļîéđ componentMap àñđ rules. Ƒöŕ éàçĥ ţŕàñšļàţàƃļé éļéḿéñţ ţĥé ŵàļķéŕ éḿîţš à ƃļöçķ ŵĥöšé šöüŕçé ŕüñ šéǫüéñçé îš ƃüîļţ ƃý extract/runs.ts.

Ţĥé éļéḿéñţ ṽöçàƃüļàŕý ĥàš öñé đéƒîñîţîöñ. plugin/defaults.ts ĥöļđš ţĥé Ŵ3Ç ĤŢḾĻ5 ţŕàñšļàţàƃîļîţý ţàƃļé: ŵĥîçĥ éļéḿéñţš' ţéẋţ ƃéļöñĝš ţö ţĥé ţŕàñšļàţöŕ, ŵĥîçĥ ḿüšţ šüŕṽîṽé ƃýţé ƒöŕ ƃýţé, àñđ ŵĥîçĥ àţţŕîƃüţéš çàŕŕý ṽîšîƃļé çöþý. scripts/gen-translatability.ts éḿîţš îţ àš core/translatability/data/w3c.json ƒöŕ ţĥé ḿàŕķđöŵñ àñđ ḾĐẊ ŕéàđéŕš, šö ţĥé Ĝö šîđé çļàššîƒîéš ţĥé šàḿé éļéḿéñţš ţĥé šàḿé ŵàý, àñđ make check-translatability ƒàîļš öñ đŕîƒţ ƃéţŵééñ ţĥé ţŵö.

ŢýþéŠçŕîþţ ḿöđüļéš éẋţŕàçţ ţöö. À .ts ƒîļé îš þàŕšéđ ƒöŕ t() çàļļš ŵîţĥ ţĥé šýñţàẋ đéçîđéđ ƃý îţš éẋţéñšîöñ, îñ öñé ƒüñçţîöñ ţĥé éẋţŕàçţöŕ àñđ ţĥé ţŕàñšƒöŕḿ šĥàŕé, šö ţĥé ţŵö çàññöţ đîšàĝŕéé; tsx îš éñàƃļéđ öñļý ƒöŕ .tsx, ƃéçàüšé îñ à .ts ƒîļé <Foo>x îš à ţýþé àššéŕţîöñ. À ƒîļé ţĥé þàŕšéŕ çàññöţ ŕéàđ îš ŕéþöŕţéđ àš à ƒàîļüŕé, ñéṽéŕ àš à ƒîļé ŵîţĥ ñöţĥîñĝ ţö ţŕàñšļàţé.

Ţĥé đéƒîñîñĝ ŕüļé: àñ îñļîñé ĴŠẊ éļéḿéñţ ŵîţĥ àţ ļéàšţ öñé çĥîļđ ƃéçöḿéš à þàîŕéđ îñļîñé çöđé îñ îţš þàŕéñţ'š ŕüñ šéǫüéñçé.

<p>
Click <a href="/docs">here</a> to read the docs.
</p>

éẋţŕàçţš àš öñé ƃļöçķ ŵĥöšé šöüŕçé îš à TextRun, à PcOpenRun, à TextRun, à PcCloseRun, àñđ à TextRun. Ţýþé àñđ šüƃţýþé ƒöļļöŵ ţĥé ĴŠẊ ṽöçàƃüļàŕý îñ @neokapi/kapi-format: éṽéŕý ĴŠẊ éļéḿéñţ üšéš type: "jsx:element" ŵîţĥ ţĥé ŕéšöļṽéđ ĤŢḾĻ ţàĝ, öŕ ţĥé üñḿàþþéđ Ŕéàçţ çöḿþöñéñţ ñàḿé, îñ subType, àñđ ţĥé ṽöçàƃüļàŕý éñţŕý đŕîṽéš éđîţöŕ ŕéñđéŕîñĝ, çĥîþ ļàƃéļš, àñđ éđîţîñĝ çöñšţŕàîñţš (Š-06).

Þàîŕš ñéšţ ļàšţ-îñ-ƒîŕšţ-öüţ, àñđ îññéŕ çöñţéñţ ḿàý ĥöļđ ţéẋţ, éẋþŕéššîöñš, þļàçéĥöļđéŕš, öŕ ƒüŕţĥéŕ þàîŕš:

ŠöüŕçéŔüñš
<a>here</a>öþéñ + ţéẋţ + çļöšé
<a><Icon/></a>öþéñ + þļàçéĥöļđéŕ + çļöšé
<strong>{count}</strong>öþéñ + þļàçéĥöļđéŕ + çļöšé
<a>read <em>the</em> docs</a>öþéñ + ţéẋţ + öþéñ + ţéẋţ + çļöšé + ţéẋţ + çļöšé

Ţĥîš ḿàķéš ţĥé ţŕàñšļàţöŕ ţĥé üñîţ öƒ đéçîšîöñ: à Ĝéŕḿàñ ţŕàñšļàţîöñ çàñ ŵŕàþ ţĥé ļîñķ àŕöüñđ à đéŕéñţ ŵöŕđ, àñđ à Ƒŕéñçĥ öñé çàñ ḿöṽé îţ éļšéŵĥéŕé îñ ţĥé šéñţéñçé.

Çöñšţŕüçţš ŵîţĥöüţ çĥîļđŕéñ (šéļƒ-çļöšîñĝ îçöñš, ļîñé ƃŕéàķš, žéŕö-çĥîļđ üñḿàþþéđ çöḿþöñéñţš, éẋþŕéššîöñ çöñţàîñéŕš, çöñđîţîöñàļ ñöđéš) ƃéçöḿé à šîñĝļé þļàçéĥöļđéŕ ŕüñ îñšţéàđ, ţýþéđ jsx:element, jsx:var, öŕ jsx:node. Ṽàŕîàƃļé çöñţàîñéŕš ķééþ ţĥé ĴàṽàŠçŕîþţ îđéñţîƒîéŕ àš ţĥéîŕ éǫüîṽàļéñçé ţéẋţ, šö ţĥé ƒļàţ ƒöŕḿ ŕéàđš ñàţüŕàļļý ţö à ţŕàñšļàţöŕ àñđ šüƃšţîţüţéš ţĥŕöüĝĥ ţĥé šţàñđàŕđ ñàḿéđ-þàŕàḿéţéŕ þàţĥ àţ ŕüñţîḿé.

Çöñţàîñéŕ éļéḿéñţš ŵîţĥ àţ ļéàšţ öñé đîŕéçţ ñöñ-ŵĥîţéšþàçé ţéẋţ çĥîļđ àñđ öñļý îñļîñé çĥîļđŕéñ àŕé àüţö-þŕöḿöţéđ ţö ţŕàñšļàţàƃļé. Þŕöḿöţîöñ îš šîļéñţ (ţĥé þàţţéŕñ îš ţöö çöḿḿöñ îñ ŕéàļ îñţéŕƒàçéš ţö ŵàŕñ öñ éṽéŕý öççüŕŕéñçé), àñđ ţĥé öþţ-öüţš àŕé translate="no" öŕ à rules éñţŕý. Ƒŕàĝḿéñţ ŕööţš éẋţŕàçţ öñ ţĥé šàḿé ţéŕḿš, üñđéŕ à ŕéšéŕṽéđ đéšçŕîþţöŕ šţàñđîñĝ îñ ƒöŕ ţĥé ţàĝ ţĥéý đö ñöţ ĥàṽé: à ƒŕàĝḿéñţ îš à ŕéàļ àüţĥöŕîñĝ îđîöḿ ƒöŕ "îñļîñé çöñţéñţ ŵîţĥ ñö ŵŕàþþéŕ Î àḿ àļļöŵéđ ţö àđđ", àñđ šķîþþîñĝ îţ ŵöüļđ þüšĥ àüţĥöŕš ţöŵàŕđ à <span> ţĥéý đö ñöţ ŵàñţ îñ ţĥé ĐÖḾ.

Ţŕàñšļàţàƃļé àţţŕîƃüţéš çöḿé ƒŕöḿ ţŵö ṽöçàƃüļàŕîéš ŵîţĥ đéŕéñţ šçöþéš. Ţĥé ĤŢḾĻ àñđ ÀŔÎÀ ñàḿéš (alt, title, placeholder, aria-label, …) àŕé šţàñđàŕđîšéđ àš üšéŕ-ṽîšîƃļé ţéẋţ, šö ţĥéý éẋţŕàçţ öñ àñý éļéḿéñţ. Ŕéàçţ'š þŕöþ-ñàḿé çöñṽéñţîöñš (label, description, heading, helpText, …) éẋţŕàçţ öñ ÞàšçàļÇàšé çöḿþöñéñţš öñļý. Ţĥé šçöþîñĝ éẋîšţš ƃéçàüšé ţĥé çöñṽéñţîöñ ñàḿéš àŕé ñöţ ŕéšéŕṽéđ: öñ à þļàîñ ĤŢḾĻ éļéḿéñţ, label öŕ heading îš ƒàŕ ḿöŕé öƒţéñ à ĐÖḾ þŕöþ, àñ éñüḿ ķéý, öŕ à đàţà-ƃîñđîñĝ ƒîéļđ ţĥàñ çöþý, àñđ éẋţŕàçţîñĝ ţĥöšé šŵéþţ šţŕîñĝš ñöƃöđý ŵàñţéđ ţŕàñšļàţéđ îñţö ţĥé çàţàļöĝ. Öñé þŕéđîçàţé đéçîđéš, àñđ ƃöţĥ ţĥé ŵàļķéŕ àñđ ţĥé ţŕàñšƒöŕḿ çàļļ îţ.

Ţĥé ķéý îš ţĥé ţéẋţ

Ţĥé ķéý îš ƑÑṼ-1à 64 öṽéŕ JSON.stringify(flatText) + "|" + desc, ƃàšé62-éñçöđéđ, ŵĥéŕé flatText îš ţĥé ƃļöçķ'š ƒļàţ ţéḿþļàţé (ţéẋţ ṽéŕƃàţîḿ, éẋþŕéššîöñš àš {name}, îñļîñé éļéḿéñţš àš {=mN}) àñđ desc îš à šţŕüçţüŕàļ đéšçŕîþţöŕ.

Ţĥé đéšçŕîþţöŕ îš ţĥé éļéḿéñţ'š öŵñ ŕéšöļṽéđ ţàĝ: "p", "button", "fragment", öŕ à çöñţéẋţ-ǫüàļîƒîéđ ƒöŕḿ ƒöŕ àñ éẋþļîçîţ t() çàļļ. Àñçéšţöŕš àŕé đéļîƃéŕàţéļý éẋçļüđéđ.

Ţĥé ķéý îš ţĥé ţŕàñšļàţöŕ'š çöñţŕàçţ. Ţĥé þŕöþéŕţý ŵé ñééđ îš ţĥàţ à ķéý çĥàñĝéš ŵĥéñ, àñđ öñļý ŵĥéñ, à ţŕàñšļàţöŕ šĥöüļđ ļööķ àţ ţĥé šţŕîñĝ àĝàîñ. Ŕéŵöŕđîñĝ çĥàñĝéš ţĥé ķéý. Ḿöṽîñĝ à þàŕàĝŕàþĥ îñţö à ñéŵ ŵŕàþþéŕ đöéš ñöţ: ţĥàţ îš à ļàýöüţ ŕéƒàçţöŕ, àñđ ţĥé Ĝéŕḿàñ îš šţîļļ ţĥé Ĝéŕḿàñ.

Ţŵö àļţéŕñàţîṽéš ŵéŕé ŕéĵéçţéđ ƒöŕ çöñçŕéţé ŕéàšöñš. À ƒüļļ àñçéšţöŕ þàţĥ ḿàķéš éṽéŕý ļàýöüţ ŕéƒàçţöŕ à šîļéñţ ḿàšš-öŕþĥàñîñĝ éṽéñţ: ŵŕàþ à šéçţîöñ îñ öñé ñéŵ <div> àñđ éṽéŕý šţŕîñĝ ƃéñéàţĥ îţ ĝéţš à ñéŵ ķéý, ļöšéš îţš ţŕàñšļàţîöñ, àñđ ǫüîéţļý ƒàļļš ƃàçķ ţö šöüŕçé. Šţŕüçţüŕé îš ţĥé ļéàšţ šţàƃļé ţĥîñĝ àƃöüţ à Ŕéàçţ çöđéƃàšé, šö ķéýîñĝ öñ îţ îñṽéŕţš ţĥé šţàƃîļîţý ŵé ŵàñţ. Ƒļàţ ţéẋţ àļöñé çöļļàþšéš <p>Save</p> àñđ <button>Save</button> îñţö öñé ķéý, àñđ à ţŕàñšļàţöŕ çàñ ţĥéñ ñéṽéŕ ĝîṽé ţĥé ñöüñ àñđ ţĥé ṽéŕƃ đéŕéñţ ŵöŕđš; ţĥé îḿḿéđîàţé ţàĝ îš ţĥé çĥéàþéšţ đîšàḿƃîĝüàţöŕ ţĥàţ šüŕṽîṽéš ŕéƒàçţöŕîñĝ àñđ ḿàþš ţö à ŕéàļ đîšţîñçţîöñ.

Ŵĥéŕé ţĥé ţàĝ îš ñöţ éñöüĝĥ (ţŵö ƃüţţöñš ƃöţĥ ŕéàđîñĝ "Öþéñ", öñé à ṽéŕƃ àñđ öñé à šţàţé) ţĥé đîšàḿƃîĝüàţöŕ îš éẋþļîçîţ: à data-i18n-note àţţŕîƃüţé öŕ à çöñţéẋţ àŕĝüḿéñţ, ƒöļđéđ îñţö ţĥé đéšçŕîþţöŕ. Ţĥàţ þüţš ţĥé đéçîšîöñ ŵîţĥ ţĥé àüţĥöŕ ŵĥö ķñöŵš ţĥé ţŵö šţŕîñĝš đéŕ, ŕàţĥéŕ ţĥàñ ŵîţĥ àñ îñçîđéñţàļ ƒàçţ àƃöüţ ţĥé ĐÖḾ ţŕéé.

Ţĥé ĥàšĥ îš 64 ƃîţš. À 32-ƃîţ ĥàšĥ ŕéàçĥéš ŕöüĝĥļý éṽéñ öđđš öƒ à ƃîŕţĥđàý çöļļîšîöñ àŕöüñđ éîĝĥţý ţĥöüšàñđ šţŕîñĝš, ŵéļļ îñšîđé ŵĥàţ à ļàŕĝé àþþļîçàţîöñ ŕéàçĥéš, šö 64 ĝîṽéš ĥéàđŕööḿ ƒöŕ ḿîļļîöñ-šţŕîñĝ çöŕþöŕà.

Ƃéçàüšé componentMap àñđ rules ƒééđ ţĥé ĥàšĥ, ţĥé éẋţŕàçţ ÇĻÎ àñđ ţĥé ƃüîļđ þļüĝîñ ḿüšţ ƃé çöñƒîĝüŕéđ îđéñţîçàļļý. À đéšýñç îš šîļéñţ: ƃöţĥ šîđéš ŕüñ ŵîţĥöüţ éŕŕöŕ àñđ çöḿþüţé đéŕéñţ ķéýš, šö éṽéŕý àƒƒéçţéđ šţŕîñĝ ƒàļļš ƃàçķ ţö šöüŕçé. Þŕöĵéçţš šĥöüļđ ķééþ öñé çöñƒîĝüŕàţîöñ ƒîļé ţĥàţ ƃöţĥ šîđéš ŕéàđ.

Öñé ţéḿþļàţé ƃüîļđéŕ, ţŵö çöñšüḿéŕš

Éẋţŕàçţ àñđ ţŕàñšƒöŕḿ ḿüšţ àĝŕéé öñ ţĥé ƒļàţ ţéḿþļàţé ƃýţé ƒöŕ ƃýţé: éẋţŕàçţ ĥàšĥéš îţ îñţö ţĥé îñţéŕçĥàñĝé ƒîļé, ţŕàñšƒöŕḿ ĥàšĥéš îţ ţö ļööķ ţĥé ţŕàñšļàţîöñ ƃàçķ üþ. Àš ţŵö îñđéþéñđéñţ ŵàļķš öṽéŕ ţĥé šàḿé ÀŠŢ ţĥéý ŵöüļđ đŕîƒţ šîļéñţļý (à þàîŕéđ îñļîñé éļéḿéñţ ļéàķîñĝ à ļîţéŕàļ çļöšé ţöķéñ îñţö ţĥé ĐÖḾ, à þļüŕàļ éḿîţţîñĝ üñþàŕšéàƃļé ĴŠẊ), ƃéçàüšé ñöţĥîñĝ çöḿþàŕéš ţĥéḿ.

Šö ţĥé đéçîšîöñ îš šţŕüçţüŕàļ ŕàţĥéŕ ţĥàñ þŕöçéđüŕàļ. extract/runs.ts öŵñš ţĥé šîñĝļé buildRuns() ƃüîļđéŕ àñđ ţĥé ţŕàñšƒöŕḿ çöñšüḿéš îţ, ţàķîñĝ ƃöţĥ ţĥé ƒļàţ ţéẋţ àñđ à ļîšţ öƒ þéŕ-àþþéàŕàñçé öççüŕŕéñçé šþàñš ţĥàţ îţ ḿàþš ƃàçķ öñţö ţĥé šöüŕçé ţö ŕéŵŕîţé ţĥé ĴŠẊ. Þàŕîţý îš à þŕöþéŕţý öƒ ţĥé çöđé šĥàþé, ñöţ öƒ ţŵö àüţĥöŕš ŕéḿéḿƃéŕîñĝ ţö ķééþ ţŵö ŵàļķš îñ šţéþ. Àñý ƒüţüŕé ƒŕöñţ éñđ þļüĝš îñ àţ ţĥé šàḿé šéàḿ.

Ŕüñţîḿé ŕéñđéŕîñĝ

JSX sourceSWC ASTbuildRunsextract/runs.tsone builderBlock + hashRun[] → interchangeTranslatethe kapi pipelineDictionaryhash → flat templateRenderelements re-interleaved

Éẋţŕàçţîöñ àñđ ŕéñđéŕîñĝ ḿééţ àţ ţĥé ƒļàţ ţéḿþļàţé: ţĥé šàḿé ƃüîļđéŕ þŕöđüçéš ţĥé ţéẋţ ţĥàţ îš ĥàšĥéđ, ţŕàñšļàţéđ, àñđ þàŕšéđ ƃàçķ.

Àţ éẋţŕàçţ ţîḿé ţĥé ţŕàñšƒöŕḿ ŕéþļàçéš ţĥé öŕîĝîñàļ ĴŠẊ ŵîţĥ à ŕüñţîḿé çàļļ šîţé àñđ ƃüñđļéš à þéŕ-ļöçàļé đîçţîöñàŕý ḿàþþîñĝ éàçĥ ĥàšĥ ţö à ţŕàñšļàţîöñ îñ ţĥé ŕüñţîḿé ţéẋţüàļ þŕöĵéçţîöñ: à ƒļàţţéñéđ šţŕîñĝ ŵĥéŕé ṽàŕîàƃļéš àŕé {identifier}, šţàñđàļöñé ĴŠẊ þļàçéĥöļđéŕš àŕé {=mN} ŵîţĥ ñö ḿàţçĥîñĝ çļöšé, àñđ þàîŕéđ éļéḿéñţš àŕé {=mN}{/=mN} àŕöüñđ ţĥéîŕ îññéŕ çöñţéñţ. Ţĥîš îš ţĥé öñļý ţéẋţüàļ ƒöŕḿ ţĥé ŕüñţîḿé þàŕšéš; éṽéŕý öţĥéŕ çöñšüḿéŕ üšéš öñé öƒ ţĥé ƒŕàḿéŵöŕķ'š öţĥéŕ þŕöĵéçţîöñš.

Çöḿþîļîñĝ à đîçţîöñàŕý àļšö çĥéçķš éàçĥ ţàŕĝéţ àĝàîñšţ îţš šöüŕçé öñ ţĥàţ ƒļàţţéñéđ ƒöŕḿ. À ţŕàñšļàţîöñ ŵĥöšé þļàçéĥöļđéŕ àñđ ḿàŕķéŕ ţöķéñš đö ñöţ ḿàţçĥ ţĥé šöüŕçé'š, çöüñţéđ ŕàţĥéŕ ţĥàñ ḿéŕéļý þŕéšéñţ (öñé ţöķéñ ŵĥéŕé ţĥé šöüŕçé ĥàđ ţŵö šţîļļ ļöšéš à ṽàļüé; à ţöķéñ ţĥé šöüŕçé ñéṽéŕ ĥàđ ŕéñđéŕš àš à ļîţéŕàļ ƃŕàçé), îš ļéƒţ öüţ öƒ ţĥé đîçţîöñàŕý àñđ ñàḿéđ îñ ţĥé çöḿþîļé öüţþüţ. Ţĥé ŕüñţîḿé ţĥéñ ƒàļļš ƃàçķ ţö šöüŕçé ƒöŕ ţĥàţ ķéý, ŵĥîçĥ ŕéàđš àš þéñđîñĝ ţàŕĝéţ-ļàñĝüàĝé ŵöŕķ ŕàţĥéŕ ţĥàñ àš à šéñţéñçé ḿîššîñĝ îţš çöüñţ, îţš ñàḿé öŕ îţš ļîñķ.

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

ÎÇÜ ļîṽéš îñšîđé ţĥé ţŕàñšļàţéđ šţŕîñĝ: þļüŕàļ àñđ šéļéçţ ƒöŕḿš ŕéšöļṽé ţĥŕöüĝĥ Intl.PluralRules, àñđ ñüḿƃéŕ, đàţé, àñđ ţîḿé šķéļéţöñš ţĥŕöüĝĥ ţĥé çöŕŕéšþöñđîñĝ Intl ƒöŕḿàţţéŕš. Ƃéçàüšé ţĥé ƒöŕḿàţ îš îñ ţĥé šţŕîñĝ, à ţŕàñšļàţöŕ çàñ àđđ öñé ţö à ţàŕĝéţ (Ĝéŕḿàñ ŵàñţš à ĝŕöüþéđ ñüḿƃéŕ ŵĥéŕé Éñĝļîšĥ đîđ ñöţ) ŵîţĥöüţ à šöüŕçé çĥàñĝé.

Îñļîñé ḿöđé ƃàķéš ţĥé ţŕàñšļàţîöñ îñţö ţĥé ĴŠẊ àţ ƃüîļđ ţîḿé. Ƒöŕ ŕîçĥ ţéẋţ ţĥàţ ḿéàñš ŕéƃüîļđîñĝ ţĥé éļéḿéñţ: ţĥé ţŕàñšļàţéđ ţéḿþļàţé'š þàîŕš àŕé ḿàţçĥéđ ļàšţ-îñ-ƒîŕšţ-öüţ àñđ éàçĥ ŕàñĝé îš ŕé-ŵŕàþþéđ îñ ţĥé öŕîĝîñàļ çĥîļđ'š öþéñîñĝ àñđ çļöšîñĝ ţàĝš, þŕöþš àñđ ĥàñđļéŕš þŕéšéŕṽéđ ṽéŕƃàţîḿ, ŵĥîļé šţàñđàļöñé ţöķéñš šþļîçé ţĥé çĥîļđ'š šöüŕçé îñ. Ţĥé ţŕàñšļàţöŕ ḿàý ŕéöŕđéŕ àñđ ŕéñéšţ; ţĥé ĴŠẊ ƒöļļöŵš. Àñýţĥîñĝ ţĥé ƃüîļđéŕ çàññöţ àççöüñţ ƒöŕ îš éšçàþéđ àš ţéẋţ ŕàţĥéŕ ţĥàñ éḿîţţéđ ŕàŵ: à ļéàķéđ îñţéŕçĥàñĝé ţöķéñ îñ ţĥé ĐÖḾ îš ţĥé öñé öüţçöḿé ţĥàţ ḿüšţ ƃé îḿþöššîƃļé.

ÎÇÜ îš ţĥé đöçüḿéñţéđ éẋçéþţîöñ. À þļüŕàļ'š þîṽöţ îš à ŕüñţîḿé ṽàļüé, šö ñö ƃüîļđ šţéþ çàñ çĥööšé ţĥé ƒöŕḿ. Ƃļöçķš çàŕŕýîñĝ ÎÇÜ ţĥéŕéƒöŕé ķééþ à ŕüñţîḿé çàļļ éṽéñ îñ îñļîñé ḿöđé, ŵîţĥ ţĥé ţŕàñšļàţéđ ţéḿþļàţé ƃàķéđ îñ àš ţĥé çàļļ'š ƒàļļƃàçķ: ţĥé đîçţîöñàŕý ƒéţçĥ đîšàþþéàŕš, ţĥé šḿàļļ ŕéšöļṽéŕ šţàýš. Éḿîţţîñĝ ţĥé šöüŕçé-ļöçàļé ƒöŕḿ, öŕ ţŕýîñĝ ţö îñļîñé à ŕüñţîḿé çĥöîçé, îš éîţĥéŕ šîļéñţļý ŵŕöñĝ öŕ îñṽàļîđ ĴŠẊ.

Éñţŕý þöîñţš

Ţĥé þàçķàĝé éẋþöšéš öñé ƃüîļđ àđàþţéŕ þéŕ ƃüñđļéŕ (./vite, ./webpack, ./rollup, ./esbuild), ţĥé ŕüñţîḿé (./runtime, ŵîţĥ ./runtime/pseudo ƒöŕ ţĥé þšéüđö ļöçàļé), ţĥé ĥéàđ ĥööķš (./head), ţĥé ŕéṽîéŵ ļàýéŕ (./review, ./review/hosted, ./review/manifest), ţĥé šĥîþ-šţàţüš þîçķéŕ (./ship), àñđ ţŵö ḿöŕé ţĥàţ éẋîšţ ƒöŕ ĥöšţš ţĥé àđàþţéŕš çàññöţ ŕéàçĥ:

  • ./loader îš à þļàîñ ŵéƃþàçķ ļöàđéŕ, ñàḿéđ ƃý à þàţĥ šţŕîñĝ îñ module.rules, ƒöŕ à ĥöšţ ţĥàţ éṽàļüàţéš îţš çöñƒîĝ ţĥŕöüĝĥ à ţŕàñšþîļéŕ ţĥàţ çàññöţ ļöàđ ţĥé üñþļüĝîñ àđàþţéŕ. Đöçüšàüŕüš îš ţĥé çàšé îñ ĥàñđ. Îţ çàŕŕîéš öñļý ţĥé þéŕ-ƒîļé ţŕàñšƒöŕḿ, šö îñļîñé ḿöđé ŵöŕķš éẋàçţļý àš ţĥŕöüĝĥ ţĥé àđàþţéŕ, ŵĥîļé ŕüñţîḿé ḿöđé'š çĥüñķ ḿàñîƒéšţ àñđ ţĥé ŕéṽîéŵ öṽéŕļàý'š šçŕîþţ îñĵéçţîöñ, ƃöţĥ ƃüñđļé-ļéṽéļ, àŕé ĝîṽéñ üþ.
  • ./storybook šüþþļîéš à ļöçàļé ţööļƃàŕ àñđ à đéçöŕàţöŕ ţĥàţ àþþļîéš à đîçţîöñàŕý ţö à šţöŕý, šö à þüƃļîšĥéđ Šţöŕýƃööķ ŕéñđéŕš îñ éàçĥ ļöçàļé.

Ļîñţ ķééþš ţĥé šöüŕçé éẋţŕàçţàƃļé

@neokapi/i18n-react-lint îš à šöüŕçé-àüţĥöŕîñĝ þļüĝîñ ţĥàţ ŵöŕķš üñçĥàñĝéđ ƒöŕ ƃöţĥ ÉŠĻîñţ ƒļàţ çöñƒîĝ àñđ öẋļîñţ (öẋļîñţ'š þļüĝîñ ÀÞÎ îš à šţŕîçţ šüƃšéţ öƒ ÉŠĻîñţ'š, šö ñö àđàþţéŕ îš ñééđéđ) àñđ šĥîþš šĥàŕéàƃļé recommended àñđ recommended-strict çöñƒîĝüŕàţîöñš.

Îţš ŕüļéš ƒļàĝ þàţţéŕñš ţĥàţ ŵöüļđ ƒŕàĝḿéñţ öŕ éšçàþé éẋţŕàçţîöñ: à ñöñ-ļîţéŕàļ ƒîŕšţ àŕĝüḿéñţ ţö t(), çöñçàţéñàţîöñ öŕ îñţéŕþöļàţîöñ îñšîđé t(), çöñçàţéñàţîöñ öŕ à ţéŕñàŕý îñ à ţŕàñšļàţàƃļé àţţŕîƃüţé, à ƃàŕé šţŕîñĝ ļîţéŕàļ îñ à ĴŠẊ éẋþŕéššîöñ çöñţàîñéŕ, à ţéŕñàŕý ŵîţĥ šţŕîñĝ-ļîţéŕàļ ƃŕàñçĥéš àš à çĥîļđ, àñđ ļàƃéļ þŕöþš öŕ éẋþŕéššîöñš ţĥàţ šĥöüļđ ƃé ŵŕàþþéđ. Îţ ṽàļîđàţéš ţĥé šöüŕçé, ñöţ ţŕàñšļàţéđ öüţþüţ: ţŕàñšļàţîöñ çĥéçķš ŕöüţé ţĥŕöüĝĥ kapi, àñđ ţĥé çöḿþîļé šţéþ öñļý ƒļàţţéñš ţàŕĝéţ ŕüñš îñţö þéŕ-ļöçàļé đîçţîöñàŕîéš.

Ĥéàđ šţŕîñĝš ĥàṽé ñö ĐÖḾ ñöđé

À <title>, à ḿéţà đéšçŕîþţîöñ, öŕ à çàŕđ ţîţļé îš þàĝé ḿéţàđàţà, ñöţ ŕéñđéŕéđ çöñţéñţ, šö ţĥéŕé îš ñöţĥîñĝ ţö ĥöṽéŕ àñđ ñöţĥîñĝ ţö öüţļîñé, àñđ ţĥéšé àŕé ƒŕéǫüéñţļý ţĥé ĥîĝĥéšţ-ṽàļüé šţŕîñĝš öñ ţĥé þàĝé. Ţĥéý àŕé ŕéàçĥéđ ţĥŕöüĝĥ ţĥé öþţ-îñ ĥéàđ ĥööķš, àñđ ƃéçàüšé à ĥéàđ šţŕîñĝ ñéṽéŕ ĝéţš à ĐÖḾ ţéẋţ ñöđé, ţĥé ƃüîļđ ţŕàñšƒöŕḿ çàññöţ ŕéŵŕîţé îţ ţĥé ŵàý îţ ŕéŵŕîţéš à çàļļ šîţé.

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

Àš îţ àþþļîéš ţĥé šţŕîñĝ, ţĥé ĥööķ ŕéĝîšţéŕš îţš ķîñđ, ĥàšĥ, àñđ šöüŕçé îñ à šḿàļļ ƒŕàḿéŵöŕķ-ƒŕéé ŕéĝîšţŕý ţĥé ŕéṽîéŵ öṽéŕļàý ŕéàđš, šö ĥéàđ ţŕàñšļàţàƃļéš àŕé ļîšţéđ àñđ éđîţéđ ţĥŕöüĝĥ ţĥé îđéñţîçàļ ŵŕîţé-ƃàçķ à ƃöđý šţŕîñĝ üšéš. Ñöţĥîñĝ šçŕàþéš àŕƃîţŕàŕý ĥéàđ ḿàŕķüþ: öñļý šţŕîñĝš ţĥé þîþéļîñé ţŕàñšļàţéđ ŕéĝîšţéŕ, àñđ à þàĝé ŵîţĥ ñöñé šĥöŵš ñö þàñéļ.

Ŕéṽîéŵ öñ ţĥé ŕüññîñĝ àþþ

Šţàḿþ ţĥé ĐÖḾ àţ ƃüîļđ ţîḿé

Üñđéŕ review: true (öŕ KAPI_REVIEW=1), ţĥé ţŕàñšƒöŕḿ àđđš ţĥŕéé àţţŕîƃüţéš ţö éàçĥ éẋţŕàçţéđ éļéḿéñţ:

ÀţţŕîƃüţéÇàŕŕîéš
data-kapi-idţĥé ƃļöçķ ĥàšĥ
data-kapi-locfile:line, ƒöŕ ĵüḿþ-ţö-šöüŕçé
data-kapi-attrţĥé ĥàšĥéš öƒ ţĥé éļéḿéñţ'š ţŕàñšļàţàƃļé àţţŕîƃüţéš

Ţĥé îđéñţîƒîéŕ ĝöéš îñ àñ àţţŕîƃüţé, ñéṽéŕ îñ ţĥé ţéẋţ. Ţŵö ḿéçĥàñîšḿš ŵéŕé çöñšîđéŕéđ àñđ ñöţ ţàķéñ. Ƒîƃéŕ îñšþéçţîöñ, ŕéàđîñĝ Ŕéàçţ'š îñţéŕñàļ ţŕéé ƒöŕ đéƃüĝ šöüŕçé îñƒöŕḿàţîöñ, îš ñöţ ṽîàƃļé, ƃéçàüšé Ŕéàçţ 19 éẋþöšéš ñöñé. Îñ-ƃàñđ ḿàŕķéŕš, îñṽîšîƃļé çĥàŕàçţéŕš öŕ þŕîṽàţé-üšé çöđé þöîñţš îñšîđé ţĥé ŕéñđéŕéđ ţéẋţ, ñééđ ñö ƃüîļđ šţéþ, ƃüţ ţĥéñ ţĥé ŕéñđéŕéđ šţŕîñĝ îš ñöţ ţĥé šţŕîñĝ ţĥé àþþļîçàţîöñ çöḿþüţéđ: éǫüàļîţý çöḿþàŕîšöñš, ḿéàšüŕéḿéñţ, àñđ çöþý/þàšţé àļļ šéé ţĥé ḿàŕķéŕ, àñđ àñ àţţŕîƃüţé ṽàļüé ĥàš ñö ţéẋţ ñöđé ţö çàŕŕý öñé àţ àļļ. Ŕéṽîéŵ ḿüšţ ƃé öƃšéŕṽàţîöñ-ƒŕéé; ţĥé àþþļîçàţîöñ üñđéŕ ŕéṽîéŵ ĥàš ţö ƃéĥàṽé éẋàçţļý àš îţ đöéš îñ þŕöđüçţîöñ.

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

Ţĥîš îš à đéṽ àñđ šţàĝîñĝ ƒàçîļîţý, ĝàţéđ ƃéĥîñđ àñ éẋþļîçîţ ƒļàĝ: îţ þüţš šöüŕçé þàţĥš îñ ţĥé ĐÖḾ àñđ ḿöüñţš à ḿîđđļéŵàŕé ţĥàţ ŵŕîţéš ţö đîšķ.

Ţĥé đéṽ šéŕṽéŕ šéŕṽéš ţĥé îñţéŕçĥàñĝé ţŕéé

Ţĥé Ṽîţé þļüĝîñ ḿöüñţš à ḿîđđļéŵàŕé àţ /__kapi/review, ŵŕîţţéñ àĝàîñšţ þļàîñ Ñöđé ĤŢŢÞ šö îţ þöŕţš ţö àñý đéṽ šéŕṽéŕ, öṽéŕ ţĥé ļöçàļ îñţéŕçĥàñĝé đîŕéçţöŕý:

ŔöüţéÞüŕþöšé
GET {base}/{hash}ţĥé ƃļöçķ þàýļöàđ: šöüŕçé ŕüñš, ţàŕĝéţš, ñöţéš
PUT {base}/{hash}ŵŕîţé à ţàŕĝéţ ƃàçķ îñţö ţĥé ƃļöçķ'š ƒîļé
GET {base}/annotationsšţàñđ-öƒƒ ƒîñđîñĝš, ķéýéđ ƃý ƃļöçķ ĥàšĥ
GET {base}/eventsšéŕṽéŕ-šéñţ éṽéñţš, ƃŕöàđçàšţ ţö éṽéŕý öþéñ ţàƃ

Ţĥé îñđéẋ ŕéƃüîļđš ŵĥéñéṽéŕ à ƃļöçķ ƒîļé öŕ àñ öṽéŕļàý šîđéçàŕ çĥàñĝéš öñ đîšķ, šö àñ öüţ-öƒ-ƃàñđ ţŕàñšļàţîöñ öŕ çĥéçķ þàšš šĥöŵš üþ ŵîţĥöüţ à ŕéšţàŕţ.

À ŕéṽîéŵ îš à đ

À ŕéṽîéŵéđ ţàŕĝéţ îš ŵŕîţţéñ îñţö ţĥé ƃļöçķ'š öŵñ ƒîļé àš à ţàŕĝéţ ŕüñ. Ţĥé öƃṽîöüš àļţéŕñàţîṽé, à ŕéṽîéŵ đàţàƃàšé ŵîţĥ çöḿḿéñţš, šţàţéš, àñđ àñ àþþŕöṽé ƃüţţöñ, ŵàš ŕéĵéçţéđ.

Ţĥàţ ƒîļé ţŕéé îš àļŕéàđý ţĥé çöñţŕàçţ ƃéţŵééñ đéṽéļöþéŕš àñđ ţŕàñšļàţöŕš: éẋţŕàçţîöñ þŕöđüçéš îţ, ţŕàñšļàţîöñ ƒîļļš îţ, ţĥé çĥéçķš ŕéàđ îţ, çöḿþîļàţîöñ šĥîþš îţ. Ŵŕîţîñĝ à ŕéṽîéŵéđ ţàŕĝéţ îñţö îţ ḿàķéš ţĥé ŕéṽîéŵ à ĝîţ đ: ŕéṽîéŵàƃļé îñ à þüļļ ŕéǫüéšţ, ŕéṽéŕţàƃļé, àţţŕîƃüţàƃļé, àñđ çöñšüḿéđ ƃý ţĥé ṽéŕý ñéẋţ çöḿþîļé ŵîţĥ ñö šýñçĥŕöñîšàţîöñ šţéþ. À ŕéṽîéŵéŕ'š ƒîẋ ţŕàṽéļš ţĥé îđéñţîçàļ þàţĥ àš à ţŕàñšļàţöŕ'š, ƃéçàüšé îţ îš ţĥé îđéñţîçàļ àŕţîƒàçţ. Îţ àļšö ḿéàñš ŕéṽîéŵ ñééđš ñö šéŕṽéŕ, ñö àççöüñţ, àñđ ñö ñéţŵöŕķ.

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

Ŕéàđîñĝ à šţŕîñĝ îñšîđé ţĥé çöḿþöñéñţ ţĥàţ šĥîþš îţ

À çàţàļöĝ ţéļļš à ŕéṽîéŵéŕ ŵĥàţ à šţŕîñĝ šàýš; ţĥé çöḿþöñéñţ çàñ šĥöŵ ŵĥàţ îţ ļööķš ļîķé îñ ţĥé ƃüţţöñ. Ƒöŕ à ĴŠẊ þŕöĵéçţ ţĥé çöḿþöñéñţ îš üšüàļļý àļŕéàđý þüƃļîšĥéđ àš à šţöŕý. Ţĥé ĵöîñ îš ƃý çöñṽéñţîöñ, ŕéšöļṽéđ ŵĥéñ šöḿéöñé ļööķš: à ƃüñđļé ŕéçöŕđš ţĥé çöḿþöñéñţ ƒîļé éàçĥ ƃļöçķ çàḿé ƒŕöḿ, àñđ à Šţöŕýƃööķ'š îñđéẋ ŕéçöŕđš ţĥé ƒîļé éàçĥ šţöŕý ŵàš ŵŕîţţéñ îñ. Ñöţĥîñĝ ƃàķéš à šţöŕý îđ îñţö ţĥé çàţàļöĝ, ŵĥîçĥ ŵöüļđ çöüþļé ţĥé éẋţŕàçţöŕ ţö ţĥé çöñšüḿîñĝ Šţöŕýƃööķ'š îđ đéŕîṽàţîöñ àñđ ƒŕééžé à šţàļé îđ îñţö éṽéŕý ƃüñđļé.

Ţĥé ţŕàñšļàţîöñ îš þöšţéđ îñ ŕàţĥéŕ ţĥàñ ŕéàđ ƒŕöḿ ţĥé þüƃļîšĥéđ ƃüîļđ. À šţöŕý ŕéñđéŕš ţĥé đîçţîöñàŕý îţ ŵàš ƃüîļţ ŵîţĥ, šö ţĥé ŕéṽîéŵ šüŕƒàçé šéñđš ŵĥàţ ţĥé ŕéṽîéŵéŕ îš ĥöļđîñĝ, đŕàƒţš îñçļüđéđ, àñđ ţĥé ./storybook đéçöŕàţöŕ ḿéŕĝéš îţ öṽéŕ ŵĥàţ ţĥé šţöŕý àļŕéàđý ĥàđ: ţĥé šţŕîñĝš üñđéŕ ŕéṽîéŵ àŕé ţĥé ŕéṽîéŵéŕ'š, àñđ éṽéŕýţĥîñĝ éļšé šţàýš ţŕàñšļàţéđ îñšţéàđ öƒ ƒàļļîñĝ ƃàçķ ţö šöüŕçé. Ţĥé ķéý ţĥé ŕüñţîḿé ļööķš à šţŕîñĝ üþ ƃý îš ţĥé ƃļöçķ ĥàšĥ, ŵĥîçĥ ţĥé KBF ŕéàđéŕ çàŕŕîéš îñţö ƃļöçķ þŕöþéŕţîéš šö à ƃļöçķ îñ à ƃüñđļé ĥàš ţĥé šàḿé àđđŕéšš îñšîđé à ŕüññîñĝ þàĝé.

Çöñţéñţ àđđŕéššîñĝ ḿàķéš ŕéṽîéŵ ŕéñđéŕ-ḿöđé-îñđéþéñđéñţ

data-kapi-id îš ţĥé ƃļöçķ'š çöñţéñţ ĥàšĥ, çöḿþüţéđ îđéñţîçàļļý ŵĥéţĥéŕ ţĥé ƃüîļđ îñļîñéš ţĥé ţŕàñšļàţîöñ ƒöŕ à šţàţîç öŕ šéŕṽéŕ-ŕéñđéŕéđ þàĝé öŕ éḿîţš à ŕüñţîḿé çàļļ, ţĥé šàḿé ĥàšĥ-þàŕîţý îñṽàŕîàñţ. Ñöţĥîñĝ àƃöüţ ţĥé šţàḿþ đéþéñđš öñ à ŕüñţîḿé đîçţîöñàŕý ƃéîñĝ þŕéšéñţ.

Ţö ḿàķé à šţàţîçàļļý ŕéñđéŕéđ þàĝé šéļƒ-šüƒƒîçîéñţ, ţĥé þļüĝîñ éḿîţš à ŕéàđ-öñļý ŕéṽîéŵ ḿàñîƒéšţ ŵĥéñéṽéŕ ŕéṽîéŵ îš öñ, ĝàţéđ öñ ŕéṽîéŵ ŕàţĥéŕ ţĥàñ öñ ḿöđé, šö àñ îñļîñé ƃüîļđ éḿîţš îţ àš ḿüçĥ àš à ŕüñţîḿé öñé. À ĥöšţéđ öṽéŕļàý ƒéţçĥéš ţĥàţ ḿàñîƒéšţ, ƒîñđš éļéḿéñţš ƃý data-kapi-id, àñđ ñééđš ñéîţĥéŕ à đéṽ šéŕṽéŕ ñöŕ ţĥé àþþļîçàţîöñ'š î18ñ ŕüñţîḿé: đééþ-ļîñķîñĝ ţö à šîñĝļé ƃļöçķ, à ŵĥöļé-þàĝé îñđéẋ, àñđ ŕéàđ-öñļý îñšþéçţîöñ àļļ ŵöŕķ öñ à þļàîñ šţàţîç đéþļöý. Ŵîţĥ éđîţîñĝ éñàƃļéđ îţ ŵŕîţéš ţĥŕöüĝĥ ţĥé îđéñţîçàļ PUT þŕöţöçöļ àñđ ŕéþàîñţš ƃý þàţçĥîñĝ ţĥé éļéḿéñţ'š ţéẋţ đîŕéçţļý; ţéẋţ-öñļý, šö ƃļöçķš ŵîţĥ îñļîñé çöđéš öŕ ÎÇÜ þļüŕàļš šàṽé ţö ţĥé šţöŕé ƃüţ àŕé ñöţ ŕéþàîñţéđ ļîṽé. Ŕîçĥéŕ ḿàñîƒéšţš, çöṽéŕîñĝ éṽéŕý ļöçàļé àñđ ţĥé ţéŕḿ àñđ çĥéçķ àññöţàţîöñš, šţîļļ çöḿé ƒŕöḿ ţĥé çöḿþîļé šţéþ öṽéŕ ţĥé ŵĥöļé ţŕéé.

Ƒîñđîñĝš àŕé þàîñţéđ ƃéšîđé ţĥé ĐÖḾ

Ţéŕḿîñöļöĝý àñđ çĥéçķ ƒîñđîñĝš àŕé šţàñđ-öƒƒ àññöţàţîöñš àñçĥöŕéđ ţö ŕüñ-îñđéẋ ŕàñĝéš, ţĥé ƒŕàḿéŵöŕķ'š éẋîšţîñĝ öṽéŕļàý ḿöđéļ (Ƒ-02). Ţĥé ƃŕöŵšéŕ ŕéñđéŕš ţĥéḿ ţĥŕöüĝĥ ţĥé ÇŠŠ Çüšţöḿ Ĥîĝĥļîĝĥţ ÀÞÎ: Range öƃĵéçţš àŕé ŕéĝîšţéŕéđ îñ ñàḿéđ ĥîĝĥļîĝĥţš àñđ šţýļéđ ŵîţĥ ::highlight(kapi-term) àñđ ::highlight(kapi-check).

Ñöţĥîñĝ îš îñšéŕţéđ îñţö ţĥé ĐÖḾ. Ţĥé çļàššîç àþþŕöàçĥ, ŵŕàþþîñĝ ḿàţçĥéđ ţéẋţ îñ à šţýļéđ <span>, ḿüţàţéš ţĥé ţŕéé Ŕéàçţ öŵñš, ŵĥîçĥ ḿéàñš ļàýöüţ šĥîƒţš, ĥýđŕàţîöñ ḿîšḿàţçĥéš, àñđ à ŕé-ŕéñđéŕ šîļéñţļý đîšçàŕđîñĝ ţĥé ĥîĝĥļîĝĥţš. Çüšţöḿ Ĥîĝĥļîĝĥţ þàîñţš îñ ţĥé ţéẋţ ŕéñđéŕéŕ, ƃéšîđé ţĥé ĐÖḾ: Ŕéàçţ'š ţŕéé îš üñţöüçĥéđ, šö ŵĥàţ ţĥé ŕéṽîéŵéŕ šééš îš ţĥé àþþļîçàţîöñ, ñöţ ţĥé àþþļîçàţîöñ þļüš ţĥé îñšţŕüḿéñţ. Ḿàþþîñĝ à šţàñđ-öƒƒ ŕàñĝé ţö à Range îš đîŕéçţ, ƃéçàüšé ƃöţĥ àŕé öƒƒšéţš îñţö ţĥé šàḿé ƒļàţ ţéẋţ ţĥé ƃļöçķ àļŕéàđý çàŕŕîéš.

Šĥîþþîñĝ à ļöçàļé

À šéþàŕàţé šüƃþàţĥ ţüŕñš ţĥé þŕöĵéçţ'š šĥîþ šţàţüš îñţö à ļàñĝüàĝé þîçķéŕ'š ŕéñđéŕ ḿöđéļ. À ḿîñîḿàļ ḿàñîƒéšţ, éḿîţţéđ ƃý ţĥé ÇĻÎ, ķéýš éàçĥ ļöçàļé ţö ţŵö ĝàţéš, šĥîþþàƃļé (ñöţĥîñĝ ŵîţĥĥöļđš îţ, šö îţ îš šàƒé ţö öƒƒéŕ) àñđ ṽéŕîƒîéđ (à þéŕšöñ ŕéṽîéŵéđ öŕ šîĝñéđ öƒƒ), àñđ ţö îţš šĥîþ šţàţé: shippable ŵĥéñ îţ çļéàŕš à šĥîþ ĝàţé, withheld, öŕ not_gated ŵĥéñ ñö šĥîþ ĝàţé ḿàţçĥéš îţ. À ñöţ-ĝàţéđ ļöçàļé îš öƒƒéŕéđ üñļéšš ţĥé çàļļéŕ àšķš ƒöŕ ĝàţéđ ļöçàļéš öñļý. À ļöçàļé ţĥàţ šĥîþš ƃüţ îš ñöţ ṽéŕîƒîéđ îš ÀÎ-öñļý ŵöŕķ àñđ îš ţĥé öñļý çàšé ţĥîš ļàýéŕ ƃàđĝéš. Đîšþļàý ļàƃéļš đéŕîṽé ƒŕöḿ éàçĥ ļöçàļé çöđé àš îţš éñđöñýḿ ţĥŕöüĝĥ Intl.DisplayNames, šö ñö þéŕ-ļöçàļé ļàƃéļ ţàƃļé îš ñééđéđ; àñ éẋþļîçîţ ļàƃéļ šţîļļ ŵîñš, ƒöŕ ţĥé çöđéš Intl çàññöţ ñàḿé. Šéé Ç-04 ƒöŕ ŵĥàţ ţĥé ĝàţéš ḿéàñ.

Çöñšéǫüéñçéš

  • Öñé ƃļöçķ þéŕ ţŕàñšļàţàƃļé éļéḿéñţ. Îñļîñé šţŕüçţüŕé šţàýš îñšîđé ţĥé ƃļöçķ, šö çöñţéñţ ḿéḿöŕý ķéýš öñ ŵĥöļé šéñţéñçéš àñđ ţŕàñšļàţöŕš šéé šéñţéñçéš ŵîţĥ ţĥéîŕ çöñţéẋţ. Ḿöđéļ àñđ ḿàçĥîñé-ţŕàñšļàţîöñ ǫüàļîţý îš ƃéţţéŕ ƒöŕ šéñţéñçéš ŵîţĥ îñļîñé ļîñķš àñđ éḿþĥàšîš ţĥàñ ƒöŕ ţĥé ƒŕàĝḿéñţš à šüƃ-ķéý šçĥéḿé þŕöđüçéš.
  • À šîñĝļé éḿîţ þàţĥ. Îñļîñé-ŵîţĥ-çĥîļđŕéñ ƃéçöḿéš à þàîŕ, ŵĥàţéṽéŕ ţĥé îññéŕ çöñţéñţ îš. Ţĥéŕé îš ñö šþéçîàļ çàšé ƒöŕ "öñļý àñ îçöñ îñšîđé" öŕ "öñļý öñé ṽàŕîàƃļé îñšîđé".
  • À šîñĝļé ţéẋţüàļ ĝŕàḿḿàŕ. Ñàḿéđ ṽàŕîàƃļéš, àñ éļéḿéñţ ţöķéñ, àñđ îţš çļöšé ĥàļƒ àŕé ţĥé ŵĥöļé ṽöçàƃüļàŕý; ţĥé ŕüñţîḿé đéçîđéš šţàñđàļöñé ṽéŕšüš þàîŕéđ ƃý ļööķîñĝ ƒöŕ à ḿàţçĥîñĝ çļöšé îñ šçöþé, šö ñö šéþàŕàţé ḿàŕķéŕ þŕéƒîẋ îš ñééđéđ.
  • Ŕéƒàçţöŕ-šţàƃļé ķéýš. Ŕéŵöŕđîñĝ öŕþĥàñš à ţŕàñšļàţîöñ, ŕéšţŕüçţüŕîñĝ đöéš ñöţ, ŵĥîçĥ îš ţĥé þŕöþéŕţý ţĥàţ ḿàķéš à ļàŕĝé Ŕéàçţ çöđéƃàšé šüŕṽîṽàƃļé.
  • Öñé ţŕàñšļàţàƃîļîţý ţàƃļé. Ţĥé ĴŠẊ ţŕàñšƒöŕḿ àñđ ţĥé Ĝö ŕéàđéŕš çļàššîƒý ţĥé šàḿé éļéḿéñţš ţĥé šàḿé ŵàý, àñđ à çĥàñĝé öñ éîţĥéŕ šîđé ƒàîļš à ĝàţé.
  • À ĥöļé ñéṽéŕ šĥîþš šîļéñţļý. À ţàŕĝéţ ţĥàţ ļöšţ à þļàçéĥöļđéŕ îš ļéƒţ öüţ àñđ ñàḿéđ; ţĥé ŕéàđéŕ šééš ţĥé šöüŕçé šéñţéñçé, ñöţ à ƃŕöķéñ öñé.
  • Ţĥé ƒŕàḿéŵöŕķ çöñṽéñţîöñ éẋţéñđš ţö ĴŠẊ. Ţĥé šàḿé Run[] ḿöđéļ àš ţĥé ĤŢḾĻ ŕéàđéŕ, ţĥé šàḿé þàîŕéđ-çöđé šéḿàñţîçš, ţĥé šàḿé þŕöĵéçţîöñš àţ ƃöüñđàŕîéš, šö ţĥé ṽîšüàļ éđîţöŕ, îñţéŕçĥàñĝé ŕöüñđ-ţŕîþ, ḿéḿöŕý ḿàţçĥîñĝ, àñđ ţŕàñšļàţîöñ ţööļš ŵöŕķ öñ ţĥîš öüţþüţ ŵîţĥ ñö šþéçîàļ çàšéš.
  • Ţĥé ŕéṽîéŵéŕ šééš ţĥé àþþļîçàţîöñ. Ţŕüñçàţîöñ, ŵŕàþþîñĝ, ţöñé îñ þļàçé, à ţéŕḿ ţĥàţ ŕéàđš ŵŕöñĝ ñéẋţ ţö ţĥé ƃüţţöñ ƃéšîđé îţ: àļļ ṽîšîƃļé àţ ŕéṽîéŵ ţîḿé.
  • Ŕéṽîéŵ îš à đ. Ñö îḿþöŕţ, ñö éẋþöŕţ, ñö šýñç šţéþ, ñö þļàţƒöŕḿ đéþéñđéñçý ƒöŕ ţĥé ļöçàļ ţîéŕ.
  • Çĥéçķš àñđ ţéŕḿîñöļöĝý ƃéçöḿé ṽîšüàļ. Ţĥé çĥéçķš kapi àļŕéàđý ŕüñš šţöþ ƃéîñĝ à ļîšţ öƒ ļîñé ñüḿƃéŕš àñđ ƃéçöḿé ḿàŕķš öñ ţĥé ŵöŕđš ţĥéý àŕé àƃöüţ, ŵĥîçĥ îš ţĥé öñļý ƒöŕḿ îñ ŵĥîçĥ à ŕéṽîéŵéŕ àçţš öñ ţĥéḿ.
  • Ţĥé šţàḿþ îš ţĥé šéàḿ. Ţĥé šàḿé îđéñţîƒîéŕ ţĥàţ ļéţš à ļöçàļ öṽéŕļàý ƒîñđ à ƃļöçķ ļéţš à ĥöšţéđ öṽéŕļàý ƒîñđ öñé, àñđ à þļàţƒöŕḿ ţîéŕ îš à đéŕéñţ ƃàçķéñđ ƃéĥîñđ ţĥé šàḿé çļîéñţ çöñţŕàçţ ŕàţĥéŕ ţĥàñ à đéŕéñţ ƒéàţüŕé.
  • Éñàƃļé ŕéṽîéŵ đéļîƃéŕàţéļý. Îţ þüţš file:line îñ ţĥé ĐÖḾ, ḿöüñţš à ŵŕîţéŕ, àñđ ƃàķéš à ḿàñîƒéšţ: àþþŕöþŕîàţé ƒöŕ đéṽéļöþḿéñţ àñđ þŕéṽîéŵ đéþļöýš, àñđ öƒƒ ƒöŕ ţĥé þŕöđüçţîöñ ƃüîļđ éñđ üšéŕš ĝéţ.

Ŕéļàţéđ