formatMessage
Referencia de API de la función autónoma formatMessage
Descripción general
El método formatMessage da formato a mensajes con sustitución de variables y formato compatible con la configuración regional (locale).
Basado en la biblioteca intl-messageformat de Format.JS, admite patrones del 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 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 de options
| Propiedad | Tipo | Opcional | Predeterminado | Descripción |
|---|---|---|---|---|
locales | string | string[] | ✓ | ['en'] | locale(s) para usar en el formateo |
variables | FormatVariables | ✓ | {} | Objeto que contiene variables para la interpolación |
Devuelve
string - El mensaje con las variables sustituidas y el formato específico del locale aplicado.
Comportamiento
Manejo de locale
- Usa el parámetro
localesproporcionado para el formato - Recurre a
['en']si no se especifican locales - Admite cadenas de contenido de respaldo predeterminado de locale con arreglos
Procesamiento de variables
- Sustitución simple:
{variable}→ reemplazado con value - ICU message format: Compatibilidad total con plurales, selects y formato
- Variables faltantes: Se dejan sin cambios en la salida
Compatibilidad con el formato de mensajes
Las mismas funciones del ICU message format que el método de la GT class:
- 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: 'World' }
});
console.log(greeting); // "¡Hola World!"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"Formato de moneda y números
// Formato de locale alemán
const germanPrice = formatMessage('Preis: {price, number, currency}', {
locales: ['de'],
variables: { price: 1234.56 }
});
console.log(germanPrice); // "Preis: 1.234,56 €"
// Formato de porcentaje
const progress = formatMessage('Progress: {percent, number, percent}', {
locales: ['en'],
variables: { percent: 0.85 }
});
console.log(progress); // "Progress: 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 {Sin elementos} =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 éléments"Notas
- Requiere especificar explícitamente el locale en las options
- Admite las mismas funciones del ICU message format que el método de la GT class
- Devuelve una cadena vacía si la plantilla de entrada está vacía
- Las variables se procesan antes que las reglas de formateo del ICU
Próximos pasos
- Consulta la documentación de
Intl.MessageFormatpara más options - Usa la GT class
formatMessagepara formateo con estado - Formatea números con la función independiente
formatNum - Obtén más información sobre el tipo
FormatVariables
¿Qué te parece esta guía?