PHP Conference Japan 2024

MessageFormatter 类

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

简介

MessageFormatter 是一个具体类,允许用户生成连接的、与语言无关的消息。此类中提供的各种方法用于构建最终用户看到的所有消息。

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 条注释

3
from dot php dot net at NOSPAM dot brainbox dot cz
10 年前
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', '今天是 {0, date, full}。', array($datetime->getTimestamp()));
} else {
// 当前代码
MessageFormatter::formatMessage('en_US', '今天是 {0, date, full}。', array($datetime));
}
?>
To Top