blob: 6231a9037b69560ed17c691087d0bbbdd22f81b3 [file] [log] [blame]
// 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)';
}