跳到主要内容

国际化

国际化

工作区的文本保存在 src/i18n/ 下的消息目录中。基础目录是唯一的事实来源,其他每种语言都与它的键保持一致。

// src/i18n/+messages.ts (templates/field-operations, excerpt)
import { messages } from '@norbital-ai/bolt';

export default messages({
  'app.field_ops_contractor.title': 'Contractor Workspace',
  'app.field_ops_contractor.header_title': 'Contractor jobs'
  // …
});

// src/i18n/+zh.messages.ts: the same keys or fewer, never more
export default messages({
  'app.field_ops_contractor.title': '承包商工作区',
  'app.field_ops_contractor.header_title': '承包商任务'
  // …
});

编写的文件

src/i18n/+messages.ts 为 messages({ … }),是一个由点分命名空间键映射到字符串的扁平表;只要存在 src/i18n/,就恰好有一个。src/i18n/+<locale>.messages.ts 保存另一种语言,它的键必须是基础目录的子集,否则就是类型错误。在每种语言中保持 {placeholders} 一致。

页面中的消息

bolt.t(key, vars?) 的类型来自基础目录,因此未知的键是类型错误。bolt.locale 是查看者的语言——依次取其保存的选择、浏览器语言,最后是工作区的 locale——语言切换由外壳负责。

声明中的消息

声明中的 Msg——应用或页面标题、字段的 label 或 help、通知标题——是一个消息目录键。在非目录模式下(工作区没有 src/i18n/),它可以是字面字符串。

原始文本规则

有消息目录时,页面或记录视图中每个面向用户的字符串都来自 bolt.t(…):原始文本节点,或传给会渲染的属性的字面量,都是缺失的目录条目,无法通过 bolt check。标识符、URL、种子数据与模型的 description 不属于面向用户的文案。

键的约定

  • 应用文案使用 app.<app>.title、app.<app>.description 与 app.<app>.tab_<name>
  • 跨页面共享的标签使用 component.<name>
  • 复数使用 {count},语言之间有差异时使用不同的键