Skip to content

Commit fa9c0aa

Browse files
fix(ui): Setup's everyone note and header tags speak to an administrator (#30488)
<!-- claude-projects-attribution: {"github_login":"os-sales"} --> _Requested by **Sales** · [project thread](https://claude.ai/code/project/chan_01D5bWFY3rFzgJcytD5gD4Uu?thread=cmsg_01D5bWFY3rFzgJcytD5gD4UuLMXrdNyk1pRovMvtWKFsbH)_ domain:ui#6 · os-sales · session_01L6bhgWjg9S7avVTjuNn9P2 Refs #30208 Clause-②: no Metadata-protocol: none ## 维护者速读 - 改了什么:设置里两处给管理员看的文字改成业务说法。权限集分配页,被 everyone 岗位分发的权限集提示从「已绑定到 everyone 锚点 — 所有登录成员都持有此权限集。」改为「所有登录成员都持有此权限集。」;设置列表标题旁的三个标签 管理配置 / 平台架构 / 身份 改为 在此配置 / 平台预置 · 可编辑 / 经身份服务写入(十个语言包同步)。 - 为什么改:#30208 走查第 4、9 行:「everyone 锚点」是岗位机器名加引擎术语,三个标签说的是对象怎么建的,管理员不悬停看提示就不知道意思。 - 风险与回滚:只改前端文案,不加不删词条键,不改标签何时显示(objectui#12194、objectui#13385 的裁决不动),悬停说明文字不变;回滚即还原本 PR。 - 先看:`ui/packages/i18n/src/locales/zh.ts` 的 `managedByBadge.*.short`、`ui/packages/app-shell/src/components/ManagedByBadge.tsx` 的 `VARIANTS` 英文兜底、`ui/packages/app-shell/src/views/metadata-admin/AssignedUsersSection.tsx` 的 `everyoneNote`。 - 两分钟验证:`pnpm --dir ui exec vitest run packages/app-shell/src/views/metadata-admin/AssignedUsersSection.test.tsx packages/app-shell/src/components/__tests__/ManagedByBadge.keyboard-27521.test.tsx`,预期 22 个用例全绿。 - 需要你做的:无,席位落地。 ## What changes Card #30208 is a nine-row walkthrough. This PR ships the two rows whose text `ui/` draws; the other rows are listed under Acceptance notes with their owning lane, so the card stays open. - **Row 4, permission set assignment.** `AssignedUsersSection`'s `everyoneNote`, shown when the everyone position distributes the set, now reads 「所有登录成员都持有此权限集。」 / "Every signed-in member holds this set." It no longer names the everyone anchor. - **Row 9, Setup list header tags.** The card offered "remove, or explain". This takes **explain**: the badge stays, drawn under the same rule as before (authoring callers only; Setup record pages carry it on the header chip), and its short label now says what the bucket means for the administrator: | bucket | before (zh / en) | after (zh / en) | |:--|:--|:--| | `config` | 管理配置 / Admin config | 在此配置 / Configured here | | `system-data` | 平台架构 / Platform schema | 平台预置 · 可编辑 / Built in · editable | | `better-auth` | 身份 / Identity | 经身份服务写入 / Via identity service | The same three `short` values change in the ar, de, es, fr, ja, ko, pt and ru packs, so no pack keeps the old meaning. `ManagedByBadge.tsx`'s English fallbacks match `en.ts`. Tooltip titles and bodies are unchanged. No key is added or removed. - **Changeset.** `.changeset/30208-setup-admin-wording.md`, `@object-ui/app-shell` and `@object-ui/i18n` patch. Branch: the harness-assigned `claude/project-thread-9po7qw`, not `claude/issue-30208-*`; the card is #30208. ## Tests - `AssignedUsersSection.test.tsx` gains a top-level describe (3 cases) on its existing harness, with the console locale mocked through `./i18n`'s `useMetadataLocale`: zh-CN shows 「所有登录成员都持有此权限集。」 and the section's text has neither 锚点 nor everyone; English shows "Every signed-in member holds this set." with no "anchor"; CONTROL, a set the everyone position does not distribute shows no note. - `ManagedByBadge.keyboard-27521.test.tsx` gains a top-level describe (3 cases): the zh pack's three tags, the English three, and a CONTROL that `engine-owned` and `append-only` keep 系统管理 and 只读 · 审计日志. - Positive control: with the four source files restored to the base (`git restore --source=c5800818`) and the new tests kept, 4 failed / 18 passed (the four non-control cases), restored with `git checkout HEAD --` and `git diff HEAD` empty. ## Acceptance notes Rows not shipped here, each with its reason and owning lane, for the seat to split: - **Row 1** (permission set assignment help: `fail-closed`, 半开区间 [from, until), 智能体授权): the help texts are served from `packages/plugins/plugin-security/src/translations/zh-CN.objects.generated.ts` (and plugin-approvals for the same 半开区间 phrase). `domain:server`. - **Row 2** (new business unit: 图谱语义, Null 表示租户根节点, HRIS, 图谱查询): `packages/platform-objects/src/apps/translations/zh-CN.objects.generated.ts`. `domain:server`. - **Row 3** (edit organization 「为 true 时…」): the same platform-objects zh-CN bundle, and the pattern recurs on other objects' booleans there. `domain:server`. - **Row 5** (Settings → 数据生命周期 retention / row quota / class quota as raw JSON): needs a new field control over a settings shape served by `packages/objectql/src/lifecycle/lifecycle-settings.ts`; not a pure `ui/` control over an existing field shape. Needs a spec/settings decision on the shape first. - **Row 6** (通知偏好 topic/channel free text, 免打扰 JSON) and the comment's 通知模板 topic/channel: `channel` is free text by an earlier ruling (route A on #25346, cited in `packages/services/service-messaging/src/objects/notification-preference.object.ts`) because the channel set is open at runtime and a `select` cannot store `*`. A picker reverses that ruling, so it is a decision for the maintainer, not a `ui/` fix. 免打扰 (`quiet_hours`, `Field.json`) needs a new time-range control. - **Row 7** (队列 / 队列成员 pages in English, 新建Queue): `sys_queue` and `sys_queue_member` are declared in `packages/plugins/plugin-sharing`, which ships no translation bundle at all; the title, columns and help come from its English object metadata. `domain:server`. - **Row 8** (邮件投递 banner `No mail leaves this machine`, toast `Sent test email to…`): `packages/plugins/plugin-email/src/live-transport-status.ts` and `email-plugin.ts`. `domain:server`. - Seen while taking the screenshots, same class as row 7: on the zh-CN console the Setup sidebar's 人员与组织 / 访问控制 entries contributed by plugin-security (Users, Organization, Business Units, Teams, Invitations, Position Holders, Permission Set Assignment, Sharing Rules, Record Shares, Queues, Queue Members, API Keys) render in English, though `packages/platform-objects/src/apps/translations/zh-CN.ts` carries 「权限集分配」 for `nav_permission_set_assignment`. Visible in the screenshots below. Not measured further, so which side drops the translation (the contributed nav item or the console's nav label lookup) is not established. ## Verification Gates and tests ran on `cd7b73ac`; the head merges `origin/main` (15 files differ from main, all this PR's), after which the two test files and `packages/i18n/` were re-run (below). <details><summary>Live rig and screenshots (zh-CN console, 1440 wide)</summary> `examples/app-showcase` `objectstack dev --seed-admin` on a private port and file database, the console via `vite` in `ui/apps/console` with `DEV_PROXY_TARGET`, Chromium with browser locale zh-CN, signed in as the seeded admin. `member_default` is distributed by the `everyone` position (`GET /api/v1/meta/position`: `everyone ["showcase_member_default","member_default"]`). Before shots: the four source files restored to the base under vite HMR, then restored to `HEAD`. Screenshots live on the never-merged branch `claude/issue-30208-evidence` (commit `c30ec3b2`). Before, 权限集分配 → 成员 — 标准访问: note 「已绑定到 everyone 锚点 — 所有登录成员都持有此权限集。」 ![before permission set](https://github.com/objectstack-ai/objectstack/blob/c30ec3b2fffa97f707a88ebe21d660995dc29006/evidence/30208/before-permset-everyone-zh-1440.png?raw=true) After: 「所有登录成员都持有此权限集。」 ![after permission set](https://github.com/objectstack-ai/objectstack/blob/c30ec3b2fffa97f707a88ebe21d660995dc29006/evidence/30208/after-permset-everyone-zh-1440.png?raw=true) Before / after, 用户权限集 list (`system-data`): 平台架构 → 平台预置 · 可编辑 ![before system-data](https://github.com/objectstack-ai/objectstack/blob/c30ec3b2fffa97f707a88ebe21d660995dc29006/evidence/30208/before-list-tag-system-data-zh-1440.png?raw=true) ![after system-data](https://github.com/objectstack-ai/objectstack/blob/c30ec3b2fffa97f707a88ebe21d660995dc29006/evidence/30208/after-list-tag-system-data-zh-1440.png?raw=true) Before / after, users list (`better-auth`): 身份 → 经身份服务写入 ![before better-auth](https://github.com/objectstack-ai/objectstack/blob/c30ec3b2fffa97f707a88ebe21d660995dc29006/evidence/30208/before-list-tag-better-auth-zh-1440.png?raw=true) ![after better-auth](https://github.com/objectstack-ai/objectstack/blob/c30ec3b2fffa97f707a88ebe21d660995dc29006/evidence/30208/after-list-tag-better-auth-zh-1440.png?raw=true) Before / after, email template list (`config`): 管理配置 → 在此配置 ![before config](https://github.com/objectstack-ai/objectstack/blob/c30ec3b2fffa97f707a88ebe21d660995dc29006/evidence/30208/before-list-tag-config-zh-1440.png?raw=true) ![after config](https://github.com/objectstack-ai/objectstack/blob/c30ec3b2fffa97f707a88ebe21d660995dc29006/evidence/30208/after-list-tag-config-zh-1440.png?raw=true) </details> <details><summary>Tests, typecheck, lint</summary> - `pnpm --dir ui exec vitest run` on the two changed test files: Test Files 2 passed (2), Tests 22 passed (22), lock VERDICT command-exit 0. - Wider run: `packages/i18n/`, `packages/app-shell/src/views/metadata-admin/`, `packages/app-shell/src/components/` and the five ObjectView / RecordDetailView / RecordFormPage managed-by badge files: Test Files 825 passed (825), Tests 9149 passed, 14 skipped, lock VERDICT command-exit 0. - `turbo run type-check --filter=@object-ui/app-shell --filter=@object-ui/i18n`: lock VERDICT command-exit 0. - `pnpm --dir ui run check:spec-symbols`: exit 0. eslint on the changed files and `packages/i18n/src/locales`: exit 0. `pnpm --dir ui run check:new-line-citations`: 0 new citations, exit 0. `pnpm check:doc-authoring`: exit 0. - After merging `origin/main` (head `a5f5ec0b`): rebuilt the console closure (73 tasks), then `packages/i18n/` plus the two changed test files: Test Files 97 passed (97), Tests 1465 passed, 13 skipped, lock VERDICT command-exit 0. </details> <details><summary>Derived gates (35/35 exit 0)</summary> `node scripts/pm/dispatch-gates.mjs --commands` derived 35 families at `cd7b73ac`; each ran and exited 0. `--ran` reconciliation: 35 derived, 35 run, 0 NOT-MEASURED (a derived zero: every line carries an exit code and none is 3). CI runs the rest. </details> --- _Generated by [Claude Code](https://claude.ai/code/session_01L6bhgWjg9S7avVTjuNn9P2)_ --------- Co-authored-by: Claude <noreply@anthropic.com>
1 parent 7d11067 commit fa9c0aa

15 files changed

Lines changed: 135 additions & 36 deletions

File tree

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
---
2+
'@object-ui/app-shell': patch
3+
'@object-ui/i18n': patch
4+
---
5+
6+
fix(ui): Setup's everyone note and header tags speak to an administrator
7+
8+
Clause-②: no
9+
Metadata-protocol: none
10+
11+
- **Assigned users of a permission set:** a set the everyone position distributes now says 「所有登录成员都持有此权限集。」 / "Every signed-in member holds this set." It no longer names the everyone anchor.
12+
- **Setup list header tags:** three tags now say what they mean for the administrator reading the page, in all ten language packs. Admin config becomes "Configured here" (zh 「在此配置」), Platform schema becomes "Built in · editable" (zh 「平台预置 · 可编辑」), and Identity becomes "Via identity service" (zh 「经身份服务写入」). The tooltip text and the rule for when a tag is drawn do not change.

‎ui/packages/app-shell/src/components/ManagedByBadge.tsx‎

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,11 +41,16 @@ import { useCanAuthorMetadata } from '../hooks/useCanAuthorMetadata.js';
4141
* via `resolveEffectiveCrudAffordances()`. This badge purely *labels* the bucket;
4242
* the detailed explanation lives in the tooltip.
4343
*
44+
* The short label says what the bucket means to the administrator reading the
45+
* page ("Configured here", "Built in · editable", "Via identity service"),
46+
* never the engine's name for it ("config", "schema", the identity table):
47+
* it is the one word they see without opening the tooltip (objectstack#30208).
48+
*
4449
* ## An authoring aid: it draws for an authoring caller only (objectui#12194)
4550
*
4651
* The bucket is a fact about how the object is BUILT, so the label speaks to
4752
* whoever can author it. To an end user it is an implementation word — the
48-
* `better-auth` variant reads 「身份」 / "Identity" on a workspace page a host
53+
* `better-auth` variant names the identity service on a workspace page a host
4954
* authored, with no meaning to them — and the record page draws it outside
5055
* the page tree, so no page could leave it out. Triage's ruling on
5156
* objectui#12194 (option a): the badge renders only for a caller who can
@@ -112,7 +117,7 @@ const VARIANTS: Record<VariantKey, Variant> = {
112117
config: {
113118
icon: Settings2,
114119
i18nKey: 'config',
115-
short: 'Admin config',
120+
short: 'Configured here',
116121
title: 'Administrator configuration',
117122
body: () =>
118123
'These rows define how the platform behaves at runtime. Author them here; the runtime data they produce lives in a separate table.',
@@ -140,7 +145,7 @@ const VARIANTS: Record<VariantKey, Variant> = {
140145
'system-data': {
141146
icon: Settings2,
142147
i18nKey: 'systemWritable',
143-
short: 'Platform schema',
148+
short: 'Built in · editable',
144149
title: 'Platform-defined, admin-writable',
145150
body: () =>
146151
"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.",
@@ -162,7 +167,7 @@ const VARIANTS: Record<VariantKey, Variant> = {
162167
'better-auth': {
163168
icon: ShieldAlert,
164169
i18nKey: 'betterAuth',
165-
short: 'Identity',
170+
short: 'Via identity service',
166171
title: 'Written through the built-in identity service',
167172
body: (display) =>
168173
`This object's schema belongs to ${display}, the platform's built-in identity service. Create and change these records with the actions on this page, or through sign-in, invitation and security flows; every one of them goes through that service. Editing the table directly would bypass password hashing, session validation, two-factor checks and audit hooks.`,

‎ui/packages/app-shell/src/components/__tests__/ManagedByBadge.keyboard-27521.test.tsx‎

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,3 +64,43 @@ describe('ManagedByBadge — the identity note is true of a team made here (obje
6464
expect(note).not.toContain('身份提供方');
6565
});
6666
});
67+
68+
/**
69+
* objectstack#30208 row 9 — the Setup list header tags read 「管理配置」,
70+
* 「平台架构」 and 「身份」: the engine's names for how an object is built, which
71+
* tell an administrator nothing until they open the tooltip. Each tag now says
72+
* what it means for them: configure it here, built in but editable, written
73+
* through the identity service.
74+
*/
75+
describe('ManagedByBadge — the tag word speaks to an administrator (objectstack#30208)', () => {
76+
const tagText = (managedBy: string, language?: string) => {
77+
const tag = language ? (
78+
<I18nProvider config={{ defaultLanguage: language, detectBrowserLanguage: false }}>
79+
<ManagedByBadge managedBy={managedBy} />
80+
</I18nProvider>
81+
) : (
82+
<ManagedByBadge managedBy={managedBy} />
83+
);
84+
const { unmount } = render(tag);
85+
const text = screen.getByTestId('managed-by-badge').textContent;
86+
unmount();
87+
return text;
88+
};
89+
90+
it('Chinese: config, system-data and better-auth read what the administrator can do', () => {
91+
expect(tagText('config', 'zh')).toBe('在此配置');
92+
expect(tagText('system-data', 'zh')).toBe('平台预置 · 可编辑');
93+
expect(tagText('better-auth', 'zh')).toBe('经身份服务写入');
94+
});
95+
96+
it('English: the same three tags', () => {
97+
expect(tagText('config')).toBe('Configured here');
98+
expect(tagText('system-data')).toBe('Built in · editable');
99+
expect(tagText('better-auth')).toBe('Via identity service');
100+
});
101+
102+
it('CONTROL: the tags the walkthrough did not name keep their words', () => {
103+
expect(tagText('engine-owned', 'zh')).toBe('系统管理');
104+
expect(tagText('append-only', 'zh')).toBe('只读 · 审计日志');
105+
});
106+
});

‎ui/packages/app-shell/src/views/metadata-admin/AssignedUsersSection.test.tsx‎

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,12 @@ vi.mock('@object-ui/fields', async (importOriginal) => {
3737
};
3838
});
3939
const pickedUsers = [{ id: 'u_new', name: 'New Nora' }];
40+
// The section picks its copy by the console locale; English unless a case sets it.
41+
let localeFixture: 'en-US' | 'zh-CN' = 'en-US';
42+
vi.mock('./i18n', async (importOriginal) => ({
43+
...(await importOriginal<Record<string, unknown>>()),
44+
useMetadataLocale: () => localeFixture,
45+
}));
4046

4147
// The registry's position definitions — the binding is part of the definition.
4248
const registryPositions = [
@@ -217,3 +223,39 @@ describe('AssignedUsersSection — reports each holders read to its host (object
217223
expect(onHoldersRead).not.toHaveBeenCalled();
218224
});
219225
});
226+
227+
/**
228+
* objectstack#30208 row 4 — a set the everyone position distributes said
229+
* 「已绑定到 everyone 锚点」: a position's machine name and an engine word, on a
230+
* page a business administrator reads. The note says who holds the set.
231+
*/
232+
describe('AssignedUsersSection — the everyone note says who holds the set (objectstack#30208)', () => {
233+
it('zh-CN: names every signed-in member, not the everyone anchor', async () => {
234+
localeFixture = 'zh-CN';
235+
try {
236+
const { container } = render(<AssignedUsersSection permissionSetName="showcase_contributor" />);
237+
await waitFor(() => expect(screen.getByText('所有登录成员都持有此权限集。')).toBeTruthy());
238+
expect(container.textContent).not.toContain('锚点');
239+
expect(container.textContent).not.toContain('everyone');
240+
} finally {
241+
localeFixture = 'en-US';
242+
}
243+
});
244+
245+
it('English: the same note, with no anchor word', async () => {
246+
const { container } = render(<AssignedUsersSection permissionSetName="showcase_contributor" />);
247+
await waitFor(() => expect(screen.getByText('Every signed-in member holds this set.')).toBeTruthy());
248+
expect(container.textContent).not.toMatch(/anchor/i);
249+
});
250+
251+
it('CONTROL: a set the everyone position does not distribute draws no note', async () => {
252+
localeFixture = 'zh-CN';
253+
try {
254+
render(<AssignedUsersSection permissionSetName="showcase_auditor" />);
255+
await waitFor(() => expect(screen.getByText(/还没有分配任何用户/)).toBeTruthy());
256+
expect(screen.queryByText('所有登录成员都持有此权限集。')).toBeNull();
257+
} finally {
258+
localeFixture = 'en-US';
259+
}
260+
});
261+
});

‎ui/packages/app-shell/src/views/metadata-admin/AssignedUsersSection.tsx‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ function useCopy() {
158158
countOf: (n: number) => n + ' 人',
159159
direct: '直授',
160160
viaPosition: (p: string) => '经岗位 ' + p,
161-
everyoneNote: '已绑定到 everyone 锚点 — 所有登录成员都持有此权限集。',
161+
everyoneNote: '所有登录成员都持有此权限集。',
162162
positionHeldHint: '经岗位持有 — 在岗位的指派中移除。',
163163
}
164164
: {
@@ -186,7 +186,7 @@ function useCopy() {
186186
countOf: (n: number) => String(n),
187187
direct: 'direct',
188188
viaPosition: (p: string) => 'via position ' + p,
189-
everyoneNote: 'Bound to the everyone anchor — every signed-in member holds this set.',
189+
everyoneNote: 'Every signed-in member holds this set.',
190190
positionHeldHint: 'Held via a position — remove it on the position’s assignments.',
191191
},
192192
[zh],

‎ui/packages/i18n/src/locales/ar.ts‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -996,12 +996,12 @@ const ar = {
996996
},
997997
managedByBadge: {
998998
systemWritable: {
999-
short: "مخطط المنصة",
999+
short: "مضمَّن · قابل للتعديل",
10001000
title: "تحدده المنصة وقابل للكتابة من المسؤول",
10011001
body: "تحدد المنصة مخطط هذا الكائن، لكن صفوفه لك تنشئها وتحررها هنا. ومن يحق له الكتابة تحدده الإدارة المفوَّضة والأمان على مستوى السجل، لا هذه الشارة.",
10021002
},
10031003
config: {
1004-
short: "إعدادات المسؤول",
1004+
short: "يُضبط هنا",
10051005
title: "تكوين المسؤول",
10061006
body: "تحدد هذه الصفوف سلوك المنصة أثناء التشغيل. أنشئها هنا؛ وتُخزَّن بيانات التشغيل الناتجة في جدول منفصل.",
10071007
},
@@ -1016,7 +1016,7 @@ const ar = {
10161016
body: "سجل تدقيق غير قابل للتغيير. لا يمكن إنشاء الصفوف أو تعديلها أو حذفها من الواجهة — تكتبها المنصة عند وقوع الأحداث. استخدم التصدير للتنزيل لمراجعة الامتثال.",
10171017
},
10181018
betterAuth: {
1019-
short: "الهوية",
1019+
short: "عبر خدمة الهوية",
10201020
title: "يُكتب عبر خدمة الهوية المدمجة",
10211021
body: "مخطط هذا الكائن مملوك لـ {{provider}}، خدمة الهوية المدمجة في المنصة. أنشئ هذه السجلات وعدّلها بالإجراءات في هذه الصفحة أو عبر تدفقات تسجيل الدخول والدعوة والأمان؛ فكلها تمر عبر هذه الخدمة. أما تعديل الجدول مباشرة فيتجاوز تجزئة كلمات المرور والتحقق من الجلسات وفحوصات المصادقة الثنائية وخطافات التدقيق.",
10221022
},

‎ui/packages/i18n/src/locales/de.ts‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -887,12 +887,12 @@ const de = {
887887
},
888888
managedByBadge: {
889889
systemWritable: {
890-
short: "Plattform-Schema",
890+
short: "Integriert · bearbeitbar",
891891
title: "Plattformdefiniert, für Admins beschreibbar",
892892
body: "Das Schema dieses Objekts wird von der Plattform definiert, seine Zeilen können Sie hier jedoch selbst anlegen und bearbeiten. Wer schreiben darf, regeln die delegierte Administration und die Datensatzsicherheit — nicht dieses Abzeichen.",
893893
},
894894
config: {
895-
short: "Admin-Konfiguration",
895+
short: "Hier konfiguriert",
896896
title: "Administrator-Konfiguration",
897897
body: "Diese Zeilen definieren das Laufzeitverhalten der Plattform. Erstellen Sie sie hier; die erzeugten Laufzeitdaten liegen in einer separaten Tabelle.",
898898
},
@@ -907,7 +907,7 @@ const de = {
907907
body: "Unveränderliches Audit-Log. Zeilen können in der UI nicht erstellt, bearbeitet oder gelöscht werden – die Plattform schreibt sie bei Ereignissen. Nutzen Sie Export für Compliance-Prüfungen.",
908908
},
909909
betterAuth: {
910-
short: "Identität",
910+
short: "Über den Identitätsdienst",
911911
title: "Über den integrierten Identitätsdienst geschrieben",
912912
body: "Das Schema dieses Objekts gehört {{provider}}, dem integrierten Identitätsdienst der Plattform. Legen Sie diese Datensätze mit den Aktionen auf dieser Seite oder über Anmelde-, Einladungs- und Sicherheitsabläufe an und ändern Sie sie dort; alle laufen über diesen Dienst. Direkte Änderungen an der Tabelle würden Passwort-Hashing, Sitzungsvalidierung, Zwei-Faktor-Prüfungen und Audit-Hooks umgehen.",
913913
},

‎ui/packages/i18n/src/locales/en.ts‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1155,7 +1155,7 @@ const en = {
11551155
},
11561156
managedByBadge: {
11571157
config: {
1158-
short: 'Admin config',
1158+
short: 'Configured here',
11591159
title: 'Administrator configuration',
11601160
body: 'These rows define how the platform behaves at runtime. Author them here; the runtime data they produce lives in a separate table.',
11611161
},
@@ -1165,7 +1165,7 @@ const en = {
11651165
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.',
11661166
},
11671167
systemWritable: {
1168-
short: 'Platform schema',
1168+
short: 'Built in · editable',
11691169
title: 'Platform-defined, admin-writable',
11701170
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.",
11711171
},
@@ -1175,7 +1175,7 @@ const en = {
11751175
body: "Immutable audit log. Rows cannot be created, edited, or deleted from the UI — they're written by the platform when events occur. Use Export to download for compliance review.",
11761176
},
11771177
betterAuth: {
1178-
short: 'Identity',
1178+
short: 'Via identity service',
11791179
title: 'Written through the built-in identity service',
11801180
body: "This object's schema belongs to {{provider}}, the platform's built-in identity service. Create and change these records with the actions on this page, or through sign-in, invitation and security flows; every one of them goes through that service. Editing the table directly would bypass password hashing, session validation, two-factor checks and audit hooks.",
11811181
},

‎ui/packages/i18n/src/locales/es.ts‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -917,12 +917,12 @@ const es = {
917917
},
918918
managedByBadge: {
919919
systemWritable: {
920-
short: "Esquema de la plataforma",
920+
short: "Integrado · editable",
921921
title: "Definido por la plataforma, editable por el administrador",
922922
body: "El esquema de este objeto lo define la plataforma, pero sus filas son suyas: puede crearlas y editarlas aquí. Quién puede escribir lo determinan la administración delegada y la seguridad a nivel de registro, no esta insignia.",
923923
},
924924
config: {
925-
short: "Configuración",
925+
short: "Se configura aquí",
926926
title: "Configuración del administrador",
927927
body: "Estas filas definen el comportamiento de la plataforma en tiempo de ejecución. Créelas aquí; los datos de tiempo de ejecución que producen viven en una tabla separada.",
928928
},
@@ -937,7 +937,7 @@ const es = {
937937
body: "Registro de auditoría inmutable. Las filas no se pueden crear, editar ni eliminar desde la interfaz: las escribe la plataforma cuando ocurren eventos. Use Exportar para descargarlas para revisión de cumplimiento.",
938938
},
939939
betterAuth: {
940-
short: "Identidad",
940+
short: "Vía el servicio de identidad",
941941
title: "Escrito a través del servicio de identidad integrado",
942942
body: "El esquema de este objeto pertenece a {{provider}}, el servicio de identidad integrado de la plataforma. Cree y modifique estos registros con las acciones de esta página o mediante los flujos de inicio de sesión, invitación y seguridad; todos pasan por ese servicio. Editar la tabla directamente omitiría el hash de contraseñas, la validación de sesiones, las comprobaciones de dos factores y los hooks de auditoría.",
943943
},

‎ui/packages/i18n/src/locales/fr.ts‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -912,12 +912,12 @@ const fr = {
912912
},
913913
managedByBadge: {
914914
systemWritable: {
915-
short: "Schéma de la plateforme",
915+
short: "Intégré · modifiable",
916916
title: "Défini par la plateforme, modifiable par l'administrateur",
917917
body: "Le schéma de cet objet est défini par la plateforme, mais ses lignes vous appartiennent : vous pouvez les créer et les modifier ici. Qui peut écrire est déterminé par l'administration déléguée et la sécurité au niveau des enregistrements, pas par ce badge.",
918918
},
919919
config: {
920-
short: "Config admin",
920+
short: "Configuré ici",
921921
title: "Configuration administrateur",
922922
body: "Ces lignes définissent le comportement de la plateforme à l'exécution. Créez-les ici ; les données d'exécution produites résident dans une table séparée.",
923923
},
@@ -932,7 +932,7 @@ const fr = {
932932
body: "Journal d'audit immuable. Les lignes ne peuvent pas être créées, modifiées ni supprimées depuis l'interface : la plateforme les écrit lors des événements. Utilisez Exporter pour les télécharger à des fins de conformité.",
933933
},
934934
betterAuth: {
935-
short: "Identité",
935+
short: "Via le service d'identité",
936936
title: "Écrit via le service d'identité intégré",
937937
body: "Le schéma de cet objet appartient à {{provider}}, le service d'identité intégré de la plateforme. Créez et modifiez ces enregistrements avec les actions de cette page ou via les flux de connexion, d'invitation et de sécurité ; tous passent par ce service. Modifier la table directement contournerait le hachage des mots de passe, la validation des sessions, les contrôles à deux facteurs et les hooks d'audit.",
938938
},

0 commit comments

Comments
 (0)