feat: 다국어 지원 및 다중 통화 환율 변환 기능 확대

- ExchangeRateService에 JPY, CNY 환율 지원 추가
- 구독 서비스별 다국어 표시 이름 지원
- 분석 화면 차트 및 UI/UX 개선
- 설정 화면 전면 리팩토링
- SMS 스캔 기능 사용성 개선
- 전체 앱 다국어 번역 확대

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
JiWoong Sul
2025-07-16 17:34:32 +09:00
parent 4d1c0f5dab
commit 0f0b02bf08
55 changed files with 4100 additions and 1197 deletions

874
assets/data/text.json Normal file
View File

@@ -0,0 +1,874 @@
{
"en": {
"appTitle": "Digital Rent Manager",
"appSubtitle": "Manage subscriptions easily",
"subscriptionManagement": "Subscription Management",
"addSubscription": "Add Subscription",
"subscriptionName": "Service Name",
"monthlyCost": "Monthly Cost",
"billingCycle": "Billing Cycle",
"nextBillingDate": "Next Billing Date",
"save": "Save",
"cancel": "Cancel",
"delete": "Delete",
"edit": "Edit",
"totalSubscriptions": "Total Subscriptions",
"totalMonthlyExpense": "Total Monthly Expense",
"noSubscriptions": "No subscriptions registered",
"addSubscriptionNow": "Add Subscription Now",
"paymentReminder": "Payment Reminder",
"expirationReminder": "Expiration Reminder",
"daysLeft": "days left",
"categoryManagement": "Category Management",
"categoryName": "Category Name",
"selectColor": "Select Color",
"selectIcon": "Select Icon",
"addCategory": "Add Category",
"settings": "Settings",
"darkMode": "Dark Mode",
"language": "Language",
"notifications": "Notifications",
"appLock": "App Lock",
"notificationPermission": "Notification Permission",
"notificationPermissionDesc": "Permission is required to receive notifications",
"requestPermission": "Request Permission",
"paymentNotification": "Payment Due Notification",
"paymentNotificationDesc": "Receive notification on payment due date",
"notificationTiming": "Notification Timing",
"daysBefore": "day(s) before",
"notificationTime": "Notification Time",
"dailyReminder": "Daily Reminder",
"dailyReminderEnabled": "Receive daily notifications until payment date",
"dailyReminderDisabled": "Receive notification @ day(s) before payment",
"notificationPermissionDenied": "Notification permission denied",
"appInfo": "App Info",
"version": "Version",
"appDescription": "Digital Rent Management App",
"developer": "Developer",
"cannotOpenStore": "Cannot open store",
"lightTheme": "Light",
"darkTheme": "Dark",
"oledTheme": "OLED Black",
"systemTheme": "System Default",
"subscriptionAdded": "Subscription added",
"subscriptionAddedTemplate": "@ subscription added.",
"korean": "한국어",
"english": "English",
"japanese": "日本語",
"chinese": "中文",
"oneDayBefore": "1 day before",
"twoDaysBefore": "2 days before",
"threeDaysBefore": "3 days before",
"requiredFieldsError": "Please fill in all required fields",
"subscriptionUpdated": "Subscription information has been updated",
"subscriptionDeleted": "@ subscription has been deleted",
"officialCancelPageNotFound": "Official cancellation page not found. Redirecting to Google search.",
"cannotOpenWebsite": "Cannot open website",
"noWebsiteInfo": "No website information available. Please cancel through the website.",
"editMode": "Edit Mode",
"changesAppliedAfterSave": "Changes will be applied after saving",
"saveChanges": "Save Changes",
"monthlyExpense": "Monthly Expense",
"websiteUrl": "Website URL",
"websiteUrlOptional": "Website URL (Optional)",
"eventPrice": "Event Price",
"eventPriceHint": "Enter discounted price",
"eventPriceRequired": "Please enter event price",
"invalidPrice": "Please enter a valid price",
"smsScanLabel": "SMS",
"home": "Home",
"analysis": "Analysis",
"back": "Back",
"exitApp": "Exit App",
"exitAppConfirm": "Are you sure you want to exit SubManager?",
"exit": "Exit",
"pageNotFound": "Page not found",
"serviceNameExample": "e.g. Netflix, Spotify",
"urlExample": "https://example.com",
"appLockDesc": "App lock with biometric authentication",
"unlockWithBiometric": "Unlock with biometric authentication",
"authenticationFailed": "Authentication failed. Please try again.",
"totalExpenseCopied": "Total expense copied: @",
"smsPermissionRequired": "SMS permission required",
"noSubscriptionSmsFound": "No subscription related SMS found",
"serviceRecognized": "@ service has been recognized automatically.",
"smsScanError": "Error occurred during SMS scan: @",
"saveError": "Error occurred while saving: @",
"newSubscriptionSmsNotFound": "No new subscription SMS found",
"subscriptionAddError": "Error adding subscription: @",
"subscriptionSkipped": "@ subscription skipped.",
"allSubscriptionsProcessed": "All subscriptions have been processed.",
"websiteUrlExtracted": "Website URL (Auto-extracted)",
"startDate": "Start Date",
"endDate": "End Date",
"mySubscriptions": "My Subscriptions",
"monthlyExpenseTitle": "Monthly Expense Status",
"recentSixMonthsTrend": "Recent 6 months trend",
"monthlySubscriptionExpense": "Monthly subscription expense",
"subscriptionServiceRatio": "Subscription Service Ratio",
"monthlyExpenseBasis": "Based on monthly expense",
"noSubscriptionServices": "No subscription services",
"totalExpenseSummary": "Total Expense Summary",
"monthlyTotalAmount": "Monthly Total Amount",
"totalExpense": "Total Expense",
"totalServices": "Total Services",
"servicesUnit": "services",
"averageCost": "Average Cost",
"eventDiscountStatus": "Event Discount Status",
"inProgressUnit": "in progress",
"monthlySavingAmount": "Monthly Saving Amount",
"eventsInProgress": "Events in Progress",
"discountPercent": "% discount",
"currencyWon": "KRW",
"scanningMessages": "Scanning SMS messages...",
"findingSubscriptions": "Finding subscription services",
"subscriptionNotFound": "Subscription information not found.",
"repeatSubscriptionNotFound": "No repeated subscription information found.",
"newSubscriptionNotFound": "No new subscription SMS found",
"findRepeatSubscriptions": "Find subscriptions paid 2+ times",
"scanTextMessages": "Scan text messages to automatically find repeatedly paid subscriptions. Service names and amounts can be extracted for easy subscription addition.",
"startScanning": "Start Scanning",
"foundSubscription": "Found subscription",
"serviceName": "Service Name",
"nextBillingDateLabel": "Next Billing Date",
"category": "Category",
"websiteUrlAuto": "Website URL (Auto-extracted)",
"websiteUrlHint": "Edit website URL or leave empty",
"skip": "Skip",
"add": "Add",
"nextBillingDateRequired": "Next billing date verification required",
"nextBillingDateEstimated": "Next estimated billing date: @ (# days later)",
"nextBillingDateInfo": "Next billing date: @ (# days later)",
"nextBillingDatePastRequired": "Next billing date verification required (past date)",
"repeatCountDetected": "@ payment(s) detected",
"monthlyTotalSubscriptionCost": "Total Monthly Subscription Cost",
"todaysExchangeRate": "Today's Exchange Rate",
"won": "KRW",
"estimatedAnnualCost": "Estimated Annual Cost",
"totalSubscriptionServices": "Total Subscription Services",
"eventDiscountActive": "Event Discount Active",
"saving": "Saving",
"paymentDueToday": "Payment Due Today",
"paymentDueInDays": "Payment due in @ days",
"paymentInfoNeeded": "Payment Info Needed",
"event": "Event",
"daysRemaining": "@ days remaining",
"exchangeRateFormat": "Today's rate: @",
"categoryMusic": "Music",
"categoryOttVideo": "OTT(Video)",
"categoryStorageCloud": "Storage/Cloud",
"categoryTelecomInternetTv": "Telecom · Internet · TV",
"categoryLifestyle": "Lifestyle",
"categoryShoppingEcommerce": "Shopping/E-commerce",
"categoryProgramming": "Programming",
"categoryCollaborationOffice": "Collaboration/Office",
"categoryAiService": "AI Service",
"categoryOther": "Other",
"monthly": "Monthly",
"weekly": "Weekly",
"yearly": "Yearly",
"colorBlue": "Blue",
"colorGreen": "Green",
"colorOrange": "Orange",
"colorRed": "Red",
"colorPurple": "Purple",
"dateFormatFull": "MMM dd, yyyy",
"dateFormatShort": "MM/dd",
"exchangeRateDisplay": "$1 = @",
"labelServiceName": "Service Name",
"hintServiceName": "e.g. Netflix, Spotify",
"labelMonthlyExpense": "Monthly Expense",
"labelNextBillingDate": "Next Billing Date",
"labelWebsiteUrl": "Website URL (Optional)",
"hintWebsiteUrl": "https://example.com",
"labelEventPrice": "Event Price",
"hintEventPrice": "Enter discounted price",
"labelCategory": "Category",
"subscription": "Subscription",
"movie": "Movie",
"music": "Music",
"exercise": "Exercise",
"shopping": "Shopping",
"currency": "Currency",
"billingCycleMonthly": "Monthly",
"billingCycleQuarterly": "Quarterly",
"billingCycleHalfYearly": "Half-Yearly",
"billingCycleYearly": "Yearly",
"websiteInfo": "Website Information",
"cancelGuide": "Cancellation Guide",
"cancelServiceGuide": "To cancel this service, please go to the cancellation page through the link below.",
"goToCancelPage": "Go to Cancellation Page",
"urlAutoMatchInfo": "If URL is empty, it will be automatically matched based on the service name",
"discountPercent": "@% discount",
"discountAmountWon": "Save ₩@",
"discountAmountDollar": "Save $@",
"discountAmountYen": "Save ¥@",
"discountAmountYuan": "Save ¥@",
"billingCyclePayment": "@ Payment",
"dateSelect": "Select",
"billingCycleSuffix": "",
"serviceInfo": "Service Information",
"newSubscriptionAdd": "Add New Subscription",
"enterServiceInfo": "Enter service information",
"addSubscriptionButton": "Add Subscription",
"serviceNameRequired": "Please enter service name",
"amountRequired": "Please enter amount",
"subscriptionDetail": "Subscription Detail",
"enterAmount": "Enter amount",
"invalidAmount": "Please enter a valid amount"
},
"ko": {
"appTitle": "디지털 월세 관리자",
"appSubtitle": "구독 서비스 관리를 더 쉽게",
"subscriptionManagement": "구독 관리",
"addSubscription": "구독 추가",
"subscriptionName": "서비스명",
"monthlyCost": "월 비용",
"billingCycle": "결제 주기",
"nextBillingDate": "다음 결제일",
"save": "저장",
"cancel": "취소",
"delete": "삭제",
"edit": "수정",
"totalSubscriptions": "총 구독",
"totalMonthlyExpense": "이번 달 총 지출",
"noSubscriptions": "등록된 구독 서비스가 없습니다",
"addSubscriptionNow": "구독 추가하기",
"paymentReminder": "결제 예정 알림",
"expirationReminder": "만료 예정 알림",
"daysLeft": "일 남음",
"categoryManagement": "카테고리 관리",
"categoryName": "카테고리 이름",
"selectColor": "색상 선택",
"selectIcon": "아이콘 선택",
"addCategory": "카테고리 추가",
"settings": "설정",
"darkMode": "다크 모드",
"language": "언어",
"notifications": "알림",
"appLock": "앱 잠금",
"notificationPermission": "알림 권한",
"notificationPermissionDesc": "알림을 받으려면 권한이 필요합니다",
"requestPermission": "권한 요청",
"paymentNotification": "결제 예정 알림",
"paymentNotificationDesc": "결제 예정일 알림 받기",
"notificationTiming": "알림 시점",
"daysBefore": "일 전",
"notificationTime": "알림 시간",
"dailyReminder": "1일마다 반복 알림",
"dailyReminderEnabled": "결제일까지 매일 알림을 받습니다",
"dailyReminderDisabled": "결제 @일 전에 알림을 받습니다",
"notificationPermissionDenied": "알림 권한이 거부되었습니다",
"appInfo": "앱 정보",
"version": "버전",
"appDescription": "디지털 월세 관리 앱",
"developer": "개발자",
"cannotOpenStore": "스토어를 열 수 없습니다",
"lightTheme": "라이트",
"darkTheme": "다크",
"oledTheme": "OLED 블랙",
"systemTheme": "시스템 설정",
"subscriptionAdded": "구독이 추가되었습니다",
"subscriptionAddedTemplate": "@ 구독이 추가되었습니다.",
"korean": "한국어",
"english": "English",
"japanese": "日本語",
"chinese": "中文",
"oneDayBefore": "1일 전",
"twoDaysBefore": "2일 전",
"threeDaysBefore": "3일 전",
"requiredFieldsError": "필수 항목을 모두 입력해주세요",
"subscriptionUpdated": "구독 정보가 업데이트되었습니다.",
"subscriptionDeleted": "@ 구독이 삭제되었습니다.",
"officialCancelPageNotFound": "공식 해지 페이지를 찾을 수 없어 구글 검색으로 연결합니다.",
"cannotOpenWebsite": "웹사이트를 열 수 없습니다.",
"noWebsiteInfo": "웹사이트 정보가 없습니다. 해지는 웹사이트에서 진행해주세요.",
"editMode": "편집 모드",
"changesAppliedAfterSave": "변경사항은 저장 후 적용됩니다",
"saveChanges": "변경사항 저장",
"monthlyExpense": "월 지출",
"websiteUrl": "웹사이트 URL",
"websiteUrlOptional": "웹사이트 URL (선택)",
"eventPrice": "이벤트 가격",
"eventPriceHint": "할인된 가격을 입력하세요",
"eventPriceRequired": "이벤트 가격을 입력해주세요",
"invalidPrice": "올바른 가격을 입력해주세요",
"smsScanLabel": "SMS",
"home": "홈",
"analysis": "분석",
"back": "뒤로가기",
"exitApp": "앱 종료",
"exitAppConfirm": "SubManager를 종료하시겠습니까?",
"exit": "종료",
"pageNotFound": "페이지를 찾을 수 없습니다",
"serviceNameExample": "예: Netflix, Spotify",
"urlExample": "https://example.com",
"appLockDesc": "생체 인증으로 앱 잠금",
"unlockWithBiometric": "생체 인증으로 잠금 해제",
"authenticationFailed": "인증에 실패했습니다. 다시 시도해주세요.",
"totalExpenseCopied": "총 지출액이 복사되었습니다: @",
"smsPermissionRequired": "SMS 권한이 필요합니다.",
"noSubscriptionSmsFound": "구독 관련 SMS를 찾을 수 없습니다.",
"serviceRecognized": "@ 서비스가 자동으로 인식되었습니다.",
"smsScanError": "SMS 스캔 중 오류 발생: @",
"saveError": "저장 중 오류가 발생했습니다: @",
"newSubscriptionSmsNotFound": "신규 구독 관련 SMS를 찾을 수 없습니다",
"subscriptionAddError": "구독 추가 중 오류가 발생했습니다: @",
"subscriptionSkipped": "@ 구독을 건너뛰었습니다.",
"allSubscriptionsProcessed": "모든 구독이 처리되었습니다.",
"websiteUrlExtracted": "웹사이트 URL (자동 추출됨)",
"startDate": "시작일",
"endDate": "종료일",
"mySubscriptions": "나의 구독 서비스",
"monthlyExpenseTitle": "월별 지출 현황",
"recentSixMonthsTrend": "최근 6개월간 추이",
"monthlySubscriptionExpense": "월 구독 지출",
"subscriptionServiceRatio": "구독 서비스 비율",
"monthlyExpenseBasis": "월 지출 기준",
"noSubscriptionServices": "구독중인 서비스가 없습니다",
"totalExpenseSummary": "총 지출 요약",
"monthlyTotalAmount": "월 단위 총액",
"totalExpense": "총 지출",
"totalServices": "총 서비스",
"servicesUnit": "개",
"averageCost": "평균 요금",
"eventDiscountStatus": "이벤트 할인 현황",
"inProgressUnit": "진행중",
"monthlySavingAmount": "월간 절약 금액",
"eventsInProgress": "진행중인 이벤트",
"discountPercent": "% 할인",
"currencyWon": "원",
"scanningMessages": "SMS 메시지를 스캔 중입니다...",
"findingSubscriptions": "구독 서비스를 찾고 있습니다",
"subscriptionNotFound": "구독 정보를 찾을 수 없습니다.",
"repeatSubscriptionNotFound": "반복 결제된 구독 정보를 찾을 수 없습니다.",
"newSubscriptionNotFound": "신규 구독 관련 SMS를 찾을 수 없습니다",
"findRepeatSubscriptions": "2회 이상 결제된 구독 서비스 찾기",
"scanTextMessages": "문자 메시지를 스캔하여 반복적으로 결제된 구독 서비스를 자동으로 찾습니다. 서비스명과 금액을 추출하여 쉽게 구독을 추가할 수 있습니다.",
"startScanning": "스캔 시작하기",
"foundSubscription": "다음 구독을 찾았습니다",
"serviceName": "서비스명",
"nextBillingDateLabel": "다음 결제일",
"category": "카테고리",
"websiteUrlAuto": "웹사이트 URL (자동 추출됨)",
"websiteUrlHint": "웹사이트 URL을 수정하거나 비워두세요",
"skip": "건너뛰기",
"add": "추가하기",
"nextBillingDateRequired": "다음 결제일 확인 필요",
"nextBillingDateEstimated": "다음 예상 결제일: @ (#일 후)",
"nextBillingDateInfo": "다음 결제일: @ (#일 후)",
"nextBillingDatePastRequired": "다음 결제일 확인 필요 (과거 날짜)",
"repeatCountDetected": "@회 결제 감지됨",
"monthlyTotalSubscriptionCost": "이번 달 총 구독 비용",
"todaysExchangeRate": "오늘 기준 환율",
"won": "원",
"estimatedAnnualCost": "예상 연간 구독 비용",
"totalSubscriptionServices": "총 구독 서비스",
"eventDiscountActive": "이벤트 할인 중",
"saving": "절약",
"paymentDueToday": "오늘 결제 예정",
"paymentDueInDays": "@일 후 결제 예정",
"paymentInfoNeeded": "결제일 정보 필요",
"event": "이벤트",
"daysRemaining": "@일 남음",
"exchangeRateFormat": "오늘 기준 환율: @",
"categoryMusic": "음악",
"categoryOttVideo": "OTT(동영상)",
"categoryStorageCloud": "저장/클라우드",
"categoryTelecomInternetTv": "통신 · 인터넷 · TV",
"categoryLifestyle": "생활/라이프스타일",
"categoryShoppingEcommerce": "쇼핑/이커머스",
"categoryProgramming": "프로그래밍",
"categoryCollaborationOffice": "협업/오피스",
"categoryAiService": "AI 서비스",
"categoryOther": "기타",
"monthly": "월간",
"weekly": "주간",
"yearly": "연간",
"colorBlue": "파란색",
"colorGreen": "초록색",
"colorOrange": "주황색",
"colorRed": "빨간색",
"colorPurple": "보라색",
"dateFormatFull": "yyyy년 MM월 dd일",
"dateFormatShort": "MM/dd",
"exchangeRateDisplay": "$1 = @",
"labelServiceName": "서비스명",
"hintServiceName": "예: Netflix, Spotify",
"labelMonthlyExpense": "월 지출",
"labelNextBillingDate": "다음 결제일",
"labelWebsiteUrl": "웹사이트 URL (선택)",
"hintWebsiteUrl": "https://example.com",
"labelEventPrice": "이벤트 가격",
"hintEventPrice": "할인된 가격을 입력하세요",
"labelCategory": "카테고리",
"subscription": "구독",
"movie": "영화",
"music": "음악",
"exercise": "운동",
"shopping": "쇼핑",
"currency": "통화",
"billingCycleMonthly": "매월",
"billingCycleQuarterly": "분기별",
"billingCycleHalfYearly": "반기별",
"billingCycleYearly": "매년",
"websiteInfo": "웹사이트 정보",
"cancelGuide": "해지 안내",
"cancelServiceGuide": "이 서비스를 해지하려면 아래 링크를 통해 해지 페이지로 이동하세요.",
"goToCancelPage": "해지 페이지로 이동",
"urlAutoMatchInfo": "URL이 비어있으면 서비스명을 기반으로 자동 매칭됩니다",
"discountPercent": "@% 할인",
"discountAmountWon": "₩@원 절약",
"discountAmountDollar": "$@ 절약",
"discountAmountYen": "¥@ 절약",
"discountAmountYuan": "¥@ 절약",
"billingCyclePayment": "@ 결제",
"dateSelect": "선택",
"billingCycleSuffix": "",
"serviceInfo": "서비스 정보",
"newSubscriptionAdd": "새 구독 추가",
"enterServiceInfo": "서비스 정보를 입력해주세요",
"addSubscriptionButton": "구독 추가하기",
"serviceNameRequired": "서비스명을 입력해주세요",
"amountRequired": "금액을 입력해주세요",
"subscriptionDetail": "구독 상세",
"enterAmount": "금액을 입력하세요",
"invalidAmount": "올바른 금액을 입력해주세요"
},
"ja": {
"appTitle": "デジタル月額管理者",
"appSubtitle": "サブスクリプションを簡単に管理",
"subscriptionManagement": "サブスクリプション管理",
"addSubscription": "サブスクリプション追加",
"subscriptionName": "サービス名",
"monthlyCost": "月額費用",
"billingCycle": "請求サイクル",
"nextBillingDate": "次回請求日",
"save": "保存",
"cancel": "キャンセル",
"delete": "削除",
"edit": "編集",
"totalSubscriptions": "総サブスクリプション",
"totalMonthlyExpense": "今月の総支出",
"noSubscriptions": "登録されたサブスクリプションはありません",
"addSubscriptionNow": "サブスクリプションを追加",
"paymentReminder": "支払い予定通知",
"expirationReminder": "有効期限通知",
"daysLeft": "日残り",
"categoryManagement": "カテゴリー管理",
"categoryName": "カテゴリー名",
"selectColor": "色を選択",
"selectIcon": "アイコンを選択",
"addCategory": "カテゴリー追加",
"settings": "設定",
"darkMode": "ダークモード",
"language": "言語",
"notifications": "通知",
"appLock": "アプリロック",
"notificationPermission": "通知権限",
"notificationPermissionDesc": "通知を受け取るには権限が必要です",
"requestPermission": "権限をリクエスト",
"paymentNotification": "支払い予定通知",
"paymentNotificationDesc": "支払い予定日に通知を受け取る",
"notificationTiming": "通知タイミング",
"daysBefore": "日前",
"notificationTime": "通知時刻",
"dailyReminder": "毎日リマインダー",
"dailyReminderEnabled": "支払い日まで毎日通知を受け取ります",
"dailyReminderDisabled": "支払い@日前に通知を受け取ります",
"notificationPermissionDenied": "通知権限が拒否されました",
"appInfo": "アプリ情報",
"version": "バージョン",
"appDescription": "デジタル月額管理アプリ",
"developer": "開発者",
"cannotOpenStore": "ストアを開けません",
"lightTheme": "ライト",
"darkTheme": "ダーク",
"oledTheme": "OLEDブラック",
"systemTheme": "システム設定",
"subscriptionAdded": "サブスクリプションが追加されました",
"subscriptionAddedTemplate": "@のサブスクリプションが追加されました。",
"korean": "한국어",
"english": "English",
"japanese": "日本語",
"chinese": "中文",
"oneDayBefore": "1日前",
"twoDaysBefore": "2日前",
"threeDaysBefore": "3日前",
"requiredFieldsError": "すべての必須項目を入力してください",
"subscriptionUpdated": "サブスクリプション情報が更新されました",
"subscriptionDeleted": "@サブスクリプションが削除されました",
"officialCancelPageNotFound": "公式解約ページが見つかりません。Google検索にリダイレクトします。",
"cannotOpenWebsite": "ウェブサイトを開けません",
"noWebsiteInfo": "ウェブサイト情報がありません。ウェブサイトから解約してください。",
"editMode": "編集モード",
"changesAppliedAfterSave": "変更は保存後に適用されます",
"saveChanges": "変更を保存",
"monthlyExpense": "月額支出",
"websiteUrl": "ウェブサイトURL",
"websiteUrlOptional": "ウェブサイトURLオプション",
"eventPrice": "イベント価格",
"eventPriceHint": "割引価格を入力してください",
"eventPriceRequired": "イベント価格を入力してください",
"invalidPrice": "有効な価格を入力してください",
"smsScanLabel": "SMS",
"home": "ホーム",
"analysis": "分析",
"back": "戻る",
"exitApp": "アプリを終了",
"exitAppConfirm": "SubManagerを終了しますか",
"exit": "終了",
"pageNotFound": "ページが見つかりません",
"serviceNameExample": "例Netflix、Spotify",
"urlExample": "https://example.com",
"appLockDesc": "生体認証でアプリをロック",
"unlockWithBiometric": "生体認証でロック解除",
"authenticationFailed": "認証に失敗しました。もう一度お試しください。",
"totalExpenseCopied": "総支出がコピーされました:@",
"smsPermissionRequired": "SMS権限が必要です",
"noSubscriptionSmsFound": "サブスクリプション関連のSMSが見つかりません",
"serviceRecognized": "@サービスが自動的に認識されました",
"smsScanError": "SMSスキャン中にエラーが発生しました@",
"saveError": "保存中にエラーが発生しました:@",
"newSubscriptionSmsNotFound": "新しいサブスクリプションSMSが見つかりません",
"subscriptionAddError": "サブスクリプション追加中にエラーが発生しました:@",
"subscriptionSkipped": "@サブスクリプションをスキップしました",
"allSubscriptionsProcessed": "すべてのサブスクリプションが処理されました",
"websiteUrlExtracted": "ウェブサイトURL自動抽出",
"startDate": "開始日",
"endDate": "終了日",
"mySubscriptions": "マイサブスクリプション",
"monthlyExpenseTitle": "月別支出状況",
"recentSixMonthsTrend": "直近6ヶ月の推移",
"monthlySubscriptionExpense": "月間サブスクリプション支出",
"subscriptionServiceRatio": "サブスクリプションサービス比率",
"monthlyExpenseBasis": "月間支出基準",
"noSubscriptionServices": "サブスクリプションサービスがありません",
"totalExpenseSummary": "総支出サマリー",
"monthlyTotalAmount": "月単位の総額",
"totalExpense": "総支出",
"totalServices": "総サービス",
"servicesUnit": "個",
"averageCost": "平均費用",
"eventDiscountStatus": "イベント割引状況",
"inProgressUnit": "進行中",
"monthlySavingAmount": "月間節約額",
"eventsInProgress": "進行中のイベント",
"discountPercent": "% 割引",
"currencyWon": "ウォン",
"scanningMessages": "SMSメッセージをスキャン中...",
"findingSubscriptions": "サブスクリプションサービスを検索中",
"subscriptionNotFound": "サブスクリプション情報が見つかりません。",
"repeatSubscriptionNotFound": "繰り返し決済されたサブスクリプション情報が見つかりません。",
"newSubscriptionNotFound": "新規サブスクリプションSMSが見つかりません",
"findRepeatSubscriptions": "2回以上決済されたサブスクリプションを検索",
"scanTextMessages": "テキストメッセージをスキャンして、繰り返し決済されたサブスクリプションを自動的に検出します。サービス名と金額を抽出して簡単にサブスクリプションを追加できます。",
"startScanning": "スキャン開始",
"foundSubscription": "サブスクリプションが見つかりました",
"serviceName": "サービス名",
"nextBillingDateLabel": "次回請求日",
"category": "カテゴリー",
"websiteUrlAuto": "ウェブサイトURL自動抽出",
"websiteUrlHint": "ウェブサイトURLを編集するか空にしてください",
"skip": "スキップ",
"add": "追加",
"nextBillingDateRequired": "次回請求日の確認が必要です",
"nextBillingDateEstimated": "次回予想請求日:@#日後)",
"nextBillingDateInfo": "次回請求日:@#日後)",
"nextBillingDatePastRequired": "次回請求日の確認が必要です(過去の日付)",
"repeatCountDetected": "@回の決済が検出されました",
"monthlyTotalSubscriptionCost": "今月の総サブスクリプション費用",
"todaysExchangeRate": "今日の為替レート",
"won": "ウォン",
"estimatedAnnualCost": "予想年間サブスクリプション費用",
"totalSubscriptionServices": "総サブスクリプションサービス",
"eventDiscountActive": "イベント割引中",
"saving": "節約",
"paymentDueToday": "本日支払い予定",
"paymentDueInDays": "@日後に支払い予定",
"paymentInfoNeeded": "支払い日情報が必要",
"event": "イベント",
"daysRemaining": "@日残り",
"exchangeRateFormat": "今日のレート: @",
"categoryMusic": "音楽",
"categoryOttVideo": "OTT(動画)",
"categoryStorageCloud": "ストレージ/クラウド",
"categoryTelecomInternetTv": "通信・インターネット・TV",
"categoryLifestyle": "ライフスタイル",
"categoryShoppingEcommerce": "ショッピング/Eコマース",
"categoryProgramming": "プログラミング",
"categoryCollaborationOffice": "コラボレーション/オフィス",
"categoryAiService": "AIサービス",
"categoryOther": "その他",
"monthly": "月間",
"weekly": "週間",
"yearly": "年間",
"colorBlue": "青",
"colorGreen": "緑",
"colorOrange": "オレンジ",
"colorRed": "赤",
"colorPurple": "紫",
"dateFormatFull": "yyyy年MM月dd日",
"dateFormatShort": "MM/dd",
"exchangeRateDisplay": "$1 = @",
"labelServiceName": "サービス名",
"hintServiceName": "例Netflix、Spotify",
"labelMonthlyExpense": "月額支出",
"labelNextBillingDate": "次回請求日",
"labelWebsiteUrl": "ウェブサイトURLオプション",
"hintWebsiteUrl": "https://example.com",
"labelEventPrice": "イベント価格",
"hintEventPrice": "割引価格を入力してください",
"labelCategory": "カテゴリー",
"subscription": "サブスクリプション",
"movie": "映画",
"music": "音楽",
"exercise": "運動",
"shopping": "ショッピング",
"currency": "通貨",
"billingCycleMonthly": "毎月",
"billingCycleQuarterly": "四半期",
"billingCycleHalfYearly": "半年ごと",
"billingCycleYearly": "年間",
"websiteInfo": "ウェブサイト情報",
"cancelGuide": "解約案内",
"cancelServiceGuide": "このサービスを解約するには、以下のリンクから解約ページに移動してください。",
"goToCancelPage": "解約ページへ移動",
"urlAutoMatchInfo": "URLが空の場合、サービス名に基づいて自動的にマッチングされます",
"discountPercent": "@%割引",
"discountAmountWon": "₩@節約",
"discountAmountDollar": "$@節約",
"discountAmountYen": "¥@節約",
"discountAmountYuan": "¥@節約",
"billingCyclePayment": "@払い",
"dateSelect": "選択",
"billingCycleSuffix": "払い",
"serviceInfo": "サービス情報",
"newSubscriptionAdd": "新規サブスクリプション追加",
"enterServiceInfo": "サービス情報を入力してください",
"addSubscriptionButton": "サブスクリプションを追加",
"serviceNameRequired": "サービス名を入力してください",
"amountRequired": "金額を入力してください",
"subscriptionDetail": "サブスクリプション詳細",
"enterAmount": "金額を入力してください",
"invalidAmount": "正しい金額を入力してください"
},
"zh": {
"appTitle": "数字月租管理器",
"appSubtitle": "轻松管理订阅服务",
"subscriptionManagement": "订阅管理",
"addSubscription": "添加订阅",
"subscriptionName": "服务名称",
"monthlyCost": "每月费用",
"billingCycle": "付款周期",
"nextBillingDate": "下次付款日期",
"save": "保存",
"cancel": "取消",
"delete": "删除",
"edit": "编辑",
"totalSubscriptions": "订阅总数",
"totalMonthlyExpense": "本月总支出",
"noSubscriptions": "没有注册的订阅服务",
"addSubscriptionNow": "添加订阅",
"paymentReminder": "付款提醒",
"expirationReminder": "到期提醒",
"daysLeft": "天剩余",
"categoryManagement": "分类管理",
"categoryName": "分类名称",
"selectColor": "选择颜色",
"selectIcon": "选择图标",
"addCategory": "添加分类",
"settings": "设置",
"darkMode": "深色模式",
"language": "语言",
"notifications": "通知",
"appLock": "应用锁定",
"notificationPermission": "通知权限",
"notificationPermissionDesc": "需要权限才能接收通知",
"requestPermission": "请求权限",
"paymentNotification": "付款到期通知",
"paymentNotificationDesc": "在付款到期日收到通知",
"notificationTiming": "通知时间",
"daysBefore": "天前",
"notificationTime": "通知时间",
"dailyReminder": "每日提醒",
"dailyReminderEnabled": "直到付款日期每天接收通知",
"dailyReminderDisabled": "在付款@天前接收通知",
"notificationPermissionDenied": "通知权限被拒绝",
"appInfo": "应用信息",
"version": "版本",
"appDescription": "数字月租管理应用",
"developer": "开发者",
"cannotOpenStore": "无法打开商店",
"lightTheme": "浅色",
"darkTheme": "深色",
"oledTheme": "OLED黑色",
"systemTheme": "系统默认",
"subscriptionAdded": "订阅已添加",
"subscriptionAddedTemplate": "@订阅已添加。",
"korean": "한국어",
"english": "English",
"japanese": "日本語",
"chinese": "中文",
"oneDayBefore": "1天前",
"twoDaysBefore": "2天前",
"threeDaysBefore": "3天前",
"requiredFieldsError": "请填写所有必填项",
"subscriptionUpdated": "订阅信息已更新",
"subscriptionDeleted": "@订阅已删除",
"officialCancelPageNotFound": "找不到官方取消页面。重定向到Google搜索。",
"cannotOpenWebsite": "无法打开网站",
"noWebsiteInfo": "没有网站信息。请通过网站取消。",
"editMode": "编辑模式",
"changesAppliedAfterSave": "更改将在保存后应用",
"saveChanges": "保存更改",
"monthlyExpense": "每月支出",
"websiteUrl": "网站URL",
"websiteUrlOptional": "网站URL可选",
"eventPrice": "活动价格",
"eventPriceHint": "输入折扣价格",
"eventPriceRequired": "请输入活动价格",
"invalidPrice": "请输入有效的价格",
"smsScanLabel": "短信",
"home": "主页",
"analysis": "分析",
"back": "返回",
"exitApp": "退出应用",
"exitAppConfirm": "确定要退出SubManager吗",
"exit": "退出",
"pageNotFound": "找不到页面",
"serviceNameExample": "例如Netflix、Spotify",
"urlExample": "https://example.com",
"appLockDesc": "使用生物识别锁定应用",
"unlockWithBiometric": "使用生物识别解锁",
"authenticationFailed": "认证失败。请重试。",
"totalExpenseCopied": "总支出已复制:@",
"smsPermissionRequired": "需要短信权限",
"noSubscriptionSmsFound": "未找到订阅相关的短信",
"serviceRecognized": "@服务已自动识别",
"smsScanError": "短信扫描时出错:@",
"saveError": "保存时出错:@",
"newSubscriptionSmsNotFound": "未找到新订阅短信",
"subscriptionAddError": "添加订阅时出错:@",
"subscriptionSkipped": "已跳过@订阅",
"allSubscriptionsProcessed": "所有订阅已处理",
"websiteUrlExtracted": "网站URL自动提取",
"startDate": "开始日期",
"endDate": "结束日期",
"mySubscriptions": "我的订阅",
"monthlyExpenseTitle": "月度支出状况",
"recentSixMonthsTrend": "最近6个月趋势",
"monthlySubscriptionExpense": "月度订阅支出",
"subscriptionServiceRatio": "订阅服务比例",
"monthlyExpenseBasis": "基于月度支出",
"noSubscriptionServices": "没有订阅服务",
"totalExpenseSummary": "总支出摘要",
"monthlyTotalAmount": "月度总额",
"totalExpense": "总支出",
"totalServices": "总服务",
"servicesUnit": "个",
"averageCost": "平均费用",
"eventDiscountStatus": "活动折扣状态",
"inProgressUnit": "进行中",
"monthlySavingAmount": "月度节省金额",
"eventsInProgress": "进行中的活动",
"discountPercent": "% 折扣",
"currencyWon": "韩元",
"scanningMessages": "正在扫描短信...",
"findingSubscriptions": "正在查找订阅服务",
"subscriptionNotFound": "未找到订阅信息。",
"repeatSubscriptionNotFound": "未找到重复付款的订阅信息。",
"newSubscriptionNotFound": "未找到新订阅短信",
"findRepeatSubscriptions": "查找支付2次以上的订阅",
"scanTextMessages": "扫描短信以自动查找重复付款的订阅。可以提取服务名称和金额,轻松添加订阅。",
"startScanning": "开始扫描",
"foundSubscription": "找到订阅",
"serviceName": "服务名称",
"nextBillingDateLabel": "下次付款日期",
"category": "类别",
"websiteUrlAuto": "网站URL自动提取",
"websiteUrlHint": "编辑网站URL或留空",
"skip": "跳过",
"add": "添加",
"nextBillingDateRequired": "需要确认下次付款日期",
"nextBillingDateEstimated": "预计下次付款日期:@#天后)",
"nextBillingDateInfo": "下次付款日期:@#天后)",
"nextBillingDatePastRequired": "需要确认下次付款日期(过去日期)",
"repeatCountDetected": "检测到@次付款",
"monthlyTotalSubscriptionCost": "本月总订阅费用",
"todaysExchangeRate": "今日汇率",
"won": "韩元",
"estimatedAnnualCost": "预计年度订阅费用",
"totalSubscriptionServices": "总订阅服务",
"eventDiscountActive": "活动折扣中",
"saving": "节省",
"paymentDueToday": "今日付款到期",
"paymentDueInDays": "@天后付款到期",
"paymentInfoNeeded": "需要付款日期信息",
"event": "活动",
"daysRemaining": "剩余@天",
"exchangeRateFormat": "今日汇率: @",
"categoryMusic": "音乐",
"categoryOttVideo": "OTT(视频)",
"categoryStorageCloud": "存储/云",
"categoryTelecomInternetTv": "电信·互联网·电视",
"categoryLifestyle": "生活方式",
"categoryShoppingEcommerce": "购物/电子商务",
"categoryProgramming": "编程",
"categoryCollaborationOffice": "协作/办公",
"categoryAiService": "AI服务",
"categoryOther": "其他",
"monthly": "月付",
"weekly": "周付",
"yearly": "年付",
"colorBlue": "蓝色",
"colorGreen": "绿色",
"colorOrange": "橙色",
"colorRed": "红色",
"colorPurple": "紫色",
"dateFormatFull": "yyyy年MM月dd日",
"dateFormatShort": "MM/dd",
"exchangeRateDisplay": "$1 = @",
"labelServiceName": "服务名称",
"hintServiceName": "例如Netflix、Spotify",
"labelMonthlyExpense": "每月支出",
"labelNextBillingDate": "下次付款日期",
"labelWebsiteUrl": "网站URL可选",
"hintWebsiteUrl": "https://example.com",
"labelEventPrice": "活动价格",
"hintEventPrice": "输入折扣价格",
"labelCategory": "类别",
"subscription": "订阅",
"movie": "电影",
"music": "音乐",
"exercise": "运动",
"shopping": "购物",
"currency": "货币",
"billingCycleMonthly": "每月",
"billingCycleQuarterly": "每季度",
"billingCycleHalfYearly": "每半年",
"billingCycleYearly": "每年",
"websiteInfo": "网站信息",
"cancelGuide": "取消指南",
"cancelServiceGuide": "要取消此服务,请通过以下链接转到取消页面。",
"goToCancelPage": "前往取消页面",
"urlAutoMatchInfo": "如果URL为空将根据服务名称自动匹配",
"discountPercent": "@%折扣",
"discountAmountWon": "节省₩@",
"discountAmountDollar": "节省$@",
"discountAmountYen": "节省¥@",
"discountAmountYuan": "节省¥@",
"billingCyclePayment": "@付款",
"dateSelect": "选择",
"billingCycleSuffix": "付款",
"serviceInfo": "服务信息",
"newSubscriptionAdd": "添加新订阅",
"enterServiceInfo": "输入服务信息",
"addSubscriptionButton": "添加订阅",
"serviceNameRequired": "请输入服务名称",
"amountRequired": "请输入金额",
"subscriptionDetail": "订阅详情",
"enterAmount": "请输入金额",
"invalidAmount": "请输入有效的金额"
}
}