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

neokapi-î18ñ

Žéŕö-ţöîļ îñţéŕñàţîöñàļîšàţîöñ ƒöŕ Ŕéàçţ.

Ţĥé þŕöƃļéḿ ŵîţĥ ţŕàđîţîöñàļ î18ñ

Ţŕàñšļàţîñĝ à Ŕéàçţ àþþ üšüàļļý ḿéàñš ŵŕàþþîñĝ éṽéŕý üšéŕ-ṽîšîƃļé šţŕîñĝ îñ à ţŕàñšļàţîöñ çàļļ:

// The traditional way: call-based (a translation function wraps every string)
<h1>{t("welcome.heading")}</h1>
<p>{t("welcome.description")}</p>
<button>{t("welcome.getStarted")}</button>

Ñéŵéŕ ļîƃŕàŕîéš đŕöþ ţĥé ķéý ƃüţ ķééþ ţĥé ŵŕàþþéŕ: ýöü ḿàŕķ éṽéŕý ţŕàñšļàţàƃļé ƒŕàĝḿéñţ ŵîţĥ àñ éẋþļîçîţ ĴŠẊ éļéḿéñţ îñšţéàđ.

// The traditional way: element-based (a marker component wraps every fragment)
<h1><T desc="welcome heading">Welcome</T></h1>
<p><T>Ship your product in every language your users speak.</T></p>
<button><T>Get started</T></button>

Éîţĥéŕ ŵàý, ýöü ŵŕîţé ţĥé ÜÎ àñđ ţĥéñ àññöţàţé îţ àš ŵéļļ. Ţĥàţ çŕéàţéš ţĥŕéé ķîñđš öƒ ţöîļ:

  • Ŵŕîţîñĝ ţĥé ŵŕàþþéŕ: éṽéŕý šţŕîñĝ îñ ýöüŕ àþþ ĝéţš à ţŕàñšļàţîöñ çàļļ öŕ ḿàŕķéŕ éļéḿéñţ àŕöüñđ îţ, àñđ éṽéŕý þŕöþ ţĥàţ ḿîĝĥţ éṽéŕ ƃé ţŕàñšļàţéđ ƃéçöḿéš àñ éẋþŕéššîöñ öŕ à ḿàŕķéŕ çöḿþöñéñţ îñšţéàđ öƒ à þļàîñ ļîţéŕàļ. Ţĥé éļéḿéñţ-ƃàšéđ àþþŕöàçĥ ţŕàđéš ţĥé ķéý ƒöŕ ƃöîļéŕþļàţé ĴŠẊ, ƃüţ ţĥé ŵŕàþþîñĝ ţàẋ šţàýš.
  • Îñṽéñţîñĝ àñđ ḿàîñţàîñîñĝ ķéýš: welcome.heading, welcome.description, welcome.getStarted. Ýöü þîçķ ţĥéḿ, ýöü ŕéñàḿé ţĥéḿ ŵĥéñ ţĥé çöþý çĥàñĝéš, ýöü ĥüñţ ƒöŕ çöļļîšîöñš, ýöü đ ţĥéḿ îñ ŕéṽîéŵ. (Éļéḿéñţ-ƃàšéđ ļîƃŕàŕîéš šŵàþ éẋþļîçîţ ķéýš ƒöŕ desc/context þŕöþš ýöü šţîļļ ĥàṽé ţö àüţĥöŕ àñđ ķééþ àççüŕàţé.)
  • Ķééþîñĝ ţĥéḿ îñ šýñç: ţĥé ţŕàñšļàţîöñ ƒîļé, ţĥé çàļļ šîţéš, ţĥé đöçš. Ŵĥéñ àñý öƒ ţĥéḿ đŕîƒţš, ţĥé àþþ šĥöŵš welcome.heading ţö ţĥé üšéŕ öŕ (ŵöŕšé) ŕéñđéŕš ţĥé ŵŕöñĝ ţéẋţ.

Ýöü þàý ţĥàţ çöšţ öñ đàý öñé, ţĥé đàý à ñéŵ éñĝîñééŕ ĵöîñš, àñđ éṽéŕý ţîḿé à đéšîĝñéŕ çĥàñĝéš à ŵöŕđ öƒ çöþý.

Ŵĥàţ neokapi-î18ñ đöéš đéŕéñţļý

