@object-ui/i18n 17.1.0 → 17.3.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.
@@ -85,6 +85,12 @@ const en = {
85
85
  select: 'Select...',
86
86
  openChat: 'Open chat',
87
87
  closeChat: 'Close chat',
88
+ closePanel: 'Close panel',
89
+ resizeDrawer: 'Resize drawer',
90
+ // Count badge on a tab / section header. Two keys, NOT an i18next
91
+ // `_one`/`_other` pair — see the `reactionCount` note under `detail`.
92
+ itemCount: '{{count}} items',
93
+ itemCountOne: '{{count}} item',
88
94
  toggleSidebar: 'Toggle sidebar',
89
95
  package: 'Package',
90
96
  },
@@ -109,6 +115,12 @@ const en = {
109
115
  url: 'Please enter a valid URL',
110
116
  pattern: '{{field}} format is invalid',
111
117
  formInvalid: 'Please check the highlighted fields: {{fields}}',
118
+ // Separator between the field names interpolated into `formInvalid`.
119
+ // Per-locale because list punctuation is a locale property, not a code
120
+ // constant: CJK enumerates with U+3001, Latin scripts with a comma+space,
121
+ // Arabic with U+060C. Hardcoding one of them in the renderer put the CJK
122
+ // comma into the English toast (objectstack#5407).
123
+ formInvalidJoiner: ', ',
112
124
  unique: '{{field}} must be unique',
113
125
  type: '{{field}} must be a valid {{type}}',
114
126
  },
@@ -133,12 +145,21 @@ const en = {
133
145
  stepOf: 'Step {{current}} of {{total}}',
134
146
  createTitle: 'Create {{object}}',
135
147
  editTitle: 'Edit {{object}}',
148
+ viewTitle: 'View {{object}}',
149
+ createTargetOrg: 'Creates in {{org}}',
136
150
  saveRecord: 'Save',
137
151
  create: 'Create',
138
152
  update: 'Update',
139
153
  createSuccess: '{{object}} created successfully',
140
154
  updateSuccess: '{{object}} updated successfully',
141
155
  deleteSuccess: '{{object}} deleted successfully',
156
+ fullscreen: {
157
+ title: 'Edit text',
158
+ description: 'Edit the full text value, then save or cancel your changes.',
159
+ done: 'Done',
160
+ toggle: 'Edit {{label}} fullscreen',
161
+ textFallback: 'text',
162
+ },
142
163
  },
