PHP Conference Japan 2024

A classe MessageFormatter

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

Introdução

MessageFormatter é uma classe concreta que permite aos usuários produzir mensagens concatenadas, neutras do ponto de vista da língua. Os métodos fornecido nesta classe são usados para construir todas as mensagens que são vistas pelos usuários finais.

A classe MessageFormatter monta mensagens a partir de vários fragmentos (como fragmentos de texto, números e datas) fornecidos pelo programa. Por causa da classe MessageFormatter, o programa não precisa saber a ordem dos fragmentos. A classe usa as especificações de formatação para os fragmentos para montá-los em uma mensagem que fica contida em uma única string dentro de um pacote de recurso. Por exemplo, MessageFormatter permite mostrar a frase "Concluída a impressão de x arquivos em um total de y..." de uma maneira que ainda permita flexibilidade na tradução.

Anterioremente, uma mensagem para o usuário final era criada como uma frase e manipulada como uma string. Este procedimento criava problemas para localizadores porque a estrutura da frase, ordem de palavras, formato de números e outros mais são muito diferentes de língua para língua. A maneira neutra de criar mensagens mantém cada parte da mensagem separada e fornece chaves para os dados. Usando estas chaves, a classe MessageFormatter pode concatenar as partes da mensagem, localizá-las, e monstrar uma string bem formada ao usuário final.

MessageFormatter toma um conjunto de objetos, formata-os, e depois insere as strings formatadas no modelo nos locais apropriados. Formatos de escolha podem ser usados em conjunto com MessageFormatter para manipular plurais, fazer correspondência de números, e fazer seleção a partir de um array de itens. Tipicamente, o formato da mensagem virá de recursos e os argumentos serão definidos dinamicamente em tempo de execução.

Resumo da classe

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
}

Índice

adicione uma nota

Notas Enviadas por Usuários (em inglês) 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