neokapi-î18ñ éẋţŕàçţš ţŕàñšļàţàƃļé çöñţéñţ ƒŕöḿ ţĥé ĴŠẊ ýöü àļŕéàđý ŵŕîţé: ñö ŵŕàþþéŕš, ñö ķéýš.

// The neokapi-i18n way
<h1>Welcome</h1>
<p>Ship your product in every language your users speak.</p>
<button>Get started</button>

Àţ ƃüîļđ ţîḿé à Ṽîţé / ŵéƃþàçķ / Ŕöļļüþ / éšƃüîļđ þļüĝîñ:

  1. Ŵàļķš ýöüŕ ĴŠẊ àñđ ƒîñđš éṽéŕýţĥîñĝ ţĥàţ öüĝĥţ ţö ƃé ţŕàñšļàţéđ (ĥéàđîñĝ, ƃüţţöñ, àţţŕîƃüţé ṽàļüéš, …).
  2. Çöḿþüţéš à šţàƃļé ĥàšĥ ƒŕöḿ ţĥé šöüŕçé ţéẋţ + ţĥé éļéḿéñţ'š öŵñ ţàĝ.
  3. Éḿîţš à KBF đîŕéçţöŕý àŕçĥîṽé, ţĥé éẋçĥàñĝé ƒöŕḿàţ ýöüŕ ţŕàñšļàţöŕš (öŕ àñ ÀÎ) çöñšüḿé.
  4. Ŕéŵŕîţéš ţĥé ĴŠẊ ţö ļööķ üþ ţĥé ĥàšĥ àţ ŕéñđéŕ ţîḿé ŵĥéñ à ţŕàñšļàţîöñ îš ļöàđéđ, öŕ îñļîñéš ţĥé ţŕàñšļàţéđ ţéẋţ àţ ƃüîļđ ţîḿé ƒöŕ žéŕö-ŕüñţîḿé-ļööķüþ ḿöđé.

Ţĥé šöüŕçé ţéẋţ îš ţĥé îđéñţîƒîéŕ. Ŵĥéñ ţĥé çöþý çĥàñĝéš, ýöü çĥàñĝé ţĥé ĴŠẊ, ŵîţĥ ñö ķéý ţö ŕéñàḿé àñđ ñö ţŕàñšļàţîöñ ţàƃļé ţö ķééþ îñ šýñç. Ţŕàñšļàţîöñš ţĥàţ àļŕéàđý éẋîšţ šţîļļ ŕéšöļṽé; ñéŵ šţŕîñĝš ĝéţ à ƒŕéšĥ ĥàšĥ, àñđ ýöüŕ éẋţŕàçţ þîþéļîñé þîçķš ţĥéḿ üþ àüţöḿàţîçàļļý.

Ŵĥàţ "ñö-ţöîļ" ḿéàñš îñ þŕàçţîçé

  • Ñö t() ŵŕàþþîñĝ ƒöŕ ñöŕḿàļ ĴŠẊ. <h1>Welcome</h1> îš ţŕàñšļàţàƃļé àš ŵŕîţţéñ; šö àŕé éļéḿéñţ çĥîļđŕéñ àñđ ţŕàñšļàţàƃļé þŕöþš öñ ýöüŕ öŵñ çöḿþöñéñţš.
  • Ñö ķéý îñṽéñţîöñ. Ţĥé ĥàšĥ öƒ ţĥé šöüŕçé ţéẋţ + ţĥé éļéḿéñţ'š öŵñ ţàĝ îš ţĥé ķéý. Ţĥé ŕüñţîḿé đîçţ îš { "aB3": "Bienvenue", ... } ŕàţĥéŕ ţĥàñ { "welcome.heading": "Bienvenue", ... }.
  • Ñö öŕþĥàñéđ ţŕàñšļàţîöñš ŵĥéñ ýöü ŕéƒàçţöŕ. Àñçéšţöŕš àŕé đéļîƃéŕàţéļý ñöţ þàŕţ öƒ ţĥé ķéý: ŵŕàþ à <p> îñ à ñéŵ <div>, ḿöṽé îţ îñţö à <Card>, ŕéšţŕüçţüŕé ţĥé þàĝé àŕöüñđ îţ; ţĥé ķéý îš üñçĥàñĝéđ àñđ ţĥé ţŕàñšļàţîöñš ƒöļļöŵ. Ķéýš çĥàñĝé ŵĥéñ ţĥé ŵöŕđš çĥàñĝé, ŵĥîçĥ îš éẋàçţļý ŵĥéñ à ţŕàñšļàţöŕ šĥöüļđ ļööķ àĝàîñ.
  • Ñö ţŕàñšļàţîöñ-ƒîļé éđîţš ƒŕöḿ đéṽéļöþéŕš. Đéṽéļöþéŕš ŵŕîţé ĴŠẊ. Ţŕàñšļàţöŕš ŵŕîţé ţŕàñšļàţîöñš. Ţĥé .kbf.json àŕçĥîṽé îš ţĥé çöñţŕàçţ ƃéţŵééñ ţĥéḿ.
  • Öñé éẋþļîçîţ ḿàŕķéŕ, t(), ƒöŕ šţŕîñĝš ţĥàţ ļéĝîţîḿàţéļý ļîṽé îñ ĴŠ đàţà (ƃüţţöñ-ļàƃéļ àŕŕàýš, éŕŕöŕ ḿéššàĝéš ŕéţüŕñéđ ƒŕöḿ ŕéđüçéŕš, ŕ郚). Ţĥàţ'š îţ.

