PHP Conference Nagoya 2025

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 a los usuarios producir mensajes concatenados neutrales al lenguaje. Los métodos proporcionados por esta clase se utilizan para construir todos los mensajes que son vistos por usuarios finales.

La clase MessageFormatter ensambla mensajes desde varios fragmentos (tales como framentos de texto, 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 las especificaciones de formateo de los fragmentos para ensamblarlos en un mensaje que está contenido en una única cadena dentro de un paquete de recursos. Por ejemplo, MessageFormatter permite imprimir la frase "Finalizada la impresión de x de y ficheros..." de una manera que aún admite flexibilidad para traducciones.

Anteriormente, un mensaje de un usuario final era creado como una sentencia y tratado como una cadna. Este procedimiento creaba problemas para los regionalizadores ya que la estructura de la sentencia, el orden de las palabras, el formato de número, etc., son muy diferentes de un lenguaje a otro. La manera neutral de lenguaje para crear mensajes mantiene cada parte del mensaje separada y proporciona claves a la información. Al utilizar estas claves, la clase MessageFormatter puede concatenar las partes del mensaja, regionalizarlas, y mostrar al usuario final una cadena bien formada.

MessageFormatter toma un conjunto de objetos, les da formato e inserta las cadenas formateadas en un patrón en los lugares apropiados. Los formatos escogidos se pueden usar en conjunto con MessageFormatter para tratar prurales, comparar números, y seleccionarlos desde un array de elementos. Normalmente, el formato del mensaje se obtendrá desde recursos, y los argumentos se establecerán dinámicamente en tiempo de ejecución.

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 $args): string
public static formatMessage(string $locale, string $pattern, array $args): string
public getErrorCode(): int
public getLocale(): string
public getPattern(): string
public parse(string $value): array
public static parseMessage(string $locale, string $pattern, string $source): array
public setPattern(string $pattern): bool
}

Tabla de contenidos

add a note

User Contributed Notes 1 note

up
4
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