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:
richarjiang
2025-11-28 17:29:51 +08:00
parent fbe0c92f0f
commit bca6670390
42 changed files with 7972 additions and 6632 deletions

303
i18n/zh/challenge.ts Normal file
View 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
View File

@@ -0,0 +1,5 @@
export const dateSelector = {
backToToday: '回到今天',
cancel: '取消',
confirm: '确定',
};

551
i18n/zh/diet.ts Normal file
View 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
View 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
View 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
View 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
View 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
View 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: '保存体重失败,请稍后再试',
},
};