47 lines
1.5 KiB
Dart
47 lines
1.5 KiB
Dart
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
|
import 'settings_provider.dart';
|
|
|
|
part 'language_provider.g.dart';
|
|
|
|
/// Language/locale provider
|
|
/// Extracts language from settings for easy access
|
|
@riverpod
|
|
String appLanguage(Ref ref) {
|
|
final settingsAsync = ref.watch(settingsProvider);
|
|
return settingsAsync.when(
|
|
data: (settings) => settings.language,
|
|
loading: () => 'en',
|
|
error: (_, __) => 'en',
|
|
);
|
|
}
|
|
|
|
/// Supported languages provider
|
|
@riverpod
|
|
List<LanguageOption> supportedLanguages(Ref ref) {
|
|
return const [
|
|
LanguageOption(code: 'en', name: 'English', nativeName: 'English'),
|
|
LanguageOption(code: 'es', name: 'Spanish', nativeName: 'Español'),
|
|
LanguageOption(code: 'fr', name: 'French', nativeName: 'Français'),
|
|
LanguageOption(code: 'de', name: 'German', nativeName: 'Deutsch'),
|
|
LanguageOption(code: 'it', name: 'Italian', nativeName: 'Italiano'),
|
|
LanguageOption(code: 'pt', name: 'Portuguese', nativeName: 'Português'),
|
|
LanguageOption(code: 'zh', name: 'Chinese', nativeName: '中文'),
|
|
LanguageOption(code: 'ja', name: 'Japanese', nativeName: '日本語'),
|
|
LanguageOption(code: 'ko', name: 'Korean', nativeName: '한국어'),
|
|
LanguageOption(code: 'ar', name: 'Arabic', nativeName: 'العربية'),
|
|
];
|
|
}
|
|
|
|
/// Language option model
|
|
class LanguageOption {
|
|
final String code;
|
|
final String name;
|
|
final String nativeName;
|
|
|
|
const LanguageOption({
|
|
required this.code,
|
|
required this.name,
|
|
required this.nativeName,
|
|
});
|
|
}
|