PHP Unconference Europe 2015

La clase MessageFormatter

(PHP 5 >= 5.3.0, 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

MessageFormatter {
/* Métodos */
public __construct ( string $locale , string $pattern )
public static MessageFormatter create ( string $locale , string $pattern )
public static string formatMessage ( string $locale , string $pattern , array $args )
public string format ( array $args )
public int getErrorCode ( void )
public string getErrorMessage ( void )
public string getLocale ( void )
public string getPattern ( void )
public static array parseMessage ( string $locale , string $pattern , string $source )
public array parse ( string $value )
public bool setPattern ( string $pattern )
}

Tabla de contenidos

add a note add a note

User Contributed Notes 1 note

up
0
from dot php dot net at NOSPAM dot brainbox dot cz
28 days 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