messages.ts 6.75 KB
// vibe_erp SPA message bundles.
//
// Each locale is a flat key→string map. Keys use dot-notation
// grouped by area (nav.*, page.*, action.*, status.*, label.*).
//
// The framework's backend i18n uses ICU4J with MessageFormat
// patterns. The SPA uses plain strings for v1 — ICU MessageFormat
// in the browser (via @formatjs/intl-messageformat) is a v1.x
// enhancement when plural/gender/number formatting is needed
// client-side.

export type MessageKey = keyof typeof en

export const en = {
  // ─── Navigation ────────────────────────────────────────────
  'nav.overview': 'Overview',
  'nav.dashboard': 'Dashboard',
  'nav.catalog': 'Catalog & Partners',
  'nav.items': 'Items',
  'nav.uoms': 'Units of Measure',
  'nav.partners': 'Partners',
  'nav.inventory': 'Inventory',
  'nav.locations': 'Locations',
  'nav.balances': 'Stock Balances',
  'nav.movements': 'Stock Movements',
  'nav.orders': 'Orders',
  'nav.salesOrders': 'Sales Orders',
  'nav.purchaseOrders': 'Purchase Orders',
  'nav.production': 'Production',
  'nav.workOrders': 'Work Orders',
  'nav.shopFloor': 'Shop Floor',
  'nav.finance': 'Finance',
  'nav.accounts': 'Chart of Accounts',
  'nav.journalEntries': 'Journal Entries',
  'nav.system': 'System',
  'nav.users': 'Users',
  'nav.roles': 'Roles',

  // ─── Actions ───────────────────────────────────────────────
  'action.confirm': 'Confirm',
  'action.ship': 'Ship',
  'action.receive': 'Receive',
  'action.cancel': 'Cancel',
  'action.start': 'Start',
  'action.complete': 'Complete',
  'action.create': 'Create',
  'action.save': 'Save',
  'action.back': '← Back',
  'action.logout': 'Logout',
  'action.signIn': 'Sign in',
  'action.signingIn': 'Signing in…',
  'action.creating': 'Creating…',
  'action.addLine': '+ Add line',
  'action.assign': 'Assign',
  'action.revoke': 'Revoke',
  'action.newItem': '+ New Item',
  'action.newPartner': '+ New Partner',
  'action.newLocation': '+ New Location',
  'action.newOrder': '+ New Order',
  'action.newWorkOrder': '+ New Work Order',
  'action.newUser': '+ New User',
  'action.newRole': '+ New Role',
  'action.newAccount': '+ New Account',
  'action.adjustStock': 'Adjust Stock',

  // ─── Status badges ────────────────────────────────────────
  'status.DRAFT': 'Draft',
  'status.CONFIRMED': 'Confirmed',
  'status.SHIPPED': 'Shipped',
  'status.RECEIVED': 'Received',
  'status.COMPLETED': 'Completed',
  'status.CANCELLED': 'Cancelled',
  'status.IN_PROGRESS': 'In Progress',
  'status.PENDING': 'Pending',
  'status.POSTED': 'Posted',
  'status.SETTLED': 'Settled',
  'status.REVERSED': 'Reversed',

  // ─── Common labels ────────────────────────────────────────
  'label.code': 'Code',
  'label.name': 'Name',
  'label.type': 'Type',
  'label.status': 'Status',
  'label.active': 'Active',
  'label.email': 'Email',
  'label.phone': 'Phone',
  'label.total': 'Total',
  'label.quantity': 'Quantity',
  'label.unitPrice': 'Unit Price',
  'label.date': 'Date',
  'label.currency': 'Currency',
  'label.description': 'Description',
  'label.username': 'Username',
  'label.password': 'Password',
  'label.signedInAs': 'Signed in as',
  'label.noRows': 'No rows.',
  'label.loading': 'Loading…',
  'label.error': 'Error',
} as const

export const zhCN: Record<MessageKey, string> = {
  // ─── 导航 ──────────────────────────────────────────────────
  'nav.overview': '概览',
  'nav.dashboard': '仪表盘',
  'nav.catalog': '产品与合作伙伴',
  'nav.items': '物料',
  'nav.uoms': '计量单位',
  'nav.partners': '合作伙伴',
  'nav.inventory': '库存',
  'nav.locations': '库位',
  'nav.balances': '库存余额',
  'nav.movements': '库存变动',
  'nav.orders': '订单',
  'nav.salesOrders': '销售订单',
  'nav.purchaseOrders': '采购订单',
  'nav.production': '生产',
  'nav.workOrders': '工单',
  'nav.shopFloor': '车间看板',
  'nav.finance': '财务',
  'nav.accounts': '科目表',
  'nav.journalEntries': '日记账',
  'nav.system': '系统',
  'nav.users': '用户',
  'nav.roles': '角色',

  // ─── 操作 ──────────────────────────────────────────────────
  'action.confirm': '确认',
  'action.ship': '发货',
  'action.receive': '收货',
  'action.cancel': '取消',
  'action.start': '开始',
  'action.complete': '完成',
  'action.create': '创建',
  'action.save': '保存',
  'action.back': '← 返回',
  'action.logout': '退出',
  'action.signIn': '登录',
  'action.signingIn': '登录中…',
  'action.creating': '创建中…',
  'action.addLine': '+ 添加行',
  'action.assign': '分配',
  'action.revoke': '撤销',
  'action.newItem': '+ 新物料',
  'action.newPartner': '+ 新合作伙伴',
  'action.newLocation': '+ 新库位',
  'action.newOrder': '+ 新订单',
  'action.newWorkOrder': '+ 新工单',
  'action.newUser': '+ 新用户',
  'action.newRole': '+ 新角色',
  'action.newAccount': '+ 新科目',
  'action.adjustStock': '库存调整',

  // ─── 状态 ──────────────────────────────────────────────────
  'status.DRAFT': '草稿',
  'status.CONFIRMED': '已确认',
  'status.SHIPPED': '已发货',
  'status.RECEIVED': '已收货',
  'status.COMPLETED': '已完成',
  'status.CANCELLED': '已取消',
  'status.IN_PROGRESS': '进行中',
  'status.PENDING': '待处理',
  'status.POSTED': '已过账',
  'status.SETTLED': '已结算',
  'status.REVERSED': '已冲销',

  // ─── 通用标签 ──────────────────────────────────────────────
  'label.code': '编码',
  'label.name': '名称',
  'label.type': '类型',
  'label.status': '状态',
  'label.active': '启用',
  'label.email': '邮箱',
  'label.phone': '电话',
  'label.total': '合计',
  'label.quantity': '数量',
  'label.unitPrice': '单价',
  'label.date': '日期',
  'label.currency': '币种',
  'label.description': '描述',
  'label.username': '用户名',
  'label.password': '密码',
  'label.signedInAs': '当前用户',
  'label.noRows': '暂无数据',
  'label.loading': '加载中…',
  'label.error': '错误',
}

export const locales = {
  'en-US': en,
  'zh-CN': zhCN,
} as const

export type LocaleCode = keyof typeof locales