style: apply dart format across project
This commit is contained in:
@@ -14,22 +14,21 @@ class AppLocalizations {
|
||||
|
||||
// JSON 파일에서 번역 데이터 로드
|
||||
Future<void> load() async {
|
||||
String jsonString =
|
||||
await rootBundle.loadString('assets/data/text.json');
|
||||
String jsonString = await rootBundle.loadString('assets/data/text.json');
|
||||
Map<String, dynamic> jsonMap = json.decode(jsonString);
|
||||
_localizedStrings = jsonMap[locale.languageCode];
|
||||
}
|
||||
|
||||
String get appTitle => _localizedStrings['appTitle'] ?? 'SubManager';
|
||||
String get appSubtitle => _localizedStrings['appSubtitle'] ?? 'Manage subscriptions easily';
|
||||
String get appSubtitle =>
|
||||
_localizedStrings['appSubtitle'] ?? 'Manage subscriptions easily';
|
||||
String get subscriptionManagement =>
|
||||
_localizedStrings['subscriptionManagement'] ?? 'Subscription Management';
|
||||
String get addSubscription =>
|
||||
_localizedStrings['addSubscription'] ?? 'Add Subscription';
|
||||
String get subscriptionName =>
|
||||
_localizedStrings['subscriptionName'] ?? 'Service Name';
|
||||
String get monthlyCost =>
|
||||
_localizedStrings['monthlyCost'] ?? 'Monthly Cost';
|
||||
String get monthlyCost => _localizedStrings['monthlyCost'] ?? 'Monthly Cost';
|
||||
String get billingCycle =>
|
||||
_localizedStrings['billingCycle'] ?? 'Billing Cycle';
|
||||
String get nextBillingDate =>
|
||||
@@ -55,12 +54,9 @@ class AppLocalizations {
|
||||
_localizedStrings['categoryManagement'] ?? 'Category Management';
|
||||
String get categoryName =>
|
||||
_localizedStrings['categoryName'] ?? 'Category Name';
|
||||
String get selectColor =>
|
||||
_localizedStrings['selectColor'] ?? 'Select Color';
|
||||
String get selectIcon =>
|
||||
_localizedStrings['selectIcon'] ?? 'Select Icon';
|
||||
String get addCategory =>
|
||||
_localizedStrings['addCategory'] ?? 'Add Category';
|
||||
String get selectColor => _localizedStrings['selectColor'] ?? 'Select Color';
|
||||
String get selectIcon => _localizedStrings['selectIcon'] ?? 'Select Icon';
|
||||
String get addCategory => _localizedStrings['addCategory'] ?? 'Add Category';
|
||||
String get settings => _localizedStrings['settings'] ?? 'Settings';
|
||||
String get darkMode => _localizedStrings['darkMode'] ?? 'Dark Mode';
|
||||
String get language => _localizedStrings['language'] ?? 'Language';
|
||||
@@ -71,13 +67,15 @@ class AppLocalizations {
|
||||
String get notificationPermission =>
|
||||
_localizedStrings['notificationPermission'] ?? 'Notification Permission';
|
||||
String get notificationPermissionDesc =>
|
||||
_localizedStrings['notificationPermissionDesc'] ?? 'Permission is required to receive notifications';
|
||||
_localizedStrings['notificationPermissionDesc'] ??
|
||||
'Permission is required to receive notifications';
|
||||
String get requestPermission =>
|
||||
_localizedStrings['requestPermission'] ?? 'Request Permission';
|
||||
String get paymentNotification =>
|
||||
_localizedStrings['paymentNotification'] ?? 'Payment Due Notification';
|
||||
String get paymentNotificationDesc =>
|
||||
_localizedStrings['paymentNotificationDesc'] ?? 'Receive notification on payment due date';
|
||||
_localizedStrings['paymentNotificationDesc'] ??
|
||||
'Receive notification on payment due date';
|
||||
String get notificationTiming =>
|
||||
_localizedStrings['notificationTiming'] ?? 'Notification Timing';
|
||||
String get notificationTime =>
|
||||
@@ -85,11 +83,14 @@ class AppLocalizations {
|
||||
String get dailyReminder =>
|
||||
_localizedStrings['dailyReminder'] ?? 'Daily Reminder';
|
||||
String get dailyReminderEnabled =>
|
||||
_localizedStrings['dailyReminderEnabled'] ?? 'Receive daily notifications until payment date';
|
||||
_localizedStrings['dailyReminderEnabled'] ??
|
||||
'Receive daily notifications until payment date';
|
||||
String get dailyReminderDisabled =>
|
||||
_localizedStrings['dailyReminderDisabled'] ?? 'Receive notification @ day(s) before payment';
|
||||
_localizedStrings['dailyReminderDisabled'] ??
|
||||
'Receive notification @ day(s) before payment';
|
||||
String get notificationPermissionDenied =>
|
||||
_localizedStrings['notificationPermissionDenied'] ?? 'Notification permission denied';
|
||||
_localizedStrings['notificationPermissionDenied'] ??
|
||||
'Notification permission denied';
|
||||
// 앱 정보
|
||||
String get appInfo => _localizedStrings['appInfo'] ?? 'App Info';
|
||||
String get version => _localizedStrings['version'] ?? 'Version';
|
||||
@@ -102,7 +103,8 @@ class AppLocalizations {
|
||||
String get lightTheme => _localizedStrings['lightTheme'] ?? 'Light';
|
||||
String get darkTheme => _localizedStrings['darkTheme'] ?? 'Dark';
|
||||
String get oledTheme => _localizedStrings['oledTheme'] ?? 'OLED Black';
|
||||
String get systemTheme => _localizedStrings['systemTheme'] ?? 'System Default';
|
||||
String get systemTheme =>
|
||||
_localizedStrings['systemTheme'] ?? 'System Default';
|
||||
// 기타 메시지
|
||||
String get subscriptionAdded =>
|
||||
_localizedStrings['subscriptionAdded'] ?? 'Subscription added';
|
||||
@@ -112,127 +114,198 @@ class AppLocalizations {
|
||||
String get japanese => _localizedStrings['japanese'] ?? '日本語';
|
||||
String get chinese => _localizedStrings['chinese'] ?? '中文';
|
||||
// 날짜
|
||||
String get oneDayBefore => _localizedStrings['oneDayBefore'] ?? '1 day before';
|
||||
String get twoDaysBefore => _localizedStrings['twoDaysBefore'] ?? '2 days before';
|
||||
String get threeDaysBefore => _localizedStrings['threeDaysBefore'] ?? '3 days before';
|
||||
String get oneDayBefore =>
|
||||
_localizedStrings['oneDayBefore'] ?? '1 day before';
|
||||
String get twoDaysBefore =>
|
||||
_localizedStrings['twoDaysBefore'] ?? '2 days before';
|
||||
String get threeDaysBefore =>
|
||||
_localizedStrings['threeDaysBefore'] ?? '3 days before';
|
||||
// 추가 메시지
|
||||
String get requiredFieldsError => _localizedStrings['requiredFieldsError'] ?? 'Please fill in all required fields';
|
||||
String get subscriptionUpdated => _localizedStrings['subscriptionUpdated'] ?? 'Subscription information has been updated';
|
||||
String get officialCancelPageNotFound => _localizedStrings['officialCancelPageNotFound'] ?? 'Official cancellation page not found. Redirecting to Google search.';
|
||||
String get cannotOpenWebsite => _localizedStrings['cannotOpenWebsite'] ?? 'Cannot open website';
|
||||
String get noWebsiteInfo => _localizedStrings['noWebsiteInfo'] ?? 'No website information available. Please cancel through the website.';
|
||||
String get requiredFieldsError =>
|
||||
_localizedStrings['requiredFieldsError'] ??
|
||||
'Please fill in all required fields';
|
||||
String get subscriptionUpdated =>
|
||||
_localizedStrings['subscriptionUpdated'] ??
|
||||
'Subscription information has been updated';
|
||||
String get officialCancelPageNotFound =>
|
||||
_localizedStrings['officialCancelPageNotFound'] ??
|
||||
'Official cancellation page not found. Redirecting to Google search.';
|
||||
String get cannotOpenWebsite =>
|
||||
_localizedStrings['cannotOpenWebsite'] ?? 'Cannot open website';
|
||||
String get noWebsiteInfo =>
|
||||
_localizedStrings['noWebsiteInfo'] ??
|
||||
'No website information available. Please cancel through the website.';
|
||||
String get editMode => _localizedStrings['editMode'] ?? 'Edit Mode';
|
||||
String get changesAppliedAfterSave => _localizedStrings['changesAppliedAfterSave'] ?? 'Changes will be applied after saving';
|
||||
String get changesAppliedAfterSave =>
|
||||
_localizedStrings['changesAppliedAfterSave'] ??
|
||||
'Changes will be applied after saving';
|
||||
String get saveChanges => _localizedStrings['saveChanges'] ?? 'Save Changes';
|
||||
String get monthlyExpense => _localizedStrings['monthlyExpense'] ?? 'Monthly Expense';
|
||||
String get monthlyExpense =>
|
||||
_localizedStrings['monthlyExpense'] ?? 'Monthly Expense';
|
||||
String get websiteUrl => _localizedStrings['websiteUrl'] ?? 'Website URL';
|
||||
String get websiteUrlOptional => _localizedStrings['websiteUrlOptional'] ?? 'Website URL (Optional)';
|
||||
String get websiteUrlOptional =>
|
||||
_localizedStrings['websiteUrlOptional'] ?? 'Website URL (Optional)';
|
||||
String get eventPrice => _localizedStrings['eventPrice'] ?? 'Event Price';
|
||||
String get eventPriceHint => _localizedStrings['eventPriceHint'] ?? 'Enter discounted price';
|
||||
String get eventPriceRequired => _localizedStrings['eventPriceRequired'] ?? 'Please enter event price';
|
||||
String get invalidPrice => _localizedStrings['invalidPrice'] ?? 'Please enter a valid price';
|
||||
String get eventPriceHint =>
|
||||
_localizedStrings['eventPriceHint'] ?? 'Enter discounted price';
|
||||
String get eventPriceRequired =>
|
||||
_localizedStrings['eventPriceRequired'] ?? 'Please enter event price';
|
||||
String get invalidPrice =>
|
||||
_localizedStrings['invalidPrice'] ?? 'Please enter a valid price';
|
||||
String get smsScanLabel => _localizedStrings['smsScanLabel'] ?? 'SMS';
|
||||
String get home => _localizedStrings['home'] ?? 'Home';
|
||||
String get analysis => _localizedStrings['analysis'] ?? 'Analysis';
|
||||
String get back => _localizedStrings['back'] ?? 'Back';
|
||||
String get exitApp => _localizedStrings['exitApp'] ?? 'Exit App';
|
||||
String get exitAppConfirm => _localizedStrings['exitAppConfirm'] ?? 'Are you sure you want to exit SubManager?';
|
||||
String get exitAppConfirm =>
|
||||
_localizedStrings['exitAppConfirm'] ??
|
||||
'Are you sure you want to exit SubManager?';
|
||||
String get exit => _localizedStrings['exit'] ?? 'Exit';
|
||||
String get pageNotFound => _localizedStrings['pageNotFound'] ?? 'Page not found';
|
||||
String get serviceNameExample => _localizedStrings['serviceNameExample'] ?? 'e.g. Netflix, Spotify';
|
||||
String get urlExample => _localizedStrings['urlExample'] ?? 'https://example.com';
|
||||
String get appLockDesc => _localizedStrings['appLockDesc'] ?? 'App lock with biometric authentication';
|
||||
String get unlockWithBiometric => _localizedStrings['unlockWithBiometric'] ?? 'Unlock with biometric authentication';
|
||||
String get authenticationFailed => _localizedStrings['authenticationFailed'] ?? 'Authentication failed. Please try again.';
|
||||
String get smsPermissionRequired => _localizedStrings['smsPermissionRequired'] ?? 'SMS permission required';
|
||||
String get noSubscriptionSmsFound => _localizedStrings['noSubscriptionSmsFound'] ?? 'No subscription related SMS found';
|
||||
String get smsScanError => _localizedStrings['smsScanError'] ?? 'Error occurred during SMS scan';
|
||||
String get saveError => _localizedStrings['saveError'] ?? 'Error occurred while saving';
|
||||
String get newSubscriptionSmsNotFound => _localizedStrings['newSubscriptionSmsNotFound'] ?? 'No new subscription SMS found';
|
||||
String get subscriptionAddError => _localizedStrings['subscriptionAddError'] ?? 'Error adding subscription';
|
||||
String get allSubscriptionsProcessed => _localizedStrings['allSubscriptionsProcessed'] ?? 'All subscriptions have been processed.';
|
||||
String get websiteUrlExtracted => _localizedStrings['websiteUrlExtracted'] ?? 'Website URL (Auto-extracted)';
|
||||
String get pageNotFound =>
|
||||
_localizedStrings['pageNotFound'] ?? 'Page not found';
|
||||
String get serviceNameExample =>
|
||||
_localizedStrings['serviceNameExample'] ?? 'e.g. Netflix, Spotify';
|
||||
String get urlExample =>
|
||||
_localizedStrings['urlExample'] ?? 'https://example.com';
|
||||
String get appLockDesc =>
|
||||
_localizedStrings['appLockDesc'] ??
|
||||
'App lock with biometric authentication';
|
||||
String get unlockWithBiometric =>
|
||||
_localizedStrings['unlockWithBiometric'] ??
|
||||
'Unlock with biometric authentication';
|
||||
String get authenticationFailed =>
|
||||
_localizedStrings['authenticationFailed'] ??
|
||||
'Authentication failed. Please try again.';
|
||||
String get smsPermissionRequired =>
|
||||
_localizedStrings['smsPermissionRequired'] ?? 'SMS permission required';
|
||||
String get noSubscriptionSmsFound =>
|
||||
_localizedStrings['noSubscriptionSmsFound'] ??
|
||||
'No subscription related SMS found';
|
||||
String get smsScanError =>
|
||||
_localizedStrings['smsScanError'] ?? 'Error occurred during SMS scan';
|
||||
String get saveError =>
|
||||
_localizedStrings['saveError'] ?? 'Error occurred while saving';
|
||||
String get newSubscriptionSmsNotFound =>
|
||||
_localizedStrings['newSubscriptionSmsNotFound'] ??
|
||||
'No new subscription SMS found';
|
||||
String get subscriptionAddError =>
|
||||
_localizedStrings['subscriptionAddError'] ?? 'Error adding subscription';
|
||||
String get allSubscriptionsProcessed =>
|
||||
_localizedStrings['allSubscriptionsProcessed'] ??
|
||||
'All subscriptions have been processed.';
|
||||
String get websiteUrlExtracted =>
|
||||
_localizedStrings['websiteUrlExtracted'] ??
|
||||
'Website URL (Auto-extracted)';
|
||||
String get startDate => _localizedStrings['startDate'] ?? 'Start Date';
|
||||
String get endDate => _localizedStrings['endDate'] ?? 'End Date';
|
||||
|
||||
|
||||
// 새로 추가된 항목들
|
||||
String get monthlyTotalSubscriptionCost => _localizedStrings['monthlyTotalSubscriptionCost'] ?? 'Total Monthly Subscription Cost';
|
||||
String get todaysExchangeRate => _localizedStrings['todaysExchangeRate'] ?? 'Today\'s Exchange Rate';
|
||||
String get monthlyTotalSubscriptionCost =>
|
||||
_localizedStrings['monthlyTotalSubscriptionCost'] ??
|
||||
'Total Monthly Subscription Cost';
|
||||
String get todaysExchangeRate =>
|
||||
_localizedStrings['todaysExchangeRate'] ?? 'Today\'s Exchange Rate';
|
||||
String get won => _localizedStrings['won'] ?? 'KRW';
|
||||
String get estimatedAnnualCost => _localizedStrings['estimatedAnnualCost'] ?? 'Estimated Annual Cost';
|
||||
String get totalSubscriptionServices => _localizedStrings['totalSubscriptionServices'] ?? 'Total Subscription Services';
|
||||
String get estimatedAnnualCost =>
|
||||
_localizedStrings['estimatedAnnualCost'] ?? 'Estimated Annual Cost';
|
||||
String get totalSubscriptionServices =>
|
||||
_localizedStrings['totalSubscriptionServices'] ??
|
||||
'Total Subscription Services';
|
||||
String get services => _localizedStrings['services'] ?? 'services';
|
||||
String get eventDiscountActive => _localizedStrings['eventDiscountActive'] ?? 'Event Discount Active';
|
||||
String get eventDiscountActive =>
|
||||
_localizedStrings['eventDiscountActive'] ?? 'Event Discount Active';
|
||||
String get saving => _localizedStrings['saving'] ?? 'Saving';
|
||||
String get paymentDueToday => _localizedStrings['paymentDueToday'] ?? 'Payment Due Today';
|
||||
String get paymentInfoNeeded => _localizedStrings['paymentInfoNeeded'] ?? 'Payment Info Needed';
|
||||
String get paymentDueToday =>
|
||||
_localizedStrings['paymentDueToday'] ?? 'Payment Due Today';
|
||||
String get paymentInfoNeeded =>
|
||||
_localizedStrings['paymentInfoNeeded'] ?? 'Payment Info Needed';
|
||||
String get event => _localizedStrings['event'] ?? 'Event';
|
||||
|
||||
|
||||
// 카테고리 getter들
|
||||
String get categoryMusic => _localizedStrings['categoryMusic'] ?? 'Music';
|
||||
String get categoryOttVideo => _localizedStrings['categoryOttVideo'] ?? 'OTT(Video)';
|
||||
String get categoryStorageCloud => _localizedStrings['categoryStorageCloud'] ?? 'Storage/Cloud';
|
||||
String get categoryTelecomInternetTv => _localizedStrings['categoryTelecomInternetTv'] ?? 'Telecom · Internet · TV';
|
||||
String get categoryLifestyle => _localizedStrings['categoryLifestyle'] ?? 'Lifestyle';
|
||||
String get categoryShoppingEcommerce => _localizedStrings['categoryShoppingEcommerce'] ?? 'Shopping/E-commerce';
|
||||
String get categoryProgramming => _localizedStrings['categoryProgramming'] ?? 'Programming';
|
||||
String get categoryCollaborationOffice => _localizedStrings['categoryCollaborationOffice'] ?? 'Collaboration/Office';
|
||||
String get categoryAiService => _localizedStrings['categoryAiService'] ?? 'AI Service';
|
||||
String get categoryOttVideo =>
|
||||
_localizedStrings['categoryOttVideo'] ?? 'OTT(Video)';
|
||||
String get categoryStorageCloud =>
|
||||
_localizedStrings['categoryStorageCloud'] ?? 'Storage/Cloud';
|
||||
String get categoryTelecomInternetTv =>
|
||||
_localizedStrings['categoryTelecomInternetTv'] ??
|
||||
'Telecom · Internet · TV';
|
||||
String get categoryLifestyle =>
|
||||
_localizedStrings['categoryLifestyle'] ?? 'Lifestyle';
|
||||
String get categoryShoppingEcommerce =>
|
||||
_localizedStrings['categoryShoppingEcommerce'] ?? 'Shopping/E-commerce';
|
||||
String get categoryProgramming =>
|
||||
_localizedStrings['categoryProgramming'] ?? 'Programming';
|
||||
String get categoryCollaborationOffice =>
|
||||
_localizedStrings['categoryCollaborationOffice'] ??
|
||||
'Collaboration/Office';
|
||||
String get categoryAiService =>
|
||||
_localizedStrings['categoryAiService'] ?? 'AI Service';
|
||||
String get categoryOther => _localizedStrings['categoryOther'] ?? 'Other';
|
||||
|
||||
|
||||
// 동적 메시지 생성 메서드
|
||||
String daysBefore(int days) {
|
||||
return '$days${_localizedStrings['daysBefore'] ?? 'day(s) before'}';
|
||||
}
|
||||
|
||||
|
||||
String dailyReminderDisabledWithDays(int days) {
|
||||
final template = _localizedStrings['dailyReminderDisabled'] ?? 'Receive notification @ day(s) before payment';
|
||||
final template = _localizedStrings['dailyReminderDisabled'] ??
|
||||
'Receive notification @ day(s) before payment';
|
||||
return template.replaceAll('@', days.toString());
|
||||
}
|
||||
|
||||
|
||||
String subscriptionAddedWithName(String serviceName) {
|
||||
final template = _localizedStrings['subscriptionAddedTemplate'] ?? '@ 구독이 추가되었습니다.';
|
||||
final template =
|
||||
_localizedStrings['subscriptionAddedTemplate'] ?? '@ 구독이 추가되었습니다.';
|
||||
return template.replaceAll('@', serviceName);
|
||||
}
|
||||
|
||||
|
||||
String subscriptionDeleted(String serviceName) {
|
||||
final template = _localizedStrings['subscriptionDeleted'] ?? '@ subscription has been deleted';
|
||||
final template = _localizedStrings['subscriptionDeleted'] ??
|
||||
'@ subscription has been deleted';
|
||||
return template.replaceAll('@', serviceName);
|
||||
}
|
||||
|
||||
|
||||
String totalExpenseCopied(String amount) {
|
||||
final template = _localizedStrings['totalExpenseCopied'] ?? 'Total expense copied: @';
|
||||
final template =
|
||||
_localizedStrings['totalExpenseCopied'] ?? 'Total expense copied: @';
|
||||
return template.replaceAll('@', amount);
|
||||
}
|
||||
|
||||
|
||||
String serviceRecognized(String serviceName) {
|
||||
final template = _localizedStrings['serviceRecognized'] ?? '@ service has been recognized automatically.';
|
||||
final template = _localizedStrings['serviceRecognized'] ??
|
||||
'@ service has been recognized automatically.';
|
||||
return template.replaceAll('@', serviceName);
|
||||
}
|
||||
|
||||
|
||||
String smsScanErrorWithMessage(String error) {
|
||||
final template = _localizedStrings['smsScanError'] ?? 'Error occurred during SMS scan: @';
|
||||
final template = _localizedStrings['smsScanError'] ??
|
||||
'Error occurred during SMS scan: @';
|
||||
return template.replaceAll('@', error);
|
||||
}
|
||||
|
||||
|
||||
String saveErrorWithMessage(String error) {
|
||||
final template = _localizedStrings['saveError'] ?? 'Error occurred while saving: @';
|
||||
final template =
|
||||
_localizedStrings['saveError'] ?? 'Error occurred while saving: @';
|
||||
return template.replaceAll('@', error);
|
||||
}
|
||||
|
||||
|
||||
String subscriptionAddErrorWithMessage(String error) {
|
||||
final template = _localizedStrings['subscriptionAddError'] ?? 'Error adding subscription: @';
|
||||
final template = _localizedStrings['subscriptionAddError'] ??
|
||||
'Error adding subscription: @';
|
||||
return template.replaceAll('@', error);
|
||||
}
|
||||
|
||||
|
||||
String subscriptionSkipped(String serviceName) {
|
||||
final template = _localizedStrings['subscriptionSkipped'] ?? '@ subscription skipped.';
|
||||
final template =
|
||||
_localizedStrings['subscriptionSkipped'] ?? '@ subscription skipped.';
|
||||
return template.replaceAll('@', serviceName);
|
||||
}
|
||||
|
||||
|
||||
// 홈화면 관련
|
||||
String get mySubscriptions => _localizedStrings['mySubscriptions'] ?? 'My Subscriptions';
|
||||
|
||||
String get mySubscriptions =>
|
||||
_localizedStrings['mySubscriptions'] ?? 'My Subscriptions';
|
||||
|
||||
String subscriptionCount(int count) {
|
||||
if (locale.languageCode == 'ko') {
|
||||
return '${count}개';
|
||||
@@ -244,58 +317,99 @@ class AppLocalizations {
|
||||
return count.toString();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// 분석화면 관련
|
||||
String get monthlyExpenseTitle => _localizedStrings['monthlyExpenseTitle'] ?? 'Monthly Expense Status';
|
||||
String get recentSixMonthsTrend => _localizedStrings['recentSixMonthsTrend'] ?? 'Recent 6 months trend';
|
||||
String get monthlySubscriptionExpense => _localizedStrings['monthlySubscriptionExpense'] ?? 'Monthly subscription expense';
|
||||
String get subscriptionServiceRatio => _localizedStrings['subscriptionServiceRatio'] ?? 'Subscription Service Ratio';
|
||||
String get monthlyExpenseBasis => _localizedStrings['monthlyExpenseBasis'] ?? 'Based on monthly expense';
|
||||
String get noSubscriptionServices => _localizedStrings['noSubscriptionServices'] ?? 'No subscription services';
|
||||
String get totalExpenseSummary => _localizedStrings['totalExpenseSummary'] ?? 'Total Expense Summary';
|
||||
String get monthlyTotalAmount => _localizedStrings['monthlyTotalAmount'] ?? 'Monthly Total Amount';
|
||||
String get totalExpense => _localizedStrings['totalExpense'] ?? 'Total Expense';
|
||||
String get totalServices => _localizedStrings['totalServices'] ?? 'Total Services';
|
||||
String get monthlyExpenseTitle =>
|
||||
_localizedStrings['monthlyExpenseTitle'] ?? 'Monthly Expense Status';
|
||||
String get recentSixMonthsTrend =>
|
||||
_localizedStrings['recentSixMonthsTrend'] ?? 'Recent 6 months trend';
|
||||
String get monthlySubscriptionExpense =>
|
||||
_localizedStrings['monthlySubscriptionExpense'] ??
|
||||
'Monthly subscription expense';
|
||||
String get subscriptionServiceRatio =>
|
||||
_localizedStrings['subscriptionServiceRatio'] ??
|
||||
'Subscription Service Ratio';
|
||||
String get monthlyExpenseBasis =>
|
||||
_localizedStrings['monthlyExpenseBasis'] ?? 'Based on monthly expense';
|
||||
String get noSubscriptionServices =>
|
||||
_localizedStrings['noSubscriptionServices'] ?? 'No subscription services';
|
||||
String get totalExpenseSummary =>
|
||||
_localizedStrings['totalExpenseSummary'] ?? 'Total Expense Summary';
|
||||
String get monthlyTotalAmount =>
|
||||
_localizedStrings['monthlyTotalAmount'] ?? 'Monthly Total Amount';
|
||||
String get totalExpense =>
|
||||
_localizedStrings['totalExpense'] ?? 'Total Expense';
|
||||
String get totalServices =>
|
||||
_localizedStrings['totalServices'] ?? 'Total Services';
|
||||
String get servicesUnit => _localizedStrings['servicesUnit'] ?? 'services';
|
||||
String get averageCost => _localizedStrings['averageCost'] ?? 'Average Cost';
|
||||
String get eventDiscountStatus => _localizedStrings['eventDiscountStatus'] ?? 'Event Discount Status';
|
||||
String get inProgressUnit => _localizedStrings['inProgressUnit'] ?? 'in progress';
|
||||
String get monthlySavingAmount => _localizedStrings['monthlySavingAmount'] ?? 'Monthly Saving Amount';
|
||||
String get eventsInProgress => _localizedStrings['eventsInProgress'] ?? 'Events in Progress';
|
||||
String get discountPercent => _localizedStrings['discountPercent'] ?? '% discount';
|
||||
String get eventDiscountStatus =>
|
||||
_localizedStrings['eventDiscountStatus'] ?? 'Event Discount Status';
|
||||
String get inProgressUnit =>
|
||||
_localizedStrings['inProgressUnit'] ?? 'in progress';
|
||||
String get monthlySavingAmount =>
|
||||
_localizedStrings['monthlySavingAmount'] ?? 'Monthly Saving Amount';
|
||||
String get eventsInProgress =>
|
||||
_localizedStrings['eventsInProgress'] ?? 'Events in Progress';
|
||||
String get discountPercent =>
|
||||
_localizedStrings['discountPercent'] ?? '% discount';
|
||||
String get currencyWon => _localizedStrings['currencyWon'] ?? 'KRW';
|
||||
|
||||
|
||||
// SMS 스캔 관련
|
||||
String get scanningMessages => _localizedStrings['scanningMessages'] ?? 'Scanning SMS messages...';
|
||||
String get findingSubscriptions => _localizedStrings['findingSubscriptions'] ?? 'Finding subscription services';
|
||||
String get subscriptionNotFound => _localizedStrings['subscriptionNotFound'] ?? 'Subscription information not found.';
|
||||
String get repeatSubscriptionNotFound => _localizedStrings['repeatSubscriptionNotFound'] ?? 'No repeated subscription information found.';
|
||||
String get newSubscriptionNotFound => _localizedStrings['newSubscriptionNotFound'] ?? 'No new subscription SMS found';
|
||||
String get findRepeatSubscriptions => _localizedStrings['findRepeatSubscriptions'] ?? 'Find subscriptions paid 2+ times';
|
||||
String get scanTextMessages => _localizedStrings['scanTextMessages'] ?? 'Scan text messages to automatically find repeatedly paid subscriptions. Service names and amounts can be extracted for easy subscription addition.';
|
||||
String get startScanning => _localizedStrings['startScanning'] ?? 'Start Scanning';
|
||||
String get foundSubscription => _localizedStrings['foundSubscription'] ?? 'Found subscription';
|
||||
String get scanningMessages =>
|
||||
_localizedStrings['scanningMessages'] ?? 'Scanning SMS messages...';
|
||||
String get findingSubscriptions =>
|
||||
_localizedStrings['findingSubscriptions'] ??
|
||||
'Finding subscription services';
|
||||
String get subscriptionNotFound =>
|
||||
_localizedStrings['subscriptionNotFound'] ??
|
||||
'Subscription information not found.';
|
||||
String get repeatSubscriptionNotFound =>
|
||||
_localizedStrings['repeatSubscriptionNotFound'] ??
|
||||
'No repeated subscription information found.';
|
||||
String get newSubscriptionNotFound =>
|
||||
_localizedStrings['newSubscriptionNotFound'] ??
|
||||
'No new subscription SMS found';
|
||||
String get findRepeatSubscriptions =>
|
||||
_localizedStrings['findRepeatSubscriptions'] ??
|
||||
'Find subscriptions paid 2+ times';
|
||||
String get scanTextMessages =>
|
||||
_localizedStrings['scanTextMessages'] ??
|
||||
'Scan text messages to automatically find repeatedly paid subscriptions. Service names and amounts can be extracted for easy subscription addition.';
|
||||
String get startScanning =>
|
||||
_localizedStrings['startScanning'] ?? 'Start Scanning';
|
||||
String get foundSubscription =>
|
||||
_localizedStrings['foundSubscription'] ?? 'Found subscription';
|
||||
String get serviceName => _localizedStrings['serviceName'] ?? 'Service Name';
|
||||
String get nextBillingDateLabel => _localizedStrings['nextBillingDateLabel'] ?? 'Next Billing Date';
|
||||
String get nextBillingDateLabel =>
|
||||
_localizedStrings['nextBillingDateLabel'] ?? 'Next Billing Date';
|
||||
String get category => _localizedStrings['category'] ?? 'Category';
|
||||
String get websiteUrlAuto => _localizedStrings['websiteUrlAuto'] ?? 'Website URL (Auto-extracted)';
|
||||
String get websiteUrlHint => _localizedStrings['websiteUrlHint'] ?? 'Edit website URL or leave empty';
|
||||
String get websiteUrlAuto =>
|
||||
_localizedStrings['websiteUrlAuto'] ?? 'Website URL (Auto-extracted)';
|
||||
String get websiteUrlHint =>
|
||||
_localizedStrings['websiteUrlHint'] ?? 'Edit website URL or leave empty';
|
||||
String get skip => _localizedStrings['skip'] ?? 'Skip';
|
||||
String get add => _localizedStrings['add'] ?? 'Add';
|
||||
String get nextBillingDateRequired => _localizedStrings['nextBillingDateRequired'] ?? 'Next billing date verification required';
|
||||
|
||||
String get nextBillingDateRequired =>
|
||||
_localizedStrings['nextBillingDateRequired'] ??
|
||||
'Next billing date verification required';
|
||||
|
||||
String nextBillingDateEstimated(String date, int days) {
|
||||
final template = _localizedStrings['nextBillingDateEstimated'] ?? 'Next estimated billing date: @ (# days later)';
|
||||
final template = _localizedStrings['nextBillingDateEstimated'] ??
|
||||
'Next estimated billing date: @ (# days later)';
|
||||
return template.replaceAll('@', date).replaceAll('#', days.toString());
|
||||
}
|
||||
|
||||
|
||||
String nextBillingDateInfo(String date, int days) {
|
||||
final template = _localizedStrings['nextBillingDateInfo'] ?? 'Next billing date: @ (# days later)';
|
||||
final template = _localizedStrings['nextBillingDateInfo'] ??
|
||||
'Next billing date: @ (# days later)';
|
||||
return template.replaceAll('@', date).replaceAll('#', days.toString());
|
||||
}
|
||||
|
||||
String get nextBillingDatePastRequired => _localizedStrings['nextBillingDatePastRequired'] ?? 'Next billing date verification required (past date)';
|
||||
|
||||
|
||||
String get nextBillingDatePastRequired =>
|
||||
_localizedStrings['nextBillingDatePastRequired'] ??
|
||||
'Next billing date verification required (past date)';
|
||||
|
||||
String formatDate(DateTime date) {
|
||||
if (locale.languageCode == 'ko') {
|
||||
return '${date.year}년 ${date.month}월 ${date.day}일';
|
||||
@@ -304,16 +418,30 @@ class AppLocalizations {
|
||||
} else if (locale.languageCode == 'zh') {
|
||||
return '${date.year}年${date.month}月${date.day}日';
|
||||
} else {
|
||||
final months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
|
||||
final months = [
|
||||
'Jan',
|
||||
'Feb',
|
||||
'Mar',
|
||||
'Apr',
|
||||
'May',
|
||||
'Jun',
|
||||
'Jul',
|
||||
'Aug',
|
||||
'Sep',
|
||||
'Oct',
|
||||
'Nov',
|
||||
'Dec'
|
||||
];
|
||||
return '${months[date.month - 1]} ${date.day}, ${date.year}';
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
String repeatCountDetected(int count) {
|
||||
final template = _localizedStrings['repeatCountDetected'] ?? '@ payment(s) detected';
|
||||
final template =
|
||||
_localizedStrings['repeatCountDetected'] ?? '@ payment(s) detected';
|
||||
return template.replaceAll('@', count.toString());
|
||||
}
|
||||
|
||||
|
||||
String servicesInProgress(int count) {
|
||||
if (locale.languageCode == 'ko') {
|
||||
return '${count}개 진행중';
|
||||
@@ -325,92 +453,130 @@ class AppLocalizations {
|
||||
return '$count in progress';
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// 새로 추가된 동적 메서드들
|
||||
String paymentDueInDays(int days) {
|
||||
final template = _localizedStrings['paymentDueInDays'] ?? 'Payment due in @ days';
|
||||
final template =
|
||||
_localizedStrings['paymentDueInDays'] ?? 'Payment due in @ days';
|
||||
return template.replaceAll('@', days.toString());
|
||||
}
|
||||
|
||||
|
||||
String daysRemaining(int days) {
|
||||
final template = _localizedStrings['daysRemaining'] ?? '@ days remaining';
|
||||
return template.replaceAll('@', days.toString());
|
||||
}
|
||||
|
||||
|
||||
String exchangeRateFormat(String rate) {
|
||||
final template = _localizedStrings['exchangeRateFormat'] ?? 'Today\'s rate: @';
|
||||
final template =
|
||||
_localizedStrings['exchangeRateFormat'] ?? 'Today\'s rate: @';
|
||||
return template.replaceAll('@', rate);
|
||||
}
|
||||
|
||||
|
||||
// 결제 주기 결제 메시지
|
||||
String get billingCyclePayment => _localizedStrings['billingCyclePayment'] ?? '@ Payment';
|
||||
|
||||
String get billingCyclePayment =>
|
||||
_localizedStrings['billingCyclePayment'] ?? '@ Payment';
|
||||
|
||||
// 할인 금액 표시 getter들
|
||||
String get discountAmountWon => _localizedStrings['discountAmountWon'] ?? 'Save ₩@';
|
||||
String get discountAmountDollar => _localizedStrings['discountAmountDollar'] ?? 'Save \$@';
|
||||
String get discountAmountYen => _localizedStrings['discountAmountYen'] ?? 'Save ¥@';
|
||||
String get discountAmountYuan => _localizedStrings['discountAmountYuan'] ?? 'Save ¥@';
|
||||
|
||||
String get discountAmountWon =>
|
||||
_localizedStrings['discountAmountWon'] ?? 'Save ₩@';
|
||||
String get discountAmountDollar =>
|
||||
_localizedStrings['discountAmountDollar'] ?? 'Save \$@';
|
||||
String get discountAmountYen =>
|
||||
_localizedStrings['discountAmountYen'] ?? 'Save ¥@';
|
||||
String get discountAmountYuan =>
|
||||
_localizedStrings['discountAmountYuan'] ?? 'Save ¥@';
|
||||
|
||||
// 결제 주기 관련 getter
|
||||
String get monthly => _localizedStrings['monthly'] ?? 'Monthly';
|
||||
String get weekly => _localizedStrings['weekly'] ?? 'Weekly';
|
||||
String get yearly => _localizedStrings['yearly'] ?? 'Yearly';
|
||||
String get billingCycleMonthly => _localizedStrings['billingCycleMonthly'] ?? 'Monthly';
|
||||
String get billingCycleQuarterly => _localizedStrings['billingCycleQuarterly'] ?? 'Quarterly';
|
||||
String get billingCycleHalfYearly => _localizedStrings['billingCycleHalfYearly'] ?? 'Half-Yearly';
|
||||
String get billingCycleYearly => _localizedStrings['billingCycleYearly'] ?? 'Yearly';
|
||||
|
||||
String get billingCycleMonthly =>
|
||||
_localizedStrings['billingCycleMonthly'] ?? 'Monthly';
|
||||
String get billingCycleQuarterly =>
|
||||
_localizedStrings['billingCycleQuarterly'] ?? 'Quarterly';
|
||||
String get billingCycleHalfYearly =>
|
||||
_localizedStrings['billingCycleHalfYearly'] ?? 'Half-Yearly';
|
||||
String get billingCycleYearly =>
|
||||
_localizedStrings['billingCycleYearly'] ?? 'Yearly';
|
||||
|
||||
// 색상 관련 getter
|
||||
String get colorBlue => _localizedStrings['colorBlue'] ?? 'Blue';
|
||||
String get colorGreen => _localizedStrings['colorGreen'] ?? 'Green';
|
||||
String get colorOrange => _localizedStrings['colorOrange'] ?? 'Orange';
|
||||
String get colorRed => _localizedStrings['colorRed'] ?? 'Red';
|
||||
String get colorPurple => _localizedStrings['colorPurple'] ?? 'Purple';
|
||||
|
||||
|
||||
// 날짜 형식 관련 getter
|
||||
String get dateFormatFull => _localizedStrings['dateFormatFull'] ?? 'MMM dd, yyyy';
|
||||
String get dateFormatFull =>
|
||||
_localizedStrings['dateFormatFull'] ?? 'MMM dd, yyyy';
|
||||
String get dateFormatShort => _localizedStrings['dateFormatShort'] ?? 'MM/dd';
|
||||
|
||||
|
||||
// USD 환율 표시 형식
|
||||
String get exchangeRateDisplay => _localizedStrings['exchangeRateDisplay'] ?? '\$1 = @';
|
||||
|
||||
String get exchangeRateDisplay =>
|
||||
_localizedStrings['exchangeRateDisplay'] ?? '\$1 = @';
|
||||
|
||||
// 라벨 및 힌트 텍스트
|
||||
String get labelServiceName => _localizedStrings['labelServiceName'] ?? 'Service Name';
|
||||
String get hintServiceName => _localizedStrings['hintServiceName'] ?? 'e.g. Netflix, Spotify';
|
||||
String get labelMonthlyExpense => _localizedStrings['labelMonthlyExpense'] ?? 'Monthly Expense';
|
||||
String get labelNextBillingDate => _localizedStrings['labelNextBillingDate'] ?? 'Next Billing Date';
|
||||
String get labelWebsiteUrl => _localizedStrings['labelWebsiteUrl'] ?? 'Website URL (Optional)';
|
||||
String get hintWebsiteUrl => _localizedStrings['hintWebsiteUrl'] ?? 'https://example.com';
|
||||
String get labelEventPrice => _localizedStrings['labelEventPrice'] ?? 'Event Price';
|
||||
String get hintEventPrice => _localizedStrings['hintEventPrice'] ?? 'Enter discounted price';
|
||||
String get labelServiceName =>
|
||||
_localizedStrings['labelServiceName'] ?? 'Service Name';
|
||||
String get hintServiceName =>
|
||||
_localizedStrings['hintServiceName'] ?? 'e.g. Netflix, Spotify';
|
||||
String get labelMonthlyExpense =>
|
||||
_localizedStrings['labelMonthlyExpense'] ?? 'Monthly Expense';
|
||||
String get labelNextBillingDate =>
|
||||
_localizedStrings['labelNextBillingDate'] ?? 'Next Billing Date';
|
||||
String get labelWebsiteUrl =>
|
||||
_localizedStrings['labelWebsiteUrl'] ?? 'Website URL (Optional)';
|
||||
String get hintWebsiteUrl =>
|
||||
_localizedStrings['hintWebsiteUrl'] ?? 'https://example.com';
|
||||
String get labelEventPrice =>
|
||||
_localizedStrings['labelEventPrice'] ?? 'Event Price';
|
||||
String get hintEventPrice =>
|
||||
_localizedStrings['hintEventPrice'] ?? 'Enter discounted price';
|
||||
String get labelCategory => _localizedStrings['labelCategory'] ?? 'Category';
|
||||
|
||||
|
||||
// 기타 번역
|
||||
String get subscription => _localizedStrings['subscription'] ?? 'Subscription';
|
||||
String get subscription =>
|
||||
_localizedStrings['subscription'] ?? 'Subscription';
|
||||
String get movie => _localizedStrings['movie'] ?? 'Movie';
|
||||
String get music => _localizedStrings['music'] ?? 'Music';
|
||||
String get music => _localizedStrings['music'] ?? 'Music';
|
||||
String get exercise => _localizedStrings['exercise'] ?? 'Exercise';
|
||||
String get shopping => _localizedStrings['shopping'] ?? 'Shopping';
|
||||
String get currency => _localizedStrings['currency'] ?? 'Currency';
|
||||
String get websiteInfo => _localizedStrings['websiteInfo'] ?? 'Website Information';
|
||||
String get cancelGuide => _localizedStrings['cancelGuide'] ?? 'Cancellation Guide';
|
||||
String get cancelServiceGuide => _localizedStrings['cancelServiceGuide'] ?? 'To cancel this service, please go to the cancellation page through the link below.';
|
||||
String get goToCancelPage => _localizedStrings['goToCancelPage'] ?? 'Go to Cancellation Page';
|
||||
String get urlAutoMatchInfo => _localizedStrings['urlAutoMatchInfo'] ?? 'If URL is empty, it will be automatically matched based on the service name';
|
||||
String get websiteInfo =>
|
||||
_localizedStrings['websiteInfo'] ?? 'Website Information';
|
||||
String get cancelGuide =>
|
||||
_localizedStrings['cancelGuide'] ?? 'Cancellation Guide';
|
||||
String get cancelServiceGuide =>
|
||||
_localizedStrings['cancelServiceGuide'] ??
|
||||
'To cancel this service, please go to the cancellation page through the link below.';
|
||||
String get goToCancelPage =>
|
||||
_localizedStrings['goToCancelPage'] ?? 'Go to Cancellation Page';
|
||||
String get urlAutoMatchInfo =>
|
||||
_localizedStrings['urlAutoMatchInfo'] ??
|
||||
'If URL is empty, it will be automatically matched based on the service name';
|
||||
String get dateSelect => _localizedStrings['dateSelect'] ?? 'Select';
|
||||
|
||||
|
||||
// 새로 추가된 getter들
|
||||
String get serviceInfo => _localizedStrings['serviceInfo'] ?? 'Service Information';
|
||||
String get newSubscriptionAdd => _localizedStrings['newSubscriptionAdd'] ?? 'Add New Subscription';
|
||||
String get enterServiceInfo => _localizedStrings['enterServiceInfo'] ?? 'Enter service information';
|
||||
String get addSubscriptionButton => _localizedStrings['addSubscriptionButton'] ?? 'Add Subscription';
|
||||
String get serviceNameRequired => _localizedStrings['serviceNameRequired'] ?? 'Please enter service name';
|
||||
String get amountRequired => _localizedStrings['amountRequired'] ?? 'Please enter amount';
|
||||
String get subscriptionDetail => _localizedStrings['subscriptionDetail'] ?? 'Subscription Detail';
|
||||
String get serviceInfo =>
|
||||
_localizedStrings['serviceInfo'] ?? 'Service Information';
|
||||
String get newSubscriptionAdd =>
|
||||
_localizedStrings['newSubscriptionAdd'] ?? 'Add New Subscription';
|
||||
String get enterServiceInfo =>
|
||||
_localizedStrings['enterServiceInfo'] ?? 'Enter service information';
|
||||
String get addSubscriptionButton =>
|
||||
_localizedStrings['addSubscriptionButton'] ?? 'Add Subscription';
|
||||
String get serviceNameRequired =>
|
||||
_localizedStrings['serviceNameRequired'] ?? 'Please enter service name';
|
||||
String get amountRequired =>
|
||||
_localizedStrings['amountRequired'] ?? 'Please enter amount';
|
||||
String get subscriptionDetail =>
|
||||
_localizedStrings['subscriptionDetail'] ?? 'Subscription Detail';
|
||||
String get enterAmount => _localizedStrings['enterAmount'] ?? 'Enter amount';
|
||||
String get invalidAmount => _localizedStrings['invalidAmount'] ?? 'Please enter a valid amount';
|
||||
String get featureComingSoon => _localizedStrings['featureComingSoon'] ?? 'This feature is coming soon';
|
||||
|
||||
String get invalidAmount =>
|
||||
_localizedStrings['invalidAmount'] ?? 'Please enter a valid amount';
|
||||
String get featureComingSoon =>
|
||||
_localizedStrings['featureComingSoon'] ?? 'This feature is coming soon';
|
||||
|
||||
// 결제 주기를 키값으로 변환하여 번역된 이름 반환
|
||||
String getBillingCycleName(String billingCycleKey) {
|
||||
switch (billingCycleKey) {
|
||||
@@ -433,7 +599,7 @@ class AppLocalizations {
|
||||
return billingCycleKey; // 매칭되지 않으면 원본 반환
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// 카테고리 이름을 키로 변환하여 번역된 이름 반환
|
||||
String getCategoryName(String categoryKey) {
|
||||
switch (categoryKey) {
|
||||
@@ -467,7 +633,8 @@ class AppLocalizationsDelegate extends LocalizationsDelegate<AppLocalizations> {
|
||||
const AppLocalizationsDelegate();
|
||||
|
||||
@override
|
||||
bool isSupported(Locale locale) => ['en', 'ko', 'ja', 'zh'].contains(locale.languageCode);
|
||||
bool isSupported(Locale locale) =>
|
||||
['en', 'ko', 'ja', 'zh'].contains(locale.languageCode);
|
||||
|
||||
@override
|
||||
Future<AppLocalizations> load(Locale locale) async {
|
||||
|
||||
Reference in New Issue
Block a user