71 lines
2.4 KiB
Dart
71 lines
2.4 KiB
Dart
// Copyright 2014 The Flutter Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
import 'package:flutter/foundation.dart';
|
|
import 'package:flutter/widgets.dart';
|
|
|
|
import 'l10n/generated_widgets_localizations.dart';
|
|
|
|
/// Localized values for widgets.
|
|
///
|
|
/// ## Supported languages
|
|
///
|
|
/// This class supports locales with the following [Locale.languageCode]s:
|
|
///
|
|
/// {@macro flutter.localizations.widgets.languages}
|
|
///
|
|
/// This list is available programmatically via [kWidgetsSupportedLanguages].
|
|
///
|
|
/// Besides localized strings, this class also maps [locale] to [textDirection].
|
|
/// All locales are [TextDirection.ltr] except for locales with the following
|
|
/// [Locale.languageCode] values, which are [TextDirection.rtl]:
|
|
///
|
|
/// * ar - Arabic
|
|
/// * fa - Farsi
|
|
/// * he - Hebrew
|
|
/// * ps - Pashto
|
|
/// * sd - Sindhi
|
|
/// * ur - Urdu
|
|
///
|
|
abstract class GlobalWidgetsLocalizations implements WidgetsLocalizations {
|
|
/// Construct an object that defines the localized values for the widgets
|
|
/// library for the given [textDirection].
|
|
const GlobalWidgetsLocalizations(this.textDirection);
|
|
|
|
@override
|
|
final TextDirection textDirection;
|
|
|
|
/// A [LocalizationsDelegate] for [WidgetsLocalizations].
|
|
///
|
|
/// Most internationalized apps will use [GlobalMaterialLocalizations.delegates]
|
|
/// as the value of [MaterialApp.localizationsDelegates] to include
|
|
/// the localizations for both the material and widget libraries.
|
|
static const LocalizationsDelegate<WidgetsLocalizations> delegate = _WidgetsLocalizationsDelegate();
|
|
}
|
|
|
|
class _WidgetsLocalizationsDelegate extends LocalizationsDelegate<WidgetsLocalizations> {
|
|
const _WidgetsLocalizationsDelegate();
|
|
|
|
@override
|
|
bool isSupported(Locale locale) => kWidgetsSupportedLanguages.contains(locale.languageCode);
|
|
|
|
static final Map<Locale, Future<WidgetsLocalizations>> _loadedTranslations = <Locale, Future<WidgetsLocalizations>>{};
|
|
|
|
@override
|
|
Future<WidgetsLocalizations> load(Locale locale) {
|
|
assert(isSupported(locale));
|
|
return _loadedTranslations.putIfAbsent(locale, () {
|
|
return SynchronousFuture<WidgetsLocalizations>(getWidgetsTranslation(
|
|
locale,
|
|
)!);
|
|
});
|
|
}
|
|
|
|
@override
|
|
bool shouldReload(_WidgetsLocalizationsDelegate old) => false;
|
|
|
|
@override
|
|
String toString() => 'GlobalWidgetsLocalizations.delegate(${kWidgetsSupportedLanguages.length} locales)';
|
|
}
|