ts-intl
Capitoli:Formattatori Web Intl

Formattatori Web Intl

La creazione frequente di istanze di Intl.NumberFormat o Intl.DateTimeFormat comporta un overhead di prestazioni non necessario. ts-intl incapsula le API standard Web Intl e include un meccanismo integrato di memorizzazione nella cache delle istanze.

Ottenere istanze del formattatore

Metodo 1: Ottenere getFormatter tramite createI18n (Consigliato)

Questo approccio eredita direttamente le regole di formattazione predefinite, il fuso orario e la gestione degli errori dalle impostazioni globali:

import { createI18n } from "@aaakul/ts-intl";

export const { getTranslations, getFormatter } = createI18n({
  defaultLanguage: "it-IT",
  formats: {
    number: {
      eur: { style: "currency", currency: "EUR" },
      compact: { notation: "compact" },
    },
    dateTime: {
      short: { dateStyle: "short" },
    },
  },
  messages: {
    "it-IT": {},
  },
});

const formatter = getFormatter("it-IT");

Metodo 2: Chiamata indipendente con createFormatter(options)

Ideale per componenti autonomi o moduli di utilità che non dipendono da un’istanza i18n completa:

import { createFormatter } from "@aaakul/ts-intl";

const formatter = createFormatter({
  locale: "it-IT",
  formats: {
    number: { eur: { style: "currency", currency: "EUR" } },
  },
});

Funzionalità principali di formattazione

Formattazione di numeri e valute

formatter.number(1234567.89);
// "1.234.567,89"

formatter.number(2500, "eur");
// "2.500,00 €"

formatter.number(1500000, "compact");
// "1,5 Mln"

Data e ora

formatter.dateTime(new Date(), { dateStyle: "long" });
// "18 settembre 2026"

formatter.dateTimeRange(new Date("2026-09-01"), new Date("2026-09-05"));
// "1/9/2026 – 5/9/2026"

Calcolo del tempo relativo

Abbina automaticamente le unità di tempo in base alla differenza temporale:

const twoHoursAgo = new Date(Date.now() - 2 * 60 * 60 * 1000);
formatter.relativeTime(twoHoursAgo);
// "2 ore fa"

Liste e nomi visualizzati localizzati

formatter.list(["TypeScript", "Astro", "UnoCSS"]);
// "TypeScript, Astro e UnoCSS"

formatter.displayName("ja-JP", { type: "language" });
// "giapponese (Giappone)"

formatter.displayName("ja", { type: "language" });
// "giapponese"