From a6c040cd6a2de93925a22298e4d26d0acceb49cf Mon Sep 17 00:00:00 2001 From: songyc macbook Date: Fri, 10 Jul 2026 15:03:24 +0900 Subject: [PATCH] =?UTF-8?q?feat(i18n):=20=EC=A0=84=EC=B2=B4=20UI=20?= =?UTF-8?q?=EB=8B=A4=EA=B5=AD=EC=96=B4=20=EC=A7=80=EC=9B=90=20(=ED=95=9C?= =?UTF-8?q?=EA=B5=AD=EC=96=B4=C2=B7=EC=98=81=EC=96=B4=C2=B7=EC=9D=BC?= =?UTF-8?q?=EB=B3=B8=EC=96=B4)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 언어 설정 실적용: 변경 시 AppleLanguages 오버라이드 저장, 재시작 안내 footer - 자동 추출되지 않던 일반 문자열(탭 이름, 픽커 라벨, 상태 뱃지, 포매터, 삼항 문구, 심볼 카테고리 등)을 String(localized:)로 전환 - 위젯·워치 앱·컴플리케이션 타깃에 Localizable.xcstrings 신설 (중복 리소스 방지 pbxproj 예외 추가), xcstringstool sync로 키 추출 - 4개 카탈로그 전체 키(고유 430개)에 en/ja 번역 주입 - 영어의 긴 횟수 단위("times")가 잘리지 않도록 모음 탭 셀 축소 허용 - 검증: -AppleLanguages "(en)"/"(ja)"로 모음 탭·설정 화면 확인 Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_013yKDMhuF39GVYy3FMcGHh7 --- myApp/HaruDanim/Haru_Danim.entitlements | 4 + .../Haru_Danim.xcodeproj/project.pbxproj | 10 + .../xcschemes/Haru_Danim.xcscheme | 6 +- .../Haru_DanimWatch Watch App.xcscheme | 93 + .../Haru_DanimWatchWidgetsExtension.xcscheme | 126 + .../xcschemes/Haru_DanimWidgets.xcscheme | 125 + .../ContentView.swift | 10 +- .../Haru_DanimWatch Watch App.entitlements | 4 + .../Localizable.xcstrings | 718 ++ .../ComplicationSupport.swift | 6 +- .../Localizable.xcstrings | 536 ++ .../RateComplications.swift | 4 +- ...ru_DanimWatchWidgetsExtension.entitlements | 4 + myApp/HaruDanim/IOS/ContentView.swift | 14 +- myApp/HaruDanim/IOS/Core/SymbolCatalog.swift | 22 +- myApp/HaruDanim/IOS/Localizable.xcstrings | 7578 ++++++++++++++--- myApp/HaruDanim/IOS/Views/ActionViews.swift | 20 +- myApp/HaruDanim/IOS/Views/GoalViews.swift | 16 +- myApp/HaruDanim/IOS/Views/HistoryView.swift | 6 +- myApp/HaruDanim/IOS/Views/MainView.swift | 10 +- .../HaruDanim/IOS/Views/QuestEditorView.swift | 4 +- myApp/HaruDanim/IOS/Views/RecordEditors.swift | 2 +- myApp/HaruDanim/IOS/Views/SettingsView.swift | 12 +- myApp/HaruDanim/IOS/Views/StatsTabView.swift | 22 +- myApp/HaruDanim/IOS/Views/TagViews.swift | 2 +- myApp/HaruDanim/Shared/Formatters.swift | 18 +- myApp/HaruDanim/Shared/HaruDanimIntents.swift | 12 +- myApp/HaruDanim/Shared/Models.swift | 50 +- myApp/HaruDanim/Shared/QuestProgress.swift | 6 +- myApp/HaruDanim/Shared/Settings.swift | 20 +- myApp/HaruDanim/Widgets/Localizable.xcstrings | 2863 +++++++ myApp/HaruDanim/Widgets/QuestRingWidget.swift | 4 +- .../HaruDanim/Widgets/StatsChartWidget.swift | 12 +- 33 files changed, 11163 insertions(+), 1176 deletions(-) create mode 100644 myApp/HaruDanim/Haru_Danim.xcodeproj/xcshareddata/xcschemes/Haru_DanimWatch Watch App.xcscheme create mode 100644 myApp/HaruDanim/Haru_Danim.xcodeproj/xcshareddata/xcschemes/Haru_DanimWatchWidgetsExtension.xcscheme create mode 100644 myApp/HaruDanim/Haru_Danim.xcodeproj/xcshareddata/xcschemes/Haru_DanimWidgets.xcscheme create mode 100644 myApp/HaruDanim/Haru_DanimWatch Watch App/Localizable.xcstrings create mode 100644 myApp/HaruDanim/Haru_DanimWatchWidgets/Localizable.xcstrings create mode 100644 myApp/HaruDanim/Widgets/Localizable.xcstrings diff --git a/myApp/HaruDanim/Haru_Danim.entitlements b/myApp/HaruDanim/Haru_Danim.entitlements index 3f29113..76b45e9 100644 --- a/myApp/HaruDanim/Haru_Danim.entitlements +++ b/myApp/HaruDanim/Haru_Danim.entitlements @@ -18,5 +18,9 @@ group.com.yechan.HaruDanim + keychain-access-groups + + $(AppIdentifierPrefix)com.yechan.HaruDanim + diff --git a/myApp/HaruDanim/Haru_Danim.xcodeproj/project.pbxproj b/myApp/HaruDanim/Haru_Danim.xcodeproj/project.pbxproj index 97c3b4c..d4dfacf 100644 --- a/myApp/HaruDanim/Haru_Danim.xcodeproj/project.pbxproj +++ b/myApp/HaruDanim/Haru_Danim.xcodeproj/project.pbxproj @@ -106,6 +106,7 @@ membershipExceptions = ( HaruDanimWidgets.swift, Info.plist, + Localizable.xcstrings, ); target = 725A9E832FFCC65000846FFB /* Haru_Danim */; }; @@ -115,6 +116,7 @@ Assets.xcassets, Haru_DanimWatchWidgetsBundle.swift, Info.plist, + Localizable.xcstrings, ); target = 7263D0DF3000433300EA47FC /* Haru_DanimWatch Watch App */; }; @@ -662,6 +664,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CODE_SIGN_ENTITLEMENTS = "Haru_DanimWatch Watch App/Haru_DanimWatch Watch App.entitlements"; + CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_TEAM = 5GNS4Z2SYT; @@ -677,6 +680,7 @@ MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = com.yechan.HaruDanim.watchkitapp; PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; SDKROOT = watchos; SKIP_INSTALL = YES; STRING_CATALOG_GENERATE_SYMBOLS = YES; @@ -696,6 +700,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CODE_SIGN_ENTITLEMENTS = "Haru_DanimWatch Watch App/Haru_DanimWatch Watch App.entitlements"; + CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_TEAM = 5GNS4Z2SYT; @@ -711,6 +716,7 @@ MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = com.yechan.HaruDanim.watchkitapp; PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; SDKROOT = watchos; SKIP_INSTALL = YES; STRING_CATALOG_GENERATE_SYMBOLS = YES; @@ -730,6 +736,7 @@ ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground; CODE_SIGN_ENTITLEMENTS = Haru_DanimWatchWidgetsExtension.entitlements; + CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_TEAM = 5GNS4Z2SYT; @@ -746,6 +753,7 @@ MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = "com.yechan.HaruDanim.watchkitapp.Haru-DanimWatchWidgets"; PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; SDKROOT = watchos; SKIP_INSTALL = YES; STRING_CATALOG_GENERATE_SYMBOLS = YES; @@ -764,6 +772,7 @@ ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground; CODE_SIGN_ENTITLEMENTS = Haru_DanimWatchWidgetsExtension.entitlements; + CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_TEAM = 5GNS4Z2SYT; @@ -780,6 +789,7 @@ MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = "com.yechan.HaruDanim.watchkitapp.Haru-DanimWatchWidgets"; PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; SDKROOT = watchos; SKIP_INSTALL = YES; STRING_CATALOG_GENERATE_SYMBOLS = YES; diff --git a/myApp/HaruDanim/Haru_Danim.xcodeproj/xcshareddata/xcschemes/Haru_Danim.xcscheme b/myApp/HaruDanim/Haru_Danim.xcodeproj/xcshareddata/xcschemes/Haru_Danim.xcscheme index 61f273a..5330898 100644 --- a/myApp/HaruDanim/Haru_Danim.xcodeproj/xcshareddata/xcschemes/Haru_Danim.xcscheme +++ b/myApp/HaruDanim/Haru_Danim.xcodeproj/xcshareddata/xcschemes/Haru_Danim.xcscheme @@ -41,9 +41,6 @@ debugServiceExtension = "internal" allowLocationSimulation = "YES" queueDebuggingEnableBacktraceRecording = "Yes"> - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/myApp/HaruDanim/Haru_Danim.xcodeproj/xcshareddata/xcschemes/Haru_DanimWatchWidgetsExtension.xcscheme b/myApp/HaruDanim/Haru_Danim.xcodeproj/xcshareddata/xcschemes/Haru_DanimWatchWidgetsExtension.xcscheme new file mode 100644 index 0000000..d50f479 --- /dev/null +++ b/myApp/HaruDanim/Haru_Danim.xcodeproj/xcshareddata/xcschemes/Haru_DanimWatchWidgetsExtension.xcscheme @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/myApp/HaruDanim/Haru_Danim.xcodeproj/xcshareddata/xcschemes/Haru_DanimWidgets.xcscheme b/myApp/HaruDanim/Haru_Danim.xcodeproj/xcshareddata/xcschemes/Haru_DanimWidgets.xcscheme new file mode 100644 index 0000000..2edf38b --- /dev/null +++ b/myApp/HaruDanim/Haru_Danim.xcodeproj/xcshareddata/xcschemes/Haru_DanimWidgets.xcscheme @@ -0,0 +1,125 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/myApp/HaruDanim/Haru_DanimWatch Watch App/ContentView.swift b/myApp/HaruDanim/Haru_DanimWatch Watch App/ContentView.swift index 13ff0e9..96a4301 100644 --- a/myApp/HaruDanim/Haru_DanimWatch Watch App/ContentView.swift +++ b/myApp/HaruDanim/Haru_DanimWatch Watch App/ContentView.swift @@ -206,8 +206,12 @@ enum WatchFormat { let total = Int(seconds.rounded()) let h = total / 3600 let m = (total % 3600) / 60 - if h > 0 { return m > 0 ? "\(h)시간 \(m)분" : "\(h)시간" } - if m > 0 { return "\(m)분" } - return "\(total)초" + if h > 0 { + return m > 0 + ? String(localized: "\(h)시간 \(m)분") + : String(localized: "\(h)시간") + } + if m > 0 { return String(localized: "\(m)분") } + return String(localized: "\(total)초") } } diff --git a/myApp/HaruDanim/Haru_DanimWatch Watch App/Haru_DanimWatch Watch App.entitlements b/myApp/HaruDanim/Haru_DanimWatch Watch App/Haru_DanimWatch Watch App.entitlements index 64b9130..9fb594a 100644 --- a/myApp/HaruDanim/Haru_DanimWatch Watch App/Haru_DanimWatch Watch App.entitlements +++ b/myApp/HaruDanim/Haru_DanimWatch Watch App/Haru_DanimWatch Watch App.entitlements @@ -6,5 +6,9 @@ group.com.yechan.HaruDanim + keychain-access-groups + + $(AppIdentifierPrefix)com.yechan.HaruDanim + diff --git a/myApp/HaruDanim/Haru_DanimWatch Watch App/Localizable.xcstrings b/myApp/HaruDanim/Haru_DanimWatch Watch App/Localizable.xcstrings new file mode 100644 index 0000000..575d0fa --- /dev/null +++ b/myApp/HaruDanim/Haru_DanimWatch Watch App/Localizable.xcstrings @@ -0,0 +1,718 @@ +{ + "sourceLanguage": "ko", + "strings": { + "%@": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "%@" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "%@" + } + } + } + }, + "%@ %@": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "%@ %@" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "%@ %@" + } + }, + "ko": { + "stringUnit": { + "state": "new", + "value": "%1$@ %2$@" + } + } + } + }, + "%@ %lld%%": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "%@ %lld%%" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "%@ %lld%%" + } + }, + "ko": { + "stringUnit": { + "state": "new", + "value": "%1$@ %2$lld%%" + } + } + } + }, + "%@ +%lld": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "%@ +%lld" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "%@ +%lld" + } + }, + "ko": { + "stringUnit": { + "state": "new", + "value": "%1$@ +%2$lld" + } + } + } + }, + "%lld": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "%lld" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "%lld" + } + } + } + }, + "%lld%%": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "%lld%%" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "%lld%%" + } + } + } + }, + "%lld분": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "%lldm" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "%lld分" + } + } + } + }, + "%lld시간": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "%lldh" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "%lld時間" + } + } + } + }, + "%lld시간 %lld분": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "%lldh %lldm" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "%lld時間%lld分" + } + }, + "ko": { + "stringUnit": { + "state": "new", + "value": "%1$lld시간 %2$lld분" + } + } + } + }, + "%lld초": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "%llds" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "%lld秒" + } + } + } + }, + "+%lld": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "+%lld" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "+%lld" + } + } + } + }, + "iPhone 앱의 설정 → 프리미엄에서 잠금 해제해 주세요": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Unlock in the iPhone app: Settings → Premium" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "iPhoneアプリの設定→プレミアムでロックを解除してください" + } + } + } + }, + "iPhone과 연결 중...": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Connecting to iPhone..." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "iPhoneに接続中..." + } + } + } + }, + "iPhone에 연결할 수 없어요. 근처에 있는지 확인해 주세요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Can't reach your iPhone. Make sure it's nearby." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "iPhoneに接続できません。近くにあるか確認してください。" + } + } + } + }, + "기간": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Period" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "期間" + } + } + } + }, + "꼬리표 없음": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "No tag" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "タグなし" + } + } + } + }, + "다짐": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Quest" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "クエスト" + } + } + } + }, + "다짐 달성률": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Quest Progress" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "クエスト達成率" + } + } + } + }, + "다짐 달성률 (%@)": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Quest progress (%@)" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "クエスト達成率(%@)" + } + } + } + }, + "목표": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Goals" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "目標" + } + } + } + }, + "목표 달성률": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Goal Progress" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "目標達成率" + } + } + } + }, + "목표 달성률 (%@)": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Goal progress (%@)" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "目標達成率(%@)" + } + } + } + }, + "선택한 다짐의 달성률을 표시해요. 한도형 다짐은 상태로 표시돼요. (프리미엄)": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Shows the selected quest's progress. Limit quests show their status. (Premium)" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "選択したクエストの達成率を表示します。上限型はステータス表示になります。(プレミアム)" + } + } + } + }, + "선택한 목표의 하루/주간/월간 달성률을 표시해요. (프리미엄)": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Shows the selected goal's daily/weekly/monthly progress. (Premium)" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "選択した目標の日/週/月の達成率を表示します。(プレミアム)" + } + } + } + }, + "실행 중 아님": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Not running" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "実行中なし" + } + } + } + }, + "없음": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "None" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "なし" + } + } + } + }, + "오늘 %@": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Today %@" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "今日 %@" + } + } + } + }, + "오늘 %lld회": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Today %lld times" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "今日%lld回" + } + } + } + }, + "월간": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Monthly" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "月間" + } + } + } + }, + "주간": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Weekly" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "週間" + } + } + } + }, + "초과": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Over" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "超過" + } + } + } + }, + "측정 중": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Tracking" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "計測中" + } + } + } + }, + "측정 중인 행동과 경과 시간을 표시해요. (프리미엄)": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Shows the running action and elapsed time. (Premium)" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "計測中のアクションと経過時間を表示します。(プレミアム)" + } + } + } + }, + "표시할 다짐과 기간을 선택하세요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Choose a quest and period to display." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "表示するクエストと期間を選んでください。" + } + } + } + }, + "표시할 목표와 기간을 선택하세요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Choose a goal and period to display." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "表示する目標と期間を選んでください。" + } + } + } + }, + "프리미엄": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Premium" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "プレミアム" + } + } + } + }, + "프리미엄 기능": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Premium Features" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "プレミアム機能" + } + } + } + }, + "하루": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Daily" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "1日" + } + } + } + }, + "하루다님": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "HaruDanim" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "ハルダニム" + } + } + } + }, + "한도": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Limit" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "上限" + } + } + } + }, + "한도 안": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Within" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "上限内" + } + } + } + }, + "한도 초과": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Over limit" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "上限超過" + } + } + } + }, + "현재 현황": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Current Status" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "現在の状況" + } + } + } + } + }, + "version": "1.0" +} diff --git a/myApp/HaruDanim/Haru_DanimWatchWidgets/ComplicationSupport.swift b/myApp/HaruDanim/Haru_DanimWatchWidgets/ComplicationSupport.swift index 9ba5053..1f98349 100644 --- a/myApp/HaruDanim/Haru_DanimWatchWidgets/ComplicationSupport.swift +++ b/myApp/HaruDanim/Haru_DanimWatchWidgets/ComplicationSupport.swift @@ -37,9 +37,9 @@ enum WatchSpanOption: String, AppEnum { var label: String { switch self { - case .day: return "하루" - case .week: return "주간" - case .month: return "월간" + case .day: return String(localized: "하루") + case .week: return String(localized: "주간") + case .month: return String(localized: "월간") } } } diff --git a/myApp/HaruDanim/Haru_DanimWatchWidgets/Localizable.xcstrings b/myApp/HaruDanim/Haru_DanimWatchWidgets/Localizable.xcstrings new file mode 100644 index 0000000..dc699be --- /dev/null +++ b/myApp/HaruDanim/Haru_DanimWatchWidgets/Localizable.xcstrings @@ -0,0 +1,536 @@ +{ + "sourceLanguage": "ko", + "strings": { + "%@": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "%@" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "%@" + } + } + } + }, + "%@ %@": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "%@ %@" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "%@ %@" + } + }, + "ko": { + "stringUnit": { + "state": "new", + "value": "%1$@ %2$@" + } + } + } + }, + "%@ %lld%%": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "%@ %lld%%" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "%@ %lld%%" + } + }, + "ko": { + "stringUnit": { + "state": "new", + "value": "%1$@ %2$lld%%" + } + } + } + }, + "%@ +%lld": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "%@ +%lld" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "%@ +%lld" + } + }, + "ko": { + "stringUnit": { + "state": "new", + "value": "%1$@ +%2$lld" + } + } + } + }, + "%lld": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "%lld" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "%lld" + } + } + } + }, + "%lld%%": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "%lld%%" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "%lld%%" + } + } + } + }, + "+%lld": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "+%lld" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "+%lld" + } + } + } + }, + "기간": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Period" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "期間" + } + } + } + }, + "다짐": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Quest" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "クエスト" + } + } + } + }, + "다짐 달성률": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Quest Progress" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "クエスト達成率" + } + } + } + }, + "다짐 달성률 (%@)": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Quest progress (%@)" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "クエスト達成率(%@)" + } + } + } + }, + "목표": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Goals" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "目標" + } + } + } + }, + "목표 달성률": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Goal Progress" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "目標達成率" + } + } + } + }, + "목표 달성률 (%@)": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Goal progress (%@)" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "目標達成率(%@)" + } + } + } + }, + "선택한 다짐의 달성률을 표시해요. 한도형 다짐은 상태로 표시돼요. (프리미엄)": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Shows the selected quest's progress. Limit quests show their status. (Premium)" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "選択したクエストの達成率を表示します。上限型はステータス表示になります。(プレミアム)" + } + } + } + }, + "선택한 목표의 하루/주간/월간 달성률을 표시해요. (프리미엄)": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Shows the selected goal's daily/weekly/monthly progress. (Premium)" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "選択した目標の日/週/月の達成率を表示します。(プレミアム)" + } + } + } + }, + "실행 중 아님": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Not running" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "実行中なし" + } + } + } + }, + "없음": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "None" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "なし" + } + } + } + }, + "월간": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Monthly" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "月間" + } + } + } + }, + "주간": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Weekly" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "週間" + } + } + } + }, + "초과": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Over" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "超過" + } + } + } + }, + "측정 중": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Tracking" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "計測中" + } + } + } + }, + "측정 중인 행동과 경과 시간을 표시해요. (프리미엄)": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Shows the running action and elapsed time. (Premium)" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "計測中のアクションと経過時間を表示します。(プレミアム)" + } + } + } + }, + "표시할 다짐과 기간을 선택하세요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Choose a quest and period to display." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "表示するクエストと期間を選んでください。" + } + } + } + }, + "표시할 목표와 기간을 선택하세요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Choose a goal and period to display." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "表示する目標と期間を選んでください。" + } + } + } + }, + "프리미엄": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Premium" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "プレミアム" + } + } + } + }, + "하루": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Daily" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "1日" + } + } + } + }, + "하루다님": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "HaruDanim" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "ハルダニム" + } + } + } + }, + "한도": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Limit" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "上限" + } + } + } + }, + "한도 안": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Within" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "上限内" + } + } + } + }, + "한도 초과": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Over limit" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "上限超過" + } + } + } + }, + "현재 현황": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Current Status" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "現在の状況" + } + } + } + } + }, + "version": "1.0" +} diff --git a/myApp/HaruDanim/Haru_DanimWatchWidgets/RateComplications.swift b/myApp/HaruDanim/Haru_DanimWatchWidgets/RateComplications.swift index 8ff8fec..3a7db7d 100644 --- a/myApp/HaruDanim/Haru_DanimWatchWidgets/RateComplications.swift +++ b/myApp/HaruDanim/Haru_DanimWatchWidgets/RateComplications.swift @@ -261,7 +261,7 @@ struct QuestRateComplicationView: View { Image(systemName: quest.achieved(forSpanRaw: entry.spanRaw) ? "checkmark.circle.fill" : "exclamationmark.triangle.fill") .font(.system(size: 16)) - Text(quest.achieved(forSpanRaw: entry.spanRaw) ? "한도 안" : "초과") + Text(quest.achieved(forSpanRaw: entry.spanRaw) ? String(localized: "한도 안") : String(localized: "초과")) .font(.system(size: 9)) } } else { @@ -277,7 +277,7 @@ struct QuestRateComplicationView: View { private func inlineText(_ quest: WatchQuestInfo) -> String { if quest.isAtMost { - return quest.achieved(forSpanRaw: entry.spanRaw) ? "한도 안" : "한도 초과" + return quest.achieved(forSpanRaw: entry.spanRaw) ? String(localized: "한도 안") : String(localized: "한도 초과") } return "\(Int((quest.ratio(forSpanRaw: entry.spanRaw) * 100).rounded()))%" } diff --git a/myApp/HaruDanim/Haru_DanimWatchWidgetsExtension.entitlements b/myApp/HaruDanim/Haru_DanimWatchWidgetsExtension.entitlements index 64b9130..9fb594a 100644 --- a/myApp/HaruDanim/Haru_DanimWatchWidgetsExtension.entitlements +++ b/myApp/HaruDanim/Haru_DanimWatchWidgetsExtension.entitlements @@ -6,5 +6,9 @@ group.com.yechan.HaruDanim + keychain-access-groups + + $(AppIdentifierPrefix)com.yechan.HaruDanim + diff --git a/myApp/HaruDanim/IOS/ContentView.swift b/myApp/HaruDanim/IOS/ContentView.swift index c8f560c..28db977 100644 --- a/myApp/HaruDanim/IOS/ContentView.swift +++ b/myApp/HaruDanim/IOS/ContentView.swift @@ -151,13 +151,13 @@ enum AppTab: String, CaseIterable, Identifiable { var label: String { switch self { - case .main: return "모음" - case .action: return "행동" - case .tag: return "꼬리표" - case .goal: return "목표" - case .history: return "기록" - case .stats: return "통계" - case .settings: return "설정" + case .main: return String(localized: "모음") + case .action: return String(localized: "행동") + case .tag: return String(localized: "꼬리표") + case .goal: return String(localized: "목표") + case .history: return String(localized: "기록") + case .stats: return String(localized: "통계") + case .settings: return String(localized: "설정") } } diff --git a/myApp/HaruDanim/IOS/Core/SymbolCatalog.swift b/myApp/HaruDanim/IOS/Core/SymbolCatalog.swift index 0994bdd..240058a 100644 --- a/myApp/HaruDanim/IOS/Core/SymbolCatalog.swift +++ b/myApp/HaruDanim/IOS/Core/SymbolCatalog.swift @@ -26,14 +26,14 @@ enum SymbolCatalog { } private static let rawCategories: [(String, [String])] = [ - ("인기", [ + (String(localized: "인기"), [ "star.fill", "heart.fill", "flame.fill", "bolt.fill", "leaf.fill", "book.fill", "pencil", "figure.walk", "figure.run", "dumbbell.fill", "cup.and.saucer.fill", "fork.knife", "bed.double.fill", "alarm.fill", "laptopcomputer", "gamecontroller.fill", "music.note", "drop.fill", "pills.fill", "brain.head.profile", "checkmark.circle.fill", "timer", ]), - ("운동", [ + (String(localized: "운동"), [ "figure.walk", "figure.run", "figure.hiking", "figure.yoga", "figure.cooldown", "figure.strengthtraining.traditional", "figure.strengthtraining.functional", "figure.core.training", @@ -50,7 +50,7 @@ enum SymbolCatalog { "volleyball.fill", "american.football.fill", "cricket.ball.fill", "hockey.puck.fill", "medal.fill", "trophy.fill", "stopwatch.fill", ]), - ("건강", [ + (String(localized: "건강"), [ "heart.fill", "heart.text.square.fill", "cross.case.fill", "pills.fill", "pill.fill", "syringe.fill", "bandage.fill", "stethoscope", "thermometer.variable", "lungs.fill", "brain.fill", @@ -60,7 +60,7 @@ enum SymbolCatalog { "staroflife.fill", "leaf.fill", "carrot.fill", "scalemass.fill", "toilet.fill", "shower.fill", "bathtub.fill", "comb.fill", ]), - ("학습", [ + (String(localized: "학습"), [ "book.fill", "book.closed.fill", "books.vertical.fill", "text.book.closed.fill", "bookmark.fill", "graduationcap.fill", "pencil", "pencil.and.ruler.fill", "highlighter", @@ -72,7 +72,7 @@ enum SymbolCatalog { "brain.head.profile", "lightbulb.fill", "puzzlepiece.fill", "backpack.fill", "ruler.fill", "paperclip", "folder.fill", ]), - ("일·업무", [ + (String(localized: "일·업무"), [ "briefcase.fill", "laptopcomputer", "desktopcomputer", "keyboard.fill", "printer.fill", "envelope.fill", "phone.fill", "video.fill", "person.2.fill", "person.3.fill", "calendar", @@ -84,7 +84,7 @@ enum SymbolCatalog { "checklist", "list.bullet.clipboard.fill", "tray.full.fill", "archivebox.fill", "presentation.fill" ,"megaphone.fill", ]), - ("생활", [ + (String(localized: "생활"), [ "house.fill", "sofa.fill", "bed.double.fill", "lamp.desk.fill", "lightbulb.fill", "washer.fill", "dryer.fill", "dishwasher.fill", "refrigerator.fill", "oven.fill", "stove.fill", "microwave.fill", @@ -97,14 +97,14 @@ enum SymbolCatalog { "pawprint.fill", "dog.fill", "cat.fill", "fish.fill", "bird.fill", "teddybear.fill", "stroller.fill", ]), - ("음식", [ + (String(localized: "음식"), [ "fork.knife", "cup.and.saucer.fill", "mug.fill", "wineglass.fill", "waterbottle.fill", "takeoutbag.and.cup.and.straw.fill", "birthday.cake.fill", "carrot.fill", "fish.fill", "frying.pan.fill", "popcorn.fill", "cooktop.fill", "drop.fill", "flame.fill", "leaf.fill", ]), - ("취미", [ + (String(localized: "취미"), [ "gamecontroller.fill", "arcade.stick.console.fill", "dice.fill", "puzzlepiece.fill", "music.note", "music.mic", "guitars.fill", "pianokeys", "headphones", "hifispeaker.fill", "radio.fill", @@ -116,7 +116,7 @@ enum SymbolCatalog { "fishing.rod" ,"tree.fill", "camera.macro", "bird.fill", "balloon.2.fill", "party.popper.fill", "crown.fill", ]), - ("이동", [ + (String(localized: "이동"), [ "car.fill", "bus.fill", "tram.fill", "train.side.front.car", "airplane", "ferry.fill", "sailboat.fill", "bicycle", "scooter", "motorcycle.fill" ,"fuelpump.fill", "ev.charger.fill", @@ -124,7 +124,7 @@ enum SymbolCatalog { "mappin.and.ellipse", "signpost.right.fill", "road.lanes", "parkingsign", "steeringwheel", "suitcase.rolling.fill", ]), - ("자연", [ + (String(localized: "자연"), [ "sun.max.fill", "moon.fill", "moon.stars.fill", "sparkles", "cloud.fill", "cloud.rain.fill", "cloud.snow.fill", "cloud.sun.fill", "wind", "snowflake", "drop.fill", @@ -132,7 +132,7 @@ enum SymbolCatalog { "camera.macro", "mountain.2.fill", "water.waves", "globe.asia.australia.fill", "star.fill", "rainbow", ]), - ("기호", [ + (String(localized: "기호"), [ "circle.fill", "square.fill", "triangle.fill", "diamond.fill", "seal.fill", "shield.fill", "flag.fill", "flag.checkered", "tag.fill", "bell.fill", "bookmark.fill", "pin.fill", diff --git a/myApp/HaruDanim/IOS/Localizable.xcstrings b/myApp/HaruDanim/IOS/Localizable.xcstrings index e9b44ff..59b45f8 100644 --- a/myApp/HaruDanim/IOS/Localizable.xcstrings +++ b/myApp/HaruDanim/IOS/Localizable.xcstrings @@ -1,1101 +1,6575 @@ { - "sourceLanguage" : "ko", - "strings" : { - "" : { - - }, - "'%@ · %@' %@ 진행률: %@" : { - "localizations" : { - "ko" : { - "stringUnit" : { - "state" : "new", - "value" : "'%1$@ · %2$@' %3$@ 진행률: %4$@" - } - } - } - }, - "'%@' %@ 진행률은 %lld%%예요." : { - "localizations" : { - "ko" : { - "stringUnit" : { - "state" : "new", - "value" : "'%1$@' %2$@ 진행률은 %3$lld%%예요." - } - } - } - }, - "‘%@’ 꼬리표를 삭제할까요? 행동은 삭제되지 않아요." : { - - }, - "‘%@’ 목표를 달성했나요?" : { - - }, - "‘%@’ 목표를 삭제할까요? 다짐도 함께 삭제됩니다." : { - - }, - "'%@' 목표에는 아직 다짐이 없어요." : { - - }, - "‘%@’ 행동을 삭제할까요? 기록도 함께 삭제됩니다." : { - - }, - "'%@'은(는) 시간 측정 행동이에요. 측정 시작/종료를 사용해 주세요." : { - - }, - "'%@'은(는) 횟수 기록 행동이에요. 횟수 추가를 사용해 주세요." : { - - }, - "%@" : { - - }, - "%@ · %@" : { - "localizations" : { - "ko" : { - "stringUnit" : { - "state" : "new", - "value" : "%1$@ · %2$@" - } - } - } - }, - "%@ · %@ %@" : { - "localizations" : { - "ko" : { - "stringUnit" : { - "state" : "new", - "value" : "%1$@ · %2$@ %3$@" - } - } - } - }, - "%@ %@" : { - "localizations" : { - "ko" : { - "stringUnit" : { - "state" : "new", - "value" : "%1$@ %2$@" - } - } - } - }, - "%@ %@ 누적 시간은 %@이에요." : { - "localizations" : { - "ko" : { - "stringUnit" : { - "state" : "new", - "value" : "%1$@ %2$@ 누적 시간은 %3$@이에요." - } - } - } - }, - "%@ %@ 누적 횟수는 %lld회예요." : { - "localizations" : { - "ko" : { - "stringUnit" : { - "state" : "new", - "value" : "%1$@ %2$@ 누적 횟수는 %3$lld회예요." - } - } - } - }, - "%@ %lld회" : { - "localizations" : { - "ko" : { - "stringUnit" : { - "state" : "new", - "value" : "%1$@ %2$lld회" - } - } - } - }, - "%@ %lld회 추가했어요. 오늘 총 %lld회예요." : { - "localizations" : { - "ko" : { - "stringUnit" : { - "state" : "new", - "value" : "%1$@ %2$lld회 추가했어요. 오늘 총 %3$lld회예요." - } - } - } - }, - "%@ ~ %@" : { - "localizations" : { - "ko" : { - "stringUnit" : { - "state" : "new", - "value" : "%1$@ ~ %2$@" - } - } - } - }, - "%@ 기록" : { - - }, - "%@ 시작" : { - - }, - "%@ 측정 완료" : { - - }, - "%@ 측정을 시작했어요." : { - - }, - "%@ 측정을 종료했어요. %@ 기록했어요." : { - "localizations" : { - "ko" : { - "stringUnit" : { - "state" : "new", - "value" : "%1$@ 측정을 종료했어요. %2$@ 기록했어요." - } - } - } - }, - "%@ 측정을 종료했어요. 너무 짧은 기록이라 저장하지 않았어요." : { - - }, - "%@요일" : { - - }, - "%@은(는) 이미 측정 중이에요." : { - - }, - "%@은(는) 측정 중이 아니에요." : { - - }, - "%lld" : { - - }, - "%lld/%lld" : { - "localizations" : { - "ko" : { - "stringUnit" : { - "state" : "new", - "value" : "%1$lld/%2$lld" - } - } - } - }, - "%lld%%" : { - - }, - "%lld개" : { - - }, - "%lld분" : { - - }, - "%lld시간" : { - - }, - "%lld째 주" : { - - }, - "%lld회" : { - - }, - "+%lld" : { - - }, - "+%lld 기록 완료" : { - - }, - "1.0" : { - - }, - "① 대상 선택" : { - - }, - "② 주기 선택" : { - - }, - "③ 목표량과 방향" : { - - }, - "iCloud로 아이패드 등 다른 기기와 데이터가 동기화돼요. 변경 사항은 앱을 완전히 종료했다가 다시 실행하면 적용돼요." : { - - }, - "값" : { - - }, - "건너뛰기" : { - - }, - "결제 기능은 App Store 배포 준비와 함께 제공될 예정이에요." : { - - }, - "그래프로 보여줄 행동과 기간을 선택하세요." : { - - }, - "기간" : { - - }, - "기간 진행률 %@" : { - - }, - "기기 간 동기화" : { - - }, - "기록" : { - - }, - "기록 (최신순)" : { - - }, - "기록 삭제" : { - - }, - "기록 삭제 (증가 취소)" : { - - }, - "기록 시 메모 창 표시" : { - - }, - "기록 시각" : { - - }, - "기록 직접 추가" : { - - }, - "기록 확인" : { - - }, - "기록이 없어요" : { - - }, - "기본 정보" : { - - }, - "꼬리표" : { - - }, - "꼬리표 (복수 선택 가능)" : { - - }, - "꼬리표 삭제" : { - - }, - "꼬리표 수정" : { - - }, - "꼬리표 순서" : { - - }, - "꼬리표 순서 변경" : { - - }, - "꼬리표 없음" : { - - }, - "꼬리표 이름 (예: 공부)" : { - - }, - "꼬리표 추가" : { - - }, - "꼬리표가 없어요" : { - - }, - "꼬리표를 누르면 소속 행동이 한 번에 선택·해제되고, 그 안에서 행동을 개별로 켜고 끌 수 있어요." : { - - }, - "끝" : { - - }, - "날짜" : { - - }, - "날짜 기준" : { - - }, - "날짜 선택" : { - - }, - "누적 기록" : { - - }, - "다이나믹 아일랜드 · 잠금화면" : { - - }, - "다짐" : { - - }, - "다짐 %lld개" : { - - }, - "다짐 1" : { - - }, - "다짐 2" : { - - }, - "다짐 3" : { - - }, - "다짐 4" : { - - }, - "다짐 수정" : { - - }, - "다짐 점 표시" : { - - }, - "다짐 진행률" : { - - }, - "다짐 진행률 가져오기" : { - - }, - "다짐 진행률 위젯" : { - - }, - "다짐 추가" : { - - }, - "다짐 현황" : { - - }, - "다짐 현황 위젯" : { - - }, - "다짐들의 진행률 링을 표시할 목표와 기간을 선택하세요." : { - - }, - "다짐을 찾을 수 없어요. 앱에서 삭제됐을 수 있어요." : { - - }, - "다짐의 진행률을 원형 링으로 보고, 눌러서 바로 실행해요. (프리미엄)" : { - - }, - "다짐의 하루/주간/월간 진행률(%)을 가져와요." : { - - }, - "다짐이 없는 목표예요. 달성했나요?" : { - - }, - "다짐이 없어요" : { - - }, - "다크" : { - - }, - "닫기" : { - - }, - "달성률 기간" : { - - }, - "달성하거나 종료한 목표가 여기에 모여요." : { - - }, - "달성하지 못했어요" : { - - }, - "달성했나요? 탭해서 선택" : { - - }, - "달성했어요" : { - - }, - "당신의 하루에 다녀가다" : { - "comment" : "스플래시 브랜드 멘트", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Stopping by your day" + "sourceLanguage": "ko", + "strings": { + "%@": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "%@" } }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "あなたの一日に、立ち寄る" + "ja": { + "stringUnit": { + "state": "translated", + "value": "%@" } } } }, - "대상 종류" : { - - }, - "대표 시간 기준" : { - - }, - "더보기" : { - - }, - "동기화" : { - - }, - "등록된 꼬리표가 없어요" : { - - }, - "등록된 행동이 없어요" : { - - }, - "라이트" : { - - }, - "메모" : { - - }, - "메모 남기기" : { - - }, - "몇째 주" : { - - }, - "모음" : { - - }, - "모음 탭 목표 진행 현황" : { - - }, - "목표" : { - - }, - "목표 1" : { - - }, - "목표 2" : { - - }, - "목표 2 (대형 전용)" : { - - }, - "목표 3" : { - - }, - "목표 4" : { - - }, - "목표 내용" : { - - }, - "목표 달성률 (잠금화면)" : { - - }, - "목표 삭제" : { - - }, - "목표 수동 종료" : { - - }, - "목표 수정" : { - - }, - "목표 없음" : { - - }, - "목표 진행 현황" : { - - }, - "목표 진행률" : { - - }, - "목표 진행률 가져오기" : { - - }, - "목표 진행률 위젯" : { - - }, - "목표 추가" : { - - }, - "목표 탭에서 목표를 만들면 여기서 선택할 수 있어요." : { - - }, - "목표 확인" : { - - }, - "목표 횟수" : { - - }, - "목표를 지금 종료할까요?" : { - - }, - "목표를 찾을 수 없어요. 앱에서 삭제됐을 수 있어요." : { - - }, - "목표에 속한 다짐들의 진행률을 원형 링으로 한눈에 봐요. (프리미엄)" : { - - }, - "목표의 하루·주간·월간 진행률을 진행바로 확인해요. (프리미엄)" : { - - }, - "목표의 하루/주간/월간 진행률(%)을 가져와요. 소속 다짐들의 진행률 평균이에요." : { - - }, - "무료 버전에서는 목표당 다짐을 최대 %lld개까지 만들 수 있어요." : { - - }, - "무료 버전에서는 목표를 최대 %lld개까지 만들 수 있어요. 프리미엄으로 업그레이드하면 무제한으로 사용할 수 있습니다." : { - - }, - "무료 버전에서는 행동을 최대 %lld개까지 만들 수 있어요. 프리미엄으로 업그레이드하면 무제한으로 사용할 수 있습니다." : { - - }, - "무료 사용 중" : { - - }, - "무료 사용 한도" : { - - }, - "무료: 행동 %lld개 · 목표 %lld개 · 목표당 다짐 %lld개까지" : { - "localizations" : { - "ko" : { - "stringUnit" : { - "state" : "new", - "value" : "무료: 행동 %1$lld개 · 목표 %2$lld개 · 목표당 다짐 %3$lld개까지" - } - } - } - }, - "미리 보기" : { - - }, - "반복 주기" : { - - }, - "방향" : { - - }, - "배치 편집" : { - - }, - "버전" : { - - }, - "버튼을 길게 눌러 끌면 순서를 바꿀 수 있어요." : { - - }, - "범위" : { - - }, - "보기" : { - - }, - "분" : { - - }, - "사용 중" : { - - }, - "삭제" : { - - }, - "새 꼬리표 만들기" : { - - }, - "새 목표를 세우거나, 아래에서 완료된 목표를 확인해 보세요." : { - - }, - "색" : { - - }, - "선택" : { - - }, - "선택한 목표의 진행 현황이 모음 탭 상단에 표시돼요. 탭하면 목표 상세로 이동해요. 2개 이상 선택하면 카드를 옆으로 쓸어 넘겨 한 장씩 볼 수 있고, 표시 방식(다짐별로 각각 / 전체 다짐 합산)은 모든 카드에 똑같이 적용돼요." : { - - }, - "선택한 탭(최대 %lld개)이 하단 탭바에 바로 표시되고, 나머지 탭은 ‘더보기’에서 열 수 있어요." : { - - }, - "선택한 행동들의 통계 꺾은선 그래프를 확인해요. (프리미엄)" : { - - }, - "설정" : { - - }, - "설정한 시간보다 짧게 측정하고 종료한 기록은 저장하지 않아요. 버튼을 실수로 눌렀을 때 유용해요." : { - - }, - "수량" : { - - }, - "수정" : { - - }, - "순서" : { - - }, - "숫자만" : { - - }, - "시각" : { - - }, - "시간" : { - - }, - "시간 기록" : { - - }, - "시간 기록 수정" : { - - }, - "시간 기록 추가" : { - - }, - "시간 기록이 없어요" : { - - }, - "시간 측정 시작" : { - - }, - "시간 측정 종료" : { - - }, - "시간 측정 행동은 시작/종료를 전환하고, 횟수 기록 행동은 횟수를 1 추가해요." : { - - }, - "시간 측정 행동의 측정을 시작해요." : { - - }, - "시간(h)" : { - - }, - "시리 단축어는 프리미엄 기능이에요. 하루 다님 앱의 설정 → 프리미엄에서 잠금 해제해 주세요." : { - - }, - "시작" : { - - }, - "시작 시각" : { - - }, - "시작·종료 시각 수동 입력" : { - - }, - "시작일 (과거 가능)" : { - - }, - "심볼 이름 검색 (영문)" : { - - }, - "아이콘" : { - - }, - "아이콘 선택" : { - - }, - "아이콘과 색" : { - - }, - "아직 등록된 행동이 없어요" : { - - }, - "앱에서 행동을 만들고 기록하면 그래프가 표시돼요." : { - - }, - "앱에서 행동을 만들면 여기서 실행할 수 있어요." : { - - }, - "앱의 목표 탭에서 다짐을 만들면 진행률이 표시돼요." : { - - }, - "앱의 목표 탭에서 목표를 만들면 진행률이 표시돼요." : { - - }, - "앱의 목표 탭에서 목표와 다짐을 만들어 보세요." : { - - }, - "앱의 설정 → 프리미엄에서\n잠금 해제해 주세요" : { - - }, - "언어" : { - - }, - "여러 행동을 동시에 추적 중일 때 대표로 표시할 시간이에요. (Live Activity 지원은 추후 추가 예정)" : { - - }, - "예: 토익 700점 이상 받기" : { - - }, - "오늘" : { - - }, - "오른쪽 위 ‘순서’를 누르면 다짐 순서를 바꿀 수 있어요." : { - - }, - "오른쪽 위 + 버튼으로 꼬리표를 추가하세요." : { - - }, - "오른쪽 위 + 버튼으로 행동을 추가하세요." : { - - }, - "오른쪽 핸들을 끌어서 순서를 바꾼 뒤 ‘완료’를 누르세요. 순서는 저장되어 유지돼요." : { - - }, - "완료" : { - - }, - "완료된 목표" : { - - }, - "완료된 목표 보기" : { - - }, - "완료된 목표가 없어요" : { - - }, - "요일" : { - - }, - "원형 게이지" : { - - }, - "원형 진행률로 표시할 다짐과 기간을 선택하세요." : { - - }, - "이 기록에 대한 메모 (선택)" : { - - }, - "이 목표를 이루기 위한 다짐(행동/꼬리표 + 주기 + 목표량)을 추가하세요." : { - - }, - "이름" : { - - }, - "이번 기록에 대한 메모 (선택)" : { - - }, - "이번 달" : { - - }, - "이번 주" : { - - }, - "이번 측정에 대한 메모 (선택)" : { - - }, - "일주일" : { - - }, - "일주일 (하루 단위)" : { - - }, - "잠금화면 목표 위젯" : { - - }, - "잠금화면에 표시할 목표와 기간, 표시 방식을 선택하세요." : { - - }, - "잠금화면에서 목표 달성률과 다짐 현황을 확인해요. (프리미엄)" : { - - }, - "저장" : { - - }, - "적용일" : { - - }, - "전체 선택" : { - - }, - "종료" : { - - }, - "종료 시 하위 다짐들의 달성 여부에 따라 달성/미달성이 결정돼요." : { - - }, - "종료 시각" : { - - }, - "종료 시각을 끄면 진행 중 상태가 돼요." : { - - }, - "종료됨" : { - - }, - "종료일" : { - - }, - "종료일 지정" : { - - }, - "주 시작 요일" : { - - }, - "주 평균" : { - - }, - "주기마다 목표량 이상을 달성하는 것이 목표예요." : { - - }, - "주기마다 목표량을 넘지 않는 것이 목표예요." : { - - }, - "주차" : { - - }, - "즐겨찾기" : { - - }, - "즐겨찾기 해제" : { - - }, - "지금 시각" : { - - }, - "지정된 꼬리표 없음" : { - - }, - "직접 선택" : { - - }, - "진행 중" : { - - }, - "진행 중인 목표가 없어요" : { - - }, - "진행률 기간" : { - - }, - "짧은 기록 무시" : { - - }, - "추가" : { - - }, - "추가할 횟수" : { - - }, - "추적 방식" : { - - }, - "취소" : { - - }, - "측정" : { - - }, - "측정 기준" : { - - }, - "측정 시작" : { - - }, - "측정 종료" : { - - }, - "측정 중인 행동의 시간 측정을 종료해요." : { - - }, - "켜면 시간 측정을 종료할 때 메모 창이 떠요. 건너뛸 수 있어요." : { - - }, - "켜면 횟수를 추가할 때마다 메모 창이 떠요. 건너뛸 수 있어요." : { - - }, - "큰 목표를 세우고, 그 안에 다짐을 추가해 보세요." : { - - }, - "탭바 구성" : { - - }, - "테마" : { - - }, - "통계" : { - - }, - "통계 기간" : { - - }, - "통계 보기" : { - - }, - "통계 위젯" : { - - }, - "특정 시각 지정" : { - - }, - "표시 기간" : { - - }, - "표시 방식" : { - - }, - "표시 방식 (원형 크기)" : { - - }, - "표시할 기록이 없어요" : { - - }, - "표시할 행동과 누적 기간을 선택하세요." : { - - }, - "프리미엄" : { - - }, - "프리미엄 구매 (준비 중)" : { - - }, - "프리미엄 기능" : { - - }, - "프리미엄으로 할 수 있는 것" : { - - }, - "하루" : { - - }, - "하루 다님 · 목표 없음" : { - - }, - "하루 다님 · 프리미엄 기능" : { - - }, - "하루 시작 시간" : { - - }, - "하루 시작 시간을 걸치는 기록은 통계에서 자동으로 날짜별로 나누어 계산돼요." : { - - }, - "하루 평균" : { - - }, - "하루·주간·월간 진행률을 표시할 목표를 선택하세요." : { - - }, - "하루다님" : { - "comment" : "앱 이름", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Haru Danim" + "%@ %@": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "%@ %@" } }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "Haru Danim" + "ja": { + "stringUnit": { + "state": "translated", + "value": "%@ %@" + } + }, + "ko": { + "stringUnit": { + "state": "new", + "value": "%1$@ %2$@" } } } }, - "한 달 (주 단위)" : { - - }, - "한 달 (하루 단위, 중형 이상)" : { - - }, - "한 줄에 표시할 개수" : { - - }, - "합계" : { - - }, - "행동" : { - - }, - "행동 %lld/%lld개 표시 중" : { - "localizations" : { - "ko" : { - "stringUnit" : { - "state" : "new", - "value" : "행동 %1$lld/%2$lld개 표시 중" + "%@ %@ 누적 시간은 %@이에요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Total time for %@ (%@) is %@." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "%@の%@の累計時間は%@です。" + } + }, + "ko": { + "stringUnit": { + "state": "new", + "value": "%1$@ %2$@ 누적 시간은 %3$@이에요." } } } }, - "행동 %lld개" : { - + "%@ %@ 누적 횟수는 %lld회예요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Total count for %@ (%@) is %lld." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "%@の%@の累計回数は%lld回です。" + } + }, + "ko": { + "stringUnit": { + "state": "new", + "value": "%1$@ %2$@ 누적 횟수는 %3$lld회예요." + } + } + } }, - "행동 1" : { - + "%@ %lld회": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "%@ %lld times" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "%@ %lld回" + } + }, + "ko": { + "stringUnit": { + "state": "new", + "value": "%1$@ %2$lld회" + } + } + } }, - "행동 2" : { - + "%@ %lld회 추가했어요. 오늘 총 %lld회예요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Added %lld to %@. Today's total is %lld." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "%@を%lld回追加しました。今日の合計は%lld回です。" + } + }, + "ko": { + "stringUnit": { + "state": "new", + "value": "%1$@ %2$lld회 추가했어요. 오늘 총 %3$lld회예요." + } + } + } }, - "행동 3" : { - + "%@ ~ %@": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "%@ – %@" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "%@〜%@" + } + }, + "ko": { + "stringUnit": { + "state": "new", + "value": "%1$@ ~ %2$@" + } + } + } }, - "행동 4" : { - + "%@ · %@": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "%@ · %@" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "%@ · %@" + } + }, + "ko": { + "stringUnit": { + "state": "new", + "value": "%1$@ · %2$@" + } + } + } }, - "행동 누적값 가져오기" : { - + "%@ · %@ %@": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "%@ · %@ %@" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "%@ · %@ %@" + } + }, + "ko": { + "stringUnit": { + "state": "new", + "value": "%1$@ · %2$@ %3$@" + } + } + } }, - "행동 버튼의 색은 지정한 꼬리표의 색을 따라요." : { - + "%@ 기록": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "%@ records" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "%@の記録" + } + } + } }, - "행동 삭제" : { - + "%@ 시작": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Started %@" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "%@開始" + } + } + } }, - "행동 설정 수정" : { - + "%@ 시작 · 종료일 없음": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Started %@ · No end date" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "%@開始・終了日なし" + } + } + } }, - "행동 수정" : { - + "%@ 측정 완료": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Finished tracking %@" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "%@の計測完了" + } + } + } }, - "행동 실행" : { - + "%@ 측정을 시작했어요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Started tracking %@." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "%@の計測を開始しました。" + } + } + } }, - "행동 실행 위젯" : { - + "%@ 측정을 종료했어요. %@ 기록했어요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Stopped tracking %@. Recorded %@." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "%@の計測を終了しました。%@を記録しました。" + } + }, + "ko": { + "stringUnit": { + "state": "new", + "value": "%1$@ 측정을 종료했어요. %2$@ 기록했어요." + } + } + } }, - "행동 이름 (예: 독서)" : { - + "%@ 측정을 종료했어요. 너무 짧은 기록이라 저장하지 않았어요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Stopped tracking %@. The session was too short to save." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "%@の計測を終了しました。短すぎる記録のため保存しませんでした。" + } + } + } }, - "행동 추가" : { - + "%@ 한도 지킴": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "%@ within limit" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "%@ 上限内" + } + } + } }, - "행동 탭에서 추적할 행동을 추가해 보세요." : { - + "%@ 한도 초과": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "%@ over limit" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "%@ 上限超過" + } + } + } }, - "행동 통계" : { - + "%@요일": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "%@" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "%@曜日" + } + } + } }, - "행동을 위젯에서 바로 실행하고 누적값을 확인해요. (프리미엄)" : { - + "%@은(는) 이미 측정 중이에요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "%@ is already being tracked." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "%@はすでに計測中です。" + } + } + } }, - "행동을 찾을 수 없어요. 앱에서 삭제됐을 수 있어요." : { - + "%@은(는) 측정 중이 아니에요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "%@ is not being tracked." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "%@は計測中ではありません。" + } + } + } }, - "행동의 하루/주간/월간 누적 시간(초) 또는 횟수를 가져와요." : { - + "%lld": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "%lld" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "%lld" + } + } + } }, - "현재 진행 중" : { - + "%lld%%": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "%lld%%" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "%lld%%" + } + } + } }, - "화면" : { - + "%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" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "%lld個" + } + } + } }, - "회" : { - + "%lld분": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "%lldm" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "%lld分" + } + } + } }, - "횟수" : { - + "%lld시간": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "%lldh" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "%lld時間" + } + } + } }, - "횟수 기록" : { - + "%lld시간 %lld분": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "%lldh %lldm" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "%lld時間%lld分" + } + }, + "ko": { + "stringUnit": { + "state": "new", + "value": "%1$lld시간 %2$lld분" + } + } + } }, - "횟수 기록 수정" : { - + "%lld일": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "%lld" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "%lld日" + } + } + } }, - "횟수 기록 행동의 횟수를 바로 추가해요." : { - + "%lld째 주": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Week %lld" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "第%lld週" + } + } + } }, - "횟수 기록이 없어요" : { - + "%lld초": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "%llds" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "%lld秒" + } + } + } }, - "횟수 직접 입력·수정" : { - + "%lld회": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "%lld times" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "%lld回" + } + } + } }, - "횟수 직접 추가" : { - + "'%@ · %@' %@ 진행률: %@": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "'%@ · %@' %@ progress: %@" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "「%@ · %@」の%@進捗率: %@" + } + }, + "ko": { + "stringUnit": { + "state": "new", + "value": "'%1$@ · %2$@' %3$@ 진행률: %4$@" + } + } + } }, - "횟수 추가" : { - + "'%@' %@ 진행률은 %lld%%예요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "'%@' %@ progress is %lld%%." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "「%@」の%@進捗率は%lld%%です。" + } + }, + "ko": { + "stringUnit": { + "state": "new", + "value": "'%1$@' %2$@ 진행률은 %3$lld%%예요." + } + } + } + }, + "'%@' 목표에는 아직 다짐이 없어요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "The goal '%@' has no quests yet." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "目標「%@」にはまだクエストがありません。" + } + } + } + }, + "'%@'은(는) 시간 측정 행동이에요. 측정 시작/종료를 사용해 주세요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "'%@' is a time-tracking action. Use start/stop tracking instead." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "「%@」は時間計測タイプです。計測の開始/終了を使ってください。" + } + } + } + }, + "'%@'은(는) 횟수 기록 행동이에요. 횟수 추가를 사용해 주세요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "'%@' is a count action. Use add count instead." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "「%@」は回数記録タイプです。回数の追加を使ってください。" + } + } + } + }, + "+%lld": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "+%lld" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "+%lld" + } + } + } + }, + "+%lld 기록 완료": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "+%lld recorded" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "+%lld記録しました" + } + } + } + }, + "1.0": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "1.0" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "1.0" + } + } + } + }, + "10초": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "10 sec" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "10秒" + } + } + } + }, + "1분": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "1 min" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "1分" + } + } + } + }, + "30초": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "30 sec" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "30秒" + } + } + } + }, + "3초": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "3 sec" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "3秒" + } + } + } + }, + "5초": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "5 sec" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "5秒" + } + } + } + }, + "iCloud로 아이패드 등 다른 기기와 데이터가 동기화돼요. 변경 사항은 앱을 완전히 종료했다가 다시 실행하면 적용돼요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Sync your data with iPad and other devices via iCloud. Changes take effect after fully quitting and relaunching the app." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "iCloudでiPadなどの他のデバイスとデータを同期します。変更はアプリを完全に終了して再起動すると反映されます。" + } + } + } + }, + "‘%@’ 꼬리표를 삭제할까요? 행동은 삭제되지 않아요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Delete the tag ‘%@’? Its actions won't be deleted." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "タグ「%@」を削除しますか?アクションは削除されません。" + } + } + } + }, + "‘%@’ 목표를 달성했나요?": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Did you achieve the goal ‘%@’?" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "目標「%@」を達成しましたか?" + } + } + } + }, + "‘%@’ 목표를 삭제할까요? 다짐도 함께 삭제됩니다.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Delete the goal ‘%@’? Its quests will also be deleted." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "目標「%@」を削除しますか?クエストも一緒に削除されます。" + } + } + } + }, + "‘%@’ 행동을 삭제할까요? 기록도 함께 삭제됩니다.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Delete the action ‘%@’? Its records will also be deleted." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "アクション「%@」を削除しますか?記録も一緒に削除されます。" + } + } + } + }, + "① 대상 선택": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "① Choose a target" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "① 対象を選択" + } + } + } + }, + "② 주기 선택": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "② Choose a cycle" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "② 周期を選択" + } + } + } + }, + "③ 목표량과 방향": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "③ Amount & direction" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "③ 目標量と方向" + } + } + } + }, + "가장 나중에 시작한 행동": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Most recently started action" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "最後に開始したアクション" + } + } + } + }, + "가장 먼저 시작한 행동": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Earliest started action" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "最初に開始したアクション" + } + } + } + }, + "값": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Value" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "値" + } + } + } + }, + "개발용": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Developer" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "開発用" + } + } + } + }, + "건강": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Health" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "健康" + } + } + } + }, + "건너뛰기": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Skip" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "スキップ" + } + } + } + }, + "구독은 언제든 해지할 수 있고, 평생 이용권은 한 번 결제로 모든 기능을 계속 사용해요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Cancel your subscription anytime. The lifetime plan is a one-time purchase with permanent access to all features." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "サブスクリプションはいつでも解約できます。買い切りは1回の購入で全機能をずっと使えます。" + } + } + } + }, + "구매 복원": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Restore Purchases" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "購入を復元" + } + } + } + }, + "구매를 완료하지 못했어요. 잠시 후 다시 시도해 주세요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "The purchase couldn't be completed. Please try again later." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "購入を完了できませんでした。しばらくしてからもう一度お試しください。" + } + } + } + }, + "그래프로 보여줄 행동과 기간을 선택하세요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Choose actions and a period to chart." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "グラフに表示するアクションと期間を選んでください。" + } + } + } + }, + "금": { + "comment": "요일 축약(금요일)", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Fri" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "金" + } + } + } + }, + "기간": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Period" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "期間" + } + } + } + }, + "기간 진행률 %@": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Period progress %@" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "期間進捗 %@" + } + } + } + }, + "기기 간 동기화": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Sync Across Devices" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "デバイス間同期" + } + } + } + }, + "기록": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "History" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "記録" + } + } + } + }, + "기록 (최신순)": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Records (newest first)" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "記録(新しい順)" + } + } + } + }, + "기록 삭제": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Delete Record" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "記録を削除" + } + } + } + }, + "기록 삭제 (증가 취소)": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Delete record (undo count)" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "記録を削除(カウント取り消し)" + } + } + } + }, + "기록 시 메모 창 표시": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Show note prompt when recording" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "記録時にメモ画面を表示" + } + } + } + }, + "기록 시각": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Recorded at" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "記録時刻" + } + } + } + }, + "기록 직접 추가": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Add record manually" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "記録を手動で追加" + } + } + } + }, + "기록 확인": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "View history" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "記録を見る" + } + } + } + }, + "기록이 없어요": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "No records" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "記録がありません" + } + } + } + }, + "기본 정보": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Basics" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "基本情報" + } + } + } + }, + "기호": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Symbols" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "記号" + } + } + } + }, + "꼬리표": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Tags" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "タグ" + } + } + } + }, + "꼬리표 (복수 선택 가능)": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Tags (select multiple)" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "タグ(複数選択可)" + } + } + } + }, + "꼬리표 삭제": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Delete Tag" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "タグを削除" + } + } + } + }, + "꼬리표 수정": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Edit Tag" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "タグを編集" + } + } + } + }, + "꼬리표 순서": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Tag Order" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "タグの順序" + } + } + } + }, + "꼬리표 순서 변경": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Reorder Tags" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "タグの並べ替え" + } + } + } + }, + "꼬리표 없음": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "No tag" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "タグなし" + } + } + } + }, + "꼬리표 이름 (예: 공부)": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Tag name (e.g. Study)" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "タグ名(例: 勉強)" + } + } + } + }, + "꼬리표 추가": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Add Tag" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "タグを追加" + } + } + } + }, + "꼬리표가 없어요": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "No tags" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "タグがありません" + } + } + } + }, + "꼬리표를 누르면 소속 행동이 한 번에 선택·해제되고, 그 안에서 행동을 개별로 켜고 끌 수 있어요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Tap a tag to select or deselect all of its actions at once, or toggle each action individually." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "タグをタップすると所属アクションを一括で選択・解除でき、その中で個別にオン/オフもできます。" + } + } + } + }, + "끝": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "End" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "終了" + } + } + } + }, + "날짜": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Date" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "日付" + } + } + } + }, + "날짜 기준": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Date Rules" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "日付の基準" + } + } + } + }, + "날짜 선택": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Choose dates" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "日付を選択" + } + } + } + }, + "날짜 지정": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Specific dates" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "日付指定" + } + } + } + }, + "누적 기록": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Totals" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "累計記録" + } + } + } + }, + "다시 시도": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Try Again" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "再試行" + } + } + } + }, + "다이나믹 아일랜드 · 잠금화면": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Dynamic Island · Lock Screen" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "Dynamic Island・ロック画面" + } + } + } + }, + "다짐": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Quest" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "クエスト" + } + } + } + }, + "다짐 %lld개": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "%lld quests" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "クエスト%lld個" + } + } + } + }, + "다짐 1": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Quest 1" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "クエスト1" + } + } + } + }, + "다짐 2": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Quest 2" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "クエスト2" + } + } + } + }, + "다짐 3": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Quest 3" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "クエスト3" + } + } + } + }, + "다짐 4": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Quest 4" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "クエスト4" + } + } + } + }, + "다짐 수정": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Edit Quest" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "クエストを編集" + } + } + } + }, + "다짐 점 표시": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Quest dots" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "クエストをドット表示" + } + } + } + }, + "다짐 진행률": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Quest Progress" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "クエスト進捗率" + } + } + } + }, + "다짐 진행률 가져오기": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Get Quest Progress" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "クエストの進捗率を取得" + } + } + } + }, + "다짐 진행률 위젯": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Quest Progress Widget" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "クエスト進捗ウィジェット" + } + } + } + }, + "다짐 추가": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Add Quest" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "クエストを追加" + } + } + } + }, + "다짐 현황": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Quest Status" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "クエスト状況" + } + } + } + }, + "다짐 현황 위젯": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Quest Status Widget" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "クエスト状況ウィジェット" + } + } + } + }, + "다짐들의 진행률 링을 표시할 목표와 기간을 선택하세요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Choose a goal and period for the quest progress rings." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "クエストの進捗リングを表示する目標と期間を選んでください。" + } + } + } + }, + "다짐별로 각각": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Each quest separately" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "クエストごとに表示" + } + } + } + }, + "다짐을 찾을 수 없어요. 앱에서 삭제됐을 수 있어요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Quest not found. It may have been deleted in the app." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "クエストが見つかりません。アプリで削除された可能性があります。" + } + } + } + }, + "다짐의 진행률을 원형 링으로 보고, 눌러서 바로 실행해요. (프리미엄)": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "See quest progress as a ring and tap to run the action. (Premium)" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "クエストの進捗をリングで確認し、タップで即実行。(プレミアム)" + } + } + } + }, + "다짐의 하루/주간/월간 진행률(%)을 가져와요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Gets a quest's daily/weekly/monthly progress (%)." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "クエストの日/週/月の進捗率(%)を取得します。" + } + } + } + }, + "다짐이 없는 목표예요. 달성했나요?": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "This goal has no quests. Did you achieve it?" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "クエストのない目標です。達成しましたか?" + } + } + } + }, + "다짐이 없어요": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "No quests" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "クエストがありません" + } + } + } + }, + "다크": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Dark" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "ダーク" + } + } + } + }, + "다크 고정": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Always Dark" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "ダーク固定" + } + } + } + }, + "닫기": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Close" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "閉じる" + } + } + } + }, + "달성": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Achieved" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "達成" + } + } + } + }, + "달성 완료": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Achieved" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "達成済み" + } + } + } + }, + "달성률 기간": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Progress period" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "達成率の期間" + } + } + } + }, + "달성하거나 종료한 목표가 여기에 모여요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Goals you've achieved or finished appear here." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "達成または終了した目標がここに表示されます。" + } + } + } + }, + "달성하지 못했어요": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Not achieved" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "達成できませんでした" + } + } + } + }, + "달성했나요? 탭해서 선택": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Did you achieve it? Tap to choose" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "達成しましたか?タップして選択" + } + } + } + }, + "달성했어요": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Achieved" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "達成しました" + } + } + } + }, + "당신의 하루에 다녀가다": { + "comment": "스플래시 브랜드 멘트", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Stopping by your day" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "あなたの一日に、立ち寄る" + } + } + } + }, + "대상 없음": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "No target" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "対象なし" + } + } + } + }, + "대상 종류": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Target type" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "対象の種類" + } + } + } + }, + "대표 시간 기준": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Primary timer" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "代表時間の基準" + } + } + } + }, + "더보기": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "More" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "その他" + } + } + } + }, + "동기화": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Sync" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "同期" + } + } + } + }, + "등록된 꼬리표가 없어요": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "No tags yet" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "登録されたタグがありません" + } + } + } + }, + "등록된 행동이 없어요": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "No actions yet" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "登録されたアクションがありません" + } + } + } + }, + "라이트": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Light" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "ライト" + } + } + } + }, + "라이트 고정": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Always Light" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "ライト固定" + } + } + } + }, + "리퀴드 글라스": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Liquid Glass" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "リキッドグラス" + } + } + } + }, + "매달": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Every month" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "毎月" + } + } + } + }, + "매달 %@": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Every month on day %@" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "毎月%@" + } + } + } + }, + "매달 %lld째 주 %@요일": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Every month, week %lld on %@" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "毎月第%lld%@曜日" + } + }, + "ko": { + "stringUnit": { + "state": "new", + "value": "매달 %1$lld째 주 %2$@요일" + } + } + } + }, + "매일": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Every day" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "毎日" + } + } + } + }, + "매주": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Every week" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "毎週" + } + } + } + }, + "매주 %@": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Every week on %@" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "毎週%@" + } + } + } + }, + "메모": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Note" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "メモ" + } + } + } + }, + "메모 남기기": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Leave a note" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "メモを残す" + } + } + } + }, + "몇째 주": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Week of month" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "第何週" + } + } + } + }, + "몇째 주 요일": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Nth weekday" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "第何週の曜日" + } + } + } + }, + "모음": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Home" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "ホーム" + } + } + } + }, + "모음 탭 목표 진행 현황": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Goal progress on Home tab" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "ホームタブの目標進捗" + } + } + } + }, + "목": { + "comment": "요일 축약(목요일)", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Thu" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "木" + } + } + } + }, + "목록": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "List" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "リスト" + } + } + } + }, + "목표": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Goals" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "目標" + } + } + } + }, + "목표 1": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Goal 1" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "目標1" + } + } + } + }, + "목표 2": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Goal 2" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "目標2" + } + } + } + }, + "목표 2 (대형 전용)": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Goal 2 (large only)" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "目標2(大サイズ専用)" + } + } + } + }, + "목표 3": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Goal 3" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "目標3" + } + } + } + }, + "목표 4": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Goal 4" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "目標4" + } + } + } + }, + "목표 내용": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Goal description" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "目標の内容" + } + } + } + }, + "목표 달성률 (잠금화면)": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Goal Progress (Lock Screen)" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "目標達成率(ロック画面)" + } + } + } + }, + "목표 삭제": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Delete Goal" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "目標を削除" + } + } + } + }, + "목표 수동 종료": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Finish Goal Manually" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "目標を手動で終了" + } + } + } + }, + "목표 수정": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Edit Goal" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "目標を編集" + } + } + } + }, + "목표 없음": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "No goal" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "目標なし" + } + } + } + }, + "목표 진행 현황": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Goal Progress" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "目標の進捗状況" + } + } + } + }, + "목표 진행률": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Goal Progress" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "目標進捗率" + } + } + } + }, + "목표 진행률 가져오기": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Get Goal Progress" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "目標の進捗率を取得" + } + } + } + }, + "목표 진행률 위젯": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Goal Progress Widget" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "目標進捗ウィジェット" + } + } + } + }, + "목표 추가": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Add Goal" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "目標を追加" + } + } + } + }, + "목표 탭에서 목표를 만들면 여기서 선택할 수 있어요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Create goals in the Goals tab to choose them here." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "目標タブで目標を作成するとここで選べます。" + } + } + } + }, + "목표 확인": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Review Goal" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "目標を確認" + } + } + } + }, + "목표 횟수": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Target count" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "目標回数" + } + } + } + }, + "목표를 지금 종료할까요?": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Finish this goal now?" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "この目標を今終了しますか?" + } + } + } + }, + "목표를 찾을 수 없어요. 앱에서 삭제됐을 수 있어요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Goal not found. It may have been deleted in the app." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "目標が見つかりません。アプリで削除された可能性があります。" + } + } + } + }, + "목표에 속한 다짐들의 진행률을 원형 링으로 한눈에 봐요. (프리미엄)": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "See all of a goal's quest progress rings at a glance. (Premium)" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "目標のクエスト進捗をリングで一目で確認。(プレミアム)" + } + } + } + }, + "목표의 하루/주간/월간 진행률(%)을 가져와요. 소속 다짐들의 진행률 평균이에요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Gets a goal's daily/weekly/monthly progress (%), averaged across its quests." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "目標の日/週/月の進捗率(%)を取得します。所属クエストの平均です。" + } + } + } + }, + "목표의 하루·주간·월간 진행률을 진행바로 확인해요. (프리미엄)": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Track a goal's daily, weekly, and monthly progress with bars. (Premium)" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "目標の日・週・月の進捗をバーで確認。(プレミアム)" + } + } + } + }, + "무료 버전에서는 목표당 다짐을 최대 %lld개까지 만들 수 있어요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "The free version allows up to %lld quests per goal." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "無料版では目標ごとにクエストを最大%lld個まで作成できます。" + } + } + } + }, + "무료 버전에서는 목표를 최대 %lld개까지 만들 수 있어요. 프리미엄으로 업그레이드하면 무제한으로 사용할 수 있습니다.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "The free version allows up to %lld goals. Upgrade to Premium for unlimited use." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "無料版では目標を最大%lld個まで作成できます。プレミアムにアップグレードすると無制限で使えます。" + } + } + } + }, + "무료 버전에서는 행동을 최대 %lld개까지 만들 수 있어요. 프리미엄으로 업그레이드하면 무제한으로 사용할 수 있습니다.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "The free version allows up to %lld actions. Upgrade to Premium for unlimited use." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "無料版ではアクションを最大%lld個まで作成できます。プレミアムにアップグレードすると無制限で使えます。" + } + } + } + }, + "무료 사용 중": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Free plan" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "無料プラン利用中" + } + } + } + }, + "무료 사용 한도": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Free Plan Limit" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "無料プランの上限" + } + } + } + }, + "무료: 행동 %lld개 · 목표 %lld개 · 목표당 다짐 %lld개까지": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Free: up to %lld actions · %lld goals · %lld quests per goal" + } + }, + "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": "Not achieved" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "未達成" + } + } + } + }, + "미달성 종료": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Finished (not achieved)" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "未達成で終了" + } + } + } + }, + "미리 보기": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Preview" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "プレビュー" + } + } + } + }, + "반복 주기": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Repeat cycle" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "繰り返し周期" + } + } + } + }, + "방향": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Direction" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "方向" + } + } + } + }, + "배치 편집": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Edit Layout" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "配置を編集" + } + } + } + }, + "버전": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Version" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "バージョン" + } + } + } + }, + "버튼을 길게 눌러 끌면 순서를 바꿀 수 있어요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Press and hold a button, then drag to reorder." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "ボタンを長押ししてドラッグすると並べ替えできます。" + } + } + } + }, + "범위": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Range" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "範囲" + } + } + } + }, + "보기": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "View" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "表示" + } + } + } + }, + "분": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "min" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "分" + } + } + } + }, + "사용 안 함": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Off" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "使用しない" + } + } + } + }, + "사용 중": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Active" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "利用中" + } + } + } + }, + "삭제": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Delete" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "削除" + } + } + } + }, + "상품 정보를 불러오는 중...": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Loading products..." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "商品情報を読み込み中..." + } + } + } + }, + "상품 정보를 불러오지 못했어요. 네트워크를 확인해 주세요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Couldn't load products. Please check your network." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "商品情報を読み込めませんでした。ネットワークを確認してください。" + } + } + } + }, + "상품 정보를 불러올 수 없어요": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Products unavailable" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "商品情報を読み込めません" + } + } + } + }, + "새 꼬리표 만들기": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Create New Tag" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "新しいタグを作成" + } + } + } + }, + "새 목표를 세우거나, 아래에서 완료된 목표를 확인해 보세요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Set a new goal, or review finished goals below." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "新しい目標を立てるか、下で完了した目標を確認してください。" + } + } + } + }, + "색": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Color" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "色" + } + } + } + }, + "생활": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Life" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "生活" + } + } + } + }, + "선택": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Select" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "選択" + } + } + } + }, + "선택한 목표의 진행 현황이 모음 탭 상단에 표시돼요. 탭하면 목표 상세로 이동해요. 2개 이상 선택하면 카드를 옆으로 쓸어 넘겨 한 장씩 볼 수 있고, 표시 방식(다짐별로 각각 / 전체 다짐 합산)은 모든 카드에 똑같이 적용돼요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Selected goals appear at the top of the Home tab. Tap a card to open the goal. With two or more, swipe between cards; the display style (each quest / combined) applies to all cards." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "選択した目標の進捗がホームタブ上部に表示されます。タップで目標詳細へ移動します。2つ以上選ぶとカードを横にスワイプでき、表示方法(クエストごと/合算)はすべてのカードに適用されます。" + } + } + } + }, + "선택한 탭(최대 %lld개)이 하단 탭바에 바로 표시되고, 나머지 탭은 ‘더보기’에서 열 수 있어요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Selected tabs (up to %lld) appear in the tab bar; the rest are available under ‘More’." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "選択したタブ(最大%lld個)が下部タブバーに表示され、残りは「その他」から開けます。" + } + } + } + }, + "선택한 행동들의 통계 꺾은선 그래프를 확인해요. (프리미엄)": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "See line charts for your selected actions. (Premium)" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "選択したアクションの統計を折れ線グラフで確認。(プレミアム)" + } + } + } + }, + "설정": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Settings" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "設定" + } + } + } + }, + "설정한 시간보다 짧게 측정하고 종료한 기록은 저장하지 않아요. 버튼을 실수로 눌렀을 때 유용해요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Sessions shorter than this won't be saved. Useful for accidental taps." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "設定した時間より短い計測は保存されません。誤タップ対策に便利です。" + } + } + } + }, + "수": { + "comment": "요일 축약(수요일)", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Wed" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "水" + } + } + } + }, + "수량": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Amount" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "数量" + } + } + } + }, + "수정": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Edit" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "編集" + } + } + } + }, + "순서": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Reorder" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "順序" + } + } + } + }, + "숫자만": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Number only" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "数字のみ" + } + } + } + }, + "시각": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Time" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "時刻" + } + } + } + }, + "시간": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Time" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "時間" + } + } + } + }, + "시간 기록": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Time records" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "時間記録" + } + } + } + }, + "시간 기록 수정": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Edit Time Record" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "時間記録を編集" + } + } + } + }, + "시간 기록 추가": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Add Time Record" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "時間記録を追加" + } + } + } + }, + "시간 기록이 없어요": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "No time records" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "時間記録がありません" + } + } + } + }, + "시간 측정": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Time tracking" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "時間計測" + } + } + } + }, + "시간 측정 시작": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Start Timer" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "計測を開始" + } + } + } + }, + "시간 측정 종료": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Stop Timer" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "計測を終了" + } + } + } + }, + "시간 측정 행동은 시작/종료를 전환하고, 횟수 기록 행동은 횟수를 1 추가해요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Time actions toggle start/stop; count actions add 1." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "時間計測タイプは開始/終了を切り替え、回数記録タイプは1回追加します。" + } + } + } + }, + "시간 측정 행동의 측정을 시작해요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Starts tracking a time action." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "時間計測アクションの計測を開始します。" + } + } + } + }, + "시간(h)": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Time (h)" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "時間(h)" + } + } + } + }, + "시리 단축어는 프리미엄 기능이에요. 하루 다님 앱의 설정 → 프리미엄에서 잠금 해제해 주세요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Siri Shortcuts are a premium feature. Unlock them in HaruDanim: Settings → Premium." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "Siriショートカットはプレミアム機能です。アプリの設定→プレミアムでロックを解除してください。" + } + } + } + }, + "시작": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Start" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "開始" + } + } + } + }, + "시작 시각": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Start time" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "開始時刻" + } + } + } + }, + "시작·종료 시각 수동 입력": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Enter start/end times manually" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "開始・終了時刻を手動入力" + } + } + } + }, + "시작일 (과거 가능)": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Start date (past allowed)" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "開始日(過去も可)" + } + } + } + }, + "심볼 이름 검색 (영문)": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Search symbols (English)" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "シンボル名を検索(英語)" + } + } + } + }, + "아이콘": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Icon" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "アイコン" + } + } + } + }, + "아이콘 선택": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Choose Icon" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "アイコンを選択" + } + } + } + }, + "아이콘과 색": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Icon & color" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "アイコンと色" + } + } + } + }, + "아직 등록된 행동이 없어요": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "No actions yet" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "まだアクションがありません" + } + } + } + }, + "앱 테마와 일치": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Match App Theme" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "アプリのテーマに合わせる" + } + } + } + }, + "앱에서 행동을 만들고 기록하면 그래프가 표시돼요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Create and track actions in the app to see charts." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "アプリでアクションを作成・記録するとグラフが表示されます。" + } + } + } + }, + "앱에서 행동을 만들면 여기서 실행할 수 있어요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Create actions in the app to run them here." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "アプリでアクションを作成するとここで実行できます。" + } + } + } + }, + "앱의 목표 탭에서 다짐을 만들면 진행률이 표시돼요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Create quests in the Goals tab to see progress." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "アプリの目標タブでクエストを作成すると進捗が表示されます。" + } + } + } + }, + "앱의 목표 탭에서 목표를 만들면 진행률이 표시돼요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Create goals in the Goals tab to see progress." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "アプリの目標タブで目標を作成すると進捗が表示されます。" + } + } + } + }, + "앱의 목표 탭에서 목표와 다짐을 만들어 보세요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Create goals and quests in the app's Goals tab." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "アプリの目標タブで目標とクエストを作ってみてください。" + } + } + } + }, + "앱의 설정 → 프리미엄에서\n잠금 해제해 주세요": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Unlock in the app:\nSettings → Premium" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "アプリの設定→プレミアムで\nロックを解除してください" + } + } + } + }, + "언어": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Language" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "言語" + } + } + } + }, + "언어를 바꾸면 앱을 완전히 종료했다가 다시 실행했을 때 적용돼요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Language changes take effect after fully quitting and relaunching the app." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "言語の変更はアプリを完全に終了して再起動すると反映されます。" + } + } + } + }, + "여러 행동을 동시에 추적 중일 때 대표로 표시할 시간이에요. (Live Activity 지원은 추후 추가 예정)": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "The timer shown when multiple actions are tracked at once. (Live Activity support coming later)" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "複数のアクションを同時計測中に代表として表示する時間です。(Live Activity対応は今後追加予定)" + } + } + } + }, + "예: 토익 700점 이상 받기": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "e.g. Score 700+ on TOEIC" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "例: TOEICで700点以上取る" + } + } + } + }, + "오늘": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Today" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "今日" + } + } + } + }, + "오늘 %@": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Today %@" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "今日 %@" + } + } + } + }, + "오늘 0분": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Today 0m" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "今日0分" + } + } + } + }, + "오른쪽 위 + 버튼으로 꼬리표를 추가하세요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Tap the + button in the top right to add a tag." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "右上の+ボタンでタグを追加してください。" + } + } + } + }, + "오른쪽 위 + 버튼으로 행동을 추가하세요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Tap the + button in the top right to add an action." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "右上の+ボタンでアクションを追加してください。" + } + } + } + }, + "오른쪽 위 ‘순서’를 누르면 다짐 순서를 바꿀 수 있어요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Tap ‘Reorder’ in the top right to reorder quests." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "右上の「順序」からクエストを並べ替えられます。" + } + } + } + }, + "오른쪽 핸들을 끌어서 순서를 바꾼 뒤 ‘완료’를 누르세요. 순서는 저장되어 유지돼요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Drag the handles to reorder, then tap ‘Done’. The order is saved." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "右のハンドルをドラッグして並べ替え、「完了」を押してください。順序は保存されます。" + } + } + } + }, + "완료": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Done" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "完了" + } + } + } + }, + "완료된 목표": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Finished Goals" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "完了した目標" + } + } + } + }, + "완료된 목표 보기": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "View Finished Goals" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "完了した目標を見る" + } + } + } + }, + "완료된 목표가 없어요": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "No finished goals" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "完了した目標がありません" + } + } + } + }, + "요일": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Weekday" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "曜日" + } + } + } + }, + "요일 지정": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Specific weekdays" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "曜日指定" + } + } + } + }, + "운동": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Fitness" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "運動" + } + } + } + }, + "원형 게이지": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Circular gauge" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "円形ゲージ" + } + } + } + }, + "원형 진행률로 표시할 다짐과 기간을 선택하세요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Choose a quest and period for the progress ring." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "リングで表示するクエストと期間を選んでください。" + } + } + } + }, + "월": { + "comment": "요일 축약(월요일)", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Mon" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "月" + } + } + } + }, + "월간": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Monthly" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "月間" + } + } + } + }, + "위젯 테마": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Widget Theme" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "ウィジェットテーマ" + } + } + } + }, + "음식": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Food" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "食べ物" + } + } + } + }, + "이 기록에 대한 메모 (선택)": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Note for this record (optional)" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "この記録のメモ(任意)" + } + } + } + }, + "이 목표를 이루기 위한 다짐(행동/꼬리표 + 주기 + 목표량)을 추가하세요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Add quests (action/tag + cycle + amount) to achieve this goal." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "この目標を達成するためのクエスト(アクション/タグ+周期+目標量)を追加してください。" + } + } + } + }, + "이동": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Transport" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "移動" + } + } + } + }, + "이름": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Name" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "名前" + } + } + } + }, + "이번 기록에 대한 메모 (선택)": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Note for this record (optional)" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "今回の記録のメモ(任意)" + } + } + } + }, + "이번 달": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "This month" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "今月" + } + } + } + }, + "이번 주": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "This week" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "今週" + } + } + } + }, + "이번 측정에 대한 메모 (선택)": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Note for this session (optional)" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "今回の計測のメモ(任意)" + } + } + } + }, + "이상 달성": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Reach at least" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "以上を達成" + } + } + } + }, + "이하 유지": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Stay under" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "以下を維持" + } + } + } + }, + "인기": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Popular" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "人気" + } + } + } + }, + "일": { + "comment": "요일 축약(일요일)", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Sun" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "日" + } + } + } + }, + "일·업무": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Work" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "仕事" + } + } + } + }, + "일주일": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Week" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "1週間" + } + } + } + }, + "일주일 (하루 단위)": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Week (by day)" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "1週間(日別)" + } + } + } + }, + "일주일 단위": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Weekly" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "週単位" + } + } + } + }, + "일주일 통계": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Weekly stats" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "週間統計" + } + } + } + }, + "자연": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Nature" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "自然" + } + } + } + }, + "잠금화면 목표 위젯": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Lock Screen Goal Widget" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "ロック画面の目標ウィジェット" + } + } + } + }, + "잠금화면에 표시할 목표와 기간, 표시 방식을 선택하세요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Choose a goal, period, and style for the Lock Screen." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "ロック画面に表示する目標・期間・スタイルを選んでください。" + } + } + } + }, + "잠금화면에서 목표 달성률과 다짐 현황을 확인해요. (프리미엄)": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Check goal progress and quest status on the Lock Screen. (Premium)" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "ロック画面で目標達成率とクエスト状況を確認。(プレミアム)" + } + } + } + }, + "저장": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Save" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "保存" + } + } + } + }, + "적용일": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Applies on" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "適用日" + } + } + } + }, + "전체 다짐 합산": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "All quests combined" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "全クエスト合算" + } + } + } + }, + "전체 선택": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Select All" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "すべて選択" + } + } + } + }, + "종료": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Stop" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "終了" + } + } + } + }, + "종료 시 하위 다짐들의 달성 여부에 따라 달성/미달성이 결정돼요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "When finished, achievement is decided by whether its quests were met." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "終了時に、クエストの達成状況によって達成/未達成が決まります。" + } + } + } + }, + "종료 시각": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "End time" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "終了時刻" + } + } + } + }, + "종료 시각을 끄면 진행 중 상태가 돼요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Turn off the end time to keep it in progress." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "終了時刻をオフにすると進行中の状態になります。" + } + } + } + }, + "종료됨": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Finished" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "終了済み" + } + } + } + }, + "종료일": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "End date" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "終了日" + } + } + } + }, + "종료일 지정": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Set end date" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "終了日を設定" + } + } + } + }, + "주 시작 요일": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "First day of week" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "週の開始曜日" + } + } + } + }, + "주 평균": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Weekly average" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "週平均" + } + } + } + }, + "주간": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Weekly" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "週間" + } + } + } + }, + "주기마다 목표량 이상을 달성하는 것이 목표예요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "The goal is to reach at least the target amount each cycle." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "周期ごとに目標量以上を達成することが目標です。" + } + } + } + }, + "주기마다 목표량을 넘지 않는 것이 목표예요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "The goal is to stay under the target amount each cycle." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "周期ごとに目標量を超えないことが目標です。" + } + } + } + }, + "주차": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Week" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "週" + } + } + } + }, + "즐겨찾기": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Favorite" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "お気に入り" + } + } + } + }, + "즐겨찾기 해제": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Unfavorite" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "お気に入り解除" + } + } + } + }, + "지금 시각": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Now" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "現在時刻" + } + } + } + }, + "지정된 꼬리표 없음": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "No tags assigned" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "タグ未設定" + } + } + } + }, + "직접 선택": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Choose manually" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "手動で選択" + } + } + } + }, + "진행 중": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "In progress" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "進行中" + } + } + } + }, + "진행 중인 목표가 없어요": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "No goals in progress" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "進行中の目標がありません" + } + } + } + }, + "진행률 기간": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Progress period" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "進捗の期間" + } + } + } + }, + "짧은 기록 무시": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Ignore short sessions" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "短い記録を無視" + } + } + } + }, + "추가": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Add" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "追加" + } + } + } + }, + "추가할 횟수": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Count to add" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "追加する回数" + } + } + } + }, + "추적 방식": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Tracking type" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "計測方式" + } + } + } + }, + "취미": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Hobbies" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "趣味" + } + } + } + }, + "취소": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Cancel" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "キャンセル" + } + } + } + }, + "측정": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Tracking" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "計測" + } + } + } + }, + "측정 기준": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Measure" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "計測基準" + } + } + } + }, + "측정 시작": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Start" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "計測開始" + } + } + } + }, + "측정 종료": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Stop" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "計測終了" + } + } + } + }, + "측정 중인 행동의 시간 측정을 종료해요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Stops tracking a running time action." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "計測中のアクションの計測を終了します。" + } + } + } + }, + "켜면 시간 측정을 종료할 때 메모 창이 떠요. 건너뛸 수 있어요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "When on, a note prompt appears when you stop tracking. You can skip it." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "オンにすると計測終了時にメモ画面が表示されます。スキップもできます。" + } + } + } + }, + "켜면 횟수를 추가할 때마다 메모 창이 떠요. 건너뛸 수 있어요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "When on, a note prompt appears each time you add a count. You can skip it." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "オンにすると回数を追加するたびにメモ画面が表示されます。スキップもできます。" + } + } + } + }, + "큰 목표를 세우고, 그 안에 다짐을 추가해 보세요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Set a big goal, then add quests to it." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "大きな目標を立てて、その中にクエストを追加しましょう。" + } + } + } + }, + "타임테이블": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Timetable" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "タイムテーブル" + } + } + } + }, + "탭바 구성": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Tab Bar" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "タブバー構成" + } + } + } + }, + "테마": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Theme" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "テーマ" + } + } + } + }, + "토": { + "comment": "요일 축약(토요일)", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Sat" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "土" + } + } + } + }, + "통계": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Stats" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "統計" + } + } + } + }, + "통계 기간": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Stats period" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "統計期間" + } + } + } + }, + "통계 보기": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "View stats" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "統計を見る" + } + } + } + }, + "통계 위젯": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Stats Widget" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "統計ウィジェット" + } + } + } + }, + "특정 기간": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Custom period" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "特定期間" + } + } + } + }, + "특정 시각 지정": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Set specific time" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "特定の時刻を指定" + } + } + } + }, + "표시 기간": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Display period" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "表示期間" + } + } + } + }, + "표시 방식": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Display style" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "表示方法" + } + } + } + }, + "표시 방식 (원형 크기)": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Display style (ring size)" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "表示方法(リングサイズ)" + } + } + } + }, + "표시할 기록이 없어요": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "No records to show" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "表示する記録がありません" + } + } + } + }, + "표시할 행동 없음": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "No actions to show" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "表示するアクションなし" + } + } + } + }, + "표시할 행동과 누적 기간을 선택하세요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Choose an action and period to display." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "表示するアクションと累計期間を選んでください。" + } + } + } + }, + "프리미엄": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Premium" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "プレミアム" + } + } + } + }, + "프리미엄 구매": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Buy Premium" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "プレミアムを購入" + } + } + } + }, + "프리미엄 기능": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Premium Features" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "プレミアム機能" + } + } + } + }, + "프리미엄 상태 (테스트)": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Premium status (test)" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "プレミアム状態(テスト)" + } + } + } + }, + "프리미엄으로 할 수 있는 것": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "What Premium unlocks" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "プレミアムでできること" + } + } + } + }, + "하루": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Daily" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "1日" + } + } + } + }, + "하루 다님 · 목표 없음": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "HaruDanim · No goal" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "ハルダニム・目標なし" + } + } + } + }, + "하루 다님 · 프리미엄 기능": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "HaruDanim · Premium feature" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "ハルダニム・プレミアム機能" + } + } + } + }, + "하루 단위": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Daily" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "日単位" + } + } + } + }, + "하루 시작 시간": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Day start time" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "1日の開始時刻" + } + } + } + }, + "하루 시작 시간을 걸치는 기록은 통계에서 자동으로 날짜별로 나누어 계산돼요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Sessions crossing the day start time are split by date in statistics automatically." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "1日の開始時刻をまたぐ記録は、統計で自動的に日付ごとに分割されます。" + } + } + } + }, + "하루 평균": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Daily average" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "1日平均" + } + } + } + }, + "하루·주간·월간 진행률을 표시할 목표를 선택하세요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Choose a goal to show daily, weekly, and monthly progress." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "日・週・月の進捗を表示する目標を選んでください。" + } + } + } + }, + "하루다님": { + "comment": "앱 이름", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Haru Danim" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "Haru Danim" + } + } + } + }, + "학습": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Study" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "学習" + } + } + } + }, + "한 달 (주 단위)": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Month (by week)" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "1か月(週別)" + } + } + } + }, + "한 달 (하루 단위, 중형 이상)": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Month (by day, medium+)" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "1か月(日別、中サイズ以上)" + } + } + } + }, + "한 달 단위": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Monthly" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "月単位" + } + } + } + }, + "한 달 통계 (일별)": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Monthly stats (by day)" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "月間統計(日別)" + } + } + } + }, + "한 달 통계 (주별)": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Monthly stats (by week)" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "月間統計(週別)" + } + } + } + }, + "한 줄에 표시할 개수": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Buttons per row" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "1行に表示する数" + } + } + } + }, + "한도 안에서 잘 지키고 있어요": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "You're staying within the limit" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "上限内でよく守れています" + } + } + } + }, + "한도를 넘었어요": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "You went over the limit" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "上限を超えました" + } + } + } + }, + "합계": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Total" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "合計" + } + } + } + }, + "행동": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Actions" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "アクション" + } + } + } + }, + "행동 %lld/%lld개 표시 중": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Showing %lld of %lld actions" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "アクション%lld/%lld件を表示中" + } + }, + "ko": { + "stringUnit": { + "state": "new", + "value": "행동 %1$lld/%2$lld개 표시 중" + } + } + } + }, + "행동 %lld개": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "%lld actions" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "アクション%lld個" + } + } + } + }, + "행동 1": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Action 1" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "アクション1" + } + } + } + }, + "행동 2": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Action 2" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "アクション2" + } + } + } + }, + "행동 3": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Action 3" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "アクション3" + } + } + } + }, + "행동 4": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Action 4" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "アクション4" + } + } + } + }, + "행동 누적값 가져오기": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Get Action Total" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "アクションの累計値を取得" + } + } + } + }, + "행동 버튼의 색은 지정한 꼬리표의 색을 따라요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Action buttons use the color of their assigned tag." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "アクションボタンの色は指定したタグの色に従います。" + } + } + } + }, + "행동 삭제": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Delete Action" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "アクションを削除" + } + } + } + }, + "행동 설정 수정": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Edit action settings" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "アクション設定を編集" + } + } + } + }, + "행동 수정": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Edit Action" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "アクションを編集" + } + } + } + }, + "행동 실행": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Run Action" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "アクション実行" + } + } + } + }, + "행동 실행 위젯": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Action Run Widget" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "アクション実行ウィジェット" + } + } + } + }, + "행동 이름 (예: 독서)": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Action name (e.g. Reading)" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "アクション名(例: 読書)" + } + } + } + }, + "행동 추가": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Add Action" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "アクションを追加" + } + } + } + }, + "행동 탭에서 추적할 행동을 추가해 보세요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Add actions to track in the Actions tab." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "アクションタブで計測するアクションを追加してください。" + } + } + } + }, + "행동 통계": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Action Stats" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "アクション統計" + } + } + } + }, + "행동을 위젯에서 바로 실행하고 누적값을 확인해요. (프리미엄)": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Run actions right from the widget and see totals. (Premium)" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "ウィジェットからアクションを即実行し、累計を確認。(プレミアム)" + } + } + } + }, + "행동을 찾을 수 없어요. 앱에서 삭제됐을 수 있어요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Action not found. It may have been deleted in the app." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "アクションが見つかりません。アプリで削除された可能性があります。" + } + } + } + }, + "행동의 하루/주간/월간 누적 시간(초) 또는 횟수를 가져와요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Gets an action's daily/weekly/monthly total time (seconds) or count." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "アクションの日/週/月の累計時間(秒)または回数を取得します。" + } + } + } + }, + "현재 진행 중": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Now Tracking" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "現在計測中" + } + } + } + }, + "화": { + "comment": "요일 축약(화요일)", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Tue" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "火" + } + } + } + }, + "화면": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Display" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "画面" + } + } + } + }, + "확인": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "OK" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "OK" + } + } + } + }, + "확인 필요": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Needs review" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "確認が必要" + } + } + } + }, + "회": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "times" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "回" + } + } + } + }, + "횟수": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Count" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "回数" + } + } + } + }, + "횟수 기록": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Count tracking" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "回数記録" + } + } + } + }, + "횟수 기록 수정": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Edit Count Record" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "回数記録を編集" + } + } + } + }, + "횟수 기록 행동의 횟수를 바로 추가해요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Adds a count to a count action right away." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "回数記録アクションの回数をすぐに追加します。" + } + } + } + }, + "횟수 기록이 없어요": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "No count records" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "回数記録がありません" + } + } + } + }, + "횟수 직접 입력·수정": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Enter/edit count manually" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "回数を手動で入力・編集" + } + } + } + }, + "횟수 직접 추가": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Add count manually" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "回数を手動で追加" + } + } + } + }, + "횟수 추가": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Add Count" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "回数を追加" + } + } + } } }, - "version" : "1.0" -} \ No newline at end of file + "version": "1.0" +} diff --git a/myApp/HaruDanim/IOS/Views/ActionViews.swift b/myApp/HaruDanim/IOS/Views/ActionViews.swift index c6c20a3..3319bd1 100644 --- a/myApp/HaruDanim/IOS/Views/ActionViews.swift +++ b/myApp/HaruDanim/IOS/Views/ActionViews.swift @@ -121,7 +121,7 @@ struct ActionListView: View { action.isFavorite.toggle() } label: { Label( - action.isFavorite ? "즐겨찾기 해제" : "즐겨찾기", + action.isFavorite ? String(localized: "즐겨찾기 해제") : String(localized: "즐겨찾기"), systemImage: action.isFavorite ? "star.slash" : "star.fill" ) } @@ -295,13 +295,13 @@ struct ActionDetailView: View { let now = Date.now switch action.trackingType { case .time: - statRow("오늘", Format.durationShort(agg.seconds(for: action, in: math.dayRange(containing: now)))) - statRow("이번 주", Format.durationShort(agg.seconds(for: action, in: math.weekRange(containing: now)))) - statRow("이번 달", Format.durationShort(agg.seconds(for: action, in: math.monthRange(containing: now)))) + statRow(String(localized: "오늘"), Format.durationShort(agg.seconds(for: action, in: math.dayRange(containing: now)))) + statRow(String(localized: "이번 주"), Format.durationShort(agg.seconds(for: action, in: math.weekRange(containing: now)))) + statRow(String(localized: "이번 달"), Format.durationShort(agg.seconds(for: action, in: math.monthRange(containing: now)))) case .count: - statRow("오늘", "\(agg.count(for: action, in: math.dayRange(containing: now)))회") - statRow("이번 주", "\(agg.count(for: action, in: math.weekRange(containing: now)))회") - statRow("이번 달", "\(agg.count(for: action, in: math.monthRange(containing: now)))회") + statRow(String(localized: "오늘"), String(localized: "\(agg.count(for: action, in: math.dayRange(containing: now)))회")) + statRow(String(localized: "이번 주"), String(localized: "\(agg.count(for: action, in: math.weekRange(containing: now)))회")) + statRow(String(localized: "이번 달"), String(localized: "\(agg.count(for: action, in: math.monthRange(containing: now)))회")) } } @@ -408,11 +408,11 @@ struct ActionEditorView: View { } } footer: { Text(trackingType == .time - ? "켜면 시간 측정을 종료할 때 메모 창이 떠요. 건너뛸 수 있어요." - : "켜면 횟수를 추가할 때마다 메모 창이 떠요. 건너뛸 수 있어요.") + ? String(localized: "켜면 시간 측정을 종료할 때 메모 창이 떠요. 건너뛸 수 있어요.") + : String(localized: "켜면 횟수를 추가할 때마다 메모 창이 떠요. 건너뛸 수 있어요.")) } } - .navigationTitle(action == nil ? "행동 추가" : "행동 수정") + .navigationTitle(action == nil ? String(localized: "행동 추가") : String(localized: "행동 수정")) .navigationBarTitleDisplayMode(.inline) .toolbar { ToolbarItem(placement: .cancellationAction) { diff --git a/myApp/HaruDanim/IOS/Views/GoalViews.swift b/myApp/HaruDanim/IOS/Views/GoalViews.swift index 4e09324..4485470 100644 --- a/myApp/HaruDanim/IOS/Views/GoalViews.swift +++ b/myApp/HaruDanim/IOS/Views/GoalViews.swift @@ -108,7 +108,7 @@ struct GoalListView: View { .toolbar { ToolbarItem(placement: .topBarTrailing) { if activeGoals.count > 1 { - Button(isReordering ? "완료" : "순서") { + Button(isReordering ? String(localized: "완료") : String(localized: "순서")) { withAnimation { isReordering.toggle() editMode = isReordering ? .active : .inactive @@ -260,17 +260,17 @@ struct GoalRow: View { if let end = goal.endDate { return "\(Format.shortDate(goal.startDate)) ~ \(Format.shortDate(end))" } - return "\(Format.shortDate(goal.startDate)) 시작 · 종료일 없음" + return String(localized: "\(Format.shortDate(goal.startDate)) 시작 · 종료일 없음") } @ViewBuilder private var statusBadge: some View { let (text, color): (String, Color) = { - if goal.needsConfirmation() { return ("확인 필요", AppTheme.yellow) } + if goal.needsConfirmation() { return (String(localized: "확인 필요"), AppTheme.yellow) } switch goal.status { - case .inProgress: return ("진행 중", AppTheme.green) - case .achieved: return ("달성", AppTheme.green) - case .notAchieved: return ("미달성", Color.secondary) + case .inProgress: return (String(localized: "진행 중"), AppTheme.green) + case .achieved: return (String(localized: "달성"), AppTheme.green) + case .notAchieved: return (String(localized: "미달성"), Color.secondary) } }() Text(text) @@ -453,7 +453,7 @@ struct GoalDetailView: View { .toolbar { ToolbarItem(placement: .topBarTrailing) { if !goal.quests.isEmpty { - Button(editMode == .active ? "완료" : "순서") { + Button(editMode == .active ? String(localized: "완료") : String(localized: "순서")) { withAnimation { editMode = editMode == .active ? .inactive : .active } @@ -566,7 +566,7 @@ struct GoalEditorView: View { } } } - .navigationTitle(goal == nil ? "목표 추가" : "목표 수정") + .navigationTitle(goal == nil ? String(localized: "목표 추가") : String(localized: "목표 수정")) .navigationBarTitleDisplayMode(.inline) .toolbar { ToolbarItem(placement: .cancellationAction) { diff --git a/myApp/HaruDanim/IOS/Views/HistoryView.swift b/myApp/HaruDanim/IOS/Views/HistoryView.swift index 87a6a84..26348a3 100644 --- a/myApp/HaruDanim/IOS/Views/HistoryView.swift +++ b/myApp/HaruDanim/IOS/Views/HistoryView.swift @@ -15,8 +15,8 @@ enum HistoryMode: String, CaseIterable, Identifiable { var label: String { switch self { - case .list: return "목록" - case .timetable: return "타임테이블" + case .list: return String(localized: "목록") + case .timetable: return String(localized: "타임테이블") } } } @@ -174,7 +174,7 @@ struct HistoryView: View { private var filterLabel: String { let names = allActions.filter(passesFilter).map(\.name) - if names.isEmpty { return "표시할 행동 없음" } + if names.isEmpty { return String(localized: "표시할 행동 없음") } return names.count <= 2 ? names.joined(separator: ", ") : "행동 \(names.count)/\(allActions.count)개 표시 중" diff --git a/myApp/HaruDanim/IOS/Views/MainView.swift b/myApp/HaruDanim/IOS/Views/MainView.swift index 7321255..abecaa9 100644 --- a/myApp/HaruDanim/IOS/Views/MainView.swift +++ b/myApp/HaruDanim/IOS/Views/MainView.swift @@ -67,7 +67,7 @@ struct MainView: View { .navigationTitle("모음") .toolbar { ToolbarItem(placement: .topBarTrailing) { - Button(isEditing ? "완료" : "배치 편집") { + Button(isEditing ? String(localized: "완료") : String(localized: "배치 편집")) { withAnimation { isEditing.toggle() } @@ -283,7 +283,7 @@ struct MainView: View { recordsAction = action } label: { Label( - action.trackingType == .time ? "시작·종료 시각 수동 입력" : "횟수 직접 입력·수정", + action.trackingType == .time ? String(localized: "시작·종료 시각 수동 입력") : String(localized: "횟수 직접 입력·수정"), systemImage: "square.and.pencil" ) } @@ -801,6 +801,8 @@ struct ActionButtonCell: View { .foregroundStyle(.white.opacity(0.85)) } .lineLimit(1) + // 영어 등 긴 단위 문구("times")도 셀 안에 들어가도록 축소 허용 + .minimumScaleFactor(0.6) .animation(.snappy(duration: 0.3), value: todayCount) } } @@ -808,7 +810,9 @@ struct ActionButtonCell: View { private var todayLabel: String { let agg = Aggregator() let seconds = agg.seconds(for: action, in: agg.math.dayRange(containing: .now)) - return seconds > 0 ? "오늘 \(Format.durationShort(seconds))" : "오늘 0분" + return seconds > 0 + ? String(localized: "오늘 \(Format.durationShort(seconds))") + : String(localized: "오늘 0분") } private var todayCount: Int { diff --git a/myApp/HaruDanim/IOS/Views/QuestEditorView.swift b/myApp/HaruDanim/IOS/Views/QuestEditorView.swift index d270864..084c4ed 100644 --- a/myApp/HaruDanim/IOS/Views/QuestEditorView.swift +++ b/myApp/HaruDanim/IOS/Views/QuestEditorView.swift @@ -21,7 +21,7 @@ struct QuestEditorView: View { enum TargetKind: String, CaseIterable, Identifiable { case action, tag var id: String { rawValue } - var label: String { self == .action ? "행동" : "꼬리표" } + var label: String { self == .action ? String(localized: "행동") : String(localized: "꼬리표") } } // ① 대상 @@ -53,7 +53,7 @@ struct QuestEditorView: View { periodSection amountSection } - .navigationTitle(quest == nil ? "다짐 추가" : "다짐 수정") + .navigationTitle(quest == nil ? String(localized: "다짐 추가") : String(localized: "다짐 수정")) .navigationBarTitleDisplayMode(.inline) .toolbar { ToolbarItem(placement: .cancellationAction) { diff --git a/myApp/HaruDanim/IOS/Views/RecordEditors.swift b/myApp/HaruDanim/IOS/Views/RecordEditors.swift index cded609..4b80c7f 100644 --- a/myApp/HaruDanim/IOS/Views/RecordEditors.swift +++ b/myApp/HaruDanim/IOS/Views/RecordEditors.swift @@ -37,7 +37,7 @@ struct ActionRecordsSheet: View { showingAdd = true } label: { Label( - action.trackingType == .time ? "기록 직접 추가" : "횟수 직접 추가", + action.trackingType == .time ? String(localized: "기록 직접 추가") : String(localized: "횟수 직접 추가"), systemImage: "plus.circle" ) .foregroundStyle(AppTheme.green) diff --git a/myApp/HaruDanim/IOS/Views/SettingsView.swift b/myApp/HaruDanim/IOS/Views/SettingsView.swift index 53315a5..0789e5a 100644 --- a/myApp/HaruDanim/IOS/Views/SettingsView.swift +++ b/myApp/HaruDanim/IOS/Views/SettingsView.swift @@ -43,7 +43,7 @@ struct SettingsView: View { var body: some View { ScrollViewReader { proxy in Form { - Section("화면") { + Section { Picker("테마", selection: $theme) { Text("라이트").tag("light") Text("다크").tag("dark") @@ -53,6 +53,10 @@ struct SettingsView: View { Text(lang.label).tag(lang.rawValue) } } + } header: { + Text("화면") + } footer: { + Text("언어를 바꾸면 앱을 완전히 종료했다가 다시 실행했을 때 적용돼요.") } Section { ForEach(AppTab.allCases) { tab in @@ -126,7 +130,7 @@ struct SettingsView: View { Label("프리미엄 기능", systemImage: "crown.fill") .foregroundStyle(AppTheme.yellow) Spacer() - Text(premium.isPremium ? "사용 중" : "무료 사용 중") + Text(premium.isPremium ? String(localized: "사용 중") : String(localized: "무료 사용 중")) .font(.caption) .foregroundStyle(.secondary) } @@ -148,6 +152,10 @@ struct SettingsView: View { // '앱 테마와 일치' 옵션의 위젯이 바뀐 테마를 바로 반영하도록 갱신 WidgetCenter.shared.reloadAllTimelines() } + .onChange(of: language) { + // 시스템의 앱별 언어 오버라이드 방식: 다음 실행부터 적용된다 + UserDefaults.standard.set([language], forKey: "AppleLanguages") + } #if DEBUG // 검증용: -settingsScrollGoal YES → 모음 탭 목표 섹션, -settingsScrollPremium YES → 프리미엄 섹션까지 자동 스크롤 .onAppear { diff --git a/myApp/HaruDanim/IOS/Views/StatsTabView.swift b/myApp/HaruDanim/IOS/Views/StatsTabView.swift index 1082fb4..d70d868 100644 --- a/myApp/HaruDanim/IOS/Views/StatsTabView.swift +++ b/myApp/HaruDanim/IOS/Views/StatsTabView.swift @@ -184,9 +184,9 @@ struct StatsTabView: View { private var currentPeriodLabel: String { switch span { - case .day: return "오늘" - case .week: return "이번 주" - case .month: return "이번 달" + case .day: return String(localized: "오늘") + case .week: return String(localized: "이번 주") + case .month: return String(localized: "이번 달") } } @@ -310,7 +310,7 @@ struct StatsTabView: View { var colors: [String: Color] = [:] func tagNames(for action: Action) -> [(String, Color)] { - if action.tags.isEmpty { return [("꼬리표 없음", Color.gray)] } + if action.tags.isEmpty { return [(String(localized: "꼬리표 없음"), Color.gray)] } return action.sortedTags.map { ($0.name, $0.color) } } @@ -533,7 +533,7 @@ struct StatsTabView: View { private func valueLabel(_ value: Double, type: TrackingType) -> String { switch type { case .time: return Format.durationShort(value) - case .count: return "\(Int(value.rounded()))회" + case .count: return String(localized: "\(Int(value.rounded()))회") } } @@ -551,7 +551,7 @@ struct StatsTabView: View { Chart(dailyPoints(for: actions, type: type)) { point in LineMark( x: .value("날짜", point.dayKey, unit: .day), - y: .value(type == .time ? "시간" : "횟수", point.value) + y: .value(type == .time ? String(localized: "시간") : String(localized: "횟수"), point.value) ) .foregroundStyle(by: .value("행동", point.actionName)) .symbol(by: .value("행동", point.actionName)) @@ -575,7 +575,7 @@ struct StatsTabView: View { } } } - .chartYAxisLabel(type == .time ? "시간(h)" : "횟수") + .chartYAxisLabel(type == .time ? String(localized: "시간(h)") : String(localized: "횟수")) .frame(height: 200) } } @@ -593,14 +593,14 @@ struct StatsTabView: View { Chart(weeklyPoints(for: actions, type: type)) { point in LineMark( x: .value("주차", point.weekLabel), - y: .value(type == .time ? "시간" : "횟수", point.value) + y: .value(type == .time ? String(localized: "시간") : String(localized: "횟수"), point.value) ) .foregroundStyle(by: .value("행동", point.actionName)) .symbol(by: .value("행동", point.actionName)) .interpolationMethod(.monotone) } .chartForegroundStyleScale(domain: names, range: colors) - .chartYAxisLabel(type == .time ? "시간(h)" : "횟수") + .chartYAxisLabel(type == .time ? String(localized: "시간(h)") : String(localized: "횟수")) .frame(height: 200) } } @@ -617,7 +617,7 @@ struct StatsTabView: View { } else { Chart(items) { item in BarMark( - x: .value(type == .time ? "시간" : "횟수", type == .time ? item.value / 3600 : item.value), + x: .value(type == .time ? String(localized: "시간") : String(localized: "횟수"), type == .time ? item.value / 3600 : item.value), y: .value("행동", item.name) ) .foregroundStyle(item.color) @@ -628,7 +628,7 @@ struct StatsTabView: View { .foregroundStyle(.secondary) } } - .chartXAxisLabel(type == .time ? "시간(h)" : "횟수") + .chartXAxisLabel(type == .time ? String(localized: "시간(h)") : String(localized: "횟수")) .frame(height: CGFloat(items.count) * 40 + 30) } } diff --git a/myApp/HaruDanim/IOS/Views/TagViews.swift b/myApp/HaruDanim/IOS/Views/TagViews.swift index fc9098c..8cd6773 100644 --- a/myApp/HaruDanim/IOS/Views/TagViews.swift +++ b/myApp/HaruDanim/IOS/Views/TagViews.swift @@ -152,7 +152,7 @@ struct TagEditorView: View { Text("미리 보기") } } - .navigationTitle(tag == nil ? "꼬리표 추가" : "꼬리표 수정") + .navigationTitle(tag == nil ? String(localized: "꼬리표 추가") : String(localized: "꼬리표 수정")) .navigationBarTitleDisplayMode(.inline) .toolbar { ToolbarItem(placement: .cancellationAction) { diff --git a/myApp/HaruDanim/Shared/Formatters.swift b/myApp/HaruDanim/Shared/Formatters.swift index 08afb46..cf55799 100644 --- a/myApp/HaruDanim/Shared/Formatters.swift +++ b/myApp/HaruDanim/Shared/Formatters.swift @@ -22,14 +22,24 @@ enum Format { let h = total / 3600 let m = (total % 3600) / 60 if h > 0 { - return m > 0 ? "\(h)시간 \(m)분" : "\(h)시간" + return m > 0 + ? String(localized: "\(h)시간 \(m)분") + : String(localized: "\(h)시간") } - if m > 0 { return "\(m)분" } - return "\(total)초" + if m > 0 { return String(localized: "\(m)분") } + return String(localized: "\(total)초") } static func weekdayShort(_ weekday: Int) -> String { - let names = ["일", "월", "화", "수", "목", "금", "토"] + let names = [ + String(localized: "일", comment: "요일 축약(일요일)"), + String(localized: "월", comment: "요일 축약(월요일)"), + String(localized: "화", comment: "요일 축약(화요일)"), + String(localized: "수", comment: "요일 축약(수요일)"), + String(localized: "목", comment: "요일 축약(목요일)"), + String(localized: "금", comment: "요일 축약(금요일)"), + String(localized: "토", comment: "요일 축약(토요일)"), + ] let index = (weekday - 1) % 7 return names[max(0, index)] } diff --git a/myApp/HaruDanim/Shared/HaruDanimIntents.swift b/myApp/HaruDanim/Shared/HaruDanimIntents.swift index a459fef..438b6ec 100644 --- a/myApp/HaruDanim/Shared/HaruDanimIntents.swift +++ b/myApp/HaruDanim/Shared/HaruDanimIntents.swift @@ -106,9 +106,9 @@ enum SpanOption: String, AppEnum { var label: String { switch self { - case .day: return "오늘" - case .week: return "이번 주" - case .month: return "이번 달" + case .day: return String(localized: "오늘") + case .week: return String(localized: "이번 주") + case .month: return String(localized: "이번 달") } } } @@ -127,7 +127,9 @@ struct ActionEntity: AppEntity { var displayRepresentation: DisplayRepresentation { DisplayRepresentation( title: "\(name)", - subtitle: trackingTypeRaw == TrackingType.count.rawValue ? "횟수 기록" : "시간 측정" + subtitle: trackingTypeRaw == TrackingType.count.rawValue + ? LocalizedStringResource("횟수 기록") + : LocalizedStringResource("시간 측정") ) } @@ -477,7 +479,7 @@ struct QuestProgressIntent: AppIntent { case .atLeast: detail = "\(Int(percent))%" case .atMost: - detail = result.isAchieved ? "한도 안에서 잘 지키고 있어요" : "한도를 넘었어요" + detail = result.isAchieved ? String(localized: "한도 안에서 잘 지키고 있어요") : String(localized: "한도를 넘었어요") } return .result( value: percent, diff --git a/myApp/HaruDanim/Shared/Models.swift b/myApp/HaruDanim/Shared/Models.swift index b5e28ed..a3bb4aa 100644 --- a/myApp/HaruDanim/Shared/Models.swift +++ b/myApp/HaruDanim/Shared/Models.swift @@ -19,8 +19,8 @@ enum TrackingType: String, CaseIterable, Identifiable { var label: String { switch self { - case .time: return "시간 측정" - case .count: return "횟수 기록" + case .time: return String(localized: "시간 측정") + case .count: return String(localized: "횟수 기록") } } @@ -209,9 +209,9 @@ enum GoalStatus: String, CaseIterable { var label: String { switch self { - case .inProgress: return "진행 중" - case .achieved: return "달성 완료" - case .notAchieved: return "미달성 종료" + case .inProgress: return String(localized: "진행 중") + case .achieved: return String(localized: "달성 완료") + case .notAchieved: return String(localized: "미달성 종료") } } } @@ -302,10 +302,10 @@ enum QuestPeriod: String, CaseIterable, Identifiable { var label: String { switch self { - case .daily: return "하루 단위" - case .weekly: return "일주일 단위" - case .monthly: return "한 달 단위" - case .custom: return "특정 기간" + case .daily: return String(localized: "하루 단위") + case .weekly: return String(localized: "일주일 단위") + case .monthly: return String(localized: "한 달 단위") + case .custom: return String(localized: "특정 기간") } } } @@ -321,10 +321,10 @@ enum QuestScheduleMode: String, CaseIterable, Identifiable { var label: String { switch self { - case .everyDay: return "매일" - case .weekdays: return "요일 지정" - case .monthDays: return "날짜 지정" - case .ordinalWeekday: return "몇째 주 요일" + case .everyDay: return String(localized: "매일") + case .weekdays: return String(localized: "요일 지정") + case .monthDays: return String(localized: "날짜 지정") + case .ordinalWeekday: return String(localized: "몇째 주 요일") } } } @@ -337,8 +337,8 @@ enum QuestDirection: String, CaseIterable, Identifiable { var label: String { switch self { - case .atLeast: return "이상 달성" - case .atMost: return "이하 유지" + case .atLeast: return String(localized: "이상 달성") + case .atMost: return String(localized: "이하 유지") } } } @@ -410,7 +410,7 @@ extension Quest { var targetName: String { if let targetAction { return targetAction.name } if let targetTag { return "#\(targetTag.name)" } - return "대상 없음" + return String(localized: "대상 없음") } var targetSymbol: String { @@ -437,7 +437,7 @@ extension Quest { } var targetValueLabel: String { - measure == .time ? Format.durationShort(targetSeconds) : "\(targetCount)회" + measure == .time ? Format.durationShort(targetSeconds) : String(localized: "\(targetCount)회") } /// 주기 요약 문구 (예: "매주 월·수·금") @@ -446,22 +446,22 @@ extension Quest { case .daily: switch scheduleMode { case .everyDay: - return "매일" + return String(localized: "매일") case .weekdays: let names = weekdays.sorted().map { Format.weekdayShort($0) } - return "매주 " + names.joined(separator: "·") + return String(localized: "매주 \(names.joined(separator: "·"))") case .monthDays: - let names = monthDays.sorted().map { "\($0)일" } - return "매달 " + names.joined(separator: ", ") + let names = monthDays.sorted().map { String(localized: "\($0)일") } + return String(localized: "매달 \(names.joined(separator: ", "))") case .ordinalWeekday: - return "매달 \(ordinalWeek)째 주 \(Format.weekdayShort(ordinalWeekday))요일" + return String(localized: "매달 \(ordinalWeek)째 주 \(Format.weekdayShort(ordinalWeekday))요일") } case .weekly: - return "매주" + return String(localized: "매주") case .monthly: - return "매달" + return String(localized: "매달") case .custom: - guard let customStart, let customEnd else { return "특정 기간" } + guard let customStart, let customEnd else { return String(localized: "특정 기간") } return "\(Format.shortDate(customStart)) ~ \(Format.shortDate(customEnd))" } } diff --git a/myApp/HaruDanim/Shared/QuestProgress.swift b/myApp/HaruDanim/Shared/QuestProgress.swift index 05e8a73..49a1007 100644 --- a/myApp/HaruDanim/Shared/QuestProgress.swift +++ b/myApp/HaruDanim/Shared/QuestProgress.swift @@ -15,9 +15,9 @@ enum StatSpan: String, CaseIterable, Identifiable { var label: String { switch self { - case .day: return "하루" - case .week: return "주간" - case .month: return "월간" + case .day: return String(localized: "하루") + case .week: return String(localized: "주간") + case .month: return String(localized: "월간") } } } diff --git a/myApp/HaruDanim/Shared/Settings.swift b/myApp/HaruDanim/Shared/Settings.swift index 54a7ad6..db9bf10 100644 --- a/myApp/HaruDanim/Shared/Settings.swift +++ b/myApp/HaruDanim/Shared/Settings.swift @@ -40,8 +40,8 @@ enum GoalCardStyle: String, CaseIterable, Identifiable { var label: String { switch self { - case .perQuest: return "다짐별로 각각" - case .combined: return "전체 다짐 합산" + case .perQuest: return String(localized: "다짐별로 각각") + case .combined: return String(localized: "전체 다짐 합산") } } } @@ -56,12 +56,12 @@ enum TabBarConfig { /// 짧은 기록 무시 옵션 선택지 (초) enum MinSessionOption { static let choices: [(seconds: Int, label: String)] = [ - (0, "사용 안 함"), - (3, "3초"), - (5, "5초"), - (10, "10초"), - (30, "30초"), - (60, "1분"), + (0, String(localized: "사용 안 함")), + (3, String(localized: "3초")), + (5, String(localized: "5초")), + (10, String(localized: "10초")), + (30, String(localized: "30초")), + (60, String(localized: "1분")), ] } @@ -73,8 +73,8 @@ enum LiveActivityMode: String, CaseIterable, Identifiable { var label: String { switch self { - case .latest: return "가장 나중에 시작한 행동" - case .earliest: return "가장 먼저 시작한 행동" + case .latest: return String(localized: "가장 나중에 시작한 행동") + case .earliest: return String(localized: "가장 먼저 시작한 행동") } } } diff --git a/myApp/HaruDanim/Widgets/Localizable.xcstrings b/myApp/HaruDanim/Widgets/Localizable.xcstrings new file mode 100644 index 0000000..42c951f --- /dev/null +++ b/myApp/HaruDanim/Widgets/Localizable.xcstrings @@ -0,0 +1,2863 @@ +{ + "sourceLanguage": "ko", + "strings": { + "%@": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "%@" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "%@" + } + } + } + }, + "%@ %@": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "%@ %@" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "%@ %@" + } + }, + "ko": { + "stringUnit": { + "state": "new", + "value": "%1$@ %2$@" + } + } + } + }, + "%@ %@ 누적 시간은 %@이에요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Total time for %@ (%@) is %@." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "%@の%@の累計時間は%@です。" + } + }, + "ko": { + "stringUnit": { + "state": "new", + "value": "%1$@ %2$@ 누적 시간은 %3$@이에요." + } + } + } + }, + "%@ %@ 누적 횟수는 %lld회예요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Total count for %@ (%@) is %lld." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "%@の%@の累計回数は%lld回です。" + } + }, + "ko": { + "stringUnit": { + "state": "new", + "value": "%1$@ %2$@ 누적 횟수는 %3$lld회예요." + } + } + } + }, + "%@ %lld회": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "%@ %lld times" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "%@ %lld回" + } + }, + "ko": { + "stringUnit": { + "state": "new", + "value": "%1$@ %2$lld회" + } + } + } + }, + "%@ %lld회 추가했어요. 오늘 총 %lld회예요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Added %lld to %@. Today's total is %lld." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "%@を%lld回追加しました。今日の合計は%lld回です。" + } + }, + "ko": { + "stringUnit": { + "state": "new", + "value": "%1$@ %2$lld회 추가했어요. 오늘 총 %3$lld회예요." + } + } + } + }, + "%@ · %@": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "%@ · %@" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "%@ · %@" + } + }, + "ko": { + "stringUnit": { + "state": "new", + "value": "%1$@ · %2$@" + } + } + } + }, + "%@ 측정을 시작했어요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Started tracking %@." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "%@の計測を開始しました。" + } + } + } + }, + "%@ 측정을 종료했어요. %@ 기록했어요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Stopped tracking %@. Recorded %@." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "%@の計測を終了しました。%@を記録しました。" + } + }, + "ko": { + "stringUnit": { + "state": "new", + "value": "%1$@ 측정을 종료했어요. %2$@ 기록했어요." + } + } + } + }, + "%@ 측정을 종료했어요. 너무 짧은 기록이라 저장하지 않았어요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Stopped tracking %@. The session was too short to save." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "%@の計測を終了しました。短すぎる記録のため保存しませんでした。" + } + } + } + }, + "%@ 한도 지킴": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "%@ within limit" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "%@ 上限内" + } + } + } + }, + "%@ 한도 초과": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "%@ over limit" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "%@ 上限超過" + } + } + } + }, + "%@은(는) 이미 측정 중이에요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "%@ is already being tracked." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "%@はすでに計測中です。" + } + } + } + }, + "%@은(는) 측정 중이 아니에요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "%@ is not being tracked." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "%@は計測中ではありません。" + } + } + } + }, + "%lld": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "%lld" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "%lld" + } + } + } + }, + "%lld%%": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "%lld%%" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "%lld%%" + } + } + } + }, + "%lld분": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "%lldm" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "%lld分" + } + } + } + }, + "%lld시간": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "%lldh" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "%lld時間" + } + } + } + }, + "%lld시간 %lld분": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "%lldh %lldm" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "%lld時間%lld分" + } + }, + "ko": { + "stringUnit": { + "state": "new", + "value": "%1$lld시간 %2$lld분" + } + } + } + }, + "%lld일": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "%lld" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "%lld日" + } + } + } + }, + "%lld초": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "%llds" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "%lld秒" + } + } + } + }, + "%lld회": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "%lld times" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "%lld回" + } + } + } + }, + "'%@ · %@' %@ 진행률: %@": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "'%@ · %@' %@ progress: %@" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "「%@ · %@」の%@進捗率: %@" + } + }, + "ko": { + "stringUnit": { + "state": "new", + "value": "'%1$@ · %2$@' %3$@ 진행률: %4$@" + } + } + } + }, + "'%@' %@ 진행률은 %lld%%예요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "'%@' %@ progress is %lld%%." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "「%@」の%@進捗率は%lld%%です。" + } + }, + "ko": { + "stringUnit": { + "state": "new", + "value": "'%1$@' %2$@ 진행률은 %3$lld%%예요." + } + } + } + }, + "'%@' 목표에는 아직 다짐이 없어요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "The goal '%@' has no quests yet." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "目標「%@」にはまだクエストがありません。" + } + } + } + }, + "'%@'은(는) 시간 측정 행동이에요. 측정 시작/종료를 사용해 주세요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "'%@' is a time-tracking action. Use start/stop tracking instead." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "「%@」は時間計測タイプです。計測の開始/終了を使ってください。" + } + } + } + }, + "'%@'은(는) 횟수 기록 행동이에요. 횟수 추가를 사용해 주세요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "'%@' is a count action. Use add count instead." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "「%@」は回数記録タイプです。回数の追加を使ってください。" + } + } + } + }, + "+%lld": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "+%lld" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "+%lld" + } + } + } + }, + "+%lld개 함께 추적 중": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "+%lld more tracking" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "ほかに%lld件計測中" + } + } + } + }, + "10초": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "10 sec" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "10秒" + } + } + } + }, + "1분": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "1 min" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "1分" + } + } + } + }, + "30초": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "30 sec" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "30秒" + } + } + } + }, + "3초": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "3 sec" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "3秒" + } + } + } + }, + "5초": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "5 sec" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "5秒" + } + } + } + }, + "가장 나중에 시작한 행동": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Most recently started action" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "最後に開始したアクション" + } + } + } + }, + "가장 먼저 시작한 행동": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Earliest started action" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "最初に開始したアクション" + } + } + } + }, + "값": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Value" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "値" + } + } + } + }, + "그래프로 보여줄 행동과 기간을 선택하세요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Choose actions and a period to chart." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "グラフに表示するアクションと期間を選んでください。" + } + } + } + }, + "금": { + "comment": "요일 축약(금요일)", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Fri" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "金" + } + } + } + }, + "기간": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Period" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "期間" + } + } + } + }, + "날짜": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Date" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "日付" + } + } + } + }, + "날짜 지정": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Specific dates" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "日付指定" + } + } + } + }, + "다른 행동 %lld개도 함께 추적 중": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "%lld other actions also tracking" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "ほかに%lld件のアクションを計測中" + } + } + } + }, + "다짐": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Quest" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "クエスト" + } + } + } + }, + "다짐 1": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Quest 1" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "クエスト1" + } + } + } + }, + "다짐 2": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Quest 2" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "クエスト2" + } + } + } + }, + "다짐 3": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Quest 3" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "クエスト3" + } + } + } + }, + "다짐 4": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Quest 4" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "クエスト4" + } + } + } + }, + "다짐 점 표시": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Quest dots" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "クエストをドット表示" + } + } + } + }, + "다짐 진행률": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Quest Progress" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "クエスト進捗率" + } + } + } + }, + "다짐 진행률 가져오기": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Get Quest Progress" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "クエストの進捗率を取得" + } + } + } + }, + "다짐 진행률 위젯": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Quest Progress Widget" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "クエスト進捗ウィジェット" + } + } + } + }, + "다짐 현황": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Quest Status" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "クエスト状況" + } + } + } + }, + "다짐 현황 위젯": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Quest Status Widget" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "クエスト状況ウィジェット" + } + } + } + }, + "다짐들의 진행률 링을 표시할 목표와 기간을 선택하세요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Choose a goal and period for the quest progress rings." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "クエストの進捗リングを表示する目標と期間を選んでください。" + } + } + } + }, + "다짐별로 각각": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Each quest separately" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "クエストごとに表示" + } + } + } + }, + "다짐을 찾을 수 없어요. 앱에서 삭제됐을 수 있어요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Quest not found. It may have been deleted in the app." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "クエストが見つかりません。アプリで削除された可能性があります。" + } + } + } + }, + "다짐의 진행률을 원형 링으로 보고, 눌러서 바로 실행해요. (프리미엄)": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "See quest progress as a ring and tap to run the action. (Premium)" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "クエストの進捗をリングで確認し、タップで即実行。(プレミアム)" + } + } + } + }, + "다짐의 하루/주간/월간 진행률(%)을 가져와요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Gets a quest's daily/weekly/monthly progress (%)." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "クエストの日/週/月の進捗率(%)を取得します。" + } + } + } + }, + "다짐이 없어요": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "No quests" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "クエストがありません" + } + } + } + }, + "다크 고정": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Always Dark" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "ダーク固定" + } + } + } + }, + "달성 완료": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Achieved" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "達成済み" + } + } + } + }, + "달성률 기간": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Progress period" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "達成率の期間" + } + } + } + }, + "대상 없음": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "No target" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "対象なし" + } + } + } + }, + "라이트 고정": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Always Light" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "ライト固定" + } + } + } + }, + "리퀴드 글라스": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Liquid Glass" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "リキッドグラス" + } + } + } + }, + "매달": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Every month" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "毎月" + } + } + } + }, + "매달 %@": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Every month on day %@" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "毎月%@" + } + } + } + }, + "매달 %lld째 주 %@요일": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Every month, week %lld on %@" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "毎月第%lld%@曜日" + } + }, + "ko": { + "stringUnit": { + "state": "new", + "value": "매달 %1$lld째 주 %2$@요일" + } + } + } + }, + "매일": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Every day" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "毎日" + } + } + } + }, + "매주": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Every week" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "毎週" + } + } + } + }, + "매주 %@": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Every week on %@" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "毎週%@" + } + } + } + }, + "몇째 주 요일": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Nth weekday" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "第何週の曜日" + } + } + } + }, + "목": { + "comment": "요일 축약(목요일)", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Thu" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "木" + } + } + } + }, + "목표": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Goals" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "目標" + } + } + } + }, + "목표 1": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Goal 1" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "目標1" + } + } + } + }, + "목표 2": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Goal 2" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "目標2" + } + } + } + }, + "목표 2 (대형 전용)": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Goal 2 (large only)" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "目標2(大サイズ専用)" + } + } + } + }, + "목표 3": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Goal 3" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "目標3" + } + } + } + }, + "목표 4": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Goal 4" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "目標4" + } + } + } + }, + "목표 달성률 (잠금화면)": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Goal Progress (Lock Screen)" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "目標達成率(ロック画面)" + } + } + } + }, + "목표 없음": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "No goal" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "目標なし" + } + } + } + }, + "목표 진행률": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Goal Progress" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "目標進捗率" + } + } + } + }, + "목표 진행률 가져오기": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Get Goal Progress" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "目標の進捗率を取得" + } + } + } + }, + "목표 진행률 위젯": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Goal Progress Widget" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "目標進捗ウィジェット" + } + } + } + }, + "목표를 찾을 수 없어요. 앱에서 삭제됐을 수 있어요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Goal not found. It may have been deleted in the app." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "目標が見つかりません。アプリで削除された可能性があります。" + } + } + } + }, + "목표에 속한 다짐들의 진행률을 원형 링으로 한눈에 봐요. (프리미엄)": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "See all of a goal's quest progress rings at a glance. (Premium)" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "目標のクエスト進捗をリングで一目で確認。(プレミアム)" + } + } + } + }, + "목표의 하루/주간/월간 진행률(%)을 가져와요. 소속 다짐들의 진행률 평균이에요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Gets a goal's daily/weekly/monthly progress (%), averaged across its quests." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "目標の日/週/月の進捗率(%)を取得します。所属クエストの平均です。" + } + } + } + }, + "목표의 하루·주간·월간 진행률을 진행바로 확인해요. (프리미엄)": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Track a goal's daily, weekly, and monthly progress with bars. (Premium)" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "目標の日・週・月の進捗をバーで確認。(プレミアム)" + } + } + } + }, + "미달성 종료": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Finished (not achieved)" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "未達成で終了" + } + } + } + }, + "사용 안 함": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Off" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "使用しない" + } + } + } + }, + "선택한 행동들의 통계 꺾은선 그래프를 확인해요. (프리미엄)": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "See line charts for your selected actions. (Premium)" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "選択したアクションの統計を折れ線グラフで確認。(プレミアム)" + } + } + } + }, + "수": { + "comment": "요일 축약(수요일)", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Wed" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "水" + } + } + } + }, + "숫자만": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Number only" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "数字のみ" + } + } + } + }, + "시간": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Time" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "時間" + } + } + } + }, + "시간 측정": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Time tracking" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "時間計測" + } + } + } + }, + "시간 측정 시작": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Start Timer" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "計測を開始" + } + } + } + }, + "시간 측정 종료": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Stop Timer" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "計測を終了" + } + } + } + }, + "시간 측정 행동은 시작/종료를 전환하고, 횟수 기록 행동은 횟수를 1 추가해요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Time actions toggle start/stop; count actions add 1." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "時間計測タイプは開始/終了を切り替え、回数記録タイプは1回追加します。" + } + } + } + }, + "시간 측정 행동의 측정을 시작해요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Starts tracking a time action." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "時間計測アクションの計測を開始します。" + } + } + } + }, + "시간(h)": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Time (h)" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "時間(h)" + } + } + } + }, + "시리 단축어는 프리미엄 기능이에요. 하루 다님 앱의 설정 → 프리미엄에서 잠금 해제해 주세요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Siri Shortcuts are a premium feature. Unlock them in HaruDanim: Settings → Premium." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "Siriショートカットはプレミアム機能です。アプリの設定→プレミアムでロックを解除してください。" + } + } + } + }, + "앱 테마와 일치": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Match App Theme" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "アプリのテーマに合わせる" + } + } + } + }, + "앱에서 행동을 만들고 기록하면 그래프가 표시돼요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Create and track actions in the app to see charts." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "アプリでアクションを作成・記録するとグラフが表示されます。" + } + } + } + }, + "앱에서 행동을 만들면 여기서 실행할 수 있어요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Create actions in the app to run them here." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "アプリでアクションを作成するとここで実行できます。" + } + } + } + }, + "앱의 목표 탭에서 다짐을 만들면 진행률이 표시돼요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Create quests in the Goals tab to see progress." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "アプリの目標タブでクエストを作成すると進捗が表示されます。" + } + } + } + }, + "앱의 목표 탭에서 목표를 만들면 진행률이 표시돼요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Create goals in the Goals tab to see progress." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "アプリの目標タブで目標を作成すると進捗が表示されます。" + } + } + } + }, + "앱의 목표 탭에서 목표와 다짐을 만들어 보세요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Create goals and quests in the app's Goals tab." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "アプリの目標タブで目標とクエストを作ってみてください。" + } + } + } + }, + "앱의 설정 → 프리미엄에서\n잠금 해제해 주세요": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Unlock in the app:\nSettings → Premium" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "アプリの設定→プレミアムで\nロックを解除してください" + } + } + } + }, + "오늘": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Today" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "今日" + } + } + } + }, + "요일 지정": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Specific weekdays" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "曜日指定" + } + } + } + }, + "원형 게이지": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Circular gauge" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "円形ゲージ" + } + } + } + }, + "원형 진행률로 표시할 다짐과 기간을 선택하세요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Choose a quest and period for the progress ring." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "リングで表示するクエストと期間を選んでください。" + } + } + } + }, + "월": { + "comment": "요일 축약(월요일)", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Mon" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "月" + } + } + } + }, + "월간": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Monthly" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "月間" + } + } + } + }, + "위젯 테마": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Widget Theme" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "ウィジェットテーマ" + } + } + } + }, + "이번 달": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "This month" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "今月" + } + } + } + }, + "이번 주": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "This week" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "今週" + } + } + } + }, + "이상 달성": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Reach at least" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "以上を達成" + } + } + } + }, + "이하 유지": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Stay under" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "以下を維持" + } + } + } + }, + "일": { + "comment": "요일 축약(일요일)", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Sun" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "日" + } + } + } + }, + "일주일 (하루 단위)": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Week (by day)" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "1週間(日別)" + } + } + } + }, + "일주일 단위": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Weekly" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "週単位" + } + } + } + }, + "일주일 통계": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Weekly stats" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "週間統計" + } + } + } + }, + "잠금화면 목표 위젯": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Lock Screen Goal Widget" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "ロック画面の目標ウィジェット" + } + } + } + }, + "잠금화면에 표시할 목표와 기간, 표시 방식을 선택하세요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Choose a goal, period, and style for the Lock Screen." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "ロック画面に表示する目標・期間・スタイルを選んでください。" + } + } + } + }, + "잠금화면에서 목표 달성률과 다짐 현황을 확인해요. (프리미엄)": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Check goal progress and quest status on the Lock Screen. (Premium)" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "ロック画面で目標達成率とクエスト状況を確認。(プレミアム)" + } + } + } + }, + "전체 다짐 합산": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "All quests combined" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "全クエスト合算" + } + } + } + }, + "주간": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Weekly" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "週間" + } + } + } + }, + "주차": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Week" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "週" + } + } + } + }, + "진행 중": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "In progress" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "進行中" + } + } + } + }, + "진행률 기간": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Progress period" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "進捗の期間" + } + } + } + }, + "추가할 횟수": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Count to add" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "追加する回数" + } + } + } + }, + "측정 중": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Tracking" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "計測中" + } + } + } + }, + "측정 중인 행동의 시간 측정을 종료해요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Stops tracking a running time action." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "計測中のアクションの計測を終了します。" + } + } + } + }, + "토": { + "comment": "요일 축약(토요일)", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Sat" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "土" + } + } + } + }, + "통계 기간": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Stats period" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "統計期間" + } + } + } + }, + "통계 위젯": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Stats Widget" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "統計ウィジェット" + } + } + } + }, + "특정 기간": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Custom period" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "特定期間" + } + } + } + }, + "표시 기간": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Display period" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "表示期間" + } + } + } + }, + "표시 방식": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Display style" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "表示方法" + } + } + } + }, + "표시 방식 (원형 크기)": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Display style (ring size)" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "表示方法(リングサイズ)" + } + } + } + }, + "표시할 행동과 누적 기간을 선택하세요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Choose an action and period to display." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "表示するアクションと累計期間を選んでください。" + } + } + } + }, + "프리미엄": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Premium" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "プレミアム" + } + } + } + }, + "프리미엄 기능": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Premium Features" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "プレミアム機能" + } + } + } + }, + "하루": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Daily" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "1日" + } + } + } + }, + "하루 다님 · 목표 없음": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "HaruDanim · No goal" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "ハルダニム・目標なし" + } + } + } + }, + "하루 다님 · 프리미엄 기능": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "HaruDanim · Premium feature" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "ハルダニム・プレミアム機能" + } + } + } + }, + "하루 단위": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Daily" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "日単位" + } + } + } + }, + "하루·주간·월간 진행률을 표시할 목표를 선택하세요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Choose a goal to show daily, weekly, and monthly progress." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "日・週・月の進捗を表示する目標を選んでください。" + } + } + } + }, + "한 달 (주 단위)": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Month (by week)" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "1か月(週別)" + } + } + } + }, + "한 달 (하루 단위, 중형 이상)": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Month (by day, medium+)" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "1か月(日別、中サイズ以上)" + } + } + } + }, + "한 달 단위": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Monthly" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "月単位" + } + } + } + }, + "한 달 통계 (일별)": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Monthly stats (by day)" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "月間統計(日別)" + } + } + } + }, + "한 달 통계 (주별)": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Monthly stats (by week)" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "月間統計(週別)" + } + } + } + }, + "한도 안에서 잘 지키고 있어요": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "You're staying within the limit" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "上限内でよく守れています" + } + } + } + }, + "한도를 넘었어요": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "You went over the limit" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "上限を超えました" + } + } + } + }, + "행동": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Actions" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "アクション" + } + } + } + }, + "행동 1": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Action 1" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "アクション1" + } + } + } + }, + "행동 2": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Action 2" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "アクション2" + } + } + } + }, + "행동 3": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Action 3" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "アクション3" + } + } + } + }, + "행동 4": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Action 4" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "アクション4" + } + } + } + }, + "행동 누적값 가져오기": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Get Action Total" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "アクションの累計値を取得" + } + } + } + }, + "행동 실행": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Run Action" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "アクション実行" + } + } + } + }, + "행동 실행 위젯": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Action Run Widget" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "アクション実行ウィジェット" + } + } + } + }, + "행동 통계": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Action Stats" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "アクション統計" + } + } + } + }, + "행동을 위젯에서 바로 실행하고 누적값을 확인해요. (프리미엄)": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Run actions right from the widget and see totals. (Premium)" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "ウィジェットからアクションを即実行し、累計を確認。(プレミアム)" + } + } + } + }, + "행동을 찾을 수 없어요. 앱에서 삭제됐을 수 있어요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Action not found. It may have been deleted in the app." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "アクションが見つかりません。アプリで削除された可能性があります。" + } + } + } + }, + "행동의 하루/주간/월간 누적 시간(초) 또는 횟수를 가져와요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Gets an action's daily/weekly/monthly total time (seconds) or count." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "アクションの日/週/月の累計時間(秒)または回数を取得します。" + } + } + } + }, + "화": { + "comment": "요일 축약(화요일)", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Tue" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "火" + } + } + } + }, + "횟수": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Count" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "回数" + } + } + } + }, + "횟수 기록": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Count tracking" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "回数記録" + } + } + } + }, + "횟수 기록 행동의 횟수를 바로 추가해요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Adds a count to a count action right away." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "回数記録アクションの回数をすぐに追加します。" + } + } + } + }, + "횟수 추가": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Add Count" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "回数を追加" + } + } + } + } + }, + "version": "1.0" +} diff --git a/myApp/HaruDanim/Widgets/QuestRingWidget.swift b/myApp/HaruDanim/Widgets/QuestRingWidget.swift index a088198..bc38a43 100644 --- a/myApp/HaruDanim/Widgets/QuestRingWidget.swift +++ b/myApp/HaruDanim/Widgets/QuestRingWidget.swift @@ -126,7 +126,9 @@ struct QuestRingActionCellView: View { private var percentText: String { if cell.isAtMost { - return cell.isAchieved ? "\(spanLabel) 한도 지킴" : "\(spanLabel) 한도 초과" + return cell.isAchieved + ? String(localized: "\(spanLabel) 한도 지킴") + : String(localized: "\(spanLabel) 한도 초과") } return "\(spanLabel) \(Format.percent(cell.displayRatio))" } diff --git a/myApp/HaruDanim/Widgets/StatsChartWidget.swift b/myApp/HaruDanim/Widgets/StatsChartWidget.swift index 336f350..fc7f000 100644 --- a/myApp/HaruDanim/Widgets/StatsChartWidget.swift +++ b/myApp/HaruDanim/Widgets/StatsChartWidget.swift @@ -27,9 +27,9 @@ enum StatsChartSpan: String, AppEnum { var title: String { switch self { - case .week: return "일주일 통계" - case .monthByDay: return "한 달 통계 (일별)" - case .monthByWeek: return "한 달 통계 (주별)" + case .week: return String(localized: "일주일 통계") + case .monthByDay: return String(localized: "한 달 통계 (일별)") + case .monthByWeek: return String(localized: "한 달 통계 (주별)") } } } @@ -203,14 +203,14 @@ struct StatsChartWidgetView: View { if let day = point.day { LineMark( x: .value("날짜", day, unit: .day), - y: .value(entry.isTimeType ? "시간" : "값", point.value) + y: .value(entry.isTimeType ? String(localized: "시간") : String(localized: "값"), point.value) ) .foregroundStyle(by: .value("행동", point.actionName)) .interpolationMethod(.monotone) } else if let weekLabel = point.weekLabel { LineMark( x: .value("주차", weekLabel), - y: .value(entry.isTimeType ? "시간" : "값", point.value) + y: .value(entry.isTimeType ? String(localized: "시간") : String(localized: "값"), point.value) ) .foregroundStyle(by: .value("행동", point.actionName)) .interpolationMethod(.monotone) @@ -218,7 +218,7 @@ struct StatsChartWidgetView: View { } .chartForegroundStyleScale(domain: entry.names, range: colors) .chartLegend(family == .systemSmall ? .hidden : .visible) - .chartYAxisLabel(family == .systemSmall ? "" : (entry.isTimeType ? "시간(h)" : "횟수")) + .chartYAxisLabel(family == .systemSmall ? "" : (entry.isTimeType ? String(localized: "시간(h)") : String(localized: "횟수"))) .chartXAxis { if entry.isWeekAxis { AxisMarks { _ in