@telorun/message-format

中文文档
0.127.0发布于 2026/11/02MITTypeScriptES Module零依赖

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

中文使用文档
文档目录4 节
  1. 这个概要文件
  2. 答案是什么?
  3. 数字
  4. 系统的数据

@telorun /消息格式

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

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消息读取的每个占位符和选择器。
unknownVariablesMESSAGE_PLACEHOLDER_UNKNOWN 对于每个名字,翻译的意思是它的来源不是。
pluralCategories, invalidPluralCategories语言的CLDR类别,以及 MESSAGE_PLURAL_CATEGORY_INVALID 对于每一种情况,指出它所缺乏的。
formatNumber, pluralCategory, pluralCategoryOfDecimal一种语言中数字的文本和类别。
formatMessage文本。拒绝与 MESSAGE_PLACEHOLDER_UNBOUND 当消息读取的名称在任何分支上都没有值时。拒绝与 MESSAGE_PLACEHOLDER_VALUE_UNSUPPORTED 对于非字符串或数字的值,以及非数字的选择器。
truncationChain, lookupLanguageRFC 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 共发布 10 个版本,首次发布于 2026/10/23;过去 12 个月发布了 10 个版本。

版本发布日期距今
0.127.0latest2026/11/02今天
0.126.02026/11/011 天前
0.125.12026/10/313 天前
0.125.02026/10/304 天前
0.124.02026/10/295 天前
0.123.12026/10/268 天前

关于 @telorun/message-format 的常见问题

@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 和提交记录判断。