国际化
国际化
工作区的文本保存在 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},语言之间有差异时使用不同的键