// 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', 'nav.metadataAdmin': 'Metadata', // ─── 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', 'action.addField': 'Add Field', 'action.addSection': 'Add Section', 'action.discard': 'Discard', 'action.delete': 'Delete', 'action.newCustomField': 'New Custom Field', // ─── 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', // ─── Metadata admin ─────────────────────────────────────── 'page.metadataAdmin.title': 'Metadata Admin', 'tab.entities': 'Entities', 'tab.customFields': 'Custom Fields', 'tab.permissions': 'Permissions', 'tab.menus': 'Menus', 'tab.forms': 'Forms', 'tab.listViews': 'List Views', 'page.formDesigner.title': 'Form Designer', 'page.listViewDesigner.title': 'List View Designer', 'label.slug': 'Slug', 'label.entity': 'Entity', 'label.purpose': 'Purpose', 'label.preview': 'Preview', 'label.source': 'Source', 'label.columns': 'Columns', 'label.filters': 'Filters', 'label.sorting': 'Sorting', 'label.pageSize': 'Page Size', 'label.fieldKey': 'Field Key', 'label.targetEntity': 'Target Entity', 'label.fieldType': 'Field Type', 'confirm.delete': 'Are you sure?', // ─── Workflow / tasks ───────────────────────────────────── 'nav.workflow': 'Workflow', 'nav.tasks': 'Tasks', 'page.tasks.title': 'Pending Tasks', 'page.tasks.subtitle': 'Workflow tasks waiting for action', 'page.taskDetail.title': 'Task Detail', // ─── Rules ──────────────────────────────────────────────── 'tab.rules': 'Rules', 'label.triggerEvent': 'Trigger Event', 'label.conditions': 'Conditions', 'label.actions': 'Actions', 'label.enabled': 'Enabled', 'label.conditionLogic': 'Logic', 'action.newRule': 'New Rule', // ─── ERP form ───────────────────────────────────────────── 'page.salesOrder.create.title': 'New Sales Order', 'label.orderCode': 'Order Code', 'label.orderDate': 'Order Date', 'label.customer': 'Customer', 'label.createdBy': 'Created By', 'label.createdAt': 'Created At', 'label.autoGenerated': 'Auto-generated', 'tab.orderLines': 'Order Lines', 'label.item': 'Item', 'label.lineTotal': 'Line Total', 'label.selectItem': 'Select item...', 'label.orderTotal': 'Order Total', 'label.customFields': 'Custom Fields', 'action.addRow': 'Add Row', 'action.removeRow': 'Remove', } 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': '角色', 'nav.metadataAdmin': '元数据', // ─── 操作 ────────────────────────────────────────────────── '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': '库存调整', 'action.addField': '添加字段', 'action.addSection': '添加分区', 'action.discard': '放弃', 'action.delete': '删除', 'action.newCustomField': '新建自定义字段', // ─── 状态 ────────────────────────────────────────────────── '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': '错误', // ─── 元数据管理 ──────────────────────────────────────────── 'page.metadataAdmin.title': '元数据管理', 'tab.entities': '实体', 'tab.customFields': '自定义字段', 'tab.permissions': '权限', 'tab.menus': '菜单', 'tab.forms': '表单', 'tab.listViews': '列表视图', 'page.formDesigner.title': '表单设计器', 'page.listViewDesigner.title': '列表视图设计器', 'label.slug': '标识', 'label.entity': '实体', 'label.purpose': '用途', 'label.preview': '预览', 'label.source': '来源', 'label.columns': '列', 'label.filters': '筛选', 'label.sorting': '排序', 'label.pageSize': '每页行数', 'label.fieldKey': '字段键', 'label.targetEntity': '目标实体', 'label.fieldType': '字段类型', 'confirm.delete': '确定删除?', // ─── 工作流 / 任务 ──────────────────────────────────────── 'nav.workflow': '工作流', 'nav.tasks': '任务', 'page.tasks.title': '待办任务', 'page.tasks.subtitle': '等待处理的工作流任务', 'page.taskDetail.title': '任务详情', // ─── 规则 ───────────────────────────────────────────────── 'tab.rules': '规则', 'label.triggerEvent': '触发事件', 'label.conditions': '条件', 'label.actions': '动作', 'label.enabled': '启用', 'label.conditionLogic': '逻辑', 'action.newRule': '新建规则', // ─── ERP 表单 ───────────────────────────────────────────── 'page.salesOrder.create.title': '新建销售订单', 'label.orderCode': '订单编码', 'label.orderDate': '订单日期', 'label.customer': '客户', 'label.createdBy': '创建人', 'label.createdAt': '创建时间', 'label.autoGenerated': '自动生成', 'tab.orderLines': '订单明细', 'label.item': '物料', 'label.lineTotal': '行合计', 'label.selectItem': '请选择物料...', 'label.orderTotal': '订单合计', 'label.customFields': '自定义字段', 'action.addRow': '添加行', 'action.removeRow': '删除', } export const locales = { 'en-US': en, 'zh-CN': zhCN, } as const export type LocaleCode = keyof typeof locales