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:
@@ -1,22 +1,48 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:hive/hive.dart';
|
||||
import 'dart:ui' as ui;
|
||||
|
||||
class LocaleProvider extends ChangeNotifier {
|
||||
late Box<String> _localeBox;
|
||||
Locale _locale = const Locale('ko');
|
||||
|
||||
static const List<String> supportedLanguages = ['en', 'ko', 'ja', 'zh'];
|
||||
|
||||
Locale get locale => _locale;
|
||||
|
||||
Future<void> init() async {
|
||||
_localeBox = await Hive.openBox<String>('locale');
|
||||
final savedLocale = _localeBox.get('locale', defaultValue: 'ko');
|
||||
_locale = Locale(savedLocale ?? 'ko');
|
||||
|
||||
// 저장된 언어 설정 확인
|
||||
final savedLocale = _localeBox.get('locale');
|
||||
|
||||
if (savedLocale != null) {
|
||||
// 저장된 언어가 있으면 사용
|
||||
_locale = Locale(savedLocale);
|
||||
} else {
|
||||
// 저장된 언어가 없으면 시스템 언어 감지
|
||||
final systemLocale = ui.PlatformDispatcher.instance.locale;
|
||||
|
||||
// 시스템 언어가 지원되는 언어인지 확인
|
||||
if (supportedLanguages.contains(systemLocale.languageCode)) {
|
||||
_locale = Locale(systemLocale.languageCode);
|
||||
} else {
|
||||
// 지원되지 않는 언어면 영어 사용
|
||||
_locale = const Locale('en');
|
||||
}
|
||||
|
||||
// 감지된 언어 저장
|
||||
await _localeBox.put('locale', _locale.languageCode);
|
||||
}
|
||||
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
Future<void> setLocale(String languageCode) async {
|
||||
_locale = Locale(languageCode);
|
||||
await _localeBox.put('locale', languageCode);
|
||||
notifyListeners();
|
||||
if (_locale.languageCode != languageCode) {
|
||||
_locale = Locale(languageCode);
|
||||
await _localeBox.put('locale', languageCode);
|
||||
notifyListeners();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user