diff --git a/dev/tools/localization/gen_cupertino_localizations.dart b/dev/tools/localization/gen_cupertino_localizations.dart index 26408bdaca..072e030c3e 100644 --- a/dev/tools/localization/gen_cupertino_localizations.dart +++ b/dev/tools/localization/gen_cupertino_localizations.dart @@ -41,6 +41,7 @@ String generateCupertinoConstructor(LocaleInfo locale) { super.localeName = '$localeName', required super.fullYearFormat, required super.dayFormat, + required super.weekdayFormat, required super.mediumDateFormat, required super.singleDigitHourFormat, required super.singleDigitMinuteFormat, @@ -57,6 +58,7 @@ GlobalCupertinoLocalizations? getCupertinoTranslation( Locale locale, intl.DateFormat fullYearFormat, intl.DateFormat dayFormat, + intl.DateFormat weekdayFormat, intl.DateFormat mediumDateFormat, intl.DateFormat singleDigitHourFormat, intl.DateFormat singleDigitMinuteFormat, @@ -66,7 +68,7 @@ GlobalCupertinoLocalizations? getCupertinoTranslation( ) {'''; const String cupertinoFactoryArguments = - 'fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat'; + 'fullYearFormat: fullYearFormat, dayFormat: dayFormat, weekdayFormat: weekdayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat'; const String cupertinoSupportedLanguagesConstant = 'kCupertinoSupportedLanguages'; diff --git a/packages/flutter/lib/src/cupertino/localizations.dart b/packages/flutter/lib/src/cupertino/localizations.dart index 76968a68d5..43946b2655 100644 --- a/packages/flutter/lib/src/cupertino/localizations.dart +++ b/packages/flutter/lib/src/cupertino/localizations.dart @@ -343,7 +343,7 @@ class DefaultCupertinoLocalizations implements CupertinoLocalizations { const DefaultCupertinoLocalizations(); /// Short version of days of week. - static const List shortWeekdays = [ + static const List _shortWeekdays = [ 'Mon', 'Tue', 'Wed', @@ -397,7 +397,7 @@ class DefaultCupertinoLocalizations implements CupertinoLocalizations { @override String datePickerDayOfMonth(int dayIndex, [int? weekDay]) { if (weekDay != null) { - return ' ${shortWeekdays[weekDay - DateTime.monday]} $dayIndex '; + return ' ${_shortWeekdays[weekDay - DateTime.monday]} $dayIndex '; } return dayIndex.toString(); @@ -422,7 +422,7 @@ class DefaultCupertinoLocalizations implements CupertinoLocalizations { @override String datePickerMediumDate(DateTime date) { - return '${shortWeekdays[date.weekday - DateTime.monday]} ' + return '${_shortWeekdays[date.weekday - DateTime.monday]} ' '${_shortMonths[date.month - DateTime.january]} ' '${date.day.toString().padRight(2)}'; } diff --git a/packages/flutter_localizations/lib/src/cupertino_localizations.dart b/packages/flutter_localizations/lib/src/cupertino_localizations.dart index ec9b821207..0fe947f81d 100644 --- a/packages/flutter_localizations/lib/src/cupertino_localizations.dart +++ b/packages/flutter_localizations/lib/src/cupertino_localizations.dart @@ -61,6 +61,7 @@ abstract class GlobalCupertinoLocalizations implements CupertinoLocalizations { required String localeName, required intl.DateFormat fullYearFormat, required intl.DateFormat dayFormat, + required intl.DateFormat weekdayFormat, required intl.DateFormat mediumDateFormat, required intl.DateFormat singleDigitHourFormat, required intl.DateFormat singleDigitMinuteFormat, @@ -70,6 +71,7 @@ abstract class GlobalCupertinoLocalizations implements CupertinoLocalizations { }) : _localeName = localeName, _fullYearFormat = fullYearFormat, _dayFormat = dayFormat, + _weekdayFormat = weekdayFormat, _mediumDateFormat = mediumDateFormat, _singleDigitHourFormat = singleDigitHourFormat, _singleDigitMinuteFormat = singleDigitMinuteFormat, @@ -80,6 +82,7 @@ abstract class GlobalCupertinoLocalizations implements CupertinoLocalizations { final String _localeName; final intl.DateFormat _fullYearFormat; final intl.DateFormat _dayFormat; + final intl.DateFormat _weekdayFormat; final intl.DateFormat _mediumDateFormat; final intl.DateFormat _singleDigitHourFormat; final intl.DateFormat _singleDigitMinuteFormat; @@ -114,11 +117,10 @@ abstract class GlobalCupertinoLocalizations implements CupertinoLocalizations { @override String datePickerDayOfMonth(int dayIndex, [int? weekDay]) { - if (weekDay != null) { - return ' ${DefaultCupertinoLocalizations.shortWeekdays[weekDay - DateTime.monday]} $dayIndex '; - } - // Year and month doesn't matter since we just want to day formatted. - return _dayFormat.format(DateTime.utc(0, 0, dayIndex)); + return weekDay != null + ? '${_weekdayFormat.format(DateTime.utc(1, 1, weekDay))} ${_dayFormat.format(DateTime.utc(1, 1, dayIndex))}' + // Year and month doesn't matter since we just want to day formatted. + : _dayFormat.format(DateTime.utc(0, 0, dayIndex)); } @override @@ -486,6 +488,7 @@ class _GlobalCupertinoLocalizationsDelegate extends LocalizationsDelegate()); expect(localizations.lookUpButtonLabel, '查询'); }); + + testWidgets('localizations.datePickerDayOfMonth uses the current locale for weekdays', (WidgetTester tester) async { + const Locale locale = Locale('zh'); + expect(GlobalCupertinoLocalizations.delegate.isSupported(locale), isTrue); + final CupertinoLocalizations localizations = await GlobalCupertinoLocalizations.delegate.load(locale); + expect(localizations, isA()); + expect(localizations.datePickerDayOfMonth(1), '1日'); + expect(localizations.datePickerDayOfMonth(1, 2), '周二 1日'); + }); } class _FakeEditableText extends EditableText {