我关注Flutter文档以显示CupertinoDatePicker。但是语言总是英语。请告诉我如何更改此设置。
这是我的代码:
void _showDatePicker(BuildContext context, bool isYou) { showModalBottomSheet( context: context, builder: (context) { return CupertinoDatePicker( onDateTimeChanged: (DateTime value) { setState(() { if (isYou) { _dateOfBirth = value; } else { _dateOfBirthAnother = value; } }); }, initialDateTime: DateTime.now(), mode: CupertinoDatePickerMode.date, maximumYear: 2018, minimumYear: 1950, ); }); }
将所需的语言添加到MaterialApp(或CupertinoApp)配置中。像这样:
return MaterialApp( localizationsDelegates: [ // ... app-specific localization delegate[s] here GlobalMaterialLocalizations.delegate, GlobalWidgetsLocalizations.delegate, DefaultCupertinoLocalizations.delegate, ], supportedLocales: [ const Locale('en', 'US'), // English const Locale('de', 'DE'), // German // ... other locales the app supports ], <the rest of your configuration> );
这应该做。
不要忘记进口:
import 'package:toothscout/GermanCupertinoLocalizations.dart'; import 'package:flutter_localizations/flutter_localizations.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart';
另外,Cupertino Widget还没有完全本地化。但是您可以编写自己的本地化配置类,并将其添加到我的代码中“ DefaultCupertinoLocalizations.delegate”行下方。
例如,我必须创建以使用德语使用CupertinoDatePicker的自定义德语本地化看起来像这样:
import 'dart:async'; import 'package:flutter/cupertino.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/widgets.dart'; class _CupertinoLocalizationsDelegate extends LocalizationsDelegate<CupertinoLocalizations> { const _CupertinoLocalizationsDelegate(); @override bool isSupported(Locale locale) => locale.languageCode == 'de'; @override Future<CupertinoLocalizations> load(Locale locale) => GermanCupertinoLocalizations.load(locale); @override bool shouldReload(_CupertinoLocalizationsDelegate old) => false; @override String toString() => 'DefaultCupertinoLocalizations.delegate(de_DE)'; } /// US English strings for the cupertino widgets. class GermanCupertinoLocalizations implements CupertinoLocalizations { /// Constructs an object that defines the cupertino widgets' localized strings /// for US English (only). /// /// [LocalizationsDelegate] implementations typically call the static [load] /// function, rather than constructing this class directly. const GermanCupertinoLocalizations(); static const List<String> _shortWeekdays = <String>[ 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa', 'So', ]; static const List<String> _shortMonths = <String>[ 'Jan', 'Feb', 'Mär', 'Apr', 'Mai', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez', ]; static const List<String> _months = <String>[ 'Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember', ]; @override String datePickerYear(int yearIndex) => yearIndex.toString(); @override String datePickerMonth(int monthIndex) => _months[monthIndex - 1]; @override String datePickerDayOfMonth(int dayIndex) => dayIndex.toString(); @override String datePickerHour(int hour) => hour.toString(); @override String datePickerHourSemanticsLabel(int hour) => hour.toString() + " Uhr"; @override String datePickerMinute(int minute) => minute.toString().padLeft(2, '0'); @override String datePickerMinuteSemanticsLabel(int minute) { if (minute == 1) return '1 Minute'; return minute.toString() + ' Minuten'; } @override String datePickerMediumDate(DateTime date) { return '${_shortWeekdays[date.weekday - DateTime.monday]} ' '${_shortMonths[date.month - DateTime.january]} ' '${date.day.toString().padRight(2)}'; } @override DatePickerDateOrder get datePickerDateOrder => DatePickerDateOrder.mdy; @override DatePickerDateTimeOrder get datePickerDateTimeOrder => DatePickerDateTimeOrder.date_time_dayPeriod; @override String get anteMeridiemAbbreviation => 'AM'; @override String get postMeridiemAbbreviation => 'PM'; @override String get alertDialogLabel => 'Info'; @override String timerPickerHour(int hour) => hour.toString(); @override String timerPickerMinute(int minute) => minute.toString(); @override String timerPickerSecond(int second) => second.toString(); @override String timerPickerHourLabel(int hour) => hour == 1 ? 'Stunde' : 'Stunden'; @override String timerPickerMinuteLabel(int minute) => 'Min'; @override String timerPickerSecondLabel(int second) => 'Sek'; @override String get cutButtonLabel => 'Ausschneiden'; @override String get copyButtonLabel => 'Kopieren'; @override String get pasteButtonLabel => 'Einfügen'; @override String get selectAllButtonLabel => 'Alles auswählen'; /// Creates an object that provides US English resource values for the /// cupertino library widgets. /// /// The [locale] parameter is ignored. /// /// This method is typically used to create a [LocalizationsDelegate]. static Future<CupertinoLocalizations> load(Locale locale) { return SynchronousFuture<CupertinoLocalizations>(const GermanCupertinoLocalizations()); } /// A [LocalizationsDelegate] that uses [DefaultCupertinoLocalizations.load] /// to create an instance of this class. static const LocalizationsDelegate<CupertinoLocalizations> delegate = _CupertinoLocalizationsDelegate(); }