Add Chinese translations for medication management and personal settings
- Introduced new translation files for medication, personal, and weight management in Chinese. - Updated the main index file to include the new translation modules. - Enhanced the medication type definitions to include 'ointment'. - Refactored workout type labels to utilize i18n for better localization support. - Improved sleep quality descriptions and recommendations with i18n integration.
This commit is contained in:
303
i18n/zh/challenge.ts
Normal file
303
i18n/zh/challenge.ts
Normal file
@@ -0,0 +1,303 @@
|
||||
export const challengeDetail = {
|
||||
title: '挑战详情',
|
||||
notFound: '未找到该挑战,稍后再试试吧。',
|
||||
loading: '加载挑战详情中…',
|
||||
retry: '重新加载',
|
||||
share: {
|
||||
generating: '正在生成分享卡片...',
|
||||
failed: '分享失败,请稍后重试',
|
||||
messageJoined: '我正在参与「{{title}}」挑战,已完成 {{completed}}/{{target}} 天!一起加入吧!',
|
||||
messageNotJoined: '发现一个很棒的挑战「{{title}}」,一起来参与吧!',
|
||||
},
|
||||
dateRange: {
|
||||
format: '{{start}} - {{end}}',
|
||||
monthDay: '{{month}}月{{day}}日',
|
||||
ongoing: '持续更新中',
|
||||
},
|
||||
participants: {
|
||||
count: '{{count}} 人正在参与',
|
||||
ongoing: '持续更新中',
|
||||
more: '更多',
|
||||
},
|
||||
detail: {
|
||||
requirement: '按日打卡自动累计',
|
||||
viewAllRanking: '查看全部',
|
||||
},
|
||||
checkIn: {
|
||||
title: '挑战打卡',
|
||||
todayChecked: '今日已打卡',
|
||||
subtitle: '每日打卡会累计进度,达成目标天数',
|
||||
subtitleChecked: '已记录今日进度,明天继续保持',
|
||||
button: {
|
||||
checkIn: '立即打卡',
|
||||
checking: '打卡中…',
|
||||
checked: '今日已打卡',
|
||||
notJoined: '加入后打卡',
|
||||
upcoming: '挑战未开始',
|
||||
expired: '挑战已结束',
|
||||
},
|
||||
toast: {
|
||||
alreadyChecked: '今日已打卡',
|
||||
notStarted: '挑战未开始,开始后再来打卡',
|
||||
expired: '挑战已结束,无法打卡',
|
||||
mustJoin: '加入挑战后才能打卡',
|
||||
success: '打卡成功,继续坚持!',
|
||||
failed: '打卡失败,请稍后再试',
|
||||
},
|
||||
},
|
||||
cta: {
|
||||
join: '立即加入挑战',
|
||||
joining: '加入中…',
|
||||
leave: '退出挑战',
|
||||
leaving: '退出中…',
|
||||
delete: '删除挑战',
|
||||
deleting: '删除中…',
|
||||
upcoming: '挑战即将开始',
|
||||
expired: '挑战已结束',
|
||||
},
|
||||
highlight: {
|
||||
join: {
|
||||
title: '立即加入挑战',
|
||||
subtitle: '邀请好友一起坚持,更容易收获成果',
|
||||
},
|
||||
leave: {
|
||||
title: '先别急着离开',
|
||||
subtitle: '再坚持一下,下一个里程碑就要出现了',
|
||||
},
|
||||
upcoming: {
|
||||
title: '挑战即将开始',
|
||||
subtitle: '{{date}} 开始,敬请期待',
|
||||
subtitleFallback: '挑战即将开启,敬请期待',
|
||||
},
|
||||
expired: {
|
||||
title: '挑战已结束',
|
||||
subtitle: '{{date}} 已截止,期待下一次挑战',
|
||||
subtitleFallback: '本轮挑战已结束,期待下一次挑战',
|
||||
},
|
||||
},
|
||||
alert: {
|
||||
leaveConfirm: {
|
||||
title: '确认退出挑战?',
|
||||
message: '退出后需要重新加入才能继续坚持。',
|
||||
cancel: '取消',
|
||||
confirm: '退出挑战',
|
||||
},
|
||||
joinFailed: '加入挑战失败',
|
||||
leaveFailed: '退出挑战失败',
|
||||
archiveConfirm: {
|
||||
title: '确认删除该挑战?',
|
||||
message: '删除后将无法恢复,参与者也将无法再访问此挑战。',
|
||||
cancel: '取消',
|
||||
confirm: '删除挑战',
|
||||
},
|
||||
archiveFailed: '删除挑战失败',
|
||||
archiveSuccess: '挑战已删除',
|
||||
},
|
||||
ranking: {
|
||||
title: '排行榜',
|
||||
description: '',
|
||||
empty: '榜单即将开启,快来抢占席位。',
|
||||
today: '今日',
|
||||
todayGoal: '今日目标',
|
||||
hour: '小时',
|
||||
},
|
||||
leaderboard: {
|
||||
title: '排行榜',
|
||||
loading: '加载榜单中…',
|
||||
notFound: '未找到该挑战。',
|
||||
loadFailed: '暂时无法加载榜单,请稍后再试。',
|
||||
empty: '榜单即将开启,快来抢占席位。',
|
||||
loadMore: '加载更多…',
|
||||
loadMoreFailed: '加载更多失败,请下拉刷新重试',
|
||||
},
|
||||
shareCard: {
|
||||
footer: 'Out Live · 超越生命',
|
||||
progress: {
|
||||
label: '我的坚持进度',
|
||||
days: '{{completed}} / {{target}} 天',
|
||||
completed: '🎉 已完成挑战!',
|
||||
remaining: '还差 {{remaining}} 天完成挑战',
|
||||
},
|
||||
info: {
|
||||
checkInDaily: '按日打卡',
|
||||
joinUs: '快来一起坚持吧',
|
||||
},
|
||||
shareCode: {
|
||||
copied: '分享码已复制',
|
||||
},
|
||||
},
|
||||
shareCode: {
|
||||
copied: '分享码已复制',
|
||||
},
|
||||
};
|
||||
|
||||
export const badges = {
|
||||
title: '勋章馆',
|
||||
subtitle: '点亮每一次坚持',
|
||||
hero: {
|
||||
highlight: '保持连续打卡即可解锁更多稀有勋章',
|
||||
earnedLabel: '已获得',
|
||||
totalLabel: '总数',
|
||||
progressLabel: '解锁进度',
|
||||
},
|
||||
categories: {
|
||||
all: '全部',
|
||||
sleep: '睡眠',
|
||||
exercise: '运动',
|
||||
diet: '饮食',
|
||||
challenge: '挑战',
|
||||
social: '社交',
|
||||
special: '特别',
|
||||
},
|
||||
rarities: {
|
||||
common: '普通',
|
||||
uncommon: '少见',
|
||||
rare: '稀有',
|
||||
epic: '史诗',
|
||||
legendary: '传说',
|
||||
},
|
||||
status: {
|
||||
earned: '已获得',
|
||||
locked: '待解锁',
|
||||
earnedAt: '{{date}} 获得',
|
||||
},
|
||||
legend: '稀有度说明',
|
||||
filterLabel: '勋章分类',
|
||||
empty: {
|
||||
title: '还没有勋章',
|
||||
description: '完成睡眠、运动、挑战等任务即可点亮你的第一枚勋章。',
|
||||
action: '去探索计划',
|
||||
},
|
||||
};
|
||||
|
||||
export const challenges = {
|
||||
title: '挑战',
|
||||
subtitle: '加入官方或自定义挑战,一起坚持',
|
||||
loading: '加载挑战中…',
|
||||
loadFailed: '暂时无法获取挑战,请稍后再试。',
|
||||
retry: '重新加载',
|
||||
empty: '暂时没有挑战,先去创建或加入一个吧。',
|
||||
customChallenges: '自定义挑战',
|
||||
officialChallengesTitle: '官方挑战',
|
||||
officialChallenges: '官方挑战即将上线。',
|
||||
join: '加入',
|
||||
joined: '已加入',
|
||||
invalidInviteCode: '请输入有效的分享码',
|
||||
joinSuccess: '加入挑战成功',
|
||||
joinFailed: '加入失败,请稍后再试',
|
||||
joinModal: {
|
||||
title: '输入分享码加入',
|
||||
description: '输入好友分享码即可加入挑战',
|
||||
confirm: '加入挑战',
|
||||
joining: '加入中…',
|
||||
cancel: '取消',
|
||||
placeholder: '请输入分享码',
|
||||
},
|
||||
statusLabels: {
|
||||
upcoming: '即将开始',
|
||||
ongoing: '进行中',
|
||||
expired: '已结束',
|
||||
},
|
||||
createCustom: {
|
||||
title: '创建挑战',
|
||||
editTitle: '编辑挑战',
|
||||
yourChallenge: '你的挑战',
|
||||
basicInfo: '基础信息',
|
||||
challengeSettings: '挑战设置',
|
||||
displayInteraction: '展示与互动',
|
||||
durationDays: '{{days}} 天',
|
||||
durationDaysChallenge: '{{days}} 天挑战',
|
||||
dayUnit: '天',
|
||||
defaultTitle: '自定义挑战',
|
||||
rankingDescription: '榜单每日更新',
|
||||
typeLabels: {
|
||||
water: '饮水',
|
||||
exercise: '运动',
|
||||
diet: '饮食',
|
||||
sleep: '睡眠',
|
||||
mood: '心情',
|
||||
weight: '体重',
|
||||
custom: '自定义',
|
||||
},
|
||||
fields: {
|
||||
title: '挑战名称',
|
||||
titlePlaceholder: '例如 21 天早睡',
|
||||
coverImage: '封面图',
|
||||
uploadCover: '上传封面',
|
||||
challengeDescription: '挑战简介',
|
||||
descriptionPlaceholder: '写下挑战目标和打卡方式',
|
||||
challengeType: '挑战类型',
|
||||
challengeTypeHelper: '选择最贴近目标的类型',
|
||||
timeRange: '时间范围',
|
||||
start: '开始日期',
|
||||
end: '结束日期',
|
||||
duration: '持续时间',
|
||||
periodLabel: '周期标签',
|
||||
periodLabelPlaceholder: '例如 21 天养成计划',
|
||||
dailyTargetAndUnit: '每日目标与单位',
|
||||
dailyTargetPlaceholder: '每日目标数值',
|
||||
unitPlaceholder: '单位(杯/分钟/步数等)',
|
||||
unitHelper: '选填,展示在每日目标后',
|
||||
minimumCheckInDays: '最少打卡天数',
|
||||
minimumCheckInDaysPlaceholder: '不能超过总天数',
|
||||
maxParticipants: '参与人数上限',
|
||||
noLimit: '不限制',
|
||||
isPublic: '允许他人通过分享码加入',
|
||||
publicDescription: '开启后他人可凭分享码加入;关闭则仅自己可见',
|
||||
},
|
||||
floatingCTA: {
|
||||
title: '生成分享码',
|
||||
subtitle: '创建挑战并分享给好友一起打卡',
|
||||
editTitle: '保存更改',
|
||||
editSubtitle: '更新挑战信息并同步给参与者',
|
||||
},
|
||||
buttons: {
|
||||
createAndGenerateCode: '创建并生成分享码',
|
||||
creating: '创建中…',
|
||||
updateAndSave: '保存修改',
|
||||
updating: '保存中…',
|
||||
},
|
||||
datePicker: {
|
||||
confirm: '确认',
|
||||
cancel: '取消',
|
||||
},
|
||||
alerts: {
|
||||
titleRequired: '请输入挑战名称',
|
||||
endTimeError: '结束时间需要晚于开始时间',
|
||||
targetValueError: '每日目标需在 1-1000 之间',
|
||||
minimumDaysError: '最少打卡天数需在 1-365 之间',
|
||||
minimumDaysExceedError: '最少打卡天数不能超过挑战总天数',
|
||||
participantsError: '人数需在 2-10000 之间或留空',
|
||||
createFailed: '创建挑战失败',
|
||||
createSuccess: '挑战已创建',
|
||||
updateSuccess: '挑战已更新',
|
||||
},
|
||||
imageUpload: {
|
||||
selectSource: '选择封面',
|
||||
selectMessage: '拍照或从相册选择封面',
|
||||
camera: '拍照',
|
||||
album: '相册',
|
||||
cancel: '取消',
|
||||
cameraPermission: '需要相机权限',
|
||||
cameraPermissionMessage: '请开启相机权限以拍摄封面',
|
||||
albumPermissionMessage: '请开启相册权限以选择图片',
|
||||
cameraFailed: '打开相机失败',
|
||||
cameraFailedMessage: '请重试或从相册选择',
|
||||
selectFailed: '选择失败',
|
||||
selectFailedMessage: '暂时无法选择图片,请重试',
|
||||
uploadFailed: '上传失败',
|
||||
uploadFailedMessage: '封面上传失败,请稍后重试',
|
||||
uploading: '上传中…',
|
||||
clear: '移除封面',
|
||||
helper: '推荐使用 16:9 的高清图片,大小 2MB 内',
|
||||
},
|
||||
shareModal: {
|
||||
title: '分享码已生成',
|
||||
subtitle: '分享给好友即可一起参与挑战',
|
||||
generatingCode: '生成中…',
|
||||
copyCode: '复制分享码',
|
||||
viewChallenge: '查看挑战',
|
||||
later: '稍后再说',
|
||||
},
|
||||
},
|
||||
};
|
||||
5
i18n/zh/common.ts
Normal file
5
i18n/zh/common.ts
Normal file
@@ -0,0 +1,5 @@
|
||||
export const dateSelector = {
|
||||
backToToday: '回到今天',
|
||||
cancel: '取消',
|
||||
confirm: '确定',
|
||||
};
|
||||
551
i18n/zh/diet.ts
Normal file
551
i18n/zh/diet.ts
Normal file
@@ -0,0 +1,551 @@
|
||||
export const nutritionRecords = {
|
||||
title: '营养记录',
|
||||
listTitle: '今日餐食',
|
||||
recordCount: '{{count}} 条记录',
|
||||
empty: {
|
||||
title: '今天还没有记录',
|
||||
action: '记一笔',
|
||||
},
|
||||
footer: {
|
||||
end: '- 已经到底啦 -',
|
||||
loadMore: '加载更多',
|
||||
},
|
||||
delete: {
|
||||
title: '确认删除',
|
||||
message: '确定要删除这条营养记录吗?此操作无法撤销。',
|
||||
cancel: '取消',
|
||||
confirm: '删除',
|
||||
},
|
||||
mealTypes: {
|
||||
breakfast: '早餐',
|
||||
lunch: '午餐',
|
||||
dinner: '晚餐',
|
||||
snack: '加餐',
|
||||
other: '其他',
|
||||
},
|
||||
nutrients: {
|
||||
protein: '蛋白质',
|
||||
fat: '脂肪',
|
||||
carbs: '碳水',
|
||||
unit: 'g',
|
||||
caloriesUnit: '千卡',
|
||||
},
|
||||
overlay: {
|
||||
title: '记录方式',
|
||||
scan: 'AI识别',
|
||||
foodLibrary: '食物库',
|
||||
voiceRecord: '一句话记录',
|
||||
},
|
||||
chart: {
|
||||
remaining: '还能吃',
|
||||
formula: '还能吃 = 代谢 + 运动 - 饮食',
|
||||
metabolism: '代谢',
|
||||
exercise: '运动',
|
||||
diet: '饮食',
|
||||
},
|
||||
};
|
||||
|
||||
export const foodCamera = {
|
||||
title: '食物拍摄',
|
||||
hint: '确保食物在取景框内',
|
||||
permission: {
|
||||
title: '需要相机权限',
|
||||
description: '为了拍摄食物并进行AI识别,需要访问您的相机',
|
||||
button: '授权访问',
|
||||
},
|
||||
guide: {
|
||||
title: '拍摄示例',
|
||||
description: '请上传或拍摄清晰的食物照片,有助于提高识别准确率',
|
||||
button: '知道了',
|
||||
good: '光线充足,主体清晰',
|
||||
bad: '模糊不清,光线昏暗',
|
||||
},
|
||||
buttons: {
|
||||
album: '相册',
|
||||
capture: '拍照',
|
||||
help: '帮助',
|
||||
},
|
||||
alerts: {
|
||||
captureFailed: {
|
||||
title: '拍照失败',
|
||||
message: '请重试',
|
||||
},
|
||||
pickFailed: {
|
||||
title: '选择失败',
|
||||
message: '请重试',
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
export const foodRecognition = {
|
||||
title: '食物识别',
|
||||
header: {
|
||||
confirm: '确认食物',
|
||||
recognizing: 'AI 识别中',
|
||||
},
|
||||
errors: {
|
||||
noImage: '未找到图片',
|
||||
generic: '食物识别失败,请重试',
|
||||
unknown: '未知错误',
|
||||
noFoodDetected: '识别失败:未检测到食物',
|
||||
processError: '识别过程出错',
|
||||
},
|
||||
logs: {
|
||||
uploading: '📤 正在上传图片到云端...',
|
||||
uploadSuccess: '✅ 图片上传完成',
|
||||
analyzing: '🤖 AI大模型分析中...',
|
||||
analysisSuccess: '✅ AI分析完成',
|
||||
confidence: '🎯 识别置信度: {{value}}%',
|
||||
itemsFound: '🍽️ 识别到 {{count}} 种食物',
|
||||
failed: '❌ 识别失败:未检测到食物',
|
||||
error: '❌ 识别过程出错',
|
||||
},
|
||||
status: {
|
||||
idle: {
|
||||
title: '准备就绪',
|
||||
subtitle: '请稍候...',
|
||||
},
|
||||
uploading: {
|
||||
title: '上传图片',
|
||||
subtitle: '正在上传图片到云端服务器...',
|
||||
},
|
||||
recognizing: {
|
||||
title: 'AI 分析中',
|
||||
subtitle: '智能模型正在分析食物成分...',
|
||||
},
|
||||
completed: {
|
||||
title: '识别成功',
|
||||
subtitle: '即将跳转到分析结果页面',
|
||||
},
|
||||
failed: {
|
||||
title: '识别失败',
|
||||
subtitle: '请检查网络或稍后重试',
|
||||
},
|
||||
processing: {
|
||||
title: '处理中...',
|
||||
subtitle: '请稍候...',
|
||||
},
|
||||
},
|
||||
mealTypes: {
|
||||
breakfast: '早餐',
|
||||
lunch: '午餐',
|
||||
dinner: '晚餐',
|
||||
snack: '加餐',
|
||||
unknown: '未知',
|
||||
},
|
||||
info: {
|
||||
title: '智能食物识别',
|
||||
description: 'AI 将分析照片,自动识别食物种类并估算营养成分,生成详细报告。',
|
||||
},
|
||||
actions: {
|
||||
start: '开始识别',
|
||||
retry: '返回重试',
|
||||
logs: '处理日志',
|
||||
logsPlaceholder: '准备开始...',
|
||||
},
|
||||
alerts: {
|
||||
recognizing: {
|
||||
title: '正在识别中',
|
||||
message: '识别过程尚未完成,确定要返回吗?',
|
||||
continue: '继续识别',
|
||||
back: '返回',
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
export const foodAnalysisResult = {
|
||||
title: '分析结果',
|
||||
error: {
|
||||
notFound: '未找到图片或识别结果',
|
||||
},
|
||||
placeholder: '营养记录',
|
||||
nutrients: {
|
||||
caloriesUnit: '千卡',
|
||||
protein: '蛋白质',
|
||||
fat: '脂肪',
|
||||
carbs: '碳水',
|
||||
unit: '克',
|
||||
},
|
||||
sections: {
|
||||
recognitionResult: '识别结果',
|
||||
foodIntake: '食物摄入',
|
||||
},
|
||||
nonFood: {
|
||||
title: '未识别到食物',
|
||||
suggestions: {
|
||||
title: '建议:',
|
||||
item1: '• 确保图片中包含食物',
|
||||
item2: '• 尝试更清晰的照片角度',
|
||||
item3: '• 避免过度模糊或光线不足',
|
||||
},
|
||||
},
|
||||
actions: {
|
||||
retake: '重新拍照',
|
||||
record: '记录',
|
||||
close: '关闭',
|
||||
},
|
||||
mealSelector: {
|
||||
title: '选择餐次',
|
||||
},
|
||||
editModal: {
|
||||
title: '编辑食物信息',
|
||||
fields: {
|
||||
name: '食物名称',
|
||||
namePlaceholder: '输入食物名称',
|
||||
amount: '重量 (克)',
|
||||
amountPlaceholder: '输入重量',
|
||||
calories: '卡路里 (千卡)',
|
||||
caloriesPlaceholder: '输入卡路里',
|
||||
},
|
||||
actions: {
|
||||
cancel: '取消',
|
||||
save: '保存',
|
||||
},
|
||||
},
|
||||
confidence: '置信度: {{value}}%',
|
||||
dateFormats: {
|
||||
today: 'YYYY年M月D日',
|
||||
full: 'YYYY年M月D日 HH:mm',
|
||||
},
|
||||
};
|
||||
|
||||
export const foodLibrary = {
|
||||
title: '食物库',
|
||||
custom: '自定义',
|
||||
search: {
|
||||
placeholder: '搜索食物...',
|
||||
loading: '搜索中...',
|
||||
empty: '未找到相关食物',
|
||||
noData: '暂无食物数据',
|
||||
},
|
||||
loading: '加载食物库中...',
|
||||
retry: '重试',
|
||||
mealTypes: {
|
||||
breakfast: '早餐',
|
||||
lunch: '午餐',
|
||||
dinner: '晚餐',
|
||||
snack: '加餐',
|
||||
},
|
||||
actions: {
|
||||
record: '记录',
|
||||
selectMeal: '选择餐次',
|
||||
},
|
||||
alerts: {
|
||||
deleteFailed: {
|
||||
title: '删除失败',
|
||||
message: '删除食物时发生错误,请稍后重试',
|
||||
},
|
||||
createFailed: {
|
||||
title: '创建失败',
|
||||
message: '创建自定义食物时发生错误,请稍后重试',
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
export const createCustomFood = {
|
||||
title: '创建自定义食物',
|
||||
save: '保存',
|
||||
preview: {
|
||||
title: '效果预览',
|
||||
defaultName: '食物名称',
|
||||
},
|
||||
basicInfo: {
|
||||
title: '基本信息',
|
||||
name: '食物名称',
|
||||
namePlaceholder: '例如,汉堡',
|
||||
defaultAmount: '默认数量',
|
||||
calories: '食物热量',
|
||||
},
|
||||
optionalInfo: {
|
||||
title: '可选信息',
|
||||
photo: '照片',
|
||||
addPhoto: '添加照片',
|
||||
protein: '蛋白质',
|
||||
fat: '脂肪',
|
||||
carbohydrate: '碳水化合物',
|
||||
},
|
||||
units: {
|
||||
kcal: '千卡',
|
||||
g: 'g',
|
||||
gram: '克',
|
||||
},
|
||||
alerts: {
|
||||
permissionDenied: {
|
||||
title: '权限不足',
|
||||
message: '需要相册权限以选择照片',
|
||||
},
|
||||
uploadFailed: {
|
||||
title: '上传失败',
|
||||
message: '照片上传失败,请重试',
|
||||
},
|
||||
error: {
|
||||
title: '发生错误',
|
||||
message: '选择照片失败,请重试',
|
||||
},
|
||||
validation: {
|
||||
title: '提示',
|
||||
nameRequired: '请输入食物名称',
|
||||
caloriesRequired: '请输入有效的热量值',
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
export const voiceRecord = {
|
||||
title: '一句话记录',
|
||||
intro: {
|
||||
description: '通过语音描述您的饮食内容,AI将智能分析营养成分和卡路里',
|
||||
},
|
||||
status: {
|
||||
idle: '轻触麦克风开始录音',
|
||||
listening: '正在聆听中,请开始说话...',
|
||||
processing: 'AI正在处理语音内容...',
|
||||
analyzing: 'AI大模型深度分析营养成分中...',
|
||||
result: '语音识别完成,请确认结果',
|
||||
},
|
||||
hints: {
|
||||
listening: '说出您想记录的食物内容',
|
||||
},
|
||||
examples: {
|
||||
title: '记录示例:',
|
||||
items: [
|
||||
'今早吃了两个煎蛋、一片全麦面包和一杯牛奶',
|
||||
'午饭吃了红烧肉约150克、米饭一小碗、青菜一份',
|
||||
'晚饭吃了蒸蛋羹、紫菜蛋花汤、小米粥一碗',
|
||||
],
|
||||
},
|
||||
analysis: {
|
||||
progress: '分析进度: {{progress}}%',
|
||||
hint: 'AI正在深度分析您的食物描述...',
|
||||
},
|
||||
result: {
|
||||
label: '识别结果:',
|
||||
},
|
||||
actions: {
|
||||
retry: '重新录音',
|
||||
confirm: '确认使用',
|
||||
},
|
||||
alerts: {
|
||||
noVoiceInput: '没有检测到语音输入,请重试',
|
||||
networkError: '网络连接异常,请检查网络后重试',
|
||||
voiceError: '语音识别出现问题,请重试',
|
||||
noValidContent: '未识别到有效内容,请重新录音',
|
||||
pleaseRecordFirst: '请先进行语音识别',
|
||||
recordingFailed: '录音失败',
|
||||
recordingPermissionError: '无法启动语音识别,请检查麦克风权限设置',
|
||||
analysisFailed: '分析失败',
|
||||
},
|
||||
};
|
||||
|
||||
export const nutritionLabelAnalysis = {
|
||||
title: '成分表分析',
|
||||
camera: {
|
||||
permissionDenied: '权限不足',
|
||||
permissionMessage: '需要相机权限才能拍摄成分表',
|
||||
},
|
||||
actions: {
|
||||
takePhoto: '拍摄',
|
||||
selectFromAlbum: '相册',
|
||||
startAnalysis: '开始分析',
|
||||
close: '关闭',
|
||||
},
|
||||
placeholder: {
|
||||
text: '拍摄或选择成分表照片',
|
||||
},
|
||||
status: {
|
||||
uploading: '正在上传图片...',
|
||||
analyzing: '正在分析成分表...',
|
||||
},
|
||||
errors: {
|
||||
analysisFailed: {
|
||||
title: '分析失败',
|
||||
message: '分析图片时发生错误,请重试',
|
||||
defaultMessage: '分析服务暂时不可用',
|
||||
},
|
||||
cannotRecognize: '无法识别成分表,请尝试拍摄更清晰的照片',
|
||||
cameraPermissionDenied: '需要相机权限才能拍摄成分表',
|
||||
},
|
||||
results: {
|
||||
title: '营养成分详细分析',
|
||||
detailedAnalysis: '营养成分详细分析',
|
||||
},
|
||||
imageViewer: {
|
||||
close: '关闭',
|
||||
dateFormat: 'YYYY年M月D日 HH:mm',
|
||||
},
|
||||
};
|
||||
|
||||
export const nutritionAnalysisHistory = {
|
||||
title: '历史记录',
|
||||
dateFormat: 'YYYY年M月D日 HH:mm',
|
||||
recognized: '识别 {{count}} 项营养素',
|
||||
loadingMore: '加载更多...',
|
||||
loading: '加载历史记录...',
|
||||
filter: {
|
||||
all: '全部',
|
||||
},
|
||||
filters: {
|
||||
all: '全部',
|
||||
success: '成功',
|
||||
failed: '失败',
|
||||
},
|
||||
status: {
|
||||
success: '成功',
|
||||
failed: '失败',
|
||||
processing: '处理中',
|
||||
unknown: '未知',
|
||||
},
|
||||
nutrients: {
|
||||
energy: '热量',
|
||||
protein: '蛋白质',
|
||||
carbs: '碳水',
|
||||
fat: '脂肪',
|
||||
},
|
||||
delete: {
|
||||
confirmTitle: '确认删除',
|
||||
confirmMessage: '确定要删除这条记录吗?',
|
||||
cancel: '取消',
|
||||
delete: '删除',
|
||||
successTitle: '删除成功',
|
||||
successMessage: '记录已成功删除',
|
||||
},
|
||||
actions: {
|
||||
expand: '展开详情',
|
||||
collapse: '收起详情',
|
||||
expandDetails: '展开详情',
|
||||
collapseDetails: '收起详情',
|
||||
confirmDelete: '确认删除',
|
||||
delete: '删除',
|
||||
cancel: '取消',
|
||||
retry: '重试',
|
||||
},
|
||||
empty: {
|
||||
title: '暂无历史记录',
|
||||
subtitle: '开始识别营养成分表吧',
|
||||
},
|
||||
errors: {
|
||||
error: '错误',
|
||||
loadFailed: '加载失败',
|
||||
unknownError: '未知错误',
|
||||
fetchFailed: '获取历史记录失败',
|
||||
fetchFailedRetry: '获取历史记录失败,请重试',
|
||||
deleteFailed: '删除失败,请稍后重试',
|
||||
},
|
||||
loadingState: {
|
||||
records: '加载历史记录...',
|
||||
more: '加载更多...',
|
||||
},
|
||||
details: {
|
||||
title: '详细营养成分',
|
||||
nutritionDetails: '详细营养成分',
|
||||
aiModel: 'AI 模型',
|
||||
provider: '服务提供商',
|
||||
serviceProvider: '服务提供商',
|
||||
},
|
||||
records: {
|
||||
nutritionCount: '识别 {{count}} 项营养素',
|
||||
},
|
||||
imageViewer: {
|
||||
close: '关闭',
|
||||
},
|
||||
};
|
||||
|
||||
export const waterDetail = {
|
||||
title: '饮水详情',
|
||||
waterRecord: '饮水记录',
|
||||
today: '今日',
|
||||
total: '总计:',
|
||||
goal: '目标:',
|
||||
noRecords: '暂无饮水记录',
|
||||
noRecordsSubtitle: '点击"添加记录"开始记录饮水量',
|
||||
deleteConfirm: {
|
||||
title: '确认删除',
|
||||
message: '确定要删除这条饮水记录吗?此操作无法撤销。',
|
||||
cancel: '取消',
|
||||
confirm: '删除',
|
||||
},
|
||||
deleteButton: '删除',
|
||||
water: '水',
|
||||
loadingUserPreferences: '加载用户偏好设置失败',
|
||||
};
|
||||
|
||||
export const waterSettings = {
|
||||
title: '饮水设置',
|
||||
sections: {
|
||||
dailyGoal: '每日饮水目标',
|
||||
quickAdd: '快速添加默认值',
|
||||
reminder: '喝水提醒',
|
||||
},
|
||||
descriptions: {
|
||||
quickAdd: '设置点击"+"按钮时添加的默认饮水量',
|
||||
reminder: '设置定时提醒您补充水分',
|
||||
},
|
||||
labels: {
|
||||
ml: 'ml',
|
||||
disabled: '已关闭',
|
||||
},
|
||||
alerts: {
|
||||
goalSuccess: {
|
||||
title: '设置成功',
|
||||
message: '每日饮水目标已设置为 {{amount}}ml',
|
||||
},
|
||||
quickAddSuccess: {
|
||||
title: '设置成功',
|
||||
message: '快速添加默认值已设置为 {{amount}}ml',
|
||||
},
|
||||
quickAddFailed: {
|
||||
title: '设置失败',
|
||||
message: '无法保存快速添加默认值,请重试',
|
||||
},
|
||||
},
|
||||
buttons: {
|
||||
cancel: '取消',
|
||||
confirm: '确定',
|
||||
},
|
||||
status: {
|
||||
reminderEnabled: '{{startTime}}-{{endTime}}, 每{{interval}}分钟',
|
||||
},
|
||||
};
|
||||
|
||||
export const waterReminderSettings = {
|
||||
title: '喝水提醒',
|
||||
sections: {
|
||||
notifications: '推送提醒',
|
||||
timeRange: '提醒时间段',
|
||||
interval: '提醒间隔',
|
||||
},
|
||||
descriptions: {
|
||||
notifications: '开启后将在指定时间段内定期推送喝水提醒',
|
||||
timeRange: '只在指定时间段内发送提醒,避免打扰您的休息',
|
||||
interval: '选择提醒的频率,建议30-120分钟为宜',
|
||||
},
|
||||
labels: {
|
||||
startTime: '开始时间',
|
||||
endTime: '结束时间',
|
||||
interval: '提醒间隔',
|
||||
saveSettings: '保存设置',
|
||||
hours: '小时',
|
||||
timeRangePreview: '时间段预览',
|
||||
minutes: '分钟',
|
||||
},
|
||||
alerts: {
|
||||
timeValidation: {
|
||||
title: '时间设置提示',
|
||||
startTimeInvalid: '开始时间不能晚于或等于结束时间,请重新选择',
|
||||
endTimeInvalid: '结束时间不能早于或等于开始时间,请重新选择',
|
||||
},
|
||||
success: {
|
||||
enabled: '设置成功',
|
||||
enabledMessage: '喝水提醒已开启\n\n时间段:{{timeRange}}\n提醒间隔:{{interval}}\n\n我们将在指定时间段内定期提醒您喝水',
|
||||
disabled: '设置成功',
|
||||
disabledMessage: '喝水提醒已关闭',
|
||||
},
|
||||
error: {
|
||||
title: '保存失败',
|
||||
message: '无法保存喝水提醒设置,请重试',
|
||||
},
|
||||
},
|
||||
buttons: {
|
||||
confirm: '确定',
|
||||
cancel: '取消',
|
||||
},
|
||||
};
|
||||
507
i18n/zh/health.ts
Normal file
507
i18n/zh/health.ts
Normal file
@@ -0,0 +1,507 @@
|
||||
export const healthPermissions = {
|
||||
title: '健康数据授权说明',
|
||||
subtitle: '我们通过 Apple Health 的 HealthKit/CareKit 接口同步必要的数据,让训练、恢复和提醒更贴合你的身体状态。',
|
||||
cards: {
|
||||
usage: {
|
||||
title: '我们会读取 / 写入的数据',
|
||||
items: [
|
||||
'运动与活动:步数、活动能量、锻炼记录用于生成训练表现和热力图。',
|
||||
'身体指标:身高、体重、体脂率帮助制定个性化训练与营养建议。',
|
||||
'睡眠与恢复:睡眠时长与阶段用于智能提醒与恢复建议。',
|
||||
'水分摄入:读取与写入饮水记录,保持与「健康」App 一致。',
|
||||
],
|
||||
},
|
||||
purpose: {
|
||||
title: '使用这些数据的目的',
|
||||
items: [
|
||||
'提供个性化训练计划、挑战与恢复建议。',
|
||||
'在统计页展示长期趋势,帮助你理解身体变化。',
|
||||
'减少重复输入,在提醒与挑战中自动同步进度。',
|
||||
],
|
||||
},
|
||||
control: {
|
||||
title: '你的控制权',
|
||||
items: [
|
||||
'授权流程完全由 Apple Health 控制,你可随时在 iOS 设置 > 健康 > 数据访问与设备 中更改权限。',
|
||||
'未授权的数据不会被访问,撤销授权后我们会清理相关缓存。',
|
||||
'核心功能依旧可用,并提供手动输入等替代方案。',
|
||||
],
|
||||
},
|
||||
privacy: {
|
||||
title: '数据存储与隐私',
|
||||
items: [
|
||||
'健康数据仅存储在你的设备上,我们不会上传服务器或共享给第三方。',
|
||||
'只有在需要同步的功能中才会保存聚合后的匿名统计值。',
|
||||
'我们遵循 Apple 的审核要求,任何变更都会提前告知。',
|
||||
],
|
||||
},
|
||||
},
|
||||
callout: {
|
||||
title: '未授权会怎样?',
|
||||
items: [
|
||||
'相关模块会提示你授权,并提供手动记录入口。',
|
||||
'拒绝授权不会影响其它与健康数据无关的功能。',
|
||||
],
|
||||
},
|
||||
contact: {
|
||||
title: '需要更多帮助?',
|
||||
description: '如果你对 HealthKit / CareKit 的使用方式有疑问,可通过以下邮箱或在个人中心提交反馈:',
|
||||
email: 'richardwei1995@gmail.com',
|
||||
},
|
||||
};
|
||||
|
||||
export const statistics = {
|
||||
title: 'Out Live',
|
||||
sections: {
|
||||
bodyMetrics: '身体指标',
|
||||
},
|
||||
components: {
|
||||
diet: {
|
||||
title: '饮食分析',
|
||||
loading: '加载中...',
|
||||
updated: '更新: {{time}}',
|
||||
remaining: '还能吃',
|
||||
calories: '热量',
|
||||
protein: '蛋白质',
|
||||
carb: '碳水',
|
||||
fat: '脂肪',
|
||||
fiber: '纤维',
|
||||
sodium: '钠',
|
||||
basal: '基代',
|
||||
exercise: '运动',
|
||||
diet: '饮食',
|
||||
kcal: '千卡',
|
||||
aiRecognition: 'AI识别',
|
||||
foodLibrary: '食物库',
|
||||
voiceRecord: '一句话记录',
|
||||
nutritionLabel: '成分表分析',
|
||||
},
|
||||
fitness: {
|
||||
kcal: '千卡',
|
||||
minutes: '分钟',
|
||||
hours: '小时',
|
||||
},
|
||||
steps: {
|
||||
title: '步数',
|
||||
},
|
||||
mood: {
|
||||
title: '心情',
|
||||
empty: '点击记录心情',
|
||||
},
|
||||
stress: {
|
||||
title: '压力',
|
||||
unit: 'ms',
|
||||
},
|
||||
water: {
|
||||
title: '喝水',
|
||||
unit: 'ml',
|
||||
addButton: '+ {{amount}}ml',
|
||||
},
|
||||
metabolism: {
|
||||
title: '基础代谢',
|
||||
loading: '加载中...',
|
||||
unit: '千卡/日',
|
||||
status: {
|
||||
high: '高代谢',
|
||||
normal: '正常',
|
||||
low: '偏低',
|
||||
veryLow: '较低',
|
||||
unknown: '未知',
|
||||
},
|
||||
},
|
||||
sleep: {
|
||||
title: '睡眠',
|
||||
loading: '加载中...',
|
||||
},
|
||||
oxygen: {
|
||||
title: '血氧饱和度',
|
||||
},
|
||||
circumference: {
|
||||
title: '围度 (cm)',
|
||||
setTitle: '设置{{label}}',
|
||||
confirm: '确认',
|
||||
measurements: {
|
||||
chest: '胸围',
|
||||
waist: '腰围',
|
||||
hip: '上臀围',
|
||||
arm: '臂围',
|
||||
thigh: '大腿围',
|
||||
calf: '小腿围',
|
||||
},
|
||||
},
|
||||
workout: {
|
||||
title: '近期锻炼',
|
||||
minutes: '分钟',
|
||||
kcal: '千卡',
|
||||
noData: '尚无锻炼数据',
|
||||
syncing: '等待同步',
|
||||
sourceWaiting: '来源:等待同步',
|
||||
sourceUnknown: '来源:未知',
|
||||
sourceFormat: '来源:{{source}}',
|
||||
sourceFormatMultiple: '来源:{{source}} 等',
|
||||
lastWorkout: '最近锻炼',
|
||||
updated: '更新',
|
||||
},
|
||||
weight: {
|
||||
title: '体重记录',
|
||||
addButton: '记录体重',
|
||||
bmi: 'BMI',
|
||||
weight: '体重',
|
||||
days: '天',
|
||||
range: '范围',
|
||||
unit: 'kg',
|
||||
bmiModal: {
|
||||
title: 'BMI 指数说明',
|
||||
description: 'BMI(身体质量指数)是评估体重与身高关系的国际通用健康指标',
|
||||
formula: '计算公式:体重(kg) ÷ 身高²(m)',
|
||||
classificationTitle: 'BMI 分类标准',
|
||||
healthTipsTitle: '健康建议',
|
||||
tips: {
|
||||
nutrition: '保持均衡饮食,控制热量摄入',
|
||||
exercise: '每周至少150分钟中等强度运动',
|
||||
sleep: '保证7-9小时充足睡眠',
|
||||
monitoring: '定期监测体重变化,及时调整',
|
||||
},
|
||||
disclaimer: 'BMI 仅供参考,不能反映肌肉量、骨密度等指标。如有健康疑问,请咨询专业医生。',
|
||||
continueButton: '继续',
|
||||
},
|
||||
},
|
||||
fitnessRings: {
|
||||
title: '健身圆环',
|
||||
activeCalories: '活动卡路里',
|
||||
exerciseMinutes: '锻炼分钟',
|
||||
standHours: '站立小时',
|
||||
goal: '/{{goal}}',
|
||||
ringLabels: {
|
||||
active: '活动',
|
||||
exercise: '锻炼',
|
||||
stand: '站立',
|
||||
},
|
||||
},
|
||||
},
|
||||
tabs: {
|
||||
health: '健康',
|
||||
medications: '用药',
|
||||
fasting: '断食',
|
||||
challenges: '挑战',
|
||||
personal: '个人',
|
||||
},
|
||||
activityHeatMap: {
|
||||
subtitle: '最近6个月活跃 {{days}} 天',
|
||||
activeRate: '{{rate}}%',
|
||||
popover: {
|
||||
title: '能量值的积攒后续可以用来兑换 AI 相关权益',
|
||||
subtitle: '获取说明',
|
||||
rules: {
|
||||
login: '1. 每日登录获得能量值+1',
|
||||
mood: '2. 每日记录心情获得能量值+1',
|
||||
diet: '3. 记饮食获得能量值+1',
|
||||
goal: '4. 完成一次目标获得能量值+1',
|
||||
},
|
||||
},
|
||||
months: {
|
||||
1: '1月',
|
||||
2: '2月',
|
||||
3: '3月',
|
||||
4: '4月',
|
||||
5: '5月',
|
||||
6: '6月',
|
||||
7: '7月',
|
||||
8: '8月',
|
||||
9: '9月',
|
||||
10: '10月',
|
||||
11: '11月',
|
||||
12: '12月',
|
||||
},
|
||||
legend: {
|
||||
less: '少',
|
||||
more: '多',
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
export const sleepDetail = {
|
||||
title: '睡眠详情',
|
||||
loading: '加载睡眠数据中...',
|
||||
today: '今天',
|
||||
sleepScore: '睡眠评分',
|
||||
noData: '暂无睡眠数据',
|
||||
noDataRecommendation: '请确保在真实iOS设备上运行并授权访问健康数据,或等待有睡眠数据后再查看。',
|
||||
sleepDuration: '睡眠时长',
|
||||
sleepQuality: '睡眠质量',
|
||||
sleepStages: '睡眠阶段',
|
||||
learnMore: '了解更多',
|
||||
awake: '清醒',
|
||||
rem: '快速眼动',
|
||||
core: '核心睡眠',
|
||||
deep: '深度睡眠',
|
||||
unknown: '未知',
|
||||
rawData: '原始数据',
|
||||
rawDataDescription: '包含 {{count}} 条 HealthKit 睡眠样本记录',
|
||||
infoModalTitles: {
|
||||
sleepTime: '睡眠时间',
|
||||
sleepQuality: '睡眠质量',
|
||||
},
|
||||
sleepGrades: {
|
||||
low: '低',
|
||||
normal: '正常',
|
||||
good: '良好',
|
||||
excellent: '优秀',
|
||||
poor: '较差',
|
||||
fair: '一般',
|
||||
},
|
||||
sleepTimeDescription: '睡眠最重要 - 它占据了你睡眠得分的一半以上。长时间的睡眠可以减少睡眠债务,但是规律的睡眠时间对于高质量的休息至关重要。',
|
||||
sleepQualityDescription: '睡眠质量综合评估您的睡眠效率、深度睡眠时长、REM睡眠比例等多个指标。高质量的睡眠不仅仅取决于时长,还包括睡眠的连续性和各睡眠阶段的平衡。',
|
||||
sleepStagesInfo: {
|
||||
title: '了解你的睡眠阶段',
|
||||
description: '人们对睡眠阶段和睡眠质量有许多误解。有些人可能需要更多深度睡眠,其他人则不然。科学家和医生仍在探索不同睡眠阶段的作用及其对身体的影响。通过跟踪睡眠阶段并留意每天清晨的感受,你或许能深入了解自己的睡眠。',
|
||||
awake: {
|
||||
title: '清醒时间',
|
||||
description: '一次睡眠期间,你可能会醒来几次。偶尔醒来很正常。可能你会立刻再次入睡,并不记得曾在夜间醒来。',
|
||||
},
|
||||
rem: {
|
||||
title: '快速动眼睡眠',
|
||||
description: '这一睡眠阶段可能对学习和记忆产生一定影响。在此阶段,你的肌肉最为放松,眼球也会快速左右移动。这也是你大多数梦境出现的阶段。',
|
||||
},
|
||||
core: {
|
||||
title: '核心睡眠',
|
||||
description: '这一阶段有时也称为浅睡期,与其他阶段一样重要。此阶段通常占据你每晚大部分的睡眠时间。对于认知至关重要的脑电波会在这一阶段产生。',
|
||||
},
|
||||
deep: {
|
||||
title: '深度睡眠',
|
||||
description: '因为脑电波的特征,这一阶段也称为慢波睡眠。在此阶段,身体组织得到修复,并释放重要荷尔蒙。它通常出现在睡眠的前半段,且持续时间较长。深度睡眠期间,身体非常放松,因此相较于其他阶段,你可能更难在此阶段醒来。',
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
export const sleepQuality = {
|
||||
excellent: {
|
||||
description: '你身心愉悦并且精力充沛',
|
||||
recommendation: '恭喜你获得优质的睡眠!如果你感到精力充沛,可以考虑中等强度的运动,以维持健康的生活方式,并进一步减轻压力,以获得最佳睡眠。'
|
||||
},
|
||||
good: {
|
||||
description: '睡眠质量良好,精神状态不错',
|
||||
recommendation: '你的睡眠质量还不错,但还有改善空间。建议保持规律的睡眠时间,睡前避免使用电子设备,营造安静舒适的睡眠环境。'
|
||||
},
|
||||
fair: {
|
||||
description: '睡眠质量一般,可能影响日间表现',
|
||||
recommendation: '你的睡眠需要改善。建议制定固定的睡前例行程序,限制咖啡因摄入,确保卧室温度适宜,考虑进行轻度运动来改善睡眠质量。'
|
||||
},
|
||||
poor: {
|
||||
description: '睡眠质量较差,建议重视睡眠健康',
|
||||
recommendation: '你的睡眠质量需要严重关注。建议咨询医生或睡眠专家,检查是否有睡眠障碍,同时改善睡眠环境和习惯,避免睡前刺激性活动。'
|
||||
}
|
||||
};
|
||||
|
||||
export const stepsDetail = {
|
||||
title: '步数详情',
|
||||
loading: '加载中...',
|
||||
stats: {
|
||||
totalSteps: '总步数',
|
||||
averagePerHour: '平均每小时',
|
||||
mostActiveTime: '最活跃时段',
|
||||
},
|
||||
chart: {
|
||||
title: '每小时步数分布',
|
||||
averageLabel: '平均 {{steps}}步',
|
||||
},
|
||||
activityLevel: {
|
||||
currentActivity: '你今天的活动量处于',
|
||||
levels: {
|
||||
inactive: '不怎么动',
|
||||
light: '轻度活跃',
|
||||
moderate: '中等活跃',
|
||||
very_active: '非常活跃',
|
||||
},
|
||||
progress: {
|
||||
current: '当前',
|
||||
nextLevel: '下一级: {{level}}',
|
||||
highestLevel: '已达最高级',
|
||||
},
|
||||
},
|
||||
timeLabels: {
|
||||
midnight: '0:00',
|
||||
noon: '12:00',
|
||||
nextDay: '24:00',
|
||||
},
|
||||
};
|
||||
|
||||
export const fitnessRingsDetail = {
|
||||
title: '健身圆环详情',
|
||||
loading: '加载中...',
|
||||
weekDays: {
|
||||
monday: '周一',
|
||||
tuesday: '周二',
|
||||
wednesday: '周三',
|
||||
thursday: '周四',
|
||||
friday: '周五',
|
||||
saturday: '周六',
|
||||
sunday: '周日',
|
||||
},
|
||||
cards: {
|
||||
activeCalories: {
|
||||
title: '活动热量',
|
||||
unit: '千卡',
|
||||
},
|
||||
exerciseMinutes: {
|
||||
title: '锻炼分钟数',
|
||||
unit: '分钟',
|
||||
info: {
|
||||
title: '锻炼分钟数:',
|
||||
description: '进行强度不低于"快走"的运动锻炼,就会积累对应时长的锻炼分钟数。',
|
||||
recommendation: '世卫组织推荐的成年人每天至少保持30分钟以上的中高强度运动。',
|
||||
knowButton: '知道了',
|
||||
},
|
||||
},
|
||||
standHours: {
|
||||
title: '活动小时数',
|
||||
unit: '小时',
|
||||
},
|
||||
},
|
||||
stats: {
|
||||
weeklyClosedRings: '周闭环天数',
|
||||
daysUnit: '天',
|
||||
},
|
||||
datePicker: {
|
||||
cancel: '取消',
|
||||
confirm: '确定',
|
||||
},
|
||||
errors: {
|
||||
loadExerciseInfoPreference: '加载锻炼分钟说明偏好失败',
|
||||
saveExerciseInfoPreference: '保存锻炼分钟说明偏好失败',
|
||||
},
|
||||
};
|
||||
|
||||
export const circumferenceDetail = {
|
||||
title: '围度统计',
|
||||
loading: '加载中...',
|
||||
error: '加载失败',
|
||||
retry: '重试',
|
||||
noData: '暂无数据',
|
||||
noDataSelected: '请选择要显示的围度数据',
|
||||
tabs: {
|
||||
week: '按周',
|
||||
month: '按月',
|
||||
year: '按年',
|
||||
},
|
||||
measurements: {
|
||||
chest: '胸围',
|
||||
waist: '腰围',
|
||||
upperHip: '上臀围',
|
||||
arm: '臂围',
|
||||
thigh: '大腿围',
|
||||
calf: '小腿围',
|
||||
},
|
||||
modal: {
|
||||
title: '设置{{label}}',
|
||||
defaultTitle: '设置围度',
|
||||
confirm: '确认',
|
||||
},
|
||||
chart: {
|
||||
weekLabel: '第{{week}}周',
|
||||
monthLabel: '{{month}}月',
|
||||
empty: '暂无数据',
|
||||
noSelection: '请选择要显示的围度数据',
|
||||
},
|
||||
};
|
||||
|
||||
export const basalMetabolismDetail = {
|
||||
title: '基础代谢',
|
||||
currentData: {
|
||||
title: '{{date}} 基础代谢',
|
||||
unit: '千卡',
|
||||
normalRange: '正常范围: {{min}}-{{max}} 千卡',
|
||||
noData: '--',
|
||||
},
|
||||
stats: {
|
||||
title: '基础代谢统计',
|
||||
tabs: {
|
||||
week: '按周',
|
||||
month: '按月',
|
||||
},
|
||||
},
|
||||
chart: {
|
||||
loading: '加载中...',
|
||||
loadingText: '加载中...',
|
||||
error: {
|
||||
text: '加载失败: {{error}}',
|
||||
retry: '重试',
|
||||
fetchFailed: '获取数据失败',
|
||||
},
|
||||
empty: '暂无数据',
|
||||
yAxisSuffix: '千卡',
|
||||
weekLabel: '第{{week}}周',
|
||||
},
|
||||
modal: {
|
||||
title: '基础代谢',
|
||||
closeButton: '×',
|
||||
description: '基础代谢,也称基础代谢率(BMR),是指人体在完全静息状态下维持基本生命功能(心跳、呼吸、体温调节等)所需的最低能量消耗,通常以卡路里为单位。',
|
||||
sections: {
|
||||
importance: {
|
||||
title: '为什么重要?',
|
||||
content: '基础代谢占总能量消耗的60-75%,是能量平衡的基础。了解您的基础代谢有助于制定科学的营养计划、优化体重管理策略,以及评估代谢健康状态。',
|
||||
},
|
||||
normalRange: {
|
||||
title: '正常范围',
|
||||
formulas: {
|
||||
male: '男性:BMR = 10 × 体重(kg) + 6.25 × 身高(cm) - 5 × 年龄 + 5',
|
||||
female: '女性:BMR = 10 × 体重(kg) + 6.25 × 身高(cm) - 5 × 年龄 - 161',
|
||||
},
|
||||
userRange: '您的正常区间:{{min}}-{{max}}千卡/天',
|
||||
rangeNote: '(在公式基础计算值上下浮动15%都属于正常范围)',
|
||||
userInfo: '基于您的信息:{{gender}},{{age}}岁,{{height}}cm,{{weight}}kg',
|
||||
incompleteInfo: '请完善基本信息以计算您的代谢率',
|
||||
},
|
||||
strategies: {
|
||||
title: '提高代谢率的策略',
|
||||
subtitle: '科学研究支持以下方法:',
|
||||
items: [
|
||||
'1.增加肌肉量 (每周2-3次力量训练)',
|
||||
'2.高强度间歇训练 (HIIT)',
|
||||
'3.充分蛋白质摄入 (体重每公斤1.6-2.2g)',
|
||||
'4.保证充足睡眠 (7-9小时/晚)',
|
||||
'5.避免过度热量限制 (不低于BMR的80%)',
|
||||
],
|
||||
},
|
||||
},
|
||||
},
|
||||
gender: {
|
||||
male: '男性',
|
||||
female: '女性',
|
||||
},
|
||||
comments: {
|
||||
reloadData: '重新加载数据',
|
||||
},
|
||||
};
|
||||
|
||||
export const workoutHistory = {
|
||||
title: '锻炼总结',
|
||||
loading: '正在加载锻炼记录...',
|
||||
error: {
|
||||
permissionDenied: '尚未授予健康数据权限',
|
||||
loadFailed: '加载锻炼记录失败,请稍后再试',
|
||||
detailLoadFailed: '加载锻炼详情失败,请稍后再试',
|
||||
},
|
||||
retry: '重试',
|
||||
monthlyStats: {
|
||||
title: '锻炼时间',
|
||||
periodText: '统计周期:1日 - {{day}}日(本月)',
|
||||
overviewWithStats: '截至{{date}},你已完成{{count}}次锻炼,累计{{duration}}。',
|
||||
overviewEmpty: '本月还没有锻炼记录,动起来收集第一条吧!',
|
||||
emptyData: '本月还没有锻炼数据',
|
||||
},
|
||||
intensity: {
|
||||
low: '低强度',
|
||||
medium: '中强度',
|
||||
high: '高强度',
|
||||
},
|
||||
historyCard: {
|
||||
calories: '{{calories}}千卡 · {{minutes}}分钟',
|
||||
activityTime: '{{activity}},{{time}}',
|
||||
},
|
||||
empty: {
|
||||
title: '暂无锻炼记录',
|
||||
subtitle: '完成一次锻炼后即可在此查看详细历史',
|
||||
},
|
||||
monthOccurrence: '这是你{{month}}的第 {{index}} 次{{activity}}。',
|
||||
};
|
||||
17
i18n/zh/index.ts
Normal file
17
i18n/zh/index.ts
Normal file
@@ -0,0 +1,17 @@
|
||||
import * as Challenge from './challenge';
|
||||
import * as Common from './common';
|
||||
import * as Diet from './diet';
|
||||
import * as Health from './health';
|
||||
import * as Medication from './medication';
|
||||
import * as Personal from './personal';
|
||||
import * as Weight from './weight';
|
||||
|
||||
export default {
|
||||
...Personal,
|
||||
...Health,
|
||||
...Diet,
|
||||
...Medication,
|
||||
...Weight,
|
||||
...Challenge,
|
||||
...Common,
|
||||
};
|
||||
472
i18n/zh/medication.ts
Normal file
472
i18n/zh/medication.ts
Normal file
@@ -0,0 +1,472 @@
|
||||
export const medications = {
|
||||
greeting: '你好,{{name}}',
|
||||
welcome: '欢迎来到用药助手!',
|
||||
todayMedications: '今日用药',
|
||||
filters: {
|
||||
all: '全部',
|
||||
taken: '已服用',
|
||||
missed: '未服用',
|
||||
},
|
||||
emptyState: {
|
||||
title: '今日暂无用药安排',
|
||||
subtitle: '还未添加任何用药计划,快来补充吧。',
|
||||
},
|
||||
stack: {
|
||||
completed: '已完成 ({{count}})',
|
||||
},
|
||||
dateFormats: {
|
||||
today: '今天,{{date}}',
|
||||
other: '{{date}}',
|
||||
},
|
||||
// MedicationCard 组件翻译
|
||||
card: {
|
||||
status: {
|
||||
missed: '已错过',
|
||||
timeToTake: '到服药时间',
|
||||
remaining: '剩余 {{time}}',
|
||||
},
|
||||
action: {
|
||||
takeNow: '立即服用',
|
||||
taken: '已服用',
|
||||
skipped: '已跳过',
|
||||
skip: '跳过',
|
||||
submitting: '提交中...',
|
||||
},
|
||||
skipAlert: {
|
||||
title: '确认跳过',
|
||||
message: '确定要跳过本次用药吗?\n\n跳过后将不会记录为已服用。',
|
||||
cancel: '取消',
|
||||
confirm: '确认跳过',
|
||||
},
|
||||
earlyTakeAlert: {
|
||||
title: '尚未到服药时间',
|
||||
message: '该用药计划在 {{time}},现在还早于1小时以上。\n\n是否确认已服用此药物?',
|
||||
cancel: '取消',
|
||||
confirm: '确认已服用',
|
||||
},
|
||||
takeError: {
|
||||
title: '操作失败',
|
||||
message: '记录服药时发生错误,请稍后重试',
|
||||
confirm: '确定',
|
||||
},
|
||||
skipError: {
|
||||
title: '操作失败',
|
||||
message: '跳过操作失败,请稍后重试',
|
||||
confirm: '确定',
|
||||
},
|
||||
},
|
||||
// 添加药物页面翻译
|
||||
add: {
|
||||
title: '添加药物',
|
||||
steps: {
|
||||
name: '药品名称',
|
||||
dosage: '剂型与剂量',
|
||||
frequency: '服药频率',
|
||||
time: '服药时间',
|
||||
note: '备注',
|
||||
},
|
||||
descriptions: {
|
||||
name: '为药物命名并上传包装照片,方便识别',
|
||||
dosage: '选择药片类型并填写每次的用药剂量',
|
||||
frequency: '设置用药频率以及每日次数',
|
||||
time: '添加并管理每天的提醒时间',
|
||||
note: '填写备注或医生叮嘱(可选)',
|
||||
},
|
||||
name: {
|
||||
placeholder: '输入或搜索药品名称',
|
||||
},
|
||||
photo: {
|
||||
title: '上传药品图片',
|
||||
subtitle: '拍照或从相册选择,辅助识别药品包装',
|
||||
selectTitle: '选择图片',
|
||||
selectMessage: '请选择图片来源',
|
||||
camera: '拍照',
|
||||
album: '从相册选择',
|
||||
cancel: '取消',
|
||||
retake: '重新选择',
|
||||
uploading: '上传中…',
|
||||
uploadingText: '正在上传',
|
||||
remove: '删除',
|
||||
cameraPermission: '需要相机权限以拍摄药品照片',
|
||||
albumPermission: '需要相册权限以选择药品照片',
|
||||
uploadFailed: '上传失败',
|
||||
uploadFailedMessage: '图片上传失败,请稍后重试',
|
||||
cameraFailed: '拍照失败',
|
||||
cameraFailedMessage: '无法打开相机,请稍后再试',
|
||||
selectFailed: '选择失败',
|
||||
selectFailedMessage: '无法打开相册,请稍后再试',
|
||||
},
|
||||
dosage: {
|
||||
label: '每次剂量',
|
||||
placeholder: '0.5',
|
||||
type: '类型',
|
||||
unitSelector: '选择剂量单位',
|
||||
},
|
||||
frequency: {
|
||||
label: '每日次数',
|
||||
value: '{{count}} 次/日',
|
||||
period: '用药周期',
|
||||
start: '开始',
|
||||
end: '结束',
|
||||
longTerm: '长期',
|
||||
startDateInvalid: '日期无效',
|
||||
startDateInvalidMessage: '开始日期不能早于今天',
|
||||
endDateInvalid: '日期无效',
|
||||
endDateInvalidMessage: '结束日期不能早于开始日期',
|
||||
},
|
||||
time: {
|
||||
label: '每日提醒时间',
|
||||
addTime: '添加时间',
|
||||
editTime: '修改提醒时间',
|
||||
addTimeButton: '添加时间',
|
||||
},
|
||||
note: {
|
||||
label: '备注',
|
||||
placeholder: '记录注意事项、医生叮嘱或自定义提醒',
|
||||
voiceNotSupported: '当前设备暂不支持语音转文字,可直接输入备注',
|
||||
voiceError: '语音识别不可用',
|
||||
voiceErrorMessage: '无法使用语音输入,请检查权限设置后重试',
|
||||
voiceStartError: '无法启动语音输入',
|
||||
voiceStartErrorMessage: '请检查麦克风与语音识别权限后重试',
|
||||
},
|
||||
actions: {
|
||||
previous: '上一步',
|
||||
next: '下一步',
|
||||
complete: '完成',
|
||||
},
|
||||
success: {
|
||||
title: '添加成功',
|
||||
message: '已成功添加药物"{{name}}"',
|
||||
confirm: '确定',
|
||||
},
|
||||
error: {
|
||||
title: '添加失败',
|
||||
message: '创建药物时发生错误,请稍后重试',
|
||||
confirm: '确定',
|
||||
},
|
||||
datePickers: {
|
||||
startDate: '选择开始日期',
|
||||
endDate: '选择结束日期',
|
||||
time: '选择时间',
|
||||
cancel: '取消',
|
||||
confirm: '确定',
|
||||
},
|
||||
pickers: {
|
||||
timesPerDay: '选择每日次数',
|
||||
dosageUnit: '选择剂量单位',
|
||||
cancel: '取消',
|
||||
confirm: '确定',
|
||||
},
|
||||
},
|
||||
// 药物管理页面翻译
|
||||
manage: {
|
||||
title: '药品管理',
|
||||
subtitle: '管理所有药品的状态与提醒',
|
||||
filters: {
|
||||
all: '全部',
|
||||
active: '进行中',
|
||||
inactive: '已停用',
|
||||
},
|
||||
loading: '正在载入药品信息...',
|
||||
empty: {
|
||||
title: '暂无药品',
|
||||
subtitle: '还没有相关药品记录,点击右上角添加',
|
||||
},
|
||||
deactivate: {
|
||||
title: '停用 {{name}}?',
|
||||
description: '停用后,当天已生成的用药计划会一并删除,且无法恢复。',
|
||||
confirm: '确认停用',
|
||||
cancel: '取消',
|
||||
error: {
|
||||
title: '操作失败',
|
||||
message: '停用药物时发生问题,请稍后重试。',
|
||||
},
|
||||
},
|
||||
toggleError: {
|
||||
title: '操作失败',
|
||||
message: '切换药物状态时发生问题,请稍后重试。',
|
||||
},
|
||||
formLabels: {
|
||||
capsule: '胶囊',
|
||||
pill: '药片',
|
||||
tablet: '药片',
|
||||
injection: '注射',
|
||||
spray: '喷雾',
|
||||
drop: '滴剂',
|
||||
syrup: '糖浆',
|
||||
other: '其他',
|
||||
ointment: '软膏',
|
||||
},
|
||||
frequency: {
|
||||
daily: '每日',
|
||||
weekly: '每周',
|
||||
custom: '自定义',
|
||||
},
|
||||
cardMeta: '开始于 {{date}} | 提醒:{{reminder}}',
|
||||
reminderNotSet: '尚未设置',
|
||||
unknownDate: '未知日期',
|
||||
},
|
||||
// 药物详情页面翻译
|
||||
detail: {
|
||||
title: '药品详情',
|
||||
notFound: {
|
||||
title: '未找到药品信息',
|
||||
subtitle: '请从用药列表重新进入此页面。',
|
||||
},
|
||||
loading: '正在载入...',
|
||||
error: {
|
||||
title: '暂时无法获取该药品的信息,请稍后重试。',
|
||||
subtitle: '请检查网络后重试,或返回上一页。',
|
||||
},
|
||||
sections: {
|
||||
plan: '服药计划',
|
||||
dosage: '剂量与形式',
|
||||
note: '备注',
|
||||
overview: '服药概览',
|
||||
aiAnalysis: 'AI 用药分析',
|
||||
},
|
||||
plan: {
|
||||
period: '服药周期',
|
||||
time: '用药时间',
|
||||
frequency: '频率',
|
||||
expiryDate: '药品有效期',
|
||||
longTerm: '长期',
|
||||
periodMessage: '开始服药日期:{{startDate}}\n{{endDateInfo}}',
|
||||
longTermPlan: '服药计划:长期服药',
|
||||
timeMessage: '设置的时间:{{times}}',
|
||||
dateFormat: 'YYYY年M月D日',
|
||||
periodRange: '从 {{startDate}} 至 {{endDate}}',
|
||||
periodLongTerm: '从 {{startDate}} 至长期',
|
||||
expiryStatus: {
|
||||
notSet: '未设置',
|
||||
expired: '已过期',
|
||||
expiresToday: '今天到期',
|
||||
expiresInDays: '{{days}}天后到期',
|
||||
},
|
||||
},
|
||||
dosage: {
|
||||
label: '每次剂量',
|
||||
form: '剂型',
|
||||
selectDosage: '选择剂量',
|
||||
selectForm: '选择剂型',
|
||||
dosageValue: '剂量值',
|
||||
unit: '单位',
|
||||
},
|
||||
note: {
|
||||
label: '药品备注',
|
||||
placeholder: '记录注意事项、医生叮嘱或自定义提醒',
|
||||
edit: '编辑备注',
|
||||
noNote: '暂无备注信息',
|
||||
voiceNotSupported: '当前设备暂不支持语音转文字,可直接输入备注',
|
||||
save: '保存',
|
||||
saveError: {
|
||||
title: '保存失败',
|
||||
message: '提交备注时出现问题,请稍后重试。',
|
||||
},
|
||||
},
|
||||
overview: {
|
||||
calculating: '统计中...',
|
||||
takenCount: '累计服药 {{count}} 次',
|
||||
calculatingDays: '正在计算坚持天数',
|
||||
startedDays: '已坚持 {{days}} 天',
|
||||
startDate: '开始于 {{date}}',
|
||||
noStartDate: '暂无开始日期',
|
||||
},
|
||||
aiAnalysis: {
|
||||
analyzing: '正在分析用药信息...',
|
||||
analyzingButton: '分析中...',
|
||||
reanalyzeButton: '重新分析',
|
||||
getAnalysisButton: '获取 AI 分析',
|
||||
button: 'AI 分析',
|
||||
status: {
|
||||
generated: '已生成',
|
||||
memberExclusive: '会员专享',
|
||||
pending: '待生成',
|
||||
},
|
||||
title: '分析结果',
|
||||
recommendation: 'AI 推荐',
|
||||
placeholder: '获取 AI 分析,快速了解适用人群、成分安全与使用建议。',
|
||||
categories: {
|
||||
suitableFor: '适合人群',
|
||||
unsuitableFor: '不适合人群',
|
||||
sideEffects: '可能的副作用',
|
||||
storageAdvice: '储存建议',
|
||||
healthAdvice: '健康/使用建议',
|
||||
},
|
||||
membershipCard: {
|
||||
title: '会员专享 AI 深度解读',
|
||||
subtitle: '解锁完整药品分析与无限次使用',
|
||||
},
|
||||
error: {
|
||||
title: '分析失败',
|
||||
message: 'AI 分析失败,请稍后重试',
|
||||
networkError: '发起分析请求失败,请检查网络连接',
|
||||
unauthorized: '请先登录',
|
||||
forbidden: '无权访问此药物',
|
||||
notFound: '药物不存在',
|
||||
},
|
||||
},
|
||||
aiDraft: {
|
||||
reshoot: '重新拍摄',
|
||||
saveAndCreate: '保存并创建',
|
||||
saveError: {
|
||||
title: '保存失败',
|
||||
message: '创建药物时发生错误,请稍后重试',
|
||||
},
|
||||
},
|
||||
status: {
|
||||
enabled: '提醒已开启',
|
||||
disabled: '提醒已关闭',
|
||||
},
|
||||
delete: {
|
||||
title: '删除 {{name}}?',
|
||||
description: '删除后将清除与该药品相关的提醒与历史记录,且无法恢复。',
|
||||
confirm: '删除',
|
||||
cancel: '取消',
|
||||
error: {
|
||||
title: '删除失败',
|
||||
message: '移除该药品时出现问题,请稍后再试。',
|
||||
},
|
||||
},
|
||||
deactivate: {
|
||||
title: '停用 {{name}}?',
|
||||
description: '停用后,当天已生成的用药计划会一并删除,且无法恢复。',
|
||||
confirm: '确认停用',
|
||||
cancel: '取消',
|
||||
error: {
|
||||
title: '操作失败',
|
||||
message: '停用药物时发生问题,请稍后重试。',
|
||||
},
|
||||
},
|
||||
toggleError: {
|
||||
title: '操作失败',
|
||||
message: '切换提醒状态时出现问题,请稍后重试。',
|
||||
},
|
||||
updateErrors: {
|
||||
dosage: '更新失败',
|
||||
dosageMessage: '更新剂量时出现问题,请稍后重试。',
|
||||
form: '更新失败',
|
||||
formMessage: '更新剂型时出现问题,请稍后重试。',
|
||||
expiryDate: '更新失败',
|
||||
expiryDateMessage: '有效期更新失败,请稍后重试',
|
||||
},
|
||||
imageViewer: {
|
||||
close: '关闭',
|
||||
},
|
||||
pickers: {
|
||||
cancel: '取消',
|
||||
confirm: '确定',
|
||||
},
|
||||
},
|
||||
// 编辑频率页面翻译
|
||||
editFrequency: {
|
||||
title: '编辑服药频率',
|
||||
missingParams: '缺少必要参数',
|
||||
medicationName: '正在编辑:{{name}}',
|
||||
sections: {
|
||||
frequency: '服药频率',
|
||||
frequencyDescription: '设置每日服药次数',
|
||||
time: '每日提醒时间',
|
||||
timeDescription: '添加并管理每天的提醒时间',
|
||||
},
|
||||
frequency: {
|
||||
repeatPattern: '重复模式',
|
||||
timesPerDay: '每日次数',
|
||||
daily: '每日',
|
||||
weekly: '每周',
|
||||
custom: '自定义',
|
||||
timesLabel: '{{count}} 次',
|
||||
summary: '{{pattern}} {{count}} 次',
|
||||
},
|
||||
time: {
|
||||
addTime: '添加时间',
|
||||
editTime: '修改提醒时间',
|
||||
addTimeButton: '添加时间',
|
||||
},
|
||||
actions: {
|
||||
save: '保存修改',
|
||||
},
|
||||
error: {
|
||||
title: '更新失败',
|
||||
message: '更新服药频率时出现问题,请稍后重试。',
|
||||
},
|
||||
pickers: {
|
||||
cancel: '取消',
|
||||
confirm: '确定',
|
||||
},
|
||||
},
|
||||
aiProgress: {
|
||||
title: '识别中',
|
||||
steps: {
|
||||
analyzing_product: '正在进行产品分析...',
|
||||
analyzing_suitability: '正在检测适宜人群...',
|
||||
analyzing_ingredients: '正在评估成分信息...',
|
||||
analyzing_effects: '正在生成安全建议...',
|
||||
completed: '识别完成,正在载入详情...',
|
||||
},
|
||||
errors: {
|
||||
default: '识别失败,请重新拍摄',
|
||||
queryFailed: '查询失败,请稍后再试',
|
||||
},
|
||||
modal: {
|
||||
title: '需要重新拍摄',
|
||||
retry: '重新拍摄',
|
||||
},
|
||||
},
|
||||
aiCamera: {
|
||||
title: 'AI 用药识别',
|
||||
steps: {
|
||||
front: {
|
||||
title: '正面',
|
||||
subtitle: '保证药品名称清晰可见',
|
||||
},
|
||||
side: {
|
||||
title: '背面',
|
||||
subtitle: '包含规格、成分等信息',
|
||||
},
|
||||
aux: {
|
||||
title: '侧面',
|
||||
subtitle: '补充更多细节提升准确率',
|
||||
},
|
||||
stepProgress: '步骤 {{current}} / {{total}}',
|
||||
optional: '(可选)',
|
||||
notTaken: '未拍摄',
|
||||
},
|
||||
buttons: {
|
||||
flip: '翻转',
|
||||
capture: '拍照',
|
||||
complete: '完成',
|
||||
album: '从相册',
|
||||
},
|
||||
permission: {
|
||||
title: '需要相机权限',
|
||||
description: '授权后即可快速拍摄药品包装,自动识别信息',
|
||||
button: '授权访问相机',
|
||||
},
|
||||
alerts: {
|
||||
pickFailed: {
|
||||
title: '选择失败',
|
||||
message: '请重试或更换图片',
|
||||
},
|
||||
captureFailed: {
|
||||
title: '拍摄失败',
|
||||
message: '请重试',
|
||||
},
|
||||
insufficientPhotos: {
|
||||
title: '照片不足',
|
||||
message: '请至少完成正面和背面拍摄',
|
||||
},
|
||||
taskFailed: {
|
||||
title: '创建任务失败',
|
||||
defaultMessage: '请检查网络后重试',
|
||||
},
|
||||
},
|
||||
guideModal: {
|
||||
badge: '规范',
|
||||
title: '拍摄图片清晰',
|
||||
description1: '请拍摄药品正面\\背面的产品名称\\说明部分。',
|
||||
description2: '注意拍摄时光线充分,没有反光,文字部分清晰可见。照片的清晰度会影响识别的准确率。',
|
||||
button: '知道了!',
|
||||
},
|
||||
},
|
||||
};
|
||||
408
i18n/zh/personal.ts
Normal file
408
i18n/zh/personal.ts
Normal file
@@ -0,0 +1,408 @@
|
||||
export const personal = {
|
||||
edit: '编辑',
|
||||
login: '登录',
|
||||
memberNumber: '会员编号: {{number}}',
|
||||
aiUsage: '免费AI次数: {{value}}',
|
||||
aiUsageUnlimited: '无限',
|
||||
fishRecord: '能量记录',
|
||||
badgesPreview: {
|
||||
title: '我的勋章',
|
||||
subtitle: '记录你的荣耀时刻',
|
||||
cta: '查看全部',
|
||||
loading: '正在同步勋章...',
|
||||
empty: '完成睡眠或挑战任务即可解锁首枚勋章',
|
||||
lockedHint: '坚持训练即可点亮更多勋章',
|
||||
},
|
||||
stats: {
|
||||
height: '身高',
|
||||
weight: '体重',
|
||||
age: '年龄',
|
||||
ageSuffix: '岁',
|
||||
},
|
||||
membership: {
|
||||
badge: '尊享会员',
|
||||
planFallback: 'VIP 会员',
|
||||
expiryLabel: '会员有效期',
|
||||
changeButton: '更改会员套餐',
|
||||
validForever: '长期有效',
|
||||
dateFormat: 'YYYY年MM月DD日',
|
||||
},
|
||||
sections: {
|
||||
notifications: '通知',
|
||||
developer: '开发者',
|
||||
other: '其他',
|
||||
account: '账号与安全',
|
||||
language: '语言',
|
||||
healthData: '健康数据授权',
|
||||
medicalSources: '医学建议来源',
|
||||
customization: '个性化',
|
||||
},
|
||||
menu: {
|
||||
notificationSettings: '通知设置',
|
||||
developerOptions: '开发者选项',
|
||||
pushSettings: '推送通知设置',
|
||||
privacyPolicy: '隐私政策',
|
||||
feedback: '意见反馈',
|
||||
userAgreement: '用户协议',
|
||||
logout: '退出登录',
|
||||
deleteAccount: '注销帐号',
|
||||
healthDataPermissions: '健康数据授权说明',
|
||||
whoSource: '世界卫生组织 (WHO)',
|
||||
tabBarConfig: '底部栏配置',
|
||||
},
|
||||
language: {
|
||||
title: '语言',
|
||||
menuTitle: '界面语言',
|
||||
modalTitle: '选择语言',
|
||||
modalSubtitle: '选择后界面会立即更新',
|
||||
cancel: '取消',
|
||||
options: {
|
||||
zh: {
|
||||
label: '中文',
|
||||
description: '推荐中文用户使用',
|
||||
},
|
||||
en: {
|
||||
label: '英文',
|
||||
description: '使用英文界面',
|
||||
},
|
||||
},
|
||||
},
|
||||
tabBarConfig: {
|
||||
title: '底部栏配置',
|
||||
subtitle: '自定义你的底部导航栏',
|
||||
description: '使用开关控制标签的显示和隐藏',
|
||||
resetButton: '恢复默认',
|
||||
cannotDisable: '此标签不可关闭',
|
||||
resetConfirm: {
|
||||
title: '恢复默认设置?',
|
||||
message: '将重置所有底部栏配置和显示状态',
|
||||
cancel: '取消',
|
||||
confirm: '确认恢复',
|
||||
},
|
||||
resetSuccess: '已恢复默认设置',
|
||||
},
|
||||
};
|
||||
|
||||
export const editProfile = {
|
||||
title: '编辑资料',
|
||||
fields: {
|
||||
name: '昵称',
|
||||
gender: '性别',
|
||||
height: '身高',
|
||||
weight: '体重',
|
||||
activityLevel: '活动水平',
|
||||
birthDate: '出生日期',
|
||||
maxHeartRate: '最大心率',
|
||||
},
|
||||
gender: {
|
||||
male: '男',
|
||||
female: '女',
|
||||
notSet: '未设置',
|
||||
},
|
||||
height: {
|
||||
unit: '厘米',
|
||||
placeholder: '170厘米',
|
||||
},
|
||||
weight: {
|
||||
unit: '公斤',
|
||||
placeholder: '55公斤',
|
||||
},
|
||||
activityLevels: {
|
||||
1: '久坐',
|
||||
2: '轻度活跃',
|
||||
3: '中度活跃',
|
||||
4: '非常活跃',
|
||||
descriptions: {
|
||||
1: '很少运动',
|
||||
2: '每周1-3次运动',
|
||||
3: '每周3-5次运动',
|
||||
4: '每周6-7次运动',
|
||||
},
|
||||
},
|
||||
birthDate: {
|
||||
placeholder: '1995年1月1日',
|
||||
format: '{{year}}年{{month}}月{{day}}日',
|
||||
},
|
||||
maxHeartRate: {
|
||||
unit: '次/分钟',
|
||||
notAvailable: '未获取',
|
||||
alert: {
|
||||
title: '提示',
|
||||
message: '最大心率数据从健康应用自动获取',
|
||||
},
|
||||
},
|
||||
alerts: {
|
||||
notLoggedIn: {
|
||||
title: '未登录',
|
||||
message: '请先登录后再尝试保存',
|
||||
},
|
||||
saveFailed: {
|
||||
title: '保存失败',
|
||||
message: '请稍后重试',
|
||||
},
|
||||
avatarPermissions: {
|
||||
title: '权限不足',
|
||||
message: '需要相册权限以选择头像',
|
||||
},
|
||||
avatarUploadFailed: {
|
||||
title: '上传失败',
|
||||
message: '头像上传失败,请重试',
|
||||
},
|
||||
avatarError: {
|
||||
title: '发生错误',
|
||||
message: '选择头像失败,请重试',
|
||||
},
|
||||
avatarSuccess: {
|
||||
title: '成功',
|
||||
message: '头像更新成功',
|
||||
},
|
||||
},
|
||||
modals: {
|
||||
cancel: '取消',
|
||||
confirm: '确定',
|
||||
save: '保存',
|
||||
input: {
|
||||
namePlaceholder: '输入昵称',
|
||||
weightPlaceholder: '输入体重',
|
||||
weightUnit: '公斤 (kg)',
|
||||
},
|
||||
selectHeight: '选择身高',
|
||||
selectGender: '选择性别',
|
||||
selectActivityLevel: '选择活动水平',
|
||||
female: '女性',
|
||||
male: '男性',
|
||||
},
|
||||
defaultValues: {
|
||||
name: '今晚要吃肉',
|
||||
height: 170,
|
||||
weight: 55,
|
||||
birthDate: '1995-01-01',
|
||||
activityLevel: 1,
|
||||
},
|
||||
};
|
||||
|
||||
export const login = {
|
||||
title: '登录',
|
||||
subtitle: '健康生活,自律让我更自由',
|
||||
appleLogin: '使用 Apple 登录',
|
||||
loggingIn: '登录中...',
|
||||
agreement: {
|
||||
readAndAgree: '我已阅读并同意',
|
||||
privacyPolicy: '《隐私政策》',
|
||||
and: '和',
|
||||
userAgreement: '《用户协议》',
|
||||
alert: {
|
||||
title: '请先阅读并同意',
|
||||
message: '继续登录前,请阅读并勾选《隐私政策》和《用户协议》。点击“同意并继续”将默认勾选并继续登录。',
|
||||
cancel: '取消',
|
||||
confirm: '同意并继续',
|
||||
},
|
||||
},
|
||||
errors: {
|
||||
appleIdentityTokenMissing: '未获取到 Apple 身份令牌',
|
||||
loginFailed: '登录失败,请稍后再试',
|
||||
loginFailedTitle: '登录失败',
|
||||
},
|
||||
success: {
|
||||
loginSuccess: '登录成功',
|
||||
},
|
||||
};
|
||||
|
||||
export const authGuard = {
|
||||
logout: {
|
||||
error: '退出登录失败',
|
||||
errorMessage: '退出登录失败,请稍后重试',
|
||||
},
|
||||
confirmLogout: {
|
||||
title: '确认退出',
|
||||
message: '确定要退出当前账号吗?',
|
||||
cancelButton: '取消',
|
||||
confirmButton: '确定',
|
||||
},
|
||||
deleteAccount: {
|
||||
successTitle: '账号已注销',
|
||||
successMessage: '您的账号已成功注销',
|
||||
confirmButton: '确定',
|
||||
errorTitle: '注销失败',
|
||||
errorMessage: '注销失败,请稍后重试',
|
||||
},
|
||||
confirmDeleteAccount: {
|
||||
title: '确认注销账号',
|
||||
message: '此操作不可恢复,将删除您的账号及相关数据。确定继续吗?',
|
||||
cancelButton: '取消',
|
||||
confirmButton: '确认注销',
|
||||
},
|
||||
};
|
||||
|
||||
export const membershipModal = {
|
||||
plans: {
|
||||
lifetime: {
|
||||
title: '终身会员',
|
||||
subtitle: '终身陪伴,见证您的每一次健康蜕变',
|
||||
},
|
||||
quarterly: {
|
||||
title: '季度会员',
|
||||
subtitle: '3个月科学计划,让健康成为生活习惯',
|
||||
},
|
||||
weekly: {
|
||||
title: '周会员',
|
||||
subtitle: '7天体验期,感受专业健康指导的力量',
|
||||
},
|
||||
unknown: '未知套餐',
|
||||
tag: '超值推荐',
|
||||
},
|
||||
benefits: {
|
||||
title: '权益对比',
|
||||
subtitle: '核心权益一目了然,选择更安心',
|
||||
table: {
|
||||
benefit: '权益',
|
||||
vip: 'VIP',
|
||||
regular: '普通用户',
|
||||
},
|
||||
items: {
|
||||
aiCalories: {
|
||||
title: 'AI拍照记录热量',
|
||||
description: '通过拍照识别食物并自动记录热量',
|
||||
},
|
||||
aiNutrition: {
|
||||
title: 'AI拍照识别包装',
|
||||
description: '识别食品包装上的营养成分信息',
|
||||
},
|
||||
healthReminder: {
|
||||
title: '每日健康提醒',
|
||||
description: '根据个人目标提供个性化健康提醒',
|
||||
},
|
||||
aiMedication: {
|
||||
title: 'AI 智能用药管家',
|
||||
description: '深度解析用药禁忌,生成专属服药计划,科学守护健康每一刻',
|
||||
},
|
||||
customChallenge: {
|
||||
title: '解锁无限自定义挑战',
|
||||
description: '突破限制,邀请挚友同行,让坚持不再孤单,共同见证蜕变',
|
||||
},
|
||||
},
|
||||
permissions: {
|
||||
unlimited: '无限次使用',
|
||||
limited: '有限次使用',
|
||||
dailyLimit: '每日{{count}}次',
|
||||
fullSupport: '完全支持',
|
||||
basicSupport: '基础提醒',
|
||||
smartReminder: '智能提醒',
|
||||
fullAnalysis: '深度分析',
|
||||
createUnlimited: '无限创建',
|
||||
notSupported: '不支持',
|
||||
},
|
||||
},
|
||||
sectionTitle: {
|
||||
plans: '会员套餐',
|
||||
plansSubtitle: '灵活选择,跟随节奏稳步提升',
|
||||
},
|
||||
actions: {
|
||||
subscribe: '立即订阅',
|
||||
processing: '正在处理购买...',
|
||||
restore: '恢复购买',
|
||||
restoring: '恢复中...',
|
||||
back: '返回',
|
||||
close: '关闭会员购买弹窗',
|
||||
selectPlan: '选择{{plan}}套餐',
|
||||
purchaseHint: '点击购买{{plan}}会员套餐',
|
||||
},
|
||||
agreements: {
|
||||
prefix: '开通即视为同意',
|
||||
userAgreement: '《用户协议》',
|
||||
membershipAgreement: '《会员协议》',
|
||||
autoRenewalAgreement: '《自动续费协议》',
|
||||
alert: {
|
||||
title: '请阅读并同意相关协议',
|
||||
message: '购买前需要同意用户协议、会员协议和自动续费协议',
|
||||
confirm: '确定',
|
||||
},
|
||||
},
|
||||
errors: {
|
||||
noProducts: '暂未获取到会员商品,请在 RevenueCat 中配置 iOS 产品并同步到当前 Offering。',
|
||||
purchaseCancelled: '购买已取消',
|
||||
alreadyPurchased: '您已拥有此商品',
|
||||
networkError: '网络连接失败',
|
||||
paymentPending: '支付正在处理中',
|
||||
invalidCredentials: '账户验证失败',
|
||||
purchaseFailed: '购买失败',
|
||||
restoreSuccess: '恢复购买成功',
|
||||
restoreFailed: '恢复购买失败',
|
||||
restoreCancelled: '恢复购买已取消',
|
||||
restorePartialFailed: '恢复购买部分失败',
|
||||
noPurchasesFound: '没有找到购买记录',
|
||||
selectPlan: '请选择会员套餐',
|
||||
},
|
||||
loading: {
|
||||
products: '正在加载会员套餐,请稍候',
|
||||
purchase: '购买正在进行中,请稍候',
|
||||
},
|
||||
success: {
|
||||
purchase: '会员开通成功',
|
||||
},
|
||||
};
|
||||
|
||||
export const notificationSettings = {
|
||||
title: '通知设置',
|
||||
loading: '加载中...',
|
||||
sections: {
|
||||
notifications: '通知设置',
|
||||
medicationReminder: '药品提醒',
|
||||
nutritionReminder: '营养提醒',
|
||||
moodReminder: '心情提醒',
|
||||
description: '说明',
|
||||
},
|
||||
items: {
|
||||
pushNotifications: {
|
||||
title: '消息推送',
|
||||
description: '开启后将接收应用通知',
|
||||
},
|
||||
medicationReminder: {
|
||||
title: '药品通知提醒',
|
||||
description: '在用药时间接收提醒通知',
|
||||
},
|
||||
nutritionReminder: {
|
||||
title: '营养记录提醒',
|
||||
description: '在用餐时间接收营养记录提醒',
|
||||
},
|
||||
moodReminder: {
|
||||
title: '心情记录提醒',
|
||||
description: '在晚间接收心情记录提醒',
|
||||
},
|
||||
},
|
||||
description: {
|
||||
text: '• 消息推送是所有通知的总开关\n• 各类提醒需要在消息推送开启后才能使用\n• 您可以在系统设置中管理通知权限\n• 关闭消息推送将停止所有应用通知',
|
||||
},
|
||||
alerts: {
|
||||
permissionDenied: {
|
||||
title: '权限被拒绝',
|
||||
message: '请在系统设置中开启通知权限,然后再尝试开启推送功能',
|
||||
cancel: '取消',
|
||||
goToSettings: '去设置',
|
||||
},
|
||||
error: {
|
||||
title: '错误',
|
||||
message: '请求通知权限失败',
|
||||
saveFailed: '保存设置失败',
|
||||
medicationReminderFailed: '设置药品提醒失败',
|
||||
nutritionReminderFailed: '设置营养提醒失败',
|
||||
moodReminderFailed: '设置心情提醒失败',
|
||||
},
|
||||
notificationsEnabled: {
|
||||
title: '通知已开启',
|
||||
body: '您将收到应用通知和提醒',
|
||||
},
|
||||
medicationReminderEnabled: {
|
||||
title: '药品提醒已开启',
|
||||
body: '您将在用药时间收到提醒通知',
|
||||
},
|
||||
nutritionReminderEnabled: {
|
||||
title: '营养提醒已开启',
|
||||
body: '您将在用餐时间收到营养记录提醒',
|
||||
},
|
||||
moodReminderEnabled: {
|
||||
title: '心情提醒已开启',
|
||||
body: '您将在晚间收到心情记录提醒',
|
||||
},
|
||||
},
|
||||
};
|
||||
31
i18n/zh/weight.ts
Normal file
31
i18n/zh/weight.ts
Normal file
@@ -0,0 +1,31 @@
|
||||
export const weightRecords = {
|
||||
title: '体重记录',
|
||||
pageSubtitle: '追踪体重变化与趋势',
|
||||
loadingHistory: '体重记录加载失败',
|
||||
history: '体重记录',
|
||||
historyMonthFormat: '{{year}}年{{month}}月',
|
||||
stats: {
|
||||
currentWeight: '当前体重',
|
||||
initialWeight: '初始体重',
|
||||
targetWeight: '目标体重',
|
||||
},
|
||||
empty: {
|
||||
title: '暂无体重记录',
|
||||
subtitle: '点击右上角 + 按钮添加第一条记录',
|
||||
},
|
||||
modal: {
|
||||
recordWeight: '记录体重',
|
||||
editInitialWeight: '编辑初始体重',
|
||||
editTargetWeight: '编辑目标体重',
|
||||
editRecord: '编辑记录',
|
||||
inputPlaceholder: '输入体重',
|
||||
unit: 'kg',
|
||||
quickSelection: '快速选择',
|
||||
confirm: '保存',
|
||||
},
|
||||
alerts: {
|
||||
deleteFailed: '删除记录失败',
|
||||
invalidWeight: '请输入 0-500kg 之间的有效体重',
|
||||
saveFailed: '保存体重失败,请稍后再试',
|
||||
},
|
||||
};
|
||||
Reference in New Issue
Block a user