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

Þļüŕàļš àñđ šéļéçţ

Çöüñţ-àŵàŕé àñđ çĥöîçé-ƃàšéđ ţéẋţ, àüţĥöŕéđ îñ Ŕéàçţ ŵîţĥ þéŕ-ƒöŕḿ çĥîļđŕéñ. Ñö ŕàŵ ÎÇÜ šţŕîñĝš îñ ýöüŕ šöüŕçé.

Þļüŕàļš: ţĥé àüţĥöŕîñĝ ƒöŕḿ

import { Plural, Zero, One, Two, Few, Many, Other } from "@neokapi/i18n-react/runtime";

<p>
<Plural count={n}>
<Zero>No messages</Zero>
<One>1 message</One>
<Other>{n} messages</Other>
</Plural>
</p>;

Àţ ŕéñđéŕ ţîḿé, <Plural> çöñšüļţš Intl.PluralRules ƒöŕ ţĥé àçţîṽé ļöçàļé àñđ þîçķš ţĥé ḿàţçĥîñĝ ƒöŕḿ. Ƒöŕ Éñĝļîšĥ n = 1 ŕéšöļṽéš ţö <One>, éṽéŕýţĥîñĝ éļšé ţö <Other>. Ƒöŕ Àŕàƃîç, <Zero>, <One>, <Two>, <Few>, <Many>, <Other> àļļ ĥàṽé đîšţîñçţ ŕüļéš.

Šéļéçţ: çĥöîçé-ƃàšéđ ţéẋţ

import { Select, Case, Other } from "@neokapi/i18n-react/runtime";

<p>
<Select value={role}>
<Case when="admin">Admin access</Case>
<Case when="editor">Editor access</Case>
<Case when="viewer">Viewer access</Case>
<Other>No access</Other>
</Select>
</p>;

<Select> þîçķš ţĥé <Case> ŵĥöšé when þŕöþ éǫüàļš ţĥé šöüŕçé ṽàļüé, öŕ ƒàļļš ƃàçķ ţö <Other>.

Ŵĥý çĥîļđŕéñ, ñöţ þŕöþš

Ţŕàđîţîöñàļ î18ñ ļîƃŕàŕîéš éẋþŕéšš þļüŕàļš àš à šîñĝļé ÎÇÜ ḿéššàĝé:

