Sintaxis de Mensajes
Esta página fue traducida por PageTurner AI (beta). No está respaldada oficialmente por el proyecto. ¿Encontraste un error? Reportar problema →
Al traducir texto, necesitarás una forma para que tus traductores expresen las sutilezas de ortografía, gramática y conjugación propias de cada idioma. Utilizamos la sintaxis de mensajes ICU que también se emplea en Java y PHP.
La biblioteca intl-messageformat toma el mensaje y los datos de entrada para crear una cadena formateada adecuadamente. Esta funcionalidad está incluida en todas las integraciones que ofrecemos.
Las siguientes secciones describen la sintaxis de mensajes ICU y muestran cómo utilizar estas características en las bibliotecas de FormatJS:
Principios Básicos
La transformación más simple para un mensaje es una cadena literal.
Hello everyone
Todas las demás transformaciones se realizan mediante reemplazos llamados "argumentos". Estos se encierran entre llaves ({ y }) y hacen referencia a un valor en los datos de entrada.
Argumento Simple
Puedes usar un argumento {key} para insertar un valor en el mensaje. La clave se busca en los datos de entrada y la cadena se interpola con su valor.
Argumento Formateado
Los valores también pueden formatearse según su tipo. Para ello, se usa un argumento {key, type, format}.
Los elementos del argumento son:
-
key: indica dónde buscar los datos en la entrada -
type: opcional, define cómo interpretar el valor (ver más abajo) -
format: opcional, refina cómo mostrar ese tipo de dato
Tipo number
Este tipo se usa para formatear números de manera sensible al idioma. Entiende los siguientes valores para el elemento opcional format del argumento:
Internamente utiliza la API Intl.NumberFormat. Puedes definir valores personalizados para format, que se pasan al constructor de Intl.NumberFormat.
Incluir cómo se formateará el número proporciona contexto valioso a los traductores. También admitimos ICU Number Skeletons con la misma sintaxis:
Puedes leer más sobre esto aquí.
Para control preciso de decimales, usa los símbolos de precisión fraccionaria # y 0, que especifican cuántos decimales mostrar:
Nota que el símbolo # no muestra ceros finales, como se ve en este ejemplo:
Para mostrar ceros finales, usa el símbolo 0:
Para más detalles, consulta Precisión Fraccionaria.
Tipo date
Este tipo se utiliza para formatear fechas de manera sensible al idioma. Entiende los siguientes valores para el elemento opcional format del argumento:
-
short: formatea fechas de la manera más breve posible -
medium: incluye representación textual corta del mes -
long: incluye representación textual larga del mes -
full: muestra el máximo nivel de detalle
Internamente utiliza la API Intl.DateTimeFormat. Puedes definir valores personalizados para el elemento de formato, que se pasan al constructor de Intl.DateTimeFormat.
Tipo time
Este tipo se utiliza para formatear horas de manera sensible al idioma. Entiende los siguientes valores para el elemento opcional format del argumento:
-
shortse utiliza para formatear la hora mostrando horas y minutos -
mediumse utiliza para formatear la hora con horas, minutos y segundos -
longse utiliza para formatear la hora con horas, minutos, segundos y zona horaria -
fulles igual que long
Internamente utiliza la API Intl.DateTimeFormat. Puedes definir valores personalizados para el elemento de formato, que se pasan al constructor de Intl.DateTimeFormat.
Esqueletos DateTime admitidos
Similar al tipo number, también admitimos esqueletos ICU DateTime. ICU ofrece una amplia variedad de patrones para personalizar formatos de fecha y hora. Sin embargo, no todos están disponibles mediante la API Intl de ECMA402. Por lo tanto, solo admitimos los siguientes patrones:
| Symbol | Meaning | Notes |
|---|---|---|
| G | Era designator | |
| y | year | |
| M | month in year | |
| L | stand-alone month in year | |
| d | day in month | |
| E | day of week | |
| e | local day of week | e..eee is not supported |
| c | stand-alone local day of week | c..ccc is not supported |
| a | AM/PM marker | |
| h | Hour [1-12] | |
| H | Hour [0-23] | |
| K | Hour [0-11] | |
| k | Hour [1-24] | |
| m | Minute | |
| s | Second | |
| z | Time Zone |
Formato {select}
El formato {key, select, matches} se utiliza para elegir una salida haciendo coincidir un valor con múltiples opciones (similar a la sentencia switch en algunos lenguajes de programación). La clave se busca en los datos de entrada. El valor correspondiente se compara con uno de los elementos matches y se devuelve la salida asociada. El argumento key debe seguir la Sintaxis de Patrones Unicode. matches es una lista de elementos de coincidencia separados por espacios.
El formato de un elemento de coincidencia es match {output} (similar a un caso de una sentencia switch encontrada en algunos lenguajes de programación). match es un valor literal. Si coincide con el valor de key, se usará el output correspondiente.
output es en sí mismo un mensaje, por lo que puede ser una cadena literal o contener más argumentos anidados.
El elemento other es especial y se utiliza cuando ninguna otra opción coincide (similar al caso default en sentencias switch).
other es obligatorio según la implementación de icu4j. Lanzaremos un error si se usa select sin other.
Aquí hay un ejemplo de argumentos anidados:
Formato {plural}
El formato {key, plural, matches} elige una salida basada en reglas de pluralización de la configuración regional actual. Es muy similar al formato {select} anterior, excepto que el valor debe ser un número y se mapea a una categoría de plural.
La coincidencia es un valor literal que se empareja con una de estas categorías plurales. No todos los idiomas utilizan todas las categorías plurales.
-
zero: Esta categoría se usa en idiomas con reglas gramaticales específicas para cero elementos (ejemplos: árabe y letón). -
one: Para gramática especializada en un elemento singular. Muchos idiomas (excepto algunos asiáticos como chino/japonés) usan esta categoría. -
two: Para gramática especializada en dos elementos duales (ej: árabe, galés) -
few: Para cantidades pequeñas (paucal). En algunos idiomas cubre 2-4 elementos, en otros 3-10, con reglas complejas. -
many: Esta categoría se usa en idiomas con reglas gramaticales específicas para cantidades mayores (ejemplos: árabe, polaco y ruso). -
other: Esta categoría se usa cuando el valor no coincide con otras categorías plurales. Nota: se usa para "plural" en idiomas (como inglés) que tienen una dicotomía simple entre "singular" y "plural". -
=value: Se usa para coincidir con un valor específico, independientemente de las categorías plurales del idioma actual.
No uses =1 en lugar de one. one no siempre significa 1, sino que significa singular, lo que puede coincidir con más números además de 1 en ciertos idiomas.
Algunos idiomas consideran que todos los números que terminan en 1 (como 1, 11, 111) son singular.
other es obligatorio según la implementación de icu4j. Lanzaremos un error si se usa plural sin other.
En la output de la coincidencia, puedes usar el token especial # como marcador de posición para el valor numérico, y se formateará como si fuera {key, number}. Este es el estilo que preferimos utilizar.
Formato {selectordinal}
{key, selectordinal, matches} se utiliza para elegir una salida basada en las reglas de pluralización ordinal (1º, 2º, 3º, etc.) del idioma actual. Es muy similar al formato {plural} mencionado anteriormente, excepto que el valor se asigna a una categoría plural ordinal.
La coincidencia es un valor literal que se empareja con una de estas categorías plurales. No todos los idiomas utilizan todas las categorías plurales.
-
zero: Esta categoría se usa en idiomas con reglas gramaticales específicas para cero elementos (ejemplos: árabe y letón). -
one: Esta categoría se usa en idiomas con reglas gramaticales específicas para un elemento. Muchos idiomas, pero no todos, usan esta categoría (muchos idiomas asiáticos populares como chino y japonés no la utilizan). -
two: Esta categoría se usa en idiomas con reglas gramaticales específicas para dos elementos (ejemplos: árabe y galés). -
few: Esta categoría se usa en idiomas con reglas gramaticales específicas para cantidades pequeñas. En algunos idiomas se usa para 2-4 elementos, en otros para 3-10, y otros tienen reglas aún más complejas. -
many: Esta categoría se usa en idiomas con reglas gramaticales específicas para cantidades mayores (ejemplos: árabe, polaco y ruso). -
other: Esta categoría se usa cuando el valor no coincide con otras categorías plurales. Nota: se usa para "plural" en idiomas (como inglés) que tienen una dicotomía simple entre "singular" y "plural". -
=value: Se usa para coincidir con un valor específico, independientemente de las categorías plurales del idioma actual.
other es obligatorio según la implementación de icu4j. Lanzaremos un error si se usa selectordinal sin other.
En la output de la coincidencia, se puede usar el token especial # como marcador de posición para el valor numérico, y se formateará como si fuera {key, number}.
Formato de texto enriquecido
También admitimos formato de texto enriquecido incrustado en nuestros mensajes mediante etiquetas. Esto permite a los desarrolladores incluir tanto texto como sea necesario para evitar fragmentar oraciones. NOTA: Esto no es una etiqueta XML/HTML
Se espera que los sistemas que usen formato de texto enriquecido tengan métodos para manejar estos marcadores externamente. Las etiquetas formarán parte de la salida generada y pueden procesarse posteriormente con tus propias herramientas o usando la configuración defaultRichTextElements.
Citas / Escapado
El apóstrofo ASCII ' (U+0027) puede usarse para escapar caracteres de sintaxis en la porción de texto del mensaje, imitando el comportamiento de citas/escapado de ICU.
Dos apóstrofos ASCII consecutivos representan un apóstrofo ASCII, similar a cómo %% en printf representa un %. Sin embargo, recomendamos usar el apóstrofo rizado ’ (U+2019) para cadenas legibles por humanos y reservar el apóstrofo ASCII ' (U+0027) exclusivamente para la sintaxis de mensajes ICU.