// 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 = { // ─── 导航 ────────────────────────────────────────────────── '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