Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions .changeset/19403-field-panel-en-echo-decisions.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
---
"@objectstack/platform-objects": patch
---

The standalone `field` metadata-form panel no longer prints English column heads and tooltips to a Chinese, Japanese or Spanish author: nine keys — eighteen string leaves — were decided leaf by leaf and rendered in `zh-CN`, `ja-JP` and `es-ES` (#19403).

`Placeholder`, `Value Domain`, `Rows`, `Related List Filter` and the five row properties of `summaryOperations` (`Object`, `Function`, `Field`, `Relationship Field`, `Filter`) read their English source in all three locales, `helpText` included. An en-echo is not automatically a defect, so each leaf carries a recorded reason in `field-panel-echo-decisions.test.ts` rather than a bulk rewrite — and fourteen of the eighteen had an **authored twin at the same key path**: `object.fields.fields.*` is the same field editor embedded in the object panel, rendered there and echoing here, with seven of the twins byte-identical in `en`.

- **Machine tokens stay English, checked at the schema before a word was rendered.** `valueDomain.helpText` names `iana_time_zone`, `iso_4217_currency` and `iso_3166_alpha2` — the three members of `ValueDomainSchema`, a `z.enum`. Rendering them as words would tell an author in their own language to write a token the schema refuses. Kept, as are `count` (a `summaryOperations.function` enum member), the spec key `inlineHelpText`, the operator `AND` and the worked example `status == received`.
- **Values only.** No key was added or removed: the three translated bundles are 18 insertions / 18 deletions each, the full flattened key sets are identical on all four bundles (893 keys, 0 added, 0 removed), and `en` is untouched. Regenerated with `pnpm i18n:extract`, which dropped the 18 provenance rows per locale that recorded these leaves as unauthored extractor fills.
- **The panel is now pinned by a derived population**, so a key added to `fieldForm` tomorrow is judged on the day it lands rather than a round later.

Measured on the metadata-form catalogs: label keys echoing in all three locales fall **38 → 29** while the genuinely-translated control rises **500 → 509** (`zh-CN`) and **484 → 493** (`ja-JP`, `es-ES`), same population, same run.
Original file line number Diff line number Diff line change
Expand Up @@ -381,8 +381,8 @@ export const esESMetadataForms: NonNullable<TranslationData['metadataForms']> =
helpText: "Valor predeterminado para registros nuevos"
},
placeholder: {
label: "Placeholder",
helpText: "Hint text shown inside the empty input (disappears once a value is entered); use inlineHelpText for always-visible help"
label: "Marcador de posición",
helpText: "Texto de ayuda que se muestra dentro del campo vacío (desaparece al introducir un valor); usa inlineHelpText para ayuda siempre visible"
},
minLength: {
label: "Longitud mínima",
Expand All @@ -393,12 +393,12 @@ export const esESMetadataForms: NonNullable<TranslationData['metadataForms']> =
helpText: "Longitud máxima de caracteres"
},
valueDomain: {
label: "Value Domain",
helpText: "Standard the written value must belong to: iana_time_zone, iso_4217_currency or iso_3166_alpha2. A write carrying a non-member is refused"
label: "Dominio de valores",
helpText: "Estándar al que debe pertenecer el valor escrito: iana_time_zone, iso_4217_currency o iso_3166_alpha2; se rechaza una escritura con un valor que no pertenezca"
},
rows: {
label: "Rows",
helpText: "Inline editor height in text rows"
label: "Filas",
helpText: "Altura del editor en línea, en filas de texto"
},
min: {
label: "Mínimo",
Expand Down Expand Up @@ -447,8 +447,8 @@ export const esESMetadataForms: NonNullable<TranslationData['metadataForms']> =
helpText: "Qué ocurre cuando se elimina el registro referenciado"
},
relatedListFilter: {
label: "Related List Filter",
helpText: "Default filter for this relationship's related list on the parent's detail page — AND-composed with the parent-record match, and the tab badge counts the same set"
label: "Filtro de lista relacionada",
helpText: "Filtro predeterminado para la lista relacionada de esta relación en la página de detalle del registro padre: combinado con AND con la coincidencia del registro padre, y el distintivo de la pestaña cuenta el mismo conjunto"
},
expression: {
label: "Expresión",
Expand All @@ -459,24 +459,24 @@ export const esESMetadataForms: NonNullable<TranslationData['metadataForms']> =
helpText: "Configuración de resumen roll-up (para relaciones padre-hijo)"
},
"summaryOperations.object": {
label: "Object",
helpText: "Child object to aggregate"
label: "Objeto",
helpText: "Objeto hijo que se agrega"
},
"summaryOperations.function": {
label: "Function",
helpText: "Aggregation function"
label: "Función",
helpText: "Función de agregación"
},
"summaryOperations.field": {
label: "Field",
helpText: "Child field to aggregate (ignored for count)"
label: "Campo",
helpText: "Campo del objeto hijo que se agrega (se ignora para count)"
},
"summaryOperations.relationshipField": {
label: "Relationship Field",
helpText: "Child FK back to this parent (auto-detected when omitted)"
label: "Campo de relación",
helpText: "Clave foránea del hijo que apunta de vuelta a este padre (se detecta automáticamente si se omite)"
},
"summaryOperations.filter": {
label: "Filter",
helpText: "Only child rows matching this predicate are aggregated (e.g. status == received)"
label: "Filtro",
helpText: "Solo se agregan las filas hijas que coinciden con este predicado (p. ej. status == received)"
},
externalId: {
label: "ID externo",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,24 +39,6 @@ export const esESGeneratedSourceHashes: Readonly<Record<string, string>> = {
"metadataForms.doc.description": "f233af60238b0879",
"metadataForms.doc.label": "3f35cf5088b999ad",
"metadataForms.email_template.fields.variables.helpText": "27197774c2cda633",
"metadataForms.field.fields.placeholder.helpText": "07cecac0844860be",
"metadataForms.field.fields.placeholder.label": "44d62b55b63fe718",
"metadataForms.field.fields.relatedListFilter.helpText": "4d4f65b4886840a7",
"metadataForms.field.fields.relatedListFilter.label": "0ba1fca22ec231f1",
"metadataForms.field.fields.rows.helpText": "66755b9447e67a15",
"metadataForms.field.fields.rows.label": "319af74cc41ea823",
"metadataForms.field.fields.summaryOperations.field.helpText": "b6897e7341b31c09",
"metadataForms.field.fields.summaryOperations.field.label": "e21c314685cd95ca",
"metadataForms.field.fields.summaryOperations.filter.helpText": "7a46d2abde5a25c4",
"metadataForms.field.fields.summaryOperations.filter.label": "802895ec427fc6af",
"metadataForms.field.fields.summaryOperations.function.helpText": "b1022db50ca584b3",
"metadataForms.field.fields.summaryOperations.function.label": "9ae3f998b780a051",
"metadataForms.field.fields.summaryOperations.object.helpText": "d937a7f5e5d922cf",
"metadataForms.field.fields.summaryOperations.object.label": "d0c49032d95ebb36",
"metadataForms.field.fields.summaryOperations.relationshipField.helpText": "5d8a9925c9a1b45a",
"metadataForms.field.fields.summaryOperations.relationshipField.label": "d8e119c564a5453a",
"metadataForms.field.fields.valueDomain.helpText": "a3556fad7893a205",
"metadataForms.field.fields.valueDomain.label": "18ebeb7e56e792a1",
"metadataForms.hook.fields.body.memoryMb.helpText": "f53c826ce3c94ad9",
"metadataForms.hook.fields.body.memoryMb.label": "a1e1612eff7f82ea",
"metadataForms.hook.fields.retryPolicy.backoffMs.helpText": "42137a83459ed6b7",
Expand Down
Loading
Loading