# @baukit/localization-core 中文文档

规范地址：https://npmcn.com/package/%40baukit/localization-core/

版本：0\.18\.3
npm 元数据更新时间：2026-11-07T02:35:54.885Z
中文译文更新时间：2026-11-07T18:26:49.946Z
软件包许可：MIT

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

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

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

- 包体积（解压后）：109 kB，52 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- Node.js 要求：\>=24\.0\.0
- 运行依赖：0 个
- 首次发布：2026-08-25T18:46:02.903Z
- 最新版本发布：2026-11-07T02:35:54.472Z
- 近 30 天下载量：9187（2026-10-08 至 2026-11-06，npm 官方下载统计）
- 已发布版本数：67（近 12 个月 67 个）

## 中文简介

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

## 安装

```sh
npm install @baukit/localization-core
```

也可以使用：`pnpm add @baukit/localization-core`、`yarn add @baukit/localization-core`、`bun add @baukit/localization-core`

## README

# `@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 拒绝缺失或额外的本地密钥, 缺少或额外信件密钥,以及将字符串修改为复数信件的翻译.

```ts
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 字符串切片 给任何与主机有分歧的用户获取错误的答案 .

```ts
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区变为一瞬间。 当地人 时间可以掉入间隙(春季前行,所以从不发生)或折叠(倒回后行,所以发生) (两次) 呼叫者选择两种政策;也没有默认.

```ts
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 是什么？

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

### 如何安装 @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 和提交记录判断。

