MessageFormatter 类

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

介绍

MessageFormatter 是一个具体的类,它使用户能够生成连接的、与语言无关的消息。此类中提供的 method 用于构建最终用户看到的所有消息。

MessageFormatter 类从程序提供的各个片段(如文本片段、数字和日期)组装消息。由于 MessageFormatter 类,程序不需要知道片段的顺序。该类使用片段的格式规范将它们组装成包含在一个资源包中的单个字符串中的消息。例如,MessageFormatter 使您能够以仍然允许在翻译中灵活的方式打印短语“已完成打印 x 出 y 个文件……”。

以前,最终用户消息被创建为句子并作为字符串处理。此过程为本地化人员带来了问题,因为句子结构、词序、数字格式等等在不同语言之间差别很大。创建消息的与语言无关的方式使消息的每个部分保持分离,并为数据提供密钥。使用这些密钥,MessageFormatter 类可以连接消息的各个部分,对其进行本地化,并向最终用户显示一个格式良好的字符串。

MessageFormatter 获取一组对象,对其进行格式化,然后将格式化的字符串插入模式的适当位置。选择格式可以与 MessageFormatter 结合使用来处理复数、匹配数字以及从项目数组中选择。通常,消息格式将来自资源,参数将在运行时动态设置。

类概要

class MessageFormatter {
/* 方法 */
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
}

目录

添加注释

用户贡献注释 1 个注释

来自 dot php dot net at NOSPAM dot brainbox dot cz
9 年前
MessageFormatter 在 PHP < 5.5 中不适用于 DateTime 实例作为参数。实例将被转换为值为 0 的时间戳(例如 1970-01-01),并将引发以下通知:“无法将类 DateTime 的对象转换为 int”。您必须在这些旧版本的 PHP 中手动将实例转换为时间戳。

<?php
$datetime
= new DateTime();
if (
PHP_VERSION_ID < 50500) { // PHP < 5.5 需要转换为时间戳
MessageFormatter::formatMessage('en_US', 'Today is {0, date, full}.', array($datetime->getTimestamp()));
} else {
// 当前代码
MessageFormatter::formatMessage('en_US', 'Today is {0, date, full}.', array($datetime));
}
?>
To Top