@object-ui/i18n 6.2.3 → 7.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2,6 +2,33 @@
2
2
  * English (en) - Default language pack for Object UI
3
3
  */
4
4
  const en = {
5
+ lookup: {
6
+ recentlyUsed: 'Recently used',
7
+ allResults: 'All results',
8
+ loading: 'Loading…',
9
+ noOptions: 'No options found',
10
+ noRecords: 'No records found',
11
+ createNew: 'Create new',
12
+ createNamed: 'Create new "{{name}}"',
13
+ showingResults: 'Showing {{shown}} of {{total}} results',
14
+ showAllResults: 'Show all results ({{count}})',
15
+ selectedBadge: 'Selected',
16
+ browseAll: 'Browse all records',
17
+ remove: 'Remove {{label}}',
18
+ selectFirst: 'Select {{fields}} first',
19
+ selectRecord: 'Select record',
20
+ recordCount: '{{count}} records',
21
+ recordCountOne: '1 record',
22
+ pageOf: 'Page {{current}} of {{total}}',
23
+ filters: 'Filters',
24
+ clear: 'Clear',
25
+ yes: 'Yes',
26
+ filterPlaceholder: 'Filter {{label}}',
27
+ prevPage: 'Previous page',
28
+ nextPage: 'Next page',
29
+ jumpToPage: 'Jump to page',
30
+ retry: 'Retry',
31
+ },
5
32
  common: {
6
33
  loading: 'Loading...',
7
34
  save: 'Save',
@@ -39,6 +66,13 @@ const en = {
39
66
  openChat: 'Open chat',
40
67
  closeChat: 'Close chat',
41
68
  toggleSidebar: 'Toggle sidebar',
69
+ package: 'Package',
70
+ },
71
+ actions: {
72
+ resultDialog: {
73
+ defaultTitle: 'Save this value now',
74
+ acknowledge: 'I have saved this',
75
+ },
42
76
  },
43
77
  validation: {
44
78
  required: '{{field}} is required',
@@ -194,6 +228,7 @@ const en = {
194
228
  moreEvents: '+{{count}} more',
195
229
  },
196
230
  list: {
231
+ loading: 'Loading records…',
197
232
  recordCount: '{{count}} records',
198
233
  recordCountOne: '{{count}} record',
199
234
  addRecord: 'Add record',
@@ -216,6 +251,27 @@ const en = {
216
251
  hideFields: 'Hide fields',
217
252
  noItems: 'No items found',
218
253
  noItemsMessage: 'There are no records to display. Try adjusting your filters or adding new data.',
254
+ firstRunTitle: 'Nothing here yet',
255
+ firstRunMessage: 'Create your first record to get started.',
256
+ noMatches: 'No matching records',
257
+ noMatchesMessage: 'No records match your current filters or search. Try adjusting or clearing them.',
258
+ loadErrorTitle: 'Couldn\u2019t load records',
259
+ loadErrorMessage: 'Something went wrong while loading this data. Check your connection and try again.',
260
+ retry: 'Retry',
261
+ managedBy: {
262
+ system: {
263
+ title: 'Nothing here yet',
264
+ message: 'Entries appear automatically when their source action runs (e.g. Submit for Approval, Share, Invite). Trigger one of those on a source record to create a row.',
265
+ },
266
+ appendOnly: {
267
+ title: 'No events recorded',
268
+ message: 'This is an immutable audit log. Rows are written by the platform when events occur — you can export the history but cannot create entries from here.',
269
+ },
270
+ betterAuth: {
271
+ title: 'No identity records',
272
+ message: 'Identity rows are managed by the authentication provider. Use the dedicated identity workflows (Invite User, Reset Password, …) to create new entries.',
273
+ },
274
+ },
219
275
  showAll: 'Show all',
220
276
  pullToRefresh: 'Pull to refresh',
221
277
  refreshing: 'Refreshing…',
@@ -263,11 +319,71 @@ const en = {
263
319
  zoomOut: 'Zoom out',
264
320
  jumpToToday: 'Jump to today',
265
321
  today: 'Today',
322
+ thisWeek: 'This week',
323
+ thisMonth: 'This month',
266
324
  showTaskList: 'Show task list',
267
325
  hideTaskList: 'Hide task list',
326
+ viewMode: 'Timeline granularity',
327
+ enterFullscreen: 'Enter fullscreen',
328
+ exitFullscreen: 'Exit fullscreen',
329
+ criticalPath: 'Highlight critical path',
330
+ autoSchedule: 'Auto-schedule dependencies',
331
+ exportPng: 'Export as PNG',
332
+ exportPdf: 'Export PDF',
333
+ saveLayout: 'Save layout',
334
+ undo: 'Undo',
335
+ redo: 'Redo',
336
+ },
337
+ viewMode: {
338
+ day: 'Day',
339
+ week: 'Week',
340
+ month: 'Month',
341
+ quarter: 'Quarter',
342
+ year: 'Year',
268
343
  },
344
+ row: {
345
+ expand: 'Expand',
346
+ collapse: 'Collapse',
347
+ locate: 'Locate on timeline',
348
+ },
349
+ aria: {
350
+ taskList: 'Task list',
351
+ },
352
+ tooltip: {
353
+ days: 'd',
354
+ },
355
+ menu: {
356
+ view: 'View details',
357
+ edit: 'Edit inline',
358
+ delete: 'Delete',
359
+ addPredecessor: 'Add predecessor…',
360
+ addSuccessor: 'Add successor…',
361
+ removeDependency: 'Remove dependency',
362
+ noCandidates: 'No available tasks',
363
+ },
364
+ linkType: {
365
+ fs: 'Finish → Start',
366
+ ss: 'Start → Start',
367
+ ff: 'Finish → Finish',
368
+ sf: 'Start → Finish',
369
+ },
370
+ conflict: {
371
+ title: 'Schedule conflict',
372
+ body: 'This move conflicts with dependency constraints. Auto-reschedule {{count}} affected task(s)?',
373
+ confirm: 'Auto-reschedule',
374
+ cancel: 'Keep as is',
375
+ },
376
+ resource: {
377
+ header: 'Resource',
378
+ peak: 'Peak',
379
+ over: 'overloaded',
380
+ empty: 'No tasks to allocate.',
381
+ },
382
+ readOnly: 'Read-only',
383
+ readOnlyHint: 'Editing is disabled for this view.',
269
384
  },
270
385
  view: {
386
+ editViewConfig: 'Edit view config',
271
387
  rename: 'Rename',
272
388
  duplicateView: 'Duplicate View',
273
389
  shareView: 'Share View',
@@ -284,15 +400,17 @@ const en = {
284
400
  activeSort: 'Active sort',
285
401
  manageViews: 'Manage views',
286
402
  manageAllViews: 'Manage all views…',
403
+ manageViewsDescription: 'Reorder, rename, pin, or delete every view in this object.',
287
404
  searchViews: 'Search views',
288
405
  addNewView: 'Add new view',
289
406
  done: 'Done',
290
407
  noViewsFound: 'No views match your search.',
291
408
  dragToReorder: 'Drag to reorder',
292
409
  defaultView: 'Default view',
410
+ defaultBadge: 'default',
293
411
  tabActionsFor: 'View actions for {{name}}',
294
412
  readonlyAriaLabel: 'Read-only view',
295
- readonlyTooltip: 'System view — duplicate to customize.',
413
+ readonlyTooltip: 'System view — defined in code, read-only.',
296
414
  },
297
415
  detail: {
298
416
  back: 'Back',
@@ -378,6 +496,9 @@ const en = {
378
496
  minutesAgo: '{{count}}m ago',
379
497
  hoursAgo: '{{count}}h ago',
380
498
  daysAgo: '{{count}}d ago',
499
+ // Activity feed actors
500
+ systemActor: 'System',
501
+ unknownUser: 'Unknown',
381
502
  // Record meta footer (audit provenance)
382
503
  createdBy: 'Created by',
383
504
  updatedBy: 'Updated by',
@@ -452,6 +573,7 @@ const en = {
452
573
  loading: 'Loading chart...',
453
574
  },
454
575
  report: {
576
+ total: 'Total',
455
577
  rowTotal: 'Row Total',
456
578
  columnTotal: 'Column Total',
457
579
  grandTotal: 'Grand Total',
@@ -647,6 +769,10 @@ const en = {
647
769
  redo: 'Redo',
648
770
  resetZoom: 'Reset zoom',
649
771
  },
772
+ designer: {
773
+ undo: 'Undo',
774
+ redo: 'Redo',
775
+ },
650
776
  dashboard: {
651
777
  addWidget: 'Add widget',
652
778
  removeWidget: 'Remove widget',
@@ -656,6 +782,12 @@ const en = {
656
782
  total: 'Total',
657
783
  noDataAvailable: 'No data available',
658
784
  noDataSourceFor: 'No data source available for',
785
+ noRows: 'No rows',
786
+ pickMeasures: 'Pick measures (values) for this dataset widget.',
787
+ datasetUnsupported: 'This data source does not support dataset queries.',
788
+ details: 'Details',
789
+ exportCsv: 'Export CSV',
790
+ openInList: 'Open in list',
659
791
  trend: {
660
792
  vsLastQuarter: 'vs last quarter',
661
793
  vsLastMonth: 'vs last month',
@@ -876,7 +1008,7 @@ const en = {
876
1008
  },
877
1009
  },
878
1010
  console: {
879
- title: 'ObjectStack Console',
1011
+ title: 'ObjectOS',
880
1012
  initializing: 'Initializing application...',
881
1013
  search: 'Search…',
882
1014
  breadcrumb: {
@@ -926,6 +1058,7 @@ const en = {
926
1058
  toggleDarkMode: 'Toggle dark mode',
927
1059
  },
928
1060
  commandPalette: {
1061
+ title: 'Command palette',
929
1062
  placeholder: 'Type a command or search...',
930
1063
  noResults: 'No results found.',
931
1064
  searching: 'Searching…',
@@ -945,6 +1078,115 @@ const en = {
945
1078
  openFullSearch: 'Open Full Search Page',
946
1079
  createApp: 'Create New App',
947
1080
  },
1081
+ ai: {
1082
+ workspaceTitle: 'AI Workspace',
1083
+ workspaceSubtitle: 'Ask, inspect, and resume conversations',
1084
+ openChats: 'Open chats',
1085
+ chats: 'Chats',
1086
+ chatsDescription: 'Browse and manage AI conversations.',
1087
+ share: 'Share',
1088
+ shareTitle: 'Share this conversation',
1089
+ shareDisabledTitle: 'Start chatting to enable sharing',
1090
+ newChat: 'New',
1091
+ searchChats: 'Search chats...',
1092
+ noChatsYet: 'No chats yet',
1093
+ noChatsDescription: 'Start a new conversation to see it here.',
1094
+ noMatchingChats: 'No matching chats.',
1095
+ newConversation: 'New conversation',
1096
+ renameConversation: 'Rename conversation',
1097
+ deleteConversation: 'Delete conversation',
1098
+ saveRename: 'Save rename',
1099
+ cancelRename: 'Cancel rename',
1100
+ loadingHistory: 'Loading conversation history...',
1101
+ conversationReady: 'Conversation ready',
1102
+ preparingConversation: 'Preparing a new conversation',
1103
+ offlineDemoMode: 'Offline demo mode — agent list unavailable',
1104
+ askAgent: 'Ask {{agent}}...',
1105
+ assistant: 'Assistant',
1106
+ loadingAgents: 'Loading agents...',
1107
+ askAnything: 'Ask anything...',
1108
+ emptyTitle: 'Start a conversation',
1109
+ emptyDescription: 'Ask anything — the assistant has access to your current app context.',
1110
+ switchAssistant: 'Switch assistant',
1111
+ chooseAgent: 'Choose assistant…',
1112
+ empty: {
1113
+ build: {
1114
+ title: 'Build with AI',
1115
+ description: 'Describe an app or workflow in plain language — I draft the objects, screens and automations, then you review and publish.',
1116
+ },
1117
+ ask: {
1118
+ title: 'Ask your data',
1119
+ description: 'Ask questions about your records — counts, lists, and summaries across the data you can access.',
1120
+ },
1121
+ },
1122
+ clearConversation: 'Clear',
1123
+ sendHint: 'to send',
1124
+ agentActivity: 'Agent activity',
1125
+ toolCompleted: 'Completed',
1126
+ toolRunning: 'Running',
1127
+ toolAwaitingApproval: 'Awaiting approval',
1128
+ toolFailed: 'Failed',
1129
+ toolDetailsHidden: 'Tool inputs and raw results are hidden in this view.',
1130
+ copy: 'Copy',
1131
+ copied: 'Copied',
1132
+ regenerate: 'Regenerate',
1133
+ model: 'Model',
1134
+ submit: 'Submit',
1135
+ uploadFiles: 'Upload files',
1136
+ stopResponse: 'Stop response',
1137
+ trace: 'trace',
1138
+ viewTrace: 'View trace',
1139
+ // Build-flow draft + "Proposed plan" confirm-gate card (AiChatPage /ai/build).
1140
+ // Mirror the ConsoleFloatingChatbot locale object so both AI surfaces match.
1141
+ nextSteps: "What's next",
1142
+ publishDrafts: 'Publish',
1143
+ publishOk: 'Published — objects are now live.',
1144
+ seedWarn: 'Published, but some sample data failed to load.',
1145
+ openBuiltApp: 'Open app',
1146
+ previewDraft: 'Preview',
1147
+ resizeSplit: 'Resize chat and preview',
1148
+ hideChats: 'Hide chats',
1149
+ showChats: 'Show chats',
1150
+ planTitle: 'Proposed plan',
1151
+ planQuestions: 'Confirm before building',
1152
+ planAssumptions: 'Assumptions',
1153
+ planApproveHint: 'Reply to approve or adjust this plan.',
1154
+ planApprove: 'Build it',
1155
+ planAdjust: 'Adjust',
1156
+ planApproveMessage: 'Looks good — build it as proposed.',
1157
+ planApproveDefaultsMessage: 'Build it with your best assumptions; use sensible defaults for the open questions.',
1158
+ planAnswerMessage: 'For "{{question}}", go with: {{option}}.',
1159
+ justNow: 'just now',
1160
+ minutesAgo: '{{count}}m ago',
1161
+ hoursAgo: '{{count}}h ago',
1162
+ daysAgo: '{{count}}d ago',
1163
+ agentLabels: {
1164
+ ask: 'Ask',
1165
+ build: 'Build',
1166
+ // Legacy keys kept for back-compat with any external overrides.
1167
+ dataChat: 'Assistant',
1168
+ metadataAssistant: 'Metadata Assistant',
1169
+ },
1170
+ suggestions: {
1171
+ dataChat: {
1172
+ userCount: 'How many users are in the system? List their emails.',
1173
+ recentRecords: 'List the 5 most recently created records.',
1174
+ recordCounts: 'Count records for each object.',
1175
+ },
1176
+ metadataAssistant: {
1177
+ buildCrm: 'Build a sales CRM — customers, contacts, and a deal pipeline I can total by stage.',
1178
+ buildApp: 'Create a project tracker — projects, tasks with owners and due dates, and a board by status.',
1179
+ buildFlow: 'Design a support desk — tickets with priority, a status workflow, and customer links.',
1180
+ buildInventory: 'Build an inventory app — products, stock levels, suppliers, and low-stock visibility.',
1181
+ buildRecruiting: 'Make an applicant tracker — candidates, open roles, interview stages, and notes.',
1182
+ },
1183
+ generic: {
1184
+ help: 'What can you help me with?',
1185
+ availableObjects: 'List the available data objects.',
1186
+ recentActivity: 'Summarize my recent activity.',
1187
+ },
1188
+ },
1189
+ },
948
1190
  errors: {
949
1191
  somethingWentWrong: 'Something went wrong',
950
1192
  unexpectedError: 'An unexpected error occurred while rendering this view.',
@@ -962,6 +1204,8 @@ const en = {
962
1204
  objectNotFound: 'Object Not Found',
963
1205
  objectNotFoundDescription: 'The object "{{objectName}}" does not exist in the current configuration.',
964
1206
  objectNotFoundHint: 'Check your app navigation settings or select a different object from the sidebar.',
1207
+ systemViewReadonly: 'System view defined in code — read-only.',
1208
+ expandToPage: 'Open as full page',
965
1209
  allRecords: 'All Records',
966
1210
  exitDesignMode: 'Exit Design Mode',
967
1211
  enterDesignMode: 'Enter Design Mode',
@@ -1175,6 +1419,12 @@ const en = {
1175
1419
  submittingButton: 'Signing in...',
1176
1420
  noAccountText: "Don't have an account?",
1177
1421
  signUpText: 'Sign up',
1422
+ signingIn: 'Signing you in…',
1423
+ ssoHandoff: 'Continue to {{target}}',
1424
+ errors: {
1425
+ invalidCredentials: 'Invalid email or password. Please try again.',
1426
+ emailNotVerified: 'Please verify your email address before signing in.',
1427
+ },
1178
1428
  },
1179
1429
  register: {
1180
1430
  title: 'Create an account',
@@ -1193,6 +1443,17 @@ const en = {
1193
1443
  submittingButton: 'Creating account...',
1194
1444
  hasAccountText: 'Already have an account?',
1195
1445
  signInText: 'Sign in',
1446
+ errors: {
1447
+ userExists: 'An account with this email already exists. Try signing in instead.',
1448
+ },
1449
+ verifyInbox: {
1450
+ title: 'Check your inbox',
1451
+ description: "We've sent a verification link to {{email}}. Click the link to activate your account.",
1452
+ resend: 'Resend verification email',
1453
+ resending: 'Sending…',
1454
+ resent: 'Verification email sent.',
1455
+ backToSignIn: 'Back to sign in',
1456
+ },
1196
1457
  },
1197
1458
  forgotPassword: {
1198
1459
  title: 'Reset your password',
@@ -1207,6 +1468,85 @@ const en = {
1207
1468
  rememberPasswordText: 'Remember your password?',
1208
1469
  signInText: 'Sign in',
1209
1470
  },
1471
+ resetPassword: {
1472
+ title: 'Set a new password',
1473
+ description: 'Choose a password you have not used before.',
1474
+ newPassword: 'New password',
1475
+ confirmPassword: 'Confirm password',
1476
+ submit: 'Update password',
1477
+ submitting: 'Updating…',
1478
+ success: 'Password updated',
1479
+ failed: 'Reset failed',
1480
+ invalidToken: 'This reset link is invalid or has expired.',
1481
+ missingToken: 'Reset link is missing or expired',
1482
+ passwordsMismatch: 'Passwords do not match',
1483
+ requestNewLink: 'Request a new link',
1484
+ },
1485
+ verifyEmail: {
1486
+ title: 'Verify your email address',
1487
+ description: 'We sent a verification link to your email address. Please click the link to verify your account.',
1488
+ sentTo: 'Sent to:',
1489
+ verifyingTitle: 'Verifying…',
1490
+ verifyingDescription: 'Hang tight while we confirm your email.',
1491
+ successTitle: 'Email verified',
1492
+ successDescription: 'Your email is confirmed. You can now sign in.',
1493
+ errorTitle: 'Verification failed',
1494
+ errorDescription: 'Verification failed. Please request a new link.',
1495
+ missingToken: 'Verification link is missing a token.',
1496
+ emailMissing: 'Email address is missing',
1497
+ resendButton: 'Resend verification email',
1498
+ resending: 'Sending…',
1499
+ resent: 'Email sent! Check your inbox',
1500
+ resentSuccess: 'Verification email sent!',
1501
+ resentDescription: 'Please check your inbox and click the verification link.',
1502
+ resendFailed: 'Cannot resend verification email',
1503
+ signInLink: 'Go to sign in',
1504
+ backToSignIn: 'Back to sign in',
1505
+ backToLogin: 'Back to login',
1506
+ checkSpam: "Didn't receive the email? Check your spam folder or contact support.",
1507
+ or: 'Or',
1508
+ },
1509
+ setup: {
1510
+ welcomeTitle: 'Welcome to ObjectStack',
1511
+ description: 'Create the first owner account to finish setting up this deployment.',
1512
+ yourName: 'Your name',
1513
+ orgName: 'Organization name',
1514
+ orgNamePlaceholder: 'Acme Inc.',
1515
+ emailLabel: 'Email',
1516
+ emailPlaceholder: 'name@example.com',
1517
+ passwordLabel: 'Password',
1518
+ passwordHint: 'Minimum 8 characters',
1519
+ submit: 'Create owner account',
1520
+ submitting: 'Setting up…',
1521
+ failed: 'Setup failed',
1522
+ },
1523
+ device: {
1524
+ title: 'Authorize new device',
1525
+ subtitle: 'Approve this device to sign in as {{email}}.',
1526
+ userCodeLabel: 'Device code',
1527
+ requesterLabel: 'Connection request from',
1528
+ approveWarning: 'Only approve if you started this connection yourself a moment ago. Once approved, this runtime can access your organization\'s private packages.',
1529
+ loggedInAs: 'Signed in as {{email}}',
1530
+ approve: 'Approve device',
1531
+ approving: 'Approving…',
1532
+ approvedTitle: 'Device authorized',
1533
+ approvedDescription: 'You can return to the device — it should sign in shortly.',
1534
+ approveSuccess: 'Device authorized',
1535
+ approveSuccessDescription: 'You can close this window.',
1536
+ approveFailed: 'Approval failed',
1537
+ deny: 'Deny request',
1538
+ denying: 'Denying…',
1539
+ deniedTitle: 'Access denied',
1540
+ deniedDescription: 'The device will not be granted access.',
1541
+ denyFailed: 'Failed to deny request',
1542
+ invalidTitle: 'Invalid device link',
1543
+ invalidDescription: 'No device code was provided in the URL.',
1544
+ loading: 'Loading…',
1545
+ cancel: 'Cancel',
1546
+ },
1547
+ shell: {
1548
+ tenantHostHint: 'You are signing in to this workspace',
1549
+ },
1210
1550
  },
1211
1551
  errors: {
1212
1552
  networkError: 'Network error. Please check your connection.',
@@ -1233,6 +1573,13 @@ const en = {
1233
1573
  members: 'Members',
1234
1574
  settings: 'Workspace settings',
1235
1575
  },
1576
+ help: {
1577
+ onThisPage: 'On this page',
1578
+ appDocs: "This app's docs",
1579
+ allDocs: 'All documentation',
1580
+ keyboardShortcuts: 'Keyboard shortcuts',
1581
+ onlineDocs: 'Online documentation',
1582
+ },
1236
1583
  sidebar: {
1237
1584
  settings: 'Settings',
1238
1585
  help: 'Help',
@@ -1243,11 +1590,28 @@ const en = {
1243
1590
  inbox: 'Inbox',
1244
1591
  inboxAriaLabel: 'Open inbox',
1245
1592
  area: 'Area',
1593
+ scope: 'Scope',
1594
+ packageManagement: 'Package management',
1595
+ searchNavigation: 'Search navigation...',
1246
1596
  recent: 'Recent',
1247
1597
  favorites: 'Favorites',
1248
1598
  starred: 'Starred',
1249
1599
  removeFromFavorites: 'Remove {{name}} from favorites',
1250
1600
  },
1601
+ topbar: {
1602
+ aiAssistant: 'AI Assistant',
1603
+ openAssistant: 'Open {{name}} assistant',
1604
+ offline: 'Offline',
1605
+ usersOnline: 'Users currently online',
1606
+ switchView: 'Switch view',
1607
+ connection: {
1608
+ connected: 'Connected',
1609
+ connecting: 'Connecting...',
1610
+ reconnecting: 'Reconnecting...',
1611
+ disconnected: 'Disconnected',
1612
+ error: 'Connection Error',
1613
+ },
1614
+ },
1251
1615
  home: {
1252
1616
  title: 'Home',
1253
1617
  subtitle: 'Your workspace dashboard',
@@ -1267,9 +1631,28 @@ const en = {
1267
1631
  loading: 'Loading workspace...',
1268
1632
  recent: 'Recent',
1269
1633
  starred: 'Starred',
1270
- welcome: 'Welcome to ObjectUI',
1271
- welcomeDescription: 'Get started by creating your first application or configure your system settings.',
1272
- createFirstApp: 'Create Your First App',
1634
+ welcome: 'Build your business system with AI',
1635
+ welcomeDescription: 'Describe your business in one sentence — AI generates the objects, screens, APIs and agent tools. Or start from scratch.',
1636
+ welcomeAdminDescription: 'Describe your business in one sentence — AI generates the objects, screens, APIs and agent tools. Or set things up yourself from the menu on the left.',
1637
+ welcomeAdminDescriptionNoBuild: 'Set up your first application from the Administration menu on the left. Once you have data, the AI assistant can help you explore it.',
1638
+ welcomeAdminDescriptionNoAi: 'Set up your first application from the Administration menu on the left.',
1639
+ noAppsTitle: 'No applications yet',
1640
+ noAppsDescription: 'There are no applications available to you yet. Please contact your workspace administrator.',
1641
+ buildWithAI: 'Build with AI',
1642
+ askAI: 'Ask AI',
1643
+ recoveryReminder: {
1644
+ message: 'Set a recovery password so you can still sign in if single sign-on is ever unavailable.',
1645
+ cta: 'Set password',
1646
+ dismiss: 'Dismiss',
1647
+ },
1648
+ pendingDrafts: {
1649
+ message: 'You have {{count}} unpublished change(s) — publish to make them live.',
1650
+ cta: 'Publish',
1651
+ publishing: 'Publishing…',
1652
+ published: 'Published! Your changes are live.',
1653
+ publishFailed: 'Publish failed',
1654
+ },
1655
+ createFirstApp: 'Create app manually',
1273
1656
  systemSettings: 'System Settings',
1274
1657
  browseMarketplace: 'Browse App Marketplace',
1275
1658
  quickActions: {
@@ -1306,12 +1689,25 @@ const en = {
1306
1689
  layout: {
1307
1690
  appSwitcher: {
1308
1691
  home: 'Home',
1692
+ switchApplication: 'Switch Application',
1693
+ appsAvailable: '{{count}} apps available',
1309
1694
  addApp: 'Add App',
1310
1695
  editApp: 'Edit App',
1311
1696
  manageAllApps: 'Manage All Apps',
1312
1697
  systemConsole: 'System Console',
1313
1698
  noAppsConfigured: 'No apps configured',
1314
1699
  },
1700
+ systemNav: {
1701
+ systemSettings: 'System Settings',
1702
+ applications: 'Applications',
1703
+ appMarketplace: 'App Marketplace',
1704
+ objectManager: 'Object Manager',
1705
+ users: 'Users',
1706
+ organizations: 'Organizations',
1707
+ roles: 'Roles',
1708
+ configuration: 'Configuration',
1709
+ createApp: 'Create App',
1710
+ },
1315
1711
  activityFeed: {
1316
1712
  title: 'Recent Activity',
1317
1713
  filter: 'Filter',
@@ -1372,6 +1768,32 @@ const en = {
1372
1768
  systemSettings: 'System Settings',
1373
1769
  back: 'Back',
1374
1770
  },
1771
+ preview: {
1772
+ empty: {
1773
+ loadFailedTitle: 'Draft preview failed to load',
1774
+ loadFailedDescription: 'The draft overlay could not be read. Retry, or check your connection.',
1775
+ notReadyTitle: '“{{app}}” isn’t in the draft yet',
1776
+ notReadyDescription: 'The build may still be running, or it may have failed before this app was staged. Check the conversation for the build status — this pane refreshes as drafts land.',
1777
+ nothingTitle: 'Nothing to preview yet',
1778
+ retry: 'Retry',
1779
+ },
1780
+ draftBar: {
1781
+ message: 'Draft preview — you are seeing unpublished changes. Nothing here is live until you publish.',
1782
+ publish: 'Publish',
1783
+ publishing: 'Publishing…',
1784
+ exit: 'Exit preview',
1785
+ changes: 'Changes',
1786
+ },
1787
+ changes: {
1788
+ title: 'Pending changes',
1789
+ description: 'What publishing will change. New items are added; updates overwrite the live version.',
1790
+ loading: 'Loading pending changes…',
1791
+ loadFailed: 'Could not load pending changes:',
1792
+ empty: 'Nothing pending — every draft has been published.',
1793
+ kindNew: 'New',
1794
+ kindUpdate: 'Update',
1795
+ },
1796
+ },
1375
1797
  renderer: {
1376
1798
  noPageSchema: 'No page schema provided',
1377
1799
  noFormSchema: 'No form schema provided',
@@ -1399,6 +1821,11 @@ const en = {
1399
1821
  defaultActionTitle: 'Action',
1400
1822
  ok: 'OK',
1401
1823
  },
1824
+ actionConfirm: {
1825
+ title: 'Confirm Action',
1826
+ confirm: 'Continue',
1827
+ cancel: 'Cancel',
1828
+ },
1402
1829
  rowAction: {
1403
1830
  openMenu: 'Open menu',
1404
1831
  edit: 'Edit',
@@ -1464,6 +1891,7 @@ const en = {
1464
1891
  noMatches: 'No organizations match your search.',
1465
1892
  },
1466
1893
  notifications: {
1894
+ regionLabel: 'Notifications',
1467
1895
  empty: 'No notifications',
1468
1896
  emptyUnread: "You're all caught up",
1469
1897
  filterUnread: 'Unread',
@@ -1582,12 +2010,23 @@ const en = {
1582
2010
  prerelease: 'pre',
1583
2011
  moreOptions: 'More install options',
1584
2012
  uninstallFromRuntime: 'Uninstall from this runtime',
2013
+ addSampleData: 'Add sample data',
2014
+ reseedAgain: 'Re-seed sample data',
2015
+ purgeSampleData: 'Purge sample data',
2016
+ purgeConfirm: 'Delete all sample records seeded by this package? User-added records will NOT be touched.',
2017
+ purgeSuccess: 'Removed {{count}} sample record(s).',
2018
+ purgeNoData: 'No sample records found to purge.',
2019
+ reseedQueued: 'Sample data will be re-seeded on next environment access.',
2020
+ reseedLocalSuccess: 'Re-seeded sample data: {{inserted}} inserted, {{updated}} updated.',
2021
+ reseedPartialErrors: '({{count}} record(s) failed to write)',
2022
+ updateAvailable: 'Update available',
1585
2023
  },
1586
2024
  action: {
1587
2025
  install: 'Install',
1588
2026
  reinstall: 'Reinstall',
1589
2027
  working: 'Working…',
1590
2028
  installToCloud: 'Install to cloud…',
2029
+ installed: 'Installed',
1591
2030
  installing: 'Installing…',
1592
2031
  uninstall: 'Uninstall',
1593
2032
  uninstalling: 'Uninstalling…',
@@ -1654,5 +2093,197 @@ const en = {
1654
2093
  yearsAgo: '{{count}}y ago',
1655
2094
  },
1656
2095
  },
2096
+ approvalsInbox: {
2097
+ loadMore: 'Load more',
2098
+ loadingMore: 'Loading…',
2099
+ loadedOf: 'Loaded {{loaded}} of {{total}}',
2100
+ actEscalate: 'SLA escalated',
2101
+ systemSlaActor: 'System (SLA)',
2102
+ reassignBtn: 'Reassign',
2103
+ reassignTitle: 'Hand this approval to someone else?',
2104
+ reassignBody: 'Your approver slot moves to the person you pick — they are notified and can act immediately.',
2105
+ reassignTo: 'New approver',
2106
+ reassignToPlaceholder: 'Pick a user or type an email / role:<name>',
2107
+ reassignSuccess: 'Handed to {{to}}',
2108
+ requestInfoBtn: 'Request info',
2109
+ requestInfoTitle: 'Ask the requester for more information?',
2110
+ requestInfoBody: 'The request stays pending; the requester is notified and can reply on the thread.',
2111
+ requestInfoPlaceholder: 'What do you need from the requester?',
2112
+ requestInfoSent: 'Sent back to the requester for more information',
2113
+ remindBtn: 'Send reminder',
2114
+ remindSuccess: 'Reminder sent to {{count}} approver(s)',
2115
+ remindThrottled: 'A reminder was sent recently — try again later.',
2116
+ replyPlaceholder: 'Reply on this request…',
2117
+ slaRemaining: 'SLA {{dur}} left',
2118
+ slaOverdue: 'SLA overdue {{dur}}',
2119
+ actReassign: 'Reassigned',
2120
+ actRemind: 'Reminder sent',
2121
+ actRequestInfo: 'Requested more info',
2122
+ actComment: 'Commented',
2123
+ stepProgress: 'Approval steps',
2124
+ prevRequest: 'Previous',
2125
+ nextRequest: 'Next',
2126
+ positionOf: '{{index}} of {{total}}',
2127
+ quickPhrase1: 'Approved — meets requirements.',
2128
+ quickPhrase2: 'Approved with conditions — please monitor execution.',
2129
+ quickPhrase3: 'Please add supporting material and resubmit.',
2130
+ title: 'Approvals Inbox',
2131
+ subtitle: 'Review and act on approval requests.',
2132
+ refresh: 'Refresh',
2133
+ tabMyPending: 'My Pending',
2134
+ tabSubmitted: 'Submitted by me',
2135
+ tabAll: 'All',
2136
+ searchPlaceholder: 'Search record, process, requester…',
2137
+ clearSearch: 'Clear search',
2138
+ statusFilter: 'Status',
2139
+ allStatuses: 'All statuses',
2140
+ processFilter: 'Process',
2141
+ allProcesses: 'All processes',
2142
+ objectFilter: 'Object',
2143
+ allObjects: 'All objects',
2144
+ filterCount: '{{shown}} of {{total}}',
2145
+ selected: 'selected',
2146
+ actionableCount: '({{count}} actionable)',
2147
+ selectAll: 'Select all',
2148
+ selectRow: 'Select request',
2149
+ colRequest: 'Request',
2150
+ colRecord: 'Record',
2151
+ colRequester: 'Requester',
2152
+ colStatus: 'Status',
2153
+ colWaiting: 'Submitted',
2154
+ colActions: 'Actions',
2155
+ statusPending: 'Pending',
2156
+ statusApproved: 'Approved',
2157
+ statusRejected: 'Rejected',
2158
+ statusRecalled: 'Recalled',
2159
+ statusReturned: 'Returned for revision',
2160
+ sendBackBtn: 'Send back',
2161
+ sendBackTitle: 'Send this request back for revision?',
2162
+ sendBackBody: 'This round ends and the record unlocks so the requester can fix the data. When they resubmit, a fresh approval round opens for all approvers.',
2163
+ sendBackPlaceholder: 'What needs to be fixed before this can be approved?',
2164
+ sendBackSuccess: 'Sent back for revision — the requester can now edit and resubmit',
2165
+ sendBackAutoRejected: 'Revision limit reached — the request was auto-rejected',
2166
+ actRevise: 'Sent back for revision',
2167
+ actResubmit: 'Resubmitted',
2168
+ roundChip: 'Round {{n}}',
2169
+ returnedHint: 'An approver sent this back to you. The record is unlocked — fix the data, then resubmit to start a new approval round.',
2170
+ resubmitBtn: 'Resubmit',
2171
+ resubmitting: 'Resubmitting…',
2172
+ resubmitSuccess: 'Resubmitted — a new approval round has opened',
2173
+ resubmitPlaceholder: 'What did you change?',
2174
+ editRecordBtn: 'Edit record',
2175
+ abandonTitle: 'Abandon this revision?',
2176
+ abandonBody: 'This withdraws the request instead of resubmitting it. The approval ends here.',
2177
+ emptyTitle: 'No requests',
2178
+ emptyPending: "You're all caught up — nothing is waiting on you.",
2179
+ emptyOther: 'Nothing here yet.',
2180
+ emptyViewAll: 'Browse all requests',
2181
+ noMatches: 'No matches for current filters.',
2182
+ keyboardHint: 'Keyboard: j/k move · Enter open · x select · a approve · r reject',
2183
+ drawerTitle: 'Approval Request',
2184
+ submittedAgo: 'Submitted {{when}}',
2185
+ completedAt: 'Completed {{when}}',
2186
+ waitingOn: 'Waiting on',
2187
+ history: 'Activity',
2188
+ noActions: 'No actions yet.',
2189
+ actSubmit: 'Submitted',
2190
+ actApprove: 'Approved',
2191
+ actReject: 'Rejected',
2192
+ actRecall: 'Recalled',
2193
+ rawData: 'Raw data (JSON)',
2194
+ copy: 'Copy',
2195
+ copied: 'Copied',
2196
+ copyFailed: 'Copy failed',
2197
+ overrideActor: 'Act as another identity (admin)',
2198
+ actor: 'Actor',
2199
+ auto: 'Auto',
2200
+ overrideHint: 'e.g. role:sales_manager. Leave blank to use the auto-detected identity.',
2201
+ comment: 'Comment (optional)',
2202
+ approve: 'Approve',
2203
+ approving: 'Approving…',
2204
+ reject: 'Reject',
2205
+ rejecting: 'Rejecting…',
2206
+ recall: 'Recall',
2207
+ recalling: 'Recalling…',
2208
+ cancel: 'Cancel',
2209
+ clear: 'Clear',
2210
+ approveN: 'Approve {{count}}',
2211
+ rejectN: 'Reject {{count}}',
2212
+ bulkApproveTitle: 'Approve {{count}} requests?',
2213
+ bulkApproveBody: 'Each request is approved with your identity and its flow continues down the approve branch.',
2214
+ bulkRejectTitle: 'Reject {{count}} requests?',
2215
+ bulkRejectBody: 'This rejects the selected requests and notifies their submitters.',
2216
+ bulkApproved: 'Approved {{count}} requests',
2217
+ bulkRejected: 'Rejected {{count}} requests',
2218
+ bulkPartial: '{{ok}} succeeded, {{fail}} failed: {{which}}',
2219
+ rejectOneTitle: 'Reject "{{title}}"?',
2220
+ rejectOneBody: 'This rejects the request and notifies the submitter.',
2221
+ rejectTitle: 'Reject this request?',
2222
+ rejectBody: 'This marks the request as rejected and notifies the submitter.',
2223
+ recallTitle: 'Recall this request?',
2224
+ recallBody: 'This withdraws your request. Approvers can no longer act on it, and the record is unlocked.',
2225
+ inlineApproved: 'Approved "{{title}}"',
2226
+ inlineRejected: 'Rejected "{{title}}"',
2227
+ approvedFinal: 'Approved',
2228
+ approvedWaiting: 'Approved — waiting on the remaining approvers',
2229
+ rejectedToast: 'Rejected',
2230
+ recalledToast: 'Request recalled',
2231
+ whyDisabled: 'Only the assigned approvers can act on this request. It is waiting on: {{who}}.',
2232
+ whyDisabledSubmitter: 'You submitted this request, so you can recall it — but only the assigned approvers can approve or reject.',
2233
+ noActor: 'Cannot determine the acting identity',
2234
+ actionFailed: 'Action failed',
2235
+ loadFailed: 'Failed to load request',
2236
+ recallUnavailable: 'Recall is not available on this deployment.',
2237
+ requestGone: 'This request no longer exists. Refresh the list.',
2238
+ notAllowed: 'You are not allowed to perform this action.',
2239
+ alreadyDecided: 'This request was already decided. Refresh the list.',
2240
+ justNow: 'just now',
2241
+ minutesAgo: '{{count}}m ago',
2242
+ hoursAgo: '{{count}}h ago',
2243
+ daysAgo: '{{count}}d ago',
2244
+ },
2245
+ filterBuilder: {
2246
+ where: 'Where',
2247
+ and: 'AND',
2248
+ or: 'OR',
2249
+ clearAll: 'Clear all',
2250
+ selectField: 'Select field',
2251
+ operator: 'Operator',
2252
+ selectValue: 'Select value',
2253
+ value: 'Value',
2254
+ addFilter: 'Add filter',
2255
+ removeCondition: 'Remove condition',
2256
+ trueLabel: 'True',
2257
+ falseLabel: 'False',
2258
+ noResults: 'No results',
2259
+ searchField: 'Search {{label}}…',
2260
+ enterId: 'Enter {{label}} id',
2261
+ operators: {
2262
+ equals: 'Equals',
2263
+ notEquals: 'Does not equal',
2264
+ contains: 'Contains',
2265
+ notContains: 'Does not contain',
2266
+ isEmpty: 'Is empty',
2267
+ isNotEmpty: 'Is not empty',
2268
+ greaterThan: 'Greater than',
2269
+ lessThan: 'Less than',
2270
+ greaterOrEqual: 'Greater than or equal',
2271
+ lessOrEqual: 'Less than or equal',
2272
+ before: 'Before',
2273
+ after: 'After',
2274
+ between: 'Between',
2275
+ in: 'In',
2276
+ notIn: 'Not in',
2277
+ },
2278
+ },
2279
+ sortBuilder: {
2280
+ sortBy: 'Sort by',
2281
+ thenBy: 'Then by',
2282
+ selectField: 'Select field',
2283
+ ascending: 'A → Z',
2284
+ descending: 'Z → A',
2285
+ addSort: 'Add sort',
2286
+ removeSort: 'Remove sort',
2287
+ },
1657
2288
  };
1658
2289
  export default en;