ConFoo 2025

La classe MessageFormatter

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

Introduction

MessageFormatter est une classe concrète qui permet de produire des messages concaténés, et indépendants de la langue. La méthode fournit dans cette classe sont utilisées pour construire des messages qui sont destinés aux utilisateurs finaux.

La classe MessageFormatter assemble les messages à partir de différents fragments (textes, nombres et dates), fournis par le programme. Grace à la classe MessageFormatter, le programme n'a pas besoin de connaître l'ordre des fragments. La classe utilise des spécifications de formatage pour assembler les fragments en un seul message. Par exemple, MessageFormatter vous permet d'afficher la phrase "Fini d'imprimer x fichier sur y..." d'une manière qui reste souple pour la traduction.

Avant, un message était créé sous forme de phrase, et géré comme une chaîne. Cette procédure créait des problèmes pour les traductions, car la structure de la phrase, l'ordre des mots, le format des nombres, etc. était très différents d'une langue à l'autre. L'approche de création des messages, indépendante de la langue, permet de séparer le message et les variables. Avec ces variables, MessageFormatter peut concaténer les différentes parties du message, les formater aux conventions correctes, et fournir un message bien formé.

MessageFormatter prend une série d'objets, formate les textes, et les insert dans les chaînes formatées dans les emplacements corrects. Un grand choix de formats peut être utilisé en conjonction avec MessageFormatter pour gérer le pluriel, les nombres, etc. Typiquement, le message est fourni par une ressource, et les arguments sont préparés dynamiquement.

Synopsis de la classe

class MessageFormatter {
/* Méthodes */
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
}

Sommaire

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