Skip to content

Commit 576d5df

Browse files
huangyiireneclaude
andauthored
fix(platform-objects): decide the object field-editor panel en-echoes per leaf, and derive the panel pin (#19418)
Part of #19403 Clause-②: no ## What this is One panel family, decided **leaf by leaf**. The card's deliverable is a per-leaf judgement with its reason recorded, not 84 translations; every leaf below was decided on its own evidence, and the verdicts with their reasons live in a ledger the suite reads (`object-field-editor-panel-echo-decisions.test.ts`), not only in this body. **The family: the object field editor** — `object.fields['fields.*']`, the panel the card samples (`placeholder`, `valueDomain`, `rows`, `deleteBehavior`, `expression` …). It is the most trafficked authoring surface in Studio: every field an author creates is typed into it. ⛔ Not `Fixes` — this is one family of the card's population, and the card outlives this round. **Eight families remain** (65 label keys), listed at the foot of this body. ## The reading, re-taken on this base — the card's numbers are NOT inherited Census instrument: flatten every `*.metadata-forms.generated.ts` bundle and compare `.label` leaves against the `en` bundle. Population fixed here: **the `.label` leaves of the metadata-form catalogs** (the seat's population, 538 leaves), **plus the sibling `helpText` leaf of every key this round decides** — a panel whose field name is Chinese and whose tooltip is English is the same defect half fixed. Measured on worktree base `0862063ba`: | reading | result | |:--|:--| | `en` string leaves in the metadata-form catalogs | 893 | | of which `.label` leaves | 538 | | ⭐ POSITIVE CONTROL — labels genuinely translated | **459** (`zh-CN`) · **443** (`ja-JP`) · **443** (`es-ES`) | | labels echoing the `en` source, per locale | 79 · 95 · 95 | | label keys echoing in ALL THREE locales | **79** ⇒ 237 leaves | ⭐ The control is what makes the echo count mean something: 459 translated against 79 echoing is a discrimination, not a parser that matches everything. **This is 79 / 237, not the card's 83 / 249, and the difference is fully accounted for**: the card's table was taken before PR #19401 landed, which translated exactly four label leaves (`report.fields.dataset` / `values` / `rows`, `dataset.fields.measures`). 83 − 4 = 79, and the control moves the same way (455 → 459, 439 → 443, 439 → 443), matching the reading the dispatching seat took after #19401 to the unit. The other count on the card (82 / 230, over 417 declared form-field paths, older base) answers a different question and is not comparable — stated there, confirmed here. **After this change**: 65 keys / 195 leaves echo in all three locales; control 473 · 457 · 457. ## The verdicts — 14 keys × 2 string leaves × 3 locales = 84 decisions Every one is `translate`, and **not one of them is "translate because it is English"**. The echo direction was tested per leaf by asking what this catalog's own authored corpus answers for that term: - **Same-string precedent, authored in all three locales** — `placeholder` (`action.fields.params.placeholder.label` reads 占位文本 / プレースホルダー / Marcador de posición), `deleteBehavior` and `expression` and `summaryOperations` (all three authored on the sibling `field` panel, label and helpText), `summaryOperations.object` / `.field` (nine and seven other paths), `visibleWhen` (two other paths). - **Decided AGAINST a same-string precedent** — `fields.rows.label`. `report.fields.rows.label` is authored as 行 / 行 / Filas, but that leaf names a pivot axis and this one is a COUNT of text rows (its own helpText says so), so `zh-CN` and `ja-JP` depart to 行数 while `es-ES` keeps Filas, which carries both senses. This is the leaf that shows the judgement is per leaf and not per string. - **Machine tokens kept English inside translated prose** — `lookup` in `lookupFilters` (the authored `fields.reference.helpText` keeps `lookup` and `tree` in all three locales), `count` in `summaryOperations.field.helpText`, `CEL`, and the autonumber literals `"INV-{0000}"` / `{YYYY}/{MM}/{DD}` / `{field_name}`. - **A distinction the source draws, preserved** — `summaryOperations.function.label` is rendered as the plain word (函数 / 関数 / Función), deliberately not as "aggregation function", because the source says `Function` at the label and `Aggregation function` at the helpText one line below. - **Panel-internal control** for the prose leaves: each carried an entry in this package's per-locale `source-hashes.generated.ts` provenance table in all three locales, while every authored neighbour on the same panel carried none — which is what an unauthored extractor fill looks like here. Per-leaf reasons for all 28 leaves are in the ledger; this list is the summary, not the record. ## The instrument, reused not reinvented `object-field-editor-panel-echo-decisions.test.ts` is the #19355 shape: one row per leaf, verdict per locale, reason, and the `en` source pinned EQUAL to the live bundle so rewording the English reds the row instead of leaving a decision standing over text nobody judged. An `echo` verdict must carry its own per-locale departure reason. Two additions, both because this round would otherwise ship a check that cannot fail: 1. **The echo-reason rule is a predicate with a dark control.** Every verdict here is `translate`, so asserting the rule over the ledger alone evaluates nothing — the suite feeds it a synthetic `echo` row and asserts it is refused, then asserts it is accepted once a departure reason is added. 2. **The panel population is DERIVED, which is the structural half the card asks for.** `repeater-row-properties.test.ts` already refuses an en-echo inside its population, and it filters on `spec.type === 'repeater'`; the object form declares its field editor as `{ field: 'fields', type: 'record' }` with 35 children, so that derivation yields exactly four row properties for `objectForm` (`fields.options.*`) and **none** of the 14 keys here — the card's "0 of the keys sit inside it", measured rather than assumed. The new file walks the `object.fields['fields.*']` leaves out of the `en` catalog and refuses any that reads its source without a ledger row saying so, so a re-fill or a field added to the editor tomorrow is red on the day it lands. ## Regeneration — the silent-loss hazard on this path Translated-locale values are hand-written; the provenance tables are not. Regenerated with **`pnpm i18n:extract`** (the command this package's extract config documents), never by hand, and **no key was added or removed** — so the `merge=os-regen` gap on `*.metadata-forms.generated.ts` (`git check-attr merge` reads `unspecified` on these paths) has nothing to lose even in principle. The bundle diff is 84 insertions / 84 deletions, leaf for leaf; the extract's own diff is 84 deletions and zero insertions — the 28 provenance rows per locale that now record these leaves as authored. `pnpm check:i18n` green is the proof that the hand-written values are byte-identical to what a fresh extract writes, across all nine bundle sets. ## Reverse verification — the new pin can fail Committed first, then ablated through `scripts/ablation-replace.mjs` (anchor must hit; on-disk counts and blob hashes are the tool's own verdict), one decided leaf reverted to its English source in `zh-CN`: - before: `label: "占位文本",` x1 · after: x0, `label: "Placeholder",` x1 → x2, blob `8f480a6bbe30` → `6bd6a8c0b277` - suite under the mutation: **2 failed | 9 passed** — the enumerated verdict (`zh-CN object.fields.fields.placeholder.label reads its en source again`) AND the derived panel pin, independently - restored: blob back to `8f480a6bbe30` == HEAD, `git diff HEAD` empty, working tree clean - suite restored: **11 passed** ## Verification - `pnpm --filter @objectstack/platform-objects test` — 44 files, **610 passed** - `pnpm --filter @objectstack/platform-objects typecheck` — green (its `tsconfig.test.json` program reaches the new file; `--listFiles` confirms it, and it contributes no errors) - `pnpm check:i18n` — **green**, 9 packages in sync (prerequisite closure built first; its first run exited **3**, PREREQUISITE NOT MET, which is not a reading) - `pnpm lint` — repo-wide, **exit 0**, at `da144a4d` - Gate families derived with `scripts/pm/dispatch-gates.mjs` and reconciled with `--ran`: **59 derived · 58 run green · 0 unrun · 1 NOT MEASURED** — `pnpm check:dual-build-cjs-loads` exits 3 (PREREQUISITE NOT MET: it reads built output for every package in the repo). That prerequisite is a whole-repo build, which is CI's `Build Core`, and this diff adds no package and changes no export. ## Changeset, measured `@objectstack/platform-objects` is `private: false` with `files: ["dist", …]`, and `src/metadata-translations/index.ts` imports all three translated bundles. Probed on the built output: a new leaf (`Dominio de valores`, and 占位文本 in its esbuild-escaped form) is present in `dist/metadata-translations/index.js`, `dist/index.js` and `dist/plugin.js`, with a pre-existing translated leaf as the positive control and an invented string as the negative control. ⇒ the diff publishes, `skip-changeset` would be wrong, and a **`patch`** changeset is included. ⚠️ Worth one line for whoever probes this dist next: the first probe searched for the literal CJK and found **nothing, including the positive control** — tsup emits non-ASCII as `\uXXXX`. A probe with no positive control would have read that as "this does not publish". ## The eight families that remain (65 label keys, all-three-locale echoes, this base) | family | keys | |:--|--:| | `page.fields.interfaceConfig.*` (+ `page.sections.interface`) | 15 | | `object.fields.enable.*` (+ `validations`) — the object capabilities panel | 9 | | `field.fields.*` — the standalone field panel (several keys now have a precedent from this round) | 9 | | `dataset.fields.*` + `dataset.sections.*` + `dataset.label` | 12 | | `action.fields.*` | 6 | | `hook.fields.*` | 5 | | metadata-type display names with no panel: `seed` · `mapping` · `api` · `doc` · `book` · `capability` | 6 | | `report.fields.*` + `report.sections.dataset_binding` | 3 | ## Acceptance notes Noted, not filed: - `report.sections.*` (label and description) — the population the card records as having no home. Still uncounted by any `.label` census and unseen by any pin. Successor: the `report` family row above, if the seat dispatches it. - The object form declares `deleteBehavior` **twice** under its field editor, with mutually exclusive `visibleWhen` predicates (`data.type == 'lookup'` and `data.type == 'master_detail'`) and different option sets. Checked because a duplicate child looked like a defect: it is deliberate, both copies carry the same label and helpText, and the extractor emits one key. No finding. - `fields.lookupFilters` declares no `type` (it carries `widget: 'json'`). Legal — `FormFieldBaseSchema.type` is `.optional()` with "auto-infers widget if omitted". No finding. - The nine bundle sets other than this one still do not opt into the provenance table (`--source-hashes`), so their generated leaves stay legacy-trusted. Documented in the extract config; not this card's. --- _Generated by [Claude Code](https://claude.ai/code/session_01NcPSwnmJHczmTu6FG7NMjE)_ --------- Co-authored-by: Claude <noreply@anthropic.com>
1 parent a0e62e6 commit 576d5df

8 files changed

Lines changed: 642 additions & 168 deletions

‎.changeset/olive-moons-tickle.md‎

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
---
2+
'@objectstack/platform-objects': patch
3+
---
4+
5+
Translate the object field-editor panel leaves that shipped their English source in every locale
6+
7+
Fourteen metadata-form keys under `object.fields['fields.*']` — the field editor on the object form (`placeholder`, `valueDomain`, `rows`, `lookupFilters`, `deleteBehavior`, `expression`, the four `summaryOperations` entries, `autonumberFormat`, `visibleWhen`, `readonlyWhen`, `requiredWhen`) — carried both their `label` and their `helpText` byte-identical to the `en` source in `zh-CN`, `ja-JP` and `es-ES`, so an author working in a translated locale read English on the most trafficked authoring panel in Studio while everything around them was translated. All 28 leaves are now translated in each locale; each was judged individually, and the 84 verdicts with their reasons are pinned in `object-field-editor-panel-echo-decisions.test.ts`, which also derives the panel's population so a re-fill or a newly added field is red on the day it lands. No key was added, removed or renamed — the bundles' shape is unchanged.

‎packages/platform-objects/src/apps/translations/es-ES.metadata-forms.generated.ts‎

Lines changed: 28 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -109,8 +109,8 @@ export const esESMetadataForms: NonNullable<TranslationData['metadataForms']> =
109109
helpText: "Valor predeterminado para registros nuevos (literal JSON)"
110110
},
111111
"fields.placeholder": {
112-
label: "Placeholder",
113-
helpText: "Hint text shown inside the empty input; disappears once a value is entered"
112+
label: "Marcador de posición",
113+
helpText: "Texto de ayuda que se muestra dentro del campo vacío; desaparece al introducir un valor"
114114
},
115115
"fields.maxLength": {
116116
label: "Longitud máxima",
@@ -121,12 +121,12 @@ export const esESMetadataForms: NonNullable<TranslationData['metadataForms']> =
121121
helpText: "Mínimo de caracteres"
122122
},
123123
"fields.valueDomain": {
124-
label: "Value Domain",
125-
helpText: "Standard the written value must belong to; a write carrying a non-member is refused"
124+
label: "Dominio de valores",
125+
helpText: "Estándar al que debe pertenecer el valor escrito; se rechaza una escritura con un valor que no pertenezca"
126126
},
127127
"fields.rows": {
128-
label: "Rows",
129-
helpText: "Inline editor height (text rows)"
128+
label: "Filas",
129+
helpText: "Altura del editor en línea (filas de texto)"
130130
},
131131
"fields.min": {
132132
label: "Mínimo",
@@ -165,44 +165,44 @@ export const esESMetadataForms: NonNullable<TranslationData['metadataForms']> =
165165
helpText: "Nombre del objeto de destino. En un campo tree es opcional y, si se indica, debe ser este mismo objeto (un árbol es una jerarquía dentro de su propio objeto — para enlazar con otro objeto, usa un lookup)"
166166
},
167167
"fields.lookupFilters": {
168-
label: "Lookup Filters",
169-
helpText: "Filter rules applied to the picker ({field, operator, value})"
168+
label: "Filtros de lookup",
169+
helpText: "Reglas de filtro aplicadas al selector ({field, operator, value})"
170170
},
171171
"fields.deleteBehavior": {
172-
label: "Delete Behavior",
173-
helpText: "What happens when the referenced record is deleted"
172+
label: "Comportamiento al eliminar",
173+
helpText: "Qué ocurre cuando se elimina el registro referenciado"
174174
},
175175
"fields.multiple": {
176176
label: "Selección múltiple",
177177
helpText: "Permitir seleccionar varios registros"
178178
},
179179
"fields.expression": {
180-
label: "Expression",
181-
helpText: "CEL formula expression"
180+
label: "Expresión",
181+
helpText: "Expresión de fórmula CEL"
182182
},
183183
"fields.returnType": {
184184
label: "Tipo de retorno",
185185
helpText: "Tipo de resultado para fórmulas"
186186
},
187187
"fields.summaryOperations": {
188-
label: "Summary Operations",
189-
helpText: "Roll-up: which child object, which field, which aggregation"
188+
label: "Operaciones de resumen",
189+
helpText: "Roll-up: qué objeto hijo, qué campo y qué agregación"
190190
},
191191
"fields.summaryOperations.object": {
192-
label: "Object",
193-
helpText: "Source child object name"
192+
label: "Objeto",
193+
helpText: "Nombre del objeto hijo de origen"
194194
},
195195
"fields.summaryOperations.field": {
196-
label: "Field",
197-
helpText: "Field on the child object to aggregate (ignored for count)"
196+
label: "Campo",
197+
helpText: "Campo del objeto hijo que se agrega (se ignora para count)"
198198
},
199199
"fields.summaryOperations.function": {
200-
label: "Function",
201-
helpText: "Aggregation function"
200+
label: "Función",
201+
helpText: "Función de agregación"
202202
},
203203
"fields.autonumberFormat": {
204-
label: "Autonumber Format",
205-
helpText: "e.g. \"INV-{0000}\"; date tokens {YYYY}/{MM}/{DD} and {field_name} interpolation supported"
204+
label: "Formato de autonumeración",
205+
helpText: "p. ej. \"INV-{0000}\"; admite tokens de fecha {YYYY}/{MM}/{DD} e interpolación de {field_name}"
206206
},
207207
"fields.language": {
208208
label: "Idioma",
@@ -213,16 +213,16 @@ export const esESMetadataForms: NonNullable<TranslationData['metadataForms']> =
213213
helpText: "Resume este campo en la cronología de actividad del registro"
214214
},
215215
"fields.visibleWhen": {
216-
label: "Visible When",
217-
helpText: "CEL predicate — field is shown only when TRUE"
216+
label: "Condición de visibilidad",
217+
helpText: "Predicado CEL: el campo solo se muestra cuando es TRUE"
218218
},
219219
"fields.readonlyWhen": {
220-
label: "Readonly When",
221-
helpText: "CEL predicate — field is read-only when TRUE (enforced server-side)"
220+
label: "Condición de solo lectura",
221+
helpText: "Predicado CEL: el campo es de solo lectura cuando es TRUE (aplicado en el servidor)"
222222
},
223223
"fields.requiredWhen": {
224-
label: "Required When",
225-
helpText: "CEL predicate — field is required when TRUE (enforced server-side)"
224+
label: "Condición de obligatoriedad",
225+
helpText: "Predicado CEL: el campo es obligatorio cuando es TRUE (aplicado en el servidor)"
226226
},
227227
enable: {
228228
label: "Enable",

‎packages/platform-objects/src/apps/translations/es-ES.source-hashes.generated.ts‎

Lines changed: 0 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -102,34 +102,6 @@ export const esESGeneratedSourceHashes: Readonly<Record<string, string>> = {
102102
"metadataForms.object.fields.enable.label": "fdecf828d4e86eed",
103103
"metadataForms.object.fields.enable.searchable.label": "d8f50099e7217830",
104104
"metadataForms.object.fields.enable.trackHistory.label": "7bc28212817b2c43",
105-
"metadataForms.object.fields.fields.autonumberFormat.helpText": "14efe56f7cf8812e",
106-
"metadataForms.object.fields.fields.autonumberFormat.label": "ced754e3dde1e78f",
107-
"metadataForms.object.fields.fields.deleteBehavior.helpText": "6d94538a80df113e",
108-
"metadataForms.object.fields.fields.deleteBehavior.label": "01c3c66572ce674b",
109-
"metadataForms.object.fields.fields.expression.helpText": "6c559ad697dbaa85",
110-
"metadataForms.object.fields.fields.expression.label": "cd1b52ad1588075e",
111-
"metadataForms.object.fields.fields.lookupFilters.helpText": "ce8004df6ef768f1",
112-
"metadataForms.object.fields.fields.lookupFilters.label": "c2860cdcfe74ad9a",
113-
"metadataForms.object.fields.fields.placeholder.helpText": "497ea6299e075744",
114-
"metadataForms.object.fields.fields.placeholder.label": "44d62b55b63fe718",
115-
"metadataForms.object.fields.fields.readonlyWhen.helpText": "1daba886fd4e7f25",
116-
"metadataForms.object.fields.fields.readonlyWhen.label": "af1c3f486fb2fbf7",
117-
"metadataForms.object.fields.fields.requiredWhen.helpText": "997a0d21e5e32203",
118-
"metadataForms.object.fields.fields.requiredWhen.label": "89b4d31ea46e2e76",
119-
"metadataForms.object.fields.fields.rows.helpText": "3adb8c4c447f36b7",
120-
"metadataForms.object.fields.fields.rows.label": "319af74cc41ea823",
121-
"metadataForms.object.fields.fields.summaryOperations.field.helpText": "ff2f535b8f9cfffe",
122-
"metadataForms.object.fields.fields.summaryOperations.field.label": "e21c314685cd95ca",
123-
"metadataForms.object.fields.fields.summaryOperations.function.helpText": "b1022db50ca584b3",
124-
"metadataForms.object.fields.fields.summaryOperations.function.label": "9ae3f998b780a051",
125-
"metadataForms.object.fields.fields.summaryOperations.helpText": "4657cc4f93ecc549",
126-
"metadataForms.object.fields.fields.summaryOperations.label": "bcf65520573738ee",
127-
"metadataForms.object.fields.fields.summaryOperations.object.helpText": "7e6fc21663360844",
128-
"metadataForms.object.fields.fields.summaryOperations.object.label": "d0c49032d95ebb36",
129-
"metadataForms.object.fields.fields.valueDomain.helpText": "649e2e89dfeb2e8a",
130-
"metadataForms.object.fields.fields.valueDomain.label": "18ebeb7e56e792a1",
131-
"metadataForms.object.fields.fields.visibleWhen.helpText": "46de2d3ff57b6667",
132-
"metadataForms.object.fields.fields.visibleWhen.label": "c852d4249db93285",
133105
"metadataForms.object.fields.lifecycle.archive.after.helpText": "e0e76ef140528e1c",
134106
"metadataForms.object.fields.lifecycle.archive.after.label": "05e119362ddb98d6",
135107
"metadataForms.object.fields.lifecycle.archive.helpText": "e1d3f49d818d0807",

‎packages/platform-objects/src/apps/translations/ja-JP.metadata-forms.generated.ts‎

Lines changed: 28 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -109,8 +109,8 @@ export const jaJPMetadataForms: NonNullable<TranslationData['metadataForms']> =
109109
helpText: "新規レコードの既定値(JSON リテラル)"
110110
},
111111
"fields.placeholder": {
112-
label: "Placeholder",
113-
helpText: "Hint text shown inside the empty input; disappears once a value is entered"
112+
label: "プレースホルダー",
113+
helpText: "空の入力欄の内側に表示されるヒント文言。値を入力すると消えます"
114114
},
115115
"fields.maxLength": {
116116
label: "最大長",
@@ -121,12 +121,12 @@ export const jaJPMetadataForms: NonNullable<TranslationData['metadataForms']> =
121121
helpText: "最小文字数"
122122
},
123123
"fields.valueDomain": {
124-
label: "Value Domain",
125-
helpText: "Standard the written value must belong to; a write carrying a non-member is refused"
124+
label: "値ドメイン",
125+
helpText: "書き込む値が属していなければならない標準。メンバー以外の値を含む書き込みは拒否されます"
126126
},
127127
"fields.rows": {
128-
label: "Rows",
129-
helpText: "Inline editor height (text rows)"
128+
label: "行数",
129+
helpText: "インライン編集欄の高さ(テキスト行数)"
130130
},
131131
"fields.min": {
132132
label: "最小値",
@@ -165,44 +165,44 @@ export const jaJPMetadataForms: NonNullable<TranslationData['metadataForms']> =
165165
helpText: "対象オブジェクト名。tree フィールドでは省略可能で、指定する場合はこのオブジェクト自身でなければなりません(ツリーは同一オブジェクト内の階層です — 別のオブジェクトへリンクする場合は lookup を使います)"
166166
},
167167
"fields.lookupFilters": {
168-
label: "Lookup Filters",
169-
helpText: "Filter rules applied to the picker ({field, operator, value})"
168+
label: "Lookup フィルター",
169+
helpText: "ピッカーに適用されるフィルタールール({field, operator, value})"
170170
},
171171
"fields.deleteBehavior": {
172-
label: "Delete Behavior",
173-
helpText: "What happens when the referenced record is deleted"
172+
label: "削除動作",
173+
helpText: "参照先レコード削除時の動作"
174174
},
175175
"fields.multiple": {
176176
label: "複数選択",
177177
helpText: "複数レコードの選択を許可"
178178
},
179179
"fields.expression": {
180-
label: "Expression",
181-
helpText: "CEL formula expression"
180+
label: "式",
181+
helpText: "CEL 数式"
182182
},
183183
"fields.returnType": {
184184
label: "戻り値の型",
185185
helpText: "公式の結果型"
186186
},
187187
"fields.summaryOperations": {
188-
label: "Summary Operations",
189-
helpText: "Roll-up: which child object, which field, which aggregation"
188+
label: "集計操作",
189+
helpText: "ロールアップ:どの子オブジェクトの、どのフィールドを、どの集計関数で"
190190
},
191191
"fields.summaryOperations.object": {
192-
label: "Object",
193-
helpText: "Source child object name"
192+
label: "オブジェクト",
193+
helpText: "集計元の子オブジェクト名"
194194
},
195195
"fields.summaryOperations.field": {
196-
label: "Field",
197-
helpText: "Field on the child object to aggregate (ignored for count)"
196+
label: "フィールド",
197+
helpText: "集計対象となる子オブジェクトのフィールド(count では無視)"
198198
},
199199
"fields.summaryOperations.function": {
200-
label: "Function",
201-
helpText: "Aggregation function"
200+
label: "関数",
201+
helpText: "集計関数"
202202
},
203203
"fields.autonumberFormat": {
204-
label: "Autonumber Format",
205-
helpText: "e.g. \"INV-{0000}\"; date tokens {YYYY}/{MM}/{DD} and {field_name} interpolation supported"
204+
label: "自動採番フォーマット",
205+
helpText: "例: \"INV-{0000}\"。日付トークン {YYYY}/{MM}/{DD} と {field_name} の補間に対応"
206206
},
207207
"fields.language": {
208208
label: "言語",
@@ -213,16 +213,16 @@ export const jaJPMetadataForms: NonNullable<TranslationData['metadataForms']> =
213213
helpText: "レコードのアクティビティタイムラインでこのフィールドを要約する"
214214
},
215215
"fields.visibleWhen": {
216-
label: "Visible When",
217-
helpText: "CEL predicate — field is shown only when TRUE"
216+
label: "表示条件",
217+
helpText: "CEL 述語 — TRUE の場合のみフィールドを表示"
218218
},
219219
"fields.readonlyWhen": {
220-
label: "Readonly When",
221-
helpText: "CEL predicate — field is read-only when TRUE (enforced server-side)"
220+
label: "読み取り専用条件",
221+
helpText: "CEL 述語 — TRUE の場合フィールドは読み取り専用(サーバー側で強制)"
222222
},
223223
"fields.requiredWhen": {
224-
label: "Required When",
225-
helpText: "CEL predicate — field is required when TRUE (enforced server-side)"
224+
label: "必須条件",
225+
helpText: "CEL 述語 — TRUE の場合フィールドは必須(サーバー側で強制)"
226226
},
227227
enable: {
228228
label: "Enable",

‎packages/platform-objects/src/apps/translations/ja-JP.source-hashes.generated.ts‎

Lines changed: 0 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -102,34 +102,6 @@ export const jaJPGeneratedSourceHashes: Readonly<Record<string, string>> = {
102102
"metadataForms.object.fields.enable.label": "fdecf828d4e86eed",
103103
"metadataForms.object.fields.enable.searchable.label": "d8f50099e7217830",
104104
"metadataForms.object.fields.enable.trackHistory.label": "7bc28212817b2c43",
105-
"metadataForms.object.fields.fields.autonumberFormat.helpText": "14efe56f7cf8812e",
106-
"metadataForms.object.fields.fields.autonumberFormat.label": "ced754e3dde1e78f",
107-
"metadataForms.object.fields.fields.deleteBehavior.helpText": "6d94538a80df113e",
108-
"metadataForms.object.fields.fields.deleteBehavior.label": "01c3c66572ce674b",
109-
"metadataForms.object.fields.fields.expression.helpText": "6c559ad697dbaa85",
110-
"metadataForms.object.fields.fields.expression.label": "cd1b52ad1588075e",
111-
"metadataForms.object.fields.fields.lookupFilters.helpText": "ce8004df6ef768f1",
112-
"metadataForms.object.fields.fields.lookupFilters.label": "c2860cdcfe74ad9a",
113-
"metadataForms.object.fields.fields.placeholder.helpText": "497ea6299e075744",
114-
"metadataForms.object.fields.fields.placeholder.label": "44d62b55b63fe718",
115-
"metadataForms.object.fields.fields.readonlyWhen.helpText": "1daba886fd4e7f25",
116-
"metadataForms.object.fields.fields.readonlyWhen.label": "af1c3f486fb2fbf7",
117-
"metadataForms.object.fields.fields.requiredWhen.helpText": "997a0d21e5e32203",
118-
"metadataForms.object.fields.fields.requiredWhen.label": "89b4d31ea46e2e76",
119-
"metadataForms.object.fields.fields.rows.helpText": "3adb8c4c447f36b7",
120-
"metadataForms.object.fields.fields.rows.label": "319af74cc41ea823",
121-
"metadataForms.object.fields.fields.summaryOperations.field.helpText": "ff2f535b8f9cfffe",
122-
"metadataForms.object.fields.fields.summaryOperations.field.label": "e21c314685cd95ca",
123-
"metadataForms.object.fields.fields.summaryOperations.function.helpText": "b1022db50ca584b3",
124-
"metadataForms.object.fields.fields.summaryOperations.function.label": "9ae3f998b780a051",
125-
"metadataForms.object.fields.fields.summaryOperations.helpText": "4657cc4f93ecc549",
126-
"metadataForms.object.fields.fields.summaryOperations.label": "bcf65520573738ee",
127-
"metadataForms.object.fields.fields.summaryOperations.object.helpText": "7e6fc21663360844",
128-
"metadataForms.object.fields.fields.summaryOperations.object.label": "d0c49032d95ebb36",
129-
"metadataForms.object.fields.fields.valueDomain.helpText": "649e2e89dfeb2e8a",
130-
"metadataForms.object.fields.fields.valueDomain.label": "18ebeb7e56e792a1",
131-
"metadataForms.object.fields.fields.visibleWhen.helpText": "46de2d3ff57b6667",
132-
"metadataForms.object.fields.fields.visibleWhen.label": "c852d4249db93285",
133105
"metadataForms.object.fields.lifecycle.archive.after.helpText": "e0e76ef140528e1c",
134106
"metadataForms.object.fields.lifecycle.archive.after.label": "05e119362ddb98d6",
135107
"metadataForms.object.fields.lifecycle.archive.helpText": "e1d3f49d818d0807",

0 commit comments

Comments
 (0)