跳到主要内容

国际化

国际化

Norbital 把每个界面——网站、Colony 平台与每个租户工作区——本地化为 英文简体中文 。平台随附两套目录;租户工作区为两种语言各携带自己的副本,并可以覆盖平台外壳文案。

模型

目录 是把消息键映射到字符串的扁平映射——没有嵌套,因此目录通过展开合并时不会出现结构意外。每个目录都以 en / zh 配对存在, defineMessages 在编译时强制两种语言携带完全相同的键。英文是唯一事实来源;运行时按 回退,因此未来的第三种语言可以部分翻译而不破坏类型约定。占位符使用 {name} 语法,作为第二个参数传入:

const { t } = useI18n<TenantI18nKeys>();

t('app.quotes.title');                                  // "Quotes" / "报价"
t('component.doc_no', { no: 'Q-2026-014' });

受支持的语言

受支持的语言集合是封闭的: 'en''zh' 。客户端上的语言解析依次遵循持久化的选择(本地存储中的 norbital.locale )、浏览器语言,最后是英文。服务器代码以同样的方式从 Accept-Language 请求头(或显式的 ?lang= )解析。格式化遵循同样的语言: 'en' 映射到 en-US'zh' 映射到 zh-CN ,用于 Intl.* 的日期、数字与货币格式化。

平台目录

bolt 随附两套覆盖平台外壳文案的目录——外壳、设置、通知、Agent 界面、身份页面与事务性邮件:

  • @norbital-ai/ui/i18n ——组件库目录( table.*form.*dataRenderer.* 、…)。
  • @norbital-ai/bolt/i18n ——bolt 外壳目录( bolt.*server.*email.* )。

构建时的目录合并顺序是 platform catalogs ← tenant overrides ,因此租户可以通过复用相同的键按语言重新定制平台文案。

租户文案

工作区在 src/i18n/ 下编写自己的文案:

src/
└── i18n/
    ├── messages.en.json   # your English copy
    └── messages.zh.json   # your Chinese copy — same keys

两个文件必须携带完全相同的键;bolt 编译器会拒绝不匹配。应用文件用 useI18n<TenantI18nKeys>() 中的 @norbital-ai/ui/i18n 翻译,其中 TenantI18nKeys 是从你的 messages.en.json 派生的生成类型联合( $bolt/i18n-keys ):

// src/apps/+quotes.svelte
import { useI18n } from '@norbital-ai/ui/i18n';
import type { TenantI18nKeys } from '$bolt/i18n-keys';
import { PageHeader } from '@norbital-ai/ui/page-header';

const { t } = useI18n<TenantI18nKeys>();

<svelte:head> 中的应用元数据保持静态英文——编译器读取它用于应用身份。侧边栏标签改为通过目录中的 app.<appId>.title 键按语言本地化。

切换语言

网站通过 URL 切换: