@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 | 消息读取的每个占位符和选择器。 |
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核心的每一次构建都将其作为 /*! */ 注意,它在捆绑中幸存了下来。