# @telorun/message-format 中文文档

规范地址：https://npmcn.com/package/%40telorun/message-format/

版本：0\.127\.0
npm 元数据更新时间：2026-11-02T15:39:23.507Z
中文译文更新时间：2026-11-02T16:00:56.870Z
软件包许可：MIT

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

原始 npm 页面：https://www.npmjs.com/package/%40telorun/message-format
原文对照：https://npmcn.com/package/%40telorun/message-format/?lang=original
项目主页：https://github.com/telorun/telo#readme
源码仓库：https://github.com/telorun/telo

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

- 包体积（解压后）：340 kB，76 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- 运行依赖：0 个
- 首次发布：2026-10-23T05:20:50.879Z
- 最新版本发布：2026-11-02T15:39:23.311Z
- 已发布版本数：10（近 12 个月 10 个）

## 中文简介

Telo的消息核心：Unicode MessageFormat 2的封闭配置文件-占位符，复数选择，CLDR复数规则和固定CLDR数据的十进制格式，以及RFC 4647语言查找。没有Intl，没有依赖；在Node， Rust和每个b中都有一个答案

## 安装

```sh
npm install @telorun/message-format
```

也可以使用：`pnpm add @telorun/message-format`、`yarn add @telorun/message-format`、`bun add @telorun/message-format`

## README

# @telorun /消息格式

泰罗的信息核心：一个封闭的档案 [Unicode MessageFormat 2](https://www.unicode.org/reports/tr35/tr35-messageFormat.html)，将其读入纯json模型，并使用固定的CLDR 48.2数据进行格式化。它没有依赖关系，也没有调用 `Intl`，所以一个消息的格式在Node和Rust (`telorun-message-format`)，并在每一个浏览器。

```ts
import { formatMessage, lookupLanguage, readMessage } from "@telorun/message-format";

const read = readMessage({
  plural: "count",
  cases: { "=0": "No files", one: "{$count} file", other: "{$count} files" },
});
if (!read.ok) throw new Error(read.problems[0].message);

formatMessage(read.message, "en", { count: 0n }); // "No files"
formatMessage(read.message, "en", { count: 1234n }); // "1,234 files"
lookupLanguage("pl-PL", ["en", "pl"]); // "pl"
```

## 这个概要文件

-   **一个模式** 是text with `{$name}` 占位符和转义符 `\{`， `\}` 和 `\\`． 一个名字遵循Telo命名规则：一个字母或 `_` 首先，然后是字母、数字或 `_`，而不是CEL的保留词。在大括号内，MF2允许的空白和bidi标记被接受。MF2可以用大括号写的任何其他内容都被拒绝：文字、函数、选项、属性或标记。
-   **多元选择** 写 `{ plural: <name>, cases: { <category> | =<integer>: Message } }`. `other` 是必需的。case本身就是一个Message，所以选择是嵌套的。 `=N` 键值是int64内的标准整数∪uint64。
-   **一个文本** 是一条消息，还是 `{ text: Message, context }` 使用非空上下文。

## 答案是什么？

| 函数 | 回答 |
| --- | --- |
| `parsePattern`， `serializePattern` | 模式的各个部分，以及它的一个规范拼写。 |
| `readMessage`， `readText` | 模型，或每一个错误作为 `MESSAGE_SYNTAX_INVALID` 它的路径，在模式中，它的UTF-16范围。 |
| `messageIdentity`， `textIdentity` | 源文本的键：通过取得到的模式 `other` 在每一个选择，正规的写作，加上它的上下文。 |
| `messageVariables` | 消息读取的每个占位符和选择器。 |
| `unknownVariables` | `MESSAGE_PLACEHOLDER_UNKNOWN` 对于每个名字，翻译的意思是它的来源不是。 |
| `pluralCategories`， `invalidPluralCategories` | 语言的CLDR类别，以及 `MESSAGE_PLURAL_CATEGORY_INVALID` 对于每一种情况，指出它所缺乏的。 |
| `formatNumber`， `pluralCategory`， `pluralCategoryOfDecimal` | 一种语言中数字的文本和类别。 |
| `formatMessage` | 文本。拒绝与 `MESSAGE_PLACEHOLDER_UNBOUND` 当消息读取的名称在任何分支上都没有值时。拒绝与 `MESSAGE_PLACEHOLDER_VALUE_UNSUPPORTED` 对于非字符串或数字的值，以及非数字的选择器。 |
| `truncationChain`， `lookupLanguage` | RFC 4647查找： `pl-Latn-PL` → `pl-Latn` → `pl`不区分大小写。 `null` 当没有匹配时，调用者就会使用它的源。 |

## 数字

数字的文本仅依赖于它的值，而不依赖于它的主机类型：

-   一、 `bigint` 在int64内部∪uint64被精确地写出来，不管它有多大。
-   一、 `number` 是一个double类型：它的最短往返小数，舍入一半到偶数到模式的最大分数位数，后面的零被去掉，零结果为无符号。所以 `1.0` 是“1”，在 `en` 它选择 `one`.
-   非有限double被拒绝。

然后文本采用该语言的CLDR标准十进制模式，用 `minimumGroupingDigits`)，默认编号数字，小数分隔符和减号。复数选择读取该四舍五入小数的操作数。 `=N` 案例在类别之前以数字匹配。

## 系统的数据

每个区域设置的数据是CLDR 48.2，生成为 `message-format/cldr/` 从精确的固定 `cldr-core` 和 `cldr-numbers-full`． 标记通过CLDR自己的继承进行解析，并在根(`other` 只有拉丁数字， `#,##0.###`):

-   **数字数据** 经过 `parentLocales`，然后是 `nonlikelyScript` 规则，然后截断。
-   **复数规则** 查看CLDR的复数父映射。

数据在Unicode许可证V3下使用。该包裹运送许可证为 `LICENSE-CLDR`核心的每一次构建都将其作为 `/*! */` 注意，它在捆绑中幸存了下来。

## 常见问题

### @telorun/message-format 是什么？

Telo的消息核心：Unicode MessageFormat 2的封闭配置文件-占位符，复数选择，CLDR复数规则和固定CLDR数据的十进制格式，以及RFC 4647语言查找。没有Intl，没有依赖；在Node， Rust和每个b中都有一个答案

### 如何安装 @telorun/message-format？

在项目目录运行 npm install @telorun/message-format，或使用 pnpm add / yarn add / bun add。

### @telorun/message-format 支持 TypeScript 吗？

支持。包内自带 TypeScript 类型声明（package\.json 声明了 types 入口），安装后即可获得类型提示，无需再安装 @types 包。

### @telorun/message-format 支持 ESM 还是 CommonJS？

以 ES Module 形式发布，推荐使用 import 引入。在 CommonJS 项目中，Node\.js 20\.19\+ / 22\.12\+ 可以直接 require\(\) 不含顶层 await 的 ES Module，更早的版本需要改用动态 import\(\)。

### @telorun/message-format 可以商用吗？

@telorun/message-format 使用 MIT 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。以上为概括，不构成法律意见，请以许可原文为准。

### @telorun/message-format 还在维护吗？

最新版本 0\.127\.0 发布于 2026/11/02（今天）；至今共发布 10 个版本，其中过去 12 个月发布了 10 个；首次发布于 2026/10/23。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

