mycode/myApp/Keging/KegingWatch Watch App/Localizable.xcstrings
songyc macbook b751247ba7 feat(keging): 아이폰 시작 세트의 워치 심박 측정 — startWatchApp + 미러링 세션, 배지·사전 경고 폐지 (9차)
- 의도(사용자 TestFlight 피드백): 폰으로 운동해도 워치를 차고 있으면 워치가 심박을 재고,
  진동은 시작한 기기에서만. 종전 '워치 연동됨' 배지는 워치 앱 포그라운드 여부(isReachable)만
  보여 주던 것이라 폐지
- iOS: WatchHeartRateBridge — 시작 시 HKHealthStore.startWatchApp(폰 설정 운동 유형)으로 워치 앱을
  깨우고, 워치가 미러링한 HKWorkoutSession을 workoutSessionMirroringStartHandler로 받아 심박 수신,
  완주/중단 명령 전송(finish/discard). 워치를 못 열거나 30초 안에 미러링이 안 붙으면 폰 단독
  (+설정에 따라 '워치 앱을 열지 못했어요' 알럿, app.watchWarn 재사용) 및 WatchConnectivity로
  워치 세션 폐기 명령. 워치 저장 결과(saved/failed)는 WC로 회신받고 15초 내 미회신이면 폰 사후 저장 폴백.
  워치 깨우기는 폰 건강 권한 응답 뒤에(첫 실행 경합 방지). 건강 읽기 권한(심박·활성 에너지) 추가
  — 워치 세션 센서 수집용(권한 공유)
- 워치: WatchAppDelegate.handle(workoutConfiguration) → MirroredWorkoutSession(라이브 빌더, 무진동·무타이머,
  심박을 미러링 채널로 전송, finish 시 저장+강도 relate 후 WC로 결과 통보, discard/끊김 시 폐기,
  미러링 30초 타임아웃, 앱 재기동 시 잔류 세션 복구·폐기). 화면 '아이폰에서 진행 중 ♥bpm'(중단 버튼).
  WatchHealthAuth로 권한 공용화
- UI: 첫 화면 배지·확인 창 제거, 운동 화면 횟수 아래 워치 상태 줄(연결 중/♥bpm/아이폰만),
  설정 토글 '워치 연결 실패 경고', 도움말 3건 갱신. l10n 카탈로그 3종 missing/stale 0
- DEBUG: -testConfig(35초 세트), -mockWatchHeartRate <bpm>(상태 줄 QA·스크린샷). watchHR 카테고리 notice 로그
- 시뮬 검증(페어링 심): startWatchApp → 워치 기동·권한·세션·가짜 심박·'아이폰에서 진행 중'까지 동작,
  워치 startMirroring 성공 반환 — 그러나 폰 미러링 핸들러는 시뮬에서 불리지 않음(애플 샘플도 실기기 전용)
  → 30초 타임아웃·알럿·WC 폐기·폰 폴백 저장 경로 확인, 워치 자체 세트 정상. 3타깃 빌드 그린·경고 0.
  미러링 수신·완주 저장·회신은 실기기 TestFlight 재테스트 필요
- 문서·마케팅: CLAUDE.md §3.8 신설·§1/§3.7/§4/§6/§7 갱신, 설명 3언어·whats-new·review-notes·PRIVACY.md
  (아이폰 읽기 권한 설명 — GitHub 게시본 갱신 필요), 스크린샷 01·08(배지 제거)·02·03(♥78 상태 줄) 재촬영·합성

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UPmp29DQHY6Ahfss5SRopT
2026-09-05 10:13:48 +09:00

