// 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)'; }