feat(i18n): 剩余15页全量接入中英(登录/注册/扫码/绑定/佩戴/扫描/治疗/订阅/帮助等)

- 3 个并行 agent 各管 5 页,互不重叠命名空间
- 全 App 18 页均 i18n.bind,22 命名空间/400 键中英对齐
- 动态文案(时长/天数/价格/区域)JS 内 i18n.t 计算;区域标签复用 common.regions
这个提交包含在:
Guoguo
2026-07-19 06:00:04 -07:00
父节点 f5eaf05067
当前提交 4466c53c7b
修改 45 个文件,包含 842 行新增268 行删除
+38 -3
查看文件
@@ -1,5 +1,40 @@
// Strings for the autoScan page. Fill zh/en with identical key structure.
// Strings for the auto-scan (smart scan) page. Keep zh/en with identical key structure.
// Pre/Post pairs are concatenated around a frame count in WXML (WXML cannot do {param}).
module.exports = {
zh: {},
en: {}
zh: {
title: '智能检测',
subReady: '准备就绪',
subWaiting: '等待佩戴贴合...',
subCollectingPre: '采集数据中 (',
subCollectingPost: '帧)...',
subDone: '检测完成,正在启动...',
readyHint: '设备已佩戴,点击下方按钮开始智能检测',
startBtn: '开始检测',
waitingStatus: '正在检测面膜贴合状态,请确保设备正确佩戴...',
collectingStatusPre: '已贴合,正在采集光谱数据... 已收到 ',
collectingStatusPost: ' 帧',
doneStatusPre: '检测完成(共 ',
doneStatusPost: ' 帧),正在启动治疗...',
notWorn: '面膜未佩戴好,请重新佩戴后再试',
timeout: '检测超时,未收到数据,请重试',
cmdFailed: '检测命令发送失败'
},
en: {
title: 'Smart Scan',
subReady: 'Ready',
subWaiting: 'Waiting for fit...',
subCollectingPre: 'Collecting data (',
subCollectingPost: ' frames)...',
subDone: 'Scan complete, starting...',
readyHint: 'Device is on. Tap the button below to start the smart scan',
startBtn: 'Start Scan',
waitingStatus: 'Checking mask fit, please make sure the device is worn correctly...',
collectingStatusPre: 'Fitted. Collecting spectral data... received ',
collectingStatusPost: ' frames',
doneStatusPre: 'Scan complete (',
doneStatusPost: ' frames), starting treatment...',
notWorn: 'The mask is not worn properly. Please re-fit and try again',
timeout: 'Scan timed out with no data. Please try again',
cmdFailed: 'Failed to send scan command'
}
}
+20 -2
查看文件
@@ -1,5 +1,23 @@
// Strings for the bindSuccess page. Fill zh/en with identical key structure.
module.exports = {
zh: {},
en: {}
zh: {
title: '绑定成功',
subtitle: '设备已成功绑定',
successTitle: '绑定成功!',
freeModeOpen: '智能模式已开放',
trialGranted: '恭喜获得{days}天智能模式试用',
trialSub: '体验结束后可订阅继续使用',
startUsing: '开始使用',
goHome: '返回首页'
},
en: {
title: 'Bound Successfully',
subtitle: 'Device bound successfully',
successTitle: 'Bound Successfully!',
freeModeOpen: 'Smart mode unlocked',
trialGranted: 'You got a {days}-day Smart mode trial',
trialSub: 'Subscribe to keep using it after the trial ends',
startUsing: 'Get Started',
goHome: 'Back to Home'
}
}
+30 -2
查看文件
@@ -1,5 +1,33 @@
// Strings for the bleConnect page. Fill zh/en with identical key structure.
module.exports = {
zh: {},
en: {}
zh: {
title: '蓝牙连接',
searchingSub: '正在搜索设备...',
connectingSub: '正在连接设备...',
bindingSub: '正在绑定...',
failedSub: '连接失败',
bluetoothTip: '请确保手机蓝牙已开启',
searching: '搜索中...',
pairing: '正在配对...',
failed: '连接失败',
scanTimeout: '搜索超时,请确认设备已开机并在附近',
confirmFailed: '后台确认绑定失败',
bindFailed: '设备绑定失败',
bindCmdFailed: '绑定命令失败'
},
en: {
title: 'Bluetooth Connection',
searchingSub: 'Searching for device...',
connectingSub: 'Connecting to device...',
bindingSub: 'Binding...',
failedSub: 'Connection failed',
bluetoothTip: 'Please make sure Bluetooth is enabled on your phone',
searching: 'Searching...',
pairing: 'Pairing...',
failed: 'Connection failed',
scanTimeout: 'Search timed out. Please make sure the device is powered on and nearby',
confirmFailed: 'Failed to confirm binding on the server',
bindFailed: 'Device binding failed',
bindCmdFailed: 'Binding command failed'
}
}
+10 -2
查看文件
@@ -1,5 +1,13 @@
// Strings for the contact page. Fill zh/en with identical key structure.
module.exports = {
zh: {},
en: {}
zh: {
title: '联系我们',
placeholderText: '内容建设中',
placeholderSub: '联系方式正在整理,敬请期待'
},
en: {
title: 'Contact Us',
placeholderText: 'Coming soon',
placeholderSub: 'Contact details are being prepared. Stay tuned.'
}
}
+10 -2
查看文件
@@ -1,5 +1,13 @@
// Strings for the help page. Fill zh/en with identical key structure.
module.exports = {
zh: {},
en: {}
zh: {
title: '使用帮助',
placeholderText: '内容建设中',
placeholderSub: '帮助文档正在编写,敬请期待'
},
en: {
title: 'Help',
placeholderText: 'Coming soon',
placeholderSub: 'The help guide is being written. Stay tuned.'
}
}
+18 -2
查看文件
@@ -1,5 +1,21 @@
// Strings for the login page. Fill zh/en with identical key structure.
module.exports = {
zh: {},
en: {}
zh: {
wechatLogin: '微信登录',
welcome: '欢迎使用LumiFlow',
desc: '登录后即可使用全部功能',
agreement: '登录即表示同意《用户协议》和《隐私政策》',
loginFailed: '登录失败',
agreementTitle: '提示',
agreementContent: '用户协议和隐私政策内容建设中'
},
en: {
wechatLogin: 'WeChat Login',
welcome: 'Welcome to LumiFlow',
desc: 'Log in to unlock all features',
agreement: 'By logging in, you agree to the Terms of Service and Privacy Policy',
loginFailed: 'Login failed',
agreementTitle: 'Notice',
agreementContent: 'Terms of Service and Privacy Policy are coming soon'
}
}
+42 -2
查看文件
@@ -1,5 +1,45 @@
// Strings for the register page. Fill zh/en with identical key structure.
module.exports = {
zh: {},
en: {}
zh: {
subtitle: '完善个人资料',
avatarSection: '设置头像',
changeAvatar: '点击更换',
nicknameSection: '设置昵称',
nicknamePlaceholder: '请输入昵称',
authorizePhone: '授权手机号',
phoneHint: '手机号用于接收服务通知,必须授权',
submit: '完成注册',
agreement: '注册即表示同意《用户协议》和《隐私政策》',
nicknamePrefix: '用户',
phoneRequired: '需要授权手机号才能完成注册',
phoneAuthSuccess: '手机号授权成功',
phoneAuthFailed: '手机号授权失败',
authorized: '已授权',
uploadFailed: '上传失败',
phoneFirst: '请先授权手机号',
nicknameRequired: '请输入昵称',
agreementTitle: '提示',
agreementContent: '用户协议和隐私政策内容建设中'
},
en: {
subtitle: 'Complete Your Profile',
avatarSection: 'Set Avatar',
changeAvatar: 'Tap to change',
nicknameSection: 'Set Nickname',
nicknamePlaceholder: 'Enter a nickname',
authorizePhone: 'Authorize Phone Number',
phoneHint: 'Your phone number is used to receive service notifications and is required',
submit: 'Complete Registration',
agreement: 'By registering, you agree to the Terms of Service and Privacy Policy',
nicknamePrefix: 'User',
phoneRequired: 'Phone number authorization is required to complete registration',
phoneAuthSuccess: 'Phone number authorized',
phoneAuthFailed: 'Phone authorization failed',
authorized: 'Authorized',
uploadFailed: 'Upload failed',
phoneFirst: 'Please authorize your phone number first',
nicknameRequired: 'Please enter a nickname',
agreementTitle: 'Notice',
agreementContent: 'Terms of Service and Privacy Policy are coming soon'
}
}
+26 -2
查看文件
@@ -1,5 +1,29 @@
// Strings for the scan page. Fill zh/en with identical key structure.
module.exports = {
zh: {},
en: {}
zh: {
title: '扫码绑定',
subtitle: '扫描设备底部二维码',
scanText: '扫描设备二维码',
scan: '扫码',
scanning: '扫描中...',
manualInput: '手动输入设备号',
manualPlaceholder: '请输入设备ID,如 672B6D5A 4DCD861',
invalidQr: '无效的设备二维码',
alreadyBound: '已绑定设备',
bindFailed: '绑定失败',
invalidFormat: '设备号格式不正确'
},
en: {
title: 'Scan to Bind',
subtitle: 'Scan the QR code on the bottom of the device',
scanText: 'Scan device QR code',
scan: 'Scan',
scanning: 'Scanning...',
manualInput: 'Enter Device ID Manually',
manualPlaceholder: 'Enter device ID, e.g. 672B6D5A 4DCD861',
invalidQr: 'Invalid device QR code',
alreadyBound: 'Device already bound',
bindFailed: 'Binding failed',
invalidFormat: 'Invalid device ID format'
}
}
+31 -3
查看文件
@@ -1,5 +1,33 @@
// Strings for the setup page. Fill zh/en with identical key structure.
// Strings for the treatment-setup page. Keep zh/en with identical key structure.
module.exports = {
zh: {},
en: {}
zh: {
title: '使用设置',
subtitle: '选择模式和区域',
selectMode: '选择模式',
normalMode: '普通模式',
normalModeSub: '6色循环',
smartMode: '智能模式',
remainDays: '剩余{days}天',
subscribeUnlock: '订阅解锁',
selectRegion: '选择区域',
normalTip: '普通模式固定 10 分钟,使用区域默认全区域,不可调整',
startBtn: '开始使用',
noRegion: '请至少选择一个区域',
startFailed: '启动失败'
},
en: {
title: 'Session Setup',
subtitle: 'Choose mode and regions',
selectMode: 'Select Mode',
normalMode: 'Normal Mode',
normalModeSub: '6-color cycle',
smartMode: 'Smart Mode',
remainDays: '{days} days left',
subscribeUnlock: 'Subscribe to unlock',
selectRegion: 'Select Regions',
normalTip: 'Normal mode runs a fixed 10 minutes over all regions and cannot be adjusted',
startBtn: 'Start',
noRegion: 'Please select at least one region',
startFailed: 'Failed to start'
}
}
+84 -2
查看文件
@@ -1,5 +1,87 @@
// Strings for the subPlans page. Fill zh/en with identical key structure.
module.exports = {
zh: {},
en: {}
zh: {
title: '订阅服务',
subtitle: '解锁智能模式',
currentPlanLabel: '当前套餐',
remainDaysLabel: '剩余天数',
daysValue: '{days}天',
choosePlan: '选择订阅套餐',
loadingPlans: '加载套餐中...',
smartMode: '智能模式',
smartModeDesc: '智能自动调节',
renew: '续费',
confirmPay: '确认支付',
agreement: '支付即表示同意《订阅协议》',
// plan names (also used as fallback plan labels)
planTrial: '试用',
planMonthly: '月卡',
planYearly: '年卡',
// computed plan descriptions
free: '免费',
descTrial: '{days}天免费体验',
descSave: '省¥{amount}',
descDaily: '约{price}元/天',
tagRecommend: '推荐',
tagUsed: '已使用',
// modals / toasts
tipTitle: '提示',
agreementBuilding: '订阅协议内容建设中',
activateTrialTitle: '激活试用',
activateTrialConfirm: '免费试用 {desc}?',
confirmRenewTitle: '确认续费',
confirmPayTitle: '确认支付',
renewContent: '在现有订阅基础上延长{days}天,支付 ¥{price}',
payContent: '支付 ¥{price}',
trialActivated: '试用已激活',
activateFailed: '激活失败',
payUnavailable: '支付服务暂不可用',
payCancelled: '已取消支付',
payFailed: '支付失败',
createOrderFailed: '创建订单失败',
paySuccess: '支付成功',
payProcessing: '支付处理中,请稍后在订阅页查看'
},
en: {
title: 'Subscription',
subtitle: 'Unlock Smart Mode',
currentPlanLabel: 'Current plan',
remainDaysLabel: 'Days remaining',
daysValue: '{days} days',
choosePlan: 'Choose a plan',
loadingPlans: 'Loading plans...',
smartMode: 'Smart Mode',
smartModeDesc: 'Automatic smart adjustment',
renew: 'Renew',
confirmPay: 'Pay Now',
agreement: 'By paying you agree to the Subscription Agreement',
// plan names (also used as fallback plan labels)
planTrial: 'Trial',
planMonthly: 'Monthly',
planYearly: 'Yearly',
// computed plan descriptions
free: 'Free',
descTrial: '{days}-day free trial',
descSave: 'Save ¥{amount}',
descDaily: 'About ¥{price}/day',
tagRecommend: 'Best value',
tagUsed: 'Used',
// modals / toasts
tipTitle: 'Notice',
agreementBuilding: 'The subscription agreement is being prepared',
activateTrialTitle: 'Activate trial',
activateTrialConfirm: 'Start free trial: {desc}?',
confirmRenewTitle: 'Confirm renewal',
confirmPayTitle: 'Confirm payment',
renewContent: 'Extend your current subscription by {days} days for ¥{price}',
payContent: 'Pay ¥{price}',
trialActivated: 'Trial activated',
activateFailed: 'Activation failed',
payUnavailable: 'Payment service is unavailable',
payCancelled: 'Payment cancelled',
payFailed: 'Payment failed',
createOrderFailed: 'Failed to create order',
paySuccess: 'Payment successful',
payProcessing: 'Payment is processing. Please check the subscription page later.'
}
}
+26 -2
查看文件
@@ -1,5 +1,29 @@
// Strings for the subPrompt page. Fill zh/en with identical key structure.
module.exports = {
zh: {},
en: {}
zh: {
title: '使用设置',
subtitle: '试用期已结束',
selectMode: '选择模式',
normalMode: '普通模式',
normalModeSub: '6色循环',
smartMode: '智能模式',
smartModeSub: '订阅解锁',
trialEndedTitle: '试用已结束',
trialEndedSub: '订阅后继续使用智能模式',
subscribeNow: '立即订阅',
useNormalFirst: '先使用普通模式'
},
en: {
title: 'Settings',
subtitle: 'Your free trial has ended',
selectMode: 'Choose a mode',
normalMode: 'Standard Mode',
normalModeSub: '6-color cycle',
smartMode: 'Smart Mode',
smartModeSub: 'Unlock with subscription',
trialEndedTitle: 'Trial ended',
trialEndedSub: 'Subscribe to keep using Smart Mode',
subscribeNow: 'Subscribe Now',
useNormalFirst: 'Use Standard Mode for now'
}
}
+26 -2
查看文件
@@ -1,5 +1,29 @@
// Strings for the subSuccess page. Fill zh/en with identical key structure.
module.exports = {
zh: {},
en: {}
zh: {
title: '订阅成功',
subtitle: '欢迎使用智能模式',
successTitle: '订阅成功!',
subscribed: '已订阅',
validUntil: '有效期至:',
startSmart: '立即体验智能模式',
backHome: '返回首页',
planTrial: '试用会员',
planMonthly: '月卡会员',
planYearly: '年卡会员',
planDefault: '会员'
},
en: {
title: 'Subscription Successful',
subtitle: 'Welcome to Smart Mode',
successTitle: 'Subscription successful!',
subscribed: 'Subscribed',
validUntil: 'Valid until: ',
startSmart: 'Try Smart Mode now',
backHome: 'Back to Home',
planTrial: 'Trial Member',
planMonthly: 'Monthly Member',
planYearly: 'Yearly Member',
planDefault: 'Member'
}
}
+57 -3
查看文件
@@ -1,5 +1,59 @@
// Strings for the treating page. Fill zh/en with identical key structure.
// Strings for the treating (live treatment) page. Keep zh/en with identical key structure.
module.exports = {
zh: {},
en: {}
zh: {
title: '使用中',
subtitle: '正在使用...',
remainingLabel: '剩余时间',
smartMode: '✨ 智能模式',
normalMode: '🔄 普通模式',
allRegions: '全区域',
regionTopLeft: '左上区',
regionTopRight: '右上区',
relax1: '请放松心情',
relax2: '享受美好时光',
stopBtn: '停止使用',
fittingLost: '检测到离肤,请重新佩戴设备',
fittingRestored: '已重新贴合,继续使用',
faultTitle: '设备故障',
faultContent: '设备上报故障,已自动停止。',
lowBatteryTitle: '电量过低',
lowBatteryContent: '设备电量不足5%,已自动停止。请及时充电。',
lowBatteryWarn: '电量低,请及时充电',
exceptionTitle: '设备异常',
exceptionContent: '使用过程中出现异常',
disconnected: '设备连接断开,正在重连...',
reconnected: '设备已重新连接',
reconnectFailedTitle: '连接丢失',
reconnectFailedContent: '设备蓝牙连接已断开,无法恢复。本次使用数据将保存。',
stopTitle: '结束使用',
stopContent: '确定要提前结束本次使用吗?'
},
en: {
title: 'In Progress',
subtitle: 'Treatment in progress...',
remainingLabel: 'Time Left',
smartMode: '✨ Smart Mode',
normalMode: '🔄 Normal Mode',
allRegions: 'All regions',
regionTopLeft: 'Top-left',
regionTopRight: 'Top-right',
relax1: 'Relax and unwind',
relax2: 'Enjoy your moment',
stopBtn: 'Stop',
fittingLost: 'Device lifted off skin. Please put it back on',
fittingRestored: 'Re-fitted, continuing',
faultTitle: 'Device Fault',
faultContent: 'The device reported a fault and stopped automatically.',
lowBatteryTitle: 'Battery Too Low',
lowBatteryContent: 'Battery is below 5%. Stopped automatically. Please charge soon.',
lowBatteryWarn: 'Low battery, please charge soon',
exceptionTitle: 'Device Error',
exceptionContent: 'Something went wrong during the session',
disconnected: 'Device disconnected, reconnecting...',
reconnected: 'Device reconnected',
reconnectFailedTitle: 'Connection Lost',
reconnectFailedContent: 'The Bluetooth connection was lost and cannot be restored. This session will be saved.',
stopTitle: 'End Session',
stopContent: 'Are you sure you want to end this session early?'
}
}
+23 -3
查看文件
@@ -1,5 +1,25 @@
// Strings for the treatmentDone page. Fill zh/en with identical key structure.
// Strings for the treatment-done page. Keep zh/en with identical key structure.
module.exports = {
zh: {},
en: {}
zh: {
title: '使用完成',
headerSub: '本次使用已结束',
resultTitle: '使用完成!',
durationLabel: '使用时长',
regionLabel: '使用区域',
recorded: '本次使用已记录',
backHome: '返回首页',
durationMin: '{min}分钟',
durationSec: '{sec}秒'
},
en: {
title: 'Complete',
headerSub: 'This session has ended',
resultTitle: 'Session Complete!',
durationLabel: 'Duration',
regionLabel: 'Regions',
recorded: 'This session has been recorded',
backHome: 'Back to Home',
durationMin: '{min} min',
durationSec: '{sec} s'
}
}
+37 -3
查看文件
@@ -1,5 +1,39 @@
// Strings for the wearCheck page. Fill zh/en with identical key structure.
// Strings for the wear-check page. Keep zh/en with identical key structure.
module.exports = {
zh: {},
en: {}
zh: {
title: '确认佩戴',
subtitle: '请确保设备正确佩戴',
connected: '已连接',
disconnected: '未连接',
battery: '电量',
guideTitle: '佩戴指引',
guideImg: '设备佩戴示意图',
step1: '1. 取出设备,展开弹性绑带',
step2: '2. 将设备正确佩戴',
step3: '3. 调节绑带至舒适位置',
confirmBtn: '确认已佩戴,开始检测',
reconnect: '重新连接',
connecting: '正在连接...',
connectSuccess: '连接成功',
connectFailed: '连接失败',
searchTimeout: '搜索超时'
},
en: {
title: 'Confirm Fit',
subtitle: 'Make sure the device is worn correctly',
connected: 'Connected',
disconnected: 'Not connected',
battery: 'Battery',
guideTitle: 'How to Wear',
guideImg: 'Wearing diagram',
step1: '1. Take out the device and unfold the strap',
step2: '2. Put the device on correctly',
step3: '3. Adjust the strap to a comfortable fit',
confirmBtn: 'Confirm Fit & Continue',
reconnect: 'Reconnect',
connecting: 'Connecting...',
connectSuccess: 'Connected',
connectFailed: 'Connection failed',
searchTimeout: 'Search timed out'
}
}