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

@@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import '../providers/category_provider.dart';
import '../theme/app_colors.dart';
import '../l10n/app_localizations.dart';
class CategoryManagementScreen extends StatefulWidget {
const CategoryManagementScreen({super.key});
@@ -89,15 +90,15 @@ class _CategoryManagementScreenState extends State<CategoryManagementScreen> {
),
items: [
DropdownMenuItem(
value: '#1976D2', child: Text('파란색', style: TextStyle(color: AppColors.darkNavy))),
value: '#1976D2', child: Text(AppLocalizations.of(context).colorBlue, style: TextStyle(color: AppColors.darkNavy))),
DropdownMenuItem(
value: '#4CAF50', child: Text('초록색', style: TextStyle(color: AppColors.darkNavy))),
value: '#4CAF50', child: Text(AppLocalizations.of(context).colorGreen, style: TextStyle(color: AppColors.darkNavy))),
DropdownMenuItem(
value: '#FF9800', child: Text('주황색', style: TextStyle(color: AppColors.darkNavy))),
value: '#FF9800', child: Text(AppLocalizations.of(context).colorOrange, style: TextStyle(color: AppColors.darkNavy))),
DropdownMenuItem(
value: '#F44336', child: Text('빨간색', style: TextStyle(color: AppColors.darkNavy))),
value: '#F44336', child: Text(AppLocalizations.of(context).colorRed, style: TextStyle(color: AppColors.darkNavy))),
DropdownMenuItem(
value: '#9C27B0', child: Text('보라색', style: TextStyle(color: AppColors.darkNavy))),
value: '#9C27B0', child: Text(AppLocalizations.of(context).colorPurple, style: TextStyle(color: AppColors.darkNavy))),
],
onChanged: (value) {
setState(() {
@@ -162,7 +163,7 @@ class _CategoryManagementScreenState extends State<CategoryManagementScreen> {
int.parse(category.color.replaceAll('#', '0xFF'))),
),
title: Text(
category.name,
provider.getLocalizedCategoryName(context, category.name),
style: TextStyle(
color: AppColors.darkNavy,
),