Skip to content

Commit d0e2765

Browse files
yinlianghuiclaude
andauthored
fix(i18n): re-key dead option/section/widget translations; add missing zh-CN coverage (#498)
* fix(i18n): re-key dead option/section/widget translations; add missing zh-CN coverage Fixes the zh-CN coverage issue (items 1-6; item 7 is a platform gap, see below): - Re-key label-keyed option translations to real machine values in all 4 locales: contact.department, opportunity.type, opportunity.forecast_category; zh-CN also campaign.type/status and product.category (dead keys dropped, missing real values added) - Drop dead field keys: task.assigned_to/related_to, campaign.budget, product.price (zh-CN) and product.image_url/datasheet_url (all locales) - Add the 3 objects missing from every bundle: crm_campaign_member, crm_opportunity_line_item, crm_quote_line_item (all 4 locales) - Add zh-CN _sections for account/contact/product/quote/contract/forecast/ knowledge_article/case and extend lead/opportunity with the object-level section keys (both page record:details names and object sections[].key are live lookup surfaces) - Add zh-CN action param translations (escalate_case, close_case, send_email, mass_update_stage incl. stage options, log_call) and the missing log_meeting global action - Re-key sales_dashboard widget opportunities_by_owner -> pipeline_by_forecast_category in all 4 locales Not fixed here: flow notification strings (_notifications) — the runtime objects.* translation schema has no such slot and no shipped code consumes it; flows store literal interpolated strings. Platform-level gap to be reported upstream. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * fix(i18n): add zh-CN options for crm_campaign.channel Channel values (digital/social/email/events/partner) rendered in English on the campaign list group headers and cells; the field had a label but no option translations in any locale. Adds the zh-CN block (same class of gap as issue item 1, found while verifying in-app). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
1 parent a152ad6 commit d0e2765

4 files changed

Lines changed: 422 additions & 57 deletions

File tree

src/translations/en.ts

Lines changed: 75 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -81,9 +81,9 @@ export const en: TranslationData = {
8181
department: {
8282
label: 'Department',
8383
options: {
84-
Executive: 'Executive', Sales: 'Sales', Marketing: 'Marketing',
85-
Engineering: 'Engineering', Support: 'Support', Finance: 'Finance',
86-
HR: 'Human Resources', Operations: 'Operations',
84+
executive: 'Executive', sales: 'Sales', marketing: 'Marketing',
85+
engineering: 'Engineering', support: 'Support', finance: 'Finance',
86+
hr: 'Human Resources', operations: 'Operations',
8787
},
8888
},
8989
owner: { label: 'Contact Owner' },
@@ -286,17 +286,17 @@ export const en: TranslationData = {
286286
type: {
287287
label: 'Type',
288288
options: {
289-
'New Business': 'New Business',
290-
'Existing Customer - Upgrade': 'Existing Customer - Upgrade',
291-
'Existing Customer - Renewal': 'Existing Customer - Renewal',
292-
'Existing Customer - Expansion': 'Existing Customer - Expansion',
289+
new_business: 'New Business',
290+
existing_upgrade: 'Existing Customer - Upgrade',
291+
existing_renewal: 'Existing Customer - Renewal',
292+
existing_expansion: 'Existing Customer - Expansion',
293293
},
294294
},
295295
forecast_category: {
296296
label: 'Forecast Category',
297297
options: {
298-
Pipeline: 'Pipeline', 'Best Case': 'Best Case',
299-
Commit: 'Commit', Omitted: 'Omitted', Closed: 'Closed',
298+
pipeline: 'Pipeline', best_case: 'Best Case',
299+
commit: 'Commit', omitted: 'Omitted', closed: 'Closed',
300300
},
301301
},
302302
description: { label: 'Description' },
@@ -460,8 +460,6 @@ export const en: TranslationData = {
460460
is_active: { label: 'Active' },
461461
is_taxable: { label: 'Taxable' },
462462
product_manager: { label: 'Product Manager' },
463-
image_url: { label: 'Product Image' },
464-
datasheet_url: { label: 'Datasheet URL' },
465463
image: { label: 'Product Image' },
466464
datasheet: { label: 'Datasheet' },
467465
},
@@ -581,6 +579,71 @@ export const en: TranslationData = {
581579
campaign_timeline: { label: 'Marketing Timeline' },
582580
},
583581
},
582+
583+
crm_campaign_member: {
584+
label: 'Campaign Member',
585+
pluralLabel: 'Campaign Members',
586+
description: 'Leads and contacts touched by a campaign, with response status',
587+
fields: {
588+
member_number: { label: 'Member Number' },
589+
crm_campaign: { label: 'Campaign' },
590+
crm_lead: { label: 'Lead' },
591+
crm_contact: { label: 'Contact' },
592+
status: {
593+
label: 'Status',
594+
options: {
595+
sent: 'Sent', opened: 'Opened', clicked: 'Clicked',
596+
responded: 'Responded', converted: 'Converted', bounced: 'Bounced',
597+
unsubscribed: 'Unsubscribed',
598+
},
599+
},
600+
added_date: { label: 'Added Date' },
601+
first_opened_date: { label: 'First Opened' },
602+
first_clicked_date: { label: 'First Clicked' },
603+
response_date: { label: 'Response Date' },
604+
has_responded: { label: 'Has Responded' },
605+
},
606+
_sections: {
607+
basic: { label: 'Basic Information' },
608+
response: { label: 'Response Tracking' },
609+
},
610+
},
611+
612+
crm_opportunity_line_item: {
613+
label: 'Opportunity Line Item',
614+
pluralLabel: 'Opportunity Line Items',
615+
description: 'Per-product pricing lines under an opportunity',
616+
fields: {
617+
crm_opportunity: { label: 'Opportunity' },
618+
crm_product: { label: 'Product' },
619+
description: { label: 'Description' },
620+
quantity: { label: 'Quantity' },
621+
list_price: { label: 'List Price' },
622+
unit_price: { label: 'Sales Price' },
623+
discount: { label: 'Discount %' },
624+
total_price: { label: 'Total' },
625+
line_number: { label: 'Line #' },
626+
},
627+
},
628+
629+
crm_quote_line_item: {
630+
label: 'Quote Line Item',
631+
pluralLabel: 'Quote Line Items',
632+
description: 'Per-product pricing lines under a quote',
633+
fields: {
634+
crm_quote: { label: 'Quote' },
635+
crm_product: { label: 'Product' },
636+
description: { label: 'Description' },
637+
quantity: { label: 'Quantity' },
638+
list_price: { label: 'List Price' },
639+
unit_price: { label: 'Sales Price' },
640+
discount: { label: 'Discount %' },
641+
subtotal: { label: 'Subtotal' },
642+
tax_rate: { label: 'Tax Rate %' },
643+
total_price: { label: 'Total' },
644+
line_number: { label: 'Line #' },
645+
},
646+
},
584647
},
585648

586649
globalActions: {
@@ -679,7 +742,7 @@ export const en: TranslationData = {
679742
avg_deal_size: { title: 'Avg Deal Size', description: 'Average value of closed-won deals this quarter' },
680743
pipeline_by_stage: { title: 'Pipeline by Stage', description: 'Open opportunity value at each sales stage' },
681744
monthly_revenue_trend: { title: 'Monthly Revenue Trend', description: 'Closed-won revenue, last 12 months' },
682-
opportunities_by_owner: { title: 'Opportunities by Owner', description: 'Open pipeline value per sales rep' },
745+
pipeline_by_forecast_category: { title: 'Pipeline by Forecast Category', description: 'Open pipeline grouped by sales forecast category' },
683746
lead_source_breakdown: { title: 'Lead Source', description: 'Where our pipeline is coming from' },
684747
open_pipeline_by_owner: { title: 'Open Pipeline by Owner', description: 'In-flight pipeline value, deal count and avg win probability per rep' },
685748
pipeline_stage_by_source: { title: 'Pipeline by Stage × Lead Source', description: 'Cross-tab of open opportunity amount by stage and source' },

src/translations/es-ES.ts

Lines changed: 75 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -65,9 +65,9 @@ export const esES: TranslationData = {
6565
department: {
6666
label: 'Departamento',
6767
options: {
68-
Executive: 'Ejecutivo', Sales: 'Ventas', Marketing: 'Marketing',
69-
Engineering: 'Ingeniería', Support: 'Soporte', Finance: 'Finanzas',
70-
HR: 'Recursos Humanos', Operations: 'Operaciones',
68+
executive: 'Ejecutivo', sales: 'Ventas', marketing: 'Marketing',
69+
engineering: 'Ingeniería', support: 'Soporte', finance: 'Finanzas',
70+
hr: 'Recursos Humanos', operations: 'Operaciones',
7171
},
7272
},
7373
owner: { label: 'Propietario de Contacto' },
@@ -264,17 +264,17 @@ export const esES: TranslationData = {
264264
type: {
265265
label: 'Tipo',
266266
options: {
267-
'New Business': 'Nuevo Negocio',
268-
'Existing Customer - Upgrade': 'Cliente Existente - Mejora',
269-
'Existing Customer - Renewal': 'Cliente Existente - Renovación',
270-
'Existing Customer - Expansion': 'Cliente Existente - Expansión',
267+
new_business: 'Nuevo Negocio',
268+
existing_upgrade: 'Cliente Existente - Mejora',
269+
existing_renewal: 'Cliente Existente - Renovación',
270+
existing_expansion: 'Cliente Existente - Expansión',
271271
},
272272
},
273273
forecast_category: {
274274
label: 'Categoría de Pronóstico',
275275
options: {
276-
Pipeline: 'Pipeline', 'Best Case': 'Mejor Caso',
277-
Commit: 'Compromiso', Omitted: 'Omitida', Closed: 'Cerrada',
276+
pipeline: 'Pipeline', best_case: 'Mejor Caso',
277+
commit: 'Compromiso', omitted: 'Omitida', closed: 'Cerrada',
278278
},
279279
},
280280
description: { label: 'Descripción' },
@@ -418,8 +418,6 @@ export const esES: TranslationData = {
418418
is_active: { label: 'Activo' },
419419
is_taxable: { label: 'Imponible' },
420420
product_manager: { label: 'Gerente de Producto' },
421-
image_url: { label: 'Imagen de Producto' },
422-
datasheet_url: { label: 'URL de Ficha Técnica' },
423421
image: { label: 'Imagen de Producto' },
424422
datasheet: { label: 'Ficha Técnica' },
425423
},
@@ -539,6 +537,71 @@ export const esES: TranslationData = {
539537
campaign_timeline: { label: 'Línea de Tiempo de Marketing' },
540538
},
541539
},
540+
541+
crm_campaign_member: {
542+
label: 'Miembro de Campaña',
543+
pluralLabel: 'Miembros de Campaña',
544+
description: 'Prospectos y contactos alcanzados por una campaña, con su estado de respuesta',
545+
fields: {
546+
member_number: { label: 'Número de Miembro' },
547+
crm_campaign: { label: 'Campaña' },
548+
crm_lead: { label: 'Prospecto' },
549+
crm_contact: { label: 'Contacto' },
550+
status: {
551+
label: 'Estado',
552+
options: {
553+
sent: 'Enviado', opened: 'Abierto', clicked: 'Clicado',
554+
responded: 'Respondido', converted: 'Convertido', bounced: 'Rebotado',
555+
unsubscribed: 'Dado de Baja',
556+
},
557+
},
558+
added_date: { label: 'Fecha de Alta' },
559+
first_opened_date: { label: 'Primera Apertura' },
560+
first_clicked_date: { label: 'Primer Clic' },
561+
response_date: { label: 'Fecha de Respuesta' },
562+
has_responded: { label: 'Ha Respondido' },
563+
},
564+
_sections: {
565+
basic: { label: 'Información Básica' },
566+
response: { label: 'Seguimiento de Respuesta' },
567+
},
568+
},
569+
570+
crm_opportunity_line_item: {
571+
label: 'Línea de Oportunidad',
572+
pluralLabel: 'Líneas de Oportunidad',
573+
description: 'Líneas de precio por producto dentro de una oportunidad',
574+
fields: {
575+
crm_opportunity: { label: 'Oportunidad' },
576+
crm_product: { label: 'Producto' },
577+
description: { label: 'Descripción' },
578+
quantity: { label: 'Cantidad' },
579+
list_price: { label: 'Precio de Lista' },
580+
unit_price: { label: 'Precio de Venta' },
581+
discount: { label: 'Descuento (%)' },
582+
total_price: { label: 'Total' },
583+
line_number: { label: 'Nº de Línea' },
584+
},
585+
},
586+
587+
crm_quote_line_item: {
588+
label: 'Línea de Presupuesto',
589+
pluralLabel: 'Líneas de Presupuesto',
590+
description: 'Líneas de precio por producto dentro de un presupuesto',
591+
fields: {
592+
crm_quote: { label: 'Presupuesto' },
593+
crm_product: { label: 'Producto' },
594+
description: { label: 'Descripción' },
595+
quantity: { label: 'Cantidad' },
596+
list_price: { label: 'Precio de Lista' },
597+
unit_price: { label: 'Precio de Venta' },
598+
discount: { label: 'Descuento (%)' },
599+
subtotal: { label: 'Subtotal' },
600+
tax_rate: { label: 'Tasa de Impuesto (%)' },
601+
total_price: { label: 'Total' },
602+
line_number: { label: 'Nº de Línea' },
603+
},
604+
},
542605
},
543606

544607
globalActions: {
@@ -637,7 +700,7 @@ export const esES: TranslationData = {
637700
avg_deal_size: { title: 'Tamaño medio del negocio', description: 'Valor medio de los negocios cerrados ganados este trimestre' },
638701
pipeline_by_stage: { title: 'Pipeline por etapa', description: 'Valor de oportunidades abiertas en cada etapa de venta' },
639702
monthly_revenue_trend: { title: 'Tendencia mensual de ingresos', description: 'Ingresos cerrados ganados de los últimos 12 meses' },
640-
opportunities_by_owner: { title: 'Oportunidades por responsable', description: 'Valor del pipeline abierto por representante' },
703+
pipeline_by_forecast_category: { title: 'Pipeline por categoría de pronóstico', description: 'Pipeline abierto agrupado por categoría de pronóstico de ventas' },
641704
lead_source_breakdown: { title: 'Origen del prospecto', description: 'De dónde proviene nuestro pipeline' },
642705
open_pipeline_by_owner: { title: 'Pipeline abierto por responsable', description: 'Valor del pipeline en curso, número de negocios y probabilidad media de cierre por comercial' },
643706
pipeline_stage_by_source: { title: 'Pipeline por Etapa × Origen', description: 'Tabla cruzada del importe de oportunidades abiertas por etapa y origen' },

src/translations/ja-JP.ts

Lines changed: 75 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -65,9 +65,9 @@ export const jaJP: TranslationData = {
6565
department: {
6666
label: '部門',
6767
options: {
68-
Executive: '経営層', Sales: '営業部', Marketing: 'マーケティング部',
69-
Engineering: 'エンジニアリング部', Support: 'サポート部', Finance: '経理部',
70-
HR: '人事部', Operations: 'オペレーション部',
68+
executive: '経営層', sales: '営業部', marketing: 'マーケティング部',
69+
engineering: 'エンジニアリング部', support: 'サポート部', finance: '経理部',
70+
hr: '人事部', operations: 'オペレーション部',
7171
},
7272
},
7373
owner: { label: '所有者' },
@@ -264,17 +264,17 @@ export const jaJP: TranslationData = {
264264
type: {
265265
label: 'タイプ',
266266
options: {
267-
'New Business': '新規ビジネス',
268-
'Existing Customer - Upgrade': '既存顧客 - アップグレード',
269-
'Existing Customer - Renewal': '既存顧客 - 更新',
270-
'Existing Customer - Expansion': '既存顧客 - 拡大',
267+
new_business: '新規ビジネス',
268+
existing_upgrade: '既存顧客 - アップグレード',
269+
existing_renewal: '既存顧客 - 更新',
270+
existing_expansion: '既存顧客 - 拡大',
271271
},
272272
},
273273
forecast_category: {
274274
label: '売上予測カテゴリ',
275275
options: {
276-
Pipeline: 'パイプライン', 'Best Case': '最良ケース',
277-
Commit: 'コミット', Omitted: '除外', Closed: '完了',
276+
pipeline: 'パイプライン', best_case: '最良ケース',
277+
commit: 'コミット', omitted: '除外', closed: '完了',
278278
},
279279
},
280280
description: { label: '説明' },
@@ -418,8 +418,6 @@ export const jaJP: TranslationData = {
418418
is_active: { label: '有効' },
419419
is_taxable: { label: '課税対象' },
420420
product_manager: { label: 'プロダクトマネージャー' },
421-
image_url: { label: '製品画像' },
422-
datasheet_url: { label: 'データシートURL' },
423421
image: { label: '製品画像' },
424422
datasheet: { label: 'データシート' },
425423
},
@@ -539,6 +537,71 @@ export const jaJP: TranslationData = {
539537
campaign_timeline: { label: 'マーケティングタイムライン' },
540538
},
541539
},
540+
541+
crm_campaign_member: {
542+
label: 'キャンペーンメンバー',
543+
pluralLabel: 'キャンペーンメンバー',
544+
description: 'キャンペーンの対象となったリード・連絡先とその反応状況',
545+
fields: {
546+
member_number: { label: 'メンバー番号' },
547+
crm_campaign: { label: 'キャンペーン' },
548+
crm_lead: { label: 'リード' },
549+
crm_contact: { label: '連絡先' },
550+
status: {
551+
label: 'ステータス',
552+
options: {
553+
sent: '送信済', opened: '開封済', clicked: 'クリック済',
554+
responded: '応答済', converted: '変換済', bounced: 'バウンス',
555+
unsubscribed: '配信停止',
556+
},
557+
},
558+
added_date: { label: '追加日時' },
559+
first_opened_date: { label: '初回開封' },
560+
first_clicked_date: { label: '初回クリック' },
561+
response_date: { label: '応答日時' },
562+
has_responded: { label: '応答済' },
563+
},
564+
_sections: {
565+
basic: { label: '基本情報' },
566+
response: { label: '反応トラッキング' },
567+
},
568+
},
569+
570+
crm_opportunity_line_item: {
571+
label: '商談商品明細',
572+
pluralLabel: '商談商品明細',
573+
description: '商談配下の製品別価格明細行',
574+
fields: {
575+
crm_opportunity: { label: '商談' },
576+
crm_product: { label: '製品' },
577+
description: { label: '説明' },
578+
quantity: { label: '数量' },
579+
list_price: { label: '定価' },
580+
unit_price: { label: '販売価格' },
581+
discount: { label: '割引率(%)' },
582+
total_price: { label: '合計' },
583+
line_number: { label: '行番号' },
584+
},
585+
},
586+
587+
crm_quote_line_item: {
588+
label: '見積明細',
589+
pluralLabel: '見積明細',
590+
description: '見積配下の製品別価格明細行',
591+
fields: {
592+
crm_quote: { label: '見積' },
593+
crm_product: { label: '製品' },
594+
description: { label: '説明' },
595+
quantity: { label: '数量' },
596+
list_price: { label: '定価' },
597+
unit_price: { label: '販売価格' },
598+
discount: { label: '割引率(%)' },
599+
subtotal: { label: '小計' },
600+
tax_rate: { label: '税率(%)' },
601+
total_price: { label: '合計' },
602+
line_number: { label: '行番号' },
603+
},
604+
},
542605
},
543606

544607
globalActions: {
@@ -637,7 +700,7 @@ export const jaJP: TranslationData = {
637700
avg_deal_size: { title: '平均商談規模', description: '今四半期の成立済み商談の平均金額' },
638701
pipeline_by_stage: { title: 'フェーズ別パイプライン', description: '各営業フェーズのオープン商談金額' },
639702
monthly_revenue_trend: { title: '月次売上トレンド', description: '過去12か月の成立済み売上' },
640-
opportunities_by_owner: { title: '担当者別商談', description: '営業担当ごとのオープンパイプライン金額' },
703+
pipeline_by_forecast_category: { title: '予測カテゴリ別パイプライン', description: '売上予測カテゴリ別のオープンパイプライン金額' },
641704
lead_source_breakdown: { title: 'リードソース', description: 'パイプラインの流入元' },
642705
open_pipeline_by_owner: { title: '担当者別オープンパイプライン', description: '営業担当者ごとの進行中パイプライン金額・商談数・平均勝率' },
643706
pipeline_stage_by_source: { title: 'ステージ × リードソース', description: 'ステージとソース別の進行中商談金額のクロス集計' },

0 commit comments

Comments
 (0)