From bd4f2204af9d62f70bbcbc9b279c140176eb10db Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 14 Oct 2026 07:56:04 +0000 Subject: [PATCH 1/2] fix(views): serve the field label on Leads and Opportunities list columns The All Leads list gave each of its nine columns its own English `label:`, and both Opportunities grids did the same for the Account column. A column label is served verbatim in every locale (the translation schema has no per-column key), so zh-CN showed those headers in English. Without the override the header is the field label, which all four locale packs carry. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01P8mZuzuyZAHSrgQKmv6ASv --- src/sales/views/lead.view.ts | 17 +++++++---------- src/sales/views/opportunity.view.ts | 4 ++-- 2 files changed, 9 insertions(+), 12 deletions(-) diff --git a/src/sales/views/lead.view.ts b/src/sales/views/lead.view.ts index e7fae774..2493440a 100644 --- a/src/sales/views/lead.view.ts +++ b/src/sales/views/lead.view.ts @@ -131,7 +131,13 @@ export const LeadViews = defineView({ object: 'crm_lead', }, - // Column Configuration with Enhanced Features + // Column Configuration with Enhanced Features. + // + // No column carries its own `label:`. Without one the header is the + // field's label, which all four locale packs translate. With one, the + // string is served verbatim in every locale: the translation schema has no + // per-column key, so it left this whole header row English in zh-CN + // (#2094). A wording the field label cannot carry is a platform gap. columns: [ { // One name column, not two. Splitting first/last spent 300px to say @@ -139,37 +145,31 @@ export const LeadViews = defineView({ // given name alone — so opening a person meant aiming at their first // name specifically. field: 'full_name', - label: 'Name', width: 200, sortable: true, link: true, // Primary navigation link }, { field: 'company', - label: 'Company', width: 200, sortable: true, }, { field: 'email', - label: 'Email', width: 200, }, { field: 'status', - label: 'Status', width: 120, sortable: true, }, { field: 'rating', - label: 'Score', width: 100, align: 'center', }, { field: 'lead_source', - label: 'Source', width: 120, }, // REQ-0005 acceptance 1: what the prospect wants and what it is worth, @@ -182,20 +182,17 @@ export const LeadViews = defineView({ // stored value, so a multi-valued column would group by the combination. { field: 'need_type', - label: 'Need Type', width: 160, sortable: true, }, { field: 'estimated_amount', - label: 'Est. Amount', width: 130, align: 'right', sortable: true, }, { field: 'owner_id', - label: 'Owner', width: 150, }, ], diff --git a/src/sales/views/opportunity.view.ts b/src/sales/views/opportunity.view.ts index 0017869e..15661bbb 100644 --- a/src/sales/views/opportunity.view.ts +++ b/src/sales/views/opportunity.view.ts @@ -31,7 +31,7 @@ export const OpportunityViews = defineView({ ], columns: [ { field: 'name', width: 220, sortable: true, link: true }, - { field: 'crm_account', label: 'Account', width: 180 }, + { field: 'crm_account', width: 180 }, { field: 'stage', width: 140, sortable: true }, { field: 'amount', width: 140, align: 'right', sortable: true, summary: 'sum' }, { field: 'probability', width: 110, align: 'right' }, @@ -135,7 +135,7 @@ export const OpportunityViews = defineView({ data: { provider: 'object', object: 'crm_opportunity' }, columns: [ { field: 'name', width: 220, sortable: true, link: true }, - { field: 'crm_account', label: 'Account', width: 180 }, + { field: 'crm_account', width: 180 }, { field: 'stage', width: 140, sortable: true }, { field: 'amount', width: 140, align: 'right', sortable: true, summary: 'sum' }, { field: 'probability', width: 110, align: 'right' }, From a16ea2ae0bac41448144fc464050c87cb0dabfbd Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 14 Oct 2026 07:59:00 +0000 Subject: [PATCH 2/2] docs(leads): name the Lead Score column as the list now shows it; add changeset MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The lead scoring section said the list views show the rating in a *Score* column. With the All Leads override gone, every list shows the field label, Lead Score (zh-CN 线索评分), so the three locale pages say that. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01P8mZuzuyZAHSrgQKmv6ASv --- .changeset/2094-zh-cn-list-column-labels.md | 5 +++++ content/docs/sales/leads.mdx | 2 +- content/docs/sales/leads.zh-Hans.mdx | 2 +- content/docs/sales/leads.zh-Hant.mdx | 2 +- 4 files changed, 8 insertions(+), 3 deletions(-) create mode 100644 .changeset/2094-zh-cn-list-column-labels.md diff --git a/.changeset/2094-zh-cn-list-column-labels.md b/.changeset/2094-zh-cn-list-column-labels.md new file mode 100644 index 00000000..5d97cb45 --- /dev/null +++ b/.changeset/2094-zh-cn-list-column-labels.md @@ -0,0 +1,5 @@ +--- +'hotcrm': patch +--- + +The **All Leads** list now shows its column headers in the user's language. In Chinese, Spanish and Japanese the nine headers were in English: Name, Company, Email, Status, Score, Source, Need Type, Est. Amount and Owner. The **Account** column on **Open Deals** and **All Opportunities** was also in English. Each header now uses its field's label, which the app translates into every supported language. In English, five lead headers now use the full field name: *Name* is now **Full Name**, *Score* is **Lead Score**, *Source* is **Lead Source**, *Est. Amount* is **Estimated Amount** and *Owner* is **Lead Owner**. The other English headers do not change. diff --git a/content/docs/sales/leads.mdx b/content/docs/sales/leads.mdx index a6f4717e..5ab427e1 100644 --- a/content/docs/sales/leads.mdx +++ b/content/docs/sales/leads.mdx @@ -56,7 +56,7 @@ The available **lead sources** include Web, Referral, Event, Trade Show, Webinar ## Lead scoring — what the score means -A lead carries exactly **one** quality number: **Lead Score**, a **1-5 star rating**. It is the same field the list views show in the *Score* column — there is no separate 0-100 number, and no budget or timeline field behind it. +A lead carries exactly **one** quality number: **Lead Score**, a **1-5 star rating**. It is the same field the list views show in the *Lead Score* column — there is no separate 0-100 number, and no budget or timeline field behind it. ### Where the stars come from diff --git a/content/docs/sales/leads.zh-Hans.mdx b/content/docs/sales/leads.zh-Hans.mdx index 1c208774..6e1177b4 100644 --- a/content/docs/sales/leads.zh-Hans.mdx +++ b/content/docs/sales/leads.zh-Hans.mdx @@ -56,7 +56,7 @@ description: 在入站咨询成为真正交易之前对其进行捕获、评分 ## 线索评分——评分的含义 -一条线索上只有**一个**质量数字:**线索评分**,一个 **1-5 星的星级评级**。列表视图里*评分*那一列显示的就是同一个字段——不存在另一个 0 到 100 的分数,背后也没有预算或时间线字段。 +一条线索上只有**一个**质量数字:**线索评分**,一个 **1-5 星的星级评级**。列表视图里*线索评分*那一列显示的就是同一个字段——不存在另一个 0 到 100 的分数,背后也没有预算或时间线字段。 ### 星级是怎么来的 diff --git a/content/docs/sales/leads.zh-Hant.mdx b/content/docs/sales/leads.zh-Hant.mdx index f7ab4040..9c37e475 100644 --- a/content/docs/sales/leads.zh-Hant.mdx +++ b/content/docs/sales/leads.zh-Hant.mdx @@ -58,7 +58,7 @@ description: 在入站詢問成為真正交易之前對其進行擷取、評分 ## 潛在客戶評分——評分的含義 -一筆潛在客戶上只有**一個**品質數字:**線索評分**,一個 **1-5 星的星級評級**。列表檢視裡*評分*那一欄顯示的就是同一個欄位——不存在另一個 0 到 100 的分數,背後也沒有預算或時間線欄位。 +一筆潛在客戶上只有**一個**品質數字:**線索評分**,一個 **1-5 星的星級評級**。列表檢視裡*線索評分*那一欄顯示的就是同一個欄位——不存在另一個 0 到 100 的分數,背後也沒有預算或時間線欄位。 ### 星級是怎麼來的