@object-ui/i18n 15.0.0 → 16.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.
- package/CHANGELOG.md +143 -0
- package/dist/locales/ar.d.ts +9 -0
- package/dist/locales/ar.js +12 -2
- package/dist/locales/de.d.ts +9 -0
- package/dist/locales/de.js +12 -2
- package/dist/locales/en.d.ts +47 -11
- package/dist/locales/en.js +51 -11
- package/dist/locales/es.d.ts +9 -0
- package/dist/locales/es.js +12 -2
- package/dist/locales/fr.d.ts +9 -0
- package/dist/locales/fr.js +12 -2
- package/dist/locales/index.d.ts +168 -24
- package/dist/locales/ja.d.ts +9 -0
- package/dist/locales/ja.js +12 -2
- package/dist/locales/ko.d.ts +9 -0
- package/dist/locales/ko.js +12 -2
- package/dist/locales/pt.d.ts +9 -0
- package/dist/locales/pt.js +12 -2
- package/dist/locales/ru.d.ts +9 -0
- package/dist/locales/ru.js +12 -2
- package/dist/locales/zh.d.ts +49 -13
- package/dist/locales/zh.js +52 -13
- package/dist/useObjectLabel.d.ts +224 -8
- package/dist/useObjectLabel.js +67 -11
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,148 @@
|
|
|
1
1
|
# @object-ui/i18n
|
|
2
2
|
|
|
3
|
+
## 16.1.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- af1b0db: feat(i18n): localize action result dialogs via the `_actions.<action>.resultDialog` convention
|
|
8
|
+
|
|
9
|
+
The post-success secret-reveal dialog (create-user temporary password, 2FA
|
|
10
|
+
backup codes, OAuth client secrets) always rendered the hardcoded English
|
|
11
|
+
metadata literals — the spec bundles now carry `resultDialog` translations
|
|
12
|
+
(objectstack `_actions.<action>.resultDialog.*`), but nothing resolved them
|
|
13
|
+
client-side.
|
|
14
|
+
|
|
15
|
+
- **@object-ui/i18n.** `useObjectLabel()` gains `actionResultDialog(objectName,
|
|
16
|
+
actionName, spec)`: overlays translated `title` / `description` /
|
|
17
|
+
`acknowledge` and per-field labels onto the metadata spec, falling back to
|
|
18
|
+
the literals. The `fields` node is keyed by the LITERAL result-field path
|
|
19
|
+
(may contain dots, e.g. `"user.email"`), so it is fetched whole with
|
|
20
|
+
`returnObjects` and indexed directly — never resolved through a dotted
|
|
21
|
+
i18next key. Built-in locale packs also translate the dialog's fallback
|
|
22
|
+
`defaultTitle` / `acknowledge` (previously English in all ten locales) and
|
|
23
|
+
add the new `actions.resultDialog.copyAll` key.
|
|
24
|
+
- **@object-ui/app-shell.** The result-dialog handlers in
|
|
25
|
+
`useConsoleActionRuntime` and `RecordDetailView` accept the action context
|
|
26
|
+
(already passed by `ActionRunner`) and localize the spec before opening the
|
|
27
|
+
dialog; `ActionResultDialog`'s hardcoded "Copy all" button now goes through
|
|
28
|
+
`actions.resultDialog.copyAll`.
|
|
29
|
+
|
|
30
|
+
### Patch Changes
|
|
31
|
+
|
|
32
|
+
- 0318118: fix(app-shell): block ActionParamDialog submit while a file/image param is uploading; map spec `autonumber` (ADR-0059 follow-ups)
|
|
33
|
+
|
|
34
|
+
Two follow-ups to the shared-field-widget param rendering (ADR-0059):
|
|
35
|
+
|
|
36
|
+
- **Upload-in-progress guard.** A `file`/`image` param's value only becomes its
|
|
37
|
+
fileId once the presigned upload settles, so confirming mid-upload sent an
|
|
38
|
+
empty/stale value. `FileField`/`ImageField` now surface their upload state via
|
|
39
|
+
an optional `onUploadingChange` prop (shared `useUploadingSignal` hook,
|
|
40
|
+
ignored by other widgets); `ActionParamDialog` wires it for `file`/`image`
|
|
41
|
+
params and disables Confirm (label → "Uploading…", new `actionDialog.uploading`
|
|
42
|
+
i18n key across all locales) plus blocks submit while any upload is in flight.
|
|
43
|
+
- **`autonumber` spelling.** `mapFieldTypeToFormType` now maps the spec
|
|
44
|
+
`FieldType` spelling `autonumber` (in addition to the widget-map key
|
|
45
|
+
`auto_number`) to the AutoNumber widget, so a spec-typed `autonumber`
|
|
46
|
+
field/param no longer falls through to the plain text input — fixes the object
|
|
47
|
+
form path as well as action params.
|
|
48
|
+
|
|
49
|
+
- 1100a8b: feat(plugin-gantt)!: remove the 移动端二维码 (mobile QR share) context-menu item
|
|
50
|
+
|
|
51
|
+
The QR-share feature is removed outright: the context-menu item, the QR dialog,
|
|
52
|
+
the `taskUrl` prop on `GanttView`, the URL wiring in `ObjectGantt`, the
|
|
53
|
+
`gantt.menu.qrcode` / `gantt.qr.*` i18n keys (en/zh) and the `qrcode`
|
|
54
|
+
dependency are all deleted. It baked one consumer's app-specific requirement
|
|
55
|
+
(scan-to-open on mobile) into the generic gantt renderer, and what it encoded —
|
|
56
|
+
the desktop console record URL — was not even the right target for that
|
|
57
|
+
requirement. Apps that need scan-to-mobile flows should implement them
|
|
58
|
+
app-side against their own mobile surface.
|
|
59
|
+
|
|
60
|
+
- 7abe4cd: **Console user-import wizard defaults to the `auto` password policy (tracks framework#3236).** The "Sign-in setup for imported users" selector gains an **Automatic (recommended)** option and it is now the default (was "No password"). `auto` decides per row on the server: reachable users get an invitation (email / SMS), anyone who can't be reached gets a one-time password shown once on the result screen — so it works with or without an email/SMS service, and the one-time-password reveal now surfaces only the rows that actually fell back (instead of the whole batch under `temporary`).
|
|
61
|
+
|
|
62
|
+
The other three policies are unchanged and still selectable: `invite` (force invitations, unreachable rows fail), `temporary` (force one-time passwords for every row), `none` (identity only). New `console.identityImport.policy.auto` / `policyHint.auto` strings added for `en` and `zh`; the `none` label drops its "(recommended)" marker.
|
|
63
|
+
|
|
64
|
+
- ebe6494: chore(lint): clear the baseline lint errors in nine more packages (objectui#2713 Wave 2)
|
|
65
|
+
|
|
66
|
+
Second wave of the #2713 lint-gate restoration (after #2730). These nine package
|
|
67
|
+
lints were red at baseline on `main`, so their per-package `lint` gate could not
|
|
68
|
+
catch new violations. Cleared every **error** (no behavior change; warnings out
|
|
69
|
+
of scope):
|
|
70
|
+
|
|
71
|
+
- **`react-hooks/rules-of-hooks`** (`i18n`, `plugin-grid`, `plugin-view`,
|
|
72
|
+
`plugin-list`) — translation helpers (`useSafeFieldLabel`,
|
|
73
|
+
`useRowActionTranslation`, `useViewLabel`, `useViewTabLabel`, `useMoreLabel`)
|
|
74
|
+
wrapped a provider-safe hook (`useObjectTranslation`/`useObjectLabel`, which
|
|
75
|
+
never throw) in try/catch; removed the wrapper (the same fix #2709 applied in
|
|
76
|
+
fields). `plugin-kanban` `ObjectKanban` moved its `if (error)` early return
|
|
77
|
+
below the `useCallback` so hooks run unconditionally. `collaboration`
|
|
78
|
+
`__unsafe_usePresenceContext` keeps its deliberate danger-prefix name via a
|
|
79
|
+
justified scoped disable.
|
|
80
|
+
- **`react-hooks/static-components`** (`layout`, `plugin-list`, `plugin-report`)
|
|
81
|
+
— dynamic-icon / registry lookups (`resolveIcon`, `useRegistryComponent`) are
|
|
82
|
+
stable component references, not components created during render → scoped
|
|
83
|
+
disable with justification. `plugin-charts` `TreemapCell` was a _genuine_
|
|
84
|
+
inline component and is hoisted to module scope (it is purely props-driven).
|
|
85
|
+
- **`no-irregular-whitespace`** (`plugin-grid` `ImportWizard`) — the literal
|
|
86
|
+
U+FEFF BOM prepended to exported CSV/text blobs (so Excel detects UTF-8) is
|
|
87
|
+
now written as the `` escape: byte-identical at runtime, no literal
|
|
88
|
+
irregular-whitespace character in source.
|
|
89
|
+
- **`no-useless-assignment`** (`plugin-grid` `BulkActionDialog`) — dropped a
|
|
90
|
+
dead `= null` initializer that the exhaustive `switch` (incl. `default`)
|
|
91
|
+
overwrites before it is read.
|
|
92
|
+
- **`no-unsafe-function-type`** (`plugin-view` `ViewTabBar`) — the dnd-kit
|
|
93
|
+
render-prop `listeners` map is typed `Record<string, (...args: any[]) => void>`
|
|
94
|
+
instead of bare `Function`.
|
|
95
|
+
- **`no-require-imports`** (`plugin-kanban`, `plugin-view` tests) — hoisted
|
|
96
|
+
`vi.mock` factories use an `async` factory with `await import('react')`.
|
|
97
|
+
|
|
98
|
+
- f80aaf2: **Distinguish writable `system` objects from engine-owned ones in the Console (framework ADR-0103 / #3220).** The framework split the overloaded `managedBy: 'system'` bucket: engine-owned rows stay read-only, but several `system` objects are admin/user-writable _data_ (Notification Preferences/Subscriptions/Templates, delegated RBAC assignments, user preferences) and declare `userActions` opening their writes.
|
|
99
|
+
|
|
100
|
+
The Console already surfaced the New/Edit/Delete buttons correctly for these (all affordance mirrors honour `userActions`), but the badge and empty-state _copy_ still called every `system` object a "read-only monitoring surface". Now:
|
|
101
|
+
|
|
102
|
+
- **`ManagedByBadge`** takes the object's `userActions` and, when a `system` object opens any write, renders the "Platform schema — admin-writable" variant instead of the engine-owned copy.
|
|
103
|
+
- **`resolveManagedByEmptyState`** returns `undefined` for a `system` object whose `userActions.create` is set, so the generic empty state (with the New button) shows instead of "entries appear automatically".
|
|
104
|
+
- New `managedByBadge.systemWritable.*` strings (en + zh; other locales fall back to the English default).
|
|
105
|
+
|
|
106
|
+
Copy/UX only — no behavioural change to what a user can do.
|
|
107
|
+
|
|
108
|
+
- 29c6040: fix(app-shell): redo the record-list "Add View" create flow — empty-name 405, invisible drafts, canonical naming
|
|
109
|
+
|
|
110
|
+
Rebuilds the record-list "Add View" / "Save as view" create path so a
|
|
111
|
+
runtime-created view has one canonical identity and is actually verifiable
|
|
112
|
+
before publish (supersedes #2754; fixes #2767).
|
|
113
|
+
|
|
114
|
+
- **Unified identity (P1).** New `viewEnvelope(objectName, spec, { name, label })`
|
|
115
|
+
seam in `runtime-metadata-persistence.ts` emits the canonical ViewItem
|
|
116
|
+
(`{ name: '<object>.<key>', object, viewKind: 'list', label, config }` with
|
|
117
|
+
`config.data = { provider: 'object', object }`), mirroring the Studio
|
|
118
|
+
`anchors.ts:createBuildBody`. The **qualified** name is passed as BOTH the
|
|
119
|
+
`PUT /meta/view/:name` URL segment and `body.name`, so the `sys_metadata`
|
|
120
|
+
row key, the ViewTabBar tab id, and the body identity all agree and the
|
|
121
|
+
draft → read → publish loop resolves. `ObjectView` and `ObjectDataPage` both
|
|
122
|
+
call the single helper — the duplicated envelope block is gone (P6).
|
|
123
|
+
- **Empty-name guards (405).** `MetadataClient.save()` and
|
|
124
|
+
`createRuntimeMetadata()` throw a clear contextual error instead of emitting
|
|
125
|
+
`PUT /meta/view/` (empty `:name`, server 405).
|
|
126
|
+
- **Draft visibility (P2/P3/P4).** `DataSource.listViews(objectName, { previewDrafts })`:
|
|
127
|
+
in draft-preview mode the `ObjectStackAdapter` makes a **single**
|
|
128
|
+
`MetadataClient.withPreviewDrafts(true).list('view')` request and uses the
|
|
129
|
+
server's already-overlaid list (draft wins by name, `_draft` tagged) —
|
|
130
|
+
replacing, not appending, so a draft that edits a published view can't
|
|
131
|
+
double-tab. No hand-rolled `fetch` of metadata routes at the adapter layer.
|
|
132
|
+
After a create in normal mode the console navigates to the new view with
|
|
133
|
+
`?preview=draft`, so the DraftPreviewBar is visible and Publish is one click.
|
|
134
|
+
- **CJK-aware naming (P5).** `CreateViewDialog` gains an editable machine-name
|
|
135
|
+
field, prefilled via `slugify(label)` for Latin labels and required (submit
|
|
136
|
+
disabled) when slugify yields empty for non-Latin labels — no more silent
|
|
137
|
+
random `task_grid_mrsyt56j` names. New `console.objectView.viewName*` keys
|
|
138
|
+
(en/zh).
|
|
139
|
+
|
|
140
|
+
## 16.0.0
|
|
141
|
+
|
|
142
|
+
### Patch Changes
|
|
143
|
+
|
|
144
|
+
- ca0f5f0: Login page surfaces the dev-seeded admin credentials. The framework runtime seeds `admin@objectos.ai` on an empty development database, but nothing on the login page said so — new users clicked "Sign up" and landed in an empty non-admin workspace (15.1 third-party eval). When `GET /api/v1/auth/config` reports `devSeedAdmin` (dev-only; the server omits the field in production and once the default password is changed), the page renders a dismissible amber banner with the credentials. Dismissal persists per browser via localStorage.
|
|
145
|
+
|
|
3
146
|
## 15.0.0
|
|
4
147
|
|
|
5
148
|
## 14.1.0
|
package/dist/locales/ar.d.ts
CHANGED
|
@@ -1,4 +1,11 @@
|
|
|
1
1
|
declare const ar: {
|
|
2
|
+
capability: {
|
|
3
|
+
group: {
|
|
4
|
+
platform: string;
|
|
5
|
+
org: string;
|
|
6
|
+
other: string;
|
|
7
|
+
};
|
|
8
|
+
};
|
|
2
9
|
lookup: {
|
|
3
10
|
recentlyUsed: string;
|
|
4
11
|
allResults: string;
|
|
@@ -69,6 +76,7 @@ declare const ar: {
|
|
|
69
76
|
resultDialog: {
|
|
70
77
|
defaultTitle: string;
|
|
71
78
|
acknowledge: string;
|
|
79
|
+
copyAll: string;
|
|
72
80
|
};
|
|
73
81
|
};
|
|
74
82
|
validation: {
|
|
@@ -1483,6 +1491,7 @@ declare const ar: {
|
|
|
1483
1491
|
requiredError: string;
|
|
1484
1492
|
cancel: string;
|
|
1485
1493
|
confirm: string;
|
|
1494
|
+
uploading: string;
|
|
1486
1495
|
defaultActionTitle: string;
|
|
1487
1496
|
ok: string;
|
|
1488
1497
|
lookupPlaceholder: string;
|
package/dist/locales/ar.js
CHANGED
|
@@ -1,4 +1,12 @@
|
|
|
1
1
|
const ar = {
|
|
2
|
+
// objectui#2600 B5 — capability picker scope group headers (labels come from the sys_capability registry).
|
|
3
|
+
capability: {
|
|
4
|
+
group: {
|
|
5
|
+
platform: 'منصة',
|
|
6
|
+
org: 'منظمة',
|
|
7
|
+
other: 'أخرى',
|
|
8
|
+
},
|
|
9
|
+
},
|
|
2
10
|
lookup: {
|
|
3
11
|
recentlyUsed: 'المستخدمة مؤخرًا',
|
|
4
12
|
allResults: 'كل النتائج',
|
|
@@ -67,8 +75,9 @@ const ar = {
|
|
|
67
75
|
},
|
|
68
76
|
actions: {
|
|
69
77
|
resultDialog: {
|
|
70
|
-
defaultTitle: '
|
|
71
|
-
acknowledge: '
|
|
78
|
+
defaultTitle: 'احفظ هذه القيمة الآن',
|
|
79
|
+
acknowledge: 'لقد حفظتها',
|
|
80
|
+
copyAll: 'نسخ الكل',
|
|
72
81
|
},
|
|
73
82
|
},
|
|
74
83
|
validation: {
|
|
@@ -1483,6 +1492,7 @@ const ar = {
|
|
|
1483
1492
|
requiredError: "{{label}} مطلوب",
|
|
1484
1493
|
cancel: "إلغاء",
|
|
1485
1494
|
confirm: "تأكيد",
|
|
1495
|
+
uploading: "جارٍ الرفع…",
|
|
1486
1496
|
defaultActionTitle: "إجراء",
|
|
1487
1497
|
ok: "موافق",
|
|
1488
1498
|
lookupPlaceholder: "لصق معرف السجل (UUID) لـ {{label}}",
|
package/dist/locales/de.d.ts
CHANGED
|
@@ -1,4 +1,11 @@
|
|
|
1
1
|
declare const de: {
|
|
2
|
+
capability: {
|
|
3
|
+
group: {
|
|
4
|
+
platform: string;
|
|
5
|
+
org: string;
|
|
6
|
+
other: string;
|
|
7
|
+
};
|
|
8
|
+
};
|
|
2
9
|
lookup: {
|
|
3
10
|
recentlyUsed: string;
|
|
4
11
|
allResults: string;
|
|
@@ -69,6 +76,7 @@ declare const de: {
|
|
|
69
76
|
resultDialog: {
|
|
70
77
|
defaultTitle: string;
|
|
71
78
|
acknowledge: string;
|
|
79
|
+
copyAll: string;
|
|
72
80
|
};
|
|
73
81
|
};
|
|
74
82
|
validation: {
|
|
@@ -1485,6 +1493,7 @@ declare const de: {
|
|
|
1485
1493
|
requiredError: string;
|
|
1486
1494
|
cancel: string;
|
|
1487
1495
|
confirm: string;
|
|
1496
|
+
uploading: string;
|
|
1488
1497
|
defaultActionTitle: string;
|
|
1489
1498
|
ok: string;
|
|
1490
1499
|
lookupPlaceholder: string;
|
package/dist/locales/de.js
CHANGED
|
@@ -1,4 +1,12 @@
|
|
|
1
1
|
const de = {
|
|
2
|
+
// objectui#2600 B5 — capability picker scope group headers (labels come from the sys_capability registry).
|
|
3
|
+
capability: {
|
|
4
|
+
group: {
|
|
5
|
+
platform: 'Plattform',
|
|
6
|
+
org: 'Organisation',
|
|
7
|
+
other: 'Andere',
|
|
8
|
+
},
|
|
9
|
+
},
|
|
2
10
|
lookup: {
|
|
3
11
|
recentlyUsed: 'Zuletzt verwendet',
|
|
4
12
|
allResults: 'Alle Ergebnisse',
|
|
@@ -67,8 +75,9 @@ const de = {
|
|
|
67
75
|
},
|
|
68
76
|
actions: {
|
|
69
77
|
resultDialog: {
|
|
70
|
-
defaultTitle: '
|
|
71
|
-
acknowledge: '
|
|
78
|
+
defaultTitle: 'Diesen Wert jetzt speichern',
|
|
79
|
+
acknowledge: 'Ich habe ihn gespeichert',
|
|
80
|
+
copyAll: 'Alle kopieren',
|
|
72
81
|
},
|
|
73
82
|
},
|
|
74
83
|
validation: {
|
|
@@ -1485,6 +1494,7 @@ const de = {
|
|
|
1485
1494
|
requiredError: "{{label}} ist erforderlich",
|
|
1486
1495
|
cancel: "Abbrechen",
|
|
1487
1496
|
confirm: "Bestätigen",
|
|
1497
|
+
uploading: "Wird hochgeladen…",
|
|
1488
1498
|
defaultActionTitle: "Aktion",
|
|
1489
1499
|
ok: "OK",
|
|
1490
1500
|
lookupPlaceholder: "Datensatz-ID (UUID) für {{label}} einfügen",
|
package/dist/locales/en.d.ts
CHANGED
|
@@ -2,6 +2,22 @@
|
|
|
2
2
|
* English (en) - Default language pack for Object UI
|
|
3
3
|
*/
|
|
4
4
|
declare const en: {
|
|
5
|
+
readonly capability: {
|
|
6
|
+
readonly group: {
|
|
7
|
+
readonly platform: "Platform";
|
|
8
|
+
readonly org: "Organization";
|
|
9
|
+
readonly other: "Other";
|
|
10
|
+
};
|
|
11
|
+
readonly label: {
|
|
12
|
+
readonly manage_users: "Manage Users";
|
|
13
|
+
readonly manage_org_users: "Manage Organization Users";
|
|
14
|
+
readonly manage_metadata: "Manage Metadata";
|
|
15
|
+
readonly manage_platform_settings: "Manage Platform Settings";
|
|
16
|
+
readonly setup_access: "Setup Access";
|
|
17
|
+
readonly setup_write: "Write Settings";
|
|
18
|
+
readonly studio_access: "Studio Access";
|
|
19
|
+
};
|
|
20
|
+
};
|
|
5
21
|
readonly lookup: {
|
|
6
22
|
readonly recentlyUsed: "Recently used";
|
|
7
23
|
readonly allResults: "All results";
|
|
@@ -72,6 +88,7 @@ declare const en: {
|
|
|
72
88
|
readonly resultDialog: {
|
|
73
89
|
readonly defaultTitle: "Save this value now";
|
|
74
90
|
readonly acknowledge: "I have saved this";
|
|
91
|
+
readonly copyAll: "Copy all";
|
|
75
92
|
};
|
|
76
93
|
};
|
|
77
94
|
readonly validation: {
|
|
@@ -339,6 +356,7 @@ declare const en: {
|
|
|
339
356
|
};
|
|
340
357
|
};
|
|
341
358
|
readonly showAll: "Show all";
|
|
359
|
+
readonly refresh: "Refresh";
|
|
342
360
|
readonly pullToRefresh: "Pull to refresh";
|
|
343
361
|
readonly refreshing: "Refreshing…";
|
|
344
362
|
readonly share: "Share";
|
|
@@ -365,6 +383,11 @@ declare const en: {
|
|
|
365
383
|
readonly title: "Managed by the platform";
|
|
366
384
|
readonly body: "Rows here are created automatically when actions run on the source record. The list below is a read-only monitoring surface — row-level actions (Approve, Recall, Resend, …) live on each row.";
|
|
367
385
|
};
|
|
386
|
+
readonly systemWritable: {
|
|
387
|
+
readonly short: "Platform schema";
|
|
388
|
+
readonly title: "Platform-defined, admin-writable";
|
|
389
|
+
readonly body: "This object's schema is defined by the platform, but its rows are yours to create and edit here. Who may write is governed by delegated administration and record-level security, not by this badge.";
|
|
390
|
+
};
|
|
368
391
|
readonly appendOnly: {
|
|
369
392
|
readonly short: "Read-only · Audit log";
|
|
370
393
|
readonly title: "Read-only historical record";
|
|
@@ -452,14 +475,6 @@ declare const en: {
|
|
|
452
475
|
readonly removeDependency: "Remove dependency";
|
|
453
476
|
readonly noCandidates: "No available tasks";
|
|
454
477
|
readonly searchTasks: "Search tasks…";
|
|
455
|
-
readonly qrcode: "Mobile QR code";
|
|
456
|
-
};
|
|
457
|
-
readonly qr: {
|
|
458
|
-
readonly title: "Open on mobile";
|
|
459
|
-
readonly hint: "Scan with a phone to open the details";
|
|
460
|
-
readonly copy: "Copy link";
|
|
461
|
-
readonly copied: "Copied";
|
|
462
|
-
readonly close: "Close";
|
|
463
478
|
};
|
|
464
479
|
readonly delete: {
|
|
465
480
|
readonly title: "Delete this task?";
|
|
@@ -483,6 +498,14 @@ declare const en: {
|
|
|
483
498
|
readonly confirm: "Auto-reschedule";
|
|
484
499
|
readonly cancel: "Keep as is";
|
|
485
500
|
};
|
|
501
|
+
readonly autoScheduleDlg: {
|
|
502
|
+
readonly title: "Auto-schedule";
|
|
503
|
+
readonly body: "Shift {count} task(s) later to satisfy dependency links?";
|
|
504
|
+
readonly skipped: "{count} locked task(s) also violate links and were skipped.";
|
|
505
|
+
readonly confirm: "Apply";
|
|
506
|
+
readonly cancel: "Cancel";
|
|
507
|
+
readonly none: "All dependencies satisfied — nothing to reschedule.";
|
|
508
|
+
};
|
|
486
509
|
readonly resource: {
|
|
487
510
|
readonly header: "Resource";
|
|
488
511
|
readonly peak: "Peak";
|
|
@@ -1289,6 +1312,7 @@ declare const en: {
|
|
|
1289
1312
|
readonly publishOk: "Published — objects are now live.";
|
|
1290
1313
|
readonly seedWarn: "Published, but some sample data failed to load.";
|
|
1291
1314
|
readonly openBuiltApp: "Open app";
|
|
1315
|
+
readonly designBuiltApp: "Design in Studio";
|
|
1292
1316
|
readonly previewDraft: "Preview";
|
|
1293
1317
|
readonly previewApp: "Preview app";
|
|
1294
1318
|
readonly resizeSplit: "Resize chat and preview";
|
|
@@ -1364,14 +1388,16 @@ declare const en: {
|
|
|
1364
1388
|
readonly identityImport: {
|
|
1365
1389
|
readonly policyTitle: "Sign-in setup for imported users";
|
|
1366
1390
|
readonly policy: {
|
|
1367
|
-
readonly
|
|
1391
|
+
readonly auto: "Automatic (recommended)";
|
|
1368
1392
|
readonly invite: "Send invitations";
|
|
1369
1393
|
readonly temporary: "Temporary passwords";
|
|
1394
|
+
readonly none: "No password (identity only)";
|
|
1370
1395
|
};
|
|
1371
1396
|
readonly policyHint: {
|
|
1397
|
+
readonly auto: "Reachable users get an invitation (email or SMS); anyone we can't reach gets a one-time password, shown ONCE on the result screen. Works with or without an email/SMS service.";
|
|
1398
|
+
readonly invite: "Every created user gets a set-your-password email (or an invitation SMS for phone-only rows). Requires a configured email/SMS service — unreachable rows fail.";
|
|
1399
|
+
readonly temporary: "For deployments without email/SMS: every created user gets a one-time password, shown ONCE on the result screen. First sign-in forces a change.";
|
|
1372
1400
|
readonly none: "Users first sign in with a phone OTP, magic link, or password-reset link, then set their own password.";
|
|
1373
|
-
readonly invite: "Each created user gets a set-your-password email (or an invitation SMS for phone-only rows). Requires a configured email/SMS service.";
|
|
1374
|
-
readonly temporary: "For deployments without email/SMS: each created user gets a one-time password, shown ONCE on the result screen. First sign-in forces a change.";
|
|
1375
1401
|
};
|
|
1376
1402
|
readonly passwordsNote: "Temporary passwords — shown once, never stored. Save them now; each user must change theirs at first sign-in.";
|
|
1377
1403
|
readonly passwordsMore: "More entries omitted — use the download.";
|
|
@@ -1474,6 +1500,10 @@ declare const en: {
|
|
|
1474
1500
|
readonly parentField: "Parent field";
|
|
1475
1501
|
readonly parentFieldHelp: "The field pointing to the parent record (same object) that defines the hierarchy. Only self-referencing fields qualify.";
|
|
1476
1502
|
readonly newView: "New View";
|
|
1503
|
+
readonly viewName: "Name";
|
|
1504
|
+
readonly viewNameHelp: "Machine key (snake_case). Auto-filled from the title — edit if you like.";
|
|
1505
|
+
readonly viewNameRequired: "Enter a key (lowercase letters, numbers, underscore). Not auto-filled for non-Latin titles.";
|
|
1506
|
+
readonly viewNameInvalid: "Use lowercase letters, numbers and underscores; start with a letter or underscore.";
|
|
1477
1507
|
readonly typeOptions: "Type Options";
|
|
1478
1508
|
readonly groupByField: "Group by field";
|
|
1479
1509
|
readonly groupByFieldHelp: "The kanban groups records into columns by this field's values.";
|
|
@@ -1602,6 +1632,11 @@ declare const en: {
|
|
|
1602
1632
|
readonly signUpText: "Sign up";
|
|
1603
1633
|
readonly signingIn: "Signing you in…";
|
|
1604
1634
|
readonly ssoHandoff: "Continue to {{target}}";
|
|
1635
|
+
readonly devAdminHint: {
|
|
1636
|
+
readonly title: "Development instance";
|
|
1637
|
+
readonly body: "Sign in with the seeded dev admin:";
|
|
1638
|
+
readonly dismiss: "Dismiss";
|
|
1639
|
+
};
|
|
1605
1640
|
readonly errors: {
|
|
1606
1641
|
readonly invalidCredentials: "Invalid email or password. Please try again.";
|
|
1607
1642
|
readonly emailNotVerified: "Please verify your email address before signing in.";
|
|
@@ -2062,6 +2097,7 @@ declare const en: {
|
|
|
2062
2097
|
readonly lookupHelpText: "Enter the record id of the referenced object. A picker is coming soon.";
|
|
2063
2098
|
readonly cancel: "Cancel";
|
|
2064
2099
|
readonly confirm: "Confirm";
|
|
2100
|
+
readonly uploading: "Uploading…";
|
|
2065
2101
|
readonly defaultActionTitle: "Action";
|
|
2066
2102
|
readonly ok: "OK";
|
|
2067
2103
|
};
|
package/dist/locales/en.js
CHANGED
|
@@ -2,6 +2,26 @@
|
|
|
2
2
|
* English (en) - Default language pack for Object UI
|
|
3
3
|
*/
|
|
4
4
|
const en = {
|
|
5
|
+
// objectui#2600 B5 — capability picker scope group headers (labels come from
|
|
6
|
+
// the sys_capability registry; only these group titles are UI strings).
|
|
7
|
+
capability: {
|
|
8
|
+
group: {
|
|
9
|
+
platform: 'Platform',
|
|
10
|
+
org: 'Organization',
|
|
11
|
+
other: 'Other',
|
|
12
|
+
},
|
|
13
|
+
// Curated platform capability labels (objectui#2600 B5). Registry-served
|
|
14
|
+
// labels are English; these mirror them and give non-en locales a fallback.
|
|
15
|
+
label: {
|
|
16
|
+
manage_users: 'Manage Users',
|
|
17
|
+
manage_org_users: 'Manage Organization Users',
|
|
18
|
+
manage_metadata: 'Manage Metadata',
|
|
19
|
+
manage_platform_settings: 'Manage Platform Settings',
|
|
20
|
+
setup_access: 'Setup Access',
|
|
21
|
+
setup_write: 'Write Settings',
|
|
22
|
+
studio_access: 'Studio Access',
|
|
23
|
+
},
|
|
24
|
+
},
|
|
5
25
|
lookup: {
|
|
6
26
|
recentlyUsed: 'Recently used',
|
|
7
27
|
allResults: 'All results',
|
|
@@ -72,6 +92,7 @@ const en = {
|
|
|
72
92
|
resultDialog: {
|
|
73
93
|
defaultTitle: 'Save this value now',
|
|
74
94
|
acknowledge: 'I have saved this',
|
|
95
|
+
copyAll: 'Copy all',
|
|
75
96
|
},
|
|
76
97
|
},
|
|
77
98
|
validation: {
|
|
@@ -339,6 +360,7 @@ const en = {
|
|
|
339
360
|
},
|
|
340
361
|
},
|
|
341
362
|
showAll: 'Show all',
|
|
363
|
+
refresh: 'Refresh',
|
|
342
364
|
pullToRefresh: 'Pull to refresh',
|
|
343
365
|
refreshing: 'Refreshing…',
|
|
344
366
|
share: 'Share',
|
|
@@ -365,6 +387,11 @@ const en = {
|
|
|
365
387
|
title: 'Managed by the platform',
|
|
366
388
|
body: 'Rows here are created automatically when actions run on the source record. The list below is a read-only monitoring surface — row-level actions (Approve, Recall, Resend, …) live on each row.',
|
|
367
389
|
},
|
|
390
|
+
systemWritable: {
|
|
391
|
+
short: 'Platform schema',
|
|
392
|
+
title: 'Platform-defined, admin-writable',
|
|
393
|
+
body: "This object's schema is defined by the platform, but its rows are yours to create and edit here. Who may write is governed by delegated administration and record-level security, not by this badge.",
|
|
394
|
+
},
|
|
368
395
|
appendOnly: {
|
|
369
396
|
short: 'Read-only · Audit log',
|
|
370
397
|
title: 'Read-only historical record',
|
|
@@ -452,14 +479,6 @@ const en = {
|
|
|
452
479
|
removeDependency: 'Remove dependency',
|
|
453
480
|
noCandidates: 'No available tasks',
|
|
454
481
|
searchTasks: 'Search tasks…',
|
|
455
|
-
qrcode: 'Mobile QR code',
|
|
456
|
-
},
|
|
457
|
-
qr: {
|
|
458
|
-
title: 'Open on mobile',
|
|
459
|
-
hint: 'Scan with a phone to open the details',
|
|
460
|
-
copy: 'Copy link',
|
|
461
|
-
copied: 'Copied',
|
|
462
|
-
close: 'Close',
|
|
463
482
|
},
|
|
464
483
|
delete: {
|
|
465
484
|
title: 'Delete this task?',
|
|
@@ -483,6 +502,14 @@ const en = {
|
|
|
483
502
|
confirm: 'Auto-reschedule',
|
|
484
503
|
cancel: 'Keep as is',
|
|
485
504
|
},
|
|
505
|
+
autoScheduleDlg: {
|
|
506
|
+
title: 'Auto-schedule',
|
|
507
|
+
body: 'Shift {count} task(s) later to satisfy dependency links?',
|
|
508
|
+
skipped: '{count} locked task(s) also violate links and were skipped.',
|
|
509
|
+
confirm: 'Apply',
|
|
510
|
+
cancel: 'Cancel',
|
|
511
|
+
none: 'All dependencies satisfied — nothing to reschedule.',
|
|
512
|
+
},
|
|
486
513
|
resource: {
|
|
487
514
|
header: 'Resource',
|
|
488
515
|
peak: 'Peak',
|
|
@@ -1306,6 +1333,7 @@ const en = {
|
|
|
1306
1333
|
publishOk: 'Published — objects are now live.',
|
|
1307
1334
|
seedWarn: 'Published, but some sample data failed to load.',
|
|
1308
1335
|
openBuiltApp: 'Open app',
|
|
1336
|
+
designBuiltApp: 'Design in Studio',
|
|
1309
1337
|
previewDraft: 'Preview',
|
|
1310
1338
|
previewApp: 'Preview app',
|
|
1311
1339
|
resizeSplit: 'Resize chat and preview',
|
|
@@ -1382,14 +1410,16 @@ const en = {
|
|
|
1382
1410
|
identityImport: {
|
|
1383
1411
|
policyTitle: 'Sign-in setup for imported users',
|
|
1384
1412
|
policy: {
|
|
1385
|
-
|
|
1413
|
+
auto: 'Automatic (recommended)',
|
|
1386
1414
|
invite: 'Send invitations',
|
|
1387
1415
|
temporary: 'Temporary passwords',
|
|
1416
|
+
none: 'No password (identity only)',
|
|
1388
1417
|
},
|
|
1389
1418
|
policyHint: {
|
|
1419
|
+
auto: 'Reachable users get an invitation (email or SMS); anyone we can\'t reach gets a one-time password, shown ONCE on the result screen. Works with or without an email/SMS service.',
|
|
1420
|
+
invite: 'Every created user gets a set-your-password email (or an invitation SMS for phone-only rows). Requires a configured email/SMS service — unreachable rows fail.',
|
|
1421
|
+
temporary: 'For deployments without email/SMS: every created user gets a one-time password, shown ONCE on the result screen. First sign-in forces a change.',
|
|
1390
1422
|
none: 'Users first sign in with a phone OTP, magic link, or password-reset link, then set their own password.',
|
|
1391
|
-
invite: 'Each created user gets a set-your-password email (or an invitation SMS for phone-only rows). Requires a configured email/SMS service.',
|
|
1392
|
-
temporary: 'For deployments without email/SMS: each created user gets a one-time password, shown ONCE on the result screen. First sign-in forces a change.',
|
|
1393
1423
|
},
|
|
1394
1424
|
passwordsNote: 'Temporary passwords — shown once, never stored. Save them now; each user must change theirs at first sign-in.',
|
|
1395
1425
|
passwordsMore: 'More entries omitted — use the download.',
|
|
@@ -1492,6 +1522,10 @@ const en = {
|
|
|
1492
1522
|
parentField: 'Parent field',
|
|
1493
1523
|
parentFieldHelp: 'The field pointing to the parent record (same object) that defines the hierarchy. Only self-referencing fields qualify.',
|
|
1494
1524
|
newView: 'New View',
|
|
1525
|
+
viewName: 'Name',
|
|
1526
|
+
viewNameHelp: 'Machine key (snake_case). Auto-filled from the title — edit if you like.',
|
|
1527
|
+
viewNameRequired: 'Enter a key (lowercase letters, numbers, underscore). Not auto-filled for non-Latin titles.',
|
|
1528
|
+
viewNameInvalid: 'Use lowercase letters, numbers and underscores; start with a letter or underscore.',
|
|
1495
1529
|
typeOptions: 'Type Options',
|
|
1496
1530
|
groupByField: 'Group by field',
|
|
1497
1531
|
groupByFieldHelp: 'The kanban groups records into columns by this field\'s values.',
|
|
@@ -1620,6 +1654,11 @@ const en = {
|
|
|
1620
1654
|
signUpText: 'Sign up',
|
|
1621
1655
|
signingIn: 'Signing you in…',
|
|
1622
1656
|
ssoHandoff: 'Continue to {{target}}',
|
|
1657
|
+
devAdminHint: {
|
|
1658
|
+
title: 'Development instance',
|
|
1659
|
+
body: 'Sign in with the seeded dev admin:',
|
|
1660
|
+
dismiss: 'Dismiss',
|
|
1661
|
+
},
|
|
1623
1662
|
errors: {
|
|
1624
1663
|
invalidCredentials: 'Invalid email or password. Please try again.',
|
|
1625
1664
|
emailNotVerified: 'Please verify your email address before signing in.',
|
|
@@ -2084,6 +2123,7 @@ const en = {
|
|
|
2084
2123
|
lookupHelpText: 'Enter the record id of the referenced object. A picker is coming soon.',
|
|
2085
2124
|
cancel: 'Cancel',
|
|
2086
2125
|
confirm: 'Confirm',
|
|
2126
|
+
uploading: 'Uploading…',
|
|
2087
2127
|
defaultActionTitle: 'Action',
|
|
2088
2128
|
ok: 'OK',
|
|
2089
2129
|
},
|
package/dist/locales/es.d.ts
CHANGED
|
@@ -1,4 +1,11 @@
|
|
|
1
1
|
declare const es: {
|
|
2
|
+
capability: {
|
|
3
|
+
group: {
|
|
4
|
+
platform: string;
|
|
5
|
+
org: string;
|
|
6
|
+
other: string;
|
|
7
|
+
};
|
|
8
|
+
};
|
|
2
9
|
lookup: {
|
|
3
10
|
recentlyUsed: string;
|
|
4
11
|
allResults: string;
|
|
@@ -69,6 +76,7 @@ declare const es: {
|
|
|
69
76
|
resultDialog: {
|
|
70
77
|
defaultTitle: string;
|
|
71
78
|
acknowledge: string;
|
|
79
|
+
copyAll: string;
|
|
72
80
|
};
|
|
73
81
|
};
|
|
74
82
|
validation: {
|
|
@@ -1485,6 +1493,7 @@ declare const es: {
|
|
|
1485
1493
|
requiredError: string;
|
|
1486
1494
|
cancel: string;
|
|
1487
1495
|
confirm: string;
|
|
1496
|
+
uploading: string;
|
|
1488
1497
|
defaultActionTitle: string;
|
|
1489
1498
|
ok: string;
|
|
1490
1499
|
lookupPlaceholder: string;
|
package/dist/locales/es.js
CHANGED
|
@@ -1,4 +1,12 @@
|
|
|
1
1
|
const es = {
|
|
2
|
+
// objectui#2600 B5 — capability picker scope group headers (labels come from the sys_capability registry).
|
|
3
|
+
capability: {
|
|
4
|
+
group: {
|
|
5
|
+
platform: 'Plataforma',
|
|
6
|
+
org: 'Organización',
|
|
7
|
+
other: 'Otro',
|
|
8
|
+
},
|
|
9
|
+
},
|
|
2
10
|
lookup: {
|
|
3
11
|
recentlyUsed: 'Usados recientemente',
|
|
4
12
|
allResults: 'Todos los resultados',
|
|
@@ -67,8 +75,9 @@ const es = {
|
|
|
67
75
|
},
|
|
68
76
|
actions: {
|
|
69
77
|
resultDialog: {
|
|
70
|
-
defaultTitle: '
|
|
71
|
-
acknowledge: '
|
|
78
|
+
defaultTitle: 'Guarda este valor ahora',
|
|
79
|
+
acknowledge: 'Lo he guardado',
|
|
80
|
+
copyAll: 'Copiar todo',
|
|
72
81
|
},
|
|
73
82
|
},
|
|
74
83
|
validation: {
|
|
@@ -1485,6 +1494,7 @@ const es = {
|
|
|
1485
1494
|
requiredError: "{{label}} es obligatorio",
|
|
1486
1495
|
cancel: "Cancelar",
|
|
1487
1496
|
confirm: "Confirmar",
|
|
1497
|
+
uploading: "Subiendo…",
|
|
1488
1498
|
defaultActionTitle: "Acción",
|
|
1489
1499
|
ok: "Aceptar",
|
|
1490
1500
|
lookupPlaceholder: "Pegar ID de registro (UUID) para {{label}}",
|
package/dist/locales/fr.d.ts
CHANGED
|
@@ -1,4 +1,11 @@
|
|
|
1
1
|
declare const fr: {
|
|
2
|
+
capability: {
|
|
3
|
+
group: {
|
|
4
|
+
platform: string;
|
|
5
|
+
org: string;
|
|
6
|
+
other: string;
|
|
7
|
+
};
|
|
8
|
+
};
|
|
2
9
|
lookup: {
|
|
3
10
|
recentlyUsed: string;
|
|
4
11
|
allResults: string;
|
|
@@ -69,6 +76,7 @@ declare const fr: {
|
|
|
69
76
|
resultDialog: {
|
|
70
77
|
defaultTitle: string;
|
|
71
78
|
acknowledge: string;
|
|
79
|
+
copyAll: string;
|
|
72
80
|
};
|
|
73
81
|
};
|
|
74
82
|
validation: {
|
|
@@ -1483,6 +1491,7 @@ declare const fr: {
|
|
|
1483
1491
|
requiredError: string;
|
|
1484
1492
|
cancel: string;
|
|
1485
1493
|
confirm: string;
|
|
1494
|
+
uploading: string;
|
|
1486
1495
|
defaultActionTitle: string;
|
|
1487
1496
|
ok: string;
|
|
1488
1497
|
lookupPlaceholder: string;
|