143
164
  fields: {
144
165
  relativeDate: {
@@ -178,6 +199,14 @@ const en = {
178
199
  basicEditorHint: 'Rich text editor (basic)',
179
200
  placeholder: 'Enter text...',
180
201
  },
202
+ // objectui#3231 — the "this option list cannot be filled" copy shared by
203
+ // the fixed-option widgets (select / multiselect / radio / checkboxes) AND
204
+ // by the form renderer's gate hint. One key, one sentence: the renderer
205
+ // interpolates field LABELS, a standalone widget its raw field names.
206
+ options: {
207
+ empty: 'No options available',
208
+ selectFirst: 'Select {{fields}} first',
209
+ },
181
210
  objectRef: {
182
211
  loading: 'Loading objects…',
183
212
  placeholder: 'Select an object',
@@ -205,6 +234,32 @@ const en = {
205
234
  editAsJson: 'Edit as JSON',
206
235
  useVisualBuilder: 'Use visual builder',
207
236
  },
237
+ // objectui#3342 — the tags widget's input hint, shown while the tag list
238
+ // is empty. The author-declared `field.placeholder` always wins over this.
239
+ tags: {
240
+ placeholder: 'Type and press Enter to add…',
241
+ },
242
+ // objectui#3406 — the accessible sentence of the textarea character
243
+ // counter, rendered only when the field declares `maxLength`. The visible
244
+ // text is `{count}/{max}` digits and needs no locale. ONE interpolated key
245
+ // rather than assembled parts: ja and ko put the cap BEFORE the count
246
+ // ("of {{max}} characters, {{count}}"), an order no code-side
247
+ // concatenation can produce.
248
+ //
249
+ // objectui#3408 moved it off the `aria-live` region and onto the
250
+ // textarea's `aria-describedby` — read once when focus lands, instead of
251
+ // re-announced on every keystroke — and added `charactersRemaining` as the
252
+ // one thing that IS still spoken while typing: after a pause, and only
253
+ // inside the last 10% (or last 20 characters) of the cap.
254
+ //
255
+ // `charactersRemaining` is deliberately colon-form. `count` sends i18next
256
+ // to plural lookup before the base key, and these packs declare the base
257
+ // key only; a sentence whose grammar does not bend on the number is
258
+ // correct at 1 without ten plural entries per pack.
259
+ textarea: {
260
+ characterCount: 'Character count: {{count}} of {{max}}',
261
+ charactersRemaining: 'Characters remaining: {{count}}',
262
+ },
208
263
  },
209
264
  table: {
210
265
  rowsPerPage: 'Rows per page',
@@ -670,6 +725,15 @@ const en = {
670
725
  over: 'overloaded',
671
726
  empty: 'No tasks to allocate.',
672
727
  },
728
+ quickFilter: {
729
+ all: 'All',
730
+ clear: 'Clear filters',
731
+ empty: 'No options',
732
+ // SINGLE braces on purpose: the ObjectGantt call site resolves these
733
+ // with a literal `.replace('{shown}', …)`, not i18next interpolation
734
+ // (same convention as `autoScheduleDlg.body` above).
735
+ resultSummary: 'Showing {shown} / {total} tasks',
736
+ },
673
737
  readOnly: 'Read-only',
674
738
  readOnlyHint: 'Editing is disabled for this view.',
675
739
  lockedHint: 'No edit permission',
@@ -716,11 +780,15 @@ const en = {
716
780
  editInlineHint: 'Double-click to edit',
717
781
  lockedByApproval: 'Locked for approval',
718
782
  lockedTooltip: 'This record has a pending approval request; editing is locked',
719
- writeStrippedTitle: 'Some fields were not saved',
720
- writeStrippedReadonly: 'Read-only, so it was not saved: {{fields}}',
721
- writeStrippedByState: "Not editable in this record's current state, so it was not saved: {{fields}}",
783
+ writeStrippedTitle: 'Saved — but some fields did not take effect',
784
+ writeStrippedReadonly: 'Read-only, so it did not take effect: {{fields}}',
785
+ writeStrippedByState: "Not editable in this record's current state, so it did not take effect: {{fields}}",
722
786
  approvalPendingEditable: 'In approval · editable',
723
787
  approvalPendingTooltip: 'This record has a pending approval request; this step still allows editing',
788
+ approvalProgress: 'Approvals — {{got}} of {{need}}',
789
+ approvalProgressGroups: 'Sign-off — {{got}} of {{need}} groups',
790
+ approvalProgressLabel: 'Approval progress',
791
+ approvalsPanelTitle: 'Approvals',
724
792
  cancelApproval: 'Recall approval',
725
793
  cancelApprovalInFlight: 'Recalling…',
726
794
  cancelApprovalTooltip: 'Recall the pending approval request to unlock this record',
@@ -749,6 +817,28 @@ const en = {
749
817
  viewHistory: 'View history',
750
818
  delete: 'Delete',
751
819
  moreActions: 'More actions',
820
+ addReaction: 'Add reaction',
821
+ pageHeaderActions: 'Page header actions',
822
+ emojiPicker: 'Emoji picker',
823
+ reactionCount: '{{emoji}} {{count}} reactions',
824
+ reactionCountOne: '{{emoji}} {{count}} reaction',
825
+ // Record-overlay chrome (objectstack#5506). `recordDetail` is the VISIBLE
826
+ // heading the overlay falls back to when the host passes no title;
827
+ // `openAsFullPage` is the icon-only expand button's default accessible
828
+ // name; `recordDetailOverlay` is the sr-only description on the
829
+ // Sheet/Dialog when the host supplies none.
830
+ recordDetail: 'Record Detail',
831
+ // Same heading, but for the hosts that DO know which object they are
832
+ // showing (objectui#3426): `ListView` / `ObjectGrid` used to string-build
833
+ // `` `${label} Detail` `` in TypeScript and hand it to the overlay's
834
+ // `title` prop, so `recordDetail` above never got a chance to apply and a
835
+ // non-English session read one English heading. Interpolating keeps the
836
+ // object label in the heading without freezing English word order — a pack
837
+ // whose qualifier trails the noun (de: a hyphenated compound) or that needs
838
+ // a possessive particle (ja/zh) writes its own arrangement here.
839
+ recordDetailWithLabel: '{{label}} Detail',
840
+ openAsFullPage: 'Open as full page',
841
+ recordDetailOverlay: 'Record detail overlay for {{title}}.',
752
842
  addToFavorites: 'Add to favorites',
753
843
  removeFromFavorites: 'Remove from favorites',
754
844
  previousRecord: 'Previous record',
@@ -1397,6 +1487,15 @@ const en = {
1397
1487
  retry: 'Retry',
1398
1488
  retrying: 'Retrying…',
1399
1489
  },
1490
+ // Copy owned by the console server-action wrapper (`consoleServerAction.ts`,
1491
+ // objectui#3321): the pre-opened SSO spinner tab and the popup-blocked toast.
1492
+ serverAction: {
1493
+ openingTitle: 'Opening…',
1494
+ openingBody: 'Opening… this may take a moment.',
1495
+ popupBlockedTitle: 'Popup blocked',
1496
+ popupBlockedDescription: 'Your browser blocked the new tab from opening.',
1497
+ popupBlockedAction: 'Open in new tab',
1498
+ },
1400
1499
  shortcuts: {
1401
1500
  title: 'Keyboard Shortcuts',
1402
1501
  description: 'Quick reference for all available keyboard shortcuts.',
@@ -1640,6 +1739,8 @@ const en = {
1640
1739
  objectNotFound: 'Object Not Found',
1641
1740
  objectNotFoundDescription: 'The object "{{objectName}}" does not exist in the current configuration.',
1642
1741
  objectNotFoundHint: 'Check your app navigation settings or select a different object from the sidebar.',
1742
+ filterOrNotSavable: 'This filter uses OR between conditions, which a saved view cannot store yet. It still applies to this list — remove the OR grouping to save it to the view.',
1743
+ filterNestedNotSavable: 'This filter uses nested condition groups, which a saved view cannot store. Flatten it to a single list of conditions to save it to the view.',
1643
1744
  systemViewReadonly: 'System view defined in code — read-only.',
1644
1745
  expandToPage: 'Open as full page',
1645
1746
  allRecords: 'All Records',
@@ -2648,6 +2749,21 @@ const en = {
2648
2749
  addEnvironment: 'Add environment',
2649
2750
  setUpProduction: 'Set up your production environment',
2650
2751
  addDevelopment: 'Add development environment',
2752
+ // Plan/capacity dialog (EnvironmentEntitlementDialog). Shown on a paid
2753
+ // conversion path, so it must read in the user's language — cloud#959.
2754
+ entitlement: {
2755
+ productionLimitTitle: 'You already have your production environment',
2756
+ productionLimitBody: 'Each organization includes exactly one production environment. Create a separate organization for another, or contact us about an Enterprise arrangement.',
2757
+ planLockedTitle: 'Development environments are a paid feature',
2758
+ planLockedBody: 'Your {{plan}} includes one production environment. Upgrade to add development environments — build in dev, then publish to production.',
2759
+ limitTitle: 'Development environment limit reached',
2760
+ limitBody: 'Capacity scales with AI seats. Add an AI seat, or archive an unused development environment to free one up.',
2761
+ limitBodyWithCount: 'You are using {{used}} of {{limit}} development environments. Capacity scales with AI seats — add an AI seat, or archive an unused development environment to free one up.',
2762
+ freePlan: 'free plan',
2763
+ namedPlan: '{{plan}} plan',
2764
+ upgradeCta: 'Upgrade plan',
2765
+ contactSalesCta: 'Contact sales',
2766
+ },
2651
2767
  },
2652
2768
  cloudConnection: {
2653
2769
  checking: 'Checking connection…',
@@ -3034,5 +3150,82 @@ const en = {
3034
3150
  addSort: 'Add sort',
3035
3151
  removeSort: 'Remove sort',
3036
3152
  },
3153
+ // `@object-ui/collaboration` — the comment thread's copy (objectstack#5506,
3154
+ // objectui#3424). The package used to carry every one of these as an English
3155
+ // literal, so a zh session read a Chinese console with an English comment
3156
+ // thread inside it. `COLLAB_DEFAULT_TRANSLATIONS` in that package mirrors
3157
+ // this namespace verbatim as its no-provider fallback; keep the two in step.
3158
+ //
3159
+ // The generic action words (Save / Cancel / Edit / Delete) are NOT repeated
3160
+ // here — the thread reads them from `common`.
3161
+ collaboration: {
3162
+ // Thread header. `commentCount`/`commentCountOne` are two keys, NOT an
3163
+ // i18next `_one`/`_other` pair — see the `reactionCount` note under
3164
+ // `detail`: zh/ja/ko have no separate singular form, so those packs would
3165
+ // legitimately omit the `_one` half and `all-locales-key-parity` reads a
3166
+ // legitimately-absent half as a lost key.
3167
+ commentCount: '{{count}} comments',
3168
+ commentCountOne: '{{count}} comment',
3169
+ // Appended to the count, separator included, so a translator owns the
3170
+ // whole phrase rather than inheriting an English-shaped ` · ` glue.
3171
+ resolvedSuffix: ' · Resolved',
3172
+ sortComments: 'Sort comments',
3173
+ sortOldest: 'Oldest',
3174
+ sortNewest: 'Newest',
3175
+ resolve: 'Resolve',
3176
+ reopen: 'Reopen',
3177
+ // Relative comment age. Word-level entries only — the component keeps its
3178
+ // existing minute/hour/day buckets and no date library was introduced.
3179
+ justNow: 'just now',
3180
+ minutesAgo: '{{count}}m ago',
3181
+ hoursAgo: '{{count}}h ago',
3182
+ daysAgo: '{{count}}d ago',
3183
+ edited: '(edited)',
3184
+ // Reaction-chip tooltip. A DEDICATED pair rather than `detail.reactionCount`:
3185
+ // that one interpolates `{{emoji}}`, and here the emoji is the chip's
3186
+ // visible label with nothing to hand the placeholder.
3187
+ reactionCount: '{{count}} reactions',
3188
+ reactionCountOne: '{{count}} reaction',
3189
+ addThumbsUp: 'Add thumbs up',
3190
+ reply: 'Reply',
3191
+ // Accessible names for the three emoji-only controls (objectui#3441).
3192
+ // A `button`'s accessible name is computed from its CONTENT before `title`
3193
+ // is ever consulted, so '👍' / '❤️' / '✕' named themselves — these keys are
3194
+ // wired as `aria-label`, which overrides content.
3195
+ //
3196
+ // `reactThumbsUp` stays distinct from `addThumbsUp` above even though both
3197
+ // dispatch the same reaction today: that one names the reaction-bar `+`
3198
+ // picker, and the two render side by side on a comment that already has
3199
+ // reactions.
3200
+ reactThumbsUp: 'React with thumbs up',
3201
+ reactHeart: 'React with heart',
3202
+ // Not `common.cancel`: an accessible name has to say what is cancelled.
3203
+ // Only the reply TARGET is dropped — the composer keeps whatever was typed.
3204
+ cancelReply: 'Cancel reply',
3205
+ replyingTo: 'Replying to {{name}}...',
3206
+ // The no-author-found half of the reply banner, as a whole sentence:
3207
+ // languages that inflect around the addressee cannot build it by
3208
+ // substituting a noun into the `{{name}}` form.
3209
+ replyingToComment: 'Replying to comment...',
3210
+ commentPlaceholder: 'Add a comment... (use @ to mention)',
3211
+ send: 'Send',
3212
+ // Presence avatar stack (objectui#3440). `presentUserCount*` is the avatar
3213
+ // group's `aria-label` — with only images and initials inside, that label
3214
+ // IS the control for a screen reader. Two keys, same reason as
3215
+ // `commentCount` above.
3216
+ presentUserCount: '{{count}} users present',
3217
+ presentUserCountOne: '{{count}} user present',
3218
+ moreUserCount: '{{count}} more users',
3219
+ moreUserCountOne: '{{count}} more user',
3220
+ // Avatar tooltip. The parentheses are part of the translation, spacing
3221
+ // included, so the CJK packs can drop the space English puts before `(`.
3222
+ userStatusTitle: '{{name}} ({{status}})',
3223
+ // Display copy for the `PresenceUser['status']` enum. The enum value
3224
+ // itself stays raw data — it is translated at the render exit only, and a
3225
+ // status outside the union falls back to the raw string.
3226
+ statusActive: 'active',
3227
+ statusIdle: 'idle',
3228
+ statusAway: 'away',
3229
+ },
3037
3230
  };
3038
3231
  export default en;
@@ -78,6 +78,10 @@ declare const es: {
78
78
  select: string;
79
79
  openChat: string;
80
80
  closeChat: string;
81
+ closePanel: string;
82
+ resizeDrawer: string;
83
+ itemCount: string;
84
+ itemCountOne: string;
81
85
  toggleSidebar: string;
82
86
  package: string;
83
87
  };
@@ -102,6 +106,7 @@ declare const es: {
102
106
  url: string;
103
107
  pattern: string;
104
108
  formInvalid: string;
109
+ formInvalidJoiner: string;
105
110
  unique: string;
106
111
  type: string;
107
112
  };
@@ -126,12 +131,21 @@ declare const es: {
126
131
  stepOf: string;
127
132
  createTitle: string;
128
133
  editTitle: string;
134
+ viewTitle: string;
135
+ createTargetOrg: string;
129
136
  saveRecord: string;
130
137
  create: string;
131
138
  update: string;
132
139
  createSuccess: string;
133
140
  updateSuccess: string;
134
141
  deleteSuccess: string;
142
+ fullscreen: {
143
+ title: string;
144
+ description: string;
145
+ done: string;
146
+ toggle: string;
147
+ textFallback: string;
148
+ };
135
149
  };
136
150
  fields: {
137
151
  image: {
@@ -171,6 +185,10 @@ declare const es: {
171
185
  basicEditorHint: string;
172
186
  placeholder: string;
173
187
  };
188
+ options: {
189
+ empty: string;
190
+ selectFirst: string;
191
+ };
174
192
  objectRef: {
175
193
  loading: string;
176
194
  placeholder: string;
@@ -198,6 +216,13 @@ declare const es: {
198
216
  editAsJson: string;
199
217
  useVisualBuilder: string;
200
218
  };
219
+ tags: {
220
+ placeholder: string;
221
+ };
222
+ textarea: {
223
+ characterCount: string;
224
+ charactersRemaining: string;
225
+ };
201
226
  };
202
227
  table: {
203
228
  rowsPerPage: string;
@@ -636,6 +661,12 @@ declare const es: {
636
661
  over: string;
637
662
  empty: string;
638
663
  };
664
+ quickFilter: {
665
+ all: string;
666
+ clear: string;
667
+ empty: string;
668
+ resultSummary: string;
669
+ };
639
670
  readOnly: string;
640
671
  readOnlyHint: string;
641
672
  lockedHint: string;
@@ -718,6 +749,15 @@ declare const es: {
718
749
  viewHistory: string;
719
750
  delete: string;
720
751
  moreActions: string;
752
+ addReaction: string;
753
+ pageHeaderActions: string;
754
+ emojiPicker: string;
755
+ reactionCount: string;
756
+ reactionCountOne: string;
757
+ recordDetail: string;
758
+ recordDetailWithLabel: string;
759
+ openAsFullPage: string;
760
+ recordDetailOverlay: string;
721
761
  addToFavorites: string;
722
762
  removeFromFavorites: string;
723
763
  previousRecord: string;
@@ -818,6 +858,10 @@ declare const es: {
818
858
  writeStrippedByState: string;
819
859
  approvalPendingEditable: string;
820
860
  approvalPendingTooltip: string;
861
+ approvalProgress: string;
862
+ approvalProgressGroups: string;
863
+ approvalProgressLabel: string;
864
+ approvalsPanelTitle: string;
821
865
  cancelApproval: string;
822
866
  cancelApprovalInFlight: string;
823
867
  cancelApprovalTooltip: string;
@@ -1409,6 +1453,13 @@ declare const es: {
1409
1453
  retry: string;
1410
1454
  retrying: string;
1411
1455
  };
1456
+ serverAction: {
1457
+ openingTitle: string;
1458
+ openingBody: string;
1459
+ popupBlockedTitle: string;
1460
+ popupBlockedDescription: string;
1461
+ popupBlockedAction: string;
1462
+ };
1412
1463
  shortcuts: {
1413
1464
  title: string;
1414
1465
  description: string;
@@ -1476,6 +1527,8 @@ declare const es: {
1476
1527
  objectNotFound: string;
1477
1528
  objectNotFoundDescription: string;
1478
1529
  objectNotFoundHint: string;
1530
+ filterOrNotSavable: string;
1531
+ filterNestedNotSavable: string;
1479
1532
  allRecords: string;
1480
1533
  exitDesignMode: string;
1481
1534
  enterDesignMode: string;
@@ -2565,6 +2618,19 @@ declare const es: {
2565
2618
  addEnvironment: string;
2566
2619
  setUpProduction: string;
2567
2620
  addDevelopment: string;
2621
+ entitlement: {
2622
+ productionLimitTitle: string;
2623
+ productionLimitBody: string;
2624
+ planLockedTitle: string;
2625
+ planLockedBody: string;
2626
+ limitTitle: string;
2627
+ limitBody: string;
2628
+ limitBodyWithCount: string;
2629
+ freePlan: string;
2630
+ namedPlan: string;
2631
+ upgradeCta: string;
2632
+ contactSalesCta: string;
2633
+ };
2568
2634
  };
2569
2635
  cloudConnection: {
2570
2636
  checking: string;
@@ -2984,5 +3050,39 @@ declare const es: {
2984
3050
  addSort: string;
2985
3051
  removeSort: string;
2986
3052
  };
3053
+ collaboration: {
3054
+ commentCount: string;
3055
+ commentCountOne: string;
3056
+ resolvedSuffix: string;
3057
+ sortComments: string;
3058
+ sortOldest: string;
3059
+ sortNewest: string;
3060
+ resolve: string;
3061
+ reopen: string;
3062
+ justNow: string;
3063
+ minutesAgo: string;
3064
+ hoursAgo: string;
3065
+ daysAgo: string;
3066
+ edited: string;
3067
+ reactionCount: string;
3068
+ reactionCountOne: string;
3069
+ addThumbsUp: string;
3070
+ reply: string;
3071
+ reactThumbsUp: string;
3072
+ reactHeart: string;
3073
+ cancelReply: string;
3074
+ replyingTo: string;
3075
+ replyingToComment: string;
3076
+ commentPlaceholder: string;
3077
+ send: string;
3078
+ presentUserCount: string;
3079
+ presentUserCountOne: string;
3080
+ moreUserCount: string;
3081
+ moreUserCountOne: string;
3082
+ userStatusTitle: string;
3083
+ statusActive: string;
3084
+ statusIdle: string;
3085
+ statusAway: string;
3086
+ };
2987
3087
  };
2988
3088
  export default es;