Ŵĥàţ ýöü ĝéţ îñ ţĥé ƃöẋ

  • Àüţöḿàţîç ĴŠẊ éẋţŕàçţîöñ ŵîţĥ Ŵ3Ç ĤŢḾĻ5 ţŕàñšļàţàƃîļîţý ŕüļéš: ĥéàđîñĝš, þàŕàĝŕàþĥš, ƃüţţöñš, ļàƃéļš, öþţîöñš, <span>, <strong>, <em>, ļîñķš, ÀŔÎÀ-ƃàçķéđ àţţŕîƃüţéš.
  • Šḿàŕţ đéƒàüļţš ƒöŕ îđîöḿàţîç Ŕéàçţ: <div>Label</div>, <section>...</section>, àñđ üñḿàþþéđ çöḿþöñéñţš ļîķé <TabsTrigger>General</TabsTrigger> àüţö-éẋţŕàçţ ŵîţĥ à ŵàŕñîñĝ, ñöţ à šîļéñţ đŕöþ.
  • Ţŕàñšļàţàƃļé þŕöþš: ţĥé ĤŢḾĻ+ÀŔÎÀ šéţ (alt, title, placeholder, aria-label, …) öñ àñý éļéḿéñţ, þļüš Ŕéàçţ'š þŕöþ-ñàḿé çöñṽéñţîöñš (subtitle, description, label, helpText, …) öñ ýöüŕ öŵñ çöḿþöñéñţš. <PageHeader title="Content Memory" /> ĵüšţ ŵöŕķš.
  • <Plural> / <Select> àüţĥöŕîñĝ çöḿþöñéñţš ŵîţĥ ÇĻĐŔ-àŵàŕé ŕüñţîḿé ŕéšöļüţîöñ ṽîà Intl.PluralRules, àñđ ÎÇÜ ñüḿƃéŕ/đàţé/ţîḿé ƒöŕḿàţţîñĝ ţĥŕöüĝĥ Intl, šö à ţŕàñšļàţöŕ çàñ ŵŕîţé {n, number} öŕ {d, date, long} îñţö à ţàŕĝéţ ŵîţĥöüţ à çöđé çĥàñĝé.
  • t() éšçàþé ĥàţçĥ ƒöŕ ţĥé šḿàļļ šéţ öƒ šţŕîñĝš ţĥàţ ĝéñüîñéļý ƃéļöñĝ îñ đàţà.
  • Ţŵö ƃüîļđ ḿöđéš: îñļîñé (žéŕö ŕüñţîḿé, ƃüîļđš þéŕ ļöçàļé) àñđ ŕüñţîḿé (šîñĝļé ƃüñđļé, đîçţ ļöàđéđ ÖŢÀ).
  • Îñ-çöñţéẋţ ŕéṽîéŵ öñ ţĥé ŕüññîñĝ àþþ: ÀĻŢ+çļîçķ àñý šţŕîñĝ ţö šéé îţš šöüŕçé, éđîţ îţš ţŕàñšļàţîöñ, àñđ ŵŕîţé îţ šţŕàîĝĥţ ƃàçķ ţö ţĥé .kbf.json; ţéŕḿš àñđ çĥéçķ ƒîñđîñĝš þàîñţ öñţö ţĥé ļîṽé ţéẋţ.
  • À þŕöþéŕ éẋçĥàñĝé ƒöŕḿàţ, KBF (šéé Ç-01), çàŕŕýîñĝ šţŕüçţüŕàļ çöñţéẋţ, þļàçéĥöļđéŕš, þļüŕàļ ƒöŕḿš, àñđ àññöţàţîöñ öṽéŕļàýš ŕàţĥéŕ ţĥàñ à ƒļàţ ķéý-ṽàļüé ĴŠÖÑ.
  • Ƒüļļ îñţéĝŕàţîöñ ŵîţĥ kapi ƒöŕ þšéüđö-ţŕàñšļàţîöñ, ÀÎ ţŕàñšļàţîöñ, çĥéçķš, çöñţéñţ-ḿéḿöŕý ļéṽéŕàĝé, àñđ ţéŕḿîñöļöĝý. Ţĥé šàḿé ţööļçĥàîñ ţĥàţ ĥàñđļéš ẊĻÎƑƑ, ĴŠÖÑ, Ḿàŕķđöŵñ, ĤŢḾĻ, àñđ éṽéŕý öţĥéŕ ƒöŕḿàţ kapi šüþþöŕţš.

