How to change CupertinoDatePicker display language?

后端 未结 4 1050
攒了一身酷
攒了一身酷 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:40

    MaterialApp( ... localizationsDelegates: [ GlobalMaterialLocalizations.delegate, GlobalWidgetsLocalizations.delegate, GlobalCupertinoLocalizations.delegate, ] )

    This solves the problem.

    0 讨论(0)
  • 2021-01-01 04:42

    firstly you should add this to pubspec.yaml

    flutter_cupertino_localizations: ^1.0.1
    
    flutter_localizations: 
      sdk: flutter
    
    0 讨论(0)
  • 2021-01-01 04:43

    I've found a solution to the problem, had to add fallback to localizationsDelegates, as follows:

    localizationsDelegates: [ ..... const FallbackCupertinoLocalisationsDelegate(), ]
    

    And the delegate:

    class FallbackCupertinoLocalisationsDelegate extends LocalizationsDelegate {
        const FallbackCupertinoLocalisationsDelegate();
    
        @override
        bool isSupported(Locale locale) => true;
    
        @override
        Future load(Locale locale) =>
        DefaultCupertinoLocalizations.load(locale);
    
        @override
        bool shouldReload(FallbackCupertinoLocalisationsDelegate old) => false;
        }
    
    0 讨论(0)
  • 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
        ],  <the rest of your configuration> );
    

    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<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();
    }
    
    0 讨论(0)
提交回复
热议问题