560 lines
12 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"sourceLanguage": "ko",
"strings": {
"%lld / %lld": {
"localizations": {
"en": {
"stringUnit": {
"state": "translated",
"value": "%lld / %lld"
}
},
"ja": {
"stringUnit": {
"state": "translated",
"value": "%lld / %lld"
}
},
"ko": {
"stringUnit": {
"state": "new",
"value": "%1$lld / %2$lld"
}
}
}
},
"%lld초": {
"localizations": {
"en": {
"stringUnit": {
"state": "translated",
"value": "%lld s"
}
},
"ja": {
"stringUnit": {
"state": "translated",
"value": "%lld秒"
}
}
}
},
"%lld회": {
"localizations": {
"en": {
"variations": {
"plural": {
"one": {
"stringUnit": {
"state": "translated",
"value": "%lld rep"
}
},
"other": {
"stringUnit": {
"state": "translated",
"value": "%lld reps"
}
}
}
}
},
"ja": {
"stringUnit": {
"state": "translated",
"value": "%lld回"
}
}
}
},
"%lld회 완주": {
"localizations": {
"en": {
"variations": {
"plural": {
"one": {
"stringUnit": {
"state": "translated",
"value": "%lld rep done"
}
},
"other": {
"stringUnit": {
"state": "translated",
"value": "%lld reps done"
}
}
}
}
},
"ja": {
"stringUnit": {
"state": "translated",
"value": "%lld回完了"
}
}
}
},
"고르면 바로 진동이 울려요. 세팅은 아이폰과 따로 저장돼요.": {
"localizations": {
"en": {
"stringUnit": {
"state": "translated",
"value": "Picking one plays the vibration right away. These settings are stored separately from your iPhone."
}
},
"ja": {
"stringUnit": {
"state": "translated",
"value": "選ぶとすぐに振動が鳴ります。設定はiPhoneとは別に保存されます。"
}
}
}
},
"기본": {
"localizations": {
"en": {
"stringUnit": {
"state": "translated",
"value": "Standard"
}
},
"ja": {
"stringUnit": {
"state": "translated",
"value": "標準"
}
}
}
},
"기타": {
"localizations": {
"en": {
"stringUnit": {
"state": "translated",
"value": "Other"
}
},
"ja": {
"stringUnit": {
"state": "translated",
"value": "その他"
}
}
}
},
"세트": {
"localizations": {
"en": {
"stringUnit": {
"state": "translated",
"value": "Set"
}
},
"ja": {
"stringUnit": {
"state": "translated",
"value": "セット"
}
}
}
},
"세팅": {
"localizations": {
"en": {
"stringUnit": {
"state": "translated",
"value": "Setup"
}
},
"ja": {
"stringUnit": {
"state": "translated",
"value": "設定"
}
}
}
},
"수축": {
"localizations": {
"en": {
"stringUnit": {
"state": "translated",
"value": "Squeeze"
}
},
"ja": {
"stringUnit": {
"state": "translated",
"value": "締める"
}
}
}
},
"수축 %lld초 · 이완 %lld초 · %lld회": {
"localizations": {
"en": {
"stringUnit": {
"state": "translated",
"value": "Squeeze %lld s · Relax %lld s · ×%lld"
}
},
"ja": {
"stringUnit": {
"state": "translated",
"value": "締める%lld秒 · ゆるめる%lld秒 · %lld回"
}
},
"ko": {
"stringUnit": {
"state": "new",
"value": "수축 %1$lld초 · 이완 %2$lld초 · %3$lld회"
}
}
}
},
"시작": {
"localizations": {
"en": {
"stringUnit": {
"state": "translated",
"value": "Start"
}
},
"ja": {
"stringUnit": {
"state": "translated",
"value": "開始"
}
}
}
},
"심박 측정 중": {
"localizations": {
"en": {
"stringUnit": {
"state": "translated",
"value": "Measuring heart rate"
}
},
"ja": {
"stringUnit": {
"state": "translated",
"value": "心拍数を計測中"
}
}
}
},
"아이폰에서 진행 중": {
"localizations": {
"en": {
"stringUnit": {
"state": "translated",
"value": "Running on iPhone"
}
},
"ja": {
"stringUnit": {
"state": "translated",
"value": "iPhoneで実行中"
}
}
}
},
"안 함": {
"localizations": {
"en": {
"stringUnit": {
"state": "translated",
"value": "Off"
}
},
"ja": {
"stringUnit": {
"state": "translated",
"value": "なし"
}
}
}
},
"애플 건강": {
"localizations": {
"en": {
"stringUnit": {
"state": "translated",
"value": "Apple Health"
}
},
"ja": {
"stringUnit": {
"state": "translated",
"value": "ヘルスケア"
}
}
}
},
"완료!": {
"localizations": {
"en": {
"stringUnit": {
"state": "translated",
"value": "Done!"
}
},
"ja": {
"stringUnit": {
"state": "translated",
"value": "完了!"
}
}
}
},
"운동 강도": {
"localizations": {
"en": {
"stringUnit": {
"state": "translated",
"value": "Effort"
}
},
"ja": {
"stringUnit": {
"state": "translated",
"value": "運動強度"
}
}
}
},
"운동 유형": {
"localizations": {
"en": {
"stringUnit": {
"state": "translated",
"value": "Workout Type"
}
},
"ja": {
"stringUnit": {
"state": "translated",
"value": "ワークアウトの種類"
}
}
}
},
"이완": {
"localizations": {
"en": {
"stringUnit": {
"state": "translated",
"value": "Relax"
}
},
"ja": {
"stringUnit": {
"state": "translated",
"value": "ゆるめる"
}
}
}
},
"준비": {
"localizations": {
"en": {
"stringUnit": {
"state": "translated",
"value": "Ready"
}
},
"ja": {
"stringUnit": {
"state": "translated",
"value": "準備"
}
}
}
},
"중단": {
"localizations": {
"en": {
"stringUnit": {
"state": "translated",
"value": "Stop"
}
},
"ja": {
"stringUnit": {
"state": "translated",
"value": "中断"
}
}
}
},
"지이이잉": {
"localizations": {
"en": {
"stringUnit": {
"state": "translated",
"value": "Long buzz"
}
},
"ja": {
"stringUnit": {
"state": "translated",
"value": "ブーッ"
}
}
}
},
"진동": {
"localizations": {
"en": {
"stringUnit": {
"state": "translated",
"value": "Vibration"
}
},
"ja": {
"stringUnit": {
"state": "translated",
"value": "振動"
}
}
}
},
"진동은 아이폰에서 울려요": {
"localizations": {
"en": {
"stringUnit": {
"state": "translated",
"value": "Haptics play on iPhone"
}
},
"ja": {
"stringUnit": {
"state": "translated",
"value": "振動はiPhoneで鳴ります"
}
}
}
},
"케겔 운동 시작": {
"localizations": {
"en": {
"stringUnit": {
"state": "translated",
"value": "Start Kegel Workout"
}
},
"ja": {
"stringUnit": {
"state": "translated",
"value": "ケーゲル運動を開始"
}
}
}
},
"코어 트레이닝": {
"localizations": {
"en": {
"stringUnit": {
"state": "translated",
"value": "Core Training"
}
},
"ja": {
"stringUnit": {
"state": "translated",
"value": "コアトレーニング"
}
}
}
},
"크라운을 돌려 조절": {
"localizations": {
"en": {
"stringUnit": {
"state": "translated",
"value": "Turn the crown to adjust"
}
},
"ja": {
"stringUnit": {
"state": "translated",
"value": "クラウンを回して調整"
}
}
}
},
"톡톡": {
"localizations": {
"en": {
"stringUnit": {
"state": "translated",
"value": "Double tap"
}
},
"ja": {
"stringUnit": {
"state": "translated",
"value": "トントン"
}
}
}
},
"현재 %lld번째, 전체 %lld회": {
"localizations": {
"en": {
"stringUnit": {
"state": "translated",
"value": "Rep %lld of %lld"
}
},
"ja": {
"stringUnit": {
"state": "translated",
"value": "%lld回目、全%lld回"
}
},
"ko": {
"stringUnit": {
"state": "new",
"value": "현재 %1$lld번째, 전체 %2$lld회"
}
}
}
},
"확인": {
"localizations": {
"en": {
"stringUnit": {
"state": "translated",
"value": "OK"
}
},
"ja": {
"stringUnit": {
"state": "translated",
"value": "OK"
}
}
}
},
"횟수": {
"localizations": {
"en": {
"stringUnit": {
"state": "translated",
"value": "Reps"
}
},
"ja": {
"stringUnit": {
"state": "translated",
"value": "回数"
}
}
}
}
},
"version": "1.0"
}