Класс MessageFormatter

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

Введение

MessageFormatter - это класс, позволяющий создавать склеиваемые, независимые от языка сообщения. Методы этого класса используются для создания всех сообщений, показываемых пользователю.

Класс MessageFormatter собирает сообщение из разных фрагментов (таких как текст, числа и даты), поставляемых программой. Данный класс позволяет программе не задумываться о том, в каком порядке эти фрагменты надо склеивать. Класс использует спецификации форматирования для сборки этих фрагментов в сообщение, хранящееся в виде одной строки в хранилище ресурсов. К примеру, MessageFormatter позволит напечатать фразу "Finished printing x out of y files..." таким образом, чтобы обеспечить гибкость перевода.

Ранее сообщение для конечного пользователя создавалось как законченная фраза и обрабатывалась как строка. Такая процедура приводила к проблемам локализации, поскольку структура фразы, порядок слов, формат чисел и прочее сильно отличались в разных языках. Нейтральная к языку процедура создания сообщений держит каждую часть сообщения отдельно и предоставляет ключи к данным. Используя эти ключи, класс MessageFormatter может склеивать части сообщения, преобразовывать их в соответствии с локалью и отображать в виде грамотного сообщения конечному пользователю.

MessageFormatter берет набор объектов, форматирует их и вставляет в шаблон в нужных местах. Совместно с MessageFormatter полезно использовать средства форматирования выбора (choice formatter) для обработки множественного/единственного числа, сравнения чисел и выбора из массива элементов. Обычно формат сообщения берётся из ресурсов, а аргументы передаются во время выполнения.

Обзор классов

class MessageFormatter {
/* Методы */
public __construct(string $locale, string $pattern)
public static create(string $locale, string $pattern): ?MessageFormatter
public static formatMessage(string $locale, string $pattern, array $values): string|false
public format(array $values): string|false
public getErrorCode(): int
public getLocale(): string
public static parseMessage(string $locale, string $pattern, string $message): array|false
public parse(string $string): array|false
public setPattern(string $pattern): bool
}

Содержание