- ExchangeRateService에 JPY, CNY 환율 지원 추가 - 구독 서비스별 다국어 표시 이름 지원 - 분석 화면 차트 및 UI/UX 개선 - 설정 화면 전면 리팩토링 - SMS 스캔 기능 사용성 개선 - 전체 앱 다국어 번역 확대 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
49 lines
1.4 KiB
Dart
49 lines
1.4 KiB
Dart
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');
|
|
|
|
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 {
|
|
if (_locale.languageCode != languageCode) {
|
|
_locale = Locale(languageCode);
|
|
await _localeBox.put('locale', languageCode);
|
|
notifyListeners();
|
|
}
|
|
}
|
|
}
|