# @ember-intl/intl-messageformat 中文文档

规范地址：https://npmcn.com/package/%40ember-intl/intl-messageformat/

版本：2\.5\.0
npm 元数据更新时间：2026-10-20T09:43:20.107Z
中文译文更新时间：2026-11-13T15:01:48.666Z
软件包许可：BSD-3-Clause

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40ember-intl/intl-messageformat
原文对照：https://npmcn.com/package/%40ember-intl/intl-messageformat/?lang=original
项目主页：https://github.com/ember-intl/intl-messageformat
源码仓库：https://github.com/ember-intl/intl-messageformat

弃用说明：Package no longer supported\. Contact Support at https://www\.npmjs\.com/support for more info\.

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：3.7 MB，278 个文件
- 模块格式：CommonJS
- TypeScript 类型：未声明
- 运行依赖：2 个
- 首次发布：2017-08-23T23:20:07.678Z
- 最新版本发布：2019-01-13T07:10:33.723Z
- 近 30 天下载量：25157（2026-10-14 至 2026-11-12，npm 官方下载统计）
- 已发布版本数：7（近 12 个月 0 个）

## 中文简介

格式 ICU 带有数字、日期、复数的信件字符串,并选择占位符创建本地化信件.

## 安装

```sh
npm install @ember-intl/intl-messageformat
```

也可以使用：`pnpm add @ember-intl/intl-messageformat`、`yarn add @ember-intl/intl-messageformat`、`bun add @ember-intl/intl-messageformat`

## README

# 输入信件格式

格式 ICU 带有数字、日期、复数的信件字符串,并选择占位符创建本地化信件.

