-
Replace every hardcoded English string across all 35 SPA page files with useT() calls backed by message keys in messages.ts. Both en-US and zh-CN translations are provided for every key (~200 new keys). Pages updated: DashboardPage, LoginPage, FormDesignerPage, ListViewDesignerPage, MetadataAdminPage, SalesOrderDetailPage, PurchaseOrderDetailPage, WorkOrderDetailPage, ShopFloorPage, UserTasksPage, TaskDetailPage, UserDetailPage, all Create* pages, all Edit* pages, and all list pages (Items, Partners, Locations, Balances, Movements, SalesOrders, PurchaseOrders, WorkOrders, Users, Roles, Accounts, JournalEntries, UoMs, AdjustStock).
-
Two more operator-facing forms: - CreateLocationPage: code, name, type (WAREHOUSE/BIN/VIRTUAL) - AdjustStockPage: item dropdown, location dropdown, absolute quantity. Creates the balance row if absent; sets it to the given value if present. Shows the resulting balance inline. API client: inventory.createLocation, inventory.adjustBalance. Locations list gets "+ New Location"; Balances list gets "Adjust Stock". Routes wired at /locations/new and /balances/adjust. With this commit, every PBC entity that operators need to create or manage has a SPA form: items, partners, locations, stock balances, sales orders, purchase orders, work orders (with BOM + routing), users, and roles. The only create-less entities are journal entries (read-only, event-driven) and stock movements (append-only ledger).