Pag-format ng mensahe

Gumagamit ang 18ways ng waysParser bilang default. Ang parser na iyon ang nagbibigay-daan para manatiling madaling basahin ang source copy habang hinahawakan pa rin ang mga variable at locale-aware na pag-format.

Mga variable

Gumamit ng mga brace para sa mga variable. Sa <T>, puwede mong panatilihing inline ang value sa tabi ng mensahe.

ts
const label = await engine.t('Welcome back, {name}', {
  vars: { name: 'Ada' },
});

Pagpaparami

Gumamit ng mga plural block na estilo ICU kapag talagang nag-iiba ang anyo ng pangungusap.

ts
const summary = await engine.t(
  '{count, plural, =0{No messages} =1{One message} other{{count} messages}}',
  {
    vars: { count: 3 },
  }
);

Mga petsa at pera

Kung magpapasa ka ng totoong Date o ng object na parang pera na may amount at currency, awtomatikong iho-format ito ng 18ways kahit sa simpleng placeholder lang na tulad ng {publishedAt} o {renewalTotal}.

Gamitin lang ang explicit formatter kapag gusto mong kontrolin ang output, gaya ng dateStyle:long o ng isang custom na money divisor.

ts
const publishedAt = new Date('2026-03-14T09:00:00Z');
const renewalTotal = {
  amount: 1900,
  currency: 'USD',
};
 
const updatedLabel = await engine.t('Last updated {publishedAt}', {
  vars: { publishedAt },
});
 
const totalLabel = await engine.t('Renewal total {renewalTotal}', {
  vars: { renewalTotal },
});
 
const detailedDate = await engine.t('Detailed date: {publishedAt, date, dateStyle:long}', {
  vars: { publishedAt },
});

Bilang default, itinuturing ang mga halaga ng pera bilang mga minor unit. Kung mayroon ka nang mga major unit, gamitin ang hayagang money formatter na may divisor: 1.

Pumili ng mga bloke

Gamitin ang select kapag nakadepende ang copy sa isang maliit na hanay ng magkakahiwalay na values.

ts
const banner = await engine.t(
  '{isSignedIn, select, true{Welcome back, {name}} false{Sign in to continue} other{Sign in to continue}}',
  {
    vars: {
      isSignedIn: true,
      name: 'Ada',
    },
  }
);

Komposisyon ng mga bahagi

@18ways/core returns strings. If you need rich text, keep the sentence whole and handle markup in your own renderer.

ts
const cta = await engine.t('Click here to see more');

If your app needs automatic JSX composition, move up to @18ways/react or @18ways/next.

Praktikal na panuntunan

Kung ang pangungusap ay maisusulat bilang isang kumpletong parirala na may ilang variable, panatilihin ito sa iisang mensahe. Mas napapabuti nito nang husto ang kalidad ng salin kaysa sa pagdugtung-dugtungin ang mga piraso sa code.

Changing language
Pag-format ng Mensahe