[![npm Version](https://img.shields.io/npm/v/intl-messageformat.svg?style=flat-square)](https://www.npmjs.org/package/intl-messageformat) [![Build Status](https://img.shields.io/travis/yahoo/intl-messageformat/master.svg?style=flat-square)](https://travis-ci.org/yahoo/intl-messageformat) [![Dependency Status](https://img.shields.io/david/yahoo/intl-messageformat.svg?style=flat-square)](https://david-dm.org/yahoo/intl-messageformat)

[![Sauce Test Status](https://saucelabs.com/browser-matrix/intl-messageformat.svg)](https://saucelabs.com/u/intl-messageformat)

## 概览

### 目标

此软件包旨在为您提供一个管理和格式化您的 JavaScript app 的字符串消息的方式, 供使用您的应用程序的人使用 。 您可以在浏览器和服务器上通过Node.js使用此软件包.

执行的依据是: [草人提案](http://wiki.ecmascript.org/doku.php?id=globalization:messageformatting),但有些地方在执行上存在分歧.

_说明: `IntlMessageFormat` API可能更改以保持与 ECMA-402 的同步, 但此软件包将随同 [铸造](http://semver.org/)。 。 。 ._

### 如何运作

将信件作为 `String` 信件,或一个 [预分解 AST](https://github.com/yahoo/intl-messageformat-parser) 对象.

```js
var msg = new IntlMessageFormat(message, locales, [formats]);
```

字符串 `message` 被解析,然后在内部以编译的形式存储,该编译的形式将优化用于 `format()` 用于向用户显示格式化字符串的方法.

```js
var output = msg.format(values);
```

### 常用用法示例

一个很常见的例子是将数字带有复数标签的信息格式化. 通过这个软件包,您可以确保字符串对一个人的地盘进行适当的格式化,例如:

```js
var MESSAGES = {
    'en-US': {
        NUM_PHOTOS: 'You have {numPhotos, plural, ' +
            '=0 {no photos.}' +
            '=1 {one photo.}' +
            'other {# photos.}}'
    },

    'es-MX': {
        NUM_PHOTOS: 'Usted {numPhotos, plural, ' +
            '=0 {no tiene fotos.}' +
            '=1 {tiene una foto.}' +
            'other {tiene # fotos.}}'
    }
};

var output;

var enNumPhotos = new IntlMessageFormat(MESSAGES['en-US'].NUM_PHOTOS, 'en-US');
output = enNumPhotos.format({numPhotos: 1000});
console.log(output); // => "You have 1,000 photos."

var esNumPhotos = new IntlMessageFormat(MESSAGES['es-MX'].NUM_PHOTOS, 'es-MX');
output = esNumPhotos.format({numPhotos: 1000});
console.log(output); // => "Usted tiene 1,000 fotos."
```

### 信件语法

这个软件包使用的电文语法不是专有的,事实上它是一种通用的标准电文语法,在编程语言之间工作,也是专业翻译所熟悉的. 此软件包使用 **[ICU 信件语法](http://userguide.icu-project.org/formatparse/messages)** 为所有人服务 [语言](http://cldr.unicode.org/) 它们有定义的复数化规则.

### 特征

-   使用行业标准: [ICU 信件语法](http://userguide.icu-project.org/formatparse/messages) 财务报告和审定财务报表 [区域数据](http://cldr.unicode.org/)。 。 。 .
    
-   支助 **复数**, (中文(简体) ), **选择**,以及 **选择顺序** 消息参数.
    
-   使用 [`Intl.NumberFormat`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/NumberFormat) 财务报告和审定财务报表 [`Intl.DateTimeFormat`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat)分别是:.
    
-   优化重复呼叫 `IntlMessageFormat` 实例 `format()` 方法.
    
-   支持定义自定义格式样式/选项.
    
-   支持消息语法字符的逃避序列,例如: `"\\{foo\\}"` 将输出 : `"{foo}"` 在格式化的产出中,而不是将其解释为一种 `foo` 参数.
    

## 使用量

### `Intl` 依赖性

这个套装假设: [`Intl`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl) 全球对象存在于运行时. `Intl` 在所有现代浏览器中都有存在 并且有工作正在发生 [整合 `Intl` 输入节点.js](https://github.com/joyent/node/issues/6371)。 。 。 .

**幸运的是,这是 [Itl.js (英语)](https://github.com/andyearnshaw/Intl.js) 混合剂!** 如果您想要支持运行时间, 您需要有条件地加载多填充 `Intl` 尚未内置.

#### 正在装入 Intl.js 浏览器中的多填充

如果浏览器还没有 `Intl` API 内置, Intl. js Polyfill 需要加载到页面上, 以及任何需要支持的地块的地块数据 :

```html
<script src="intl/Intl.min.js"></script>
<script src="intl/locale-data/jsonp/en-US.js"></script>
```

_注意:现代浏览器已经拥有了 `Intl` API 内置, 这样您可以有条件地装入 Intl.js Polyfill, 通过检查 `window.Intl`。 。 。 ._

#### 在节点装入 Intl.js 的多填充

如果运行时间已不存在,则有条件地需要Intl.js Polyfill. 从零点点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点零点.

```js
if (!global.Intl) {
    require('intl');
}
```

_注意: 当在Node.js中使用Intl.js Polyfill时,它会自动加载所有被支持的地块的地块数据._

### 在浏览器中装入信息格式

```html
<script src="intl-messageformat/intl-messageformat.min.js"></script>
```

默认情况下, Intl Message Format 有英语语言数据的船只(`en`) 内置至图书馆运行时间. 当您需要将数据格式化到另一个地方时,请输入其数据;例如,法语:

```html
<script src="intl-messageformat/locale-data/fr.js"></script>
```

_注:本套件所支持的所有200+语言都使用其root BCP 47语言标记;即第一个连字符前的部分(如果有的话)._

### 在节点.js中装入内置信件格式

简单 `require()` 此软件包 :

```js
var IntlMessageFormat = require('intl-messageformat');
```

_注:在Node.js中,所有200+语言的数据与库一起被加载._

### 公共 API

#### `IntlMessageFormat` 构造器

要创建格式化信件,请使用 `IntlMessageFormat` 建筑师。 构造器需要三个参数:

-   **消息** - 说吧 _{\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}你觉得怎么样_ - 作为格式化模式的字符串消息(或预分解AST).
    
-   **语言** - 说吧 _{String } 字符串 \[ \]_ - 带有BCP 47语言标记的字符串,或此类字符串的数组。 如果您不提供地语, 默认地语将被使用 。 当提供一系列的地块时,检查每个项及其祖先地块,并返回第一个有已注册地块数据的地块. **见: [本地分辨率](https://npmcn.com/package/%40ember-intl/intl-messageformat/#readme-locale-resolution) 更多细节.**
    
-   **\[格式\]** - 说吧 _{对象}_ - 有用户定义的格式样式选项的可选对象.
    

```js
var msg = new IntlMessageFormat('My name is {name}.', 'en-US');
```

#### 本地分辨率

`IntlMessageFormat` 使用类似于内置的本地解析过程 `Intl` APIs ,用于根据 `locales` 值传递给构造器。 该决议进程的结果可通过呼叫 `resolvedOptions()` 原型方法.

以下是抽象的步骤 `IntlMessageFormat` 解决本地值 :

-   如果没有加载额外的地籍数据, 地籍将 _永远_ 决 议 `"en"`。 。 。 .
    
-   如果缺少叶片地块的数据 `"fr-FR"`但这里 _实值_ 其祖先之一的数据, `"fr"` 在这种情况下,它的祖先将被使用.
    
-   如果有指定地块的数据,那么该地块就会被解决;即,,
    
    ```js
    var mf = new IntlMessageFormat('', 'en-US');
    assert(mf.resolvedOptions().locale === 'en-US'); // true
    ```
    
-   已解决的地方现已正常化;例如, `"en-us"` 决心: `"en-US"`。 。 。 .
    

_注意: 当提供数组时 `locales`,在找到匹配之前,该数组中的每个项目都会发生上述步骤._

#### `resolvedOptions()` 方法

此方法返回对象, 包含实例创建过程中解决的选项值 。 目前只包含 `locale` 属性; 示例如下:

```js
var msg = new IntlMessageFormat('', 'en-us');
console.log(msg.resolvedOptions().locale); // => "en-US"
```

通知指定的地块如何是所有小写值 : `"en-us"`,但决定并正常化为: `"en-US"`。 。 。 .

#### `format(values)` 方法

一旦创建了信件,则通过调用 `format()` 方法并传递一组 `values`数字 :

```js
var output = msg.format({name: "Eric"});
console.log(output); // => "My name is Eric."
```

_注:一个数值 **必须** 用于为实例构建的每条消息模式中的参数提供._

#### 用户定义格式

定义自定义格式样式是有用的,您需要为基础格式提供一组选项;例如,以美元输出数字:

```js
var msg = new IntlMessageFormat('The price is: {price, number, USD}', 'en-US', {
    number: {
        USD: {
            style   : 'currency',
            currency: 'USD'
        }
    }
});

var output = msg.format({price: 100});
console.log(output); // => "The price is: $100.00"
```

在这个例子中,我们正在定义 `USD` 数字格式样式,该样式将传递给下面 `Intl.NumberFormat` 作为选择.

## 实例

### 多标签

此示例显示如何使用 [ICU 信件语法](http://userguide.icu-project.org/formatparse/messages) 以定义带有复数标签的信息;例如, `"You have 10 photos"`数字 :

```
You have {numPhotos, plural,
    =0 {no photos.}
    =1 {one photo.}
    other {# photos.}
}
```

```js
var MESSAGES = {
    photos: '...', // String from code block above.
    ...
};

var msg = new IntlMessageFormat(MESSAGES.photos, 'en-US');

console.log(msg.format({numPhotos: 0}));    // => "You have no photos."
console.log(msg.format({numPhotos: 1}));    // => "You have one photo."
console.log(msg.format({numPhotos: 1000})); // => "You have 1,000 photos."
```

_注:何时 `numPhotos` 曾经 `1000`,数字格式化为正确的千位分隔符._

## 许可证

这个软件可以在雅虎下自由使用! BSD许可证. 见 [自由文件](https://github.com/yahoo/intl-messageformat/blob/master/LICENSE) 许可证文本和版权信息.

## 常见问题

### @ember-intl/intl-messageformat 是什么？

格式 ICU 带有数字、日期、复数的信件字符串,并选择占位符创建本地化信件\.注意：该包已被作者标记为弃用——Package no longer supported\. Contact Support at https://www\.npmjs\.com/support for more info\.

### 如何安装 @ember-intl/intl-messageformat？

在项目目录运行 npm install @ember-intl/intl-messageformat，或使用 pnpm add / yarn add / bun add。

### @ember-intl/intl-messageformat 支持 TypeScript 吗？

该包的 package\.json 没有声明类型入口。需要类型提示时，可以在 npm 上查找社区维护的 @types/ember-intl\_\_intl-messageformat 是否存在。

### @ember-intl/intl-messageformat 支持 ESM 还是 CommonJS？

以 CommonJS 形式发布，可以直接 require\(\)；在 ES Module 项目中也可以用 import 引入（Node\.js 会把 module\.exports 作为默认导出）。

### @ember-intl/intl-messageformat 可以商用吗？

@ember-intl/intl-messageformat 使用 BSD-3-Clause 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。另外不得用原作者名义为衍生产品背书。以上为概括，不构成法律意见，请以许可原文为准。

### @ember-intl/intl-messageformat 的下载量有多少？

根据 npm 官方下载统计，@ember-intl/intl-messageformat 在 2026/10/14 – 2026/11/12 这 30 天内被下载 25,157 次，日均约 839 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @ember-intl/intl-messageformat 还在维护吗？

最新版本 2\.5\.0 发布于 2019/01/13（7 年前）；至今共发布 7 个版本，其中过去 12 个月发布了 0 个；首次发布于 2017/08/24。作者已将其标记为弃用，新项目建议寻找替代方案。

