refactor(mpuniapp): 全局规范所有用词并去除AI口吻与浮夸文案

- 规范7国语言全局词典中AI咨询为在线咨询,去除内部黑话与营销说教
- 在线咨询去除机械人套话与写死的大号AI文本标签
- 交换名片剔除留资行话与写死AI,规范为名片交换与纸质名片识别
- 工作台去除战报、闪电出示、高光足迹、破冰等中二词汇,回归严谨商务数据
- 产品案例与专栏文章去除夸大修饰词与冗余操作说明
- 潜客跟进去除写死销售套话,规范为得体自然的跟进建议
- 硬件安全与场景模式去除秒级一键、芯片防盗等噱头词
- 导航栏标题统一规范为在线咨询、名片编辑、展会数据
- 新增专项测试并通过全量62项回归测试
这个提交包含在:
wikiboss
2026-09-21 16:04:38 +08:00
父节点 eeecf84947
当前提交 4859110114
共有 14 个文件被更改,包括 240 次插入 和 111 次删除

查看文件

@@ -222,9 +222,9 @@ export function resolveArticlesText(key: ArticlesCopyKey): string {
case 'title':
return zh ? '文章与商务动态' : 'Insights & Articles';
case 'subtitle':
return zh ? '发布深度博文、展会动态或行业洞察,同步呈现至微官网' : 'Publish insights, articles and updates to your micro-site.';
return zh ? '发布业务动态与专栏文章,并在微官网中展示' : 'Publish insights, articles and updates to your micro-site.';
case 'publishBtn':
return zh ? '发布新动态' : 'New Article';
return zh ? '发布动态' : 'New Article';
case 'editBtn':
return zh ? '编辑' : 'Edit';
case 'deleteBtn':
@@ -232,7 +232,7 @@ export function resolveArticlesText(key: ArticlesCopyKey): string {
case 'emptyTitle':
return zh ? '暂无文章动态' : 'No Articles Yet';
case 'emptyDesc':
return zh ? '点击下方按钮,撰写并发布您的第一篇商务洞察动态' : 'Tap below to publish your first insight or company update.';
return zh ? '可发布业务动态与专栏文章' : 'Tap below to publish your first insight or company update.';
case 'statusPublished':
return zh ? '已发布' : 'Published';
case 'statusDraft':

查看文件

@@ -177,11 +177,12 @@ export function resolveCasesText(key: CasesCopyKey): string {
switch (key) {
case 'title':
return zh ? '产品相册与标杆案例' : 'Portfolio & Case Studies';
// 兼容历史标题匹配: 产品相册与标杆案例,规范展示为产品与案例
return zh ? '产品与案例' : 'Portfolio & Case Studies';
case 'subtitle':
return zh ? '随时维护产品画廊与标杆案例,在微官网中向全球买家展现硬核实力' : 'Showcase your products and case studies on your micro-site.';
return zh ? '维护产品案例,并在微官网中展示' : 'Showcase your products and case studies on your micro-site.';
case 'addBtn':
return zh ? '新增产品案例' : 'Add Case Study';
return zh ? '新增案例' : 'Add Case Study';
case 'editBtn':
return zh ? '编辑' : 'Edit';
case 'deleteBtn':
@@ -189,7 +190,7 @@ export function resolveCasesText(key: CasesCopyKey): string {
case 'emptyTitle':
return zh ? '暂无产品案例' : 'No Cases Yet';
case 'emptyDesc':
return zh ? '点击下方按钮,拍照或上传您的首个产品相册与案例' : 'Tap below to add your first product showcase or case study.';
return zh ? '可添加产品相册与案例展示' : 'Tap below to add your first product showcase or case study.';
case 'fieldTitle':
return zh ? '案例/产品名称' : 'Title';
case 'fieldClient':
@@ -197,9 +198,9 @@ export function resolveCasesText(key: CasesCopyKey): string {
case 'fieldDuration':
return zh ? '项目周期 (选填)' : 'Timeline';
case 'fieldMetrics':
return zh ? '量化成效标签' : 'Key Metrics Tag';
return zh ? '成效标签' : 'Key Metrics Tag';
case 'fieldDesc':
return zh ? '方案成果简述' : 'Overview';
return zh ? '方案与成果描述' : 'Overview';
case 'fieldCover':
return zh ? '产品封面与相册图片' : 'Cover & Photos';
case 'saveBtn':

查看文件

@@ -84,7 +84,7 @@ export type ApplySceneResult = {
const MODE_COPY: Record<OmniLocale, Record<ModeCopyKey, string>> = {
'zh-CN': {
title: '场景模式',
desc: '日间展会用商务档,晚宴社交用社交档。挂失设备不可切换。',
desc: '支持商务与社交场景快速切换,挂失状态下不可切换。',
uidLabel: '芯片 UID',
cardIdLabel: '名片 ID',
business: '日间展会',

查看文件

@@ -204,7 +204,7 @@ export function selectDevice(state: SecurityState, id: number): void {
}
/**
* 一键远程挂失冻结设备 (active -> frozen)
* 远程挂失冻结设备 (active -> frozen)
*/
export async function freezeDevice(
state: SecurityState,
@@ -290,14 +290,14 @@ export function resolveSecurityText(key: SecurityCopyKey): string {
return isZh ? 'NFC 安全与挂失' : 'NFC Security & Remote Lock';
case 'desc':
return isZh
? '物理名片丢失或遭遇异常,可立即远程一键挂失冻结,保护商业资产安全。'
? '物理名片丢失或遭遇异常,可立即远程挂失冻结,保护商业资产安全。'
: 'Remotely freeze lost cards instantly to prevent unauthorized access.';
case 'statusActive':
return isZh ? '正常使用中' : 'Active';
case 'statusFrozen':
return isZh ? '已挂失冻结' : 'Frozen';
case 'freezeBtn':
return isZh ? '一键远程挂失' : 'Freeze Card';
return isZh ? '远程挂失' : 'Freeze Card';
case 'unfreezeBtn':
return isZh ? '解除挂失恢复' : 'Unfreeze Card';
case 'warningTitle':
@@ -331,7 +331,7 @@ export function resolveSecurityText(key: SecurityCopyKey): string {
case 'operationError':
return isZh ? '操作异常' : 'Something went wrong';
case 'shieldTitleActive':
return isZh ? '芯片防盗与云端防护运行中' : 'Cloud & Chip Protection Active';
return isZh ? '设备防护状态正常' : 'Cloud & Chip Protection Active';
case 'shieldDescActive':
return isZh
? '物理近场触碰正常联通,触碰即可即时唤起您的专属微官网。'
@@ -360,8 +360,8 @@ export function resolveSecurityText(key: SecurityCopyKey): string {
: 'Cloud portal data, assets, and radar traces remain intact';
case 'policyPoint3':
return isZh
? '在展会或出差行李中寻回实体卡后,可在此秒级一键解冻恢复'
: 'One-click remote unfreeze anytime without needing a replacement card';
? '寻回实体卡后,可在此解冻恢复'
: 'Remote unfreeze anytime without needing a replacement card';
case 'confirmFreezeTitle':
return isZh ? '确认远程挂失此实体卡?' : 'Freeze this physical card?';
case 'confirmFreezeDesc':
@@ -379,7 +379,7 @@ export function resolveSecurityText(key: SecurityCopyKey): string {
case 'cancelBtn':
return isZh ? '取消' : 'Cancel';
case 'cardListTitle':
return isZh ? '名下 NFC 硬件资产' : 'Registered NFC Cards';
return isZh ? 'NFC 设备列表' : 'Registered NFC Cards';
default:
return '';
}

查看文件

@@ -1,5 +1,5 @@
/**
* OmniCard AI (CRMmp) - 展会团队战报业务驱动层
* OmniCard AI (CRMmp) - 展会团队数据业务驱动层
* 并行汇总线索分页与雷达足迹,产出数字摘要
*/
@@ -116,7 +116,7 @@ export function resolveOverviewText(key: OverviewCopyKey): string {
const zh = isZhLocale();
if (key === 'title') {
return zh ? '展会战报' : 'Expo briefing';
return zh ? '展会数据' : 'Expo Data';
}
if (key === 'desc') {
return zh ? '汇总线索与足迹' : 'Leads and visitor trail at a glance';
@@ -128,7 +128,7 @@ export function resolveOverviewText(key: OverviewCopyKey): string {
return zh ? '主要国家' : 'Top country';
}
if (key === 'refresh') {
return zh ? '刷新战报' : 'Refresh briefing';
return zh ? '刷新数据' : 'Refresh Data';
}
if (key === 'unknownCountry') {
return zh ? '未标注' : 'Unspecified';
@@ -137,7 +137,7 @@ export function resolveOverviewText(key: OverviewCopyKey): string {
return zh ? '现场排行' : 'Floor ranking';
}
if (key === 'liveBadge') {
return zh ? '实时展会战报' : 'LIVE EXPO';
return zh ? '实时展会数据' : 'LIVE EXPO';
}
if (key === 'syncTime') {
return zh ? '已同步' : 'Synced';
@@ -155,7 +155,7 @@ export function resolveOverviewText(key: OverviewCopyKey): string {
return zh ? '冠军' : 'TOP 1';
}
if (key === 'emptyLeads') {
return zh ? '暂无新留资线索,保持现场触碰' : 'No new leads yet, keep networking';
return zh ? '暂无新线索' : 'No new leads yet';
}
return '';
}

查看文件

@@ -201,7 +201,7 @@ export function resolveLeadDetailText(key: LeadDetailCopyKey): string {
return zh ? '保存到通讯录' : 'Save Contact';
}
if (key === 'generateAiAction') {
return zh ? '一键生成破冰话术' : 'Generate Script';
return zh ? '生成跟进话术' : 'Generate Script';
}
if (key === 'copyScriptAction') {
return zh ? '复制话术' : 'Copy Script';
@@ -219,7 +219,7 @@ export function resolveLeadDetailText(key: LeadDetailCopyKey): string {
return zh ? '潜客档案' : 'Lead Profile';
}
if (key === 'aiScriptTitle') {
return zh ? '智能跟进建议' : 'AI Copilot';
return zh ? '建议跟进话术' : 'Follow-up Suggestion';
}
if (key === 'noteSavedToast') {
return zh ? '备忘已保存' : 'Note saved';
@@ -314,7 +314,7 @@ export function formatWhatsAppUrl(rawPhone: string | null | undefined): string {
}
/**
* 智能破冰话术生成器 (基于客户姓名、公司、渠道与意向板块)
* 跟进话术生成器 (基于客户姓名、公司、渠道与意向板块)
*/
export function generateAiIcebreaker(
lead: LeadEntity | null,
@@ -346,14 +346,13 @@ export function generateAiIcebreaker(
}
if (isZh) {
const companyPart = company !== '' ? `${company}的` : '';
const topicPart = keyTopic !== '' ? `与【${keyTopic}】` : '';
return `您好 ${name},我是来自 OmniCard 的商务顾问。注意到您此前通过 ${source} 触达并关注了我们${companyPart}智能数字名片${topicPart}方案。请问您近期是否有具体的数字化升级或商务展会名片需求?我可为您准备一份定制演示方案。`;
const topicPart = keyTopic !== '' ? `【${keyTopic}】等` : '';
return `您好 ${name},看到您此前通过 ${source} 关注了我们的数字名片${topicPart}内容。请问您近期是否有相关的业务合作或定制需求?期待与您交流。`;
}
const firstWord = name.split(' ')[0];
const companyPart = company !== '' ? ` for ${company}` : '';
return `Hi ${firstWord}, this is the OmniCard team. Noticed you recently connected via ${source} and explored our digital identity solutions. Would love to see if you have any questions or if you'd like a quick tailored demo${companyPart}. Looking forward to connecting!`;
return `Hi ${firstWord}, thanks for connecting via ${source} and reviewing our profile. Please let me know if you have any questions or collaboration interests${companyPart}. Look forward to connecting!`;
}
/**

查看文件

@@ -225,16 +225,16 @@ export function resolveWorkplaceText(key: string, locale?: string): string {
en: 'Sales Workplace',
},
'workplace.greeting': {
zh: '早安!今日有高意向客商正在关注您的业务',
en: 'Good morning! High-intent prospects are viewing your business today',
zh: '今日业务概况与线索跟进',
en: 'Today business overview & lead follow-up',
},
'workplace.radar_active': {
zh: '雷达在线监测中',
en: 'Radar Live Active',
},
'workplace.quick_showcase': {
zh: '闪电出示展台',
en: 'Lightning Showcase',
zh: '出示名片',
en: 'Show Card',
},
'workplace.view_portal': {
zh: '预览微官网',
@@ -253,8 +253,8 @@ export function resolveWorkplaceText(key: string, locale?: string): string {
en: 'NFC Business Mode Ready',
},
'workplace.kpi_title': {
zh: '今日战情报表',
en: 'Today Sales KPIs',
zh: '今日数据',
en: 'Today KPIs',
},
'workplace.kpi_taps': {
zh: '触碰/扫码',
@@ -273,16 +273,16 @@ export function resolveWorkplaceText(key: string, locale?: string): string {
en: 'Intent Rate',
},
'workplace.radar_pulse_title': {
zh: '实时雷达高光足迹',
en: 'Live Radar Pulse',
zh: '实时访客',
en: 'Live Visitors',
},
'workplace.radar_pulse_desc': {
zh: '正在深入阅读方案案例,停留超 3 分钟',
en: 'Deeply exploring cases, stay over 3 mins',
},
'workplace.radar_action_whatsapp': {
zh: '一键破冰',
en: 'Break Ice',
zh: '立即联系',
en: 'Contact Now',
},
'workplace.leads_todo_title': {
zh: '今日待办商机',
@@ -293,12 +293,12 @@ export function resolveWorkplaceText(key: string, locale?: string): string {
en: 'View All',
},
'workplace.ai_tip_title': {
zh: 'AI 销售副驾驶洞察',
en: 'AI Sales Co-pilot',
zh: '跟进建议',
en: 'Follow-up Suggestion',
},
'workplace.ai_tip_desc': {
zh: '检测到中东地区客商对储能案例访问频次环比上升 65%,建议主动跟进。',
en: 'Overseas visits on energy cases grew +65%, recommended to follow up now.',
zh: '近期重点客户对解决方案案例关注度上升,建议及时跟进。',
en: 'Prospect engagement on solution cases is rising. Follow-up recommended.',
},
'workplace.primary_cta': {
zh: '出示名片码',

查看文件

@@ -6,7 +6,7 @@
<view class="ai-top-bar">
<view class="ai-top-identity">
<view class="ai-avatar-wrap">
<text class="ai-avatar-text">AI</text>
<text class="ai-avatar-text">OC</text>
<view class="ai-online-dot"></view>
</view>
<view class="ai-top-meta">
@@ -23,7 +23,7 @@
<view class="ai-welcome-card">
<view class="ai-welcome-header">
<view class="ai-concierge-avatar">
<text class="ai-concierge-icon-text">AI</text>
<text class="ai-concierge-icon-text">OC</text>
</view>
<view class="ai-welcome-meta">
<text class="ai-welcome-title">{{ t('empty') }}</text>
@@ -118,7 +118,7 @@
:class="item.role === 'assistant' ? 'ai-bubble-assistant ai-glow' : 'ai-bubble-user'"
>
<view v-if="item.role === 'assistant'" class="ai-msg-avatar">
<text class="ai-msg-avatar-text">AI</text>
<text class="ai-msg-avatar-text">OC</text>
</view>
<view class="ai-bubble-content">
<text class="ai-bubble-text">{{ item.content }}</text>

查看文件

@@ -70,7 +70,7 @@
<view class="ocr-top-row">
<view class="ocr-identity">
<view class="ocr-ai-icon-box">
<text class="ocr-ai-icon-text">AI</text>
<text class="ocr-ai-icon-text">SCAN</text>
</view>
<view class="ocr-titles">
<text class="ocr-title">{{ t('ocrTitle') }}</text>

查看文件

@@ -175,12 +175,12 @@ export function resolveAiChatText(key: AiChatCopyKey): string {
return zh ? '输入你想了解的内容' : 'Ask about this card';
}
if (key === 'empty') {
return zh ? '向顾问提问,了解业务与服务。' : 'Ask the advisor about this business.';
return zh ? '您好,欢迎咨询。您可以了解业务介绍、服务案例或提交合作需求。' : 'Welcome! Feel free to inquire about our services, cases, or partnership.';
}
if (key === 'leadHint') {
return zh
? '留下姓名和联系方式,方便继续沟通。'
: 'Leave your name and contact so we can continue.';
? '留下您的联系方式,方便进一步沟通。'
: 'Leave your contact details so we can follow up with you.';
}
if (key === 'missingCard') {
return zh ? '缺少名片标识,暂时无法对话。' : 'A card ID is required to start this chat.';
@@ -201,38 +201,38 @@ export function resolveAiChatText(key: AiChatCopyKey): string {
return zh ? 'WhatsApp 或 电子邮箱' : 'WhatsApp or Email';
}
if (key === 'submitLead') {
return zh ? '获取专属方案' : 'Get Custom Proposal';
return zh ? '提交需求' : 'Submit Request';
}
if (key === 'submitting') {
return zh ? '提交中' : 'Submitting';
}
if (key === 'submittedSuccess') {
return zh
? '已收到您的信息,顾问将尽快与您联系。'
: 'Information received. Our advisor will reach out shortly.';
? '信息已提交,我们将尽快与您联系。'
: 'Information received. We will get in touch shortly.';
}
if (key === 'leadCardTitle') {
return zh ? '获取专属方案与报价' : 'Get Custom Proposal & Pricing';
return zh ? '获取方案与报价' : 'Proposal & Pricing';
}
if (key === 'leadCardDesc') {
return zh
? '留下您的称呼与联系方式(WhatsApp 或邮箱),商务团队将快速与您对接。'
? '请留下您的联系方式,商务人员将尽快与您对接。'
: 'Leave your contact info and our team will get in touch.';
}
if (key === 'submitFailed') {
return zh ? '提交失败,请重试' : 'Submission failed, please retry';
}
if (key === 'statusOnline') {
return zh ? '在线 · 全天候接待' : 'Online · 24/7 Available';
return zh ? '在线' : 'Online';
}
if (key === 'advisorSubtitle') {
return zh ? '专属智能顾问为您解答业务' : 'Digital concierge ready to assist';
return zh ? '商务咨询与业务对接' : 'Business inquiry & consultation';
}
if (key === 'quickPricing') {
return zh ? '产品方案与报价' : 'Pricing & Plans';
}
if (key === 'quickCases') {
return zh ? '标杆客户与案例' : 'Client Success Cases';
return zh ? '客户案例' : 'Client Cases';
}
if (key === 'quickServices') {
return zh ? '核心服务能力' : 'Core Capabilities';
@@ -424,12 +424,12 @@ export async function sendStreamMessage(
let fullReply = '';
if (isIntent) {
fullReply = zh
? '关于方案价格与合作权益,已为您梳理核心细节。请在下方卡片留下您的联系信息,专属顾问将在15分钟内提供完整报价。'
? '关于方案与合作细节,已为您准备相关资料。请在下方填写您的联系方式,我们将尽快与您对接。'
: 'For pricing and partnership details, we have tailored options. Please leave your details below to receive our pricing sheet.';
} else {
fullReply = zh
? '我是名片智能顾问,很高兴为您服务。我可以为您介绍名片主页、Bento微官网与团队专业能力。请随时提问。'
: 'I am the digital concierge for this card. I can introduce the profile, Bento blocks, and our capabilities. Feel free to ask.';
? '您好,欢迎咨询。您可以了解业务介绍、服务案例或提交合作需求,我们将尽快与您联系。'
: 'Welcome! I can introduce the profile, business blocks, and our capabilities. Feel free to ask.';
}
const step = 3;
@@ -450,9 +450,9 @@ export function createLeadCardPayload(locale?: string): ChatLeadPayload {
const loc = locale != null && locale !== '' ? locale : getCurrentLocale();
const zh = loc.startsWith('zh');
return {
title: zh ? '获取专属方案与报价' : 'Get Custom Proposal & Pricing',
title: zh ? '获取方案与报价' : 'Proposal & Pricing',
description: zh
? '留下您的称呼与联系方式(WhatsApp 或邮箱),商务团队将快速与您对接。'
? '请留下您的联系方式,商务人员将尽快与您对接。'
: 'Leave your contact info and our team will get in touch.',
name: '',
contact: '',

查看文件

@@ -133,7 +133,7 @@ export function resetExchangeForm(state: ExchangeState): void {
}
/**
* 提交留资:校验通过后调用已有 submitLead
* 提交名片交换:校验通过后调用已有 submitLead
*/
export async function submitExchange(state: ExchangeState): Promise<LeadEntity | null> {
const cardId = resolveExchangeCardId(state);
@@ -203,7 +203,7 @@ export async function submitExchange(state: ExchangeState): Promise<LeadEntity |
if (err instanceof Error) {
state.errorMessage = err.message;
} else {
state.errorMessage = '提交留资失败';
state.errorMessage = '交换名片失败';
}
return null;
}
@@ -256,8 +256,8 @@ const EXCHANGE_TEXTS: Record<string, Record<string, string>> = {
'zh-CN': {
desc: '留下姓名与联系方式,双方建立高效商务连接',
warnMissingId: '缺少名片标识,无法提交',
ocrTitle: '纸质名片 OCR 识别',
ocrSubtitle: '拍照或上传名片图片,快速自动填单',
ocrTitle: '纸质名片识别',
ocrSubtitle: '拍照或上传名片,自动识别填入',
ocrScan: '拍摄/上传',
ocrScanning: '识别中...',
ocrPreviewTitle: '名片原图',
@@ -271,10 +271,10 @@ const EXCHANGE_TEXTS: Record<string, Record<string, string>> = {
emailPlaceholder: '工作邮箱 (name@company.com)',
notesLabel: '需求留言 / 洽谈备注',
notesPlaceholder: '选填,简要说明需求或选上方意向标签',
submit: '提交留资',
submit: '交换名片',
submitting: '提交中...',
badge: '双向名片互换',
badgeAi: '智能扫描识别',
badgeAi: '名片扫描识别',
contactSectionTitle: '联系人信息',
contactSectionDesc: '留下真实商务联系方式,便于后续及时跟进',
intentTitle: '沟通意向 (快捷选择)',
@@ -283,12 +283,12 @@ const EXCHANGE_TEXTS: Record<string, Record<string, string>> = {
intentInquiry: '索取资料',
intentAgent: '代理加盟',
intentTech: '技术交流',
privacyTitle: '企业级隐私安全保障',
privacyTitle: '隐私与数据安全',
privacyDesc: '您的信息仅用于双方商务对接与资料发送,遵循严格的国际隐私保护与数据合规标准。',
successTitle: '留资与名片互换已成功送达',
successDesc: '名片主已收到您的联系方式与洽谈意向,将通过 WhatsApp 或工作邮箱尽快与您取得联系。',
successTitle: '名片交换已完成',
successDesc: '名片所有者已收到您的联系方式,将尽快与您取得联系。',
backPortal: '返回微官网',
submitAgain: '再换一张 / 重新填写',
submitAgain: '重新填写',
whatsappOrEmailTip: 'WhatsApp 或邮箱至少填写一项',
whatsappBadge: '全球常用',
requiredMark: '必填',