diff --git a/docs/superpowers/specs/2026-05-27-export-health-profile-design.md b/docs/superpowers/specs/2026-05-27-export-health-profile-design.md index 603434f..912a383 100644 --- a/docs/superpowers/specs/2026-05-27-export-health-profile-design.md +++ b/docs/superpowers/specs/2026-05-27-export-health-profile-design.md @@ -413,3 +413,18 @@ Output: | **合计** | **~14h ≈ 2 个工作日** | 也是 W3「AskService 基础 RAG」的前置铺路工作,工程上一举两得。 + +--- + +## 14. 修订记录:防编造加固(2026-05-30) + +**现象**:导出摘要出现整份虚构病例(疲劳/盗汗/血红蛋白98/阿司匹林…),不符任何真实记录。 + +**根因(双重)**:① §数据范围里「Diary 由关键词过滤后入 prompt」在泛化请求(无症状词,如「最近身体异常」)下把日记**全部清空** → 真实记录没进 prompt;② 数据稀疏时,1.7B 在固定 6 段模板上**凭训练先验脑补**完整病例(对「只用数据/缺失写无记录」这类约束遵循差)。 + +**修复(三层,客户端硬保证为主)**: +1. **检索**:`retrieve` 改为——有症状词→按词过滤(保留隐私);无症状词→纳入时间窗内最近 5 条日记,确保真实记录进 prompt。 +2. **空数据硬兜底**:`isEffectivelyEmpty` 判定无任何记录且 profile 空时,**跳过 LLM**,用 `fallbackReport` 产出确定性「6 段全无记录、主诉仅照搬原话」的摘要,从根上杜绝空数据编造。 +3. **prompt 重写**:从「撰写」改为「抽取/搬运」框架;反编造铁律首尾各一遍;加一条**稀疏 few-shot** 教模型「缺失写无记录、数值原样照搬」。 + +**残留限制**:部分数据(如仅 1 条日记)仍走 LLM,强约束 + few-shot 大幅降低但不能 100% 杜绝小模型臆造;后续可加生成后数值校验。 diff --git a/docs/superpowers/specs/2026-05-30-custom-reminder-design.md b/docs/superpowers/specs/2026-05-30-custom-reminder-design.md index dd45691..6b641f2 100644 --- a/docs/superpowers/specs/2026-05-30-custom-reminder-design.md +++ b/docs/superpowers/specs/2026-05-30-custom-reminder-design.md @@ -18,7 +18,8 @@ | 决策点 | 选择 | |---|---| | 模型 | 新建独立 `CustomReminder` @Model,不动现有 `MetricReminder` | -| 周期粒度 | 每天 / 每周选几天(复用 weekday 约定,覆盖示例)。不做间隔/按月/一次性 | +| 周期粒度 | **每日 / 每周选几天 / 每月某日 / 每年某月某日**(2026-05-30 用户反转原「不做按月/按年」决策)。仍不做「每 N 天间隔」/一次性 | +| 时间选择 | 常用时间快捷预设(8:00/12:00/18:00/22:00 chip)+ 保留 `DatePicker` 精调 | | 入口 | 新建 → 开启一个提醒 → `RemindersListView`(提醒中心),顶部「+ 新建提醒」打开编辑 sheet | | 列表范围 | 自由提醒 + 指标提醒**合展**(上次删了「我的」入口,指标提醒也只能从这里管) | | 量词(5公里/2片) | 写在自由文本 `title` 里,不单设字段 | @@ -32,20 +33,34 @@ ```swift @Model final class CustomReminder { + enum Frequency: String { case daily, weekly, monthly, yearly } // 嵌套枚举 @Attribute(.unique) var id: UUID - var title: String // 用户文案:"跑步5公里" - var note: String // 可选备注 → 通知正文 - var hour: Int // 0...23 - var minute: Int // 0...59 - var weekdays: [Int] // 1=日…7=六,全 7 = 每天(复用 MetricReminder 约定) + var title: String // 用户文案:"跑步5公里" + var note: String // 可选备注 → 通知正文 + var hour: Int // 0...23 + var minute: Int // 0...59 + var weekdays: [Int] // 1=日…7=六,仅 weekly 用(复用 MetricReminder 约定) + var frequencyRaw: String = "daily" // Frequency 原始值(内联默认 → 走轻量迁移) + var dayOfMonth: Int = 1 // monthly / yearly 用,1...31 + var month: Int = 1 // yearly 用,1...12 var enabled: Bool var createdAt: Date var updatedAt: Date - // computed: isEveryDay / frequencyLabel / timeLabel(与 MetricReminder 同款,复用同一批本地化 key) + // computed: frequency(get/set 包 frequencyRaw)/ isEveryDay / frequencyLabel(分档)/ timeLabel } ``` -Schema 注册:`App/KangkangApp.swift` 加 `CustomReminder.self`(additive 变更,无需迁移)。 +Schema 已含 `CustomReminder.self`。**本轮只给已存在的 `CustomReminder` 加 3 个带内联默认值的属性 → SwiftData 自动轻量迁移,不触发删库兜底(见 §10)。** + +四档语义 → iOS `UNCalendarNotificationTrigger(repeats:true)`: +| 频率 | DateComponents | 通知数 | id 后缀 | +|---|---|---|---| +| daily | hour,minute | 1 | `.daily` | +| weekly | hour,minute,weekday ×N | N | `.w` | +| monthly | day,hour,minute | 1 | `.monthly` | +| yearly | month,day,hour,minute | 1 | `.yearly` | + +边界:iOS 重复触发**不顺延**。monthly 选 29/30/31 → 无此日的月份跳过(UI 给浅色提示);yearly 的「日」选项按所选月份最大天数动态收口(避免「4月31日」永不触发),仅闰年 2/29 给提示。 --- @@ -95,12 +110,12 @@ static func sync(_ metric: MetricReminder) async // 现有,内部改走共享 | 文件 | 改动 | |---|---| -| `Models/Models.swift` | +`CustomReminder` | -| `App/KangkangApp.swift` | schema +`CustomReminder.self` | -| `Services/ReminderService.swift` | 泛化共享核心 + custom sync/cancel | -| `Features/Me/CustomReminderEditSheet.swift` | **新增** 编辑表单 | -| `Features/Me/RemindersListView.swift` | 提醒中心:新建按钮 + 合展两类 | -| `Localizable.xcstrings` | 新增文案四语言 | +| `Models/Models.swift` | `CustomReminder` +`Frequency` 枚举 +`frequencyRaw/dayOfMonth/month`(均带内联默认)+ 分档 `frequencyLabel` | +| `App/KangkangApp.swift` | **持久化兜底改造**:迁移失败时由「删库」改为「挪到 `StoreBackups/<时间戳>/` 再重建」(见 §10) | +| `Services/ReminderService.swift` | 调度核心泛化为 `Slot(suffix,DateComponents)` 列表;custom sync 按 frequency 分档;`cancelBase` 覆盖 daily/monthly/yearly/w1-7 | +| `Features/Me/CustomReminderEditSheet.swift` | 频率分段 Picker + 各档子控件(周几 / 日 / 月+日)+ 时间快捷预设行 | +| `Features/Me/RemindersListView.swift` | 不变(`frequencyLabel` 来自模型) | +| `Localizable.xcstrings` | 新增 11 个 key × en/ja/ko | --- @@ -114,4 +129,18 @@ static func sync(_ metric: MetricReminder) async // 现有,内部改走共享 ## 9. 验收(真机) -① 新建「每天 20:00 跑步 5 公里」→ 列表出现 → 到点收到本地通知(标题=跑步5公里);② 改时间/周几即时重排;③ 关闭 Toggle 取消通知;④ 删除清除 pending;⑤ 切换语言后固定文案随之变化(用户输入文案不变);⑥ 指标提醒仍在同一列表可管。 +① 新建「每天 20:00 跑步 5 公里」→ 列表出现 → 到点收到本地通知(标题=跑步5公里);② 改时间/周几即时重排;③ 关闭 Toggle 取消通知;④ 删除清除 pending;⑤ 切换语言后固定文案随之变化(用户输入文案不变);⑥ 指标提醒仍在同一列表可管;⑦ **每月/每年**:切频率后子控件随之变化,边界提示出现;改频率后旧档 pending 通知被清掉(不留孤儿);⑧ **时间预设**:点 8:00/12:00/18:00/22:00 即填,精调仍可用。 + +--- + +## 10. 顺带修复:重打包数据丢失(根因 + 方案) + +**问题**:Demo 期每次改 schema 重打包,SwiftData 数据被清空。 + +**根因(单点)**:`App/KangkangApp.swift` 的 `ModelContainer` 创建 catch 块**直接删 store 文件**。SwiftData 只对**纯增量**改动自动轻量迁移;一旦某次改动超纲(最常见:给已存在的 `@Model` 新增「非可选且无内联默认值」的属性),自动迁移抛错 → 落入 catch → 删库。W2 几乎每次都在改 schema,故体感「每次都丢」。 + +**方案(两层)**: +1. **治本**:新增 `@Model` 属性一律「可选」或「内联默认值」(本轮 3 个新字段都给了 `= "daily"` / `= 1`)→ 走轻量迁移、不进 catch、数据保留。 +2. **兜底**:catch 不再删库,改为把旧 store(含 `-wal`/`-shm`)**挪到 `Application Support/StoreBackups/<时间戳>/`** 再重建——App 仍能启动,旧数据可手动恢复;挪不动才降级删除。 + +⚠️ 正式发布前仍应升级为 `VersionedSchema` + `SchemaMigrationPlan` 的正式迁移(注释已就地标注)。 diff --git a/康康/AI/Prompts/DiaryAssistPrompts.swift b/康康/AI/Prompts/DiaryAssistPrompts.swift index 5f73f2d..a8cfd24 100644 --- a/康康/AI/Prompts/DiaryAssistPrompts.swift +++ b/康康/AI/Prompts/DiaryAssistPrompts.swift @@ -21,10 +21,13 @@ enum DiaryAssistPrompts { /// 第一轮传空数组。 static func suggest(content: String, coveredDimensions: [String] = []) -> String { let covered = coveredDimensions.filter { !$0.isEmpty } - let coveredLine = covered.isEmpty ? "无" : covered.joined(separator: "、") - let excludeRule = covered.isEmpty + let coveredSet = Set(covered) + let allowed = dimensions.filter { !coveredSet.contains($0) } + let allowedLine = allowed.isEmpty ? "(已基本问全)" : allowed.joined(separator: "、") + // 正向约束:1.7B 对「只能从这些里挑」比对「严禁选这些」遵循更好。 + let scopeRule = covered.isEmpty ? "" - : "\n- 本轮【严禁】选择这些已覆盖维度:\(covered.joined(separator: "、"));只能从其余维度里挑。" + : "\n- 已问过的维度【不要再问】:\(covered.joined(separator: "、"))。本轮只能从这些还没问的维度里挑:\(allowedLine)。" return """ 你是社区医生的小助手。患者写了一段身体状态的健康记录,信息可能不够完整。 @@ -41,7 +44,7 @@ enum DiaryAssistPrompts { 8. 生活方式 —— 睡眠、饮食、运动习惯、压力 硬性规则: - - 本轮每个问题必须来自【不同】维度,严禁两条落在同一维度(例如不能两条都问"伴随症状")。\(excludeRule) + - 本轮每个问题必须来自【不同】维度,严禁两条落在同一维度(例如不能两条都问"伴随症状")。\(scopeRule) - 只问【最新记录】里还没写明的事。方括号 `[xxx]` 表示该话题已被提出、只是细节待填,【不要】再作为新问题重复它。 - 不给诊断、不给用药建议、不写「建议就医」。 - q ≤ 20 字,像真人医生在问;fill 是采纳后追加到原文的中文补充句,可含方括号占位符如 [时间] [部位]。 @@ -66,7 +69,7 @@ enum DiaryAssistPrompts { ]} 现在输出 JSON。 - 已覆盖维度(必须避开):\(coveredLine) + 本轮可选维度:\(allowedLine) 【最新记录】: \(content) diff --git a/康康/AI/Prompts/HealthExportPrompts.swift b/康康/AI/Prompts/HealthExportPrompts.swift index 67b3bab..6a19c74 100644 --- a/康康/AI/Prompts/HealthExportPrompts.swift +++ b/康康/AI/Prompts/HealthExportPrompts.swift @@ -62,15 +62,20 @@ enum HealthExportPrompts { ? "# 就诊摘要" : "# 就诊摘要 — \(intentLabelCN)" return """ - 你正在帮患者撰写一份给社区医生看的就诊摘要。要求: - - 严格输出 Markdown,标题用 # / ##,不要 markdown 围栏 - - 只用「数据」中给出的信息,数据缺失就写「无记录」 - - 不要给诊断意见、用药建议或「建议就医」之类的话 - - 引用数值时保留单位 + 参考范围,异常项前加 ⚠️ - - 全文中文,简洁,医生 30 秒内能扫完 - - 不要复述「数据」二字,不要输出 JSON + 你是健康数据整理员。任务是把下面【真实数据】(JSON)里**已经存在**的内容, + 原样整理成一份给社区医生看的就诊摘要。这是**抽取 / 搬运**任务,不是创作。 - 结构(严格按以下 6 段): + 【最重要的铁律 —— 违反即失败】 + - 只能使用【真实数据】JSON 里**真实出现过**的内容。 + - 严禁编造或推测任何数字、日期、症状、药物、检查结果、诊断,哪怕看起来很合理。 + - JSON 里没有的信息,对应小节一律写「无记录」,不要补全、不要举例、不要套用常见病例模板。 + - 数值必须原样照搬(含单位与参考范围);status 为 high/low/abnormal 的指标前加 ⚠️。 + - 「主诉」「患者疑问」可参考【患者原话】,但不得加入原话与数据里都没有的症状。 + + 输出格式: + - 严格 Markdown,标题用 # / ##,不要 markdown 围栏,不要输出 JSON,不写「数据」二字。 + - 不给诊断意见、用药建议或「建议就医」。全文中文,简洁,医生 30 秒能扫完。 + - 严格按以下 6 段(顺序与标题固定): \(labelLine) ## 主诉 ## 患者背景 @@ -79,12 +84,33 @@ enum HealthExportPrompts { ## 在服药与过敏 ## 患者疑问 - 数据: + —— 格式示例(只示范「无记录」与数值写法,内容请勿照抄)—— + 真实数据:{"profile":{},"symptoms":[],"indicators":[{"name":"体温","value":"38.5","unit":"℃","range":"36-37.2","status":"high","date":"2026-05-01"}],"reports":[],"diaries":[],"time_window":{"from":"2026-04-02","to":"2026-05-02"}} + 输出: + # 就诊摘要 — 近期健康摘要 + ## 主诉 + 无记录 + ## 患者背景 + 无记录 + ## 近期症状(按时间倒序) + 无记录 + ## 关键指标(异常项优先) + ⚠️ 体温 38.5 ℃(参考 36-37.2,2026-05-01) + ## 在服药与过敏 + 无记录 + ## 患者疑问 + 无记录 + —— 示例结束(以上咳嗽/体温等仅示范格式,切勿出现在你的输出里)—— + + 现在,严格根据下面这份【真实数据】生成;数据里没有的就写「无记录」,**禁止编造**: + + 【真实数据】: \(dataJSON) - 患者原话:\(userPrompt) + 【患者原话】:\(userPrompt) - 现在请生成 Markdown(直接输出,不要思考过程,不要 标签): + 再次强调:只整理上面【真实数据】里真实出现过的内容,禁止编造任何数字/日期/症状/药物。 + 直接输出 Markdown,不要思考过程,不要 标签: /no_think """ } diff --git a/康康/App/KangkangApp.swift b/康康/App/KangkangApp.swift index 8ffc830..7dffe7a 100644 --- a/康康/App/KangkangApp.swift +++ b/康康/App/KangkangApp.swift @@ -23,23 +23,46 @@ struct KangkangApp: App { do { return try ModelContainer(for: schema, configurations: [config]) } catch { - // Demo 阶段 schema 仍在演进:旧 store 与新 schema 不兼容且无正式迁移时, - // 自动迁移会失败导致启动崩溃。这里重置本地 store 重建(测试数据可丢)。 - // ⚠️ 生产环境必须改为正式的 SwiftData 迁移方案,不能静默删数据。 - print("⚠️ ModelContainer 创建失败,重置本地 store 重建: \(error)") - let fm = FileManager.default - let storePath = config.url.path - for path in [storePath, storePath + "-wal", storePath + "-shm"] { - try? fm.removeItem(atPath: path) - } + // Demo 阶段 schema 仍在演进:某次改动若超出 SwiftData 自动轻量迁移能力 + // (最常见:给已存在的 @Model 新增「非可选且无内联默认值」的属性),自动迁移会抛错。 + // 这里不再静默删库,而是把旧 store 连同 -wal/-shm 整体挪到带时间戳的备份目录后重建—— + // 既保证 App 能启动,又让旧数据可手动恢复(挪不动才降级为删除)。 + // ⚠️ 正式发布前仍应改为 VersionedSchema + SchemaMigrationPlan 的正式迁移。 + // 注:新增 @Model 属性请一律给「可选」或「内联默认值」,即可走轻量迁移、不触发本兜底。 + print("⚠️ ModelContainer 创建失败,备份旧 store 后重建: \(error)") + KangkangApp.backupIncompatibleStore(at: config.url) do { return try ModelContainer(for: schema, configurations: [config]) } catch { - fatalError("Could not create ModelContainer even after reset: \(error)") + fatalError("Could not create ModelContainer even after store reset: \(error)") } } }() + /// 把与新 schema 不兼容的旧 store(含 `-wal` / `-shm`)挪到 + /// `Application Support/StoreBackups/<时间戳>/`,而不是直接删除。 + /// 既清出路径让新库能建起来,又把旧数据留作可手动恢复的备份;挪不动时才降级为删除。 + private static func backupIncompatibleStore(at storeURL: URL) { + let fm = FileManager.default + let fmt = DateFormatter() + fmt.locale = Locale(identifier: "en_US_POSIX") + fmt.dateFormat = "yyyyMMdd-HHmmss" + let stamp = fmt.string(from: Date()) + let backupDir = storeURL.deletingLastPathComponent() + .appendingPathComponent("StoreBackups/\(stamp)", isDirectory: true) + try? fm.createDirectory(at: backupDir, withIntermediateDirectories: true) + for suffix in ["", "-wal", "-shm"] { + let src = URL(fileURLWithPath: storeURL.path + suffix) + guard fm.fileExists(atPath: src.path) else { continue } + let dst = backupDir.appendingPathComponent(src.lastPathComponent) + do { + try fm.moveItem(at: src, to: dst) + } catch { + try? fm.removeItem(at: src) // 挪不动就删,至少保证能启动 + } + } + } + var body: some Scene { WindowGroup { AppLockContainer { diff --git a/康康/Assets.xcassets/AppIcon.appiconset/app-icon-kangkang-1024.png b/康康/Assets.xcassets/AppIcon.appiconset/app-icon-kangkang-1024.png index bacaf6e..9e3dd43 100644 Binary files a/康康/Assets.xcassets/AppIcon.appiconset/app-icon-kangkang-1024.png and b/康康/Assets.xcassets/AppIcon.appiconset/app-icon-kangkang-1024.png differ diff --git a/康康/Assets.xcassets/AppIcon.appiconset/app-icon-kangkang-128.png b/康康/Assets.xcassets/AppIcon.appiconset/app-icon-kangkang-128.png index e76e570..2758fcc 100644 Binary files a/康康/Assets.xcassets/AppIcon.appiconset/app-icon-kangkang-128.png and b/康康/Assets.xcassets/AppIcon.appiconset/app-icon-kangkang-128.png differ diff --git a/康康/Assets.xcassets/AppIcon.appiconset/app-icon-kangkang-16.png b/康康/Assets.xcassets/AppIcon.appiconset/app-icon-kangkang-16.png index 7aa13ca..10d7493 100644 Binary files a/康康/Assets.xcassets/AppIcon.appiconset/app-icon-kangkang-16.png and b/康康/Assets.xcassets/AppIcon.appiconset/app-icon-kangkang-16.png differ diff --git a/康康/Assets.xcassets/AppIcon.appiconset/app-icon-kangkang-256.png b/康康/Assets.xcassets/AppIcon.appiconset/app-icon-kangkang-256.png index 958318d..38ef5d5 100644 Binary files a/康康/Assets.xcassets/AppIcon.appiconset/app-icon-kangkang-256.png and b/康康/Assets.xcassets/AppIcon.appiconset/app-icon-kangkang-256.png differ diff --git a/康康/Assets.xcassets/AppIcon.appiconset/app-icon-kangkang-32.png b/康康/Assets.xcassets/AppIcon.appiconset/app-icon-kangkang-32.png index 15af40f..543fa38 100644 Binary files a/康康/Assets.xcassets/AppIcon.appiconset/app-icon-kangkang-32.png and b/康康/Assets.xcassets/AppIcon.appiconset/app-icon-kangkang-32.png differ diff --git a/康康/Assets.xcassets/AppIcon.appiconset/app-icon-kangkang-512.png b/康康/Assets.xcassets/AppIcon.appiconset/app-icon-kangkang-512.png index 3c51660..1330af6 100644 Binary files a/康康/Assets.xcassets/AppIcon.appiconset/app-icon-kangkang-512.png and b/康康/Assets.xcassets/AppIcon.appiconset/app-icon-kangkang-512.png differ diff --git a/康康/Assets.xcassets/AppIcon.appiconset/app-icon-kangkang-64.png b/康康/Assets.xcassets/AppIcon.appiconset/app-icon-kangkang-64.png index d082773..2ce042e 100644 Binary files a/康康/Assets.xcassets/AppIcon.appiconset/app-icon-kangkang-64.png and b/康康/Assets.xcassets/AppIcon.appiconset/app-icon-kangkang-64.png differ diff --git a/康康/Assets.xcassets/AppIcon.appiconset/app-icon-kangkang-dark-1024.png b/康康/Assets.xcassets/AppIcon.appiconset/app-icon-kangkang-dark-1024.png index bacaf6e..b00a2a1 100644 Binary files a/康康/Assets.xcassets/AppIcon.appiconset/app-icon-kangkang-dark-1024.png and b/康康/Assets.xcassets/AppIcon.appiconset/app-icon-kangkang-dark-1024.png differ diff --git a/康康/Assets.xcassets/AppIcon.appiconset/app-icon-kangkang-tinted-1024.png b/康康/Assets.xcassets/AppIcon.appiconset/app-icon-kangkang-tinted-1024.png index bacaf6e..e873f51 100644 Binary files a/康康/Assets.xcassets/AppIcon.appiconset/app-icon-kangkang-tinted-1024.png and b/康康/Assets.xcassets/AppIcon.appiconset/app-icon-kangkang-tinted-1024.png differ diff --git a/康康/Features/Archive/ArchiveListView.swift b/康康/Features/Archive/ArchiveListView.swift index e9fd786..4819792 100644 --- a/康康/Features/Archive/ArchiveListView.swift +++ b/康康/Features/Archive/ArchiveListView.swift @@ -19,6 +19,7 @@ struct ArchiveListView: View { @State private var filter: TimelineKind? = nil @State private var endingSymptom: Symptom? + @State private var selectedEntry: TimelineEntry? @State private var showExportSheet = false @State private var showExportList = false @@ -85,6 +86,11 @@ struct ArchiveListView: View { .sheet(item: $endingSymptom) { sym in SymptomEndSheet(symptom: sym) } + .sheet(item: $selectedEntry) { entry in + if let d = detail(for: entry) { + TimelineEntryDetailView(detail: d) + } + } .fullScreenCover(isPresented: $showExportSheet) { HealthExportSheet() } @@ -94,6 +100,7 @@ struct ArchiveListView: View { private func rowView(for entry: TimelineEntry) -> some View { if entry.kind == .symptom, entry.isOngoing, let sym = symptoms.first(where: { "symptom-\($0.persistentModelID)" == entry.id }) { + // 进行中症状:点 → 标记结束 sheet(沿用原交互) Button { endingSymptom = sym } label: { @@ -101,7 +108,42 @@ struct ArchiveListView: View { } .buttonStyle(.plain) } else { - TimelineRow(entry: entry) + // 其余条目(报告/指标/日记/已结束症状):点 → 只读详情 + Button { + if detail(for: entry) != nil { selectedEntry = entry } + } label: { + TimelineRow(entry: entry) + } + .buttonStyle(.plain) + } + } + + /// 把时间线条目反查回源记录(id 形如 `-` / `bp--`)。 + private func detail(for entry: TimelineEntry) -> TimelineDetail? { + switch entry.kind { + case .report: + return reports.first { "report-\($0.persistentModelID)" == entry.id } + .map(TimelineDetail.report) + case .diary: + return diaries.first { "diary-\($0.persistentModelID)" == entry.id } + .map(TimelineDetail.diary) + case .symptom: + return symptoms.first { "symptom-\($0.persistentModelID)" == entry.id } + .map(TimelineDetail.symptom) + case .indicator: + if let i = indicators.first(where: { "indicator-\($0.persistentModelID)" == entry.id }) { + return .indicator(i) + } + // 合并血压条目:bp-- + if entry.id.hasPrefix("bp-"), + let sys = indicators.first(where: { entry.id.hasPrefix("bp-\($0.persistentModelID)-") }) { + let dia = indicators.first { + $0.seriesKey == "bp.diastolic" && + abs($0.capturedAt.timeIntervalSince(sys.capturedAt)) <= 5 + } + return .bloodPressure(sys: sys, dia: dia) + } + return nil } } diff --git a/康康/Features/Diary/DiaryQuickSheet.swift b/康康/Features/Diary/DiaryQuickSheet.swift index ed7f3f3..1d48464 100644 --- a/康康/Features/Diary/DiaryQuickSheet.swift +++ b/康康/Features/Diary/DiaryQuickSheet.swift @@ -26,6 +26,12 @@ struct DiaryQuickSheet: View { /// 累积已覆盖的问诊维度(question.dim),回传下一轮 prompt 用于按维度去重。 @State private var coveredDims: Set = [] @State private var suggestTask: Task? + /// 当前正在「就地填空」的 question id;nil = 没有展开的填空面板。 + @State private var fillingId: UUID? + /// 当前填空面板各占位槽的输入值,长度 = 该模板占位数。 + @State private var fillValues: [String] = [] + /// 上一轮「再问一轮」没问出任何新维度(全被去重)时为 true,提示用户已覆盖主要维度。 + @State private var exhaustedNote = false /// sheet detent。默认 large,确保建议面板有足够展示空间。 /// 仍保留 medium,用户可手动下拉收回为半屏(纯写文本时更轻量)。 @State private var detent: PresentationDetent = .large @@ -76,6 +82,7 @@ struct DiaryQuickSheet: View { text: $content, axis: .vertical) .lineLimit(3...8) .focused($contentFocused) + .onChange(of: content) { _, _ in exhaustedNote = false } .padding(.horizontal, 14) .padding(.vertical, 12) .background( @@ -177,6 +184,19 @@ struct DiaryQuickSheet: View { } } + if exhaustedNote { + HStack(spacing: 6) { + Image(systemName: "checkmark.seal.fill") + .font(.system(size: 11)) + .foregroundStyle(Tj.Palette.leaf) + Text("已覆盖主要问诊维度;补充原文后可再追问") + .font(.system(size: 11)) + .foregroundStyle(Tj.Palette.text3) + Spacer(minLength: 0) + } + .padding(.vertical, 2) + } + // 底部主操作按钮(状态机驱动) phaseFooter } @@ -318,6 +338,7 @@ struct DiaryQuickSheet: View { private func questionRow(index: Int, question: DiaryAssistService.Question) -> some View { let adopted = question.adopted + let filling = fillingId == question.id return VStack(alignment: .leading, spacing: 6) { HStack(alignment: .top, spacing: 8) { Text("\(index).") @@ -341,7 +362,7 @@ struct DiaryQuickSheet: View { .padding(.horizontal, 8) .padding(.vertical, 5) .background(Capsule().fill(Tj.Palette.leafSoft)) - } else { + } else if !filling { Button { adopt(question) } label: { HStack(spacing: 4) { Image(systemName: "plus.circle.fill") @@ -357,7 +378,14 @@ struct DiaryQuickSheet: View { .buttonStyle(.plain) } } - if !question.fill.isEmpty && !adopted { + if filling { + QuestionFillPanel( + template: question.fill, + values: $fillValues, + onCommit: { assembled in commitAdoption(question, text: assembled) }, + onCancel: { closeFill() } + ) + } else if !question.fill.isEmpty && !adopted { HStack(alignment: .top, spacing: 4) { Text("将追加:") .font(.system(size: 11)) @@ -405,6 +433,7 @@ struct DiaryQuickSheet: View { detent = .large } } + exhaustedNote = false phase = .loading suggestTask = Task { @MainActor in do { @@ -413,21 +442,34 @@ struct DiaryQuickSheet: View { coveredDimensions: covered ) if Task.isCancelled { return } - // 客户端字面兜底(防 LLM 不听话);跨轮去重主要靠 prompt 的维度排除。 - let existing = Set(questions.map { Self.normalize($0.q) }) + // 客户端硬去重(不依赖 1.7B 听话): + // ① 维度已在往轮覆盖 → 丢;② 本轮内维度重复 → 丢;③ 文本与已有近似 → 丢。 + let coveredSnapshot = coveredDims + var acceptedNorms = questions.map { Self.normalize($0.q) } + var batchDims = Set() let nextRound = currentRound + 1 - let fresh = result.questions - .filter { !existing.contains(Self.normalize($0.q)) } - .map { q -> DiaryAssistService.Question in - var stamped = q - stamped.round = nextRound - return stamped - } + let fresh = result.questions.compactMap { q -> DiaryAssistService.Question? in + let dim = q.dim.trimmingCharacters(in: .whitespacesAndNewlines) + let norm = Self.normalize(q.q) + if !dim.isEmpty, coveredSnapshot.contains(dim) { return nil } + if !dim.isEmpty, batchDims.contains(dim) { return nil } + if acceptedNorms.contains(where: { Self.isSimilar($0, norm) }) { return nil } + if !dim.isEmpty { batchDims.insert(dim) } + acceptedNorms.append(norm) + var stamped = q + stamped.round = nextRound + return stamped + } withAnimation(.snappy(duration: 0.2)) { - questions.append(contentsOf: fresh) - for q in fresh where !q.dim.isEmpty { coveredDims.insert(q.dim) } + if fresh.isEmpty { + exhaustedNote = true // 这轮没问出任何新维度 + } else { + questions.append(contentsOf: fresh) + for q in fresh where !q.dim.isEmpty { coveredDims.insert(q.dim) } + currentRound = nextRound + exhaustedNote = false + } lastRate = result.decodeRate - currentRound = nextRound phase = .ready } } catch is CancellationError { @@ -449,20 +491,59 @@ struct DiaryQuickSheet: View { .replacingOccurrences(of: "?", with: "?") } + /// 近似判重:归一化后相等,或字符集 Jaccard ≥ 0.8(抓「会/下」这类换一两字的重复)。 + private static func isSimilar(_ a: String, _ b: String) -> Bool { + if a == b { return true } + let sa = Set(a), sb = Set(b) + guard !sa.isEmpty, !sb.isEmpty else { return false } + let inter = sa.intersection(sb).count + let union = sa.union(sb).count + return union > 0 && Double(inter) / Double(union) >= 0.8 + } + private func cancelSuggestions() { suggestTask?.cancel() phase = hasQuestions ? .ready : .idle } - /// 把 question.fill 追加到 textfield 末尾,并把该 question 标记为 adopted。 + /// 采纳:模板含 `[占位]` 时展开就地填空面板;无占位则直接把整句追加(并标记 adopted)。 /// 已采纳的 q 不会从列表里消失;其维度已在生成时计入 coveredDims,下一轮 prompt 会避开。 private func adopt(_ question: DiaryAssistService.Question) { + guard !question.fill.isEmpty, DiaryFillTemplate.slotCount(question.fill) > 0 else { + // 无占位:直接采纳整句(空 fill 时退回到追加问题本身)。 + commitAdoption(question, text: question.fill.isEmpty ? question.q : question.fill) + return + } + withAnimation(.snappy(duration: 0.18)) { + fillingId = question.id + fillValues = Array(repeating: "", count: DiaryFillTemplate.slotCount(question.fill)) + } + } + + /// 关闭填空面板(取消)。 + private func closeFill() { + withAnimation(.snappy(duration: 0.18)) { + fillingId = nil + fillValues = [] + } + } + + /// 提交采纳:把(填好的)整句追加到正文,标记 adopted,收起面板。 + private func commitAdoption(_ question: DiaryAssistService.Question, text: String) { if let idx = questions.firstIndex(where: { $0.id == question.id }) { withAnimation(.snappy(duration: 0.18)) { questions[idx].adopted = true } } - let toAppend = question.fill.isEmpty ? question.q : question.fill + appendToContent(text) + fillingId = nil + fillValues = [] + } + + /// 把一段补充文本追加到正文末尾(自动补换行,空文本忽略)。 + private func appendToContent(_ text: String) { + let toAppend = text.trimmingCharacters(in: .whitespacesAndNewlines) + guard !toAppend.isEmpty else { return } let trimmed = content.trimmingCharacters(in: .whitespacesAndNewlines) if trimmed.isEmpty { content = toAppend diff --git a/康康/Features/Diary/QuestionFillPanel.swift b/康康/Features/Diary/QuestionFillPanel.swift new file mode 100644 index 0000000..808081b --- /dev/null +++ b/康康/Features/Diary/QuestionFillPanel.swift @@ -0,0 +1,235 @@ +import SwiftUI + +/// AI 补充句模板(如「症状从 [时间] 开始,」)的一个片段:字面文本或待填占位槽。 +enum FillSegment: Equatable { + case literal(String) + /// `label` 为方括号内原文(如 "时间" / "活动/休息"); + /// `options` 为可一键填充的短词候选(`/` 分隔且都短时才有,否则空)。 + case slot(label: String, options: [String]) +} + +/// 把 `fill` 模板解析成有序片段、组装回填好的句子。纯值逻辑,便于复用与单测。 +enum DiaryFillTemplate { + + /// 解析模板为有序片段。无方括号时返回单个 `.literal`。 + static func parse(_ template: String) -> [FillSegment] { + let chars = Array(template) + var segs: [FillSegment] = [] + var i = 0 + var literalStart = 0 + func flushLiteral(upTo end: Int) { + if end > literalStart { segs.append(.literal(String(chars[literalStart.. [String] { + let tokens = inner.split(separator: "/") + .map { $0.trimmingCharacters(in: .whitespaces) } + .filter { !$0.isEmpty } + guard tokens.count >= 2, tokens.allSatisfy({ $0.count <= 5 }) else { return [] } + return tokens + } + + /// 模板里的占位槽数量。 + static func slotCount(_ template: String) -> Int { + parse(template).reduce(0) { acc, seg in + if case .slot = seg { return acc + 1 } + return acc + } + } + + /// 用 `values` 填充各槽组装成句:已填用输入值,留空回退为方括号内原文(去方括号,读起来仍自然)。 + static func assemble(_ template: String, values: [String]) -> String { + var out = "" + var idx = 0 + for seg in parse(template) { + switch seg { + case .literal(let t): + out += t + case .slot(let label, _): + let v = idx < values.count + ? values[idx].trimmingCharacters(in: .whitespacesAndNewlines) : "" + out += v.isEmpty ? label : v + idx += 1 + } + } + return out + } +} + +/// 「采纳即就地填空」面板:每个 `[占位]` 一个输入框 + 快填 chip,顶部实时预览整句, +/// 底部「加入记录 / 取消」。确认时回传**填好的、无方括号**的整句。 +struct QuestionFillPanel: View { + let template: String + @Binding var values: [String] + let onCommit: (String) -> Void + let onCancel: () -> Void + + private var segments: [FillSegment] { DiaryFillTemplate.parse(template) } + + /// 抽出占位槽 + 其在 values 里的下标。 + private var slots: [(index: Int, label: String, options: [String])] { + var result: [(Int, String, [String])] = [] + var i = 0 + for seg in segments { + if case let .slot(label, options) = seg { + result.append((i, label, options)) + i += 1 + } + } + return result + } + + var body: some View { + VStack(alignment: .leading, spacing: 10) { + // 实时预览:已填值高亮,未填槽浅色下划线提示。 + previewText + .font(.system(size: 13)) + .fixedSize(horizontal: false, vertical: true) + .frame(maxWidth: .infinity, alignment: .leading) + .padding(10) + .background( + RoundedRectangle(cornerRadius: Tj.Radius.sm, style: .continuous) + .fill(Tj.Palette.sand2) + ) + + ForEach(slots, id: \.index) { slot in + slotEditor(index: slot.index, label: slot.label, options: slot.options) + } + + HStack(spacing: 8) { + Button(action: onCancel) { + Text("取消") + .font(.system(size: 13, weight: .semibold)) + .foregroundStyle(Tj.Palette.text2) + .frame(maxWidth: .infinity) + .padding(.vertical, 9) + .background( + RoundedRectangle(cornerRadius: Tj.Radius.sm, style: .continuous) + .strokeBorder(Tj.Palette.line, lineWidth: 1) + ) + // 背景仅描边、内部透明:.plain 按钮的命中区会只剩文字本身, + // 中间透明区点不到。补 contentShape 让整框可点。 + .contentShape(Rectangle()) + } + .buttonStyle(.plain) + + Button { + onCommit(DiaryFillTemplate.assemble(template, values: values)) + } label: { + HStack(spacing: 5) { + Image(systemName: "text.append") + .font(.system(size: 12, weight: .semibold)) + Text("加入记录") + .font(.system(size: 13, weight: .semibold)) + } + .foregroundStyle(Tj.Palette.paper) + .frame(maxWidth: .infinity) + .padding(.vertical, 9) + .background( + RoundedRectangle(cornerRadius: Tj.Radius.sm, style: .continuous) + .fill(Tj.Palette.ink) + ) + } + .buttonStyle(.plain) + } + } + .padding(.leading, 22) + .padding(.top, 2) + } + + // MARK: - 子部件 + + /// 预览整句:literal 用正文色,已填值用 brick 加粗,未填槽用浅色下划线。 + private var previewText: Text { + var result = Text("") + var idx = 0 + for seg in segments { + switch seg { + case .literal(let t): + result = result + Text(t).foregroundStyle(Tj.Palette.text) + case .slot(let label, _): + let v = idx < values.count + ? values[idx].trimmingCharacters(in: .whitespacesAndNewlines) : "" + if v.isEmpty { + result = result + Text(label).foregroundStyle(Tj.Palette.text3).underline() + } else { + result = result + Text(v).foregroundStyle(Tj.Palette.brick).fontWeight(.semibold) + } + idx += 1 + } + } + return result + } + + private func slotEditor(index: Int, label: String, options: [String]) -> some View { + VStack(alignment: .leading, spacing: 6) { + Text(label) + .font(.system(size: 11, weight: .semibold)) + .foregroundStyle(Tj.Palette.text3) + + if !options.isEmpty { + HStack(spacing: 6) { + ForEach(options, id: \.self) { opt in + let picked = bindingValue(index) == opt + Button { values[index] = opt } label: { + Text(opt) + .font(.system(size: 12, weight: picked ? .semibold : .regular)) + .foregroundStyle(picked ? Tj.Palette.paper : Tj.Palette.text) + .padding(.horizontal, 10) + .padding(.vertical, 5) + .background( + Capsule().fill(picked ? Tj.Palette.ink : Tj.Palette.paper) + ) + .overlay( + Capsule().strokeBorder(Tj.Palette.line, + lineWidth: picked ? 0 : 1) + ) + } + .buttonStyle(.plain) + } + Spacer(minLength: 0) + } + } + + TextField(String(appLoc: "填写\(label)"), text: binding(index)) + .font(.system(size: 13)) + .padding(.horizontal, 12) + .padding(.vertical, 9) + .background( + RoundedRectangle(cornerRadius: Tj.Radius.sm, style: .continuous) + .fill(Tj.Palette.paper) + ) + .overlay( + RoundedRectangle(cornerRadius: Tj.Radius.sm, style: .continuous) + .strokeBorder(Tj.Palette.line, lineWidth: 1) + ) + } + } + + private func bindingValue(_ i: Int) -> String { + i < values.count ? values[i] : "" + } + + private func binding(_ i: Int) -> Binding { + Binding( + get: { i < values.count ? values[i] : "" }, + set: { if i < values.count { values[i] = $0 } } + ) + } +} diff --git a/康康/Features/Home/HomeView.swift b/康康/Features/Home/HomeView.swift index c2d53ea..8d6ef42 100644 --- a/康康/Features/Home/HomeView.swift +++ b/康康/Features/Home/HomeView.swift @@ -37,6 +37,8 @@ struct HomeView: View { .padding(.top, 4) .padding(.bottom, 18) + TodayRemindersCard() + OngoingSymptomsCard() .padding(.bottom, 18) diff --git a/康康/Features/Home/TodayRemindersCard.swift b/康康/Features/Home/TodayRemindersCard.swift new file mode 100644 index 0000000..e49be61 --- /dev/null +++ b/康康/Features/Home/TodayRemindersCard.swift @@ -0,0 +1,118 @@ +import SwiftUI +import SwiftData +import Combine + +/// 主页「今日提醒」卡:汇总今天会触发的自由提醒(CustomReminder)+ 指标提醒(MetricReminder), +/// 按时间升序展示;已过点的行淡化(只表示「时间已过」,不代表已完成——本期不追踪打卡)。 +/// 今天没有任何提醒 → 整卡隐藏(返回 EmptyView,与「持续中症状」卡同款)。 +/// 卡内只读;点右上「全部 ›」打开提醒中心(RemindersListView)管理。 +struct TodayRemindersCard: View { + @Query(sort: \CustomReminder.updatedAt, order: .reverse) + private var customReminders: [CustomReminder] + @Query(sort: \MetricReminder.updatedAt, order: .reverse) + private var metricReminders: [MetricReminder] + + @State private var showingCenter = false + /// 每分钟自走一次,用于刷新「今天」判定与「已过点」淡化(与 OngoingSymptomsCard 同款)。 + @State private var tick: Date = .now + private let timer = Timer.publish(every: 60, on: .main, in: .common).autoconnect() + + /// 今天会触发的提醒,自由提醒 + 指标提醒合并成统一行模型,按时间升序。 + private var items: [TodayItem] { + let cal = Calendar.current + var arr: [TodayItem] = [] + for r in customReminders where r.occurs(on: tick, calendar: cal) { + arr.append(TodayItem(id: "c-\(r.id.uuidString)", + hour: r.hour, minute: r.minute, title: r.title)) + } + for r in metricReminders where r.occurs(on: tick, calendar: cal) { + arr.append(TodayItem(id: "m-\(r.metricId)", + hour: r.hour, minute: r.minute, title: r.displayName)) + } + return arr.sorted { ($0.hour, $0.minute) < ($1.hour, $1.minute) } + } + + var body: some View { + let rows = items + if rows.isEmpty { + EmptyView() + } else { + VStack(alignment: .leading, spacing: 10) { + header(count: rows.count) + VStack(spacing: 8) { + ForEach(rows) { row($0) } + } + } + .padding(.bottom, 18) + .onReceive(timer) { now in tick = now } + .sheet(isPresented: $showingCenter) { + // 列表页依赖外层 NavigationStack 提供标题栏;sheet 形态补「完成」按钮。 + NavigationStack { RemindersListView(presentedAsSheet: true) } + } + } + } + + private func header(count: Int) -> some View { + HStack(spacing: 8) { + Circle() + .fill(Tj.Palette.amber) + .frame(width: 7, height: 7) + Text("今日提醒") + .font(.tjH2()) + .foregroundStyle(Tj.Palette.text) + Text("\(count) 项") + .font(.system(size: 12)) + .foregroundStyle(Tj.Palette.text3) + Spacer() + Button { showingCenter = true } label: { + Text("全部 ›") + .font(.system(size: 12)) + .foregroundStyle(Tj.Palette.text3) + } + .buttonStyle(.plain) + } + } + + private func row(_ item: TodayItem) -> some View { + let isPast = item.isPast(now: tick) + return HStack(spacing: 12) { + Text(item.timeLabel) + .font(.system(size: 14, weight: .semibold).monospacedDigit()) + .foregroundStyle(isPast ? Tj.Palette.text3 : Tj.Palette.ink) + .frame(width: 46, alignment: .leading) + Image(systemName: "bell.fill") + .font(.system(size: 12)) + .foregroundStyle(isPast ? Tj.Palette.text3 : Tj.Palette.amber) + Text(item.title) + .font(.system(size: 15, weight: .medium)) + .foregroundStyle(isPast ? Tj.Palette.text3 : Tj.Palette.text) + .lineLimit(1) + Spacer(minLength: 0) + } + .padding(.horizontal, 14) + .padding(.vertical, 12) + .background( + RoundedRectangle(cornerRadius: Tj.Radius.sm, style: .continuous) + .fill(Tj.Palette.paper) + ) + .shadow(color: Color(red: 0.196, green: 0.157, blue: 0.098).opacity(0.04), + radius: 2, x: 0, y: 1) + } +} + +/// 「今日提醒」行的统一展示模型(自由提醒与指标提醒共用)。 +private struct TodayItem: Identifiable { + let id: String + let hour: Int + let minute: Int + let title: String + + var timeLabel: String { String(format: "%02d:%02d", hour, minute) } + + /// 该提醒的时分是否早于此刻(同一天内「已过点」)。 + func isPast(now: Date) -> Bool { + let c = Calendar.current.dateComponents([.hour, .minute], from: now) + let nowMinutes = (c.hour ?? 0) * 60 + (c.minute ?? 0) + return hour * 60 + minute < nowMinutes + } +} diff --git a/康康/Features/Me/CustomReminderEditSheet.swift b/康康/Features/Me/CustomReminderEditSheet.swift index 9f767fe..5ef6866 100644 --- a/康康/Features/Me/CustomReminderEditSheet.swift +++ b/康康/Features/Me/CustomReminderEditSheet.swift @@ -14,10 +14,16 @@ struct CustomReminderEditSheet: View { @State private var title = "" @State private var note = "" @State private var pickedTime: Date = .now + @State private var frequency: CustomReminder.Frequency = .daily @State private var weekdays: Set = Set(1...7) + @State private var dayOfMonth = 1 + @State private var month = 1 @State private var hydrated = false @State private var showAuthDeniedAlert = false + /// 常用时间快捷预设(时, 分):早 / 午 / 傍晚 / 睡前。 + private let timePresets: [(h: Int, m: Int)] = [(8, 0), (12, 0), (18, 0), (22, 0)] + init(reminder: CustomReminder? = nil) { self.reminder = reminder } @@ -26,7 +32,11 @@ struct CustomReminderEditSheet: View { private var trimmedTitle: String { title.trimmingCharacters(in: .whitespacesAndNewlines) } - private var canSave: Bool { !trimmedTitle.isEmpty && !weekdays.isEmpty } + private var canSave: Bool { + guard !trimmedTitle.isEmpty else { return false } + if frequency == .weekly { return !weekdays.isEmpty } + return true + } var body: some View { NavigationStack { @@ -41,14 +51,26 @@ struct CustomReminderEditSheet: View { } Section { - DatePicker(String(appLoc: "时间"), selection: $pickedTime, - displayedComponents: .hourAndMinute) + Picker(String(appLoc: "重复"), selection: $frequency) { + Text(String(appLoc: "每日")).tag(CustomReminder.Frequency.daily) + Text(String(appLoc: "每周")).tag(CustomReminder.Frequency.weekly) + Text(String(appLoc: "每月")).tag(CustomReminder.Frequency.monthly) + Text(String(appLoc: "每年")).tag(CustomReminder.Frequency.yearly) + } + .pickerStyle(.segmented) + .listRowBackground(Color.clear) + + frequencyDetail + } header: { + Text("重复") } Section { - weekdayRow + timePresetRow + DatePicker(String(appLoc: "时间"), selection: $pickedTime, + displayedComponents: .hourAndMinute) } header: { - Text("重复") + Text("时间") } if isEditing { @@ -74,6 +96,11 @@ struct CustomReminderEditSheet: View { } } .onAppear(perform: hydrate) + .onChange(of: month) { _, newMonth in + // 切月份后,把超出该月最大天数的「日」收回(避免「2月31日」这种永不触发的组合)。 + let maxD = Self.daysInMonth(newMonth) + if dayOfMonth > maxD { dayOfMonth = maxD } + } .alert(String(appLoc: "通知未开启"), isPresented: $showAuthDeniedAlert) { Button(String(appLoc: "好")) { dismiss() } } message: { @@ -82,6 +109,84 @@ struct CustomReminderEditSheet: View { } } + // MARK: - 频率子控件 + + @ViewBuilder + private var frequencyDetail: some View { + switch frequency { + case .daily: + EmptyView() + case .weekly: + weekdayRow + case .monthly: + Picker(String(appLoc: "日期"), selection: $dayOfMonth) { + ForEach(1...31, id: \.self) { d in + Text(String(appLoc: "\(d)日")).tag(d) + } + } + if dayOfMonth >= 29 { skipHint } + case .yearly: + Picker(String(appLoc: "月份"), selection: $month) { + ForEach(1...12, id: \.self) { mo in + Text(String(appLoc: "\(mo)月")).tag(mo) + } + } + Picker(String(appLoc: "日期"), selection: $dayOfMonth) { + ForEach(1...Self.daysInMonth(month), id: \.self) { d in + Text(String(appLoc: "\(d)日")).tag(d) + } + } + if month == 2 && dayOfMonth == 29 { skipHint } // 仅闰年的 2/29 + } + } + + private var skipHint: some View { + Text(String(appLoc: "部分月份无此日,该月将跳过")) + .font(.system(size: 11)) + .foregroundStyle(Tj.Palette.text3) + } + + /// 某月最大天数(2 月取 29,允许设闰年 2/29)。 + private static func daysInMonth(_ month: Int) -> Int { + switch month { + case 2: return 29 + case 4, 6, 9, 11: return 30 + default: return 31 + } + } + + // MARK: - 时间快捷预设 + + private var timePresetRow: some View { + let cal = Calendar.current + let curH = cal.component(.hour, from: pickedTime) + let curM = cal.component(.minute, from: pickedTime) + return HStack(spacing: 8) { + ForEach(Array(timePresets.enumerated()), id: \.offset) { _, preset in + let on = curH == preset.h && curM == preset.m + Button { + pickedTime = cal.date(bySettingHour: preset.h, minute: preset.m, + second: 0, of: pickedTime) ?? pickedTime + } label: { + Text(String(format: "%d:%02d", preset.h, preset.m)) + .font(.system(size: 13, weight: on ? .semibold : .regular)) + .foregroundStyle(on ? Tj.Palette.paper : Tj.Palette.text) + .frame(maxWidth: .infinity, minHeight: 30) + .background( + RoundedRectangle(cornerRadius: 8, style: .continuous) + .fill(on ? Tj.Palette.ink : Tj.Palette.paper) + ) + .overlay( + RoundedRectangle(cornerRadius: 8, style: .continuous) + .strokeBorder(Tj.Palette.line, lineWidth: on ? 0 : 1) + ) + } + .buttonStyle(.plain) + } + } + .listRowBackground(Color.clear) + } + // MARK: - 周几选择(与 RemindersListView 同款) private var weekdayRow: some View { @@ -124,7 +229,10 @@ struct CustomReminderEditSheet: View { if let r = reminder { title = r.title note = r.note + frequency = r.frequency weekdays = Set(r.weekdays) + dayOfMonth = r.dayOfMonth + month = r.month pickedTime = Calendar.current.date( bySettingHour: r.hour, minute: r.minute, second: 0, of: .now ) ?? .now @@ -145,6 +253,9 @@ struct CustomReminderEditSheet: View { r.hour = hour r.minute = minute r.weekdays = sortedDays + r.frequency = frequency + r.dayOfMonth = dayOfMonth + r.month = month r.updatedAt = .now target = r } else { @@ -153,7 +264,10 @@ struct CustomReminderEditSheet: View { note: note.trimmingCharacters(in: .whitespacesAndNewlines), hour: hour, minute: minute, - weekdays: sortedDays + weekdays: sortedDays, + frequency: frequency, + dayOfMonth: dayOfMonth, + month: month ) ctx.insert(new) target = new diff --git a/康康/Features/Timeline/TimelineEntryDetailView.swift b/康康/Features/Timeline/TimelineEntryDetailView.swift new file mode 100644 index 0000000..a7d5530 --- /dev/null +++ b/康康/Features/Timeline/TimelineEntryDetailView.swift @@ -0,0 +1,295 @@ +import SwiftUI +import SwiftData + +/// 时间线条目反查到的源记录,驱动只读详情 sheet。 +/// 注:报告详情这里是 W2 轻量只读版;W4 的 C2 `ReportDetailView`(三 Tab + 对比上次)另建, +/// 届时把时间线报告行改路由到 C2 即可,本类型不与之冲突。 +enum TimelineDetail { + case indicator(Indicator) + case bloodPressure(sys: Indicator, dia: Indicator?) + case report(Report) + case diary(DiaryEntry) + case symptom(Symptom) +} + +/// 时间线条目的只读详情:展示该记录的完整字段。各类型一屏看完,不可编辑。 +struct TimelineEntryDetailView: View { + @Environment(\.dismiss) private var dismiss + let detail: TimelineDetail + + var body: some View { + VStack(spacing: 0) { + header + ScrollView { + VStack(alignment: .leading, spacing: 16) { + bodyContent + } + .padding(.horizontal, 20) + .padding(.vertical, 16) + .frame(maxWidth: .infinity, alignment: .leading) + } + } + .background(Tj.Palette.sand.ignoresSafeArea()) + .presentationDetents([.medium, .large]) + .presentationDragIndicator(.visible) + .presentationBackground(Tj.Palette.sand) + .presentationCornerRadius(Tj.Radius.xl) + } + + // MARK: - Header + + private var header: some View { + HStack(spacing: 12) { + Button { dismiss() } label: { + Image(systemName: "xmark") + .font(.system(size: 16, weight: .semibold)) + .foregroundStyle(Tj.Palette.text) + .frame(width: 32, height: 32) + .background(Circle().fill(Tj.Palette.sand2)) + } + Text(titleText) + .font(.tjH2()) + .foregroundStyle(Tj.Palette.text) + Spacer() + TjLockChip() + } + .padding(.horizontal, 20) + .padding(.vertical, 14) + .background(Tj.Palette.sand) + .overlay(alignment: .bottom) { + Rectangle().fill(Tj.Palette.lineSoft).frame(height: 1) + } + } + + private var titleText: String { + switch detail { + case .indicator: return String(appLoc: "指标详情") + case .bloodPressure: return String(appLoc: "血压详情") + case .report: return String(appLoc: "报告详情") + case .diary: return String(appLoc: "日记详情") + case .symptom: return String(appLoc: "症状详情") + } + } + + @ViewBuilder + private var bodyContent: some View { + switch detail { + case .indicator(let i): indicatorBody(i) + case .bloodPressure(let s, let d): bpBody(sys: s, dia: d) + case .report(let r): reportBody(r) + case .diary(let d): diaryBody(d) + case .symptom(let s): symptomBody(s) + } + } + + // MARK: - 指标 + + private func indicatorBody(_ i: Indicator) -> some View { + card { + HStack(alignment: .firstTextBaseline) { + Text(i.name).font(.tjH2()).foregroundStyle(Tj.Palette.text) + Spacer() + statusChip(i.status) + } + HStack(alignment: .firstTextBaseline, spacing: 4) { + Text(i.value) + .font(.system(size: 30, weight: .bold, design: .rounded)) + .foregroundStyle(i.status == .normal ? Tj.Palette.text : Tj.Palette.brick) + if !i.unit.isEmpty { + Text(i.unit).font(.system(size: 14)).foregroundStyle(Tj.Palette.text3) + } + } + divider + if !i.range.isEmpty { field(String(appLoc: "参考范围"), i.range) } + field(String(appLoc: "记录时间"), Self.dateTimeText(i.capturedAt)) + field(String(appLoc: "来源"), i.report?.title ?? String(appLoc: "异常项快拍")) + if let note = i.note, !note.isEmpty { field(String(appLoc: "备注"), note) } + } + } + + // MARK: - 血压(合并条目) + + private func bpBody(sys: Indicator, dia: Indicator?) -> some View { + let combined: IndicatorStatus = sys.status != .normal + ? sys.status + : (dia?.status ?? .normal) + return card { + HStack(alignment: .firstTextBaseline) { + Text(String(appLoc: "血压")).font(.tjH2()).foregroundStyle(Tj.Palette.text) + Spacer() + statusChip(combined) + } + HStack(alignment: .firstTextBaseline, spacing: 4) { + Text("\(sys.value)/\(dia?.value ?? "—")") + .font(.system(size: 30, weight: .bold, design: .rounded)) + .foregroundStyle(combined == .normal ? Tj.Palette.text : Tj.Palette.brick) + Text("mmHg").font(.system(size: 14)).foregroundStyle(Tj.Palette.text3) + } + divider + if !sys.range.isEmpty { field(String(appLoc: "参考范围"), sys.range) } + field(String(appLoc: "记录时间"), Self.dateTimeText(sys.capturedAt)) + } + } + + // MARK: - 报告 + + private func reportBody(_ r: Report) -> some View { + let sorted = r.indicators.sorted { + ($0.status == .normal ? 1 : 0) < ($1.status == .normal ? 1 : 0) + } + return VStack(alignment: .leading, spacing: 16) { + card { + Text(r.title).font(.tjH2()).foregroundStyle(Tj.Palette.text) + HStack(spacing: 8) { + TjBadge(text: r.type.label, style: .neutral) + Text(Self.dateText(r.reportDate)) + .font(.system(size: 12)).foregroundStyle(Tj.Palette.text3) + if !r.assets.isEmpty { + Text(String(appLoc: "原图\(r.assets.count)张")) + .font(.system(size: 12)).foregroundStyle(Tj.Palette.text3) + } + } + if let inst = r.institution, !inst.isEmpty { + field(String(appLoc: "机构"), inst) + } + } + + if let sum = r.summary, !sum.isEmpty { + card { + Text(String(appLoc: "摘要")) + .font(.system(size: 12, weight: .semibold)).foregroundStyle(Tj.Palette.text2) + Text(sum).font(.system(size: 14)).foregroundStyle(Tj.Palette.text) + .fixedSize(horizontal: false, vertical: true) + } + } + + if !r.indicators.isEmpty { + card { + Text(String(appLoc: "指标")) + .font(.system(size: 12, weight: .semibold)).foregroundStyle(Tj.Palette.text2) + ForEach(sorted) { ind in + HStack { + Text(ind.name).font(.system(size: 14)).foregroundStyle(Tj.Palette.text) + Spacer(minLength: 8) + Text(ind.unit.isEmpty ? ind.value : "\(ind.value) \(ind.unit)") + .font(.system(size: 13, design: .monospaced)) + .foregroundStyle(ind.status == .normal ? Tj.Palette.text2 : Tj.Palette.brick) + statusChip(ind.status) + } + } + } + } + + if let note = r.note, !note.isEmpty { + card { field(String(appLoc: "备注"), note) } + } + } + } + + // MARK: - 日记 + + private func diaryBody(_ d: DiaryEntry) -> some View { + VStack(alignment: .leading, spacing: 16) { + card { + Text(Self.dateTimeText(d.createdAt)) + .font(.system(size: 12)).foregroundStyle(Tj.Palette.text3) + Text(d.content) + .font(.system(size: 15)) + .foregroundStyle(Tj.Palette.text) + .textSelection(.enabled) + .frame(maxWidth: .infinity, alignment: .leading) + .fixedSize(horizontal: false, vertical: true) + if !d.tags.isEmpty { + field(String(appLoc: "标签"), d.tags.map { "#\($0)" }.joined(separator: " ")) + } + } + } + } + + // MARK: - 症状 + + private func symptomBody(_ s: Symptom) -> some View { + card { + HStack(alignment: .firstTextBaseline) { + Text(s.name).font(.tjH2()).foregroundStyle(Tj.Palette.text) + Spacer() + if s.isOngoing { + Text(String(appLoc: "进行中")) + .font(.system(size: 12, weight: .semibold)) + .foregroundStyle(Tj.Palette.brick) + .padding(.horizontal, 8).padding(.vertical, 4) + .background(Capsule().fill(Tj.Palette.brick.opacity(0.14))) + } + } + divider + field(String(appLoc: "程度"), "\(s.severity) / 5") + field(String(appLoc: "开始"), Self.dateTimeText(s.startedAt)) + field(String(appLoc: "结束"), s.endedAt.map(Self.dateTimeText) ?? String(appLoc: "进行中")) + field(String(appLoc: "持续"), formatDuration(s.duration)) + if let note = s.note, !note.isEmpty { field(String(appLoc: "备注"), note) } + if !s.tags.isEmpty { + field(String(appLoc: "标签"), s.tags.map { "#\($0)" }.joined(separator: " ")) + } + } + } + + // MARK: - 复用件 + + @ViewBuilder + private func card(@ViewBuilder content: () -> Content) -> some View { + VStack(alignment: .leading, spacing: 10) { content() } + .padding(14) + .frame(maxWidth: .infinity, alignment: .leading) + .background( + RoundedRectangle(cornerRadius: Tj.Radius.md, style: .continuous) + .fill(Tj.Palette.paper) + ) + .overlay( + RoundedRectangle(cornerRadius: Tj.Radius.md, style: .continuous) + .strokeBorder(Tj.Palette.lineSoft, lineWidth: 1) + ) + } + + private func field(_ label: String, _ value: String) -> some View { + HStack(alignment: .top, spacing: 12) { + Text(label).font(.system(size: 13)).foregroundStyle(Tj.Palette.text3) + Spacer(minLength: 12) + Text(value) + .font(.system(size: 14, weight: .medium)) + .foregroundStyle(Tj.Palette.text) + .multilineTextAlignment(.trailing) + .fixedSize(horizontal: false, vertical: true) + } + } + + private var divider: some View { + Rectangle().fill(Tj.Palette.lineSoft).frame(height: 1) + } + + private func statusChip(_ s: IndicatorStatus) -> some View { + let text: String + let color: Color + let arrow: String + switch s { + case .high: text = String(appLoc: "偏高"); color = Tj.Palette.brick; arrow = "↑" + case .low: text = String(appLoc: "偏低"); color = Tj.Palette.brick; arrow = "↓" + case .normal: text = String(appLoc: "正常"); color = Tj.Palette.leaf; arrow = "" + } + return HStack(spacing: 3) { + if !arrow.isEmpty { Text(arrow).font(.system(size: 11, weight: .bold)) } + Text(text).font(.system(size: 12, weight: .semibold)) + } + .foregroundStyle(color) + .padding(.horizontal, 8) + .padding(.vertical, 4) + .background(Capsule().fill(color.opacity(0.14))) + } + + private nonisolated static func dateTimeText(_ d: Date) -> String { + d.formatted(.dateTime.year().month().day().hour().minute()) + } + + private nonisolated static func dateText(_ d: Date) -> String { + d.formatted(.dateTime.year().month().day()) + } +} diff --git a/康康/Localizable.xcstrings b/康康/Localizable.xcstrings index 6316470..265f282 100644 --- a/康康/Localizable.xcstrings +++ b/康康/Localizable.xcstrings @@ -1,11858 +1,12032 @@ { - "sourceLanguage": "zh-Hans", - "strings": { - "": {}, - " / %lld · 像扫描文档一样对准": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": " / %lld · Align it like scanning a document" + "sourceLanguage" : "zh-Hans", + "strings" : { + "" : { + + }, + " / %lld · 像扫描文档一样对准" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : " / %lld · Align it like scanning a document" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": " / %lld · 書類をスキャンするように合わせる" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : " / %lld · 書類をスキャンするように合わせる" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": " / %lld · 문서를 스캔하듯 맞추세요" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : " / %lld · 문서를 스캔하듯 맞추세요" } } } }, - "—": {}, - "·": {}, - "· · ·": {}, - "· %lld": {}, - "· 按%lld岁调整": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "· Adjusted for age %lld" + "—" : { + + }, + "·" : { + + }, + "· · ·" : { + + }, + "· %lld" : { + + }, + "· 按%lld岁调整" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "· Adjusted for age %lld" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "· %lld歳に合わせて調整" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "· %lld歳に合わせて調整" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "· %lld세 기준으로 조정" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "· %lld세 기준으로 조정" } } } }, - "···": {}, - "(偏瘦)": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "(Underweight)" + "···" : { + + }, + "(偏瘦)" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "(Underweight)" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "(やせ気味)" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "(やせ気味)" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "(저체중)" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "(저체중)" } } } }, - "(正常)": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "(Normal)" + "(正常)" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "(Normal)" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "(正常)" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "(正常)" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "(정상)" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "(정상)" } } } }, - "(空日记)": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "(Empty diary)" + "(空日记)" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "(Empty diary)" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "(空の日記)" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "(空の日記)" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "(빈 일기)" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "(빈 일기)" } } } }, - "(肥胖)": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "(Obese)" + "(肥胖)" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "(Obese)" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "(肥満)" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "(肥満)" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "(비만)" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "(비만)" } } } }, - "(超重)": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "(Overweight)" + "(超重)" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "(Overweight)" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "(過体重)" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "(過体重)" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "(과체중)" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "(과체중)" } } } }, - "「%@」是内置指标的名字 — 录入 grid 里会出现两个同名块": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "\"%@\" is a built-in indicator name — two blocks with the same name will appear in the entry grid" + "「%@」是内置指标的名字 — 录入 grid 里会出现两个同名块" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "\"%@\" is a built-in indicator name — two blocks with the same name will appear in the entry grid" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "「%@」は組み込み指標の名前です — 入力グリッドに同名のブロックが2つ表示されます" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "「%@」は組み込み指標の名前です — 入力グリッドに同名のブロックが2つ表示されます" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "'%@'은(는) 기본 제공 지표 이름이에요 — 입력 그리드에 같은 이름의 블록이 두 개 나타나요" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "'%@'은(는) 기본 제공 지표 이름이에요 — 입력 그리드에 같은 이름의 블록이 두 개 나타나요" } } } }, - "/": {}, - "%@ · 持续 %@": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "%1$@ · lasted %2$@" + "/" : { + + }, + "%@ · 持续 %@" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ · lasted %2$@" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "%1$@ · %2$@ 継続" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ · %2$@ 継続" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "%1$@ · %2$@ 지속" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ · %2$@ 지속" } }, - "zh-Hans": { - "stringUnit": { - "state": "new", - "value": "%1$@ · 持续 %2$@" + "zh-Hans" : { + "stringUnit" : { + "state" : "new", + "value" : "%1$@ · 持续 %2$@" } } } }, - "%@ — %@": { - "localizations": { - "zh-Hans": { - "stringUnit": { - "state": "new", - "value": "%1$@ — %2$@" + "%@ — %@" : { + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "new", + "value" : "%1$@ — %2$@" } } } }, - "%@ · %@": { - "localizations": { - "zh-Hans": { - "stringUnit": { - "state": "new", - "value": "%1$@ · %2$@" + "%@ · %@" : { + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "new", + "value" : "%1$@ · %2$@" } } } }, - "%@ · 共 %lld 页": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "%1$@ · %2$lld pages total" + "%@ · 共 %lld 页" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ · %2$lld pages total" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "%1$@ · 全 %2$lld ページ" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ · 全 %2$lld ページ" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "%1$@ · 총 %2$lld 페이지" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ · 총 %2$lld 페이지" } }, - "zh-Hans": { - "stringUnit": { - "state": "new", - "value": "%1$@ · 共 %2$lld 页" + "zh-Hans" : { + "stringUnit" : { + "state" : "new", + "value" : "%1$@ · 共 %2$lld 页" } } } }, - "%@ %@%@": { - "localizations": { - "zh-Hans": { - "stringUnit": { - "state": "new", - "value": "%1$@ %2$@%3$@" + "%@ %@%@" : { + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "new", + "value" : "%1$@ %2$@%3$@" } } } }, - "%@ 解锁": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Unlock with %@" + "%@ 解锁" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unlock with %@" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "%@ でロック解除" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ でロック解除" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "%@(으)로 잠금 해제" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@(으)로 잠금 해제" + } + } + } + }, + "%@/%@" : { + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "new", + "value" : "%1$@/%2$@" } } } }, - "%@型": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Type %@" + "%@型" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Type %@" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "%@型" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@型" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "%@형" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@형" } } } }, - "%lld": {}, - "%lld / %lld 项启用": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "%1$lld / %2$lld enabled" + "%lld" : { + + }, + "%lld / %lld 项启用" : { + "extractionState" : "stale", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$lld / %2$lld enabled" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "%1$lld / %2$lld 件 有効" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$lld / %2$lld 件 有効" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "%1$lld / %2$lld 개 사용" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$lld / %2$lld 개 사용" } }, - "zh-Hans": { - "stringUnit": { - "state": "new", - "value": "%1$lld / %2$lld 项启用" + "zh-Hans" : { + "stringUnit" : { + "state" : "new", + "value" : "%1$lld / %2$lld 项启用" } } } }, - "%lld / 5": {}, - "%lld 个": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "%lld" + "%lld / 5" : { + + }, + "%lld 个" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "%lld" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "%lld 件" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%lld 件" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "%lld 개" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "%lld 개" } } } }, - "%lld 个建议": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "%lld suggestions" + "%lld 个建议" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "%lld suggestions" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "%lld 件の提案" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%lld 件の提案" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "제안 %lld 개" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "제안 %lld 개" } } } }, - "%lld 个月": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "%lld months" + "%lld 个月" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "%lld months" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "%lld か月" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%lld か月" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "%lld 개월" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "%lld 개월" } } } }, - "%lld 份": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "%lld reports" + "%lld 份" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "%lld reports" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "%lld 件" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%lld 件" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "%lld 건" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "%lld 건" } } } }, - "%lld 份 · %lld 项指标 · 端侧加密": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "%1$lld reports · %2$lld indicators · on-device encryption" + "%lld 份 · %lld 项指标 · 端侧加密" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$lld reports · %2$lld indicators · on-device encryption" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "%1$lld 件 · 指標 %2$lld 項目 · オンデバイス暗号化" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$lld 件 · 指標 %2$lld 項目 · オンデバイス暗号化" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "%1$lld 건 · 지표 %2$lld 개 · 온디바이스 암호화" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$lld 건 · 지표 %2$lld 개 · 온디바이스 암호화" } }, - "zh-Hans": { - "stringUnit": { - "state": "new", - "value": "%1$lld 份 · %2$lld 项指标 · 端侧加密" + "zh-Hans" : { + "stringUnit" : { + "state" : "new", + "value" : "%1$lld 份 · %2$lld 项指标 · 端侧加密" } } } }, - "%lld 分钟": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "%lld min" + "%lld 分钟" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "%lld min" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "%lld 分" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%lld 分" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "%lld 분" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "%lld 분" } } } }, - "%lld 天": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "%lld days" + "%lld 天" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "%lld days" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "%lld 日" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%lld 日" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "%lld 일" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "%lld 일" } } } }, - "%lld 天 %lld 小时": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "%1$lld d %2$lld h" + "%lld 天 %lld 小时" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$lld d %2$lld h" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "%1$lld 日 %2$lld 時間" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$lld 日 %2$lld 時間" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "%1$lld 일 %2$lld 시간" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$lld 일 %2$lld 시간" } }, - "zh-Hans": { - "stringUnit": { - "state": "new", - "value": "%1$lld 天 %2$lld 小时" + "zh-Hans" : { + "stringUnit" : { + "state" : "new", + "value" : "%1$lld 天 %2$lld 小时" } } } }, - "%lld 小时": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "%lld h" + "%lld 小时" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "%lld h" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "%lld 時間" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%lld 時間" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "%lld 시간" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "%lld 시간" } } } }, - "%lld 小时 %lld 分": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "%1$lld h %2$lld min" + "%lld 小时 %lld 分" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$lld h %2$lld min" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "%1$lld 時間 %2$lld 分" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$lld 時間 %2$lld 分" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "%1$lld 시간 %2$lld 분" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$lld 시간 %2$lld 분" } }, - "zh-Hans": { - "stringUnit": { - "state": "new", - "value": "%1$lld 小时 %2$lld 分" + "zh-Hans" : { + "stringUnit" : { + "state" : "new", + "value" : "%1$lld 小时 %2$lld 分" } } } }, - "%lld 年": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "%lld years" + "%lld 年" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "%lld years" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "%lld 年" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%lld 年" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "%lld 년" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "%lld 년" } } } }, - "%lld 条": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "%lld entries" + "%lld 条" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "%lld entries" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "%lld 件" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%lld 件" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "%lld 건" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "%lld 건" } } } }, - "%lld 条 · 近 %@": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "%1$lld entries · last %2$@" + "%lld 条 · 近 %@" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$lld entries · last %2$@" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "%1$lld 件 · 直近 %2$@" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$lld 件 · 直近 %2$@" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "%1$lld 건 · 최근 %2$@" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$lld 건 · 최근 %2$@" } }, - "zh-Hans": { - "stringUnit": { - "state": "new", - "value": "%1$lld 条 · 近 %2$@" + "zh-Hans" : { + "stringUnit" : { + "state" : "new", + "value" : "%1$lld 条 · 近 %2$@" } } } }, - "%lld 页 · 100%% 本地推理 · 已用 %llds": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "%1$lld pages · 100%% on-device · %2$llds elapsed" + "%lld 页 · 100%% 本地推理 · 已用 %llds" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$lld pages · 100%% on-device · %2$llds elapsed" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "%1$lld ページ · 100%% オンデバイス推論 · %2$llds 経過" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$lld ページ · 100%% オンデバイス推論 · %2$llds 経過" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "%1$lld 페이지 · 100%% 온디바이스 추론 · %2$llds 경과" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$lld 페이지 · 100%% 온디바이스 추론 · %2$llds 경과" } }, - "zh-Hans": { - "stringUnit": { - "state": "new", - "value": "%1$lld 页 · 100%% 本地推理 · 已用 %2$llds" + "zh-Hans" : { + "stringUnit" : { + "state" : "new", + "value" : "%1$lld 页 · 100%% 本地推理 · 已用 %2$llds" } } } }, - "%lld 项": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "%lld indicators" + "%lld 项" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "%lld indicators" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "%lld 項目" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%lld 項目" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "%lld 개" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "%lld 개" } } } }, - "%lld 项偏高": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "%lld high" + "%lld 项偏高" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "%lld high" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "%lld 項目 高い" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%lld 項目 高い" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "%lld 개 높음" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "%lld 개 높음" } } } }, - "%lld 项启用": { - "extractionState": "stale", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "%lld enabled" + "%lld 项启用" : { + "extractionState" : "stale", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "%lld enabled" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "%lld 項目 有効" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%lld 項目 有効" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "%lld 개 사용" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "%lld 개 사용" } } } }, - "%lld.": {}, - "%lld/%lld 就绪": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "%1$lld/%2$lld ready" + "%lld." : { + + }, + "%lld/%lld 就绪" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$lld/%2$lld ready" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "%1$lld/%2$lld 準備完了" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$lld/%2$lld 準備完了" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "%1$lld/%2$lld 준비됨" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$lld/%2$lld 준비됨" } }, - "zh-Hans": { - "stringUnit": { - "state": "new", - "value": "%1$lld/%2$lld 就绪" + "zh-Hans" : { + "stringUnit" : { + "state" : "new", + "value" : "%1$lld/%2$lld 就绪" } } } }, - "%lld%%": {}, - "%lld岁": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "%lld yrs" + "%lld%%" : { + + }, + "%lld岁" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "%lld yrs" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "%lld 歳" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%lld 歳" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "%lld 세" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "%lld 세" } } } }, - "+%lld": {}, - "< 3.40": {}, - "⚠️ 通知权限已关闭,去「设置 → 康康 → 通知」打开": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "⚠️ Notifications are off. Turn them on in Settings → Kangkang → Notifications" + "%lld日" : { + + }, + "%lld月" : { + + }, + "+%lld" : { + + }, + "< 3.40" : { + + }, + "⚠️ 通知权限已关闭,去「设置 → 康康 → 通知」打开" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "⚠️ Notifications are off. Turn them on in Settings → Kangkang → Notifications" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "⚠️ 通知が許可されていません。「設定 → Kangkang → 通知」で有効にしてください" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "⚠️ 通知が許可されていません。「設定 → Kangkang → 通知」で有効にしてください" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "⚠️ 알림 권한이 꺼져 있어요. '설정 → Kangkang → 알림'에서 켜세요" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "⚠️ 알림 권한이 꺼져 있어요. '설정 → Kangkang → 알림'에서 켜세요" } } } }, - "1 项偏低": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "1 low" + "1 项偏低" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "1 low" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "1 項目 低い" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "1 項目 低い" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "1 개 낮음" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "1 개 낮음" } } } }, - "3 页": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "3 pages" + "3 页" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "3 pages" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "3 ページ" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "3 ページ" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "3 페이지" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "3 페이지" } } } }, - "3 项偏高": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "3 high" + "3 项偏高" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "3 high" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "3 項目 高い" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "3 項目 高い" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "3 개 높음" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "3 개 높음" } } } }, - "3.84": {}, - "100% 本地推理 · 模型仅需下载一次": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "100% on-device · download the model just once" + "3.84" : { + + }, + "100% 本地推理 · 模型仅需下载一次" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "100% on-device · download the model just once" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "100% オンデバイス推論 · モデルのダウンロードは一度だけ" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "100% オンデバイス推論 · モデルのダウンロードは一度だけ" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "100% 온디바이스 추론 · 모델은 한 번만 다운로드" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "100% 온디바이스 추론 · 모델은 한 번만 다운로드" } } } }, - "2026 / 05 / 25 · 协和医院体检中心": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "2026 / 05 / 25 · PUMC Hospital Checkup Center" + "2026 / 05 / 25 · 协和医院体检中心" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "2026 / 05 / 25 · PUMC Hospital Checkup Center" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "2026 / 05 / 25 · 協和病院 健診センター" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "2026 / 05 / 25 · 協和病院 健診センター" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "2026 / 05 / 25 · 협화병원 건강검진센터" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "2026 / 05 / 25 · 협화병원 건강검진센터" } } } }, - "2026 春季年度体检": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "2026 Spring Annual Checkup" + "2026 春季年度体检" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "2026 Spring Annual Checkup" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "2026年 春の定期健康診断" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "2026年 春の定期健康診断" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "2026 봄 연례 건강검진" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "2026 봄 연례 건강검진" } } } }, - "A 型": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Type A" + "A 型" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Type A" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "A型" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "A型" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "A형" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "A형" } } } }, - "AB 型": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Type AB" + "AB 型" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Type AB" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "AB型" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "AB型" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "AB형" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "AB형" } } } }, - "AI 已识别到 1 项指标": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "AI detected 1 indicator" + "AI 已识别到 1 项指标" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "AI detected 1 indicator" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "AIが指標を1項目認識しました" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "AIが指標を1項目認識しました" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "AI가 지표 1개를 인식했어요" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "AI가 지표 1개를 인식했어요" } } } }, - "AI 思考中… 本地推理,通常 5-10 秒": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "AI is thinking… on-device inference, usually 5-10 sec" + "AI 思考中… 本地推理,通常 5-10 秒" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "AI is thinking… on-device inference, usually 5-10 sec" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "AIが考えています… オンデバイス推論、通常5〜10秒" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "AIが考えています… オンデバイス推論、通常5〜10秒" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "AI가 생각 중… 온디바이스 추론, 보통 5~10초" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "AI가 생각 중… 온디바이스 추론, 보통 5~10초" } } } }, - "AI 推理在设备本地完成;除下载 AI 模型外,App 不会主动上传你的健康数据。": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "AI inference runs locally on your device; aside from downloading the AI models, the app never uploads your health data." + "AI 推理在设备本地完成;除下载 AI 模型外,App 不会主动上传你的健康数据。" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "AI inference runs locally on your device; aside from downloading the AI models, the app never uploads your health data." } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "AI推論はデバイス上でローカルに実行されます。AIモデルのダウンロードを除き、アプリがあなたの健康データを自発的にアップロードすることはありません。" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "AI推論はデバイス上でローカルに実行されます。AIモデルのダウンロードを除き、アプリがあなたの健康データを自発的にアップロードすることはありません。" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "AI 추론은 기기에서 로컬로 처리됩니다. AI 모델 다운로드를 제외하면 앱이 건강 데이터를 임의로 업로드하지 않아요." + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "AI 추론은 기기에서 로컬로 처리됩니다. AI 모델 다운로드를 제외하면 앱이 건강 데이터를 임의로 업로드하지 않아요." } } } }, - "AI 模型尚未准备好": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "AI model isn't ready yet" + "AI 模型尚未准备好" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "AI model isn't ready yet" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "AIモデルの準備ができていません" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "AIモデルの準備ができていません" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "AI 모델이 아직 준비되지 않았어요" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "AI 모델이 아직 준비되지 않았어요" } } } }, - "AI 模型尚未准备好,请先到「我的 · 模型管理」下载。": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "AI model isn't ready yet. Please download it under \"Me · Model Management\" first." + "AI 模型尚未准备好,请先到「我的 · 模型管理」下载。" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "AI model isn't ready yet. Please download it under \"Me · Model Management\" first." } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "AIモデルの準備ができていません。先に「マイ · モデル管理」からダウンロードしてください。" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "AIモデルの準備ができていません。先に「マイ · モデル管理」からダウンロードしてください。" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "AI 모델이 아직 준비되지 않았어요. 먼저 「마이 · 모델 관리」에서 다운로드하세요." + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "AI 모델이 아직 준비되지 않았어요. 먼저 「마이 · 모델 관리」에서 다운로드하세요." } } } }, - "AI 没有给出建议,请稍后重试": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "AI didn't return any suggestions. Please try again later." + "AI 没有给出建议,请稍后重试" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "AI didn't return any suggestions. Please try again later." } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "AIから提案が得られませんでした。後でもう一度お試しください。" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "AIから提案が得られませんでした。後でもう一度お試しください。" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "AI가 제안을 내놓지 못했어요. 잠시 후 다시 시도하세요." + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "AI가 제안을 내놓지 못했어요. 잠시 후 다시 시도하세요." } } } }, - "AI 解读基于通用健康知识生成,并不掌握你完整的病史与个体情况,仅供日常记录参考。": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "AI interpretations are generated from general health knowledge and do not account for your full medical history or individual condition. They are for everyday reference only." + "AI 解读基于通用健康知识生成,并不掌握你完整的病史与个体情况,仅供日常记录参考。" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "AI interpretations are generated from general health knowledge and do not account for your full medical history or individual condition. They are for everyday reference only." } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "AIによる解説は一般的な健康知識に基づいて生成されており、あなたの完全な病歴や個別の状況を把握しているわけではありません。日常の記録の参考程度にご利用ください。" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "AIによる解説は一般的な健康知識に基づいて生成されており、あなたの完全な病歴や個別の状況を把握しているわけではありません。日常の記録の参考程度にご利用ください。" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "AI 해석은 일반적인 건강 지식을 바탕으로 생성되며, 당신의 전체 병력이나 개별 상황을 알지 못해요. 일상 기록 참고용으로만 사용하세요." + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "AI 해석은 일반적인 건강 지식을 바탕으로 생성되며, 당신의 전체 병력이나 개별 상황을 알지 못해요. 일상 기록 참고용으로만 사용하세요." } } } }, - "AI 识别与解读可能出现错误或遗漏:拍照得到的数值、单位、参考范围请务必与原始报告核对,": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "AI recognition and interpretation may contain errors or omissions: always verify the values, units, and reference ranges captured from photos against the original report." + "AI 识别与解读可能出现错误或遗漏:拍照得到的数值、单位、参考范围请务必与原始报告核对," : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "AI recognition and interpretation may contain errors or omissions: always verify the values, units, and reference ranges captured from photos against the original report." } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "AIの認識・解説には誤りや見落としが生じる場合があります。撮影で得られた数値・単位・基準範囲は必ず元のレポートと照合してください。" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "AIの認識・解説には誤りや見落としが生じる場合があります。撮影で得られた数値・単位・基準範囲は必ず元のレポートと照合してください。" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "AI 인식과 해석에는 오류나 누락이 있을 수 있어요. 촬영으로 얻은 수치, 단위, 참고 범위는 반드시 원본 리포트와 대조하세요." + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "AI 인식과 해석에는 오류나 누락이 있을 수 있어요. 촬영으로 얻은 수치, 단위, 참고 범위는 반드시 원본 리포트와 대조하세요." } } } }, - "AI 辅助 · 医生角度查漏补缺": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "AI assist · gap-checking from a doctor's perspective" + "AI 辅助 · 医生角度查漏补缺" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "AI assist · gap-checking from a doctor's perspective" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "AIアシスト · 医師の視点で抜け漏れチェック" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "AIアシスト · 医師の視点で抜け漏れチェック" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "AI 도움 · 의사 관점에서 빠진 부분 점검" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "AI 도움 · 의사 관점에서 빠진 부분 점검" } } } }, - "App 内所有 AI 生成的解读、趋势分析与问答内容仅供信息参考,": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "All AI-generated interpretations, trend analyses, and Q&A content in the app are for informational reference only," + "App 内所有 AI 生成的解读、趋势分析与问答内容仅供信息参考," : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "All AI-generated interpretations, trend analyses, and Q&A content in the app are for informational reference only," } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "アプリ内のAIが生成したすべての解説・トレンド分析・Q&Aの内容は情報の参考にとどまり、" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "アプリ内のAIが生成したすべての解説・トレンド分析・Q&Aの内容は情報の参考にとどまり、" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "앱 내 AI가 생성한 모든 해석, 추세 분석, 질문·답변 내용은 정보 참고용일 뿐이며," + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "앱 내 AI가 생성한 모든 해석, 추세 분석, 질문·답변 내용은 정보 참고용일 뿐이며," } } } }, - "B 型": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Type B" + "B 型" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Type B" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "B型" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "B型" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "B형" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "B형" } } } }, - "BMI: %@ %@": { - "localizations": { - "zh-Hans": { - "stringUnit": { - "state": "new", - "value": "BMI: %1$@ %2$@" + "BMI: %@ %@" : { + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "new", + "value" : "BMI: %1$@ %2$@" } } } }, - "cm": {}, - "end": {}, - "Face ID 启动锁": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Face ID Lock" + "cm" : { + + }, + "end" : { + + }, + "Face ID 启动锁" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Face ID Lock" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "Face IDロック" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "Face IDロック" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "Face ID 잠금" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "Face ID 잠금" } } } }, - "hi": {}, - "kg": {}, - "LDL-C": {}, - "lo": {}, - "mmHg": {}, - "mmol/L": {}, - "O 型": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Type O" + "hi" : { + + }, + "kg" : { + + }, + "LDL-C" : { + + }, + "lo" : { + + }, + "mmHg" : { + + }, + "mmol/L" : { + + }, + "O 型" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Type O" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "O型" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "O型" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "O형" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "O형" } } } }, - "p.%lld": {}, - "QWEN2.5-VL · ON-DEVICE · SME2": {}, - "start": {}, - "VL 模型尚未就绪": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "VL model not ready yet" + "p.%lld" : { + + }, + "QWEN2.5-VL · ON-DEVICE · SME2" : { + + }, + "start" : { + + }, + "VL 模型尚未就绪" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "VL model not ready yet" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "VLモデルはまだ準備できていません" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "VLモデルはまだ準備できていません" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "VL 모델이 아직 준비되지 않았어요" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "VL 모델이 아직 준비되지 않았어요" } } } }, - "VL 模型未就绪": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "VL model not ready" + "VL 模型未就绪" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "VL model not ready" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "VLモデルが準備できていません" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "VLモデルが準備できていません" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "VL 모델이 준비되지 않았어요" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "VL 모델이 준비되지 않았어요" } } } }, - "VL 模型未就绪,先手动录入": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "VL model not ready, enter manually for now" + "VL 模型未就绪,先手动录入" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "VL model not ready, enter manually for now" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "VLモデルが準備できていません。まず手動で入力してください" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "VLモデルが準備できていません。まず手動で入力してください" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "VL 모델이 준비되지 않았어요. 우선 수동으로 입력하세요" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "VL 모델이 준비되지 않았어요. 우선 수동으로 입력하세요" } } } }, - "VL 输出无法解析:%@": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Could not parse VL output: %@" + "VL 输出无法解析:%@" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Could not parse VL output: %@" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "VLの出力を解析できません:%@" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "VLの出力を解析できません:%@" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "VL 출력을 해석할 수 없어요: %@" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "VL 출력을 해석할 수 없어요: %@" } } } }, - "一": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Mon" + "一" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mon" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "月" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "月" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "월" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "월" } } } }, - "一句话总结": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "One-line summary" + "一句话总结" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "One-line summary" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "一言まとめ" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "一言まとめ" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "한 줄 요약" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "한 줄 요약" } } } }, - "一张图,几秒搞定": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "One photo, done in seconds" + "一张图,几秒搞定" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "One photo, done in seconds" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "写真1枚、数秒で完了" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "写真1枚、数秒で完了" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "사진 한 장, 몇 초면 끝" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "사진 한 장, 몇 초면 끝" } } } }, - "三": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Wed" + "三" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wed" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "水" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "水" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "수" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "수" } } } }, - "上限": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Upper limit" + "上限" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Upper limit" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "上限" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "上限" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "상한" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "상한" } } } }, - "下午好": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Good afternoon" + "下午好" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Good afternoon" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "こんにちは" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "こんにちは" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "좋은 오후예요" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "좋은 오후예요" } } } }, - "下载中": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Downloading" + "下载中" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Downloading" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "ダウンロード中" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ダウンロード中" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "다운로드 중" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "다운로드 중" } } } }, - "下载中…": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Downloading…" + "下载中…" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Downloading…" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "ダウンロード中…" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ダウンロード中…" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "다운로드 중…" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "다운로드 중…" } } } }, - "下载全部模型 · %@": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Download all models · %@" + "下载全部模型 · %@" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Download all models · %@" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "すべてのモデルをダウンロード · %@" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "すべてのモデルをダウンロード · %@" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "모든 모델 다운로드 · %@" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "모든 모델 다운로드 · %@" } } } }, - "下载失败": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Download failed" + "下载失败" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Download failed" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "ダウンロードに失敗しました" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ダウンロードに失敗しました" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "다운로드에 실패했어요" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "다운로드에 실패했어요" } } } }, - "下载失败(HTTP %lld)": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Download failed (HTTP %lld)" + "下载失败(HTTP %lld)" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Download failed (HTTP %lld)" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "ダウンロードに失敗しました(HTTP %lld)" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ダウンロードに失敗しました(HTTP %lld)" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "다운로드에 실패했어요(HTTP %lld)" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "다운로드에 실패했어요(HTTP %lld)" } } } }, - "下限": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Lower limit" + "下限" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lower limit" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "下限" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "下限" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "하한" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "하한" } } } }, - "不愿透露": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Prefer not to say" + "不愿透露" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prefer not to say" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "回答しない" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "回答しない" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "밝히고 싶지 않음" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "밝히고 싶지 않음" } } } }, - "不构成医疗建议,也不能替代执业医师、药师或其他专业人员的面诊、检查与意见。": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "This does not constitute medical advice and cannot replace in-person consultation, examination, or opinion from licensed physicians, pharmacists, or other professionals." + "不构成医疗建议,也不能替代执业医师、药师或其他专业人员的面诊、检查与意见。" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "This does not constitute medical advice and cannot replace in-person consultation, examination, or opinion from licensed physicians, pharmacists, or other professionals." } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "これは医療上の助言を構成するものではなく、医師、薬剤師その他の専門家による対面診療、検査、意見に代わるものではありません。" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "これは医療上の助言を構成するものではなく、医師、薬剤師その他の専門家による対面診療、検査、意見に代わるものではありません。" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "의료 조언이 아니며, 의사·약사 또는 기타 전문가의 대면 진료, 검사 및 소견을 대신할 수 없어요." + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "의료 조언이 아니며, 의사·약사 또는 기타 전문가의 대면 진료, 검사 및 소견을 대신할 수 없어요." } } } }, - "不知道": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Don't know" + "不知道" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Don't know" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "わからない" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "わからない" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "모름" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "모름" } } } }, - "两个模型都已就绪": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Both models are ready" + "两个模型都已就绪" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Both models are ready" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "両方のモデルが準備できました" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "両方のモデルが準備できました" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "두 모델 모두 준비됐어요" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "두 모델 모두 준비됐어요" } } } }, - "个人资料": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Profile" + "个人资料" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Profile" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "プロフィール" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "プロフィール" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "개인 정보" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "개인 정보" } } } }, - "主要功能": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Main features" + "主要功能" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Main features" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "主な機能" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "主な機能" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "주요 기능" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "주요 기능" } } } }, - "主页": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Home" + "主页" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Home" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "ホーム" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ホーム" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "홈" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "홈" } } } }, - "二": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Tue" + "二" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tue" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "火" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "火" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "화" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "화" } } } }, - "五": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Fri" + "五" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fri" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "金" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "金" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "금" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "금" } } } }, - "仅供参考,不构成医疗建议": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "For reference only, not medical advice" + "仅供参考,不构成医疗建议" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "For reference only, not medical advice" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "参考用です。医療上の助言ではありません" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "参考用です。医療上の助言ではありません" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "참고용이며 의료 조언이 아니에요" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "참고용이며 의료 조언이 아니에요" } } } }, - "今天": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Today" + "今天" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Today" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "今日" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "今日" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "오늘" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "오늘" } } } }, - "今天开始": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Started today" + "今天开始" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Started today" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "今日から" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "今日から" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "오늘 시작" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "오늘 시작" } } } }, - "今天结束": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Ended today" + "今天结束" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ended today" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "今日まで" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "今日まで" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "오늘 종료" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "오늘 종료" } } } }, - "今天身体怎么样?吃了什么药、有什么感觉?": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "How are you feeling today? What did you take, and how do you feel?" + "今天身体怎么样?吃了什么药、有什么感觉?" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "How are you feeling today? What did you take, and how do you feel?" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "今日の体調はどうですか?何の薬を飲み、どんな感じですか?" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "今日の体調はどうですか?何の薬を飲み、どんな感じですか?" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "오늘 몸 상태는 어떠세요? 어떤 약을 드셨고, 어떤 느낌인가요?" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "오늘 몸 상태는 어떠세요? 어떤 약을 드셨고, 어떤 느낌인가요?" } } } }, - "从文件导入(离线)": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Import from file (offline)" + "今日提醒" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Today's Reminders" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "ファイルから取り込む(オフライン)" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "今日のリマインダー" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "파일에서 가져오기(오프라인)" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "오늘의 알림" } } } }, - "从相册选 ≤5 张": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Pick up to 5 from album" + "从文件导入(离线)" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Import from file (offline)" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "アルバムから5枚まで選択" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ファイルから取り込む(オフライン)" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "앨범에서 최대 5장 선택" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "파일에서 가져오기(오프라인)" } } } }, - "任何健康决策(是否就医、用药、调整治疗方案等)请咨询专业医疗人员,并以其意见为准。": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "For any health decision (whether to seek care, take medication, adjust treatment, etc.), consult a qualified medical professional and follow their advice." + "从相册选 ≤5 张" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pick up to 5 from album" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "あらゆる健康上の判断(受診・服薬・治療方針の変更など)については、専門の医療従事者に相談し、その意見に従ってください。" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "アルバムから5枚まで選択" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "모든 건강 관련 결정(진료 여부, 복약, 치료 방안 조정 등)은 전문 의료인과 상담하고 그 의견을 따르세요." + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "앨범에서 최대 5장 선택" } } } }, - "但本地 AI 相关功能可能无法运行。": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "However, on-device AI features may not work." + "任何健康决策(是否就医、用药、调整治疗方案等)请咨询专业医疗人员,并以其意见为准。" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "For any health decision (whether to seek care, take medication, adjust treatment, etc.), consult a qualified medical professional and follow their advice." } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "ただし、オンデバイスAI関連の機能は動作しない場合があります。" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "あらゆる健康上の判断(受診・服薬・治療方針の変更など)については、専門の医療従事者に相談し、その意見に従ってください。" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "다만 온디바이스 AI 관련 기능은 작동하지 않을 수 있어요." + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "모든 건강 관련 결정(진료 여부, 복약, 치료 방안 조정 등)은 전문 의료인과 상담하고 그 의견을 따르세요." } } } }, - "位置、可能诱因…": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Location, possible triggers…" + "但本地 AI 相关功能可能无法运行。" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "However, on-device AI features may not work." } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "部位、考えられる誘因…" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ただし、オンデバイスAI関連の機能は動作しない場合があります。" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "위치, 가능한 유발 요인…" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "다만 온디바이스 AI 관련 기능은 작동하지 않을 수 있어요." } } } }, - "低密度脂蛋白": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "LDL" + "位置、可能诱因…" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Location, possible triggers…" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "LDLコレステロール" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "部位、考えられる誘因…" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "LDL 콜레스테롤" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "위치, 가능한 유발 요인…" } } } }, - "低密度脂蛋白 3.84 mmol/L ↑": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "LDL 3.84 mmol/L ↑" + "低密度脂蛋白" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "LDL" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "LDLコレステロール 3.84 mmol/L ↑" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "LDLコレステロール" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "LDL 콜레스테롤 3.84 mmol/L ↑" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "LDL 콜레스테롤" } } } }, - "低密度脂蛋白胆固醇": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "LDL-C" + "低密度脂蛋白 3.84 mmol/L ↑" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "LDL 3.84 mmol/L ↑" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "LDLコレステロール" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "LDLコレステロール 3.84 mmol/L ↑" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "LDL 콜레스테롤" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "LDL 콜레스테롤 3.84 mmol/L ↑" } } } }, - "体 检 报 告 (第 %lld 页)": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Checkup Report (Page %lld)" + "低密度脂蛋白胆固醇" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "LDL-C" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "健康診断レポート(%lldページ)" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "LDLコレステロール" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "건강검진 리포트(%lld페이지)" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "LDL 콜레스테롤" } } } }, - "体检报告": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Checkup report" + "体 检 报 告 (第 %lld 页)" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Checkup Report (Page %lld)" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "健康診断レポート" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "健康診断レポート(%lldページ)" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "건강검진 리포트" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "건강검진 리포트(%lld페이지)" } } } }, - "体检报告 · 影像报告": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Checkup report · Imaging report" + "体检报告" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Checkup report" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "健康診断レポート · 画像レポート" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "健康診断レポート" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "건강검진 리포트 · 영상 리포트" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "건강검진 리포트" } } } }, - "体检报告归档": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Archive a checkup report" + "体检报告 · 影像报告" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Checkup report · Imaging report" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "健康診断レポートを保存" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "健康診断レポート · 画像レポート" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "건강검진 리포트 보관" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "건강검진 리포트 · 영상 리포트" } } } }, - "体温": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Temperature" + "体检报告归档" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Archive a checkup report" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "体温" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "健康診断レポートを保存" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "체온" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "건강검진 리포트 보관" } } } }, - "体重": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Weight" + "体温" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Temperature" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "体重" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "体温" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "체중" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "체온" } } } }, - "你可以拍下体检报告、化验单和影像资料,图片与数据默认保存在本机;": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "You can photograph checkup reports, lab reports, and imaging materials; images and data are stored on your device by default;" + "体重" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Weight" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "健康診断レポート、検査結果、画像資料を撮影できます。画像とデータは既定で本体に保存されます。" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "体重" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "건강검진 리포트, 검사 결과, 영상 자료를 촬영할 수 있어요. 이미지와 데이터는 기본적으로 기기에 저장돼요." + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "체중" } } } }, - "你的健康档案已加密保护": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Your health records are protected with encryption" + "你可以拍下体检报告、化验单和影像资料,图片与数据默认保存在本机;" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "You can photograph checkup reports, lab reports, and imaging materials; images and data are stored on your device by default;" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "あなたの健康記録は暗号化で保護されています" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "健康診断レポート、検査結果、画像資料を撮影できます。画像とデータは既定で本体に保存されます。" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "건강 기록이 암호화로 보호되고 있어요" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "건강검진 리포트, 검사 결과, 영상 자료를 촬영할 수 있어요. 이미지와 데이터는 기본적으로 기기에 저장돼요." } } } }, - "使用注意": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Usage notes" + "你的健康档案已加密保护" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Your health records are protected with encryption" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "ご利用上の注意" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "あなたの健康記録は暗号化で保護されています" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "사용 시 주의사항" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "건강 기록이 암호화로 보호되고 있어요" } } } }, - "使用蜂窝网络下载?": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Download over cellular?" + "使用注意" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Usage notes" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "モバイル通信でダウンロードしますか?" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ご利用上の注意" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "셀룰러 네트워크로 다운로드할까요?" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "사용 시 주의사항" } } } }, - "例:最近血糖好像不稳,把过去三个月的化验单整理一下": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "e.g. My glucose seems unstable lately—organize my lab reports from the past three months" + "使用蜂窝网络下载?" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Download over cellular?" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "例:最近血糖値が不安定なようなので、過去3か月の検査結果を整理したい" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "モバイル通信でダウンロードしますか?" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "예: 최근 혈당이 불안정한 것 같은데, 지난 3개월간의 검사 결과를 정리해 주세요" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "셀룰러 네트워크로 다운로드할까요?" } } } }, - "例:我感冒3天了,把最近一个月的健康情况给医生看": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "e.g. I've had a cold for 3 days—show my health over the past month to the doctor" + "例:最近血糖好像不稳,把过去三个月的化验单整理一下" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "e.g. My glucose seems unstable lately—organize my lab reports from the past three months" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "例:風邪をひいて3日になります。直近1か月の健康状態を医師に見せたい" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "例:最近血糖値が不安定なようなので、過去3か月の検査結果を整理したい" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "예: 감기에 걸린 지 3일째인데, 최근 한 달간의 건강 상태를 의사에게 보여주고 싶어요" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "예: 최근 혈당이 불안정한 것 같은데, 지난 3개월간의 검사 결과를 정리해 주세요" } } } }, - "例如:< 3.40 或 3.9 - 6.1": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "e.g. < 3.40 or 3.9 - 6.1" + "例:我感冒3天了,把最近一个月的健康情况给医生看" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "e.g. I've had a cold for 3 days—show my health over the past month to the doctor" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "例:< 3.40 または 3.9 - 6.1" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "例:風邪をひいて3日になります。直近1か月の健康状態を医師に見せたい" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "예: < 3.40 또는 3.9 - 6.1" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "예: 감기에 걸린 지 3일째인데, 최근 한 달간의 건강 상태를 의사에게 보여주고 싶어요" } } } }, - "例如:cm / 步 / 小时": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "e.g. cm / steps / hours" + "例如:< 3.40 或 3.9 - 6.1" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "e.g. < 3.40 or 3.9 - 6.1" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "例:cm / 歩 / 時間" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "例:< 3.40 または 3.9 - 6.1" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "예: cm / 걸음 / 시간" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "예: < 3.40 또는 3.9 - 6.1" } } } }, - "例如:眼皮跳": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "e.g. eyelid twitching" + "例如:cm / 步 / 小时" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "e.g. cm / steps / hours" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "例:まぶたのけいれん" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "例:cm / 歩 / 時間" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "예: 눈꺼풀 떨림" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "예: cm / 걸음 / 시간" } } } }, - "例如:空腹采血": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "e.g. fasting blood draw" + "例如:眼皮跳" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "e.g. eyelid twitching" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "例:空腹時採血" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "例:まぶたのけいれん" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "예: 공복 채혈" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "예: 눈꺼풀 떨림" } } } }, - "例如:腰围 / 步数 / 睡眠时长": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "e.g. waist circumference / step count / sleep duration" + "例如:空腹采血" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "e.g. fasting blood draw" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "例:腹囲 / 歩数 / 睡眠時間" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "例:空腹時採血" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "예: 허리둘레 / 걸음 수 / 수면 시간" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "예: 공복 채혈" } } } }, - "例如:血红蛋白": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "e.g. hemoglobin" + "例如:腰围 / 步数 / 睡眠时长" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "e.g. waist circumference / step count / sleep duration" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "例:ヘモグロビン" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "例:腹囲 / 歩数 / 睡眠時間" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "예: 헤모글로빈" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "예: 허리둘레 / 걸음 수 / 수면 시간" } } } }, - "保存": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Save" + "例如:血红蛋白" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "e.g. hemoglobin" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "保存" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "例:ヘモグロビン" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "저장" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "예: 헤모글로빈" } } } }, - "保存到记录": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Save to Records" + "保存" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Save" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "記録に保存" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "保存" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "기록에 저장" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "저장" } } } }, - "保存后会出现在录入选项里": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "After saving, it will appear in the entry options" + "保存到记录" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Save to Records" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "保存すると入力オプションに表示されます" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "記録に保存" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "저장하면 입력 옵션에 표시돼요" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "기록에 저장" } } } }, - "保存归档": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Save to archive" + "保存后会出现在录入选项里" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "After saving, it will appear in the entry options" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "アーカイブに保存" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "保存すると入力オプションに表示されます" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "보관함에 저장" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "저장하면 입력 옵션에 표시돼요" } } } }, - "偏低": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Low" + "保存归档" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Save to archive" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "低い" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "アーカイブに保存" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "낮음" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "보관함에 저장" } } } }, - "偏低 ↓": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Low ↓" + "偏低" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Low" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "低い ↓" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "低い" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "낮음 ↓" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "낮음" } } } }, - "偏高": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "High" + "偏低 ↓" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Low ↓" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "高い" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "低い ↓" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "높음" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "낮음 ↓" } } } }, - "偏高 ↑": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "High ↑" + "偏高" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "High" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "高い ↑" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "高い" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "높음 ↑" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "높음" } } } }, - "健康日记": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Health diary" + "偏高 ↑" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "High ↑" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "健康日記" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "高い ↑" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "건강 일기" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "높음 ↑" } } } }, - "健康记录": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Health records" + "做点什么?例:跑步5公里 / 吃2片护肝片" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "What to do? e.g. Run 5 km / Take 2 pills" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "健康記録" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "何をしますか?例:5km走る / 薬を2錠飲む" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "건강 기록" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "무엇을 하나요? 예: 5km 달리기 / 약 2알 복용" } } } }, - "像扫描文档一样翻页拍摄": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Shoot page by page, just like scanning a document" + "健康日记" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Health diary" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "ドキュメントをスキャンするようにページをめくって撮影" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "健康日記" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "문서를 스캔하듯 페이지를 넘기며 촬영하세요" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "건강 일기" } } } }, - "先写几个字,AI 来帮忙补充": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Jot down a few words and let AI help fill in the rest" + "健康记录" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Health records" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "数文字だけ書けば、AIが続きを補完します" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "健康記録" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "몇 글자만 적으면 AI가 나머지를 채워줘요" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "건강 기록" } } } }, - "免责声明": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Disclaimer" + "像扫描文档一样翻页拍摄" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Shoot page by page, just like scanning a document" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "免責事項" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ドキュメントをスキャンするようにページをめくって撮影" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "면책 조항" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "문서를 스캔하듯 페이지를 넘기며 촬영하세요" } } } }, - "全部": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "All" + "先写几个字,AI 来帮忙补充" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Jot down a few words and let AI help fill in the rest" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "すべて" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "数文字だけ書けば、AIが続きを補完します" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "전체" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "몇 글자만 적으면 AI가 나머지를 채워줘요" } } } }, - "全部 ›": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "All ›" + "免责声明" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Disclaimer" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "すべて ›" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "免責事項" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "전체 ›" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "면책 조항" } } } }, - "全部保存(%lld)": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Save all (%lld)" + "全部" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "All" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "すべて保存(%lld)" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "すべて" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "전체 저장(%lld)" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "전체" } } } }, - "全部已关闭(%lld 条)": { - "extractionState": "stale", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "All closed (%lld)" + "全部 ›" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "All ›" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "すべて終了しました(%lld件)" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "すべて ›" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "전체 종료됨(%lld건)" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "전체 ›" } } } }, - "六": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Sat" + "全部保存(%lld)" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Save all (%lld)" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "土" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "すべて保存(%lld)" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "토" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "전체 저장(%lld)" } } } }, - "共 %lld 页": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "%lld pages total" + "全部已关闭(%lld 条)" : { + "extractionState" : "stale", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "All closed (%lld)" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "全 %lld ページ" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "すべて終了しました(%lld件)" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "총 %lld 페이지" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "전체 종료됨(%lld건)" } } } }, - "关于": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "About" + "六" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sat" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "概要" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "土" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "정보" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "토" } } } }, - "关键报告归档": { - "extractionState": "stale", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Archive key reports" + "共 %lld 页" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "%lld pages total" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "重要なレポートをアーカイブ" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "全 %lld ページ" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "주요 리포트 보관" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "총 %lld 페이지" } } } }, - "关闭": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Close" + "关于" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "About" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "閉じる" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "概要" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "닫기" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "정보" } } } }, - "其他": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Other" + "关节痛" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Joint pain" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "その他" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "関節痛" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "기타" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "관절통" } } } }, - "内容": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Content" + "关键报告归档" : { + "extractionState" : "stale", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Archive key reports" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "内容" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "重要なレポートをアーカイブ" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "내용" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "주요 리포트 보관" } } } }, - "再拍一项": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Capture another" + "关闭" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Close" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "もう一項目を撮影" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "閉じる" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "한 항목 더 촬영" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "닫기" } } } }, - "再问一轮 · 让 AI 从新角度追问": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Ask again · Let AI follow up from a new angle" + "其他" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Other" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "もう一度質問 · AIが新たな視点で深掘り" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "その他" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "한 번 더 질문 · AI가 새로운 관점에서 다시 물어봐요" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "기타" } } } }, - "最近记录": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Recent records" + "内容" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Content" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "最近の記録" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "内容" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "최근 기록" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "내용" } } } }, - "出生年份": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Birth year" + "再拍一项" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Capture another" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "生まれた年" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "もう一項目を撮影" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "출생 연도" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "한 항목 더 촬영" } } } }, - "分享": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Share" + "再问一轮 · 让 AI 从新角度追问" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ask again · Let AI follow up from a new angle" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "共有" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "もう一度質問 · AIが新たな視点で深掘り" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "공유" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "한 번 더 질문 · AI가 새로운 관점에서 다시 물어봐요" } } } }, - "切换后整个 App 立即生效,无需重启。": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Changes take effect across the app immediately — no restart needed." + "最近记录" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Recent records" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "切り替えるとアプリ全体に即時反映され、再起動は不要です。" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "最近の記録" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "전환하면 앱 전체에 즉시 적용되며 재시작이 필요 없어요." + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "최근 기록" } } } }, - "刚刚": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Just now" + "冠心病" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Coronary heart disease" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "たった今" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "冠動脈疾患" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "방금" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "관상동맥질환" } } } }, - "删除": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Delete" + "出生年份" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Birth year" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "削除" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "生まれた年" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "삭제" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "출생 연도" } } } }, - "删除后无法恢复。源记录(指标、症状等)不受影响。": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "This cannot be undone after deletion. Source records (indicators, symptoms, etc.) are not affected." + "分享" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Share" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "削除すると元に戻せません。元の記録(指標、症状など)には影響しません。" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "共有" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "삭제 후에는 복구할 수 없어요. 원본 기록(지표, 증상 등)에는 영향을 주지 않아요." + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "공유" } } } }, - "删除提醒": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Delete reminder" + "切换后整个 App 立即生效,无需重启。" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Changes take effect across the app immediately — no restart needed." } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "リマインダーを削除" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "切り替えるとアプリ全体に即時反映され、再起動は不要です。" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "알림 삭제" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "전환하면 앱 전체에 즉시 적용되며 재시작이 필요 없어요." } } } }, - "删除这项自定义指标": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Delete this custom indicator" + "刚刚" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Just now" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "このカスタム指標を削除" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "たった今" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "이 사용자 지정 지표 삭제" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "방금" } } } }, - "剧烈": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Severe" + "删除" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Delete" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "激しい" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "削除" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "심함" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "삭제" } } } }, - "加": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Add" + "删除后无法恢复。源记录(指标、症状等)不受影响。" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "This cannot be undone after deletion. Source records (indicators, symptoms, etc.) are not affected." } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "追加" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "削除すると元に戻せません。元の記録(指標、症状など)には影響しません。" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "추가" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "삭제 후에는 복구할 수 없어요. 원본 기록(지표, 증상 등)에는 영향을 주지 않아요." } } } }, - "加一项": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Add one" + "删除提醒" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Delete reminder" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "一項目を追加" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "リマインダーを削除" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "한 항목 추가" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "알림 삭제" } } } }, - "加载模型…": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Loading model…" + "删除这项自定义指标" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Delete this custom indicator" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "モデルを読み込み中…" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "このカスタム指標を削除" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "모델 불러오는 중…" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "이 사용자 지정 지표 삭제" } } } }, - "化验单": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Lab report" + "到点啦,记得完成" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Time's up — don't forget!" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "検査結果" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "時間です。お忘れなく!" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "검사 결과" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "시간이 되었어요. 잊지 마세요!" } } } }, - "化验单 · 处方": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Lab report · Prescription" + "剧烈" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Severe" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "検査結果 · 処方" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "激しい" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "검사 결과 · 처방" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "심함" } } } }, - "化验项快捷(不进趋势)": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Lab item shortcuts (not in Trends)" + "加" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Add" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "検査項目クイック(トレンドに含めない)" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "追加" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "검사 항목 바로가기(추세에 미포함)" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "추가" } } } }, - "单位": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Unit" + "加一项" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Add one" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "単位" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "一項目を追加" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "단위" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "한 항목 추가" } } } }, - "单位(可选)": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Unit (optional)" + "加入记录" : { + + }, + "加载模型…" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loading model…" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "単位(任意)" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "モデルを読み込み中…" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "단위(선택)" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "모델 불러오는 중…" } } } }, - "单张报告": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Single report" + "化验单" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lab report" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "1枚のレポート" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "検査結果" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "단일 리포트" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "검사 결과" } } } }, - "原图与数据库采用系统级文件加密,随设备锁屏受到保护。": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Original images and the database use system-level file encryption and are protected when your device is locked." + "化验单 · 处方" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lab report · Prescription" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "元画像とデータベースはシステムレベルのファイル暗号化を使用し、デバイスのロックに連動して保護されます。" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "検査結果 · 処方" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "원본 이미지와 데이터베이스는 시스템 수준의 파일 암호화를 사용하며 기기 잠금에 따라 보호됩니다." + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "검사 결과 · 처방" } } } }, - "参考": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Reference" + "化验项快捷(不进趋势)" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lab item shortcuts (not in Trends)" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "参考" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "検査項目クイック(トレンドに含めない)" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "참고" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "검사 항목 바로가기(추세에 미포함)" } } } }, - "参考 %@": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Reference %@" + "单位" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unit" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "参考 %@" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "単位" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "참고 %@" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "단위" } } } }, - "参考范围": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Reference range" + "单位(可选)" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unit (optional)" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "基準範囲" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "単位(任意)" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "참고 범위" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "단위(선택)" } } } }, - "参考范围(可选)": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Reference range (optional)" + "单张报告" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Single report" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "基準範囲(任意)" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "1枚のレポート" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "참고 범위(선택)" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "단일 리포트" } } } }, - "取消": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Cancel" + "原图%lld张" : { + + }, + "原图与数据库采用系统级文件加密,随设备锁屏受到保护。" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Original images and the database use system-level file encryption and are protected when your device is locked." } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "キャンセル" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "元画像とデータベースはシステムレベルのファイル暗号化を使用し、デバイスのロックに連動して保護されます。" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "취소" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "원본 이미지와 데이터베이스는 시스템 수준의 파일 암호화를 사용하며 기기 잠금에 따라 보호됩니다." } } } }, - "取消(图片不保留)": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Cancel (image not kept)" + "参考" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Reference" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "キャンセル(画像は保存しません)" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "参考" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "취소(이미지 미보관)" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "참고" } } } }, - "取消识别 · 改为手动录入": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Cancel recognition · Switch to manual entry" + "参考 %@" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Reference %@" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "認識をキャンセル · 手動入力に切り替え" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "参考 %@" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "인식 취소 · 수동 입력으로 전환" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "참고 %@" } } } }, - "可选开启 Face ID 启动锁,进一步保护隐私。": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Optionally enable Face ID Lock for added privacy protection." + "参考范围" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Reference range" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "Face IDロックを任意で有効にすると、プライバシーをさらに保護できます。" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "基準範囲" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "Face ID 잠금을 선택적으로 켜면 개인정보를 더욱 보호할 수 있어요." + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "참고 범위" } } } }, - "右上角 + 新建一个": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Tap + in the top right to create one" + "参考范围(可选)" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Reference range (optional)" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "右上の + から新規作成します" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "基準範囲(任意)" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "오른쪽 위 +로 새로 만들어 보세요" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "참고 범위(선택)" } } } }, - "名称": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Name" + "发烧" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fever" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "名前" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "発熱" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "이름" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "발열" } } } }, - "周期提醒": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Recurring reminder" + "取消" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cancel" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "定期リマインダー" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "キャンセル" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "주기 알림" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "취소" } } } }, - "周末": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Weekend" + "取消(图片不保留)" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cancel (image not kept)" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "週末" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "キャンセル(画像は保存しません)" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "주말" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "취소(이미지 미보관)" } } } }, - "四": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Thu" + "取消识别 · 改为手动录入" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cancel recognition · Switch to manual entry" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "木" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "認識をキャンセル · 手動入力に切り替え" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "목" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "인식 취소 · 수동 입력으로 전환" } } } }, - "回到今天": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Back to today" + "可选开启 Face ID 启动锁,进一步保护隐私。" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Optionally enable Face ID Lock for added privacy protection." } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "今日に戻る" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "Face IDロックを任意で有効にすると、プライバシーをさらに保護できます。" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "오늘로 돌아가기" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "Face ID 잠금을 선택적으로 켜면 개인정보를 더욱 보호할 수 있어요." } } } }, - "图例": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Legend" + "右上角 + 新建一个" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tap + in the top right to create one" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "凡例" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "右上の + から新規作成します" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "범례" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "오른쪽 위 +로 새로 만들어 보세요" } } } }, - "图标": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Icon" + "名称" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Name" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "アイコン" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "名前" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "아이콘" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "이름" } } } }, - "图片保存失败,手动录入并保留文本": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Failed to save image; entered manually with text kept" + "周期提醒" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Recurring reminder" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "画像の保存に失敗しました。手動入力してテキストを保持します" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "定期リマインダー" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "이미지 저장에 실패하여 수동 입력하고 텍스트를 보관합니다" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "주기 알림" } } } }, - "在「+ 新建 → 指标记录 → %@」记录一次": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Record one via \"+ New → Indicator → %@\"" + "周末" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Weekend" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "「+ 新規 → 指標記録 → %@」で一度記録します" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "週末" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "\"+ 새로 만들기 → 지표 기록 → %@\"에서 한 번 기록하세요" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "주말" } } } }, - "在内存较小的旧机型上,App 仍可用于手动记录、归档与查看,": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "On older devices with less memory, the app can still be used for manual recording, archiving, and viewing," + "咳嗽" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cough" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "メモリの少ない旧機種でも、手動記録・アーカイブ・閲覧にアプリを利用できます。" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "咳" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "메모리가 적은 구형 기기에서도 수동 기록, 보관, 조회에 앱을 사용할 수 있어요," + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "기침" } } } }, - "在这里输入主诉……": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Enter your chief complaint here…" + "哮喘" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Asthma" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "ここに主訴を入力してください……" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "喘息" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "여기에 주요 증상을 입력하세요……" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "천식" } } } }, - "在适用法律允许的范围内,因使用本 App 或依赖其中内容所产生的后果,由使用者自行承担。": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "To the extent permitted by applicable law, you bear sole responsibility for any consequences arising from using this app or relying on its content." + "四" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Thu" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "適用法令で認められる範囲において、本アプリの使用またはその内容への依存により生じた結果については、利用者ご自身が責任を負うものとします。" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "木" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "관련 법률이 허용하는 범위 내에서, 본 앱의 사용 또는 그 내용에 대한 의존으로 발생하는 결과는 사용자 본인이 책임집니다." + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "목" } } } }, - "基本": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Basics" + "回到今天" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Back to today" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "基本" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "今日に戻る" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "기본" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "오늘로 돌아가기" } } } }, - "基本信息": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Basic info" + "图例" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Legend" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "基本情報" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "凡例" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "기본 정보" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "범례" } } } }, - "处方": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Prescription" + "图标" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Icon" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "処方" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "アイコン" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "처방" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "아이콘" } } } }, - "备注(可选)": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Note (optional)" + "图片保存失败,手动录入并保留文本" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Failed to save image; entered manually with text kept" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "メモ(任意)" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "画像の保存に失敗しました。手動入力してテキストを保持します" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "메모(선택)" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "이미지 저장에 실패하여 수동 입력하고 텍스트를 보관합니다" } } } }, - "备注(可选)": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Note (optional)" + "在「+ 新建 → 指标记录 → %@」记录一次" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Record one via \"+ New → Indicator → %@\"" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "メモ(任意)" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "「+ 新規 → 指標記録 → %@」で一度記録します" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "메모(선택)" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "\"+ 새로 만들기 → 지표 기록 → %@\"에서 한 번 기록하세요" } } } }, - "复制": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Copy" + "在内存较小的旧机型上,App 仍可用于手动记录、归档与查看," : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "On older devices with less memory, the app can still be used for manual recording, archiving, and viewing," } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "コピー" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "メモリの少ない旧機種でも、手動記録・アーカイブ・閲覧にアプリを利用できます。" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "복사" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "메모리가 적은 구형 기기에서도 수동 기록, 보관, 조회에 앱을 사용할 수 있어요," } } } }, - "多页报告": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Multi-page report" + "在这里输入主诉……" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter your chief complaint here…" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "複数ページのレポート" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ここに主訴を入力してください……" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "여러 페이지 리포트" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "여기에 주요 증상을 입력하세요……" } } } }, - "多页报告可连拍,系统自动透视校正": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Capture multi-page reports in a series; perspective is auto-corrected" + "在适用法律允许的范围内,因使用本 App 或依赖其中内容所产生的后果,由使用者自行承担。" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "To the extent permitted by applicable law, you bear sole responsibility for any consequences arising from using this app or relying on its content." } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "複数ページのレポートは連続撮影でき、遠近補正は自動で行われます" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "適用法令で認められる範囲において、本アプリの使用またはその内容への依存により生じた結果については、利用者ご自身が責任を負うものとします。" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "여러 페이지 리포트는 연속 촬영할 수 있으며 원근 보정은 자동으로 처리돼요" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "관련 법률이 허용하는 범위 내에서, 본 앱의 사용 또는 그 내용에 대한 의존으로 발생하는 결과는 사용자 본인이 책임집니다." } } } }, - "失败 · 重试": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Failed · Retry" + "基本" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Basics" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "失敗 · 再試行" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "基本" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "실패 · 재시도" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "기본" } } } }, - "失败:%@": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Failed: %@" + "基本信息" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Basic info" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "失敗:%@" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "基本情報" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "실패: %@" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "기본 정보" } } } }, - "女": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Female" + "填写%@" : { + + }, + "处方" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prescription" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "女性" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "処方" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "여성" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "처방" } } } }, - "如:协和医院": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "e.g., Peking Union Medical College Hospital" + "备注" : { + + }, + "备注(可选)" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Note (optional)" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "例:協和病院" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "メモ(任意)" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "예: 셰허병원" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "메모(선택)" } } } }, - "如:春季年度体检": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "e.g., Spring annual checkup" + "备注(可选)" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Note (optional)" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "例:春の年次健康診断" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "メモ(任意)" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "예: 봄 연례 건강검진" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "메모(선택)" } } } }, - "如:母亲 高血压": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "e.g., Mother, hypertension" + "复制" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Copy" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "例:母 高血圧" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "コピー" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "예: 어머니 고혈압" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "복사" } } } }, - "如:缬沙坦 80mg qd": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "e.g., Valsartan 80mg qd" + "多页报告" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Multi-page report" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "例:バルサルタン 80mg qd" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "複数ページのレポート" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "예: 발사르탄 80mg qd" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "여러 페이지 리포트" } } } }, - "如:青霉素": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "e.g., Penicillin" + "多页报告可连拍,系统自动透视校正" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Capture multi-page reports in a series; perspective is auto-corrected" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "例:ペニシリン" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "複数ページのレポートは連続撮影でき、遠近補正は自動で行われます" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "예: 페니실린" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "여러 페이지 리포트는 연속 촬영할 수 있으며 원근 보정은 자동으로 처리돼요" } } } }, - "如出现身体不适或紧急情况,请及时就医或拨打当地急救电话,请勿依赖本 App 进行判断。": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "If you feel unwell or face an emergency, seek medical care promptly or call your local emergency number. Do not rely on this app for judgment." + "失眠" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insomnia" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "体調不良や緊急時には、速やかに医療機関を受診するか、お住まいの地域の救急番号に電話してください。判断を本アプリに頼らないでください。" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "不眠" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "몸이 불편하거나 응급 상황이 발생하면 즉시 진료를 받거나 현지 응급 전화로 연락하세요. 판단을 본 앱에 의존하지 마세요." + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "불면" } } } }, - "完成": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Done" + "失败 · 重试" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Failed · Retry" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "完了" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "失敗 · 再試行" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "완료" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "실패 · 재시도" } } } }, - "完成 ✓": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Done ✓" + "失败:%@" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Failed: %@" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "完了 ✓" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "失敗:%@" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "완료 ✓" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "실패: %@" } } } }, - "完整保存整份报告(可多页)": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Save the entire report (multiple pages supported)" + "头痛" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Headache" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "レポート全体を保存します(複数ページ対応)" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "頭痛" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "리포트 전체를 저장해요(여러 페이지 지원)" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "두통" } } } }, - "家族史": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Family history" + "女" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Female" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "家族歴" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "女性" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "가족력" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "여성" } } } }, - "密码": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Password" + "好" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "パスワード" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "비밀번호" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "확인" } } } }, - "对准异常的那一行就好 · 不用拍整张": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Just aim at the abnormal row · No need to capture the whole sheet" + "如:协和医院" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "e.g., Peking Union Medical College Hospital" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "異常のある行に合わせるだけでOK · 全体を撮る必要はありません" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "例:協和病院" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "이상이 있는 행만 맞추면 돼요 · 전체를 찍을 필요는 없어요" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "예: 셰허병원" } } } }, - "导入失败:%@": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Import failed: %@" + "如:春季年度体检" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "e.g., Spring annual checkup" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "インポートに失敗しました:%@" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "例:春の年次健康診断" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "가져오기 실패: %@" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "예: 봄 연례 건강검진" } } } }, - "导出": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Export" + "如:母亲 高血压" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "e.g., Mother, hypertension" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "エクスポート" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "例:母 高血圧" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "내보내기" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "예: 어머니 고혈압" } } } }, - "导出身体档案": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Export health profile" + "如:缬沙坦 80mg qd" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "e.g., Valsartan 80mg qd" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "身体プロファイルをエクスポート" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "例:バルサルタン 80mg qd" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "건강 프로필 내보내기" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "예: 발사르탄 80mg qd" } } } }, - "将追加:": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Will append:" + "如:青霉素" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "e.g., Penicillin" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "追加されます:" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "例:ペニシリン" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "추가됩니다:" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "예: 페니실린" } } } }, - "尚未设置": { - "extractionState": "stale", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Not set" + "如出现身体不适或紧急情况,请及时就医或拨打当地急救电话,请勿依赖本 App 进行判断。" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "If you feel unwell or face an emergency, seek medical care promptly or call your local emergency number. Do not rely on this app for judgment." } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "未設定" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "体調不良や緊急時には、速やかに医療機関を受診するか、お住まいの地域の救急番号に電話してください。判断を本アプリに頼らないでください。" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "미설정" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "몸이 불편하거나 응급 상황이 발생하면 즉시 진료를 받거나 현지 응급 전화로 연락하세요. 판단을 본 앱에 의존하지 마세요." } } } }, - "尿酸 UA": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Uric acid UA" + "完成" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Done" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "尿酸 UA" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "完了" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "요산 UA" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "완료" } } } }, - "岁": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "yrs" + "完成 ✓" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Done ✓" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "歳" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "完了 ✓" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "세" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "완료 ✓" } } } }, - "工作日": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Weekday" + "完整保存整份报告(可多页)" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Save the entire report (multiple pages supported)" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "平日" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "レポート全体を保存します(複数ページ対応)" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "평일" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "리포트 전체를 저장해요(여러 페이지 지원)" } } } }, - "已保存 %lld 页(端侧加密)": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Saved %lld pages (on-device encryption)" + "家族史" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Family history" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "%lldページを保存しました(オンデバイス暗号化)" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "家族歴" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "%lld페이지 저장됨(온디바이스 암호화)" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "가족력" } } } }, - "已关闭": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Off" + "密码" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Password" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "オフ" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "パスワード" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "꺼짐" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "비밀번호" } } } }, - "已取消": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Cancelled" + "对准异常的那一行就好 · 不用拍整张" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Just aim at the abnormal row · No need to capture the whole sheet" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "キャンセルしました" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "異常のある行に合わせるだけでOK · 全体を撮る必要はありません" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "취소됨" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "이상이 있는 행만 맞추면 돼요 · 전체를 찍을 필요는 없어요" } } } }, - "已处理 %.1fs · 比云端快 4.2×": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Processed in %.1fs · 4.2× faster than the cloud" + "导入失败:%@" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Import failed: %@" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "%.1f秒で処理 · クラウドより4.2倍高速" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "インポートに失敗しました:%@" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "%.1f초 처리 · 클라우드보다 4.2배 빠름" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "가져오기 실패: %@" } } } }, - "已复制": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Copied" + "导出" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Export" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "コピーしました" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "エクスポート" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "복사됨" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "내보내기" } } } }, - "已完成": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Done" + "导出身体档案" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Export health profile" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "完了" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "身体プロファイルをエクスポート" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "완료" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "건강 프로필 내보내기" } } } }, - "已就绪": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Ready" + "将追加:" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Will append:" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "準備完了" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "追加されます:" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "준비됨" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "추가됩니다:" } } } }, - "已开启 · %@": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "On · %@" + "尚未设置" : { + "extractionState" : "stale", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Not set" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "オン · %@" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "未設定" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "켜짐 · %@" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "미설정" } } } }, - "已拍 1 页": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "1 page captured" + "尿酸 UA" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Uric acid UA" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "1ページ撮影しました" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "尿酸 UA" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "1페이지 촬영됨" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "요산 UA" } } } }, - "已拍页面(3 页)": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Captured pages (3)" + "岁" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "yrs" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "撮影したページ(3ページ)" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "歳" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "촬영한 페이지(3페이지)" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "세" } } } }, - "已持续 %@": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Ongoing for %@" + "工作日" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Weekday" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "%@継続中" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "平日" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "%@ 지속됨" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "평일" } } } }, - "已经有一个叫「%@」的自定义指标": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "A custom indicator named “%@” already exists" + "已保存 %lld 页(端侧加密)" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Saved %lld pages (on-device encryption)" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "「%@」という名前のカスタム指標がすでにあります" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%lldページを保存しました(オンデバイス暗号化)" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "“%@”(이)라는 사용자 지정 지표가 이미 있어요" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "%lld페이지 저장됨(온디바이스 암호화)" } } } }, - "已裁剪": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Cropped" + "已关闭" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Off" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "トリミングしました" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "オフ" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "잘림" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "꺼짐" } } } }, - "已识别边框 · 将自动透视校正": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Edges detected · perspective will be corrected automatically" + "已取消" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cancelled" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "枠を検出 · 自動で台形補正します" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "キャンセルしました" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "테두리 인식됨 · 원근 자동 보정" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "취소됨" } } } }, - "已采纳": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Applied" + "已处理 %.1fs · 比云端快 4.2×" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Processed in %.1fs · 4.2× faster than the cloud" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "採用しました" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%.1f秒で処理 · クラウドより4.2倍高速" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "적용됨" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "%.1f초 처리 · 클라우드보다 4.2배 빠름" } } } }, - "已隐藏 %lld": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "%lld hidden" + "已复制" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Copied" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "%lld件を非表示" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "コピーしました" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "%lld개 숨김" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "복사됨" } } } }, - "已隐藏的长期监测": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Hidden long-term monitoring" + "已完成" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Done" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "非表示の長期モニタリング" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "完了" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "숨겨진 장기 모니터링" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "완료" } } } }, - "常见症状": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Common symptoms" + "已就绪" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ready" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "よくある症状" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "準備完了" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "흔한 증상" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "준비됨" } } } }, - "年": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Year" + "已开启 · %@" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "On · %@" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "年" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "オン · %@" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "년" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "켜짐 · %@" } } } }, - "并以原始报告 / 化验单为准。": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Always refer to the original report / lab results." + "已拍 1 页" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "1 page captured" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "必ず元のレポート / 検査結果をご確認ください。" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "1ページ撮影しました" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "반드시 원본 리포트 / 검사 결과를 기준으로 하세요." + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "1페이지 촬영됨" } } } }, - "康康": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Kangkang" + "已拍页面(3 页)" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Captured pages (3)" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "Kangkang" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "撮影したページ(3ページ)" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "Kangkang" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "촬영한 페이지(3페이지)" } } } }, - "康康 · 本地优先的健康档案 · %@": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Kangkang · Local-first health records · %@" + "已持续 %@" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ongoing for %@" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "Kangkang · ローカルファーストの健康記録 · %@" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@継続中" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "Kangkang · 로컬 우선 건강 기록 · %@" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ 지속됨" } } } }, - "康康 已锁定": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Kangkang is locked" + "已经有一个叫「%@」的自定义指标" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "A custom indicator named “%@” already exists" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "Kangkangはロックされています" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "「%@」という名前のカスタム指標がすでにあります" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "Kangkang이 잠겼어요" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "“%@”(이)라는 사용자 지정 지표가 이미 있어요" } } } }, - "康康是一款以本地优先为设计原则的个人健康影像档案工具。": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Kangkang is a personal health imaging archive tool designed with a local-first principle." + "已裁剪" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cropped" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "Kangkangは、ローカルファーストを設計原則とする個人向け健康画像アーカイブツールです。" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "トリミングしました" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "Kangkang은 로컬 우선을 설계 원칙으로 하는 개인 건강 영상 아카이브 도구입니다." + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "잘림" } } } }, - "康康是一款健康信息记录与参考工具,并非医疗器械,不提供医疗诊断、用药或剂量建议、急诊判断等医疗服务。": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Kangkang is a tool for recording and referencing health information, not a medical device. It does not provide medical services such as diagnosis, medication or dosage advice, or emergency assessment." + "已覆盖主要问诊维度;补充原文后可再追问" : { + + }, + "已识别边框 · 将自动透视校正" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Edges detected · perspective will be corrected automatically" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "Kangkangは健康情報を記録・参照するためのツールであり、医療機器ではありません。医療診断、薬剤・用量の助言、救急判断などの医療サービスは提供しません。" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "枠を検出 · 自動で台形補正します" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "Kangkang은 건강 정보를 기록하고 참고하기 위한 도구이며 의료기기가 아닙니다. 의료 진단, 약물·용량 권고, 응급 판단 등의 의료 서비스를 제공하지 않습니다." + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "테두리 인식됨 · 원근 자동 보정" } } } }, - "开启一个提醒": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Set a reminder" + "已采纳" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Applied" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "リマインダーを設定" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "採用しました" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "리마인더 설정" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "적용됨" } } } }, - "开始": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Start" + "已隐藏 %lld" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "%lld hidden" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "開始" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%lld件を非表示" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "시작" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "%lld개 숨김" } } } }, - "开始 AI 解读": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Start AI interpretation" + "已隐藏的长期监测" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hidden long-term monitoring" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "AI解読を開始" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "非表示の長期モニタリング" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "AI 해석 시작" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "숨겨진 장기 모니터링" } } } }, - "开始一个持续症状,结束时再点结束": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Start an ongoing symptom, then tap End when it stops" + "常见症状" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Common symptoms" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "継続する症状を開始し、終わったら「終了」をタップします" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "よくある症状" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "지속되는 증상을 시작하고, 끝나면 종료를 누르세요" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "흔한 증상" } } } }, - "开始于": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Started" + "年" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Year" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "開始日時" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "年" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "시작 시점" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "년" } } } }, - "开始时间": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Start time" + "并以原始报告 / 化验单为准。" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Always refer to the original report / lab results." } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "開始時間" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "必ず元のレポート / 検査結果をご確認ください。" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "시작 시간" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "반드시 원본 리포트 / 검사 결과를 기준으로 하세요." } } } }, - "开始记录": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Start recording" + "康康" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kangkang" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "記録を開始" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kangkang" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "기록 시작" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kangkang" } } } }, - "异常项": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Abnormal items" + "康康 · 本地优先的健康档案 · %@" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kangkang · Local-first health records · %@" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "異常項目" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kangkang · ローカルファーストの健康記録 · %@" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "이상 항목" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kangkang · 로컬 우선 건강 기록 · %@" } } } }, - "异常项快拍": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Abnormal item quick capture" + "康康 已锁定" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kangkang is locked" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "異常項目クイック撮影" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kangkangはロックされています" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "이상 항목 빠른 촬영" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kangkang이 잠겼어요" } } } }, - "强度": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Severity" + "康康是一款以本地优先为设计原则的个人健康影像档案工具。" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kangkang is a personal health imaging archive tool designed with a local-first principle." } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "強さ" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kangkangは、ローカルファーストを設計原則とする個人向け健康画像アーカイブツールです。" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "강도" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kangkang은 로컬 우선을 설계 원칙으로 하는 개인 건강 영상 아카이브 도구입니다." } } } }, - "归档一份\n关键报告": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Archive a\nkey report" + "康康是一款健康信息记录与参考工具,并非医疗器械,不提供医疗诊断、用药或剂量建议、急诊判断等医疗服务。" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kangkang is a tool for recording and referencing health information, not a medical device. It does not provide medical services such as diagnosis, medication or dosage advice, or emergency assessment." } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "重要なレポートを\n保管する" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kangkangは健康情報を記録・参照するためのツールであり、医療機器ではありません。医療診断、薬剤・用量の助言、救急判断などの医療サービスは提供しません。" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "주요 리포트를\n보관하기" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kangkang은 건강 정보를 기록하고 참고하기 위한 도구이며 의료기기가 아닙니다. 의료 진단, 약물·용량 권고, 응급 판단 등의 의료 서비스를 제공하지 않습니다." } } } }, - "归档信息": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Archive info" + "开启一个提醒" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Set a reminder" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "保管情報" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "リマインダーを設定" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "보관 정보" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "리마인더 설정" } } } }, - "当前用药": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Current medications" + "开始" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Start" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "現在の服薬" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "開始" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "현재 복용 약" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "시작" } } } }, - "影像报告": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Imaging report" + "开始 AI 解读" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Start AI interpretation" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "画像レポート" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "AI解読を開始" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "영상 리포트" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "AI 해석 시작" } } } }, - "影像档案": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Imaging archive" + "开始一个持续症状,结束时再点结束" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Start an ongoing symptom, then tap End when it stops" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "画像アーカイブ" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "継続する症状を開始し、終わったら「終了」をタップします" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "영상 아카이브" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "지속되는 증상을 시작하고, 끝나면 종료를 누르세요" } } } }, - "待下载": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "To download" + "开始于" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Started" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "ダウンロード待ち" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "開始日時" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "다운로드 대기" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "시작 시점" } } } }, - "待输入": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "To enter" + "开始时间" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Start time" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "入力待ち" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "開始時間" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "입력 대기" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "시작 시간" } } } }, - "心率": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Heart rate" + "开始记录" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Start recording" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "心拍数" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "記録を開始" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "심박수" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "기록 시작" } } } }, - "快超时了,>%llds 会自动转为手动录入": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Almost timed out; after %llds it switches to manual entry automatically" + "异常项" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Abnormal items" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "まもなくタイムアウトします。%lld秒を超えると自動で手動入力に切り替わります" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "異常項目" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "곧 시간이 초과돼요. %lld초를 넘으면 자동으로 수동 입력으로 전환돼요" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "이상 항목" } } } }, - "性别": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Sex" + "异常项快拍" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Abnormal item quick capture" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "性別" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "異常項目クイック撮影" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "성별" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "이상 항목 빠른 촬영" } } } }, - "总胆固醇": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Total cholesterol" + "强度" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Severity" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "総コレステロール" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "強さ" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "총콜레스테롤" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "강도" } } } }, - "总胆固醇 TC 5.42 mmol/L": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Total cholesterol TC 5.42 mmol/L" + "归档一份\n关键报告" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Archive a\nkey report" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "総コレステロール TC 5.42 mmol/L" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "重要なレポートを\n保管する" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "총콜레스테롤 TC 5.42 mmol/L" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "주요 리포트를\n보관하기" } } } }, - "总项": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Total" + "归档信息" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Archive info" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "総項目" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "保管情報" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "전체 항목" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "보관 정보" } } } }, - "慢病(影响参考范围与 AI 解读)": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Chronic conditions (affect reference ranges and AI interpretation)" + "当前用药" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Current medications" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "慢性疾患(基準範囲とAI解釈に影響します)" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "現在の服薬" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "만성질환(참고 범위와 AI 해석에 영향)" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "현재 복용 약" } } } }, - "我的": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Me" + "影像报告" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Imaging report" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "マイ" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "画像レポート" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "마이" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "영상 리포트" } } } }, - "我的导出": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "My Exports" + "影像档案" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Imaging archive" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "マイエクスポート" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "画像アーカイブ" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "내 내보내기" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "영상 아카이브" } } } }, - "我的导出 · %lld 份": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "My Exports · %lld" + "待下载" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "To download" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "マイエクスポート · %lld件" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ダウンロード待ち" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "내 내보내기 · %lld건" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "다운로드 대기" } } } }, - "我的报告档案": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "My Report Archive" + "待输入" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "To enter" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "マイレポートアーカイブ" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "入力待ち" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "내 리포트 보관함" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "입력 대기" } } } }, - "我知道了,开始拍": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Got it, start capturing" + "心率" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Heart rate" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "了解、撮影を始める" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "心拍数" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "알겠어요, 촬영 시작" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "심박수" } } } }, - "或者自己写": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Or write it yourself" + "快超时了,>%llds 会自动转为手动录入" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Almost timed out; after %llds it switches to manual entry automatically" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "または自分で入力" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "まもなくタイムアウトします。%lld秒を超えると自動で手動入力に切り替わります" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "또는 직접 입력" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "곧 시간이 초과돼요. %lld초를 넘으면 자동으로 수동 입력으로 전환돼요" } } } }, - "所有照片以 AES 加密存于本机沙盒。康康 服务端无法访问。": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "All photos are AES-encrypted and stored in this device's sandbox. Kangkang's servers cannot access them." + "性别" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sex" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "すべての写真はAES暗号化され、本機のサンドボックスに保存されます。Kangkangのサーバーからはアクセスできません。" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "性別" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "모든 사진은 AES로 암호화되어 기기 샌드박스에 저장됩니다. Kangkang 서버는 접근할 수 없습니다." + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "성별" } } } }, - "所选文件夹缺少 config.json,不是有效的模型目录": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "The selected folder is missing config.json and is not a valid model directory" + "总胆固醇" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Total cholesterol" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "選択したフォルダにconfig.jsonがなく、有効なモデルディレクトリではありません" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "総コレステロール" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "선택한 폴더에 config.json이 없어 유효한 모델 디렉터리가 아닙니다" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "총콜레스테롤" } } } }, - "手动填一项指标(免拍照)": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Enter an indicator manually (no photo)" + "总胆固醇 TC 5.42 mmol/L" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Total cholesterol TC 5.42 mmol/L" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "指標を手動で入力(撮影不要)" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "総コレステロール TC 5.42 mmol/L" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "지표 직접 입력(촬영 없이)" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "총콜레스테롤 TC 5.42 mmol/L" } } } }, - "报告": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Report" + "总项" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Total" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "レポート" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "総項目" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "리포트" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "전체 항목" } } } }, - "报告归档": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Archive Report" + "恶心" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nausea" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "レポートをアーカイブ" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "吐き気" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "리포트 보관" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "메스꺼움" } } } }, - "报告日期": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Report date" + "慢性肾病" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Chronic kidney disease" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "レポート日付" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "慢性腎臓病" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "리포트 날짜" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "만성 신장병" } } } }, - "报告类型": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Report type" + "慢病(影响参考范围与 AI 解读)" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Chronic conditions (affect reference ranges and AI interpretation)" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "レポートの種類" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "慢性疾患(基準範囲とAI解釈に影響します)" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "리포트 유형" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "만성질환(참고 범위와 AI 해석에 영향)" } } } }, - "拍一张化验单,VL 自动识别": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Snap a lab report, and VL recognizes it automatically" + "我的" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Me" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "検査結果を撮影すると、VLが自動で認識します" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "マイ" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "검사 결과를 촬영하면 VL이 자동 인식해요" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "마이" } } } }, - "拍报告的小贴士": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Tips for photographing reports" + "我的导出" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "My Exports" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "レポート撮影のヒント" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "マイエクスポート" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "리포트 촬영 팁" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "내 내보내기" } } } }, - "拍摄报告": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Photograph Report" + "我的导出 · %lld 份" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "My Exports · %lld" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "レポートを撮影" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "マイエクスポート · %lld件" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "리포트 촬영" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "내 내보내기 · %lld건" } } } }, - "拍摄识别": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Capture & Recognize" + "我的报告档案" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "My Report Archive" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "撮影して認識" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "マイレポートアーカイブ" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "촬영 인식" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "내 리포트 보관함" } } } }, - "拍照归档:拍体检 / 化验报告,尝试识别为结构化指标并存档": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Photo archive: capture a checkup or lab report, try to recognize it into structured indicators, and archive it" + "我知道了,开始拍" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Got it, start capturing" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "写真アーカイブ:健康診断または検査結果を撮影し、構造化された指標として認識を試み、保存します" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "了解、撮影を始める" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "사진 보관: 건강검진 또는 검사 결과를 촬영해 구조화된 지표로 인식을 시도하고 보관해요" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "알겠어요, 촬영 시작" } } } }, - "拍照识别报告 → 结构化指标": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Capture report → structured indicators" + "或者自己写" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Or write it yourself" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "レポートを撮影して認識 → 構造化された指標" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "または自分で入力" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "리포트 촬영 인식 → 구조화된 지표" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "또는 직접 입력" } } } }, - "持续": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Ongoing" + "所有照片以 AES 加密存于本机沙盒。康康 服务端无法访问。" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "All photos are AES-encrypted and stored in this device's sandbox. Kangkang's servers cannot access them." } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "継続" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "すべての写真はAES暗号化され、本機のサンドボックスに保存されます。Kangkangのサーバーからはアクセスできません。" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "지속" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "모든 사진은 AES로 암호화되어 기기 샌드박스에 저장됩니다. Kangkang 서버는 접근할 수 없습니다." } } } }, - "持续 %@": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Ongoing %@" + "所选文件夹缺少 config.json,不是有效的模型目录" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "The selected folder is missing config.json and is not a valid model directory" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "継続 %@" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "選択したフォルダにconfig.jsonがなく、有効なモデルディレクトリではありません" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "지속 %@" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "선택한 폴더에 config.json이 없어 유효한 모델 디렉터리가 아닙니다" } } } }, - "持续中": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Ongoing" + "手动填一项指标(免拍照)" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter an indicator manually (no photo)" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "継続中" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "指標を手動で入力(撮影不要)" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "지속 중" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "지표 직접 입력(촬영 없이)" } } } }, - "指标": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Indicator" + "抑郁/焦虑" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Depression / Anxiety" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "指標" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "うつ・不安" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "지표" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "우울/불안" } } } }, - "指标 · %@": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Indicator · %@" + "报告" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Report" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "指標 · %@" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "レポート" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "지표 · %@" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "리포트" } } } }, - "指标(%lld 项)": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Indicators (%lld)" + "报告归档" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Archive Report" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "指標(%lld項目)" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "レポートをアーカイブ" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "지표(%lld개)" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "리포트 보관" } } } }, - "指标名": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Indicator name" + "报告日期" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Report date" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "指標名" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "レポート日付" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "지표 이름" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "리포트 날짜" } } } }, - "指标名 · 可编辑": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Indicator name · editable" + "报告类型" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Report type" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "指標名 · 編集可能" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "レポートの種類" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "지표 이름 · 편집 가능" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "리포트 유형" } } } }, - "指标异常": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Abnormal indicator" + "报告详情" : { + + }, + "拍一张化验单,VL 自动识别" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Snap a lab report, and VL recognizes it automatically" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "指標の異常" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "検査結果を撮影すると、VLが自動で認識します" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "지표 이상" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "검사 결과를 촬영하면 VL이 자동 인식해요" } } } }, - "指标记录": { - "extractionState": "stale", - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Indicator Record" + "拍报告的小贴士" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tips for photographing reports" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "指標の記録" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "レポート撮影のヒント" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "지표 기록" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "리포트 촬영 팁" } } } }, - "按%lld岁调整": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Adjusted for age %lld" + "拍摄报告" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Photograph Report" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "%lld歳に合わせて調整" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "レポートを撮影" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "%lld세 기준으로 조정" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "리포트 촬영" } } } }, - "推理中…": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Inferring…" + "拍摄识别" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Capture & Recognize" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "推論中…" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "撮影して認識" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "추론 중…" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "촬영 인식" } } } }, - "推理失败:%@": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Inference failed: %@" + "拍照归档:拍体检 / 化验报告,尝试识别为结构化指标并存档" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Photo archive: capture a checkup or lab report, try to recognize it into structured indicators, and archive it" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "推論に失敗しました:%@" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "写真アーカイブ:健康診断または検査結果を撮影し、構造化された指標として認識を試み、保存します" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "추론 실패: %@" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "사진 보관: 건강검진 또는 검사 결과를 촬영해 구조화된 지표로 인식을 시도하고 보관해요" } } } }, - "推理自检": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Inference Self-Check" + "拍照识别报告 → 结构化指标" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Capture report → structured indicators" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "推論セルフチェック" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "レポートを撮影して認識 → 構造化された指標" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "추론 자가 점검" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "리포트 촬영 인식 → 구조화된 지표" } } } }, - "推荐": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Recommended" + "持续" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ongoing" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "推奨" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "継続" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "추천" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "지속" } } } }, - "推荐 iPhone 15 Pro / Pro Max 及之后发布的机型(含 iPhone 16 系列)。": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Recommended: iPhone 15 Pro / Pro Max and later models (including the iPhone 16 series)." + "持续 %@" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ongoing %@" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "iPhone 15 Pro / Pro Max 以降のモデル(iPhone 16シリーズを含む)を推奨します。" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "継続 %@" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "iPhone 15 Pro / Pro Max 및 이후 출시 모델(iPhone 16 시리즈 포함)을 추천합니다." + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "지속 %@" } } } }, - "推荐拍清晰的%@,多页报告可一次完成扫描。原图与解读全部本地加密保存,永不上传。": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "We recommend capturing a clear %@; multi-page reports can be scanned all at once. Original images and interpretations are all encrypted and stored locally, never uploaded." + "持续中" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ongoing" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "鮮明な%@の撮影を推奨します。複数ページのレポートは一度にスキャンできます。原本画像と解釈はすべてローカルで暗号化して保存され、アップロードされることはありません。" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "継続中" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "선명한 %@을(를) 촬영하는 것을 추천해요. 여러 페이지 리포트는 한 번에 스캔할 수 있어요. 원본 이미지와 해석은 모두 기기에서 암호화 저장되며 절대 업로드되지 않아요." + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "지속 중" } } } }, - "提取指标 · 共 28 项": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Extracted indicators · 28 total" + "指标" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Indicator" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "抽出した指標 · 全28項目" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "指標" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "추출 지표 · 총 28개" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "지표" } } } }, - "提醒在录入「指标记录 · 长期监测」时开启": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Enable when entering “Indicator Record · Long-term Monitoring”" + "指标 · %@" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Indicator · %@" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "「指標の記録 · 長期モニタリング」の入力時にオンにします" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "指標 · %@" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "「지표 기록 · 장기 모니터링」 입력 시 켜세요" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "지표 · %@" } } } }, - "摘要(可选)": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Summary (optional)" + "指标(%lld 项)" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Indicators (%lld)" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "概要(任意)" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "指標(%lld項目)" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "요약(선택)" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "지표(%lld개)" } } } }, - "撰写报告": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Write Report" + "指标名" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Indicator name" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "レポートを作成" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "指標名" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "리포트 작성" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "지표 이름" } } } }, - "支持删除记录,数据将从本机移除;数据保存在本机,不依赖云端备份。": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Records can be deleted, and the data is removed from this device. Data is stored locally and does not rely on cloud backup." + "指标名 · 可编辑" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Indicator name · editable" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "記録の削除に対応しており、データは本機から削除されます。データは本機に保存され、クラウドバックアップに依存しません。" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "指標名 · 編集可能" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "기록 삭제를 지원하며, 데이터는 기기에서 제거됩니다. 데이터는 기기에 저장되며 클라우드 백업에 의존하지 않습니다." + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "지표 이름 · 편집 가능" } } } }, - "收缩": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Systolic" + "指标异常" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Abnormal indicator" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "収縮" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "指標の異常" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "수축" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "지표 이상" } } } }, - "收缩 ": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Systolic " + "指标记录" : { + "extractionState" : "stale", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Indicator Record" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "収縮 " + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "指標の記録" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "수축 " + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "지표 기록" } } } }, - "收缩 / 舒张": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Systolic / Diastolic" + "指标记录提醒" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Metric Reminders" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "収縮 / 拡張" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "指標リマインダー" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "수축 / 이완" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "지표 알림" } } } }, - "收缩压": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Systolic pressure" + "指标详情" : { + + }, + "按%lld岁调整" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Adjusted for age %lld" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "収縮期血圧" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%lld歳に合わせて調整" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "수축기 혈압" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "%lld세 기준으로 조정" } } } }, - "数值": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Value" + "推理中…" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Inferring…" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "数値" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "推論中…" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "수치" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "추론 중…" } } } }, - "数据保存在本设备:卸载 App 或删除数据后可能无法恢复,重要资料请自行留存原件。": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Data is stored on this device: it may be unrecoverable after you uninstall the app or delete the data, so please keep your own originals of important documents." + "推理失败:%@" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Inference failed: %@" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "データは本端末に保存されます:アプリのアンインストールやデータ削除後は復元できない場合があります。重要な資料は原本をご自身で保管してください。" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "推論に失敗しました:%@" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "데이터는 이 기기에 저장됩니다: 앱을 삭제하거나 데이터를 지운 후에는 복구하지 못할 수 있으니, 중요한 자료는 원본을 직접 보관하세요." + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "추론 실패: %@" } } } }, - "整体摘记": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Overall Summary" + "推理自检" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Inference Self-Check" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "全体メモ" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "推論セルフチェック" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "전체 요약" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "추론 자가 점검" } } } }, - "整张图": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Whole image" + "推荐" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Recommended" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "画像全体" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "推奨" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "전체 이미지" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "추천" } } } }, - "整页入框,避免裁切到指标": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Fit the whole page in frame to avoid cropping any indicators" + "推荐 iPhone 15 Pro / Pro Max 及之后发布的机型(含 iPhone 16 系列)。" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Recommended: iPhone 15 Pro / Pro Max and later models (including the iPhone 16 series)." } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "ページ全体をフレームに収め、指標が切れないようにしてください" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "iPhone 15 Pro / Pro Max 以降のモデル(iPhone 16シリーズを含む)を推奨します。" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "지표가 잘리지 않도록 페이지 전체를 화면에 담으세요" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "iPhone 15 Pro / Pro Max 및 이후 출시 모델(iPhone 16 시리즈 포함)을 추천합니다." } } } }, - "文件大小校验失败(预期 %lld,实际 %lld)": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "File size verification failed (expected %1$lld, got %2$lld)" - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "ファイルサイズの検証に失敗しました(予期 %1$lld、実際 %2$lld)" + "推荐拍清晰的%@,多页报告可一次完成扫描。原图与解读全部本地加密保存,永不上传。" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "We recommend capturing a clear %@; multi-page reports can be scanned all at once. Original images and interpretations are all encrypted and stored locally, never uploaded." } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "파일 크기 검증에 실패했습니다(예상 %1$lld, 실제 %2$lld)" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "鮮明な%@の撮影を推奨します。複数ページのレポートは一度にスキャンできます。原本画像と解釈はすべてローカルで暗号化して保存され、アップロードされることはありません。" } }, - "zh-Hans": { - "stringUnit": { - "state": "new", - "value": "文件大小校验失败(预期 %1$lld,实际 %2$lld)" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "선명한 %@을(를) 촬영하는 것을 추천해요. 여러 페이지 리포트는 한 번에 스캔할 수 있어요. 원본 이미지와 해석은 모두 기기에서 암호화 저장되며 절대 업로드되지 않아요." } } } }, - "文字日记": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Text diary" + "提取指标 · 共 28 项" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Extracted indicators · 28 total" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "テキスト日記" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "抽出した指標 · 全28項目" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "텍스트 일기" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "추출 지표 · 총 28개" } } } }, - "文本解读 · 趋势 / 问答": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Text interpretation · Trends / Q&A" + "提醒" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Reminders" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "テキスト解説 · トレンド / 質問応答" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "リマインダー" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "텍스트 해석 · 추세 / 질의응답" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "알림" } } } }, - "新建": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "New" + "提醒在录入「指标记录 · 长期监测」时开启" : { + "extractionState" : "stale", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enable when entering “Indicator Record · Long-term Monitoring”" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "新規" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "「指標の記録 · 長期モニタリング」の入力時にオンにします" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "새로 만들기" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "「지표 기록 · 장기 모니터링」 입력 시 켜세요" } } } }, - "新建自定义指标": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "New custom indicator" + "提醒已保存,但系统通知权限未开启,到点不会弹出。请在「设置 · 通知 · 康康」中允许。" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "The reminder is saved, but notifications are off so it won't alert you. Allow them in Settings · Notifications · Kangkang." } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "カスタム指標を作成" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "リマインダーは保存されましたが、通知が許可されていないため表示されません。「設定 · 通知 · 康康」で許可してください。" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "사용자 지정 지표 만들기" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "알림이 저장되었지만 시스템 알림 권한이 꺼져 있어 표시되지 않습니다. '설정 · 알림 · 康康'에서 허용하세요." } } } }, - "日": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Sun" + "摘要" : { + + }, + "摘要(可选)" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Summary (optional)" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "日" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "概要(任意)" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "일" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "요약(선택)" } } } }, - "日记": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Diary" + "撰写报告" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Write Report" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "日記" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "レポートを作成" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "일기" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "리포트 작성" } } } }, - "早安": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Good morning" + "支持删除记录,数据将从本机移除;数据保存在本机,不依赖云端备份。" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Records can be deleted, and the data is removed from this device. Data is stored locally and does not rely on cloud backup." } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "おはようございます" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "記録の削除に対応しており、データは本機から削除されます。データは本機に保存され、クラウドバックアップに依存しません。" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "좋은 아침이에요" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "기록 삭제를 지원하며, 데이터는 기기에서 제거됩니다. 데이터는 기기에 저장되며 클라우드 백업에 의존하지 않습니다." } } } }, - "时间": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Time" + "收缩" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Systolic" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "時間" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "収縮" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "시간" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "수축" } } } }, - "昨天": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Yesterday" + "收缩 " : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Systolic " } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "昨日" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "収縮 " } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "어제" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "수축 " } } } }, - "显示": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Show" + "收缩 / 舒张" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Systolic / Diastolic" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "表示" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "収縮 / 拡張" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "표시" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "수축 / 이완" } } } }, - "晚上好": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Good evening" + "收缩压" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Systolic pressure" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "こんばんは" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "収縮期血圧" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "좋은 저녁이에요" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "수축기 혈압" } } } }, - "暂停下载": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Pause download" + "数值" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Value" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "ダウンロードを一時停止" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "数値" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "다운로드 일시정지" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "수치" } } } }, - "更新一下原文,再让 AI 继续追问": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Update the original text, then let the AI continue with follow-up questions" + "数据保存在本设备:卸载 App 或删除数据后可能无法恢复,重要资料请自行留存原件。" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Data is stored on this device: it may be unrecoverable after you uninstall the app or delete the data, so please keep your own originals of important documents." } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "元の文章を更新してから、AIに続けて質問させましょう" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "データは本端末に保存されます:アプリのアンインストールやデータ削除後は復元できない場合があります。重要な資料は原本をご自身で保管してください。" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "원문을 업데이트한 다음 AI가 이어서 질문하도록 하세요" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "데이터는 이 기기에 저장됩니다: 앱을 삭제하거나 데이터를 지운 후에는 복구하지 못할 수 있으니, 중요한 자료는 원본을 직접 보관하세요." } } } }, - "月": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Month" + "整体摘记" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Overall Summary" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "月" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "全体メモ" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "월" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "전체 요약" } } } }, - "未下载": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Not downloaded" + "整张图" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Whole image" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "未ダウンロード" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "画像全体" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "다운로드 안 됨" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "전체 이미지" } } } }, - "未使用": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Unused" + "整页入框,避免裁切到指标" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fit the whole page in frame to avoid cropping any indicators" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "未使用" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ページ全体をフレームに収め、指標が切れないようにしてください" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "미사용" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "지표가 잘리지 않도록 페이지 전체를 화면에 담으세요" } } } }, - "未开始": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Not started" + "文件大小校验失败(预期 %lld,实际 %lld)" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "File size verification failed (expected %1$lld, got %2$lld)" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ファイルサイズの検証に失敗しました(予期 %1$lld、実際 %2$lld)" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "未開始" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "파일 크기 검증에 실패했습니다(예상 %1$lld, 실제 %2$lld)" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "시작 안 함" + "zh-Hans" : { + "stringUnit" : { + "state" : "new", + "value" : "文件大小校验失败(预期 %1$lld,实际 %2$lld)" } } } }, - "未知错误:%@": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Unknown error: %@" + "文字日记" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Text diary" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "不明なエラー:%@" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "テキスト日記" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "알 수 없는 오류: %@" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "텍스트 일기" } } } }, - "未设置": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Not set" + "文本解读 · 趋势 / 问答" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Text interpretation · Trends / Q&A" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "未設定" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "テキスト解説 · トレンド / 質問応答" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "설정 안 함" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "텍스트 해석 · 추세 / 질의응답" } } } }, - "未选": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Not selected" + "新建" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "New" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "未選択" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "新規" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "선택 안 함" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "새로 만들기" } } } }, - "未选日": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "No date selected" + "新建提醒" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "New Reminder" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "日付未選択" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "新しいリマインダー" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "날짜 미선택" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "새 알림" } } } }, - "本 App 仅供健康信息记录与参考,不能替代专业医疗意见。": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "This app is for recording and referencing health information only and cannot replace professional medical advice." + "新建提醒,或在记录指标时开启" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Create a reminder, or enable one when logging a metric." } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "本アプリは健康情報の記録と参考のみを目的としており、専門的な医療アドバイスに代わるものではありません。" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "リマインダーを作成、または指標の記録時に有効化。" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "본 앱은 건강 정보의 기록 및 참고용으로만 제공되며, 전문적인 의료 조언을 대신할 수 없습니다." + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "알림을 만들거나 지표 기록 시 설정하세요." } } } }, - "本周": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "This week" + "新建自定义指标" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "New custom indicator" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "今週" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "カスタム指標を作成" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "이번 주" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "사용자 지정 지표 만들기" } } } }, - "本地 AI · 正在解读": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "On-device AI · Interpreting" + "无参考范围" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "No reference range" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "オンデバイスAI · 解析中" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "基準範囲なし" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "온디바이스 AI · 해석 중" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "참고 범위 없음" } } } }, - "本地 AI 功能(拍照识别、解读、问答)需要约 8GB 内存,": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "On-device AI features (photo recognition, interpretation, Q&A) require about 8GB of memory," + "日" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sun" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "オンデバイスAI機能(写真認識、解説、質問応答)には約8GBのメモリが必要です。" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "日" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "온디바이스 AI 기능(사진 인식, 해석, 질의응답)에는 약 8GB의 메모리가 필요합니다," + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "일" } } } }, - "本地 AI 模型体积较大(约 4GB),首次使用需联网下载,建议在 Wi-Fi 环境进行;": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "The on-device AI model is large (about 4GB) and requires an internet download on first use; we recommend doing this over Wi-Fi;" + "日期" : { + + }, + "日记" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Diary" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "オンデバイスAIモデルはサイズが大きく(約4GB)、初回使用時にネット接続でのダウンロードが必要です。Wi-Fi環境での実施をおすすめします。" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "日記" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "온디바이스 AI 모델은 용량이 크며(약 4GB) 처음 사용할 때 인터넷 다운로드가 필요합니다. Wi-Fi 환경에서 진행하는 것을 권장합니다;" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "일기" } } } }, - "本地 RAG · Qwen3 1.7B · 不上传任何数据": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "On-device RAG · Qwen3 1.7B · No data uploaded" + "日记详情" : { + + }, + "早安" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Good morning" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "オンデバイスRAG · Qwen3 1.7B · データは一切アップロードしません" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "おはようございます" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "온디바이스 RAG · Qwen3 1.7B · 어떤 데이터도 업로드하지 않음" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "좋은 아침이에요" } } } }, - "本地优先的个人健康影像档案": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Local-first personal health imaging archive" + "时间" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Time" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "ローカル優先の個人健康画像アーカイブ" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "時間" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "로컬 우선 개인 건강 영상 아카이브" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "시간" } } } }, - "本地加密": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Local encryption" + "昨天" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Yesterday" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "ローカル暗号化" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "昨日" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "로컬 암호화" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "어제" } } } }, - "本地处理 · 永不上传": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Processed on-device · Never uploaded" + "显示" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Show" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "オンデバイス処理 · アップロードしません" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "表示" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "온디바이스 처리 · 업로드하지 않음" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "표시" } } } }, - "本地处理中 · 不会上传任何内容": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Processing on-device · Nothing will be uploaded" + "晚上好" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Good evening" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "オンデバイスで処理中 · 何もアップロードしません" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "こんばんは" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "온디바이스에서 처리 중 · 아무것도 업로드하지 않음" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "좋은 저녁이에요" } } } }, - "本地推理 · %.1f tok/s": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "On-device inference · %.1f tok/s" + "暂停下载" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pause download" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "オンデバイス推論 · %.1f tok/s" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ダウンロードを一時停止" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "온디바이스 추론 · %.1f tok/s" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "다운로드 일시정지" } } } }, - "本地识别中": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Recognizing on-device" + "更新一下原文,再让 AI 继续追问" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Update the original text, then let the AI continue with follow-up questions" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "オンデバイスで認識中" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "元の文章を更新してから、AIに続けて質問させましょう" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "온디바이스에서 인식 중" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "원문을 업데이트한 다음 AI가 이어서 질문하도록 하세요" } } } }, - "本地识别中…": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Recognizing on-device…" + "月" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Month" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "オンデバイスで認識中…" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "月" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "온디바이스에서 인식 중…" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "월" } } } }, - "本地问答:基于你自己的档案问答,引用可点击回链到原记录": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "On-device Q&A: ask questions based on your own archive; citations are tappable and link back to the source record" + "月份" : { + + }, + "未下载" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Not downloaded" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "オンデバイス質問応答:あなた自身のアーカイブに基づいて質問でき、引用をタップすると元の記録に戻れます" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "未ダウンロード" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "온디바이스 질의응답: 본인의 아카이브를 기반으로 질문하며, 인용을 탭하면 원본 기록으로 돌아갈 수 있습니다" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "다운로드 안 됨" } } } }, - "本月": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "This month" + "未使用" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unused" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "今月" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "未使用" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "이번 달" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "미사용" } } } }, - "本机保存": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Save to this device" + "未开始" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Not started" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "本体に保存" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "未開始" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "기기에 저장" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "시작 안 함" } } } }, - "本机提醒 · 不发任何数据": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "On-device reminders · No data sent" + "未知错误:%@" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unknown error: %@" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "本体での通知 · データは送信しません" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "不明なエラー:%@" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "기기 내 알림 · 어떤 데이터도 전송하지 않음" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "알 수 없는 오류: %@" } } } }, - "本机摘要": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "On-device summary" + "未设置" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Not set" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "本体での要約" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "未設定" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "기기 내 요약" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "설정 안 함" } } } }, - "本次共检测 28 项,%@(血脂相关 2 项 + 尿酸)、%@(维生素 D)。整体趋势提示代谢风险有所抬升,建议优化饮食并复查血脂。": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "A total of 28 items were tested this time: %1$@ (2 lipid-related items + uric acid) and %2$@ (vitamin D). The overall trend suggests a slightly elevated metabolic risk; we recommend improving your diet and rechecking your blood lipids." - } - }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "今回は計28項目を検査しました:%1$@(脂質関連2項目+尿酸)、%2$@(ビタミンD)。全体的な傾向として代謝リスクがやや上昇しており、食生活の改善と血中脂質の再検査をおすすめします。" + "未选" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Not selected" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "이번에 총 28개 항목을 검사했습니다: %1$@(지질 관련 2개 항목 + 요산), %2$@(비타민 D). 전반적인 추세는 대사 위험이 다소 높아진 것을 시사하므로, 식단 개선과 혈중 지질 재검사를 권장합니다." + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "未選択" } }, - "zh-Hans": { - "stringUnit": { - "state": "new", - "value": "本次共检测 28 项,%1$@(血脂相关 2 项 + 尿酸)、%2$@(维生素 D)。整体趋势提示代谢风险有所抬升,建议优化饮食并复查血脂。" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "선택 안 함" } } } }, - "本次已记录 %lld 项": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "%lld items recorded this time" + "未选日" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "No date selected" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "今回 %lld 項目を記録しました" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "日付未選択" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "이번에 %lld개 항목을 기록했습니다" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "날짜 미선택" } } } }, - "本次持续": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Duration this time" + "本 App 仅供健康信息记录与参考,不能替代专业医疗意见。" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "This app is for recording and referencing health information only and cannot replace professional medical advice." } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "今回の継続時間" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "本アプリは健康情報の記録と参考のみを目的としており、専門的な医療アドバイスに代わるものではありません。" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "이번 지속 시간" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "본 앱은 건강 정보의 기록 및 참고용으로만 제공되며, 전문적인 의료 조언을 대신할 수 없습니다." } } } }, - "本设备未设置 Face ID 或密码": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Face ID or a passcode is not set up on this device" + "本周" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "This week" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "この端末ではFace IDまたはパスコードが設定されていません" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "今週" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "이 기기에 Face ID 또는 암호가 설정되어 있지 않습니다" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "이번 주" } } } }, - "机构(可选)": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Institution (optional)" + "本地 AI · 正在解读" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "On-device AI · Interpreting" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "機関(任意)" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "オンデバイスAI · 解析中" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "기관(선택)" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "온디바이스 AI · 해석 중" } } } }, - "查看原图": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "View original image" + "本地 AI 功能(拍照识别、解读、问答)需要约 8GB 内存," : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "On-device AI features (photo recognition, interpretation, Q&A) require about 8GB of memory," } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "元の画像を見る" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "オンデバイスAI機能(写真認識、解説、質問応答)には約8GBのメモリが必要です。" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "원본 이미지 보기" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "온디바이스 AI 기능(사진 인식, 해석, 질의응답)에는 약 8GB의 메모리가 필요합니다," } } } }, - "标题": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Title" + "本地 AI 模型体积较大(约 4GB),首次使用需联网下载,建议在 Wi-Fi 环境进行;" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "The on-device AI model is large (about 4GB) and requires an internet download on first use; we recommend doing this over Wi-Fi;" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "タイトル" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "オンデバイスAIモデルはサイズが大きく(約4GB)、初回使用時にネット接続でのダウンロードが必要です。Wi-Fi環境での実施をおすすめします。" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "제목" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "온디바이스 AI 모델은 용량이 크며(약 4GB) 처음 사용할 때 인터넷 다운로드가 필요합니다. Wi-Fi 환경에서 진행하는 것을 권장합니다;" } } } }, - "校验中": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Verifying" + "本地 RAG · Qwen3 1.7B · 不上传任何数据" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "On-device RAG · Qwen3 1.7B · No data uploaded" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "検証中" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "オンデバイスRAG · Qwen3 1.7B · データは一切アップロードしません" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "검증 중" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "온디바이스 RAG · Qwen3 1.7B · 어떤 데이터도 업로드하지 않음" } } } }, - "核对后一次保存": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Review, then save all at once" + "本地优先的个人健康影像档案" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Local-first personal health imaging archive" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "確認してまとめて保存" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ローカル優先の個人健康画像アーカイブ" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "확인 후 한 번에 저장" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "로컬 우선 개인 건강 영상 아카이브" } } } }, - "核对识别结果": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Review recognition results" + "本地加密" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Local encryption" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "認識結果を確認" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ローカル暗号化" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "인식 결과 확인" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "로컬 암호화" } } } }, - "档案 · %lld": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Records · %lld" + "本地处理 · 永不上传" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Processed on-device · Never uploaded" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "記録 · %lld" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "オンデバイス処理 · アップロードしません" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "기록 · %lld" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "온디바이스 처리 · 업로드하지 않음" } } } }, - "检索数据": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Searching data" + "本地处理中 · 不会上传任何内容" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Processing on-device · Nothing will be uploaded" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "データを検索" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "オンデバイスで処理中 · 何もアップロードしません" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "데이터 검색" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "온디바이스에서 처리 중 · 아무것도 업로드하지 않음" } } } }, - "模型加载失败:%@": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Failed to load model: %@" + "本地推理 · %.1f tok/s" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "On-device inference · %.1f tok/s" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "モデルの読み込みに失敗しました: %@" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "オンデバイス推論 · %.1f tok/s" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "모델 로드 실패: %@" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "온디바이스 추론 · %.1f tok/s" } } } }, - "模型未就绪时 App 仍可使用,AI 功能会提示前往下载。": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "The app still works when the model isn't ready; AI features will prompt you to download it." + "本地识别中" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Recognizing on-device" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "モデルが未準備でもアプリは使用でき、AI機能はダウンロードを案内します。" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "オンデバイスで認識中" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "모델이 준비되지 않아도 앱은 사용할 수 있으며, AI 기능은 다운로드를 안내합니다." + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "온디바이스에서 인식 중" } } } }, - "模型管理": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Model Management" + "本地识别中…" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Recognizing on-device…" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "モデル管理" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "オンデバイスで認識中…" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "모델 관리" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "온디바이스에서 인식 중…" } } } }, - "模型约 %@,建议在 Wi-Fi 下下载。": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "The model is about %@; downloading over Wi-Fi is recommended." + "本地问答:基于你自己的档案问答,引用可点击回链到原记录" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "On-device Q&A: ask questions based on your own archive; citations are tappable and link back to the source record" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "モデルは約%@です。Wi-Fi環境でのダウンロードをおすすめします。" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "オンデバイス質問応答:あなた自身のアーカイブに基づいて質問でき、引用をタップすると元の記録に戻れます" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "모델은 약 %@입니다. Wi-Fi 환경에서 다운로드하는 것을 권장합니다." + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "온디바이스 질의응답: 본인의 아카이브를 기반으로 질문하며, 인용을 탭하면 원본 기록으로 돌아갈 수 있습니다" } } } }, - "模拟器没有摄像头,从相册选一张化验单/体检报告": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "The simulator has no camera; pick a lab report / checkup report from your photos" + "本月" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "This month" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "シミュレーターにはカメラがありません。アルバムから検査結果/健康診断レポートを選んでください" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "今月" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "시뮬레이터에는 카메라가 없습니다. 앨범에서 검사 결과 / 건강검진 리포트를 선택하세요" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "이번 달" } } } }, - "正在本地识别第 1 / 3 页…": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Recognizing page 1 / 3 on-device…" + "本机保存" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Save to this device" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "オンデバイスで1 / 3ページ目を認識中…" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "本体に保存" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "온디바이스로 1 / 3페이지 인식 중…" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "기기에 저장" } } } }, - "正在本地识别第 2 / 3 页…": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Recognizing page 2 / 3 on-device…" + "本机提醒 · 不发任何数据" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "On-device reminders · No data sent" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "オンデバイスで2 / 3ページ目を認識中…" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "本体での通知 · データは送信しません" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "온디바이스로 2 / 3페이지 인식 중…" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "기기 내 알림 · 어떤 데이터도 전송하지 않음" } } } }, - "正在本地识别第 3 / 3 页…": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Recognizing page 3 / 3 on-device…" + "本机摘要" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "On-device summary" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "オンデバイスで3 / 3ページ目を認識中…" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "本体での要約" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "온디바이스로 3 / 3페이지 인식 중…" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "기기 내 요약" } } } }, - "正常": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Normal" + "本次共检测 28 项,%@(血脂相关 2 项 + 尿酸)、%@(维生素 D)。整体趋势提示代谢风险有所抬升,建议优化饮食并复查血脂。" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "A total of 28 items were tested this time: %1$@ (2 lipid-related items + uric acid) and %2$@ (vitamin D). The overall trend suggests a slightly elevated metabolic risk; we recommend improving your diet and rechecking your blood lipids." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "今回は計28項目を検査しました:%1$@(脂質関連2項目+尿酸)、%2$@(ビタミンD)。全体的な傾向として代謝リスクがやや上昇しており、食生活の改善と血中脂質の再検査をおすすめします。" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "正常" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "이번에 총 28개 항목을 검사했습니다: %1$@(지질 관련 2개 항목 + 요산), %2$@(비타민 D). 전반적인 추세는 대사 위험이 다소 높아진 것을 시사하므로, 식단 개선과 혈중 지질 재검사를 권장합니다." } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "정상" + "zh-Hans" : { + "stringUnit" : { + "state" : "new", + "value" : "本次共检测 28 项,%1$@(血脂相关 2 项 + 尿酸)、%2$@(维生素 D)。整体趋势提示代谢风险有所抬升,建议优化饮食并复查血脂。" } } } }, - "正常项": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Normal items" + "本次已记录 %lld 项" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "%lld items recorded this time" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "正常項目" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "今回 %lld 項目を記録しました" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "정상 항목" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "이번에 %lld개 항목을 기록했습니다" } } } }, - "每周 ": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Weekly " + "本次持续" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Duration this time" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "毎週 " + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "今回の継続時間" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "매주 " + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "이번 지속 시간" } } } }, - "每天": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Daily" + "本设备未设置 Face ID 或密码" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Face ID or a passcode is not set up on this device" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "毎日" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "この端末ではFace IDまたはパスコードが設定されていません" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "매일" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "이 기기에 Face ID 또는 암호가 설정되어 있지 않습니다" } } } }, - "永久删除这份导出?": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Permanently delete this export?" + "机构" : { + + }, + "机构(可选)" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Institution (optional)" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "このエクスポートを完全に削除しますか?" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "機関(任意)" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "이 내보내기를 영구 삭제할까요?" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "기관(선택)" } } } }, - "没有指标 — 点上方「加一项」补一行,或直接保存只存图片": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "No indicators — tap “Add item” above to add a row, or save directly to keep only the image" + "来源" : { + + }, + "查看原图" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "View original image" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "指標がありません — 上の「項目を追加」で1行追加するか、そのまま保存して画像のみ保存します" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "元の画像を見る" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "지표가 없습니다 — 위의 「항목 추가」를 눌러 한 줄 추가하거나, 그대로 저장하여 이미지만 저장하세요" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "원본 이미지 보기" } } } }, - "测试 PROMPT": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Test PROMPT" + "标签" : { + + }, + "标题" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Title" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "テストPROMPT" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "タイトル" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "테스트 PROMPT" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "제목" } } } }, - "测量时间": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Measurement time" + "校验中" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verifying" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "測定時刻" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "検証中" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "측정 시각" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "검증 중" } } } }, - "添加你自己的长期监测项": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Add your own long-term monitoring item" + "核对后一次保存" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Review, then save all at once" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "独自の長期モニタリング項目を追加" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "確認してまとめて保存" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "나만의 장기 모니터링 항목 추가" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "확인 후 한 번에 저장" } } } }, - "点底部 + 号可以补一条": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Tap the + at the bottom to add one" + "核对识别结果" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Review recognition results" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "下の+ボタンで1件追加できます" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "認識結果を確認" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "하단의 + 버튼으로 한 건 추가할 수 있어요" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "인식 결과 확인" } } } }, - "点这里再开一次": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Tap here to start again" + "档案 · %lld" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Records · %lld" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "ここをタップしてもう一度" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "記録 · %lld" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "여기를 눌러 다시 시작" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "기록 · %lld" } } } }, - "点这里完善你的资料": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Tap here to complete your profile" + "检索数据" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Searching data" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "ここをタップしてプロフィールを入力" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "データを検索" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "여기를 눌러 프로필을 완성하세요" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "데이터 검색" } } } }, - "状态": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Status" + "模型加载失败:%@" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Failed to load model: %@" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "状態" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "モデルの読み込みに失敗しました: %@" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "상태" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "모델 로드 실패: %@" } } } }, - "状态(按数值自动判)": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Status (auto-determined by value)" + "模型未就绪时 App 仍可使用,AI 功能会提示前往下载。" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "The app still works when the model isn't ready; AI features will prompt you to download it." } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "状態(数値で自動判定)" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "モデルが未準備でもアプリは使用でき、AI機能はダウンロードを案内します。" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "상태(수치로 자동 판정)" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "모델이 준비되지 않아도 앱은 사용할 수 있으며, AI 기능은 다운로드를 안내합니다." } } } }, - "理解意图": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Understanding intent" + "模型管理" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Model Management" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "意図を理解" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "モデル管理" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "의도 파악" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "모델 관리" } } } }, - "甘油三酯": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Triglycerides" + "模型约 %@,建议在 Wi-Fi 下下载。" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "The model is about %@; downloading over Wi-Fi is recommended." } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "中性脂肪" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "モデルは約%@です。Wi-Fi環境でのダウンロードをおすすめします。" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "중성지방" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "모델은 약 %@입니다. Wi-Fi 환경에서 다운로드하는 것을 권장합니다." } } } }, - "甘油三酯 TG": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Triglycerides TG" + "模拟器没有摄像头,从相册选一张化验单/体检报告" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "The simulator has no camera; pick a lab report / checkup report from your photos" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "中性脂肪 TG" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "シミュレーターにはカメラがありません。アルバムから検査結果/健康診断レポートを選んでください" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "중성지방 TG" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "시뮬레이터에는 카메라가 없습니다. 앨범에서 검사 결과 / 건강검진 리포트를 선택하세요" } } } }, - "甘油三酯 TG 1.78 mmol/L": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Triglycerides TG 1.78 mmol/L" + "正在本地识别第 1 / 3 页…" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Recognizing page 1 / 3 on-device…" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "中性脂肪 TG 1.78 mmol/L" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "オンデバイスで1 / 3ページ目を認識中…" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "중성지방 TG 1.78 mmol/L" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "온디바이스로 1 / 3페이지 인식 중…" } } } }, - "生成失败:%@": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Generation failed: %@" + "正在本地识别第 2 / 3 页…" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Recognizing page 2 / 3 on-device…" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "生成に失敗しました: %@" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "オンデバイスで2 / 3ページ目を認識中…" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "생성 실패: %@" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "온디바이스로 2 / 3페이지 인식 중…" } } } }, - "生成报告": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Generate report" + "正在本地识别第 3 / 3 页…" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Recognizing page 3 / 3 on-device…" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "レポートを生成" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "オンデバイスで3 / 3ページ目を認識中…" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "리포트 생성" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "온디바이스로 3 / 3페이지 인식 중…" } } } }, - "生成整体摘要…": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Generating overall summary…" + "正常" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Normal" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "全体のサマリーを生成中…" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "正常" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "전체 요약 생성 중…" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "정상" } } } }, - "生成新导出": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Create new export" + "正常项" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Normal items" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "新しいエクスポートを作成" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "正常項目" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "새 내보내기 생성" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "정상 항목" } } } }, - "用 %lld 次": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Used %lld times" + "每周" : { + + }, + "每周 " : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Weekly " } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "%lld回使用" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "毎週 " } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "%lld회 사용" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "매주 " } } } }, - "用于自动判定 正常/偏高/偏低": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Used to auto-determine Normal / High / Low" + "每天" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Daily" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "正常/高い/低いの自動判定に使用" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "毎日" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "정상 / 높음 / 낮음 자동 판정에 사용" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "매일" } } } }, - "男": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Male" + "每年" : { + + }, + "每年%lld月%lld日" : { + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "new", + "value" : "每年%1$lld月%2$lld日" + } + } + } + }, + "每日" : { + + }, + "每月" : { + + }, + "每月%lld日" : { + + }, + "永久删除这份导出?" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Permanently delete this export?" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "男性" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "このエクスポートを完全に削除しますか?" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "남성" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "이 내보내기를 영구 삭제할까요?" } } } }, - "症状": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Symptom" + "没有指标 — 点上方「加一项」补一行,或直接保存只存图片" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "No indicators — tap “Add item” above to add a row, or save directly to keep only the image" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "症状" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "指標がありません — 上の「項目を追加」で1行追加するか、そのまま保存して画像のみ保存します" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "증상" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "지표가 없습니다 — 위의 「항목 추가」를 눌러 한 줄 추가하거나, 그대로 저장하여 이미지만 저장하세요" } } } }, - "症状 · 已结束": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Symptom · Ended" + "测试 PROMPT" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Test PROMPT" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "症状 · 終了" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "テストPROMPT" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "증상 · 종료됨" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "테스트 PROMPT" } } } }, - "症状 · 持续中": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Symptom · Ongoing" + "测量时间" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Measurement time" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "症状 · 継続中" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "測定時刻" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "증상 · 진행 중" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "측정 시각" } } } }, - "症状开始": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Symptom onset" + "添加你自己的长期监测项" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Add your own long-term monitoring item" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "症状の開始" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "独自の長期モニタリング項目を追加" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "증상 시작" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "나만의 장기 모니터링 항목 추가" } } } }, - "症状持续中": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Symptom ongoing" + "点底部 + 号可以补一条" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tap the + at the bottom to add one" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "症状継続中" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "下の+ボタンで1件追加できます" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "증상 진행 중" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "하단의 + 버튼으로 한 건 추가할 수 있어요" } } } }, - "空腹血糖": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Fasting glucose" + "点这里再开一次" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tap here to start again" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "空腹時血糖" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ここをタップしてもう一度" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "공복 혈당" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "여기를 눌러 다시 시작" } } } }, - "空腹血糖 GLU": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Fasting glucose GLU" + "点这里完善你的资料" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tap here to complete your profile" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "空腹時血糖 GLU" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ここをタップしてプロフィールを入力" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "공복 혈당 GLU" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "여기를 눌러 프로필을 완성하세요" } } } }, - "第 %lld 轮 · 基于你刚才更新的文本 · %lld 条": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Round %1$lld · Based on the text you just updated · %2$lld items" + "状态" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Status" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "%1$lld回目 · 先ほど更新したテキストに基づく · %2$lld件" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "状態" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "%1$lld회차 · 방금 업데이트한 텍스트 기반 · %2$lld건" - } - }, - "zh-Hans": { - "stringUnit": { - "state": "new", - "value": "第 %1$lld 轮 · 基于你刚才更新的文本 · %2$lld 条" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "상태" } } } }, - "第 1 轮 · %lld 条": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Round 1 · %lld items" + "状态(按数值自动判)" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Status (auto-determined by value)" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "1回目 · %lld件" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "状態(数値で自動判定)" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "1회차 · %lld건" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "상태(수치로 자동 판정)" } } } }, - "管理用药、复查、监测的周期提醒": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Manage recurring reminders for meds, follow-ups, and monitoring" + "理解意图" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Understanding intent" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "服薬・再検査・モニタリングの定期リマインダーを管理" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "意図を理解" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "복약·재검사·모니터링 정기 리마인더 관리" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "의도 파악" } } } }, - "类型": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Type" + "甘油三酯" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Triglycerides" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "種類" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "中性脂肪" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "유형" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "중성지방" } } } }, - "糖化血红蛋白": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "HbA1c" + "甘油三酯 TG" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Triglycerides TG" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "HbA1c" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "中性脂肪 TG" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "HbA1c" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "중성지방 TG" } } } }, - "系统:iOS 17 或更新版本。": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "System: iOS 17 or later." + "甘油三酯 TG 1.78 mmol/L" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Triglycerides TG 1.78 mmol/L" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "システム: iOS 17以降。" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "中性脂肪 TG 1.78 mmol/L" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "시스템: iOS 17 이상." + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "중성지방 TG 1.78 mmol/L" } } } }, - "纸张铺平,避免反光、阴影": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Flatten the paper and avoid glare or shadows" + "生成失败:%@" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Generation failed: %@" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "紙を平らにし、反射や影を避けてください" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "生成に失敗しました: %@" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "종이를 평평하게 펴고 반사와 그림자를 피하세요" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "생성 실패: %@" } } } }, - "结束": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "End" + "生成报告" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Generate report" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "終了" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "レポートを生成" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "종료" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "리포트 생성" } } } }, - "结束并保存": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "End and Save" + "生成整体摘要…" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Generating overall summary…" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "終了して保存" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "全体のサマリーを生成中…" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "종료하고 저장" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "전체 요약 생성 중…" } } } }, - "结束时再来点结束": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Add more when ending" + "生成新导出" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Create new export" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "終了時にもう少し追加" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "新しいエクスポートを作成" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "종료할 때 좀 더 추가" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "새 내보내기 생성" } } } }, - "结束时间": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "End time" + "用 %lld 次" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Used %lld times" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "終了時刻" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%lld回使用" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "종료 시간" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "%lld회 사용" } } } }, - "结束症状": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "End symptom" + "用于自动判定 正常/偏高/偏低" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Used to auto-determine Normal / High / Low" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "症状を終了" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "正常/高い/低いの自動判定に使用" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "증상 종료" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "정상 / 높음 / 낮음 자동 판정에 사용" } } } }, - "结构化失败:%@": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Structuring failed: %@" + "甲状腺疾病" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Thyroid disease" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "構造化に失敗しました:%@" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "甲状腺疾患" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "구조화 실패: %@" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "갑상선 질환" } } } }, - "结果解析失败:%@": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Failed to parse result: %@" + "男" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Male" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "結果の解析に失敗しました:%@" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "男性" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "결과 파싱 실패: %@" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "남성" } } } }, - "给医生看的就诊摘要": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Visit summary for your doctor" + "疲劳" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fatigue" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "医師に見せる受診サマリー" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "疲労" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "의사에게 보여줄 진료 요약" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "피로" } } } }, - "继续下载": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Continue download" + "症状" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Symptom" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "ダウンロードを続ける" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "症状" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "다운로드 계속" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "증상" } } } }, - "继续拍下一项": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Capture next item" + "症状 · 已结束" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Symptom · Ended" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "次の項目を撮影" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "症状 · 終了" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "다음 항목 촬영" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "증상 · 종료됨" } } } }, - "维生素 D": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Vitamin D" + "症状 · 持续中" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Symptom · Ongoing" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "ビタミンD" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "症状 · 継続中" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "비타민 D" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "증상 · 진행 중" } } } }, - "编辑": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Edit" + "症状开始" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Symptom onset" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "編集" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "症状の開始" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "편집" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "증상 시작" } } } }, - "编辑「%@」": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Edit “%@”" + "症状持续中" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Symptom ongoing" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "「%@」を編集" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "症状継続中" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "“%@” 편집" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "증상 진행 중" } } } }, - "编辑/删除": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Edit / Delete" + "症状详情" : { + + }, + "程度" : { + + }, + "空腹血糖" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fasting glucose" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "編集/削除" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "空腹時血糖" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "편집 / 삭제" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "공복 혈당" } } } }, - "自定义": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Custom" + "空腹血糖 GLU" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fasting glucose GLU" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "カスタム" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "空腹時血糖 GLU" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "사용자 지정" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "공복 혈당 GLU" } } } }, - "自定义慢病": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Custom chronic condition" + "第 %lld 轮 · 基于你刚才更新的文本 · %lld 条" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Round %1$lld · Based on the text you just updated · %2$lld items" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$lld回目 · 先ほど更新したテキストに基づく · %2$lld件" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "カスタム慢性疾患" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$lld회차 · 방금 업데이트한 텍스트 기반 · %2$lld건" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "사용자 지정 만성질환" + "zh-Hans" : { + "stringUnit" : { + "state" : "new", + "value" : "第 %1$lld 轮 · 基于你刚才更新的文本 · %2$lld 条" } } } }, - "自定义指标": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Custom indicator" + "第 1 轮 · %lld 条" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Round 1 · %lld items" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "カスタム指標" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "1回目 · %lld件" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "사용자 지정 지표" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "1회차 · %lld건" } } } }, - "自定义指标会出现在「+ 指标记录 → 长期监测」的 grid 里,可设提醒、进趋势": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Custom indicators appear in the grid under “+ Indicator Record → Long-term Monitoring,” where you can set reminders and add them to Trends" + "管理用药、复查、监测的周期提醒" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Manage recurring reminders for meds, follow-ups, and monitoring" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "カスタム指標は「+ 指標記録 → 長期モニタリング」のグリッドに表示され、リマインダー設定やトレンドへの追加ができます" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "服薬・再検査・モニタリングの定期リマインダーを管理" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "사용자 지정 지표는 “+ 지표 기록 → 장기 모니터링” 그리드에 표시되며, 알림 설정과 추세 추가가 가능합니다" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "복약·재검사·모니터링 정기 리마인더 관리" } } } }, - "舒张": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Diastolic" + "类型" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Type" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "拡張" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "種類" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "이완" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "유형" } } } }, - "舒张 ": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Diastolic " + "糖化血红蛋白" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "HbA1c" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "拡張 " + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "HbA1c" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "이완 " + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "HbA1c" } } } }, - "舒张压": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Diastolic pressure" + "糖尿病" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Diabetes" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "拡張期血圧" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "糖尿病" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "이완기 혈압" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "당뇨병" } } } }, - "范围 %@ %@": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Range %1$@ %2$@" + "系统:iOS 17 或更新版本。" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "System: iOS 17 or later." } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "範囲 %1$@ %2$@" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "システム: iOS 17以降。" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "범위 %1$@ %2$@" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "시스템: iOS 17 이상." + } + } + } + }, + "纸张铺平,避免反光、阴影" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Flatten the paper and avoid glare or shadows" } }, - "zh-Hans": { - "stringUnit": { - "state": "new", - "value": "范围 %1$@ %2$@" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "紙を平らにし、反射や影を避けてください" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "종이를 평평하게 펴고 반사와 그림자를 피하세요" } } } }, - "血压": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Blood pressure" + "结束" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "End" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "血圧" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "終了" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "혈압" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "종료" } } } }, - "血型": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Blood type" + "结束并保存" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "End and Save" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "血液型" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "終了して保存" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "혈액형" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "종료하고 저장" } } } }, - "血氧": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Blood oxygen" + "结束时再来点结束" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Add more when ending" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "血中酸素" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "終了時にもう少し追加" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "혈중 산소" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "종료할 때 좀 더 추가" } } } }, - "解锁康康,查看你的健康档案": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Unlock Kangkang to view your health records" + "结束时间" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "End time" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "Kangkangのロックを解除して健康記録を表示" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "終了時刻" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "Kangkang 잠금을 해제하고 건강 기록을 확인하세요" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "종료 시간" } } } }, - "让 AI 帮我想想还能记什么": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Let AI suggest what else to record" + "结束症状" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "End symptom" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "他に記録できることをAIに考えてもらう" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "症状を終了" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "AI에게 더 기록할 것을 제안받기" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "증상 종료" } } } }, - "记录": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Records" + "结构化失败:%@" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Structuring failed: %@" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "記録" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "構造化に失敗しました:%@" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "기록" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "구조화 실패: %@" } } } }, - "记录什么?": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "What to record?" + "结果解析失败:%@" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Failed to parse result: %@" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "何を記録しますか?" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "結果の解析に失敗しました:%@" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "무엇을 기록할까요?" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "결과 파싱 실패: %@" } } } }, - "记录会按时间归类显示": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Records are grouped and shown by time" + "给医生看的就诊摘要" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Visit summary for your doctor" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "記録は時系列で分類して表示されます" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "医師に見せる受診サマリー" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "기록은 시간별로 분류되어 표시됩니다" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "의사에게 보여줄 진료 요약" } } } }, - "记录指标": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Record indicator" + "继续下载" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Continue download" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "指標を記録" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ダウンロードを続ける" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "지표 기록" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "다운로드 계속" } } } }, - "记录提醒": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Record reminder" + "继续拍下一项" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Capture next item" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "記録リマインダー" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "次の項目を撮影" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "기록 알림" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "다음 항목 촬영" } } } }, - "记录症状": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Log a symptom" + "维生素 D" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vitamin D" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "症状を記録" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ビタミンD" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "증상 기록" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "비타민 D" } } } }, - "记录身体状态 · 可让 AI 多轮辅助查漏补缺": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Record your physical state · AI can assist over multiple turns to fill in the gaps" + "编辑" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Edit" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "体調を記録 · AIが複数回にわたって抜け漏れを補助します" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "編集" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "신체 상태 기록 · AI가 여러 차례 도와 빠진 부분을 채워줘요" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "편집" } } } }, - "记录身体状态、用药、感受 · 可让 AI 辅助": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Record your physical state, medications, and feelings · AI can assist" + "编辑「%@」" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Edit “%@”" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "体調、服薬、感じたことを記録 · AIが補助します" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "「%@」を編集" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "신체 상태, 복약, 느낌을 기록 · AI가 도와줘요" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "“%@” 편집" } } } }, - "设备上的 AI 模型会尝试把专业指标转述为通俗说明,帮你记录并回顾自己的健康变化。": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "The on-device AI model tries to rephrase technical indicators into plain-language explanations, helping you record and review your health changes." + "编辑/删除" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Edit / Delete" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "オンデバイスのAIモデルが専門的な指標をわかりやすい説明に言い換え、健康の変化を記録・振り返るお手伝いをします。" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "編集/削除" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "온디바이스 AI 모델이 전문 지표를 알기 쉬운 설명으로 풀어내어 건강 변화를 기록하고 돌아보도록 도와줘요." + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "편집 / 삭제" } } } }, - "设备要求": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Device requirements" + "编辑提醒" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Edit Reminder" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "デバイス要件" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "リマインダーを編集" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "기기 요구 사항" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "알림 편집" } } } }, - "识别全程在本地,图片不会上传": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Recognition runs entirely on-device; images are never uploaded" + "腹痛" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Abdominal pain" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "認識はすべてオンデバイスで行われ、画像はアップロードされません" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "腹痛" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "인식은 전부 온디바이스에서 이루어지며 이미지는 업로드되지 않아요" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "복통" } } } }, - "识别失败:%@": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Recognition failed: %@" + "自定义" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Custom" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "認識に失敗しました:%@" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "カスタム" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "인식 실패: %@" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "사용자 지정" } } } }, - "识别没有读出指标,请手动补充": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "No indicators were recognized; please add them manually" + "自定义慢病" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Custom chronic condition" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "指標を読み取れませんでした。手動で追加してください" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "カスタム慢性疾患" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "지표를 인식하지 못했어요. 직접 추가해 주세요" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "사용자 지정 만성질환" } } } }, - "识别用时 0.4s · 本地": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Recognized in 0.4s · on-device" + "自定义指标" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Custom indicator" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "認識時間 0.4秒 · オンデバイス" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "カスタム指標" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "인식 시간 0.4초 · 온디바이스" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "사용자 지정 지표" } } } }, - "识别超时(>%llds)": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Recognition timed out (>%llds)" + "自定义指标会出现在「+ 指标记录 → 长期监测」的 grid 里,可设提醒、进趋势" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Custom indicators appear in the grid under “+ Indicator Record → Long-term Monitoring,” where you can set reminders and add them to Trends" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "認識がタイムアウトしました(>%llds)" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "カスタム指標は「+ 指標記録 → 長期モニタリング」のグリッドに表示され、リマインダー設定やトレンドへの追加ができます" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "인식 시간 초과 (>%llds)" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "사용자 지정 지표는 “+ 지표 기록 → 장기 모니터링” 그리드에 표시되며, 알림 설정과 추세 추가가 가능합니다" } } } }, - "识别超时(>%llds),保留旧编辑": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Recognition timed out (>%llds); keeping previous edits" + "舒张" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Diastolic" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "認識がタイムアウトしました(>%llds)。以前の編集を保持します" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "拡張" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "인식 시간 초과 (>%llds), 이전 편집을 유지합니다" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "이완" } } } }, - "识别超时(>%llds),先手动录入": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Recognition timed out (>%llds); enter manually for now" + "舒张 " : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Diastolic " } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "認識がタイムアウトしました(>%llds)。まず手動で入力してください" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "拡張 " } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "인식 시간 초과 (>%llds), 우선 직접 입력하세요" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "이완 " } } } }, - "该测%@了": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Time to measure %@" + "舒张压" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Diastolic pressure" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "%@を測る時間です" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "拡張期血圧" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "%@를 측정할 시간이에요" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "이완기 혈압" } } } }, - "语言": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Language" + "范围 %@ %@" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Range %1$@ %2$@" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "言語" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "範囲 %1$@ %2$@" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "언어" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "범위 %1$@ %2$@" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "new", + "value" : "范围 %1$@ %2$@" } } } }, - "说说你想给医生看什么": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Tell us what you want to show your doctor" + "血压" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Blood pressure" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "医師に見せたいことを教えてください" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "血圧" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "의사에게 보여주고 싶은 내용을 알려주세요" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "혈압" } } } }, - "请选择名为 %@ 的文件夹": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Please select the folder named %@" + "血压详情" : { + + }, + "血型" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Blood type" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "%@ という名前のフォルダを選択してください" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "血液型" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "%@ 라는 이름의 폴더를 선택하세요" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "혈액형" } } } }, - "谷丙转氨酶": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "ALT" + "血氧" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Blood oxygen" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "ALT" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "血中酸素" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "ALT" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "혈중 산소" } } } }, - "谷丙转氨酶、空腹血糖、糖化血红蛋白…": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "ALT, fasting glucose, HbA1c…" + "解锁康康,查看你的健康档案" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unlock Kangkang to view your health records" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "ALT、空腹時血糖、HbA1c…" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kangkangのロックを解除して健康記録を表示" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "ALT, 공복 혈당, HbA1c…" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kangkang 잠금을 해제하고 건강 기록을 확인하세요" } } } }, - "谷草转氨酶": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "AST" + "让 AI 帮我想想还能记什么" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Let AI suggest what else to record" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "AST" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "他に記録できることをAIに考えてもらう" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "AST" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "AI에게 더 기록할 것을 제안받기" } } } }, - "超过参考上限 0.44,属轻度偏高。建议关注饮食结构(减少动物脂肪摄入),3 个月内复查。若家族有心血管病史,可与医生沟通是否需要药物干预。": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "0.44 above the upper reference limit, mildly elevated. Consider adjusting your diet (reduce animal fat intake) and recheck within 3 months. If you have a family history of cardiovascular disease, talk to your doctor about whether medication is needed." + "记录" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Records" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "基準上限を0.44超えており、軽度に高めです。食生活の見直し(動物性脂肪の摂取を減らす)を検討し、3か月以内に再検査してください。心血管疾患の家族歴がある場合は、薬物療法が必要かどうか医師にご相談ください。" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "記録" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "참고 상한을 0.44 초과한 경미한 높음이에요. 식습관 점검(동물성 지방 섭취 줄이기)을 고려하고 3개월 이내에 재검사하세요. 심혈관 질환 가족력이 있다면 약물 치료가 필요한지 의사와 상담하세요." + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "기록" } } } }, - "超过参考上限 0.44,属轻度偏高。点击展开详细解读 ›": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "0.44 above the upper reference limit, mildly elevated. Tap to see the full explanation ›" + "记录什么?" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "What to record?" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "基準上限を0.44超えており、軽度に高めです。タップして詳しい解説を表示 ›" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "何を記録しますか?" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "참고 상한을 0.44 초과한 경미한 높음이에요. 탭하여 자세한 해설 보기 ›" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "무엇을 기록할까요?" } } } }, - "超过参考上限 0.44。建议关注饮食结构,3 个月内复查。": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "0.44 above the upper reference limit. Consider adjusting your diet and recheck within 3 months." + "记录会按时间归类显示" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Records are grouped and shown by time" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "基準上限を0.44超えています。食生活の見直しを検討し、3か月以内に再検査してください。" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "記録は時系列で分類して表示されます" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "참고 상한을 0.44 초과했어요. 식습관을 점검하고 3개월 이내에 재검사하세요." + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "기록은 시간별로 분류되어 표시됩니다" } } } }, - "趋势": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Trends" + "记录指标" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Record indicator" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "トレンド" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "指標を記録" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "추세" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "지표 기록" } } } }, - "跟随系统": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "System default" + "记录提醒" : { + "extractionState" : "stale", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Record reminder" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "システムに従う" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "記録リマインダー" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "시스템 설정 따름" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "기록 알림" } } } }, - "跳过": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Skip" + "记录时间" : { + + }, + "记录症状" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Log a symptom" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "スキップ" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "症状を記録" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "건너뛰기" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "증상 기록" } } } }, - "身体档案 · 历史导出": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Health profile · Export history" + "记录身体状态 · 可让 AI 多轮辅助查漏补缺" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Record your physical state · AI can assist over multiple turns to fill in the gaps" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "身体プロフィール · エクスポート履歴" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "体調を記録 · AIが複数回にわたって抜け漏れを補助します" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "신체 프로필 · 내보내기 기록" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "신체 상태 기록 · AI가 여러 차례 도와 빠진 부분을 채워줘요" } } } }, - "身高": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Height" + "记录身体状态、用药、感受 · 可让 AI 辅助" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Record your physical state, medications, and feelings · AI can assist" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "身長" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "体調、服薬、感じたことを記録 · AIが補助します" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "키" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "신체 상태, 복약, 느낌을 기록 · AI가 도와줘요" } } } }, - "轻微": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Mild" + "设备上的 AI 模型会尝试把专业指标转述为通俗说明,帮你记录并回顾自己的健康变化。" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "The on-device AI model tries to rephrase technical indicators into plain-language explanations, helping you record and review your health changes." } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "軽度" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "オンデバイスのAIモデルが専門的な指標をわかりやすい説明に言い換え、健康の変化を記録・振り返るお手伝いをします。" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "경미" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "온디바이스 AI 모델이 전문 지표를 알기 쉬운 설명으로 풀어내어 건강 변화를 기록하고 돌아보도록 도와줘요." } } } }, - "载脂蛋白 A1": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Apolipoprotein A1" + "设备要求" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Device requirements" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "アポリポタンパクA1" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "デバイス要件" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "아포지단백 A1" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "기기 요구 사항" } } } }, - "载脂蛋白 A1 1.42 g/L": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Apolipoprotein A1 1.42 g/L" + "识别全程在本地,图片不会上传" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Recognition runs entirely on-device; images are never uploaded" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "アポリポタンパクA1 1.42 g/L" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "認識はすべてオンデバイスで行われ、画像はアップロードされません" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "아포지단백 A1 1.42 g/L" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "인식은 전부 온디바이스에서 이루어지며 이미지는 업로드되지 않아요" } } } }, - "载脂蛋白 B": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Apolipoprotein B" + "识别失败:%@" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Recognition failed: %@" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "アポリポタンパクB" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "認識に失敗しました:%@" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "아포지단백 B" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "인식 실패: %@" } } } }, - "载脂蛋白 B 1.04 g/L": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Apolipoprotein B 1.04 g/L" + "识别没有读出指标,请手动补充" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "No indicators were recognized; please add them manually" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "アポリポタンパクB 1.04 g/L" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "指標を読み取れませんでした。手動で追加してください" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "아포지단백 B 1.04 g/L" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "지표를 인식하지 못했어요. 직접 추가해 주세요" } } } }, - "输入密码": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Enter password" + "识别用时 0.4s · 本地" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Recognized in 0.4s · on-device" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "パスワードを入力" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "認識時間 0.4秒 · オンデバイス" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "비밀번호 입력" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "인식 시간 0.4초 · 온디바이스" } } } }, - "过敏史": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Allergy history" + "识别超时(>%llds)" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Recognition timed out (>%llds)" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "アレルギー歴" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "認識がタイムアウトしました(>%llds)" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "알레르기 이력" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "인식 시간 초과 (>%llds)" } } } }, - "运行中…": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Running…" + "识别超时(>%llds),保留旧编辑" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Recognition timed out (>%llds); keeping previous edits" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "実行中…" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "認識がタイムアウトしました(>%llds)。以前の編集を保持します" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "실행 중…" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "인식 시간 초과 (>%llds), 이전 편집을 유지합니다" } } } }, - "运行推理自检": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Run inference self-check" + "识别超时(>%llds),先手动录入" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Recognition timed out (>%llds); enter manually for now" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "推論セルフチェックを実行" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "認識がタイムアウトしました(>%llds)。まず手動で入力してください" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "추론 자가 점검 실행" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "인식 시간 초과 (>%llds), 우선 직접 입력하세요" } } } }, - "返回修改": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Back to edit" + "该测%@了" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Time to measure %@" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "戻って編集" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@を測る時間です" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "돌아가서 수정" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@를 측정할 시간이에요" } } } }, - "还没有任何记录\n点底部 + 号开始": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "No records yet\nTap the + at the bottom to start" + "语言" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Language" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "まだ記録がありません\n下の + をタップして始めましょう" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "言語" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "아직 기록이 없어요\n하단의 + 를 눌러 시작하세요" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "언어" } } } }, - "还没有任何记录,点底部 + 号开始第一条": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "No records yet. Tap the + at the bottom to add your first one." + "说说你想给医生看什么" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tell us what you want to show your doctor" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "まだ記録がありません。下の + をタップして最初の記録を始めましょう。" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "医師に見せたいことを教えてください" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "아직 기록이 없어요. 하단의 + 를 눌러 첫 기록을 시작하세요." + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "의사에게 보여주고 싶은 내용을 알려주세요" } } } }, - "还没有导出过\n回到记录页右上角生成一份": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Nothing exported yet\nGo back to Records and tap the top-right to create one" + "请选择名为 %@ 的文件夹" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Please select the folder named %@" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "まだエクスポートしていません\n記録ページに戻り、右上から作成しましょう" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ という名前のフォルダを選択してください" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "아직 내보낸 적이 없어요\n기록 페이지로 돌아가 우측 상단에서 하나 만드세요" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ 라는 이름의 폴더를 선택하세요" } } } }, - "还没有自定义指标": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "No custom indicators yet" + "谷丙转氨酶" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "ALT" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "カスタム指標がまだありません" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ALT" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "사용자 지정 지표가 아직 없어요" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "ALT" } } } }, - "还没有记录提醒\n去「+ 指标记录」录入时打开": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "No record reminders yet\nTurn one on while logging in “+ Indicator”" + "谷丙转氨酶、空腹血糖、糖化血红蛋白…" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "ALT, fasting glucose, HbA1c…" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "記録リマインダーがまだありません\n「+ 指標の記録」で入力する際にオンにしましょう" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ALT、空腹時血糖、HbA1c…" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "기록 알림이 아직 없어요\n「+ 지표 기록」에서 입력할 때 켜세요" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "ALT, 공복 혈당, HbA1c…" } } } }, - "这一天还没有记录": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "No records for this day yet" + "谷草转氨酶" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "AST" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "この日の記録はまだありません" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "AST" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "이 날의 기록이 아직 없어요" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "AST" } } } }, - "这个类别下没有记录": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "No records in this category" + "超过参考上限 0.44,属轻度偏高。建议关注饮食结构(减少动物脂肪摄入),3 个月内复查。若家族有心血管病史,可与医生沟通是否需要药物干预。" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "0.44 above the upper reference limit, mildly elevated. Consider adjusting your diet (reduce animal fat intake) and recheck within 3 months. If you have a family history of cardiovascular disease, talk to your doctor about whether medication is needed." } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "このカテゴリーに記録がありません" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "基準上限を0.44超えており、軽度に高めです。食生活の見直し(動物性脂肪の摂取を減らす)を検討し、3か月以内に再検査してください。心血管疾患の家族歴がある場合は、薬物療法が必要かどうか医師にご相談ください。" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "이 카테고리에 기록이 없어요" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "참고 상한을 0.44 초과한 경미한 높음이에요. 식습관 점검(동물성 지방 섭취 줄이기)을 고려하고 3개월 이내에 재검사하세요. 심혈관 질환 가족력이 있다면 약물 치료가 필요한지 의사와 상담하세요." } } } }, - "这是什么": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "What is this" + "超过参考上限 0.44,属轻度偏高。点击展开详细解读 ›" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "0.44 above the upper reference limit, mildly elevated. Tap to see the full explanation ›" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "これは何ですか" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "基準上限を0.44超えており、軽度に高めです。タップして詳しい解説を表示 ›" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "이게 뭔가요" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "참고 상한을 0.44 초과한 경미한 높음이에요. 탭하여 자세한 해설 보기 ›" } } } }, - "进行中": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Ongoing" + "超过参考上限 0.44。建议关注饮食结构,3 个月内复查。" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "0.44 above the upper reference limit. Consider adjusting your diet and recheck within 3 months." } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "進行中" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "基準上限を0.44超えています。食生活の見直しを検討し、3か月以内に再検査してください。" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "진행 중" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "참고 상한을 0.44 초과했어요. 식습관을 점검하고 3개월 이내에 재검사하세요." } } } }, - "通俗解读:设备本地 AI 把指标与趋势转述为易懂的说明": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Plain-language explanation: on-device AI turns your indicators and trends into easy-to-understand notes" + "趋势" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Trends" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "わかりやすい解説:オンデバイスAIが指標やトレンドを理解しやすい説明に言い換えます" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "トレンド" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "쉬운 해설: 온디바이스 AI가 지표와 추세를 이해하기 쉬운 설명으로 바꿔줘요" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "추세" } } } }, - "采纳": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Apply" + "跟随系统" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "System default" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "採用" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "システムに従う" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "적용" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "시스템 설정 따름" } } } }, - "重新生成": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Regenerate" + "跳过" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Skip" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "再生成" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "スキップ" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "다시 생성" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "건너뛰기" } } } }, - "重新识别": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Re-scan" + "身体档案 · 历史导出" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Health profile · Export history" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "再認識" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "身体プロフィール · エクスポート履歴" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "다시 인식" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "신체 프로필 · 내보내기 기록" } } } }, - "重新识别没有读出新指标": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Re-scanning found no new indicators" + "身高" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Height" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "再認識しても新しい指標は読み取れませんでした" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "身長" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "다시 인식해도 새 지표를 읽지 못했어요" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "키" } } } }, - "重试": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Retry" + "轻微" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mild" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "再試行" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "軽度" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "다시 시도" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "경미" } } } }, - "长期监测": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Long-term monitoring" + "载脂蛋白 A1" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Apolipoprotein A1" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "長期モニタリング" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "アポリポタンパクA1" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "장기 모니터링" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "아포지단백 A1" } } } }, - "长期监测(进趋势)": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Long-term monitoring (added to Trends)" + "载脂蛋白 A1 1.42 g/L" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Apolipoprotein A1 1.42 g/L" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "長期モニタリング(トレンドに追加)" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "アポリポタンパクA1 1.42 g/L" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "장기 모니터링 (추세에 추가)" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "아포지단백 A1 1.42 g/L" } } } }, - "长期趋势:关注的指标可生成折线图和简要解读": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Long-term trends: indicators you follow can generate line charts and brief explanations" + "载脂蛋白 B" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Apolipoprotein B" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "長期トレンド:注目している指標から折れ線グラフと簡単な解説を生成できます" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "アポリポタンパクB" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "장기 추세: 주목하는 지표로 꺾은선 그래프와 간단한 해설을 만들 수 있어요" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "아포지단백 B" } } } }, - "隐私优先:健康数据不上传、无需注册账号": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Privacy first: health data is never uploaded, no account required" + "载脂蛋白 B 1.04 g/L" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Apolipoprotein B 1.04 g/L" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "プライバシー優先:健康データはアップロードされず、アカウント登録も不要です" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "アポリポタンパクB 1.04 g/L" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "프라이버시 우선: 건강 데이터는 업로드되지 않고 계정 등록도 필요 없어요" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "아포지단백 B 1.04 g/L" } } } }, - "隐私保护": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Privacy protection" + "输入密码" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter password" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "プライバシー保護" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "パスワードを入力" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "프라이버시 보호" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "비밀번호 입력" } } } }, - "隐藏": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Hide" + "过敏史" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Allergy history" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "非表示" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "アレルギー歴" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "숨기기" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "알레르기 이력" } } } }, - "预计耗时 5–8 秒 · 端侧 SME2 加速": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Estimated 5–8 sec · on-device SME2 acceleration" + "运行中…" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Running…" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "所要時間の目安 5~8秒 · オンデバイスSME2アクセラレーション" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "実行中…" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "예상 소요 5–8초 · 온디바이스 SME2 가속" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "실행 중…" } } } }, - "频率": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Frequency" + "运行推理自检" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Run inference self-check" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "頻度" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "推論セルフチェックを実行" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "빈도" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "추론 자가 점검 실행" } } } }, - "餐后血糖": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Postprandial glucose" + "返回修改" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Back to edit" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "食後血糖" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "戻って編集" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "식후 혈당" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "돌아가서 수정" } } } }, - "验证你本人,开启 Face ID 启动锁": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Verify it's you to enable Face ID Lock" + "还没有任何记录\n点底部 + 号开始" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "No records yet\nTap the + at the bottom to start" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "本人確認をして、Face IDロックを有効にします" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "まだ記録がありません\n下の + をタップして始めましょう" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "본인을 인증하여 Face ID 잠금을 켜세요" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "아직 기록이 없어요\n하단의 + 를 눌러 시작하세요" } } } }, - "高密度脂蛋白": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "HDL cholesterol" + "还没有任何记录,点底部 + 号开始第一条" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "No records yet. Tap the + at the bottom to add your first one." } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "HDLコレステロール" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "まだ記録がありません。下の + をタップして最初の記録を始めましょう。" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "HDL 콜레스테롤" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "아직 기록이 없어요. 하단의 + 를 눌러 첫 기록을 시작하세요." } } } }, - "高密度脂蛋白 1.21 mmol/L": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "HDL cholesterol 1.21 mmol/L" + "还没有导出过\n回到记录页右上角生成一份" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nothing exported yet\nGo back to Records and tap the top-right to create one" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "HDLコレステロール 1.21 mmol/L" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "まだエクスポートしていません\n記録ページに戻り、右上から作成しましょう" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "HDL 콜레스테롤 1.21 mmol/L" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "아직 내보낸 적이 없어요\n기록 페이지로 돌아가 우측 상단에서 하나 만드세요" } } } }, - "头痛": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Headache" + "还没有提醒,点上方新建" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "No reminders yet. Tap + above to add one." } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "頭痛" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "リマインダーはまだありません。上の+で追加。" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "두통" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "아직 알림이 없습니다. 위의 +로 추가하세요." } } } }, - "咳嗽": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Cough" + "还没有自定义指标" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "No custom indicators yet" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "咳" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "カスタム指標がまだありません" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "기침" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "사용자 지정 지표가 아직 없어요" } } } }, - "腹痛": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Abdominal pain" + "还没有记录提醒\n去「+ 指标记录」录入时打开" : { + "extractionState" : "stale", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "No record reminders yet\nTurn one on while logging in “+ Indicator”" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "腹痛" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "記録リマインダーがまだありません\n「+ 指標の記録」で入力する際にオンにしましょう" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "복통" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "기록 알림이 아직 없어요\n「+ 지표 기록」에서 입력할 때 켜세요" } } } }, - "发烧": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Fever" + "这一天还没有记录" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "No records for this day yet" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "発熱" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "この日の記録はまだありません" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "발열" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "이 날의 기록이 아직 없어요" } } } }, - "恶心": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Nausea" + "这个类别下没有记录" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "No records in this category" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "吐き気" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "このカテゴリーに記録がありません" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "메스꺼움" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "이 카테고리에 기록이 없어요" } } } }, - "失眠": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Insomnia" + "这是什么" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "What is this" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "不眠" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "これは何ですか" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "불면" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "이게 뭔가요" } } } }, - "疲劳": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Fatigue" + "进行中" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ongoing" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "疲労" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "進行中" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "피로" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "진행 중" } } } }, - "关节痛": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Joint pain" + "通俗解读:设备本地 AI 把指标与趋势转述为易懂的说明" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Plain-language explanation: on-device AI turns your indicators and trends into easy-to-understand notes" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "関節痛" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "わかりやすい解説:オンデバイスAIが指標やトレンドを理解しやすい説明に言い換えます" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "관절통" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "쉬운 해설: 온디바이스 AI가 지표와 추세를 이해하기 쉬운 설명으로 바꿔줘요" } } } }, - "餐后 2h": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Postprandial 2h" + "通知未开启" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Notifications Off" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "食後2時間" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "通知がオフです" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "식후 2시간" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "알림이 꺼져 있음" } } } }, - "无参考范围": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "No reference range" + "部分月份无此日,该月将跳过" : { + + }, + "采纳" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Apply" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "基準範囲なし" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "採用" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "참고 범위 없음" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "적용" } } } }, - "高血压": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Hypertension" + "重复" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Repeat" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "高血圧" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "繰り返し" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "고혈압" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "반복" } } } }, - "糖尿病": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Diabetes" + "重新生成" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Regenerate" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "糖尿病" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "再生成" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "당뇨병" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "다시 생성" } } } }, - "冠心病": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Coronary heart disease" + "重新识别" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Re-scan" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "冠動脈疾患" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "再認識" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "관상동맥질환" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "다시 인식" } } } }, - "高血脂": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Hyperlipidemia" + "重新识别没有读出新指标" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Re-scanning found no new indicators" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "高脂血症" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "再認識しても新しい指標は読み取れませんでした" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "고지혈증" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "다시 인식해도 새 지표를 읽지 못했어요" } } } }, - "甲状腺疾病": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Thyroid disease" + "重试" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Retry" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "甲状腺疾患" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "再試行" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "갑상선 질환" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "다시 시도" } } } }, - "哮喘": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Asthma" + "长期监测" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Long-term monitoring" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "喘息" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "長期モニタリング" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "천식" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "장기 모니터링" } } } }, - "慢性肾病": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Chronic kidney disease" + "长期监测(进趋势)" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Long-term monitoring (added to Trends)" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "慢性腎臓病" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "長期モニタリング(トレンドに追加)" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "만성 신장병" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "장기 모니터링 (추세에 추가)" } } } }, - "抑郁/焦虑": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Depression / Anxiety" + "长期趋势:关注的指标可生成折线图和简要解读" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Long-term trends: indicators you follow can generate line charts and brief explanations" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "うつ・不安" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "長期トレンド:注目している指標から折れ線グラフと簡単な解説を生成できます" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "우울/불안" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "장기 추세: 주목하는 지표로 꺾은선 그래프와 간단한 해설을 만들 수 있어요" } } } }, - "做点什么?例:跑步5公里 / 吃2片护肝片": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "What to do? e.g. Run 5 km / Take 2 pills" + "隐私优先:健康数据不上传、无需注册账号" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Privacy first: health data is never uploaded, no account required" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "何をしますか?例:5km走る / 薬を2錠飲む" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "プライバシー優先:健康データはアップロードされず、アカウント登録も不要です" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "무엇을 하나요? 예: 5km 달리기 / 약 2알 복용" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "프라이버시 우선: 건강 데이터는 업로드되지 않고 계정 등록도 필요 없어요" } } } }, - "重复": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Repeat" + "隐私保护" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Privacy protection" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "繰り返し" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "プライバシー保護" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "반복" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "프라이버시 보호" } } } }, - "编辑提醒": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Edit Reminder" + "隐藏" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hide" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "リマインダーを編集" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "非表示" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "알림 편집" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "숨기기" } } } }, - "新建提醒": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "New Reminder" + "预计耗时 5–8 秒 · 端侧 SME2 加速" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Estimated 5–8 sec · on-device SME2 acceleration" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "新しいリマインダー" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "所要時間の目安 5~8秒 · オンデバイスSME2アクセラレーション" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "새 알림" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "예상 소요 5–8초 · 온디바이스 SME2 가속" } } } }, - "通知未开启": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Notifications Off" + "频率" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Frequency" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "通知がオフです" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "頻度" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "알림이 꺼져 있음" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "빈도" } } } }, - "好": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "OK" + "餐后 2h" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Postprandial 2h" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "OK" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "食後2時間" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "확인" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "식후 2시간" } } } }, - "提醒已保存,但系统通知权限未开启,到点不会弹出。请在「设置 · 通知 · 康康」中允许。": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "The reminder is saved, but notifications are off so it won't alert you. Allow them in Settings · Notifications · Kangkang." + "餐后血糖" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Postprandial glucose" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "リマインダーは保存されましたが、通知が許可されていないため表示されません。「設定 · 通知 · 康康」で許可してください。" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "食後血糖" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "알림이 저장되었지만 시스템 알림 권한이 꺼져 있어 표시되지 않습니다. '설정 · 알림 · 康康'에서 허용하세요." + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "식후 혈당" } } } }, - "提醒": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Reminders" + "验证你本人,开启 Face ID 启动锁" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verify it's you to enable Face ID Lock" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "リマインダー" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "本人確認をして、Face IDロックを有効にします" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "알림" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "본인을 인증하여 Face ID 잠금을 켜세요" } } } }, - "指标记录提醒": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Metric Reminders" + "高密度脂蛋白" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "HDL cholesterol" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "指標リマインダー" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "HDLコレステロール" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "지표 알림" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "HDL 콜레스테롤" } } } }, - "新建提醒,或在记录指标时开启": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Create a reminder, or enable one when logging a metric." + "高密度脂蛋白 1.21 mmol/L" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "HDL cholesterol 1.21 mmol/L" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "リマインダーを作成、または指標の記録時に有効化。" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "HDLコレステロール 1.21 mmol/L" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "알림을 만들거나 지표 기록 시 설정하세요." + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "HDL 콜레스테롤 1.21 mmol/L" } } } }, - "还没有提醒,点上方新建": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "No reminders yet. Tap + above to add one." + "高血压" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hypertension" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "リマインダーはまだありません。上の+で追加。" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "高血圧" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "아직 알림이 없습니다. 위의 +로 추가하세요." + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "고혈압" } } } }, - "到点啦,记得完成": { - "localizations": { - "en": { - "stringUnit": { - "state": "translated", - "value": "Time's up — don't forget!" + "高血脂" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hyperlipidemia" } }, - "ja": { - "stringUnit": { - "state": "translated", - "value": "時間です。お忘れなく!" + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "高脂血症" } }, - "ko": { - "stringUnit": { - "state": "translated", - "value": "시간이 되었어요. 잊지 마세요!" + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "고지혈증" } } } } }, - "version": "1.0" -} + "version" : "1.0" +} \ No newline at end of file diff --git a/康康/Models/Models.swift b/康康/Models/Models.swift index 88eef9f..f140d05 100644 --- a/康康/Models/Models.swift +++ b/康康/Models/Models.swift @@ -261,6 +261,13 @@ final class MetricReminder { var timeLabel: String { String(format: "%02d:%02d", hour, minute) } + + /// 这条指标提醒在给定日期「这天」是否会触发(weekday 制,全 7 = 每天);关闭则恒为 false。 + /// 供主页「今日提醒」筛选。 + func occurs(on date: Date, calendar: Calendar = .current) -> Bool { + guard enabled else { return false } + return weekdays.contains(calendar.component(.weekday, from: date)) + } } /// 自由文案的周期性提醒(如「每天 20:00 跑步 5 公里」「每天 12:30 吃 2 片护肝片」)。 @@ -269,12 +276,20 @@ final class MetricReminder { /// 周期粒度沿用 weekday 约定(全 7 = 每天);本地通知调度见 `ReminderService`。 @Model final class CustomReminder { + /// 周期粒度。每日只看时间;每周看 weekdays;每月看 dayOfMonth;每年看 month + dayOfMonth。 + enum Frequency: String, CaseIterable, Sendable { + case daily, weekly, monthly, yearly + } + @Attribute(.unique) var id: UUID var title: String // 用户文案,如 "跑步5公里" var note: String // 可选备注 → 通知正文 var hour: Int // 0...23 var minute: Int // 0...59 var weekdays: [Int] // iOS Calendar 约定:1=日, 2=一, ..., 7=六。全 7 个 = 每天 + var frequencyRaw: String = "daily" // CustomReminder.Frequency 原始值 + var dayOfMonth: Int = 1 // monthly / yearly 用,1...31 + var month: Int = 1 // yearly 用,1...12 var enabled: Bool var createdAt: Date var updatedAt: Date @@ -285,6 +300,9 @@ final class CustomReminder { hour: Int = 8, minute: Int = 0, weekdays: [Int] = [1, 2, 3, 4, 5, 6, 7], + frequency: Frequency = .daily, + dayOfMonth: Int = 1, + month: Int = 1, enabled: Bool = true, createdAt: Date = .now) { self.id = id @@ -293,6 +311,9 @@ final class CustomReminder { self.hour = max(0, min(23, hour)) self.minute = max(0, min(59, minute)) self.weekdays = weekdays + self.frequencyRaw = frequency.rawValue + self.dayOfMonth = max(1, min(31, dayOfMonth)) + self.month = max(1, min(12, month)) self.enabled = enabled self.createdAt = createdAt self.updatedAt = createdAt @@ -300,19 +321,46 @@ final class CustomReminder { var isEveryDay: Bool { Set(weekdays) == Set(1...7) } - /// 与 MetricReminder.frequencyLabel 同款,复用同一批本地化 key。 + var frequency: Frequency { + get { Frequency(rawValue: frequencyRaw) ?? .daily } + set { frequencyRaw = newValue.rawValue } + } + + /// 列表行副标题:按频率展示「每天 / 每周 一三五 / 每月15日 / 每年3月15日」。 var frequencyLabel: String { if !enabled { return String(appLoc: "已关闭") } - if isEveryDay { return String(appLoc: "每天") } - if weekdays.isEmpty { return String(appLoc: "未选日") } - let names = [String(appLoc: "日"), String(appLoc: "一"), String(appLoc: "二"), String(appLoc: "三"), String(appLoc: "四"), String(appLoc: "五"), String(appLoc: "六")] - let sorted = weekdays.sorted() - return String(appLoc: "每周 ") + sorted.map { names[$0 - 1] }.joined() + switch frequency { + case .daily: + return String(appLoc: "每天") + case .weekly: + if isEveryDay { return String(appLoc: "每天") } + if weekdays.isEmpty { return String(appLoc: "未选日") } + let names = [String(appLoc: "日"), String(appLoc: "一"), String(appLoc: "二"), String(appLoc: "三"), String(appLoc: "四"), String(appLoc: "五"), String(appLoc: "六")] + return String(appLoc: "每周 ") + weekdays.sorted().map { names[$0 - 1] }.joined() + case .monthly: + return String(appLoc: "每月\(dayOfMonth)日") + case .yearly: + return String(appLoc: "每年\(month)月\(dayOfMonth)日") + } } var timeLabel: String { String(format: "%02d:%02d", hour, minute) } + + /// 这条提醒在给定日期「这天」是否会触发(只看哪天,不看时分);关闭则恒为 false。 + /// 供主页「今日提醒」筛选。monthly/yearly 选了无此日的月份(如 31 日)自然返回 false, + /// 与 iOS「该月跳过、不顺延」的行为一致。 + func occurs(on date: Date, calendar: Calendar = .current) -> Bool { + guard enabled else { return false } + let c = calendar.dateComponents([.weekday, .day, .month], from: date) + switch frequency { + case .daily: return true + case .weekly: return weekdays.contains(c.weekday ?? -1) + case .monthly: return dayOfMonth == (c.day ?? -1) + case .yearly: return month == (c.month ?? -1) && dayOfMonth == (c.day ?? -1) + } + } } @Model diff --git a/康康/Services/HealthExportService.swift b/康康/Services/HealthExportService.swift index c70e05b..c92ad36 100644 --- a/康康/Services/HealthExportService.swift +++ b/康康/Services/HealthExportService.swift @@ -85,40 +85,49 @@ struct HealthExportService { // —— Phase 3: 生成 —— continuation.yield(.phaseChanged(.generating)) let dataJSON = Self.serializeData(snapshot: snapshot) - let genPrompt = HealthExportPrompts.reportGeneration( - userPrompt: prompt, - intentLabelCN: intent.labelCN, - dataJSON: dataJSON - ) - // —— 流式去 ... 兜底 —— - // Prompt 里已加 Qwen3 的 `/no_think`,但模型偶尔仍带 thinking。 - // 用「全文累计 + 每 chunk 重清 + diff yield」: - // - thinking 阶段,UI 看到的 generated 始终为空 - // - 看到 后,真实内容流式出现 - var rawAccum = "" var generated = "" var lastRate: Double = 0 - let stream = await AIRuntime.shared.generate( - prompt: genPrompt, - maxTokens: 1024 - ) - for try await chunk in stream { - try Task.checkCancellation() - if chunk.decodeRate > 0 { lastRate = chunk.decodeRate } - rawAccum += chunk.text - let clean = Self.stripThinkBlocks(rawAccum) - if clean.count > generated.count, clean.hasPrefix(generated) { - let delta = String(clean.dropFirst(generated.count)) - generated = clean - continuation.yield(.token(TokenChunk( - text: delta, - decodeRate: chunk.decodeRate - ))) - } else if clean != generated { - // 极少:清理后比上次还短(模型补了开标签)。让 UI 不要回退, - // 直接对齐 generated = clean 但不 yield(避免显示倒退)。 - generated = clean + + if Self.isEffectivelyEmpty(snapshot) { + // 没有任何真实记录:跳过 LLM,直接产出确定性「无记录」摘要, + // 从根上杜绝小模型在空数据上编造病例(用户红线:严格按历史信息)。 + generated = Self.fallbackReport(label: intent.labelCN, userPrompt: prompt) + continuation.yield(.token(TokenChunk(text: generated, decodeRate: 0))) + } else { + let genPrompt = HealthExportPrompts.reportGeneration( + userPrompt: prompt, + intentLabelCN: intent.labelCN, + dataJSON: dataJSON + ) + + // —— 流式去 ... 兜底 —— + // Prompt 里已加 Qwen3 的 `/no_think`,但模型偶尔仍带 thinking。 + // 用「全文累计 + 每 chunk 重清 + diff yield」: + // - thinking 阶段,UI 看到的 generated 始终为空 + // - 看到 后,真实内容流式出现 + var rawAccum = "" + let stream = await AIRuntime.shared.generate( + prompt: genPrompt, + maxTokens: 1024 + ) + for try await chunk in stream { + try Task.checkCancellation() + if chunk.decodeRate > 0 { lastRate = chunk.decodeRate } + rawAccum += chunk.text + let clean = Self.stripThinkBlocks(rawAccum) + if clean.count > generated.count, clean.hasPrefix(generated) { + let delta = String(clean.dropFirst(generated.count)) + generated = clean + continuation.yield(.token(TokenChunk( + text: delta, + decodeRate: chunk.decodeRate + ))) + } else if clean != generated { + // 极少:清理后比上次还短(模型补了开标签)。让 UI 不要回退, + // 直接对齐 generated = clean 但不 yield(避免显示倒退)。 + generated = clean + } } } @@ -292,18 +301,21 @@ struct HealthExportService { ) let reports = Array(((try? ctx.fetch(reportDesc)) ?? []).prefix(8)) - // —— Diary(隐私过滤:必须有 symptom_keyword 命中,否则不入 prompt) —— + // —— Diary —— + // 有具体症状词 → 按词过滤(targeted,保留隐私); + // 无症状词(泛化请求,如「最近身体异常」)→ 纳入时间窗内最近 5 条日记。 + // 之前「无词即清空」会让真实记录完全不进 prompt → 数据为空 → 小模型编造,是本次 bug 主因之一。 + let diaryDesc = FetchDescriptor( + predicate: #Predicate { $0.createdAt >= fromDate && $0.createdAt <= toDate }, + sortBy: [SortDescriptor(\.createdAt, order: .reverse)] + ) + let allDiaries = (try? ctx.fetch(diaryDesc)) ?? [] let diaries: [DiaryEntry] if intent.symptomKeywords.isEmpty { - diaries = [] + diaries = Array(allDiaries.prefix(5)) } else { - let diaryDesc = FetchDescriptor( - predicate: #Predicate { $0.createdAt >= fromDate && $0.createdAt <= toDate }, - sortBy: [SortDescriptor(\.createdAt, order: .reverse)] - ) - let all = (try? ctx.fetch(diaryDesc)) ?? [] diaries = Array( - all.filter { d in + allDiaries.filter { d in intent.symptomKeywords.contains { kw in d.content.localizedCaseInsensitiveContains(kw) } @@ -416,6 +428,56 @@ struct HealthExportService { return str } + // MARK: - 空数据兜底(杜绝编造) + + /// 检索结果是否「实质为空」:无症状/指标/报告/日记,且 profile 也没有任何可写字段。 + /// 为真时跳过 LLM,改用确定性「无记录」摘要,避免小模型凭先验编造病例。 + static func isEffectivelyEmpty(_ s: Snapshot) -> Bool { + guard s.symptoms.isEmpty, s.indicators.isEmpty, s.reports.isEmpty, s.diaries.isEmpty else { + return false + } + let p = s.profile + return p.age == nil + && p.sex == .undisclosed + && p.heightCM == nil + && p.weightKG == nil + && p.bloodTypeRaw.isEmpty + && p.allergies.isEmpty + && p.chronicConditions.isEmpty + && p.familyHistory.isEmpty + && p.currentMedications.isEmpty + } + + /// 无真实记录时的确定性摘要:6 段全「无记录」,主诉仅照搬患者原话,不做任何推断。 + static func fallbackReport(label: String, userPrompt: String) -> String { + let title = label.isEmpty ? "# 就诊摘要" : "# 就诊摘要 — \(label)" + let complaint = userPrompt.trimmingCharacters(in: .whitespacesAndNewlines) + let complaintLine = complaint.isEmpty ? "无记录" : complaint + return """ + \(title) + + > 本次未检索到可用的健康记录(指标 / 症状 / 报告 / 日记均为空),以下仅据患者原话,未做任何推断。 + + ## 主诉 + \(complaintLine) + + ## 患者背景 + 无记录 + + ## 近期症状(按时间倒序) + 无记录 + + ## 关键指标(异常项优先) + 无记录 + + ## 在服药与过敏 + 无记录 + + ## 患者疑问 + 无记录 + """ + } + // MARK: - Helpers /// 把 SwiftData persistentModelID 编成稳定字符串。 diff --git a/康康/Services/ReminderService.swift b/康康/Services/ReminderService.swift index 17da89d..8bc0427 100644 --- a/康康/Services/ReminderService.swift +++ b/康康/Services/ReminderService.swift @@ -53,14 +53,16 @@ enum ReminderService { static func sync(_ reminder: MetricReminder) async { cancel(metricId: reminder.metricId) guard reminder.enabled else { return } + let slots = reminder.weekdays.map { wd in + Slot(suffix: "w\(wd)", + dc: DateComponents(hour: reminder.hour, minute: reminder.minute, weekday: wd)) + } await schedule( idBase: "\(idPrefix)\(reminder.metricId)", title: String(appLoc: "该测\(reminder.displayName)了"), body: String(appLoc: "在「+ 新建 → 指标记录 → \(reminder.displayName)」记录一次"), - hour: reminder.hour, - minute: reminder.minute, - weekdays: reminder.weekdays, - thread: "kangkang.reminder.\(reminder.metricId)" + thread: "kangkang.reminder.\(reminder.metricId)", + slots: slots ) } @@ -77,14 +79,28 @@ enum ReminderService { guard reminder.enabled else { return } let title = reminder.title.trimmingCharacters(in: .whitespacesAndNewlines) let body = reminder.note.trimmingCharacters(in: .whitespacesAndNewlines) + let h = reminder.hour, m = reminder.minute + let slots: [Slot] + switch reminder.frequency { + case .daily: + slots = [Slot(suffix: "daily", dc: DateComponents(hour: h, minute: m))] + case .weekly: + slots = reminder.weekdays.map { wd in + Slot(suffix: "w\(wd)", dc: DateComponents(hour: h, minute: m, weekday: wd)) + } + case .monthly: + slots = [Slot(suffix: "monthly", + dc: DateComponents(day: reminder.dayOfMonth, hour: h, minute: m))] + case .yearly: + slots = [Slot(suffix: "yearly", + dc: DateComponents(month: reminder.month, day: reminder.dayOfMonth, hour: h, minute: m))] + } await schedule( idBase: "\(customIdPrefix)\(reminder.id.uuidString)", title: title.isEmpty ? String(appLoc: "提醒") : title, body: body.isEmpty ? String(appLoc: "到点啦,记得完成") : body, - hour: reminder.hour, - minute: reminder.minute, - weekdays: reminder.weekdays, - thread: "\(customIdPrefix)\(reminder.id.uuidString)" + thread: "\(customIdPrefix)\(reminder.id.uuidString)", + slots: slots ) } @@ -100,16 +116,20 @@ enum ReminderService { // MARK: - 共享调度核心 - /// 把一条提醒按 weekdays 展开成 N 条 weekly-repeats 通知。 - /// `idBase` 是不含 `.w` 后缀的稳定前缀;两类提醒共用本核心。 + /// 一条触发槽:`suffix` 用于拼出稳定且可单独取消的通知 id(`.`, + /// 如 `.daily` / `.w2` / `.monthly` / `.yearly`),`dc` 为对应的重复触发时间分量。 + private struct Slot { + let suffix: String + let dc: DateComponents + } + + /// 把若干 `Slot` 展开成 N 条 repeats 通知。每日/每周/每月/每年两类提醒共用本核心。 private static func schedule(idBase: String, title: String, body: String, - hour: Int, - minute: Int, - weekdays: [Int], - thread: String) async { - guard !weekdays.isEmpty else { return } + thread: String, + slots: [Slot]) async { + guard !slots.isEmpty else { return } let center = UNUserNotificationCenter.current() let content = UNMutableNotificationContent() content.title = title @@ -117,23 +137,20 @@ enum ReminderService { content.sound = .default content.threadIdentifier = thread - for weekday in weekdays { - var comps = DateComponents() - comps.hour = hour - comps.minute = minute - comps.weekday = weekday - let trigger = UNCalendarNotificationTrigger(dateMatching: comps, repeats: true) - let request = UNNotificationRequest(identifier: "\(idBase).w\(weekday)", + for slot in slots { + let trigger = UNCalendarNotificationTrigger(dateMatching: slot.dc, repeats: true) + let request = UNNotificationRequest(identifier: "\(idBase).\(slot.suffix)", content: content, trigger: trigger) try? await center.add(request) } } - /// 取消某个 idBase 下 7 个 weekday 的全部 pending 通知(不漏)。 + /// 取消某个 idBase 下所有可能后缀的 pending 通知(daily/monthly/yearly + 7 个 weekday,不漏)。 private static func cancelBase(_ idBase: String) { let center = UNUserNotificationCenter.current() - let ids = (1...7).map { "\(idBase).w\($0)" } + var ids = ["\(idBase).daily", "\(idBase).monthly", "\(idBase).yearly"] + ids += (1...7).map { "\(idBase).w\($0)" } center.removePendingNotificationRequests(withIdentifiers: ids) } } diff --git a/康康Tests/TodayRemindersLogicTests.swift b/康康Tests/TodayRemindersLogicTests.swift new file mode 100644 index 0000000..724b624 --- /dev/null +++ b/康康Tests/TodayRemindersLogicTests.swift @@ -0,0 +1,81 @@ +import Testing +import Foundation +@testable import 康康 + +/// 主页「今日提醒」筛选逻辑(`occurs(on:)`)的纯函数测试。 +/// 用固定 Gregorian 日历构造确定日期,避免依赖 `Date.now` / 本机时区。 +struct TodayRemindersLogicTests { + + private var cal: Calendar { + var c = Calendar(identifier: .gregorian) + c.timeZone = TimeZone(identifier: "Asia/Shanghai")! + return c + } + + private func date(_ y: Int, _ mo: Int, _ d: Int) -> Date { + cal.date(from: DateComponents(year: y, month: mo, day: d, hour: 12))! + } + + // MARK: - CustomReminder + + @Test func dailyOccursEveryDay() { + let r = CustomReminder(title: "跑步", frequency: .daily) + #expect(r.occurs(on: date(2026, 5, 30), calendar: cal)) + #expect(r.occurs(on: date(2026, 1, 1), calendar: cal)) + } + + @Test func disabledNeverOccurs() { + let r = CustomReminder(title: "跑步", frequency: .daily, enabled: false) + #expect(!r.occurs(on: date(2026, 5, 30), calendar: cal)) + } + + @Test func weeklyOccursOnlyOnSelectedWeekdays() { + let d = date(2026, 5, 30) + let wd = cal.component(.weekday, from: d) + let other = wd == 1 ? 2 : 1 + + let hit = CustomReminder(title: "x", weekdays: [wd], frequency: .weekly) + #expect(hit.occurs(on: d, calendar: cal)) + + let miss = CustomReminder(title: "x", weekdays: [other], frequency: .weekly) + #expect(!miss.occurs(on: d, calendar: cal)) + } + + @Test func monthlyOccursOnlyOnMatchingDay() { + let d = date(2026, 5, 30) // 30 日 + #expect(CustomReminder(title: "x", frequency: .monthly, dayOfMonth: 30).occurs(on: d, calendar: cal)) + #expect(!CustomReminder(title: "x", frequency: .monthly, dayOfMonth: 15).occurs(on: d, calendar: cal)) + } + + @Test func monthlyDay31SkipsShortMonths() { + // 4 月只有 30 天:选「31 日」的提醒在 4/30 这天不应触发(无 4/31,该月跳过)。 + let apr30 = date(2026, 4, 30) + let r = CustomReminder(title: "x", frequency: .monthly, dayOfMonth: 31) + #expect(!r.occurs(on: apr30, calendar: cal)) + } + + @Test func yearlyOccursOnlyOnMatchingMonthAndDay() { + let d = date(2026, 5, 30) + #expect(CustomReminder(title: "x", frequency: .yearly, dayOfMonth: 30, month: 5).occurs(on: d, calendar: cal)) + #expect(!CustomReminder(title: "x", frequency: .yearly, dayOfMonth: 30, month: 6).occurs(on: d, calendar: cal)) + #expect(!CustomReminder(title: "x", frequency: .yearly, dayOfMonth: 29, month: 5).occurs(on: d, calendar: cal)) + } + + // MARK: - MetricReminder + + @Test func metricReminderOccursOnSelectedWeekday() { + let d = date(2026, 5, 30) + let wd = cal.component(.weekday, from: d) + let other = wd == 1 ? 2 : 1 + + #expect(MetricReminder(metricId: "bp", displayName: "血压", weekdays: [wd]).occurs(on: d, calendar: cal)) + #expect(!MetricReminder(metricId: "bp2", displayName: "血压", weekdays: [other]).occurs(on: d, calendar: cal)) + } + + @Test func disabledMetricReminderNeverOccurs() { + let d = date(2026, 5, 30) + let wd = cal.component(.weekday, from: d) + let r = MetricReminder(metricId: "bp", displayName: "血压", weekdays: [wd], enabled: false) + #expect(!r.occurs(on: d, calendar: cal)) + } +}