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
37 changes: 37 additions & 0 deletions .changeset/dataset-panel-en-echoes-decided.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
---
"@objectstack/platform-objects": patch
---

fix(platform-objects): decide the `dataset` panel en-echoes per leaf, and derive the panel pin (#19403)

The `dataset` metadata form — the ADR-0021 analytics semantic-layer editor — shipped its English
source in `zh-CN`, `ja-JP` and `es-ES` on 24 string leaves: the type display pair, all four section
headings, and both string leaves of its seven non-repeater fields. An author working in one of those
locales read English on the whole panel while the thirteen repeater row properties inside it, and the
`report` editor next to it, were translated.

Each leaf was decided on its own evidence, not translated wholesale: the verdicts, their per-leaf
reasons and the `en` source each was judged against are recorded in
`dataset-panel-echo-decisions.test.ts`, which also derives the panel population from the `en` catalog
so a key added to this form is caught rather than missed.

Two groups of tokens stay **English**, on an authored precedent rather than by habit:

- the strict-enum values the measures section names — `sum/avg/count/…` (`AggregationFunction`) and
`ratio/sum/difference/product` (`DerivedMeasureOp`), both `z.enum` inside a `strictObject`. Rendering
them as words would tell an author in their own language to write a token the schema refuses. The
precedent is `report.fields.type.helpText`, which keeps `tabular/summary/matrix/joined` verbatim in
all three locales;
- the machine tokens an author types — `lookup` / `master_detail`, `relationship.field`, the worked
example `account.region`, and the `FROM` / `ON` SQL keywords the prose names. The precedent is
`object.fields.fields.reference.helpText`, which keeps `tree` and `lookup` verbatim inside otherwise
translated prose.

Catalog values only. No key is added, renamed or removed in any bundle (24 insertions / 24 deletions
per translated bundle, a pure value replacement), no schema or export moves, and the three
`*.source-hashes.generated.ts` provenance tables lose exactly the 24 rows per locale that recorded
these leaves as unauthored extractor fills.

Why `patch` rather than `skip-changeset`: `@objectstack/platform-objects` is not private and ships
`files: ["dist", …]`, and `src/metadata-translations/index.ts` imports all three translated bundles, so
the new leaves are published — measured on the built output rather than assumed.

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -1475,54 +1475,54 @@ export const esESMetadataForms: NonNullable<TranslationData['metadataForms']> =
}
},
dataset: {
label: "Dataset",
description: "Analytics semantic layer — dimensions & measures",
label: "Conjunto de datos",
description: "Capa semántica de analítica — dimensiones y medidas",
sections: {
basics: {
label: "Basics",
description: "Dataset identity."
label: "Aspectos básicos",
description: "Identidad del conjunto de datos."
},
source: {
label: "Source",
description: "The base object, the relationships to join, and the dataset’s intrinsic scope. Joins are derived from the object graph — pick relationship (lookup / master_detail) names, never write an ON clause."
label: "Origen de datos",
description: "El objeto base, las relaciones a unir y el ámbito intrínseco del conjunto de datos. Las uniones se derivan del grafo de objetos: elige nombres de relación (lookup / master_detail), nunca escribas una cláusula ON."
},
dimensions: {
label: "Dimensions",
description: "Groupable axes. Use a base field, or `relationship.field` (e.g. account.region) for a relationship included above."
label: "Dimensiones",
description: "Ejes agrupables. Usa un campo del objeto base o, para una relación incluida arriba, `relationship.field` (p. ej. account.region)."
},
measures: {
label: "Measures",
description: "Aggregatable values defined once and referenced by name. A measure is sum/avg/count/… of a field; a derived measure combines other measures (ratio/sum/difference/product). Measure-scoped filters and derived ops are edited per-row in the dataset designer."
label: "Medidas",
description: "Valores agregables definidos una vez y referenciados por nombre. Una medida es sum/avg/count/… de un campo; una medida derivada combina otras medidas (ratio/sum/difference/product). Los filtros por medida y las operaciones derivadas se editan por fila en el diseñador de conjuntos de datos."
}
},
fields: {
name: {
label: "Name",
helpText: "snake_case unique identifier"
label: "Nombre",
helpText: "Identificador único snake_case"
},
label: {
label: "Label",
helpText: "Display name"
label: "Etiqueta",
helpText: "Nombre mostrado"
},
description: {
label: "Description",
helpText: "What this dataset measures"
label: "Descripción",
helpText: "Qué mide este conjunto de datos"
},
object: {
label: "Object",
helpText: "Base object — the FROM"
label: "Objeto",
helpText: "Objeto base: el FROM"
},
include: {
label: "Include",
helpText: "Relationship (lookup / master_detail) field names to join — enables `relationship.field` dimensions/measures (e.g. include \"account\" → group by account.region)"
label: "Relaciones a incluir",
helpText: "Nombres de campo de relación (lookup / master_detail) a unir — habilita dimensiones/medidas `relationship.field` (p. ej. incluir \"account\" → agrupar por account.region)"
},
filter: {
label: "Filter",
helpText: "Intrinsic scope filter (e.g. exclude soft-deleted records), ANDed into every query"
label: "Filtro",
helpText: "Filtro de ámbito intrínseco (p. ej. excluir registros eliminados de forma lógica), combinado con AND en cada consulta"
},
dimensions: {
label: "Dimensions",
helpText: "Each: name (referenced by presentations), field, type, and — for dates — a default bucketing granularity"
label: "Dimensiones",
helpText: "Cada dimensión: nombre (referenciado por las presentaciones), campo, tipo y, para fechas, una granularidad de agrupación predeterminada"
},
"dimensions.name": {
label: "Nombre"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,30 +36,6 @@ export const esESGeneratedSourceHashes: Readonly<Record<string, string>> = {
"metadataForms.book.label": "b48c719759fca087",
"metadataForms.capability.description": "1130a8a487c35f3d",
"metadataForms.capability.label": "cb58b72c5cc77632",
"metadataForms.dataset.description": "ce0d0a4d536bbc1e",
"metadataForms.dataset.fields.description.helpText": "f82c5070e1f78508",
"metadataForms.dataset.fields.description.label": "779a4342c8eb6707",
"metadataForms.dataset.fields.dimensions.helpText": "a4df7393a6bd88c9",
"metadataForms.dataset.fields.dimensions.label": "d75e6dd9d87e93b4",
"metadataForms.dataset.fields.filter.helpText": "8d996f9121810664",
"metadataForms.dataset.fields.filter.label": "802895ec427fc6af",
"metadataForms.dataset.fields.include.helpText": "e8f9933ae4f99e77",
"metadataForms.dataset.fields.include.label": "45b27393fb9f3b2a",
"metadataForms.dataset.fields.label.helpText": "f0cbad8e334db1d3",
"metadataForms.dataset.fields.label.label": "c680364257b11569",
"metadataForms.dataset.fields.name.helpText": "8c3cae6dba12b42a",
"metadataForms.dataset.fields.name.label": "5274417ff1ccaf01",
"metadataForms.dataset.fields.object.helpText": "09a85579054a7197",
"metadataForms.dataset.fields.object.label": "d0c49032d95ebb36",
"metadataForms.dataset.label": "19647dcb84ce82d3",
"metadataForms.dataset.sections.basics.description": "844b82a322f8edd6",
"metadataForms.dataset.sections.basics.label": "55562f900da68c5d",
"metadataForms.dataset.sections.dimensions.description": "da19c8faa0cb1023",
"metadataForms.dataset.sections.dimensions.label": "d75e6dd9d87e93b4",
"metadataForms.dataset.sections.measures.description": "8186d1c0fe6a86f4",
"metadataForms.dataset.sections.measures.label": "395dac46abcf1943",
"metadataForms.dataset.sections.source.description": "ee9be5509026b678",
"metadataForms.dataset.sections.source.label": "8fe786e8e29c8cec",
"metadataForms.doc.description": "f233af60238b0879",
"metadataForms.doc.label": "3f35cf5088b999ad",
"metadataForms.email_template.fields.variables.helpText": "27197774c2cda633",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1475,54 +1475,54 @@ export const jaJPMetadataForms: NonNullable<TranslationData['metadataForms']> =
}
},
dataset: {
label: "Dataset",
description: "Analytics semantic layer — dimensions & measures",
label: "データセット",
description: "分析セマンティックレイヤー — ディメンションとメジャー",
sections: {
basics: {
label: "Basics",
description: "Dataset identity."
label: "基本",
description: "データセットの識別情報。"
},
source: {
label: "Source",
description: "The base object, the relationships to join, and the dataset’s intrinsic scope. Joins are derived from the object graph — pick relationship (lookup / master_detail) names, never write an ON clause."
label: "ソース",
description: "ベースオブジェクト、結合する関係、そしてデータセット固有のスコープ。結合はオブジェクトグラフから導出されます — 関係(lookup / master_detail)の名前を選択し、ON 句は記述しません。"
},
dimensions: {
label: "Dimensions",
description: "Groupable axes. Use a base field, or `relationship.field` (e.g. account.region) for a relationship included above."
label: "ディメンション",
description: "グループ化できる軸。ベースオブジェクトのフィールド、または上で含めた関係に対しては `relationship.field`(例: account.region)を使用します。"
},
measures: {
label: "Measures",
description: "Aggregatable values defined once and referenced by name. A measure is sum/avg/count/… of a field; a derived measure combines other measures (ratio/sum/difference/product). Measure-scoped filters and derived ops are edited per-row in the dataset designer."
label: "メジャー",
description: "一度定義すれば名前で参照できる集計可能な値。メジャーはフィールドの sum/avg/count/… であり、派生メジャーは他のメジャーを組み合わせます(ratio/sum/difference/product)。メジャー単位のフィルターと派生演算はデータセットデザイナーで行ごとに編集します。"
}
},
fields: {
name: {
label: "Name",
helpText: "snake_case unique identifier"
label: "名前",
helpText: "snake_case の一意識別子"
},
label: {
label: "Label",
helpText: "Display name"
label: "表示名",
helpText: "表示名"
},
description: {
label: "Description",
helpText: "What this dataset measures"
label: "説明",
helpText: "このデータセットが測定する内容"
},
object: {
label: "Object",
helpText: "Base object — the FROM"
label: "オブジェクト",
helpText: "ベースオブジェクト — FROM に相当"
},
include: {
label: "Include",
helpText: "Relationship (lookup / master_detail) field names to join — enables `relationship.field` dimensions/measures (e.g. include \"account\" → group by account.region)"
label: "含める関係",
helpText: "結合する関係(lookup / master_detail)のフィールド名 — `relationship.field` のディメンション/メジャーを有効にします(例: include \"account\" → account.region でグループ化)"
},
filter: {
label: "Filter",
helpText: "Intrinsic scope filter (e.g. exclude soft-deleted records), ANDed into every query"
label: "フィルター",
helpText: "固有スコープのフィルター(例: 論理削除済みレコードを除外)。すべてのクエリに AND で結合されます"
},
dimensions: {
label: "Dimensions",
helpText: "Each: name (referenced by presentations), field, type, and — for dates — a default bucketing granularity"
label: "ディメンション",
helpText: "各ディメンション:名前(プレゼンテーションから参照)、フィールド、型、日付の場合は既定のバケット粒度"
},
"dimensions.name": {
label: "名前"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,30 +36,6 @@ export const jaJPGeneratedSourceHashes: Readonly<Record<string, string>> = {
"metadataForms.book.label": "b48c719759fca087",
"metadataForms.capability.description": "1130a8a487c35f3d",
"metadataForms.capability.label": "cb58b72c5cc77632",
"metadataForms.dataset.description": "ce0d0a4d536bbc1e",
"metadataForms.dataset.fields.description.helpText": "f82c5070e1f78508",
"metadataForms.dataset.fields.description.label": "779a4342c8eb6707",
"metadataForms.dataset.fields.dimensions.helpText": "a4df7393a6bd88c9",
"metadataForms.dataset.fields.dimensions.label": "d75e6dd9d87e93b4",
"metadataForms.dataset.fields.filter.helpText": "8d996f9121810664",
"metadataForms.dataset.fields.filter.label": "802895ec427fc6af",
"metadataForms.dataset.fields.include.helpText": "e8f9933ae4f99e77",
"metadataForms.dataset.fields.include.label": "45b27393fb9f3b2a",
"metadataForms.dataset.fields.label.helpText": "f0cbad8e334db1d3",
"metadataForms.dataset.fields.label.label": "c680364257b11569",
"metadataForms.dataset.fields.name.helpText": "8c3cae6dba12b42a",
"metadataForms.dataset.fields.name.label": "5274417ff1ccaf01",
"metadataForms.dataset.fields.object.helpText": "09a85579054a7197",
"metadataForms.dataset.fields.object.label": "d0c49032d95ebb36",
"metadataForms.dataset.label": "19647dcb84ce82d3",
"metadataForms.dataset.sections.basics.description": "844b82a322f8edd6",
"metadataForms.dataset.sections.basics.label": "55562f900da68c5d",
"metadataForms.dataset.sections.dimensions.description": "da19c8faa0cb1023",
"metadataForms.dataset.sections.dimensions.label": "d75e6dd9d87e93b4",
"metadataForms.dataset.sections.measures.description": "8186d1c0fe6a86f4",
"metadataForms.dataset.sections.measures.label": "395dac46abcf1943",
"metadataForms.dataset.sections.source.description": "ee9be5509026b678",
"metadataForms.dataset.sections.source.label": "8fe786e8e29c8cec",
"metadataForms.doc.description": "f233af60238b0879",
"metadataForms.doc.label": "3f35cf5088b999ad",
"metadataForms.email_template.fields.variables.helpText": "27197774c2cda633",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1475,54 +1475,54 @@ export const zhCNMetadataForms: NonNullable<TranslationData['metadataForms']> =
}
},
dataset: {
label: "Dataset",
description: "Analytics semantic layer — dimensions & measures",
label: "数据集",
description: "分析语义层 — 维度与度量",
sections: {
basics: {
label: "Basics",
description: "Dataset identity."
label: "基础信息",
description: "数据集标识"
},
source: {
label: "Source",
description: "The base object, the relationships to join, and the dataset’s intrinsic scope. Joins are derived from the object graph — pick relationship (lookup / master_detail) names, never write an ON clause."
label: "数据来源",
description: "基础对象、要关联的关系,以及数据集的固有范围。关联由对象关系图推导 — 选择关系(lookup / master_detail)字段名,不要手写 ON 子句"
},
dimensions: {
label: "Dimensions",
description: "Groupable axes. Use a base field, or `relationship.field` (e.g. account.region) for a relationship included above."
label: "维度",
description: "可分组的轴。使用基础对象的字段,或对上方已包含的关系使用 `relationship.field`(如 account.region)"
},
measures: {
label: "Measures",
description: "Aggregatable values defined once and referenced by name. A measure is sum/avg/count/… of a field; a derived measure combines other measures (ratio/sum/difference/product). Measure-scoped filters and derived ops are edited per-row in the dataset designer."
label: "度量",
description: "定义一次即可按名称引用的可聚合值。度量是某个字段的 sum/avg/count/…;派生度量由其他度量组合而成(ratio/sum/difference/product)。度量级筛选与派生运算在数据集设计器中逐行编辑"
}
},
fields: {
name: {
label: "Name",
helpText: "snake_case unique identifier"
label: "名称",
helpText: "snake_case 唯一标识符"
},
label: {
label: "Label",
helpText: "Display name"
label: "显示名称",
helpText: "显示名"
},
description: {
label: "Description",
helpText: "What this dataset measures"
label: "描述",
helpText: "此数据集衡量什么"
},
object: {
label: "Object",
helpText: "Base object — the FROM"
label: "对象",
helpText: "基础对象 — 即 FROM"
},
include: {
label: "Include",
helpText: "Relationship (lookup / master_detail) field names to join — enables `relationship.field` dimensions/measures (e.g. include \"account\" → group by account.region)"
label: "包含关联",
helpText: "要关联的关系(lookup / master_detail)字段名 — 用于启用 `relationship.field` 维度/度量(例如 include \"account\" → 按 account.region 分组)"
},
filter: {
label: "Filter",
helpText: "Intrinsic scope filter (e.g. exclude soft-deleted records), ANDed into every query"
label: "筛选",
helpText: "固有范围筛选(例如排除软删除记录),以 AND 方式并入每个查询"
},
dimensions: {
label: "Dimensions",
helpText: "Each: name (referenced by presentations), field, type, and — for dates — a default bucketing granularity"
label: "维度",
helpText: "每个维度:名称(供展示层引用)、字段、类型,以及日期类型的默认分桶粒度"
},
"dimensions.name": {
label: "名称"
Expand Down
Loading
Loading