How to change CupertinoDatePicker display language?

后端 未结 4 1079
攒了一身酷
攒了一身酷 2021-01-01 03:54

I\'m follow Flutter docs to show CupertinoDatePicker. But language alway is English. Please show me how to change this.

Here my code:

void _showDateP         


        
4条回答
  •  我在风中等你
    2021-01-01 04:45

    Add your required languages to your MaterialApp (or CupertinoApp) configuration. Like this:

    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
        ],   );
    

    This should do it.

    Don't forget the imports:

    import 'package:toothscout/GermanCupertinoLocalizations.dart';
    import 'package:flutter_localizations/flutter_localizations.dart';
    import 'package:flutter/cupertino.dart';
    import 'package:flutter/material.dart';
    

    Also, Cupertino Widgets are not fully localized (yet). But you can write your own localization configuration classes and add them below the line "DefaultCupertinoLocalizations.delegate" in my code.

    For example, my custom german localization that i had to create to use CupertinoDatePicker in german language looks like this:

    import 'dart:async';
    import 'package:flutter/cupertino.dart';
    import 'package:flutter/foundation.dart';
    import 'package:flutter/widgets.dart';
    
    
    class _CupertinoLocalizationsDelegate extends LocalizationsDelegate {
      const _CupertinoLocalizationsDelegate();
    
      @override
      bool isSupported(Locale locale) => locale.languageCode == 'de';
    
      @override
      Future 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 _shortWeekdays = [
        'Mo',
        'Di',
        'Mi',
        'Do',
        'Fr',
        'Sa',
        'So',
      ];
    
      static const List _shortMonths = [
        'Jan',
        'Feb',
        'Mär',
        'Apr',
        'Mai',
        'Jun',
        'Jul',
        'Aug',
        'Sep',
        'Okt',
        'Nov',
        'Dez',
      ];
    
      static const List _months = [
        '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 load(Locale locale) {
        return SynchronousFuture(const GermanCupertinoLocalizations());
      }
    
      /// A [LocalizationsDelegate] that uses [DefaultCupertinoLocalizations.load]
      /// to create an instance of this class.
      static const LocalizationsDelegate delegate = _CupertinoLocalizationsDelegate();
    }
    

提交回复
热议问题