Utility FunctionsFormatting

formatMessage

Riferimento API per la funzione autonoma formatMessage

Panoramica

Il metodo formatMessage formatta i messaggi con sostituzione delle variabili e formattazione in base alla lingua/locale. Basato sulla libreria intl-messageformat di Format.JS, supporta i pattern del formato di messaggistica ICU.

Questo metodo è essenziale per l'interpolazione delle variabili e la gestione del plurale. Supporta inoltre la formattazione di numeri e date, tra le altre funzionalità.

import { formatMessage } from 'generaltranslation';

const formatted = formatMessage('Ciao {name}, hai {count} messaggi', {
  locales: ['en'],
  variables: { name: 'Alice', count: 5 }
});
// Restituisce: "Ciao Alice, hai 5 messaggi"

Riferimenti

Parametri

Prop

Type

Oggetto Options

ProprietàTipoOpzionalePredefinitoDescrizione
localesstring | string[]['en']Locale/i da utilizzare per la formattazione
variablesFormatVariables{}Oggetto che contiene le variabili per l'interpolazione

Restituisce

string - Il messaggio formattato con le variabili sostituite e la formattazione specifica della lingua/locale applicata.


Comportamento

Gestione delle localizzazioni

  • Usa il parametro locales fornito per la formattazione
  • Esegue il fallback a ['en'] se non sono specificate localizzazioni
  • Supporta catene di fallback delle localizzazioni tramite array

Elaborazione delle variabili

  • Sostituzione semplice: {variable} → sostituita con il valore
  • Formato ICU dei messaggi: supporto completo per plurali, selettori e formattazione
  • Variabili mancanti: lasciate invariate nell’output

Supporto al formato dei messaggi

Stesse funzionalità del formato di messaggi ICU del metodo di classe GT:

  • Formattazione dei numeri: {price, number, currency}
  • Formattazione delle date: {date, date, short}
  • Pluralizzazione: {count, plural, ...}
  • Selezione: {gender, select, ...}

Esempi

Utilizzo di base

import { formatMessage } from 'generaltranslation';

const greeting = formatMessage('Ciao {name}!', {
  locales: ['en'],
  variables: { name: 'World' }
});
console.log(greeting); // "Ciao mondo!"

Senza istanza di GT

// Funzione di utilità per la formattazione senza istanziazione della classe
function quickFormat(template: string, variables: any, locale = 'en') {
  return formatMessage(template, {
    locales: [locale],
    variables
  });
}

const notification = quickFormat(
  'Hai {count, plural, =0 {nessun messaggio} =1 {un messaggio} other {# messaggi}}',
  { count: 3 },
  'en'
);
console.log(notification); // "Hai 3 messaggi"

Formattazione di valute e numeri

// Formattazione per la locale tedesca
const germanPrice = formatMessage('Prezzo: {price, number, currency}', {
  locales: ['de'],
  variables: { price: 1234.56 }
});
console.log(germanPrice); // "Prezzo: 1.234,56 €"

// Formattazione delle percentuali
const progress = formatMessage('Avanzamento: {percent, number, percent}', {
  locales: ['en'],
  variables: { percent: 0.85 }
});
console.log(progress); // "Avanzamento: 85%"

Raccolta di template

import { formatMessage } from 'generaltranslation';

class MessageTemplates {
  private locale: string;
  
  constructor(locale: string = 'en') {
    this.locale = locale;
  }
  
  welcome(name: string) {
    return formatMessage('Bentornato, {name}!', {
      locales: [this.locale],
      variables: { name }
    });
  }
  
  itemCount(count: number) {
    return formatMessage(
      '{count, plural, =0 {Nessun elemento} =1 {Un elemento} other {# elementi}}',
      {
        locales: [this.locale],
        variables: { count }
      }
    );
  }
}

const templates = new MessageTemplates('fr');
console.log(templates.welcome('Marie')); // "Bentornato, Marie!" (in francese)
console.log(templates.itemCount(5)); // "5 elementi"

Note

  • Richiede l’indicazione esplicita della locale nelle opzioni
  • Supporta le stesse funzionalità del formato di messaggi ICU del metodo di classe di GT
  • Restituisce una stringa vuota se il template di input è vuoto
  • Le variabili vengono elaborate prima delle regole di formattazione ICU

Prossimi passaggi

Come valuti questa guida?

formatMessage