| // Copyright 2017 The Chromium 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 'dart:async'; |
| |
| import 'package:flutter/foundation.dart'; |
| import 'package:flutter/widgets.dart'; |
| |
| /// Localized values for widgets. |
| /// |
| /// Currently this class just 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 |
| class GlobalWidgetsLocalizations implements WidgetsLocalizations { |
| /// Construct an object that defines the localized values for the widgets |
| /// library for the given `locale`. |
| /// |
| /// [LocalizationsDelegate] implementations typically call the static [load] |
| /// function, rather than constructing this class directly. |
| GlobalWidgetsLocalizations(this.locale) { |
| final String language = locale.languageCode.toLowerCase(); |
| _textDirection = _rtlLanguages.contains(language) ? TextDirection.rtl : TextDirection.ltr; |
| } |
| |
| // See http://en.wikipedia.org/wiki/Right-to-left |
| static const List<String> _rtlLanguages = <String>[ |
| 'ar', // Arabic |
| 'fa', // Farsi |
| 'he', // Hebrew |
| 'ps', // Pashto |
| 'ur', // Urdu |
| ]; |
| |
| /// The locale for which the values of this class's localized resources |
| /// have been translated. |
| final Locale locale; |
| |
| @override |
| TextDirection get textDirection => _textDirection; |
| TextDirection _textDirection; |
| |
| /// Creates an object that provides localized resource values for the |
| /// lowest levels of the Flutter framework. |
| /// |
| /// This method is typically used to create a [LocalizationsDelegate]. |
| /// The [WidgetsApp] does so by default. |
| static Future<WidgetsLocalizations> load(Locale locale) { |
| return new SynchronousFuture<WidgetsLocalizations>(new GlobalWidgetsLocalizations(locale)); |
| } |
| |
| /// A [LocalizationsDelegate] that uses [GlobalWidgetsLocalizations.load] |
| /// to create an instance of this class. |
| /// |
| /// [WidgetsApp] automatically adds this value to [WidgetApp.localizationsDelegates]. |
| static const LocalizationsDelegate<WidgetsLocalizations> delegate = _WidgetsLocalizationsDelegate(); |
| } |
| |
| class _WidgetsLocalizationsDelegate extends LocalizationsDelegate<WidgetsLocalizations> { |
| const _WidgetsLocalizationsDelegate(); |
| |
| @override |
| bool isSupported(Locale locale) => true; |
| |
| @override |
| Future<WidgetsLocalizations> load(Locale locale) => GlobalWidgetsLocalizations.load(locale); |
| |
| @override |
| bool shouldReload(_WidgetsLocalizationsDelegate old) => false; |
| } |