La clase MessageFormatter

(PHP 5 >= 5.3.0, PHP 7, PHP 8, PECL intl >= 1.0.0)

Introducción

MessageFormatter es una clase concreta que permite producir mensajes concatenados, independientes del idioma. Las métodos proporcionadas en esta clase se utilizan para construir mensajes que están destinados a los usuarios finales.

La clase MessageFormatter ensambla los mensajes a partir de diferentes fragmentos (textos, números y fechas), proporcionados por el programa. Gracias a la clase MessageFormatter, el programa no necesita conocer el orden de los fragmentos. La clase utiliza especificaciones de formato para ensamblar los fragmentos en un solo mensaje. Por ejemplo, MessageFormatter permite mostrar la frase "Finalizado de imprimir x fichero sobre y..." de una manera que permanece flexible para la traducción.

Anteriormente, un mensaje se creaba en forma de frase, y se gestionaba como un string. Este procedimiento generaba problemas para las traducciones, ya que la estructura de la frase, el orden de las palabras, el formato de los números, etc. era muy diferente de un idioma a otro. El enfoque de creación de mensajes, independiente del idioma, permite separar el mensaje y las variables. Con estas variables, MessageFormatter puede concatenar las diferentes partes del mensaje, formatearlas según las convenciones correctas, y proporcionar un mensaje bien formado.

MessageFormatter toma una serie de objetos, formatea los textos, y los inserta en los strings formateados en los emplazamientos correctos. Una amplia variedad de formatos puede ser utilizada en conjunción con MessageFormatter para gestionar el plural, los números, etc. Típicamente, el mensaje es proporcionado por un recurso, y los argumentos son preparados dinámicamente.

Sinopsis de la Clase

class MessageFormatter {
/* Métodos */
public __construct(string $locale, string $pattern)
public static create(string $locale, string $pattern): ?MessageFormatter
public format(array $values): string|false
public static formatMessage(string $locale, string $pattern, array $values): string|false
public getErrorCode(): int
public getLocale(): string
public parse(string $string): array|false
public static parseMessage(string $locale, string $pattern, string $message): array|false
public setPattern(string $pattern): bool
}

Tabla de contenidos

add a note

User Contributed Notes 1 note

up
3
from dot php dot net at NOSPAM dot brainbox dot cz
10 years ago
MessageFormatter does not work with DateTime instances as parameters in PHP < 5.5. Instance will be converted to timestamp with value 0 (e.g. 1970-01-01) and following Notice will be raised: „Object of class DateTime could not be converted to int“. You have to manually convert the instance to timestamp in these old PHP versions.

<?php
$datetime
= new DateTime();
if (
PHP_VERSION_ID < 50500) { // PHP < 5.5 needs conversion to timestamp
MessageFormatter::formatMessage('en_US', 'Today is {0, date, full}.', array($datetime->getTimestamp()));
} else {
// current code
MessageFormatter::formatMessage('en_US', 'Today is {0, date, full}.', array($datetime));
}
?>
To Top