Utility FunctionsFormatting

formatMessage

Referencia de API de la función independiente formatMessage

Descripción general

El método formatMessage da formato a mensajes con sustitución de variables y formateo según la locale. Basado en la biblioteca intl-messageformat de Format.JS, es compatible con patrones de ICU message format.

Este método es esencial para la interpolación de variables y la pluralización. También admite el formateo de números y de fechas, entre otras funciones.

import { formatMessage } from 'generaltranslation';

const formatted = formatMessage('Hola {name}, tienes {count} mensajes', {
  locales: ['en'],
  variables: { name: 'Alice', count: 5 }
});
// Devuelve: "Hola Alice, tienes 5 mensajes"

Referencias

Parámetros

Prop

Type

Objeto options

PropiedadTipoOpcionalPredeterminadoDescripción
localesstring | string[]['en']locale(s) que se usarán para el formateo
variablesFormatVariables{}Objeto que contiene variables para la interpolación

Devuelve

string - El mensaje formateado con variables sustituidas y el formato específico de la locale aplicado.


Comportamiento

Manejo de locales

  • Usa el parámetro locales proporcionado para el formateo
  • Recurre a ['en'] si no se especifican locales
  • Admite cadenas de contenido de respaldo predeterminado de locales con arreglos

Procesamiento de variables

  • Sustitución simple: {variable} → se reemplaza por el valor
  • ICU message format: Compatibilidad total con plurales, select y formateo
  • Variables faltantes: Se dejan sin cambios en la salida

Compatibilidad con el formato de mensajes

Las mismas funciones de ICU message format que el método de la clase GT:

  • Formateo de números: {price, number, currency}
  • Formateo de fechas: {date, date, short}
  • Pluralización: {count, plural, ...}
  • Selección: {gender, select, ...}

Ejemplos

Uso básico

import { formatMessage } from 'generaltranslation';

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

Sin instancia de GT

// Función de utilidad para formatear sin instanciar una clase
function quickFormat(template: string, variables: any, locale = 'en') {
  return formatMessage(template, {
    locales: [locale],
    variables
  });
}

const notification = quickFormat(
  'Tienes {count, plural, =0 {ningún mensaje} =1 {un mensaje} other {# mensajes}}',
  { count: 3 },
  'en'
);
console.log(notification); // "Tienes 3 mensajes"

Formateo de moneda y números

// Formato para la locale alemana
const germanPrice = formatMessage('Precio: {price, number, currency}', {
  locales: ['de'],
  variables: { price: 1234.56 }
});
console.log(germanPrice); // "Precio: 1.234,56 €"

// Formato de porcentaje
const progress = formatMessage('Progreso: {percent, number, percent}', {
  locales: ['en'],
  variables: { percent: 0.85 }
});
console.log(progress); // "Progreso: 85%"

Biblioteca de plantillas

import { formatMessage } from 'generaltranslation';

class MessageTemplates {
  private locale: string;
  
  constructor(locale: string = 'en') {
    this.locale = locale;
  }
  
  welcome(name: string) {
    return formatMessage('¡Bienvenido de nuevo, {name}!', {
      locales: [this.locale],
      variables: { name }
    });
  }
  
  itemCount(count: number) {
    return formatMessage(
      '{count, plural, =0 {Ningún elemento} =1 {Un elemento} other {# elementos}}',
      {
        locales: [this.locale],
        variables: { count }
      }
    );
  }
}

const templates = new MessageTemplates('fr');
console.log(templates.welcome('Marie')); // "¡Bienvenido de nuevo, Marie!" (en francés)
console.log(templates.itemCount(5)); // "5 elementos"

Notas

  • Requiere especificar explícitamente el locale en options
  • Admite las mismas capacidades de ICU message format que el método de la clase GT
  • Devuelve una cadena vacía si la plantilla de entrada está vacía
  • Las variables se procesan antes de las reglas de formato de ICU

Próximos pasos

¿Qué te ha parecido esta guía?

formatMessage