mirror of
https://github.com/flutter/flutter.git
synced 2025-06-03 00:51:18 +00:00
81 lines
2.7 KiB
Dart
81 lines
2.7 KiB
Dart
// 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 SynchronousFuture<WidgetsLocalizations>(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;
|
|
|
|
@override
|
|
String toString() => 'GlobalWidgetsLocalizations.delegate(all locales)';
|
|
}
|