@baukit/localization-core

中文文档
0.18.3发布于 2026/11/07MITTypeScriptES Module零依赖构建来源已验证近 30 天下载 9187

依赖性无地块解析,目录密钥比较,稳定地块化,并明确地块入物工厂.

中文使用文档
文档目录4 节
  1. 已打入目录部分
  2. 民事日期
  3. 本地时间
  4. 边界

@baukit/localization-core

@baukit/localization-core 提供了无依赖的地块解析度,目录密钥比较, 稳定代码本地化,以及明确本地化 Intl 工厂。 产品供应 支持 locale 列表,倒置 locale, 翻译目录, 和复制 .

i18 ext and React community staying in the Convention app. i18 ext and React communications 互联网档案馆的存檔,存档日期2013-10-02. 互联网档案馆的存檔,存档日期2013-12-22. 解析并先水分 将本地化的UI 传递给这个软件包的产品工厂.

已打入目录部分

defineCatalogSegment 使用一个产品选择的参考语言来输入每个翻译。 这个 支持的地块 Tuple 留在产品中。 TypeScript 拒绝缺失或额外的本地密钥, 缺少或额外信件密钥,以及将字符串修改为复数信件的翻译.

import { defineCatalogSegment } from '@baukit/localization-core';

const accountCatalogs = defineCatalogSegment(
  ['en', 'de'] as const,
  'en',
  { title: 'Account', devices: { one: '1 device', other: '{{count}} devices' } },
  {
    de: { title: 'Konto', devices: { one: '1 Gerät', other: '{{count}} Geräte' } },
  },
);

已存在的目录对象可以一次移动一段. 通过当前区域列表, 引用 语言、参考部分和翻译到 defineCatalogSegment继续加载翻译, i18next资源,取名空间,并在产品中复制. 函数冻结返回的地盘 地图,但不深解或检查信件文本.

民事日期

民事日期为 YYYY-MM-DD 页:1 日记,计划日, 记念日期为公用日期,并计算一个 Date.getDate() 或 ISO 字符串切片 给任何与主机有分歧的用户获取错误的答案 .

import { addCivilDays, civilDateForInstant, civilToday } from '@baukit/localization-core';

civilToday('Pacific/Auckland'); // '2026-08-25'
civilDateForInstant('2026-08-25T06:00:00Z', 'America/Los_Angeles'); // '2026-08-24'
addCivilDays('2026-03-07', 1); // '2026-03-08', DST does not shift a calendar day
  • parseCivilDate(date) 返回时 { ok: true, value } 或者说 { ok: false, code: 'invalid_civil_date' }。 。 。 . isCivilDate, (中文(简体) ), civilDateValidationCode,以及 assertCivilDate 是布尔,代码,和 抛出表格。 他们都拒绝不可能的日子 2026-02-30。 。 。 .
  • assertCivilTime(time | null) 接受 HH:MM 财务报告和审定财务报表 HH:MM:SS。 。 。 .
  • addCivilDays(date, days), (中文(简体) ), civilDaysBetween(from, to),以及 compareCivilDates(left, right) 在日历上的工作,所以一个 DST 转换从不增加或减少一天.
  • civilDateForInstant(instant, timeZone) 接受一个 Date, ISO 字符串, 或时代 毫秒长. civilToday(timeZone) 现在的呼声是一样的 isInstantOnCivilDate(instant, date, timeZone) 解答时间戳是否属于本地 日报.
  • assertTimeZone(zone) 验证IANA区. resolvedTimeZone() 读取主机区; 每 其他函数会明确地取用区,所以没有什么能默默地依赖于过程的运行位置.

本地时间

resolveZonedLocalTime 将民事日期、当地时间和IANA区变为一瞬间。 当地人 时间可以掉入间隙(春季前行,所以从不发生)或折叠(倒回后行,所以发生) (两次) 呼叫者选择两种政策;也没有默认.

import { resolveZonedLocalTime } from '@baukit/localization-core';

resolveZonedLocalTime({
  civilDate: '2026-03-29',
  civilTime: '02:30',
  timeZone: 'Europe/Berlin',
  gap: 'shiftForward',
  fold: 'earlier',
});
// { ok: true, epochMilliseconds: Date.parse('2026-03-29T01:30:00Z'), transition: 'gap' }
  • gap: 'reject' 返回时 { ok: false, code: 'nonexistent_local_time' }。 。 。 . gap: 'shiftForward' 读取空隙之前的相抵时间,所以当一个小时时,02:30变为03:30 跳过 RFC 5545是这样读取的 TZID 时间.
  • fold: 'earlier' 财务报告和审定财务报表 fold: 'later' 选择两个瞬间中的第一个或第二个.
  • transition 实值 'none', (中文(简体) ), 'gap',或 'fold' 并说什么是当地时间打击.
  • 无效的输入返回 invalid_civil_date, (中文(简体) ), invalid_civil_time (任何东西,但 HH:MM 或者说 HH:MM:SS 从 00:00 改为 23:59:59),或 invalid_time_zone。偏移字符串,例如 +01:00 不是区域,而是被拒绝。 未知的策略值是一个编程错误并丢出 RangeError。 。 。 .

函数读取区域规则通过 Intl.DateTimeFormat 所以答案就取决于 运行时间的时区数据库。 共享向量在 fixtures/zoned-time/vectors-v1.json 覆盖空隙、折叠、半小时和45分钟相抵、跳出 日、规则更改和无效输入。 解决本地时间的粗口代码应该针对 同一个文件.

@baukit/localization-core/vectors 出口 zonedTimeVectorChecks(fixture),将文件翻转 输入带有标签的检查 expected 数值和一个 actual() 电话 包的维特套房 在节点上运行,和 examples/expo-notifications-conformance 在Hermes内部运行相同的检查 在Android模拟器上。 一种产品可以同样的方式运行它们自己的运行时间.

边界

软件包不包括翻译、产品目录ID、持久性、反应提供者、博览会 本地化,或者本地化图书馆. 它定义了字符串加 { one, other } 复数形状 已键入目录段,但应用程序仍然拥有复数规则和插值语法.

每一个依赖于一个地块或时区的函数都将其作为一个论据. resolvedTimeZone() 是东道国唯一的读者,这是你故意打的单独电话。 这就是保持 一个测试套房 从通过柏林 和失败在CI.

版本与发布记录

@baukit/localization-core 共发布 67 个版本,首次发布于 2026/08/26;过去 12 个月发布了 67 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.18.3latest2026/11/07今天
0.18.22026/11/061 天前
0.18.12026/11/062 天前
0.18.02026/11/052 天前
0.17.12026/11/034 天前
0.17.02026/11/025 天前

关于 @baukit/localization-core 的常见问题

@baukit/localization-core 是什么?

依赖性无地块解析,目录密钥比较,稳定地块化,并明确地块入物工厂.

如何安装 @baukit/localization-core?

在项目目录运行 npm install @baukit/localization-core,或使用 pnpm add / yarn add / bun add。

@baukit/localization-core 支持 TypeScript 吗?

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

@baukit/localization-core 支持 ESM 还是 CommonJS?

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

@baukit/localization-core 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=24.0.0。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@baukit/localization-core 可以商用吗?

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

@baukit/localization-core 的下载量有多少?

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

@baukit/localization-core 还在维护吗?

最新版本 0.18.3 发布于 2026/11/07(今天);至今共发布 67 个版本,其中过去 12 个月发布了 67 个;首次发布于 2026/08/26。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。