You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
This repository was archived by the owner on Nov 4, 2026. It is now read-only.
Repository navigation
This repository was archived by the owner on Nov 4, 2026. It is now read-only.
Analytics surfaces resolve select-option labels but never apply the i18n bundle — reports and dashboards show English while lists and forms show the translation #4030
Migrated from objectstack-ai/objectstack#5076 under the file-at-destination ruling (objectstack-ai/objectstack#7167, maintainer 2026-08-10). Originally filed 2026-08-04T02:20:50Z. The full prior thread — including triage rulings and hold/restart conditions — remains on the source issue and MUST be read before acting on this card.
Summary
Report blocks and dashboard widgets render a select field's option label from the object's hardcoded label, ignoring the locale bundle. The same field on a list view or a form renders the translated label correctly. The result is one screen showing a value two different ways.
Evidence
stored value
analytics surface shows
object label
zh-CN bundle
sales_channel
domestic
Domestic
'Domestic'
'国内'
competitor_name
cabot
Cabot
'Cabot'
'卡博特'
competitor_name
orion
Orion Engineered Carbons
'Orion Engineered Carbons'
'欧励隆'
The decisive row is orion: the rendered string Orion Engineered Carbons bears no resemblance to the stored value orion, but matches the object's English labelverbatim. So the analytics path does resolve the option label — it simply does not run it through the i18n bundle before display. (domestic → Domestic differs only in case, which is why this was initially and wrongly diagnosed as "the report groups by stored value".)
Same page, same records: the related list renders 卡博特 / 欧励隆 while the chart legend renders Cabot / Orion Engineered Carbons. The dashboard's global filter control also renders Sales Channel: untranslated.
Reproduce
Declare a select field with English option labels and provide zh-CN translations for those options.
Put the field on a list view and as a dimension in a report block or dashboard widget.
Load the console with browser locale zh-CN. The list shows Chinese; the report/dashboard shows the object's English labels.
No authoring knob exists
DatasetDimension is exactly { name, label, field, type, dateGranularity }, and type is string | number | boolean | date | lookup — there is no select. The report config carries nothing for this either. So an app cannot opt into translated option labels on these surfaces.
Downstream impact
The only app-side fix is to write the option labels in Chinese in the object, which then renders Chinese for every locale — including the ones where the list side currently resolves correctly. That is a real loss, not a no-op, and it is the workaround we have been forced to take.
Environment
@objectstack/* protocol ^17.0.0-rc.1, console from @objectstack/console, driver-sql on SQLite, browser locale zh-CN.
Filed from a downstream app (hotcrm-heimao), tracked there as issue #55. Likely related to the view/report/dataset label translation gap we filed separately.
Activity
yinlianghui commentedon Aug 11, 2026
CLAIM — session
session_017Qqyix2QcnpUC9XeYVDzx3(objectui whole-repo PM seat),dispatching now。Branch:claude/issue-4030-analytics-option-i18n。按源线程(objectstack#5076)分诊裁决执行:analytics 面已能解析 option label(orion 行为证),缺的是解析结果过 i18n bundle——修复在 objectui analytics 渲染路径。派单要点:
comboas a combo on the dataset path (#4229) #4298(mergeAuthoredPresentation)构成了 analytics 标签网——i18n 应用应搭在这张网的出口上,其既有 pin 必须原样绿。DatasetDimension增加select类型,停下报 needs_decision 做 contract-first 拆分,不许在本卡顺手改 spec。Surface:
packages/plugin-dashboard/packages/plugin-report/packages/corechart-series 标签网出口 + 测试;均无在飞持有者。互斥:不碰 #4281 持有的 components action renderers、#4235 持有的 app-shell home 面、#4040-t2 持有的 plugin-grid/plugin-form/i18n。Generated by Claude Code
yinlianghui commentedon Aug 11, 2026
ACCEPT(partial,残差分别立卡) — PM review of record (session
session_017Qqyix2QcnpUC9XeYVDzx3)。PR #4324 验收要点:
fieldOptionLabel/translateOptions(spec 文档自点名 objectui 为读者、三个既有面在用、plugin-charts 遗留路径同签名)——复用为唯一OptionLabelTranslator,零图表侧方言。应用点在标签网出口(chart-series),axis/legend/series、dotted table/pivot 单元格、CSV、色彩映射、类目顺序全部免费搭车。resolveDimensionFieldMeta保留终端字段属主对象(bundle 键点名的是 crm_account 不是数据集基对象),fix(analytics): resolve a dotted dimension's select options against the relationship target #4261 的关系行走早知道这一点只是丢掉了。语言切换原地重标注不等 refetch。DatasetDimension.type从未被咨询——"无 authoring knob"在作者侧真、在运行时侧 moot。comboas a combo on the dataset path (#4229) #4298 全部原样绿;CI 一次收敛零失败。残差处置(代决):
GlobalFilterSchema加可选object,复用fields.<object>.<field>唯一键约定;B 造第二词汇、C 是正交轴归I18nLabelnow admits an inline per-locale map — audit every read the compiler cannot see, and give Studio a way to author one #4163)——契约面归 objectstack,本席按 contract-first 代为立卡并附三镜头论证。#4163 上的两个 compiler-blind 读(含
normalizeFilterOptions把 map 标签压成String(value)、全 locale 丢文——比卡片本体更糟的一处)记录到位,不开孪生卡,正确。本卡在 #4324 落地后关闭,残差由两张新卡承接。Flipping ready + auto-merge。
Generated by Claude Code
yinlianghui commentedon Aug 11, 2026
CLOSED — 主体已落地,残差已立卡承接 (session
session_017Qqyix2QcnpUC9XeYVDzx3)。5900ac56f)——报告者的决定性证据面(图表 legend/series、dotted table/pivot 单元格、CSV、色彩与类目顺序)在 zh-CN 下渲染 bundle 翻译。GlobalFilterSchema.object提案,推荐 A 案)。I18nLabel被压成[object Object]/String(value))已记录在I18nLabelnow admits an inline per-locale map — audit every read the compiler cannot see, and give Studio a way to author one #4163。Generated by Claude Code
fix(core,plugin-dashboard,plugin-charts): run resolved select-option …