{count, plural, zero {No messages} one {1 message} other {# messages}}

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

  • Šöüŕçé ŕéàđàƃîļîţý: ţĥé Éñĝļîšĥ ƒöŕḿš ļööķ ļîķé Éñĝļîšĥ îñ šöüŕçé, ţŕàñšļàţöŕš šéé Éñĝļîšĥ îñ ţĥé éẋţŕàçţ.
  • Îñļîñé éļéḿéñţš þéŕ ƒöŕḿ: ýöü çàñ ŵŕîţé <Other><strong>{n}</strong> items</Other> ŵîţĥ ţĥé šţŕöñĝ ţàĝ þŕéšéŕṽéđ àš à þöšîţîöñ ţöķéñ. ÎÇÜ đöéšñ'ţ ḿöđéļ ţĥàţ ñàţüŕàļļý.
  • Þļàçéĥöļđéŕš þéŕ ƒöŕḿ: {n} îš àñ éẋþŕéššîöñ, ĥàñđļéđ ƃý ţĥé šàḿé þļàçéĥöļđéŕ ḿàçĥîñéŕý àš àñý ĴŠẊ ţéẋţ.

Üñđéŕ ţĥé ĥööđ ţĥé éẋţŕàçţöŕ éḿîţš ţĥé çàñöñîçàļ ÎÇÜ ţéḿþļàţé ţĥàţ ţŕàñšļàţöŕš ķñöŵ. Šöüŕçé àüţĥöŕš ŵöŕķ îñ Ŕéàçţ; ţŕàñšļàţöŕš ŵöŕķ îñ ţĥéîŕ ÇÀŢ ţööļ àĝàîñšţ ÎÇÜ. Ƃöţĥ ṽîéŵš àŕé çöŕŕéçţ.

Ḿöṽé ţĥé çöüñţ àñđ çĥàñĝé ţĥé ļöçàļé ţö šéé ŵĥîçĥ ƒöŕḿ Intl.PluralRules ŕéšöļṽéš (ţĥé šàḿé ļööķüþ <Plural> đöéš àţ ŕéñđéŕ ţîḿé) ñéẋţ ţö ţĥé ÎÇÜ ţéḿþļàţé ţĥé éẋţŕàçţöŕ éḿîţš:

Ŕéñđéŕéđ — ţĥé šöüŕçé àüţĥöŕ'š Ŕéàçţ
1 message
Intl.PluralRules("en") šéļéçţš one<One>
Éḿîţţéđ ÎÇÜ — ţĥé ţŕàñšļàţöŕ'š ÇÀŢ ţööļ
{count, plural, one {1 message} other {# messages}}
English (en) üšéš one, other.

Ḿîẋîñĝ îñļîñé éļéḿéñţš îñšîđé à þļüŕàļ ƒöŕḿ

<p>
<Plural count={items.length}>
<Zero>Your cart is empty</Zero>
<One>
<strong>1</strong> item in your cart
</One>
<Other>
<strong>{items.length}</strong> items in your cart
</Other>
</Plural>
</p>

Éàçĥ ƒöŕḿ îš éẋţŕàçţéđ àš à ţýþéđ ŕüñ šéǫüéñçé: <strong> ƃéçöḿéš à þöšîţîöñ ţöķéñ ({=m0}), {items.length} ƃéçöḿéš à þļàçéĥöļđéŕ ({items.length} öŕ đéđüþéđ ļîķé {itemsLength}). Ţĥé ţŕàñšļàţöŕ çàñ ŕéöŕđéŕ ţĥé ƃöļđ éļéḿéñţ ƒŕééļý ŵîţĥîñ éàçĥ ƒöŕḿ.

Ŵĥîçĥ ƒöŕḿš ţö đéçļàŕé

Üšé ţĥé šüþéŕšéţ öƒ ƒöŕḿš ýöüŕ þŕöđüçţ àçţüàļļý šĥîþš. Ļàñĝüàĝéš ýöü đöñ'ţ ţàŕĝéţ ţöđàý çàñ šţîļļ ƃé àđđéđ ļàţéŕ ŵîţĥöüţ šöüŕçé çĥàñĝéš: àđđ ţĥé ţŕàñšļàţîöñ îñ ţĥé ÇÀŢ ţööļ, ţĥé ŕüñţîḿé þîçķš ţĥé ŕîĝĥţ ƒöŕḿ.

ĻàñĝüàĝéƑöŕḿš üšéđ
Éñĝļîšĥone, other
Ƒŕéñçĥone, other
Ŕüššîàñone, few, many, other
Àŕàƃîçzero, one, two, few, many, other
Ĵàþàñéšé, Ķöŕéàñ, Çĥîñéšéother öñļý

Šöüŕçé àüţĥöŕš üšüàļļý öñļý ñééđ one + other, þļüš öþţîöñàļ zero ƒöŕ ÜẊ þöļîšĥ ("Ñö ḿéššàĝéš" ṽš. "0 ḿéššàĝéš"). Ţŕàñšļàţöŕš ƒîļļ ţĥé ŕéšţ þéŕ ļöçàļé.

<Plural> ŵîţĥ à šöüŕçé þîṽöţ

Šöḿéţîḿéš ţĥé çöüñţ ṽàŕîàƃļé'š ñàḿé đöéšñ'ţ ḿàţçĥ ŵĥàţ ýöü ŵàñţ ţŕàñšļàţöŕš ţö ŕéƒéŕéñçé:

<Plural count={cart.items.length}>
<One>1 item</One>
<Other>{cart.items.length} items</Other>
</Plural>

Ţĥé þîṽöţ ṽàŕîàƃļé ƃéçöḿéš à þļàçéĥöļđéŕ ñàḿéđ àƒţéŕ ţĥé éẋþŕéššîöñ (items.lengthlength). ΃ ţĥàţ'š çöñƒüšîñĝ ƒöŕ ţŕàñšļàţöŕš, ŕéñàḿé ṽîà à ļöçàļ:

const n = cart.items.length;
<Plural count={n}>
<One>1 item</One>
<Other>{n} items</Other>
</Plural>;

Ţŕàñšļàţöŕ-àüţĥöŕéđ þļüŕàļš

Ñöţ éṽéŕý ļàñĝüàĝé ñééđš þļüŕàļš ƒöŕ éṽéŕý šţŕîñĝ. Îţàļîàñ üšéš ţĥé šàḿé ƒöŕḿ ƒöŕ 1 ṽš ḿàñý îñ šöḿé çöñšţŕüçţš, Ĵàþàñéšé ĥàš öñļý öñé ƒöŕḿ, ŵĥîļé Ĝéŕḿàñ ḿîĝĥţ ŵàñţ à çöüñţ ƒöŕḿ ŵĥéŕé Éñĝļîšĥ đîđñ'ţ.

neokapi-î18ñ'š éđîţöŕ ÜÎ (<PluralTargetEditor>, šĥîþþéđ ŵîţĥ @neokapi/ui-primitives) ļéţš ţŕàñšļàţöŕš üþĝŕàđé à ƒļàţ ţàŕĝéţ îñţö à þéŕ-ƒöŕḿ ţàŕĝéţ ŵîţĥöüţ àñý šöüŕçé çĥàñĝé. À ţŕàñšļàţöŕ'š Ĝéŕḿàñ ţàŕĝéţ ƒöŕ <p>You have {n} messages</p> çàñ ƃéçöḿé:

zero: Keine Nachrichten
one: 1 Nachricht
other: Sie haben {n} Nachrichten

ŵĥîļé ţĥé Éñĝļîšĥ šöüŕçé šţàýš ƒļàţ. Ţĥé ţàŕĝéţ-šîđé đàţà ḿöđéļ îš ĥàñđļéđ ƃý @neokapi/kapi-formatupgradeTargetToPlural / downgradePluralTarget ĥéļþéŕš. Šéé Ç-01 ƒöŕ ţĥé öñ-đîšķ šĥàþé.

Ŕüñţîḿé ŕéšöļüţîöñ

<Plural> / <Select> àŕé àüţĥöŕîñĝ çöḿþöñéñţš: àţ ŕéñđéŕ ţîḿé à ļöçàļé šŵîţçĥ ŕé-éṽàļüàţéš ţĥé ƒöŕḿ ṽîà Intl.PluralRules / ţĥé çàšé ḿàþ ŕàţĥéŕ ţĥàñ ŕéḿöüñţîñĝ ţĥéḿ. Intl.PluralRules šĥîþš îñ éṽéŕý ḿöđéŕñ ƃŕöŵšéŕ àñđ Ñöđé, šö ñö þöļýƒîļļ.

Ţĥé þîṽöţ (ţĥé çöüñţ öŕ ţĥé çàšé ṽàļüé) îš à ŕüñţîḿé ṽàļüé, šö ţĥé ƒöŕḿ çàññöţ ƃé çĥöšéñ àţ ƃüîļđ ţîḿé. Þļüŕàļ àñđ šéļéçţ ƃļöçķš ţĥéŕéƒöŕé ķééþ à ŕüñţîḿé çàļļ îñ ƃöţĥ ḿöđéš: îñļîñé ḿöđé ƃàķéš ţĥé ţŕàñšļàţéđ ÎÇÜ ţéḿþļàţé îñ àš ţĥé çàļļ'š ƒàļļƃàçķ, šö ţĥé đîçţîöñàŕý ƒéţçĥ đîšàþþéàŕš, ƃüţ ţĥé ~2 ķƂ ÎÇÜ ŕéšöļṽéŕ šţàýš. Ţĥîš îš ţĥé öñé đöçüḿéñţéđ éẋçéþţîöñ ţö îñļîñé ḿöđé'š žéŕö-ŕüñţîḿé ŕüļé (šéé Ŕüñţîḿé ṽš. îñļîñé ḿöđéš).

Îñšîđé à þļüŕàļ ƃŕàñçĥ, # îš ŕéþļàçéđ ƃý ţĥé çöüñţ ƒöŕḿàţţéđ ƒöŕ ţĥé àçţîṽé ļöçàļé: 1.234 îñ de, 1,234 îñ en.

Ñéẋţ