Ŵĥéñ neokapi-î18ñ îšñ'ţ ţĥé ŕîĝĥţ ƒîţ

  • Šéŕṽéŕ-ŕéñđéŕéđ ĤŢḾĻ þîþéļîñéš ŵîţĥöüţ à Ŕéàçţ ƃüîļđ šţéþ. ΃ ýöü'ŕé öüţþüţţîñĝ ŕàŵ ĤŢḾĻ ƒŕöḿ à ñöñ-Ŕéàçţ ƒŕàḿéŵöŕķ, üšé kapi'š ĤŢḾĻ / ẊĻÎƑƑ ƒîļţéŕš đîŕéçţļý îñšţéàđ.
  • Ļàŕĝé šţŕîñĝ çàţàļöĝš ŵîţĥ ĥéàṽý þŕöĝŕàḿḿàţîç çöḿþöšîţîöñ. ΃ 80% öƒ ýöüŕ šţŕîñĝš àŕé àššéḿƃļéđ ƒŕöḿ þŕöĝŕàḿḿàţîç ţéḿþļàţéš (t("error.code." + code)), ţĥé šöüŕçé-ţéẋţ-àš-ķéý ḿöđéļ ƒîĝĥţš ýöü. neokapi-î18ñ îš ĥàþþîéšţ ŵĥéñ šţŕîñĝš àŕé ṽîšîƃļé îñ ţĥé šöüŕçé.
  • Ñééđ ƒöŕ ḿüļţî-ṽéñđöŕ ŢḾŠ ŕöüñđ-ţŕîþþîñĝ ŵîţĥ þŕé-éẋîšţîñĝ ţŕàñšļàţîöñ ķéýš. ΃ ýöüŕ ŵöŕķƒļöŵ àļŕéàđý đéþéñđš öñ šþéçîƒîç ţŕàñšļàţîöñ ķéýš îñĥéŕîţéđ ƒŕöḿ àñöţĥéŕ šýšţéḿ, neokapi-î18ñ'š ĥàšĥ ḿöđéļ ŵöüļđ ŕéǫüîŕé à ḿîĝŕàţîöñ.

Ƒöŕ éṽéŕýţĥîñĝ éļšé (þŕöđüçţ ÜÎ, ḿàŕķéţîñĝ šîţéš, îñţéŕñàļ đàšĥƃöàŕđš, éẋţéñšîöñ þàĝéš, éḿƃéđđéđ àþþš), neokapi-î18ñ ƒîţš ŵîţĥöüţ àñý þéŕ-šţŕîñĝ àññöţàţîöñ.

Ñéẋţ šţéþš

Àļŕéàđý üšîñĝ àñöţĥéŕ Ŕéàçţ î18ñ ļîƃŕàŕý? Šéé Àļţéŕñàţîṽéš ƒöŕ ĥöŵ neokapi-î18ñ çöḿþàŕéš.