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

View File

@@ -6,6 +6,7 @@ import '../../services/currency_util.dart';
import '../../theme/app_colors.dart';
import '../glassmorphism_card.dart';
import '../themed_text.dart';
import '../../l10n/app_localizations.dart';
/// 이벤트 할인 현황을 보여주는 카드 위젯
class EventAnalysisCard extends StatelessWidget {
@@ -50,7 +51,7 @@ class EventAnalysisCard extends StatelessWidget {
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
ThemedText.headline(
text: '이벤트 할인 현황',
text: AppLocalizations.of(context).eventDiscountStatus,
style: const TextStyle(
fontSize: 18,
),
@@ -78,7 +79,7 @@ class EventAnalysisCard extends StatelessWidget {
),
const SizedBox(width: 4),
Text(
'${provider.activeEventSubscriptions.length}개 진행중',
AppLocalizations.of(context).servicesInProgress(provider.activeEventSubscriptions.length),
style: const TextStyle(
fontSize: 12,
fontWeight: FontWeight.bold,
@@ -119,9 +120,9 @@ class EventAnalysisCard extends StatelessWidget {
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
const ThemedText(
'월간 절약 금액',
style: TextStyle(
ThemedText(
AppLocalizations.of(context).monthlySavingAmount,
style: const TextStyle(
fontSize: 12,
fontWeight: FontWeight.w500,
),
@@ -144,9 +145,9 @@ class EventAnalysisCard extends StatelessWidget {
),
),
const SizedBox(height: 16),
const ThemedText(
'진행중인 이벤트',
style: TextStyle(
ThemedText(
AppLocalizations.of(context).eventsInProgress,
style: const TextStyle(
fontSize: 14,
fontWeight: FontWeight.bold,
),
@@ -246,7 +247,7 @@ class EventAnalysisCard extends StatelessWidget {
borderRadius: BorderRadius.circular(4),
),
child: Text(
'$discountRate% 할인',
'$discountRate${AppLocalizations.of(context).discountPercent}',
style: const TextStyle(
fontSize: 12,
fontWeight: FontWeight.bold,