// Copyright 2014 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// This file has been automatically generated. Please do not edit it manually.
// To regenerate the file, use:
// dart dev/tools/localization/bin/gen_localizations.dart --overwrite

import 'dart:collection';

import 'package:flutter/foundation.dart';
import 'package:flutter/cupertino.dart';
import 'package:intl/intl.dart' as intl;

import '../cupertino_localizations.dart';

// The classes defined here encode all of the translations found in the
// `flutter_localizations/lib/src/l10n/*.arb` files.
//
// These classes are constructed by the [getCupertinoTranslation] method at the
// bottom of this file, and used by the [_GlobalCupertinoLocalizationsDelegate.load]
// method defined in `flutter_localizations/lib/src/cupertino_localizations.dart`.

/// The translations for Afrikaans (`af`).
class CupertinoLocalizationAf extends GlobalCupertinoLocalizations {
  /// Create an instance of the translation bundle for Afrikaans.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationAf({
    String localeName = 'af',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get alertDialogLabel => 'Opletberig';

  @override
  String get anteMeridiemAbbreviation => 'vm.';

  @override
  String get copyButtonLabel => 'Kopieer';

  @override
  String get cutButtonLabel => 'Knip';

  @override
  String get datePickerDateOrderString => 'dmy';

  @override
  String get datePickerDateTimeOrderString => 'date_time_dayPeriod';

  @override
  String get datePickerHourSemanticsLabelFew => null;

  @override
  String get datePickerHourSemanticsLabelMany => null;

  @override
  String get datePickerHourSemanticsLabelOne => r'$hour uur';

  @override
  String get datePickerHourSemanticsLabelOther => r'$hour uur';

  @override
  String get datePickerHourSemanticsLabelTwo => null;

  @override
  String get datePickerHourSemanticsLabelZero => null;

  @override
  String get datePickerMinuteSemanticsLabelFew => null;

  @override
  String get datePickerMinuteSemanticsLabelMany => null;

  @override
  String get datePickerMinuteSemanticsLabelOne => '1 minuut';

  @override
  String get datePickerMinuteSemanticsLabelOther => r'$minute minute';

  @override
  String get datePickerMinuteSemanticsLabelTwo => null;

  @override
  String get datePickerMinuteSemanticsLabelZero => null;

  @override
  String get modalBarrierDismissLabel => 'Maak toe';

  @override
  String get pasteButtonLabel => 'Plak';

  @override
  String get postMeridiemAbbreviation => 'nm.';

  @override
  String get searchTextFieldPlaceholerLabel => 'Search';

  @override
  String get selectAllButtonLabel => 'Kies alles';

  @override
  String get tabSemanticsLabelRaw => r'Oortjie $tabIndex van $tabCount';

  @override
  String get timerPickerHourLabelFew => null;

  @override
  String get timerPickerHourLabelMany => null;

  @override
  String get timerPickerHourLabelOne => 'uur';

  @override
  String get timerPickerHourLabelOther => 'uur';

  @override
  String get timerPickerHourLabelTwo => null;

  @override
  String get timerPickerHourLabelZero => null;

  @override
  String get timerPickerMinuteLabelFew => null;

  @override
  String get timerPickerMinuteLabelMany => null;

  @override
  String get timerPickerMinuteLabelOne => 'min.';

  @override
  String get timerPickerMinuteLabelOther => 'min.';

  @override
  String get timerPickerMinuteLabelTwo => null;

  @override
  String get timerPickerMinuteLabelZero => null;

  @override
  String get timerPickerSecondLabelFew => null;

  @override
  String get timerPickerSecondLabelMany => null;

  @override
  String get timerPickerSecondLabelOne => 'sek.';

  @override
  String get timerPickerSecondLabelOther => 'sek.';

  @override
  String get timerPickerSecondLabelTwo => null;

  @override
  String get timerPickerSecondLabelZero => null;

  @override
  String get todayLabel => 'Vandag';
}

/// The translations for Amharic (`am`).
class CupertinoLocalizationAm extends GlobalCupertinoLocalizations {
  /// Create an instance of the translation bundle for Amharic.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationAm({
    String localeName = 'am',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get alertDialogLabel => 'ማንቂያ';

  @override
  String get anteMeridiemAbbreviation => 'ጥዋት';

  @override
  String get copyButtonLabel => 'ቅዳ';

  @override
  String get cutButtonLabel => 'ቁረጥ';

  @override
  String get datePickerDateOrderString => 'dmy';

  @override
  String get datePickerDateTimeOrderString => 'date_time_dayPeriod';

  @override
  String get datePickerHourSemanticsLabelFew => null;

  @override
  String get datePickerHourSemanticsLabelMany => null;

  @override
  String get datePickerHourSemanticsLabelOne => r'$hour ሰዓት';

  @override
  String get datePickerHourSemanticsLabelOther => r'$hour ሰዓት';

  @override
  String get datePickerHourSemanticsLabelTwo => null;

  @override
  String get datePickerHourSemanticsLabelZero => null;

  @override
  String get datePickerMinuteSemanticsLabelFew => null;

  @override
  String get datePickerMinuteSemanticsLabelMany => null;

  @override
  String get datePickerMinuteSemanticsLabelOne => '1 ደቂቃ';

  @override
  String get datePickerMinuteSemanticsLabelOther => r'$minute ደቂቃዎች';

  @override
  String get datePickerMinuteSemanticsLabelTwo => null;

  @override
  String get datePickerMinuteSemanticsLabelZero => null;

  @override
  String get modalBarrierDismissLabel => 'አሰናብት';

  @override
  String get pasteButtonLabel => 'ለጥፍ';

  @override
  String get postMeridiemAbbreviation => 'ከሰዓት';

  @override
  String get searchTextFieldPlaceholerLabel => 'Search';

  @override
  String get selectAllButtonLabel => 'ሁሉንም ምረጥ';

  @override
  String get tabSemanticsLabelRaw => r'ትር $tabIndex ከ$tabCount';

  @override
  String get timerPickerHourLabelFew => null;

  @override
  String get timerPickerHourLabelMany => null;

  @override
  String get timerPickerHourLabelOne => 'ሰዓት';

  @override
  String get timerPickerHourLabelOther => 'ሰዓቶች';

  @override
  String get timerPickerHourLabelTwo => null;

  @override
  String get timerPickerHourLabelZero => null;

  @override
  String get timerPickerMinuteLabelFew => null;

  @override
  String get timerPickerMinuteLabelMany => null;

  @override
  String get timerPickerMinuteLabelOne => 'ደቂቃ';

  @override
  String get timerPickerMinuteLabelOther => 'ደቂቃ';

  @override
  String get timerPickerMinuteLabelTwo => null;

  @override
  String get timerPickerMinuteLabelZero => null;

  @override
  String get timerPickerSecondLabelFew => null;

  @override
  String get timerPickerSecondLabelMany => null;

  @override
  String get timerPickerSecondLabelOne => 'ሴኮ';

  @override
  String get timerPickerSecondLabelOther => 'ሴኮ';

  @override
  String get timerPickerSecondLabelTwo => null;

  @override
  String get timerPickerSecondLabelZero => null;

  @override
  String get todayLabel => 'ዛሬ';
}

/// The translations for Arabic (`ar`).
class CupertinoLocalizationAr extends GlobalCupertinoLocalizations {
  /// Create an instance of the translation bundle for Arabic.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationAr({
    String localeName = 'ar',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get alertDialogLabel => 'تنبيه';

  @override
  String get anteMeridiemAbbreviation => 'ص';

  @override
  String get copyButtonLabel => 'نسخ';

  @override
  String get cutButtonLabel => 'قص';

  @override
  String get datePickerDateOrderString => 'dmy';

  @override
  String get datePickerDateTimeOrderString => 'date_time_dayPeriod';

  @override
  String get datePickerHourSemanticsLabelFew => r'$hour بالضبط';

  @override
  String get datePickerHourSemanticsLabelMany => r'$hour بالضبط';

  @override
  String get datePickerHourSemanticsLabelOne => r'$hour بالضبط';

  @override
  String get datePickerHourSemanticsLabelOther => r'$hour بالضبط';

  @override
  String get datePickerHourSemanticsLabelTwo => r'$hour بالضبط';

  @override
  String get datePickerHourSemanticsLabelZero => r'$hour بالضبط';

  @override
  String get datePickerMinuteSemanticsLabelFew => r'$minute دقائق';

  @override
  String get datePickerMinuteSemanticsLabelMany => r'$minute دقيقة​';

  @override
  String get datePickerMinuteSemanticsLabelOne => 'دقيقة واحدة';

  @override
  String get datePickerMinuteSemanticsLabelOther => r'$minute دقيقة​';

  @override
  String get datePickerMinuteSemanticsLabelTwo => r'دقيقتان ($minute)';

  @override
  String get datePickerMinuteSemanticsLabelZero => r'$minute دقيقة​';

  @override
  String get modalBarrierDismissLabel => 'رفض';

  @override
  String get pasteButtonLabel => 'لصق';

  @override
  String get postMeridiemAbbreviation => 'م';

  @override
  String get searchTextFieldPlaceholerLabel => 'Search';

  @override
  String get selectAllButtonLabel => 'اختيار الكل';

  @override
  String get tabSemanticsLabelRaw => r'علامة التبويب $tabIndex من $tabCount';

  @override
  String get timerPickerHourLabelFew => 'ساعات';

  @override
  String get timerPickerHourLabelMany => 'ساعة';

  @override
  String get timerPickerHourLabelOne => 'ساعة';

  @override
  String get timerPickerHourLabelOther => 'ساعة';

  @override
  String get timerPickerHourLabelTwo => 'ساعتان';

  @override
  String get timerPickerHourLabelZero => 'ساعة';

  @override
  String get timerPickerMinuteLabelFew => 'دقائق';

  @override
  String get timerPickerMinuteLabelMany => 'دقيقة';

  @override
  String get timerPickerMinuteLabelOne => 'دقيقة واحدة';

  @override
  String get timerPickerMinuteLabelOther => 'دقيقة';

  @override
  String get timerPickerMinuteLabelTwo => 'دقيقتان';

  @override
  String get timerPickerMinuteLabelZero => 'دقيقة';

  @override
  String get timerPickerSecondLabelFew => 'ثوانٍ';

  @override
  String get timerPickerSecondLabelMany => 'ثانية';

  @override
  String get timerPickerSecondLabelOne => 'ثانية واحدة';

  @override
  String get timerPickerSecondLabelOther => 'ثانية';

  @override
  String get timerPickerSecondLabelTwo => 'ثانيتان';

  @override
  String get timerPickerSecondLabelZero => 'ثانية';

  @override
  String get todayLabel => 'اليوم';
}

/// The translations for Assamese (`as`).
class CupertinoLocalizationAs extends GlobalCupertinoLocalizations {
  /// Create an instance of the translation bundle for Assamese.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationAs({
    String localeName = 'as',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get alertDialogLabel => 'সতৰ্কবাৰ্তা';

  @override
  String get anteMeridiemAbbreviation => 'পূৰ্বাহ্ন';

  @override
  String get copyButtonLabel => 'প্ৰতিলিপি কৰক';

  @override
  String get cutButtonLabel => 'কাট কৰক';

  @override
  String get datePickerDateOrderString => 'mdy';

  @override
  String get datePickerDateTimeOrderString => 'date_time_dayPeriod';

  @override
  String get datePickerHourSemanticsLabelFew => null;

  @override
  String get datePickerHourSemanticsLabelMany => null;

  @override
  String get datePickerHourSemanticsLabelOne => r'$hour বাজিছে';

  @override
  String get datePickerHourSemanticsLabelOther => r'$hour বাজিছে';

  @override
  String get datePickerHourSemanticsLabelTwo => null;

  @override
  String get datePickerHourSemanticsLabelZero => null;

  @override
  String get datePickerMinuteSemanticsLabelFew => null;

  @override
  String get datePickerMinuteSemanticsLabelMany => null;

  @override
  String get datePickerMinuteSemanticsLabelOne => '১মিনিট';

  @override
  String get datePickerMinuteSemanticsLabelOther => r'$minuteমিনিট';

  @override
  String get datePickerMinuteSemanticsLabelTwo => null;

  @override
  String get datePickerMinuteSemanticsLabelZero => null;

  @override
  String get modalBarrierDismissLabel => 'অগ্ৰাহ্য কৰক';

  @override
  String get pasteButtonLabel => "পে'ষ্ট কৰক";

  @override
  String get postMeridiemAbbreviation => 'অপৰাহ্ন';

  @override
  String get searchTextFieldPlaceholerLabel => 'Search';

  @override
  String get selectAllButtonLabel => 'সকলো বাছনি কৰক';

  @override
  String get tabSemanticsLabelRaw => r'$tabCount টা টেবৰ $tabIndex নম্বৰটো';

  @override
  String get timerPickerHourLabelFew => null;

  @override
  String get timerPickerHourLabelMany => null;

  @override
  String get timerPickerHourLabelOne => 'ঘণ্টা';

  @override
  String get timerPickerHourLabelOther => 'ঘণ্টা';

  @override
  String get timerPickerHourLabelTwo => null;

  @override
  String get timerPickerHourLabelZero => null;

  @override
  String get timerPickerMinuteLabelFew => null;

  @override
  String get timerPickerMinuteLabelMany => null;

  @override
  String get timerPickerMinuteLabelOne => 'মিনিট।';

  @override
  String get timerPickerMinuteLabelOther => 'মিনিট।';

  @override
  String get timerPickerMinuteLabelTwo => null;

  @override
  String get timerPickerMinuteLabelZero => null;

  @override
  String get timerPickerSecondLabelFew => null;

  @override
  String get timerPickerSecondLabelMany => null;

  @override
  String get timerPickerSecondLabelOne => 'ছেকেণ্ড।';

  @override
  String get timerPickerSecondLabelOther => 'ছেকেণ্ড।';

  @override
  String get timerPickerSecondLabelTwo => null;

  @override
  String get timerPickerSecondLabelZero => null;

  @override
  String get todayLabel => 'আজি';
}

/// The translations for Azerbaijani (`az`).
class CupertinoLocalizationAz extends GlobalCupertinoLocalizations {
  /// Create an instance of the translation bundle for Azerbaijani.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationAz({
    String localeName = 'az',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get alertDialogLabel => 'Bildiriş';

  @override
  String get anteMeridiemAbbreviation => 'AM';

  @override
  String get copyButtonLabel => 'Kopyalayın';

  @override
  String get cutButtonLabel => 'Kəsin';

  @override
  String get datePickerDateOrderString => 'mdy';

  @override
  String get datePickerDateTimeOrderString => 'date_time_dayPeriod';

  @override
  String get datePickerHourSemanticsLabelFew => null;

  @override
  String get datePickerHourSemanticsLabelMany => null;

  @override
  String get datePickerHourSemanticsLabelOne => r'Saat $hour';

  @override
  String get datePickerHourSemanticsLabelOther => r'Saat $hour';

  @override
  String get datePickerHourSemanticsLabelTwo => null;

  @override
  String get datePickerHourSemanticsLabelZero => null;

  @override
  String get datePickerMinuteSemanticsLabelFew => null;

  @override
  String get datePickerMinuteSemanticsLabelMany => null;

  @override
  String get datePickerMinuteSemanticsLabelOne => '1 dəqiqə';

  @override
  String get datePickerMinuteSemanticsLabelOther => r'$minute dəqiqə';

  @override
  String get datePickerMinuteSemanticsLabelTwo => null;

  @override
  String get datePickerMinuteSemanticsLabelZero => null;

  @override
  String get modalBarrierDismissLabel => 'İmtina edin';

  @override
  String get pasteButtonLabel => 'Yerləşdirin';

  @override
  String get postMeridiemAbbreviation => 'PM';

  @override
  String get searchTextFieldPlaceholerLabel => 'Search';

  @override
  String get selectAllButtonLabel => 'Hamısını seçin';

  @override
  String get tabSemanticsLabelRaw => r'Tab $tabIndex/$tabCount';

  @override
  String get timerPickerHourLabelFew => null;

  @override
  String get timerPickerHourLabelMany => null;

  @override
  String get timerPickerHourLabelOne => 'saat';

  @override
  String get timerPickerHourLabelOther => 'saat';

  @override
  String get timerPickerHourLabelTwo => null;

  @override
  String get timerPickerHourLabelZero => null;

  @override
  String get timerPickerMinuteLabelFew => null;

  @override
  String get timerPickerMinuteLabelMany => null;

  @override
  String get timerPickerMinuteLabelOne => 'dəq.';

  @override
  String get timerPickerMinuteLabelOther => 'dəq.';

  @override
  String get timerPickerMinuteLabelTwo => null;

  @override
  String get timerPickerMinuteLabelZero => null;

  @override
  String get timerPickerSecondLabelFew => null;

  @override
  String get timerPickerSecondLabelMany => null;

  @override
  String get timerPickerSecondLabelOne => 'san.';

  @override
  String get timerPickerSecondLabelOther => 'san.';

  @override
  String get timerPickerSecondLabelTwo => null;

  @override
  String get timerPickerSecondLabelZero => null;

  @override
  String get todayLabel => 'Bu gün';
}

/// The translations for Belarusian (`be`).
class CupertinoLocalizationBe extends GlobalCupertinoLocalizations {
  /// Create an instance of the translation bundle for Belarusian.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationBe({
    String localeName = 'be',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get alertDialogLabel => 'Абвестка';

  @override
  String get anteMeridiemAbbreviation => 'раніцы';

  @override
  String get copyButtonLabel => 'Капіраваць';

  @override
  String get cutButtonLabel => 'Выразаць';

  @override
  String get datePickerDateOrderString => 'mdy';

  @override
  String get datePickerDateTimeOrderString => 'date_time_dayPeriod';

  @override
  String get datePickerHourSemanticsLabelFew => r'$hour гадзіны нуль хвілін';

  @override
  String get datePickerHourSemanticsLabelMany => r'$hour гадзін нуль хвілін';

  @override
  String get datePickerHourSemanticsLabelOne => r'$hour гадзіна нуль хвілін';

  @override
  String get datePickerHourSemanticsLabelOther => r'$hour гадзіны нуль хвілін';

  @override
  String get datePickerHourSemanticsLabelTwo => null;

  @override
  String get datePickerHourSemanticsLabelZero => null;

  @override
  String get datePickerMinuteSemanticsLabelFew => r'$minute хвіліны';

  @override
  String get datePickerMinuteSemanticsLabelMany => r'$minute хвілін';

  @override
  String get datePickerMinuteSemanticsLabelOne => '1 хвіліна';

  @override
  String get datePickerMinuteSemanticsLabelOther => r'$minute хвіліны';

  @override
  String get datePickerMinuteSemanticsLabelTwo => null;

  @override
  String get datePickerMinuteSemanticsLabelZero => null;

  @override
  String get modalBarrierDismissLabel => 'Адхіліць';

  @override
  String get pasteButtonLabel => 'Уставіць';

  @override
  String get postMeridiemAbbreviation => 'вечара';

  @override
  String get searchTextFieldPlaceholerLabel => 'Search';

  @override
  String get selectAllButtonLabel => 'Выбраць усе';

  @override
  String get tabSemanticsLabelRaw => r'Укладка $tabIndex з $tabCount';

  @override
  String get timerPickerHourLabelFew => 'гадзіны';

  @override
  String get timerPickerHourLabelMany => 'гадзін';

  @override
  String get timerPickerHourLabelOne => 'гадзіна';

  @override
  String get timerPickerHourLabelOther => 'гадзіны';

  @override
  String get timerPickerHourLabelTwo => null;

  @override
  String get timerPickerHourLabelZero => null;

  @override
  String get timerPickerMinuteLabelFew => 'хв';

  @override
  String get timerPickerMinuteLabelMany => 'хв';

  @override
  String get timerPickerMinuteLabelOne => 'хв';

  @override
  String get timerPickerMinuteLabelOther => 'хв';

  @override
  String get timerPickerMinuteLabelTwo => null;

  @override
  String get timerPickerMinuteLabelZero => null;

  @override
  String get timerPickerSecondLabelFew => 'с';

  @override
  String get timerPickerSecondLabelMany => 'с';

  @override
  String get timerPickerSecondLabelOne => 'с';

  @override
  String get timerPickerSecondLabelOther => 'с';

  @override
  String get timerPickerSecondLabelTwo => null;

  @override
  String get timerPickerSecondLabelZero => null;

  @override
  String get todayLabel => 'Сёння';
}

/// The translations for Bulgarian (`bg`).
class CupertinoLocalizationBg extends GlobalCupertinoLocalizations {
  /// Create an instance of the translation bundle for Bulgarian.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationBg({
    String localeName = 'bg',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get alertDialogLabel => 'Сигнал';

  @override
  String get anteMeridiemAbbreviation => 'AM';

  @override
  String get copyButtonLabel => 'Копиране';

  @override
  String get cutButtonLabel => 'Изрязване';

  @override
  String get datePickerDateOrderString => 'dmy';

  @override
  String get datePickerDateTimeOrderString => 'date_time_dayPeriod';

  @override
  String get datePickerHourSemanticsLabelFew => null;

  @override
  String get datePickerHourSemanticsLabelMany => null;

  @override
  String get datePickerHourSemanticsLabelOne => r'$hour часа';

  @override
  String get datePickerHourSemanticsLabelOther => r'$hour часа';

  @override
  String get datePickerHourSemanticsLabelTwo => null;

  @override
  String get datePickerHourSemanticsLabelZero => null;

  @override
  String get datePickerMinuteSemanticsLabelFew => null;

  @override
  String get datePickerMinuteSemanticsLabelMany => null;

  @override
  String get datePickerMinuteSemanticsLabelOne => '1 минута';

  @override
  String get datePickerMinuteSemanticsLabelOther => r'$minute минути';

  @override
  String get datePickerMinuteSemanticsLabelTwo => null;

  @override
  String get datePickerMinuteSemanticsLabelZero => null;

  @override
  String get modalBarrierDismissLabel => 'Отхвърляне';

  @override
  String get pasteButtonLabel => 'Поставяне';

  @override
  String get postMeridiemAbbreviation => 'PM';

  @override
  String get searchTextFieldPlaceholerLabel => 'Search';

  @override
  String get selectAllButtonLabel => 'Избиране на всички';

  @override
  String get tabSemanticsLabelRaw => r'Раздел $tabIndex от $tabCount';

  @override
  String get timerPickerHourLabelFew => null;

  @override
  String get timerPickerHourLabelMany => null;

  @override
  String get timerPickerHourLabelOne => 'час';

  @override
  String get timerPickerHourLabelOther => 'часа';

  @override
  String get timerPickerHourLabelTwo => null;

  @override
  String get timerPickerHourLabelZero => null;

  @override
  String get timerPickerMinuteLabelFew => null;

  @override
  String get timerPickerMinuteLabelMany => null;

  @override
  String get timerPickerMinuteLabelOne => 'мин';

  @override
  String get timerPickerMinuteLabelOther => 'мин';

  @override
  String get timerPickerMinuteLabelTwo => null;

  @override
  String get timerPickerMinuteLabelZero => null;

  @override
  String get timerPickerSecondLabelFew => null;

  @override
  String get timerPickerSecondLabelMany => null;

  @override
  String get timerPickerSecondLabelOne => 'сек';

  @override
  String get timerPickerSecondLabelOther => 'сек';

  @override
  String get timerPickerSecondLabelTwo => null;

  @override
  String get timerPickerSecondLabelZero => null;

  @override
  String get todayLabel => 'Днес';
}

/// The translations for Bengali Bangla (`bn`).
class CupertinoLocalizationBn extends GlobalCupertinoLocalizations {
  /// Create an instance of the translation bundle for Bengali Bangla.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationBn({
    String localeName = 'bn',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get alertDialogLabel => 'সতর্কতা';

  @override
  String get anteMeridiemAbbreviation => 'AM';

  @override
  String get copyButtonLabel => 'কপি করুন';

  @override
  String get cutButtonLabel => 'কাট করুন';

  @override
  String get datePickerDateOrderString => 'mdy';

  @override
  String get datePickerDateTimeOrderString => 'date_time_dayPeriod';

  @override
  String get datePickerHourSemanticsLabelFew => null;

  @override
  String get datePickerHourSemanticsLabelMany => null;

  @override
  String get datePickerHourSemanticsLabelOne => r'$hourটা বাজে';

  @override
  String get datePickerHourSemanticsLabelOther => r'$hourটা বাজে';

  @override
  String get datePickerHourSemanticsLabelTwo => null;

  @override
  String get datePickerHourSemanticsLabelZero => null;

  @override
  String get datePickerMinuteSemanticsLabelFew => null;

  @override
  String get datePickerMinuteSemanticsLabelMany => null;

  @override
  String get datePickerMinuteSemanticsLabelOne => '১ মিনিট';

  @override
  String get datePickerMinuteSemanticsLabelOther => r'$minute মিনিট';

  @override
  String get datePickerMinuteSemanticsLabelTwo => null;

  @override
  String get datePickerMinuteSemanticsLabelZero => null;

  @override
  String get modalBarrierDismissLabel => 'খারিজ করুন';

  @override
  String get pasteButtonLabel => 'পেস্ট করুন';

  @override
  String get postMeridiemAbbreviation => 'PM';

  @override
  String get searchTextFieldPlaceholerLabel => 'Search';

  @override
  String get selectAllButtonLabel => 'সব বেছে নিন';

  @override
  String get tabSemanticsLabelRaw => r'$tabCount-এর মধ্যে $tabIndex নম্বর ট্যাব';

  @override
  String get timerPickerHourLabelFew => null;

  @override
  String get timerPickerHourLabelMany => null;

  @override
  String get timerPickerHourLabelOne => 'ঘণ্টা';

  @override
  String get timerPickerHourLabelOther => 'ঘণ্টা';

  @override
  String get timerPickerHourLabelTwo => null;

  @override
  String get timerPickerHourLabelZero => null;

  @override
  String get timerPickerMinuteLabelFew => null;

  @override
  String get timerPickerMinuteLabelMany => null;

  @override
  String get timerPickerMinuteLabelOne => 'মিনিট।';

  @override
  String get timerPickerMinuteLabelOther => 'মিনিট।';

  @override
  String get timerPickerMinuteLabelTwo => null;

  @override
  String get timerPickerMinuteLabelZero => null;

  @override
  String get timerPickerSecondLabelFew => null;

  @override
  String get timerPickerSecondLabelMany => null;

  @override
  String get timerPickerSecondLabelOne => 'সেকেন্ড।';

  @override
  String get timerPickerSecondLabelOther => 'সেকেন্ড।';

  @override
  String get timerPickerSecondLabelTwo => null;

  @override
  String get timerPickerSecondLabelZero => null;

  @override
  String get todayLabel => 'আজ';
}

/// The translations for Bosnian (`bs`).
class CupertinoLocalizationBs extends GlobalCupertinoLocalizations {
  /// Create an instance of the translation bundle for Bosnian.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationBs({
    String localeName = 'bs',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get alertDialogLabel => 'Upozorenje';

  @override
  String get anteMeridiemAbbreviation => 'prijepodne';

  @override
  String get copyButtonLabel => 'Kopiraj';

  @override
  String get cutButtonLabel => 'Izreži';

  @override
  String get datePickerDateOrderString => 'dmy';

  @override
  String get datePickerDateTimeOrderString => 'date_time_dayPeriod';

  @override
  String get datePickerHourSemanticsLabelFew => r'$hour sata';

  @override
  String get datePickerHourSemanticsLabelMany => null;

  @override
  String get datePickerHourSemanticsLabelOne => r'$hour sat';

  @override
  String get datePickerHourSemanticsLabelOther => r'$hour sati';

  @override
  String get datePickerHourSemanticsLabelTwo => null;

  @override
  String get datePickerHourSemanticsLabelZero => null;

  @override
  String get datePickerMinuteSemanticsLabelFew => r'$minute minute';

  @override
  String get datePickerMinuteSemanticsLabelMany => null;

  @override
  String get datePickerMinuteSemanticsLabelOne => '1 minuta';

  @override
  String get datePickerMinuteSemanticsLabelOther => r'$minute minuta';

  @override
  String get datePickerMinuteSemanticsLabelTwo => null;

  @override
  String get datePickerMinuteSemanticsLabelZero => null;

  @override
  String get modalBarrierDismissLabel => 'Odbaci';

  @override
  String get pasteButtonLabel => 'Zalijepi';

  @override
  String get postMeridiemAbbreviation => 'poslijepodne';

  @override
  String get searchTextFieldPlaceholerLabel => 'Search';

  @override
  String get selectAllButtonLabel => 'Odaberi sve';

  @override
  String get tabSemanticsLabelRaw => r'Kartica $tabIndex od $tabCount';

  @override
  String get timerPickerHourLabelFew => 'sata';

  @override
  String get timerPickerHourLabelMany => null;

  @override
  String get timerPickerHourLabelOne => 'sat';

  @override
  String get timerPickerHourLabelOther => 'sati';

  @override
  String get timerPickerHourLabelTwo => null;

  @override
  String get timerPickerHourLabelZero => null;

  @override
  String get timerPickerMinuteLabelFew => 'min.';

  @override
  String get timerPickerMinuteLabelMany => null;

  @override
  String get timerPickerMinuteLabelOne => 'min.';

  @override
  String get timerPickerMinuteLabelOther => 'min.';

  @override
  String get timerPickerMinuteLabelTwo => null;

  @override
  String get timerPickerMinuteLabelZero => null;

  @override
  String get timerPickerSecondLabelFew => 'sec.';

  @override
  String get timerPickerSecondLabelMany => null;

  @override
  String get timerPickerSecondLabelOne => 'sec.';

  @override
  String get timerPickerSecondLabelOther => 'sec.';

  @override
  String get timerPickerSecondLabelTwo => null;

  @override
  String get timerPickerSecondLabelZero => null;

  @override
  String get todayLabel => 'Danas';
}

/// The translations for Catalan Valencian (`ca`).
class CupertinoLocalizationCa extends GlobalCupertinoLocalizations {
  /// Create an instance of the translation bundle for Catalan Valencian.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationCa({
    String localeName = 'ca',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get alertDialogLabel => 'Alerta';

  @override
  String get anteMeridiemAbbreviation => 'AM';

  @override
  String get copyButtonLabel => 'Copia';

  @override
  String get cutButtonLabel => 'Retalla';

  @override
  String get datePickerDateOrderString => 'dmy';

  @override
  String get datePickerDateTimeOrderString => 'date_time_dayPeriod';

  @override
  String get datePickerHourSemanticsLabelFew => null;

  @override
  String get datePickerHourSemanticsLabelMany => null;

  @override
  String get datePickerHourSemanticsLabelOne => r'$hour en punt';

  @override
  String get datePickerHourSemanticsLabelOther => r'$hour en punt';

  @override
  String get datePickerHourSemanticsLabelTwo => null;

  @override
  String get datePickerHourSemanticsLabelZero => null;

  @override
  String get datePickerMinuteSemanticsLabelFew => null;

  @override
  String get datePickerMinuteSemanticsLabelMany => null;

  @override
  String get datePickerMinuteSemanticsLabelOne => '1 minut';

  @override
  String get datePickerMinuteSemanticsLabelOther => r'$minute minuts';

  @override
  String get datePickerMinuteSemanticsLabelTwo => null;

  @override
  String get datePickerMinuteSemanticsLabelZero => null;

  @override
  String get modalBarrierDismissLabel => 'Ignora';

  @override
  String get pasteButtonLabel => 'Enganxa';

  @override
  String get postMeridiemAbbreviation => 'PM';

  @override
  String get searchTextFieldPlaceholerLabel => 'Search';

  @override
  String get selectAllButtonLabel => 'Selecciona-ho tot';

  @override
  String get tabSemanticsLabelRaw => r'Pestanya $tabIndex de $tabCount';

  @override
  String get timerPickerHourLabelFew => null;

  @override
  String get timerPickerHourLabelMany => null;

  @override
  String get timerPickerHourLabelOne => 'hora';

  @override
  String get timerPickerHourLabelOther => 'hores';

  @override
  String get timerPickerHourLabelTwo => null;

  @override
  String get timerPickerHourLabelZero => null;

  @override
  String get timerPickerMinuteLabelFew => null;

  @override
  String get timerPickerMinuteLabelMany => null;

  @override
  String get timerPickerMinuteLabelOne => 'min';

  @override
  String get timerPickerMinuteLabelOther => 'min';

  @override
  String get timerPickerMinuteLabelTwo => null;

  @override
  String get timerPickerMinuteLabelZero => null;

  @override
  String get timerPickerSecondLabelFew => null;

  @override
  String get timerPickerSecondLabelMany => null;

  @override
  String get timerPickerSecondLabelOne => 's';

  @override
  String get timerPickerSecondLabelOther => 's';

  @override
  String get timerPickerSecondLabelTwo => null;

  @override
  String get timerPickerSecondLabelZero => null;

  @override
  String get todayLabel => 'Avui';
}

/// The translations for Czech (`cs`).
class CupertinoLocalizationCs extends GlobalCupertinoLocalizations {
  /// Create an instance of the translation bundle for Czech.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationCs({
    String localeName = 'cs',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get alertDialogLabel => 'Upozornění';

  @override
  String get anteMeridiemAbbreviation => 'AM';

  @override
  String get copyButtonLabel => 'Kopírovat';

  @override
  String get cutButtonLabel => 'Vyjmout';

  @override
  String get datePickerDateOrderString => 'mdy';

  @override
  String get datePickerDateTimeOrderString => 'date_time_dayPeriod';

  @override
  String get datePickerHourSemanticsLabelFew => r'$hour hodiny';

  @override
  String get datePickerHourSemanticsLabelMany => r'$hour hodiny';

  @override
  String get datePickerHourSemanticsLabelOne => r'$hour hodina';

  @override
  String get datePickerHourSemanticsLabelOther => r'$hour hodin';

  @override
  String get datePickerHourSemanticsLabelTwo => null;

  @override
  String get datePickerHourSemanticsLabelZero => null;

  @override
  String get datePickerMinuteSemanticsLabelFew => r'$minute minuty';

  @override
  String get datePickerMinuteSemanticsLabelMany => r'$minute minuty';

  @override
  String get datePickerMinuteSemanticsLabelOne => '1 minuta';

  @override
  String get datePickerMinuteSemanticsLabelOther => r'$minute minut';

  @override
  String get datePickerMinuteSemanticsLabelTwo => null;

  @override
  String get datePickerMinuteSemanticsLabelZero => null;

  @override
  String get modalBarrierDismissLabel => 'Zavřít';

  @override
  String get pasteButtonLabel => 'Vložit';

  @override
  String get postMeridiemAbbreviation => 'PM';

  @override
  String get searchTextFieldPlaceholerLabel => 'Search';

  @override
  String get selectAllButtonLabel => 'Vybrat vše';

  @override
  String get tabSemanticsLabelRaw => r'Karta $tabIndex z $tabCount';

  @override
  String get timerPickerHourLabelFew => 'hodiny';

  @override
  String get timerPickerHourLabelMany => 'hodiny';

  @override
  String get timerPickerHourLabelOne => 'hodina';

  @override
  String get timerPickerHourLabelOther => 'hodin';

  @override
  String get timerPickerHourLabelTwo => null;

  @override
  String get timerPickerHourLabelZero => null;

  @override
  String get timerPickerMinuteLabelFew => 'min';

  @override
  String get timerPickerMinuteLabelMany => 'min';

  @override
  String get timerPickerMinuteLabelOne => 'min';

  @override
  String get timerPickerMinuteLabelOther => 'min';

  @override
  String get timerPickerMinuteLabelTwo => null;

  @override
  String get timerPickerMinuteLabelZero => null;

  @override
  String get timerPickerSecondLabelFew => 's';

  @override
  String get timerPickerSecondLabelMany => 's';

  @override
  String get timerPickerSecondLabelOne => 's';

  @override
  String get timerPickerSecondLabelOther => 's';

  @override
  String get timerPickerSecondLabelTwo => null;

  @override
  String get timerPickerSecondLabelZero => null;

  @override
  String get todayLabel => 'Dnes';
}

/// The translations for Danish (`da`).
class CupertinoLocalizationDa extends GlobalCupertinoLocalizations {
  /// Create an instance of the translation bundle for Danish.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationDa({
    String localeName = 'da',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get alertDialogLabel => 'Underretning';

  @override
  String get anteMeridiemAbbreviation => 'AM';

  @override
  String get copyButtonLabel => 'Kopiér';

  @override
  String get cutButtonLabel => 'Klip';

  @override
  String get datePickerDateOrderString => 'dmy';

  @override
  String get datePickerDateTimeOrderString => 'date_time_dayPeriod';

  @override
  String get datePickerHourSemanticsLabelFew => null;

  @override
  String get datePickerHourSemanticsLabelMany => null;

  @override
  String get datePickerHourSemanticsLabelOne => r'klokken $hour';

  @override
  String get datePickerHourSemanticsLabelOther => r'klokken $hour';

  @override
  String get datePickerHourSemanticsLabelTwo => null;

  @override
  String get datePickerHourSemanticsLabelZero => null;

  @override
  String get datePickerMinuteSemanticsLabelFew => null;

  @override
  String get datePickerMinuteSemanticsLabelMany => null;

  @override
  String get datePickerMinuteSemanticsLabelOne => '1 minut';

  @override
  String get datePickerMinuteSemanticsLabelOther => r'$minute minutter';

  @override
  String get datePickerMinuteSemanticsLabelTwo => null;

  @override
  String get datePickerMinuteSemanticsLabelZero => null;

  @override
  String get modalBarrierDismissLabel => 'Afvis';

  @override
  String get pasteButtonLabel => 'Sæt ind';

  @override
  String get postMeridiemAbbreviation => 'PM';

  @override
  String get searchTextFieldPlaceholerLabel => 'Search';

  @override
  String get selectAllButtonLabel => 'Vælg alle';

  @override
  String get tabSemanticsLabelRaw => r'Fane $tabIndex af $tabCount';

  @override
  String get timerPickerHourLabelFew => null;

  @override
  String get timerPickerHourLabelMany => null;

  @override
  String get timerPickerHourLabelOne => 'time';

  @override
  String get timerPickerHourLabelOther => 'timer';

  @override
  String get timerPickerHourLabelTwo => null;

  @override
  String get timerPickerHourLabelZero => null;

  @override
  String get timerPickerMinuteLabelFew => null;

  @override
  String get timerPickerMinuteLabelMany => null;

  @override
  String get timerPickerMinuteLabelOne => 'min.';

  @override
  String get timerPickerMinuteLabelOther => 'min.';

  @override
  String get timerPickerMinuteLabelTwo => null;

  @override
  String get timerPickerMinuteLabelZero => null;

  @override
  String get timerPickerSecondLabelFew => null;

  @override
  String get timerPickerSecondLabelMany => null;

  @override
  String get timerPickerSecondLabelOne => 'sek.';

  @override
  String get timerPickerSecondLabelOther => 'sek.';

  @override
  String get timerPickerSecondLabelTwo => null;

  @override
  String get timerPickerSecondLabelZero => null;

  @override
  String get todayLabel => 'I dag';
}

/// The translations for German (`de`).
class CupertinoLocalizationDe extends GlobalCupertinoLocalizations {
  /// Create an instance of the translation bundle for German.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationDe({
    String localeName = 'de',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get alertDialogLabel => 'Benachrichtigung';

  @override
  String get anteMeridiemAbbreviation => 'AM';

  @override
  String get copyButtonLabel => 'Kopieren';

  @override
  String get cutButtonLabel => 'Ausschneiden';

  @override
  String get datePickerDateOrderString => 'dmy';

  @override
  String get datePickerDateTimeOrderString => 'date_time_dayPeriod';

  @override
  String get datePickerHourSemanticsLabelFew => null;

  @override
  String get datePickerHourSemanticsLabelMany => null;

  @override
  String get datePickerHourSemanticsLabelOne => r'$hour Uhr';

  @override
  String get datePickerHourSemanticsLabelOther => r'$hour Uhr';

  @override
  String get datePickerHourSemanticsLabelTwo => null;

  @override
  String get datePickerHourSemanticsLabelZero => null;

  @override
  String get datePickerMinuteSemanticsLabelFew => null;

  @override
  String get datePickerMinuteSemanticsLabelMany => null;

  @override
  String get datePickerMinuteSemanticsLabelOne => '1 Minute';

  @override
  String get datePickerMinuteSemanticsLabelOther => r'$minute Minuten';

  @override
  String get datePickerMinuteSemanticsLabelTwo => null;

  @override
  String get datePickerMinuteSemanticsLabelZero => null;

  @override
  String get modalBarrierDismissLabel => 'Schließen';

  @override
  String get pasteButtonLabel => 'Einsetzen';

  @override
  String get postMeridiemAbbreviation => 'PM';

  @override
  String get searchTextFieldPlaceholerLabel => 'Search';

  @override
  String get selectAllButtonLabel => 'Alles auswählen';

  @override
  String get tabSemanticsLabelRaw => r'Tab $tabIndex von $tabCount';

  @override
  String get timerPickerHourLabelFew => null;

  @override
  String get timerPickerHourLabelMany => null;

  @override
  String get timerPickerHourLabelOne => 'Stunde';

  @override
  String get timerPickerHourLabelOther => 'Stunden';

  @override
  String get timerPickerHourLabelTwo => null;

  @override
  String get timerPickerHourLabelZero => null;

  @override
  String get timerPickerMinuteLabelFew => null;

  @override
  String get timerPickerMinuteLabelMany => null;

  @override
  String get timerPickerMinuteLabelOne => 'Min.';

  @override
  String get timerPickerMinuteLabelOther => 'Min.';

  @override
  String get timerPickerMinuteLabelTwo => null;

  @override
  String get timerPickerMinuteLabelZero => null;

  @override
  String get timerPickerSecondLabelFew => null;

  @override
  String get timerPickerSecondLabelMany => null;

  @override
  String get timerPickerSecondLabelOne => 's';

  @override
  String get timerPickerSecondLabelOther => 's';

  @override
  String get timerPickerSecondLabelTwo => null;

  @override
  String get timerPickerSecondLabelZero => null;

  @override
  String get todayLabel => 'Heute';
}

/// The translations for German, as used in Switzerland (`de_CH`).
class CupertinoLocalizationDeCh extends CupertinoLocalizationDe {
  /// Create an instance of the translation bundle for German, as used in Switzerland.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationDeCh({
    String localeName = 'de_CH',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get modalBarrierDismissLabel => 'Schliessen';
}

/// The translations for Modern Greek (`el`).
class CupertinoLocalizationEl extends GlobalCupertinoLocalizations {
  /// Create an instance of the translation bundle for Modern Greek.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationEl({
    String localeName = 'el',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get alertDialogLabel => 'Ειδοποίηση';

  @override
  String get anteMeridiemAbbreviation => 'π.μ.';

  @override
  String get copyButtonLabel => 'Αντιγραφή';

  @override
  String get cutButtonLabel => 'Αποκοπή';

  @override
  String get datePickerDateOrderString => 'dmy';

  @override
  String get datePickerDateTimeOrderString => 'date_time_dayPeriod';

  @override
  String get datePickerHourSemanticsLabelFew => null;

  @override
  String get datePickerHourSemanticsLabelMany => null;

  @override
  String get datePickerHourSemanticsLabelOne => r'$hour ακριβώς';

  @override
  String get datePickerHourSemanticsLabelOther => r'$hour ακριβώς';

  @override
  String get datePickerHourSemanticsLabelTwo => null;

  @override
  String get datePickerHourSemanticsLabelZero => null;

  @override
  String get datePickerMinuteSemanticsLabelFew => null;

  @override
  String get datePickerMinuteSemanticsLabelMany => null;

  @override
  String get datePickerMinuteSemanticsLabelOne => '1 λεπτό';

  @override
  String get datePickerMinuteSemanticsLabelOther => r'$minute λεπτά';

  @override
  String get datePickerMinuteSemanticsLabelTwo => null;

  @override
  String get datePickerMinuteSemanticsLabelZero => null;

  @override
  String get modalBarrierDismissLabel => 'Παράβλεψη';

  @override
  String get pasteButtonLabel => 'Επικόλληση';

  @override
  String get postMeridiemAbbreviation => 'μ.μ.';

  @override
  String get searchTextFieldPlaceholerLabel => 'Search';

  @override
  String get selectAllButtonLabel => 'Επιλογή όλων';

  @override
  String get tabSemanticsLabelRaw => r'Καρτέλα $tabIndex από $tabCount';

  @override
  String get timerPickerHourLabelFew => null;

  @override
  String get timerPickerHourLabelMany => null;

  @override
  String get timerPickerHourLabelOne => 'ώρα';

  @override
  String get timerPickerHourLabelOther => 'ώρες';

  @override
  String get timerPickerHourLabelTwo => null;

  @override
  String get timerPickerHourLabelZero => null;

  @override
  String get timerPickerMinuteLabelFew => null;

  @override
  String get timerPickerMinuteLabelMany => null;

  @override
  String get timerPickerMinuteLabelOne => 'λεπ.';

  @override
  String get timerPickerMinuteLabelOther => 'λεπ.';

  @override
  String get timerPickerMinuteLabelTwo => null;

  @override
  String get timerPickerMinuteLabelZero => null;

  @override
  String get timerPickerSecondLabelFew => null;

  @override
  String get timerPickerSecondLabelMany => null;

  @override
  String get timerPickerSecondLabelOne => 'δευτ.';

  @override
  String get timerPickerSecondLabelOther => 'δευτ.';

  @override
  String get timerPickerSecondLabelTwo => null;

  @override
  String get timerPickerSecondLabelZero => null;

  @override
  String get todayLabel => 'Σήμερα';
}

/// The translations for English (`en`).
class CupertinoLocalizationEn extends GlobalCupertinoLocalizations {
  /// Create an instance of the translation bundle for English.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationEn({
    String localeName = 'en',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get alertDialogLabel => 'Alert';

  @override
  String get anteMeridiemAbbreviation => 'AM';

  @override
  String get copyButtonLabel => 'Copy';

  @override
  String get cutButtonLabel => 'Cut';

  @override
  String get datePickerDateOrderString => 'mdy';

  @override
  String get datePickerDateTimeOrderString => 'date_time_dayPeriod';

  @override
  String get datePickerHourSemanticsLabelFew => null;

  @override
  String get datePickerHourSemanticsLabelMany => null;

  @override
  String get datePickerHourSemanticsLabelOne => r"$hour o'clock";

  @override
  String get datePickerHourSemanticsLabelOther => r"$hour o'clock";

  @override
  String get datePickerHourSemanticsLabelTwo => null;

  @override
  String get datePickerHourSemanticsLabelZero => null;

  @override
  String get datePickerMinuteSemanticsLabelFew => null;

  @override
  String get datePickerMinuteSemanticsLabelMany => null;

  @override
  String get datePickerMinuteSemanticsLabelOne => '1 minute';

  @override
  String get datePickerMinuteSemanticsLabelOther => r'$minute minutes';

  @override
  String get datePickerMinuteSemanticsLabelTwo => null;

  @override
  String get datePickerMinuteSemanticsLabelZero => null;

  @override
  String get modalBarrierDismissLabel => 'Dismiss';

  @override
  String get pasteButtonLabel => 'Paste';

  @override
  String get postMeridiemAbbreviation => 'PM';

  @override
  String get searchTextFieldPlaceholerLabel => 'Search';

  @override
  String get selectAllButtonLabel => 'Select All';

  @override
  String get tabSemanticsLabelRaw => r'Tab $tabIndex of $tabCount';

  @override
  String get timerPickerHourLabelFew => null;

  @override
  String get timerPickerHourLabelMany => null;

  @override
  String get timerPickerHourLabelOne => 'hour';

  @override
  String get timerPickerHourLabelOther => 'hours';

  @override
  String get timerPickerHourLabelTwo => null;

  @override
  String get timerPickerHourLabelZero => null;

  @override
  String get timerPickerMinuteLabelFew => null;

  @override
  String get timerPickerMinuteLabelMany => null;

  @override
  String get timerPickerMinuteLabelOne => 'min.';

  @override
  String get timerPickerMinuteLabelOther => 'min.';

  @override
  String get timerPickerMinuteLabelTwo => null;

  @override
  String get timerPickerMinuteLabelZero => null;

  @override
  String get timerPickerSecondLabelFew => null;

  @override
  String get timerPickerSecondLabelMany => null;

  @override
  String get timerPickerSecondLabelOne => 'sec.';

  @override
  String get timerPickerSecondLabelOther => 'sec.';

  @override
  String get timerPickerSecondLabelTwo => null;

  @override
  String get timerPickerSecondLabelZero => null;

  @override
  String get todayLabel => 'Today';
}

/// The translations for English, as used in Australia (`en_AU`).
class CupertinoLocalizationEnAu extends CupertinoLocalizationEn {
  /// Create an instance of the translation bundle for English, as used in Australia.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationEnAu({
    String localeName = 'en_AU',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get datePickerDateOrderString => 'dmy';

  @override
  String get selectAllButtonLabel => 'Select all';
}

/// The translations for English, as used in Canada (`en_CA`).
class CupertinoLocalizationEnCa extends CupertinoLocalizationEn {
  /// Create an instance of the translation bundle for English, as used in Canada.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationEnCa({
    String localeName = 'en_CA',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get datePickerDateOrderString => 'dmy';

  @override
  String get selectAllButtonLabel => 'Select all';
}

/// The translations for English, as used in the United Kingdom (`en_GB`).
class CupertinoLocalizationEnGb extends CupertinoLocalizationEn {
  /// Create an instance of the translation bundle for English, as used in the United Kingdom.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationEnGb({
    String localeName = 'en_GB',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get datePickerDateOrderString => 'dmy';

  @override
  String get selectAllButtonLabel => 'Select all';
}

/// The translations for English, as used in Ireland (`en_IE`).
class CupertinoLocalizationEnIe extends CupertinoLocalizationEn {
  /// Create an instance of the translation bundle for English, as used in Ireland.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationEnIe({
    String localeName = 'en_IE',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get datePickerDateOrderString => 'dmy';

  @override
  String get selectAllButtonLabel => 'Select all';
}

/// The translations for English, as used in India (`en_IN`).
class CupertinoLocalizationEnIn extends CupertinoLocalizationEn {
  /// Create an instance of the translation bundle for English, as used in India.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationEnIn({
    String localeName = 'en_IN',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get datePickerDateOrderString => 'dmy';

  @override
  String get selectAllButtonLabel => 'Select all';
}

/// The translations for English, as used in New Zealand (`en_NZ`).
class CupertinoLocalizationEnNz extends CupertinoLocalizationEn {
  /// Create an instance of the translation bundle for English, as used in New Zealand.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationEnNz({
    String localeName = 'en_NZ',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get datePickerDateOrderString => 'dmy';

  @override
  String get selectAllButtonLabel => 'Select all';
}

/// The translations for English, as used in Singapore (`en_SG`).
class CupertinoLocalizationEnSg extends CupertinoLocalizationEn {
  /// Create an instance of the translation bundle for English, as used in Singapore.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationEnSg({
    String localeName = 'en_SG',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get datePickerDateOrderString => 'dmy';

  @override
  String get selectAllButtonLabel => 'Select all';
}

/// The translations for English, as used in South Africa (`en_ZA`).
class CupertinoLocalizationEnZa extends CupertinoLocalizationEn {
  /// Create an instance of the translation bundle for English, as used in South Africa.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationEnZa({
    String localeName = 'en_ZA',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get datePickerDateOrderString => 'dmy';

  @override
  String get selectAllButtonLabel => 'Select all';
}

/// The translations for Spanish Castilian (`es`).
class CupertinoLocalizationEs extends GlobalCupertinoLocalizations {
  /// Create an instance of the translation bundle for Spanish Castilian.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationEs({
    String localeName = 'es',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get alertDialogLabel => 'Alerta';

  @override
  String get anteMeridiemAbbreviation => 'a. m.';

  @override
  String get copyButtonLabel => 'Copiar';

  @override
  String get cutButtonLabel => 'Cortar';

  @override
  String get datePickerDateOrderString => 'dmy';

  @override
  String get datePickerDateTimeOrderString => 'date_time_dayPeriod';

  @override
  String get datePickerHourSemanticsLabelFew => null;

  @override
  String get datePickerHourSemanticsLabelMany => null;

  @override
  String get datePickerHourSemanticsLabelOne => r'$hour en punto';

  @override
  String get datePickerHourSemanticsLabelOther => r'$hour en punto';

  @override
  String get datePickerHourSemanticsLabelTwo => null;

  @override
  String get datePickerHourSemanticsLabelZero => null;

  @override
  String get datePickerMinuteSemanticsLabelFew => null;

  @override
  String get datePickerMinuteSemanticsLabelMany => null;

  @override
  String get datePickerMinuteSemanticsLabelOne => '1 minuto';

  @override
  String get datePickerMinuteSemanticsLabelOther => r'$minute minutos';

  @override
  String get datePickerMinuteSemanticsLabelTwo => null;

  @override
  String get datePickerMinuteSemanticsLabelZero => null;

  @override
  String get modalBarrierDismissLabel => 'Cerrar';

  @override
  String get pasteButtonLabel => 'Pegar';

  @override
  String get postMeridiemAbbreviation => 'p. m.';

  @override
  String get searchTextFieldPlaceholerLabel => 'Search';

  @override
  String get selectAllButtonLabel => 'Seleccionar todos';

  @override
  String get tabSemanticsLabelRaw => r'Pestaña $tabIndex de $tabCount';

  @override
  String get timerPickerHourLabelFew => null;

  @override
  String get timerPickerHourLabelMany => null;

  @override
  String get timerPickerHourLabelOne => 'hora';

  @override
  String get timerPickerHourLabelOther => 'horas';

  @override
  String get timerPickerHourLabelTwo => null;

  @override
  String get timerPickerHourLabelZero => null;

  @override
  String get timerPickerMinuteLabelFew => null;

  @override
  String get timerPickerMinuteLabelMany => null;

  @override
  String get timerPickerMinuteLabelOne => 'min';

  @override
  String get timerPickerMinuteLabelOther => 'min';

  @override
  String get timerPickerMinuteLabelTwo => null;

  @override
  String get timerPickerMinuteLabelZero => null;

  @override
  String get timerPickerSecondLabelFew => null;

  @override
  String get timerPickerSecondLabelMany => null;

  @override
  String get timerPickerSecondLabelOne => 's';

  @override
  String get timerPickerSecondLabelOther => 's';

  @override
  String get timerPickerSecondLabelTwo => null;

  @override
  String get timerPickerSecondLabelZero => null;

  @override
  String get todayLabel => 'Hoy';
}

/// The translations for Spanish Castilian, as used in Latin America and the Caribbean (`es_419`).
class CupertinoLocalizationEs419 extends CupertinoLocalizationEs {
  /// Create an instance of the translation bundle for Spanish Castilian, as used in Latin America and the Caribbean.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationEs419({
    String localeName = 'es_419',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get datePickerHourSemanticsLabelOne => r'$hour en punto';

  @override
  String get datePickerHourSemanticsLabelOther => r'$hour en punto';

  @override
  String get anteMeridiemAbbreviation => 'a.m.';

  @override
  String get postMeridiemAbbreviation => 'p.m.';

  @override
  String get modalBarrierDismissLabel => 'Descartar';
}

/// The translations for Spanish Castilian, as used in Argentina (`es_AR`).
class CupertinoLocalizationEsAr extends CupertinoLocalizationEs {
  /// Create an instance of the translation bundle for Spanish Castilian, as used in Argentina.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationEsAr({
    String localeName = 'es_AR',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get datePickerHourSemanticsLabelOne => r'$hour en punto';

  @override
  String get datePickerHourSemanticsLabelOther => r'$hour en punto';

  @override
  String get anteMeridiemAbbreviation => 'a.m.';

  @override
  String get postMeridiemAbbreviation => 'p.m.';

  @override
  String get modalBarrierDismissLabel => 'Descartar';
}

/// The translations for Spanish Castilian, as used in Bolivia (`es_BO`).
class CupertinoLocalizationEsBo extends CupertinoLocalizationEs {
  /// Create an instance of the translation bundle for Spanish Castilian, as used in Bolivia.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationEsBo({
    String localeName = 'es_BO',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get datePickerHourSemanticsLabelOne => r'$hour en punto';

  @override
  String get datePickerHourSemanticsLabelOther => r'$hour en punto';

  @override
  String get anteMeridiemAbbreviation => 'a.m.';

  @override
  String get postMeridiemAbbreviation => 'p.m.';

  @override
  String get modalBarrierDismissLabel => 'Descartar';
}

/// The translations for Spanish Castilian, as used in Chile (`es_CL`).
class CupertinoLocalizationEsCl extends CupertinoLocalizationEs {
  /// Create an instance of the translation bundle for Spanish Castilian, as used in Chile.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationEsCl({
    String localeName = 'es_CL',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get datePickerHourSemanticsLabelOne => r'$hour en punto';

  @override
  String get datePickerHourSemanticsLabelOther => r'$hour en punto';

  @override
  String get anteMeridiemAbbreviation => 'a.m.';

  @override
  String get postMeridiemAbbreviation => 'p.m.';

  @override
  String get modalBarrierDismissLabel => 'Descartar';
}

/// The translations for Spanish Castilian, as used in Colombia (`es_CO`).
class CupertinoLocalizationEsCo extends CupertinoLocalizationEs {
  /// Create an instance of the translation bundle for Spanish Castilian, as used in Colombia.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationEsCo({
    String localeName = 'es_CO',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get datePickerHourSemanticsLabelOne => r'$hour en punto';

  @override
  String get datePickerHourSemanticsLabelOther => r'$hour en punto';

  @override
  String get anteMeridiemAbbreviation => 'a.m.';

  @override
  String get postMeridiemAbbreviation => 'p.m.';

  @override
  String get modalBarrierDismissLabel => 'Descartar';
}

/// The translations for Spanish Castilian, as used in Costa Rica (`es_CR`).
class CupertinoLocalizationEsCr extends CupertinoLocalizationEs {
  /// Create an instance of the translation bundle for Spanish Castilian, as used in Costa Rica.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationEsCr({
    String localeName = 'es_CR',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get datePickerHourSemanticsLabelOne => r'$hour en punto';

  @override
  String get datePickerHourSemanticsLabelOther => r'$hour en punto';

  @override
  String get anteMeridiemAbbreviation => 'a.m.';

  @override
  String get postMeridiemAbbreviation => 'p.m.';

  @override
  String get modalBarrierDismissLabel => 'Descartar';
}

/// The translations for Spanish Castilian, as used in the Dominican Republic (`es_DO`).
class CupertinoLocalizationEsDo extends CupertinoLocalizationEs {
  /// Create an instance of the translation bundle for Spanish Castilian, as used in the Dominican Republic.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationEsDo({
    String localeName = 'es_DO',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get datePickerHourSemanticsLabelOne => r'$hour en punto';

  @override
  String get datePickerHourSemanticsLabelOther => r'$hour en punto';

  @override
  String get anteMeridiemAbbreviation => 'a.m.';

  @override
  String get postMeridiemAbbreviation => 'p.m.';

  @override
  String get modalBarrierDismissLabel => 'Descartar';
}

/// The translations for Spanish Castilian, as used in Ecuador (`es_EC`).
class CupertinoLocalizationEsEc extends CupertinoLocalizationEs {
  /// Create an instance of the translation bundle for Spanish Castilian, as used in Ecuador.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationEsEc({
    String localeName = 'es_EC',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get datePickerHourSemanticsLabelOne => r'$hour en punto';

  @override
  String get datePickerHourSemanticsLabelOther => r'$hour en punto';

  @override
  String get anteMeridiemAbbreviation => 'a.m.';

  @override
  String get postMeridiemAbbreviation => 'p.m.';

  @override
  String get modalBarrierDismissLabel => 'Descartar';
}

/// The translations for Spanish Castilian, as used in Guatemala (`es_GT`).
class CupertinoLocalizationEsGt extends CupertinoLocalizationEs {
  /// Create an instance of the translation bundle for Spanish Castilian, as used in Guatemala.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationEsGt({
    String localeName = 'es_GT',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get datePickerHourSemanticsLabelOne => r'$hour en punto';

  @override
  String get datePickerHourSemanticsLabelOther => r'$hour en punto';

  @override
  String get anteMeridiemAbbreviation => 'a.m.';

  @override
  String get postMeridiemAbbreviation => 'p.m.';

  @override
  String get modalBarrierDismissLabel => 'Descartar';
}

/// The translations for Spanish Castilian, as used in Honduras (`es_HN`).
class CupertinoLocalizationEsHn extends CupertinoLocalizationEs {
  /// Create an instance of the translation bundle for Spanish Castilian, as used in Honduras.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationEsHn({
    String localeName = 'es_HN',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get datePickerHourSemanticsLabelOne => r'$hour en punto';

  @override
  String get datePickerHourSemanticsLabelOther => r'$hour en punto';

  @override
  String get anteMeridiemAbbreviation => 'a.m.';

  @override
  String get postMeridiemAbbreviation => 'p.m.';

  @override
  String get modalBarrierDismissLabel => 'Descartar';
}

/// The translations for Spanish Castilian, as used in Mexico (`es_MX`).
class CupertinoLocalizationEsMx extends CupertinoLocalizationEs {
  /// Create an instance of the translation bundle for Spanish Castilian, as used in Mexico.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationEsMx({
    String localeName = 'es_MX',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get datePickerHourSemanticsLabelOne => r'$hour en punto';

  @override
  String get datePickerHourSemanticsLabelOther => r'$hour en punto';

  @override
  String get anteMeridiemAbbreviation => 'a.m.';

  @override
  String get postMeridiemAbbreviation => 'p.m.';

  @override
  String get modalBarrierDismissLabel => 'Descartar';
}

/// The translations for Spanish Castilian, as used in Nicaragua (`es_NI`).
class CupertinoLocalizationEsNi extends CupertinoLocalizationEs {
  /// Create an instance of the translation bundle for Spanish Castilian, as used in Nicaragua.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationEsNi({
    String localeName = 'es_NI',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get datePickerHourSemanticsLabelOne => r'$hour en punto';

  @override
  String get datePickerHourSemanticsLabelOther => r'$hour en punto';

  @override
  String get anteMeridiemAbbreviation => 'a.m.';

  @override
  String get postMeridiemAbbreviation => 'p.m.';

  @override
  String get modalBarrierDismissLabel => 'Descartar';
}

/// The translations for Spanish Castilian, as used in Panama (`es_PA`).
class CupertinoLocalizationEsPa extends CupertinoLocalizationEs {
  /// Create an instance of the translation bundle for Spanish Castilian, as used in Panama.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationEsPa({
    String localeName = 'es_PA',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get datePickerHourSemanticsLabelOne => r'$hour en punto';

  @override
  String get datePickerHourSemanticsLabelOther => r'$hour en punto';

  @override
  String get anteMeridiemAbbreviation => 'a.m.';

  @override
  String get postMeridiemAbbreviation => 'p.m.';

  @override
  String get modalBarrierDismissLabel => 'Descartar';
}

/// The translations for Spanish Castilian, as used in Peru (`es_PE`).
class CupertinoLocalizationEsPe extends CupertinoLocalizationEs {
  /// Create an instance of the translation bundle for Spanish Castilian, as used in Peru.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationEsPe({
    String localeName = 'es_PE',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get datePickerHourSemanticsLabelOne => r'$hour en punto';

  @override
  String get datePickerHourSemanticsLabelOther => r'$hour en punto';

  @override
  String get anteMeridiemAbbreviation => 'a.m.';

  @override
  String get postMeridiemAbbreviation => 'p.m.';

  @override
  String get modalBarrierDismissLabel => 'Descartar';
}

/// The translations for Spanish Castilian, as used in Puerto Rico (`es_PR`).
class CupertinoLocalizationEsPr extends CupertinoLocalizationEs {
  /// Create an instance of the translation bundle for Spanish Castilian, as used in Puerto Rico.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationEsPr({
    String localeName = 'es_PR',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get datePickerHourSemanticsLabelOne => r'$hour en punto';

  @override
  String get datePickerHourSemanticsLabelOther => r'$hour en punto';

  @override
  String get anteMeridiemAbbreviation => 'a.m.';

  @override
  String get postMeridiemAbbreviation => 'p.m.';

  @override
  String get modalBarrierDismissLabel => 'Descartar';
}

/// The translations for Spanish Castilian, as used in Paraguay (`es_PY`).
class CupertinoLocalizationEsPy extends CupertinoLocalizationEs {
  /// Create an instance of the translation bundle for Spanish Castilian, as used in Paraguay.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationEsPy({
    String localeName = 'es_PY',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get datePickerHourSemanticsLabelOne => r'$hour en punto';

  @override
  String get datePickerHourSemanticsLabelOther => r'$hour en punto';

  @override
  String get anteMeridiemAbbreviation => 'a.m.';

  @override
  String get postMeridiemAbbreviation => 'p.m.';

  @override
  String get modalBarrierDismissLabel => 'Descartar';
}

/// The translations for Spanish Castilian, as used in El Salvador (`es_SV`).
class CupertinoLocalizationEsSv extends CupertinoLocalizationEs {
  /// Create an instance of the translation bundle for Spanish Castilian, as used in El Salvador.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationEsSv({
    String localeName = 'es_SV',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get datePickerHourSemanticsLabelOne => r'$hour en punto';

  @override
  String get datePickerHourSemanticsLabelOther => r'$hour en punto';

  @override
  String get anteMeridiemAbbreviation => 'a.m.';

  @override
  String get postMeridiemAbbreviation => 'p.m.';

  @override
  String get modalBarrierDismissLabel => 'Descartar';
}

/// The translations for Spanish Castilian, as used in the United States (`es_US`).
class CupertinoLocalizationEsUs extends CupertinoLocalizationEs {
  /// Create an instance of the translation bundle for Spanish Castilian, as used in the United States.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationEsUs({
    String localeName = 'es_US',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get datePickerHourSemanticsLabelOne => r'$hour en punto';

  @override
  String get datePickerHourSemanticsLabelOther => r'$hour en punto';

  @override
  String get anteMeridiemAbbreviation => 'a.m.';

  @override
  String get postMeridiemAbbreviation => 'p.m.';

  @override
  String get modalBarrierDismissLabel => 'Descartar';
}

/// The translations for Spanish Castilian, as used in Uruguay (`es_UY`).
class CupertinoLocalizationEsUy extends CupertinoLocalizationEs {
  /// Create an instance of the translation bundle for Spanish Castilian, as used in Uruguay.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationEsUy({
    String localeName = 'es_UY',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get datePickerHourSemanticsLabelOne => r'$hour en punto';

  @override
  String get datePickerHourSemanticsLabelOther => r'$hour en punto';

  @override
  String get anteMeridiemAbbreviation => 'a.m.';

  @override
  String get postMeridiemAbbreviation => 'p.m.';

  @override
  String get modalBarrierDismissLabel => 'Descartar';
}

/// The translations for Spanish Castilian, as used in Venezuela (`es_VE`).
class CupertinoLocalizationEsVe extends CupertinoLocalizationEs {
  /// Create an instance of the translation bundle for Spanish Castilian, as used in Venezuela.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationEsVe({
    String localeName = 'es_VE',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get datePickerHourSemanticsLabelOne => r'$hour en punto';

  @override
  String get datePickerHourSemanticsLabelOther => r'$hour en punto';

  @override
  String get anteMeridiemAbbreviation => 'a.m.';

  @override
  String get postMeridiemAbbreviation => 'p.m.';

  @override
  String get modalBarrierDismissLabel => 'Descartar';
}

/// The translations for Estonian (`et`).
class CupertinoLocalizationEt extends GlobalCupertinoLocalizations {
  /// Create an instance of the translation bundle for Estonian.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationEt({
    String localeName = 'et',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get alertDialogLabel => 'Märguanne';

  @override
  String get anteMeridiemAbbreviation => 'AM';

  @override
  String get copyButtonLabel => 'Kopeeri';

  @override
  String get cutButtonLabel => 'Lõika';

  @override
  String get datePickerDateOrderString => 'dmy';

  @override
  String get datePickerDateTimeOrderString => 'date_time_dayPeriod';

  @override
  String get datePickerHourSemanticsLabelFew => null;

  @override
  String get datePickerHourSemanticsLabelMany => null;

  @override
  String get datePickerHourSemanticsLabelOne => r'Kell $hour';

  @override
  String get datePickerHourSemanticsLabelOther => r'Kell $hour';

  @override
  String get datePickerHourSemanticsLabelTwo => null;

  @override
  String get datePickerHourSemanticsLabelZero => null;

  @override
  String get datePickerMinuteSemanticsLabelFew => null;

  @override
  String get datePickerMinuteSemanticsLabelMany => null;

  @override
  String get datePickerMinuteSemanticsLabelOne => '1 minut';

  @override
  String get datePickerMinuteSemanticsLabelOther => r'$minute minutit';

  @override
  String get datePickerMinuteSemanticsLabelTwo => null;

  @override
  String get datePickerMinuteSemanticsLabelZero => null;

  @override
  String get modalBarrierDismissLabel => 'Loobu';

  @override
  String get pasteButtonLabel => 'Kleebi';

  @override
  String get postMeridiemAbbreviation => 'PM';

  @override
  String get searchTextFieldPlaceholerLabel => 'Search';

  @override
  String get selectAllButtonLabel => 'Vali kõik';

  @override
  String get tabSemanticsLabelRaw => r'$tabIndex. vaheleht $tabCount-st';

  @override
  String get timerPickerHourLabelFew => null;

  @override
  String get timerPickerHourLabelMany => null;

  @override
  String get timerPickerHourLabelOne => 'tund';

  @override
  String get timerPickerHourLabelOther => 'tundi';

  @override
  String get timerPickerHourLabelTwo => null;

  @override
  String get timerPickerHourLabelZero => null;

  @override
  String get timerPickerMinuteLabelFew => null;

  @override
  String get timerPickerMinuteLabelMany => null;

  @override
  String get timerPickerMinuteLabelOne => 'min';

  @override
  String get timerPickerMinuteLabelOther => 'min';

  @override
  String get timerPickerMinuteLabelTwo => null;

  @override
  String get timerPickerMinuteLabelZero => null;

  @override
  String get timerPickerSecondLabelFew => null;

  @override
  String get timerPickerSecondLabelMany => null;

  @override
  String get timerPickerSecondLabelOne => 's';

  @override
  String get timerPickerSecondLabelOther => 's';

  @override
  String get timerPickerSecondLabelTwo => null;

  @override
  String get timerPickerSecondLabelZero => null;

  @override
  String get todayLabel => 'Täna';
}

/// The translations for Basque (`eu`).
class CupertinoLocalizationEu extends GlobalCupertinoLocalizations {
  /// Create an instance of the translation bundle for Basque.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationEu({
    String localeName = 'eu',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get alertDialogLabel => 'Alerta';

  @override
  String get anteMeridiemAbbreviation => 'AM';

  @override
  String get copyButtonLabel => 'Kopiatu';

  @override
  String get cutButtonLabel => 'Ebaki';

  @override
  String get datePickerDateOrderString => 'ymd';

  @override
  String get datePickerDateTimeOrderString => 'date_time_dayPeriod';

  @override
  String get datePickerHourSemanticsLabelFew => null;

  @override
  String get datePickerHourSemanticsLabelMany => null;

  @override
  String get datePickerHourSemanticsLabelOne => r'Ordu$houra da';

  @override
  String get datePickerHourSemanticsLabelOther => r'$hourak dira';

  @override
  String get datePickerHourSemanticsLabelTwo => null;

  @override
  String get datePickerHourSemanticsLabelZero => null;

  @override
  String get datePickerMinuteSemanticsLabelFew => null;

  @override
  String get datePickerMinuteSemanticsLabelMany => null;

  @override
  String get datePickerMinuteSemanticsLabelOne => 'Minutu bat';

  @override
  String get datePickerMinuteSemanticsLabelOther => r'$minute minutu';

  @override
  String get datePickerMinuteSemanticsLabelTwo => null;

  @override
  String get datePickerMinuteSemanticsLabelZero => null;

  @override
  String get modalBarrierDismissLabel => 'Baztertu';

  @override
  String get pasteButtonLabel => 'Itsatsi';

  @override
  String get postMeridiemAbbreviation => 'PM';

  @override
  String get searchTextFieldPlaceholerLabel => 'Search';

  @override
  String get selectAllButtonLabel => 'Hautatu guztiak';

  @override
  String get tabSemanticsLabelRaw => r'$tabIndex/$tabCount fitxa';

  @override
  String get timerPickerHourLabelFew => null;

  @override
  String get timerPickerHourLabelMany => null;

  @override
  String get timerPickerHourLabelOne => 'ordu';

  @override
  String get timerPickerHourLabelOther => 'ordu';

  @override
  String get timerPickerHourLabelTwo => null;

  @override
  String get timerPickerHourLabelZero => null;

  @override
  String get timerPickerMinuteLabelFew => null;

  @override
  String get timerPickerMinuteLabelMany => null;

  @override
  String get timerPickerMinuteLabelOne => 'min.';

  @override
  String get timerPickerMinuteLabelOther => 'min.';

  @override
  String get timerPickerMinuteLabelTwo => null;

  @override
  String get timerPickerMinuteLabelZero => null;

  @override
  String get timerPickerSecondLabelFew => null;

  @override
  String get timerPickerSecondLabelMany => null;

  @override
  String get timerPickerSecondLabelOne => 's';

  @override
  String get timerPickerSecondLabelOther => 's';

  @override
  String get timerPickerSecondLabelTwo => null;

  @override
  String get timerPickerSecondLabelZero => null;

  @override
  String get todayLabel => 'Gaur';
}

/// The translations for Persian (`fa`).
class CupertinoLocalizationFa extends GlobalCupertinoLocalizations {
  /// Create an instance of the translation bundle for Persian.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationFa({
    String localeName = 'fa',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get alertDialogLabel => 'هشدار';

  @override
  String get anteMeridiemAbbreviation => 'ق.ظ.';

  @override
  String get copyButtonLabel => 'کپی';

  @override
  String get cutButtonLabel => 'برش';

  @override
  String get datePickerDateOrderString => 'ymd';

  @override
  String get datePickerDateTimeOrderString => 'date_time_dayPeriod';

  @override
  String get datePickerHourSemanticsLabelFew => null;

  @override
  String get datePickerHourSemanticsLabelMany => null;

  @override
  String get datePickerHourSemanticsLabelOne => r'ساعت $hour';

  @override
  String get datePickerHourSemanticsLabelOther => r'ساعت $hour';

  @override
  String get datePickerHourSemanticsLabelTwo => null;

  @override
  String get datePickerHourSemanticsLabelZero => null;

  @override
  String get datePickerMinuteSemanticsLabelFew => null;

  @override
  String get datePickerMinuteSemanticsLabelMany => null;

  @override
  String get datePickerMinuteSemanticsLabelOne => '۱ دقیقه';

  @override
  String get datePickerMinuteSemanticsLabelOther => r'$minute دقیقه';

  @override
  String get datePickerMinuteSemanticsLabelTwo => null;

  @override
  String get datePickerMinuteSemanticsLabelZero => null;

  @override
  String get modalBarrierDismissLabel => 'نپذیرفتن';

  @override
  String get pasteButtonLabel => 'جای‌گذاری';

  @override
  String get postMeridiemAbbreviation => 'ب.ظ.';

  @override
  String get searchTextFieldPlaceholerLabel => 'Search';

  @override
  String get selectAllButtonLabel => 'انتخاب همه';

  @override
  String get tabSemanticsLabelRaw => r'برگه $tabIndex از $tabCount';

  @override
  String get timerPickerHourLabelFew => null;

  @override
  String get timerPickerHourLabelMany => null;

  @override
  String get timerPickerHourLabelOne => 'ساعت';

  @override
  String get timerPickerHourLabelOther => 'ساعت';

  @override
  String get timerPickerHourLabelTwo => null;

  @override
  String get timerPickerHourLabelZero => null;

  @override
  String get timerPickerMinuteLabelFew => null;

  @override
  String get timerPickerMinuteLabelMany => null;

  @override
  String get timerPickerMinuteLabelOne => 'دقیقه';

  @override
  String get timerPickerMinuteLabelOther => 'دقیقه';

  @override
  String get timerPickerMinuteLabelTwo => null;

  @override
  String get timerPickerMinuteLabelZero => null;

  @override
  String get timerPickerSecondLabelFew => null;

  @override
  String get timerPickerSecondLabelMany => null;

  @override
  String get timerPickerSecondLabelOne => 'ثانیه';

  @override
  String get timerPickerSecondLabelOther => 'ثانیه';

  @override
  String get timerPickerSecondLabelTwo => null;

  @override
  String get timerPickerSecondLabelZero => null;

  @override
  String get todayLabel => 'امروز';
}

/// The translations for Finnish (`fi`).
class CupertinoLocalizationFi extends GlobalCupertinoLocalizations {
  /// Create an instance of the translation bundle for Finnish.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationFi({
    String localeName = 'fi',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get alertDialogLabel => 'Ilmoitus';

  @override
  String get anteMeridiemAbbreviation => 'ap';

  @override
  String get copyButtonLabel => 'Kopioi';

  @override
  String get cutButtonLabel => 'Leikkaa';

  @override
  String get datePickerDateOrderString => 'dmy';

  @override
  String get datePickerDateTimeOrderString => 'date_time_dayPeriod';

  @override
  String get datePickerHourSemanticsLabelFew => null;

  @override
  String get datePickerHourSemanticsLabelMany => null;

  @override
  String get datePickerHourSemanticsLabelOne => r'klo $hour';

  @override
  String get datePickerHourSemanticsLabelOther => r'klo $hour';

  @override
  String get datePickerHourSemanticsLabelTwo => null;

  @override
  String get datePickerHourSemanticsLabelZero => null;

  @override
  String get datePickerMinuteSemanticsLabelFew => null;

  @override
  String get datePickerMinuteSemanticsLabelMany => null;

  @override
  String get datePickerMinuteSemanticsLabelOne => '1 minuutti';

  @override
  String get datePickerMinuteSemanticsLabelOther => r'$minute minuuttia';

  @override
  String get datePickerMinuteSemanticsLabelTwo => null;

  @override
  String get datePickerMinuteSemanticsLabelZero => null;

  @override
  String get modalBarrierDismissLabel => 'Ohita';

  @override
  String get pasteButtonLabel => 'Liitä';

  @override
  String get postMeridiemAbbreviation => 'ip';

  @override
  String get searchTextFieldPlaceholerLabel => 'Search';

  @override
  String get selectAllButtonLabel => 'Valitse kaikki';

  @override
  String get tabSemanticsLabelRaw => r'Välilehti $tabIndex/$tabCount';

  @override
  String get timerPickerHourLabelFew => null;

  @override
  String get timerPickerHourLabelMany => null;

  @override
  String get timerPickerHourLabelOne => 'tunti';

  @override
  String get timerPickerHourLabelOther => 'tuntia';

  @override
  String get timerPickerHourLabelTwo => null;

  @override
  String get timerPickerHourLabelZero => null;

  @override
  String get timerPickerMinuteLabelFew => null;

  @override
  String get timerPickerMinuteLabelMany => null;

  @override
  String get timerPickerMinuteLabelOne => 'min';

  @override
  String get timerPickerMinuteLabelOther => 'min';

  @override
  String get timerPickerMinuteLabelTwo => null;

  @override
  String get timerPickerMinuteLabelZero => null;

  @override
  String get timerPickerSecondLabelFew => null;

  @override
  String get timerPickerSecondLabelMany => null;

  @override
  String get timerPickerSecondLabelOne => 's';

  @override
  String get timerPickerSecondLabelOther => 's';

  @override
  String get timerPickerSecondLabelTwo => null;

  @override
  String get timerPickerSecondLabelZero => null;

  @override
  String get todayLabel => 'Tänään';
}

/// The translations for Filipino Pilipino (`fil`).
class CupertinoLocalizationFil extends GlobalCupertinoLocalizations {
  /// Create an instance of the translation bundle for Filipino Pilipino.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationFil({
    String localeName = 'fil',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get alertDialogLabel => 'Alerto';

  @override
  String get anteMeridiemAbbreviation => 'AM';

  @override
  String get copyButtonLabel => 'Kopyahin';

  @override
  String get cutButtonLabel => 'I-cut';

  @override
  String get datePickerDateOrderString => 'mdy';

  @override
  String get datePickerDateTimeOrderString => 'date_time_dayPeriod';

  @override
  String get datePickerHourSemanticsLabelFew => null;

  @override
  String get datePickerHourSemanticsLabelMany => null;

  @override
  String get datePickerHourSemanticsLabelOne => r'Ala $hour';

  @override
  String get datePickerHourSemanticsLabelOther => r'Alas $hour';

  @override
  String get datePickerHourSemanticsLabelTwo => null;

  @override
  String get datePickerHourSemanticsLabelZero => null;

  @override
  String get datePickerMinuteSemanticsLabelFew => null;

  @override
  String get datePickerMinuteSemanticsLabelMany => null;

  @override
  String get datePickerMinuteSemanticsLabelOne => '1 minuto';

  @override
  String get datePickerMinuteSemanticsLabelOther => r'$minute na minuto';

  @override
  String get datePickerMinuteSemanticsLabelTwo => null;

  @override
  String get datePickerMinuteSemanticsLabelZero => null;

  @override
  String get modalBarrierDismissLabel => 'I-dismiss';

  @override
  String get pasteButtonLabel => 'I-paste';

  @override
  String get postMeridiemAbbreviation => 'PM';

  @override
  String get searchTextFieldPlaceholerLabel => 'Search';

  @override
  String get selectAllButtonLabel => 'Piliin Lahat';

  @override
  String get tabSemanticsLabelRaw => r'Tab $tabIndex ng $tabCount';

  @override
  String get timerPickerHourLabelFew => null;

  @override
  String get timerPickerHourLabelMany => null;

  @override
  String get timerPickerHourLabelOne => 'oras';

  @override
  String get timerPickerHourLabelOther => 'na oras';

  @override
  String get timerPickerHourLabelTwo => null;

  @override
  String get timerPickerHourLabelZero => null;

  @override
  String get timerPickerMinuteLabelFew => null;

  @override
  String get timerPickerMinuteLabelMany => null;

  @override
  String get timerPickerMinuteLabelOne => 'min.';

  @override
  String get timerPickerMinuteLabelOther => 'na min.';

  @override
  String get timerPickerMinuteLabelTwo => null;

  @override
  String get timerPickerMinuteLabelZero => null;

  @override
  String get timerPickerSecondLabelFew => null;

  @override
  String get timerPickerSecondLabelMany => null;

  @override
  String get timerPickerSecondLabelOne => 'seg.';

  @override
  String get timerPickerSecondLabelOther => 'na seg.';

  @override
  String get timerPickerSecondLabelTwo => null;

  @override
  String get timerPickerSecondLabelZero => null;

  @override
  String get todayLabel => 'Ngayon';
}

/// The translations for French (`fr`).
class CupertinoLocalizationFr extends GlobalCupertinoLocalizations {
  /// Create an instance of the translation bundle for French.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationFr({
    String localeName = 'fr',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get alertDialogLabel => 'Alerte';

  @override
  String get anteMeridiemAbbreviation => 'AM';

  @override
  String get copyButtonLabel => 'Copier';

  @override
  String get cutButtonLabel => 'Couper';

  @override
  String get datePickerDateOrderString => 'dmy';

  @override
  String get datePickerDateTimeOrderString => 'date_time_dayPeriod';

  @override
  String get datePickerHourSemanticsLabelFew => null;

  @override
  String get datePickerHourSemanticsLabelMany => null;

  @override
  String get datePickerHourSemanticsLabelOne => r'$hour heure';

  @override
  String get datePickerHourSemanticsLabelOther => r'$hour heures';

  @override
  String get datePickerHourSemanticsLabelTwo => null;

  @override
  String get datePickerHourSemanticsLabelZero => null;

  @override
  String get datePickerMinuteSemanticsLabelFew => null;

  @override
  String get datePickerMinuteSemanticsLabelMany => null;

  @override
  String get datePickerMinuteSemanticsLabelOne => '1 minute';

  @override
  String get datePickerMinuteSemanticsLabelOther => r'$minute minutes';

  @override
  String get datePickerMinuteSemanticsLabelTwo => null;

  @override
  String get datePickerMinuteSemanticsLabelZero => null;

  @override
  String get modalBarrierDismissLabel => 'Ignorer';

  @override
  String get pasteButtonLabel => 'Coller';

  @override
  String get postMeridiemAbbreviation => 'PM';

  @override
  String get searchTextFieldPlaceholerLabel => 'Search';

  @override
  String get selectAllButtonLabel => 'Tout sélect.';

  @override
  String get tabSemanticsLabelRaw => r'Onglet $tabIndex sur $tabCount';

  @override
  String get timerPickerHourLabelFew => null;

  @override
  String get timerPickerHourLabelMany => null;

  @override
  String get timerPickerHourLabelOne => 'heure';

  @override
  String get timerPickerHourLabelOther => 'heures';

  @override
  String get timerPickerHourLabelTwo => null;

  @override
  String get timerPickerHourLabelZero => null;

  @override
  String get timerPickerMinuteLabelFew => null;

  @override
  String get timerPickerMinuteLabelMany => null;

  @override
  String get timerPickerMinuteLabelOne => 'minute';

  @override
  String get timerPickerMinuteLabelOther => 'minutes';

  @override
  String get timerPickerMinuteLabelTwo => null;

  @override
  String get timerPickerMinuteLabelZero => null;

  @override
  String get timerPickerSecondLabelFew => null;

  @override
  String get timerPickerSecondLabelMany => null;

  @override
  String get timerPickerSecondLabelOne => 's';

  @override
  String get timerPickerSecondLabelOther => 's';

  @override
  String get timerPickerSecondLabelTwo => null;

  @override
  String get timerPickerSecondLabelZero => null;

  @override
  String get todayLabel => "aujourd'hui";
}

/// The translations for French, as used in Canada (`fr_CA`).
class CupertinoLocalizationFrCa extends CupertinoLocalizationFr {
  /// Create an instance of the translation bundle for French, as used in Canada.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationFrCa({
    String localeName = 'fr_CA',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get datePickerHourSemanticsLabelOne => r'$hour heure';

  @override
  String get datePickerHourSemanticsLabelOther => r'$hour heures';

  @override
  String get anteMeridiemAbbreviation => 'am';

  @override
  String get postMeridiemAbbreviation => 'pm';

  @override
  String get todayLabel => "Aujourd'hui";

  @override
  String get timerPickerMinuteLabelOne => 'min';

  @override
  String get timerPickerMinuteLabelOther => 'min';

  @override
  String get selectAllButtonLabel => 'Tout sélectionner';
}

/// The translations for Galician (`gl`).
class CupertinoLocalizationGl extends GlobalCupertinoLocalizations {
  /// Create an instance of the translation bundle for Galician.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationGl({
    String localeName = 'gl',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get alertDialogLabel => 'Alerta';

  @override
  String get anteMeridiemAbbreviation => 'a.m.';

  @override
  String get copyButtonLabel => 'Copiar';

  @override
  String get cutButtonLabel => 'Cortar';

  @override
  String get datePickerDateOrderString => 'dmy';

  @override
  String get datePickerDateTimeOrderString => 'date_time_dayPeriod';

  @override
  String get datePickerHourSemanticsLabelFew => null;

  @override
  String get datePickerHourSemanticsLabelMany => null;

  @override
  String get datePickerHourSemanticsLabelOne => r'$hour en punto';

  @override
  String get datePickerHourSemanticsLabelOther => r'$hour en punto';

  @override
  String get datePickerHourSemanticsLabelTwo => null;

  @override
  String get datePickerHourSemanticsLabelZero => null;

  @override
  String get datePickerMinuteSemanticsLabelFew => null;

  @override
  String get datePickerMinuteSemanticsLabelMany => null;

  @override
  String get datePickerMinuteSemanticsLabelOne => '1 minuto';

  @override
  String get datePickerMinuteSemanticsLabelOther => r'$minute minutos';

  @override
  String get datePickerMinuteSemanticsLabelTwo => null;

  @override
  String get datePickerMinuteSemanticsLabelZero => null;

  @override
  String get modalBarrierDismissLabel => 'Ignorar';

  @override
  String get pasteButtonLabel => 'Pegar';

  @override
  String get postMeridiemAbbreviation => 'p.m.';

  @override
  String get searchTextFieldPlaceholerLabel => 'Search';

  @override
  String get selectAllButtonLabel => 'Seleccionar todo';

  @override
  String get tabSemanticsLabelRaw => r'Pestana $tabIndex de $tabCount';

  @override
  String get timerPickerHourLabelFew => null;

  @override
  String get timerPickerHourLabelMany => null;

  @override
  String get timerPickerHourLabelOne => 'hora';

  @override
  String get timerPickerHourLabelOther => 'horas';

  @override
  String get timerPickerHourLabelTwo => null;

  @override
  String get timerPickerHourLabelZero => null;

  @override
  String get timerPickerMinuteLabelFew => null;

  @override
  String get timerPickerMinuteLabelMany => null;

  @override
  String get timerPickerMinuteLabelOne => 'min';

  @override
  String get timerPickerMinuteLabelOther => 'min';

  @override
  String get timerPickerMinuteLabelTwo => null;

  @override
  String get timerPickerMinuteLabelZero => null;

  @override
  String get timerPickerSecondLabelFew => null;

  @override
  String get timerPickerSecondLabelMany => null;

  @override
  String get timerPickerSecondLabelOne => 's';

  @override
  String get timerPickerSecondLabelOther => 's';

  @override
  String get timerPickerSecondLabelTwo => null;

  @override
  String get timerPickerSecondLabelZero => null;

  @override
  String get todayLabel => 'Hoxe';
}

/// The translations for Swiss German Alemannic Alsatian (`gsw`).
class CupertinoLocalizationGsw extends GlobalCupertinoLocalizations {
  /// Create an instance of the translation bundle for Swiss German Alemannic Alsatian.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationGsw({
    String localeName = 'gsw',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get alertDialogLabel => 'Benachrichtigung';

  @override
  String get anteMeridiemAbbreviation => 'AM';

  @override
  String get copyButtonLabel => 'Kopieren';

  @override
  String get cutButtonLabel => 'Ausschneiden';

  @override
  String get datePickerDateOrderString => 'dmy';

  @override
  String get datePickerDateTimeOrderString => 'date_time_dayPeriod';

  @override
  String get datePickerHourSemanticsLabelFew => null;

  @override
  String get datePickerHourSemanticsLabelMany => null;

  @override
  String get datePickerHourSemanticsLabelOne => r'$hour Uhr';

  @override
  String get datePickerHourSemanticsLabelOther => r'$hour Uhr';

  @override
  String get datePickerHourSemanticsLabelTwo => null;

  @override
  String get datePickerHourSemanticsLabelZero => null;

  @override
  String get datePickerMinuteSemanticsLabelFew => null;

  @override
  String get datePickerMinuteSemanticsLabelMany => null;

  @override
  String get datePickerMinuteSemanticsLabelOne => '1 Minute';

  @override
  String get datePickerMinuteSemanticsLabelOther => r'$minute Minuten';

  @override
  String get datePickerMinuteSemanticsLabelTwo => null;

  @override
  String get datePickerMinuteSemanticsLabelZero => null;

  @override
  String get modalBarrierDismissLabel => 'Schließen';

  @override
  String get pasteButtonLabel => 'Einsetzen';

  @override
  String get postMeridiemAbbreviation => 'PM';

  @override
  String get searchTextFieldPlaceholerLabel => 'Search';

  @override
  String get selectAllButtonLabel => 'Alles auswählen';

  @override
  String get tabSemanticsLabelRaw => r'Tab $tabIndex von $tabCount';

  @override
  String get timerPickerHourLabelFew => null;

  @override
  String get timerPickerHourLabelMany => null;

  @override
  String get timerPickerHourLabelOne => 'Stunde';

  @override
  String get timerPickerHourLabelOther => 'Stunden';

  @override
  String get timerPickerHourLabelTwo => null;

  @override
  String get timerPickerHourLabelZero => null;

  @override
  String get timerPickerMinuteLabelFew => null;

  @override
  String get timerPickerMinuteLabelMany => null;

  @override
  String get timerPickerMinuteLabelOne => 'Min.';

  @override
  String get timerPickerMinuteLabelOther => 'Min.';

  @override
  String get timerPickerMinuteLabelTwo => null;

  @override
  String get timerPickerMinuteLabelZero => null;

  @override
  String get timerPickerSecondLabelFew => null;

  @override
  String get timerPickerSecondLabelMany => null;

  @override
  String get timerPickerSecondLabelOne => 's';

  @override
  String get timerPickerSecondLabelOther => 's';

  @override
  String get timerPickerSecondLabelTwo => null;

  @override
  String get timerPickerSecondLabelZero => null;

  @override
  String get todayLabel => 'Heute';
}

/// The translations for Gujarati (`gu`).
class CupertinoLocalizationGu extends GlobalCupertinoLocalizations {
  /// Create an instance of the translation bundle for Gujarati.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationGu({
    String localeName = 'gu',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get alertDialogLabel => 'અલર્ટ';

  @override
  String get anteMeridiemAbbreviation => 'AM';

  @override
  String get copyButtonLabel => 'કૉપિ કરો';

  @override
  String get cutButtonLabel => 'કાપો';

  @override
  String get datePickerDateOrderString => 'dmy';

  @override
  String get datePickerDateTimeOrderString => 'date_time_dayPeriod';

  @override
  String get datePickerHourSemanticsLabelFew => null;

  @override
  String get datePickerHourSemanticsLabelMany => null;

  @override
  String get datePickerHourSemanticsLabelOne => r'$hour વાગ્યો છે';

  @override
  String get datePickerHourSemanticsLabelOther => r'$hour વાગ્યા છે';

  @override
  String get datePickerHourSemanticsLabelTwo => null;

  @override
  String get datePickerHourSemanticsLabelZero => null;

  @override
  String get datePickerMinuteSemanticsLabelFew => null;

  @override
  String get datePickerMinuteSemanticsLabelMany => null;

  @override
  String get datePickerMinuteSemanticsLabelOne => '1 મિનિટ';

  @override
  String get datePickerMinuteSemanticsLabelOther => r'$minute મિનિટ';

  @override
  String get datePickerMinuteSemanticsLabelTwo => null;

  @override
  String get datePickerMinuteSemanticsLabelZero => null;

  @override
  String get modalBarrierDismissLabel => 'છોડી દો';

  @override
  String get pasteButtonLabel => 'પેસ્ટ કરો';

  @override
  String get postMeridiemAbbreviation => 'PM';

  @override
  String get searchTextFieldPlaceholerLabel => 'Search';

  @override
  String get selectAllButtonLabel => 'બધા પસંદ કરો';

  @override
  String get tabSemanticsLabelRaw => r'$tabCountમાંથી $tabIndex ટૅબ';

  @override
  String get timerPickerHourLabelFew => null;

  @override
  String get timerPickerHourLabelMany => null;

  @override
  String get timerPickerHourLabelOne => 'કલાક';

  @override
  String get timerPickerHourLabelOther => 'કલાક';

  @override
  String get timerPickerHourLabelTwo => null;

  @override
  String get timerPickerHourLabelZero => null;

  @override
  String get timerPickerMinuteLabelFew => null;

  @override
  String get timerPickerMinuteLabelMany => null;

  @override
  String get timerPickerMinuteLabelOne => 'મિનિટ';

  @override
  String get timerPickerMinuteLabelOther => 'મિનિટ';

  @override
  String get timerPickerMinuteLabelTwo => null;

  @override
  String get timerPickerMinuteLabelZero => null;

  @override
  String get timerPickerSecondLabelFew => null;

  @override
  String get timerPickerSecondLabelMany => null;

  @override
  String get timerPickerSecondLabelOne => 'સેકન્ડ';

  @override
  String get timerPickerSecondLabelOther => 'સેકન્ડ';

  @override
  String get timerPickerSecondLabelTwo => null;

  @override
  String get timerPickerSecondLabelZero => null;

  @override
  String get todayLabel => 'આજે';
}

/// The translations for Hebrew (`he`).
class CupertinoLocalizationHe extends GlobalCupertinoLocalizations {
  /// Create an instance of the translation bundle for Hebrew.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationHe({
    String localeName = 'he',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get alertDialogLabel => 'התראה';

  @override
  String get anteMeridiemAbbreviation => 'AM';

  @override
  String get copyButtonLabel => 'העתקה';

  @override
  String get cutButtonLabel => 'גזירה';

  @override
  String get datePickerDateOrderString => 'dmy';

  @override
  String get datePickerDateTimeOrderString => 'date_time_dayPeriod';

  @override
  String get datePickerHourSemanticsLabelFew => null;

  @override
  String get datePickerHourSemanticsLabelMany => r'$hour בדיוק';

  @override
  String get datePickerHourSemanticsLabelOne => r'$hour בדיוק';

  @override
  String get datePickerHourSemanticsLabelOther => r'$hour בדיוק';

  @override
  String get datePickerHourSemanticsLabelTwo => r'$hour בדיוק';

  @override
  String get datePickerHourSemanticsLabelZero => null;

  @override
  String get datePickerMinuteSemanticsLabelFew => null;

  @override
  String get datePickerMinuteSemanticsLabelMany => r'$minute דקות';

  @override
  String get datePickerMinuteSemanticsLabelOne => 'דקה אחת';

  @override
  String get datePickerMinuteSemanticsLabelOther => r'$minute דקות';

  @override
  String get datePickerMinuteSemanticsLabelTwo => r'$minute דקות';

  @override
  String get datePickerMinuteSemanticsLabelZero => null;

  @override
  String get modalBarrierDismissLabel => 'סגירה';

  @override
  String get pasteButtonLabel => 'הדבקה';

  @override
  String get postMeridiemAbbreviation => 'PM';

  @override
  String get searchTextFieldPlaceholerLabel => 'Search';

  @override
  String get selectAllButtonLabel => 'בחירת הכול';

  @override
  String get tabSemanticsLabelRaw => r'כרטיסייה $tabIndex מתוך $tabCount';

  @override
  String get timerPickerHourLabelFew => null;

  @override
  String get timerPickerHourLabelMany => 'שעות';

  @override
  String get timerPickerHourLabelOne => 'שעה';

  @override
  String get timerPickerHourLabelOther => 'שעות';

  @override
  String get timerPickerHourLabelTwo => 'שעות';

  @override
  String get timerPickerHourLabelZero => null;

  @override
  String get timerPickerMinuteLabelFew => null;

  @override
  String get timerPickerMinuteLabelMany => 'דק’';

  @override
  String get timerPickerMinuteLabelOne => 'דק’';

  @override
  String get timerPickerMinuteLabelOther => 'דק’';

  @override
  String get timerPickerMinuteLabelTwo => 'דק’';

  @override
  String get timerPickerMinuteLabelZero => null;

  @override
  String get timerPickerSecondLabelFew => null;

  @override
  String get timerPickerSecondLabelMany => 'שנ’';

  @override
  String get timerPickerSecondLabelOne => 'שנ’';

  @override
  String get timerPickerSecondLabelOther => 'שנ’';

  @override
  String get timerPickerSecondLabelTwo => 'שנ’';

  @override
  String get timerPickerSecondLabelZero => null;

  @override
  String get todayLabel => 'היום';
}

/// The translations for Hindi (`hi`).
class CupertinoLocalizationHi extends GlobalCupertinoLocalizations {
  /// Create an instance of the translation bundle for Hindi.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationHi({
    String localeName = 'hi',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get alertDialogLabel => 'अलर्ट';

  @override
  String get anteMeridiemAbbreviation => 'AM';

  @override
  String get copyButtonLabel => 'कॉपी करें';

  @override
  String get cutButtonLabel => 'काटें';

  @override
  String get datePickerDateOrderString => 'dmy';

  @override
  String get datePickerDateTimeOrderString => 'date_time_dayPeriod';

  @override
  String get datePickerHourSemanticsLabelFew => null;

  @override
  String get datePickerHourSemanticsLabelMany => null;

  @override
  String get datePickerHourSemanticsLabelOne => r'$hour बजे';

  @override
  String get datePickerHourSemanticsLabelOther => r'$hour बजे';

  @override
  String get datePickerHourSemanticsLabelTwo => null;

  @override
  String get datePickerHourSemanticsLabelZero => null;

  @override
  String get datePickerMinuteSemanticsLabelFew => null;

  @override
  String get datePickerMinuteSemanticsLabelMany => null;

  @override
  String get datePickerMinuteSemanticsLabelOne => '1 मिनट';

  @override
  String get datePickerMinuteSemanticsLabelOther => r'$minute मिनट';

  @override
  String get datePickerMinuteSemanticsLabelTwo => null;

  @override
  String get datePickerMinuteSemanticsLabelZero => null;

  @override
  String get modalBarrierDismissLabel => 'खारिज करें';

  @override
  String get pasteButtonLabel => 'चिपकाएं';

  @override
  String get postMeridiemAbbreviation => 'PM';

  @override
  String get searchTextFieldPlaceholerLabel => 'Search';

  @override
  String get selectAllButtonLabel => 'सभी चुनें';

  @override
  String get tabSemanticsLabelRaw => r'$tabCount का टैब $tabIndex';

  @override
  String get timerPickerHourLabelFew => null;

  @override
  String get timerPickerHourLabelMany => null;

  @override
  String get timerPickerHourLabelOne => 'घंटा';

  @override
  String get timerPickerHourLabelOther => 'घंटे';

  @override
  String get timerPickerHourLabelTwo => null;

  @override
  String get timerPickerHourLabelZero => null;

  @override
  String get timerPickerMinuteLabelFew => null;

  @override
  String get timerPickerMinuteLabelMany => null;

  @override
  String get timerPickerMinuteLabelOne => 'मिनट';

  @override
  String get timerPickerMinuteLabelOther => 'मिनट';

  @override
  String get timerPickerMinuteLabelTwo => null;

  @override
  String get timerPickerMinuteLabelZero => null;

  @override
  String get timerPickerSecondLabelFew => null;

  @override
  String get timerPickerSecondLabelMany => null;

  @override
  String get timerPickerSecondLabelOne => 'सेकंड';

  @override
  String get timerPickerSecondLabelOther => 'सेकंड';

  @override
  String get timerPickerSecondLabelTwo => null;

  @override
  String get timerPickerSecondLabelZero => null;

  @override
  String get todayLabel => 'आज';
}

/// The translations for Croatian (`hr`).
class CupertinoLocalizationHr extends GlobalCupertinoLocalizations {
  /// Create an instance of the translation bundle for Croatian.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationHr({
    String localeName = 'hr',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get alertDialogLabel => 'Upozorenje';

  @override
  String get anteMeridiemAbbreviation => 'prijepodne';

  @override
  String get copyButtonLabel => 'Kopiraj';

  @override
  String get cutButtonLabel => 'Izreži';

  @override
  String get datePickerDateOrderString => 'dmy';

  @override
  String get datePickerDateTimeOrderString => 'date_time_dayPeriod';

  @override
  String get datePickerHourSemanticsLabelFew => r'$hour sata';

  @override
  String get datePickerHourSemanticsLabelMany => null;

  @override
  String get datePickerHourSemanticsLabelOne => r'$hour sat';

  @override
  String get datePickerHourSemanticsLabelOther => r'$hour sati';

  @override
  String get datePickerHourSemanticsLabelTwo => null;

  @override
  String get datePickerHourSemanticsLabelZero => null;

  @override
  String get datePickerMinuteSemanticsLabelFew => r'$minute minute';

  @override
  String get datePickerMinuteSemanticsLabelMany => null;

  @override
  String get datePickerMinuteSemanticsLabelOne => 'Jedna minuta';

  @override
  String get datePickerMinuteSemanticsLabelOther => r'$minute minuta';

  @override
  String get datePickerMinuteSemanticsLabelTwo => null;

  @override
  String get datePickerMinuteSemanticsLabelZero => null;

  @override
  String get modalBarrierDismissLabel => 'Odbaci';

  @override
  String get pasteButtonLabel => 'Zalijepi';

  @override
  String get postMeridiemAbbreviation => 'popodne';

  @override
  String get searchTextFieldPlaceholerLabel => 'Search';

  @override
  String get selectAllButtonLabel => 'Odaberi sve';

  @override
  String get tabSemanticsLabelRaw => r'Kartica $tabIndex od $tabCount';

  @override
  String get timerPickerHourLabelFew => 'sata';

  @override
  String get timerPickerHourLabelMany => null;

  @override
  String get timerPickerHourLabelOne => 'sat';

  @override
  String get timerPickerHourLabelOther => 'sati';

  @override
  String get timerPickerHourLabelTwo => null;

  @override
  String get timerPickerHourLabelZero => null;

  @override
  String get timerPickerMinuteLabelFew => 'min';

  @override
  String get timerPickerMinuteLabelMany => null;

  @override
  String get timerPickerMinuteLabelOne => 'min';

  @override
  String get timerPickerMinuteLabelOther => 'min';

  @override
  String get timerPickerMinuteLabelTwo => null;

  @override
  String get timerPickerMinuteLabelZero => null;

  @override
  String get timerPickerSecondLabelFew => 's';

  @override
  String get timerPickerSecondLabelMany => null;

  @override
  String get timerPickerSecondLabelOne => 's';

  @override
  String get timerPickerSecondLabelOther => 's';

  @override
  String get timerPickerSecondLabelTwo => null;

  @override
  String get timerPickerSecondLabelZero => null;

  @override
  String get todayLabel => 'Danas';
}

/// The translations for Hungarian (`hu`).
class CupertinoLocalizationHu extends GlobalCupertinoLocalizations {
  /// Create an instance of the translation bundle for Hungarian.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationHu({
    String localeName = 'hu',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get alertDialogLabel => 'Értesítés';

  @override
  String get anteMeridiemAbbreviation => 'de.';

  @override
  String get copyButtonLabel => 'Másolás';

  @override
  String get cutButtonLabel => 'Kivágás';

  @override
  String get datePickerDateOrderString => 'ymd';

  @override
  String get datePickerDateTimeOrderString => 'date_dayPeriod_time';

  @override
  String get datePickerHourSemanticsLabelFew => null;

  @override
  String get datePickerHourSemanticsLabelMany => null;

  @override
  String get datePickerHourSemanticsLabelOne => r'$hour óra';

  @override
  String get datePickerHourSemanticsLabelOther => r'$hour óra';

  @override
  String get datePickerHourSemanticsLabelTwo => null;

  @override
  String get datePickerHourSemanticsLabelZero => null;

  @override
  String get datePickerMinuteSemanticsLabelFew => null;

  @override
  String get datePickerMinuteSemanticsLabelMany => null;

  @override
  String get datePickerMinuteSemanticsLabelOne => '1 perc';

  @override
  String get datePickerMinuteSemanticsLabelOther => r'$minute perc';

  @override
  String get datePickerMinuteSemanticsLabelTwo => null;

  @override
  String get datePickerMinuteSemanticsLabelZero => null;

  @override
  String get modalBarrierDismissLabel => 'Elvetés';

  @override
  String get pasteButtonLabel => 'Beillesztés';

  @override
  String get postMeridiemAbbreviation => 'du.';

  @override
  String get searchTextFieldPlaceholerLabel => 'Search';

  @override
  String get selectAllButtonLabel => 'Összes kijelölése';

  @override
  String get tabSemanticsLabelRaw => r'$tabCount/$tabIndex. lap';

  @override
  String get timerPickerHourLabelFew => null;

  @override
  String get timerPickerHourLabelMany => null;

  @override
  String get timerPickerHourLabelOne => 'óra';

  @override
  String get timerPickerHourLabelOther => 'óra';

  @override
  String get timerPickerHourLabelTwo => null;

  @override
  String get timerPickerHourLabelZero => null;

  @override
  String get timerPickerMinuteLabelFew => null;

  @override
  String get timerPickerMinuteLabelMany => null;

  @override
  String get timerPickerMinuteLabelOne => 'perc';

  @override
  String get timerPickerMinuteLabelOther => 'perc';

  @override
  String get timerPickerMinuteLabelTwo => null;

  @override
  String get timerPickerMinuteLabelZero => null;

  @override
  String get timerPickerSecondLabelFew => null;

  @override
  String get timerPickerSecondLabelMany => null;

  @override
  String get timerPickerSecondLabelOne => 'mp';

  @override
  String get timerPickerSecondLabelOther => 'mp';

  @override
  String get timerPickerSecondLabelTwo => null;

  @override
  String get timerPickerSecondLabelZero => null;

  @override
  String get todayLabel => 'Ma';
}

/// The translations for Armenian (`hy`).
class CupertinoLocalizationHy extends GlobalCupertinoLocalizations {
  /// Create an instance of the translation bundle for Armenian.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationHy({
    String localeName = 'hy',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get alertDialogLabel => 'Ծանուցում';

  @override
  String get anteMeridiemAbbreviation => 'AM';

  @override
  String get copyButtonLabel => 'Պատճենել';

  @override
  String get cutButtonLabel => 'Կտրել';

  @override
  String get datePickerDateOrderString => 'dmy';

  @override
  String get datePickerDateTimeOrderString => 'date_time_dayPeriod';

  @override
  String get datePickerHourSemanticsLabelFew => null;

  @override
  String get datePickerHourSemanticsLabelMany => null;

  @override
  String get datePickerHourSemanticsLabelOne => r'$hour:00';

  @override
  String get datePickerHourSemanticsLabelOther => r'$hour:00';

  @override
  String get datePickerHourSemanticsLabelTwo => null;

  @override
  String get datePickerHourSemanticsLabelZero => null;

  @override
  String get datePickerMinuteSemanticsLabelFew => null;

  @override
  String get datePickerMinuteSemanticsLabelMany => null;

  @override
  String get datePickerMinuteSemanticsLabelOne => '1 րոպե';

  @override
  String get datePickerMinuteSemanticsLabelOther => r'$minute րոպե';

  @override
  String get datePickerMinuteSemanticsLabelTwo => null;

  @override
  String get datePickerMinuteSemanticsLabelZero => null;

  @override
  String get modalBarrierDismissLabel => 'Փակել';

  @override
  String get pasteButtonLabel => 'Տեղադրել';

  @override
  String get postMeridiemAbbreviation => 'PM';

  @override
  String get searchTextFieldPlaceholerLabel => 'Search';

  @override
  String get selectAllButtonLabel => 'Նշել բոլորը';

  @override
  String get tabSemanticsLabelRaw => r'Ներդիր $tabIndex՝ $tabCount-ից';

  @override
  String get timerPickerHourLabelFew => null;

  @override
  String get timerPickerHourLabelMany => null;

  @override
  String get timerPickerHourLabelOne => 'ժամ';

  @override
  String get timerPickerHourLabelOther => 'ժամ';

  @override
  String get timerPickerHourLabelTwo => null;

  @override
  String get timerPickerHourLabelZero => null;

  @override
  String get timerPickerMinuteLabelFew => null;

  @override
  String get timerPickerMinuteLabelMany => null;

  @override
  String get timerPickerMinuteLabelOne => 'րոպե';

  @override
  String get timerPickerMinuteLabelOther => 'րոպե';

  @override
  String get timerPickerMinuteLabelTwo => null;

  @override
  String get timerPickerMinuteLabelZero => null;

  @override
  String get timerPickerSecondLabelFew => null;

  @override
  String get timerPickerSecondLabelMany => null;

  @override
  String get timerPickerSecondLabelOne => 'վրկ';

  @override
  String get timerPickerSecondLabelOther => 'վրկ';

  @override
  String get timerPickerSecondLabelTwo => null;

  @override
  String get timerPickerSecondLabelZero => null;

  @override
  String get todayLabel => 'Այսօր';
}

/// The translations for Indonesian (`id`).
class CupertinoLocalizationId extends GlobalCupertinoLocalizations {
  /// Create an instance of the translation bundle for Indonesian.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationId({
    String localeName = 'id',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get alertDialogLabel => 'Notifikasi';

  @override
  String get anteMeridiemAbbreviation => 'AM';

  @override
  String get copyButtonLabel => 'Salin';

  @override
  String get cutButtonLabel => 'Potong';

  @override
  String get datePickerDateOrderString => 'dmy';

  @override
  String get datePickerDateTimeOrderString => 'date_time_dayPeriod';

  @override
  String get datePickerHourSemanticsLabelFew => null;

  @override
  String get datePickerHourSemanticsLabelMany => null;

  @override
  String get datePickerHourSemanticsLabelOne => r'$hour tepat';

  @override
  String get datePickerHourSemanticsLabelOther => r'$hour tepat';

  @override
  String get datePickerHourSemanticsLabelTwo => null;

  @override
  String get datePickerHourSemanticsLabelZero => null;

  @override
  String get datePickerMinuteSemanticsLabelFew => null;

  @override
  String get datePickerMinuteSemanticsLabelMany => null;

  @override
  String get datePickerMinuteSemanticsLabelOne => '1 menit';

  @override
  String get datePickerMinuteSemanticsLabelOther => r'$minute menit';

  @override
  String get datePickerMinuteSemanticsLabelTwo => null;

  @override
  String get datePickerMinuteSemanticsLabelZero => null;

  @override
  String get modalBarrierDismissLabel => 'Tutup';

  @override
  String get pasteButtonLabel => 'Tempel';

  @override
  String get postMeridiemAbbreviation => 'PM';

  @override
  String get searchTextFieldPlaceholerLabel => 'Search';

  @override
  String get selectAllButtonLabel => 'Pilih Semua';

  @override
  String get tabSemanticsLabelRaw => r'Tab $tabIndex dari $tabCount';

  @override
  String get timerPickerHourLabelFew => null;

  @override
  String get timerPickerHourLabelMany => null;

  @override
  String get timerPickerHourLabelOne => 'jam';

  @override
  String get timerPickerHourLabelOther => 'jam';

  @override
  String get timerPickerHourLabelTwo => null;

  @override
  String get timerPickerHourLabelZero => null;

  @override
  String get timerPickerMinuteLabelFew => null;

  @override
  String get timerPickerMinuteLabelMany => null;

  @override
  String get timerPickerMinuteLabelOne => 'mnt.';

  @override
  String get timerPickerMinuteLabelOther => 'mnt.';

  @override
  String get timerPickerMinuteLabelTwo => null;

  @override
  String get timerPickerMinuteLabelZero => null;

  @override
  String get timerPickerSecondLabelFew => null;

  @override
  String get timerPickerSecondLabelMany => null;

  @override
  String get timerPickerSecondLabelOne => 'dtk.';

  @override
  String get timerPickerSecondLabelOther => 'dtk.';

  @override
  String get timerPickerSecondLabelTwo => null;

  @override
  String get timerPickerSecondLabelZero => null;

  @override
  String get todayLabel => 'Hari ini';
}

/// The translations for Icelandic (`is`).
class CupertinoLocalizationIs extends GlobalCupertinoLocalizations {
  /// Create an instance of the translation bundle for Icelandic.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationIs({
    String localeName = 'is',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get alertDialogLabel => 'Tilkynning';

  @override
  String get anteMeridiemAbbreviation => 'f.h.';

  @override
  String get copyButtonLabel => 'Afrita';

  @override
  String get cutButtonLabel => 'Klippa';

  @override
  String get datePickerDateOrderString => 'dmy';

  @override
  String get datePickerDateTimeOrderString => 'date_time_dayPeriod';

  @override
  String get datePickerHourSemanticsLabelFew => null;

  @override
  String get datePickerHourSemanticsLabelMany => null;

  @override
  String get datePickerHourSemanticsLabelOne => r'klukkan $hour';

  @override
  String get datePickerHourSemanticsLabelOther => r'klukkan $hour';

  @override
  String get datePickerHourSemanticsLabelTwo => null;

  @override
  String get datePickerHourSemanticsLabelZero => null;

  @override
  String get datePickerMinuteSemanticsLabelFew => null;

  @override
  String get datePickerMinuteSemanticsLabelMany => null;

  @override
  String get datePickerMinuteSemanticsLabelOne => '1 mínúta';

  @override
  String get datePickerMinuteSemanticsLabelOther => r'$minute mínútur';

  @override
  String get datePickerMinuteSemanticsLabelTwo => null;

  @override
  String get datePickerMinuteSemanticsLabelZero => null;

  @override
  String get modalBarrierDismissLabel => 'Hunsa';

  @override
  String get pasteButtonLabel => 'Líma';

  @override
  String get postMeridiemAbbreviation => 'e.h.';

  @override
  String get searchTextFieldPlaceholerLabel => 'Search';

  @override
  String get selectAllButtonLabel => 'Velja allt';

  @override
  String get tabSemanticsLabelRaw => r'Flipi $tabIndex af $tabCount';

  @override
  String get timerPickerHourLabelFew => null;

  @override
  String get timerPickerHourLabelMany => null;

  @override
  String get timerPickerHourLabelOne => 'klukkustund';

  @override
  String get timerPickerHourLabelOther => 'klukkustundir';

  @override
  String get timerPickerHourLabelTwo => null;

  @override
  String get timerPickerHourLabelZero => null;

  @override
  String get timerPickerMinuteLabelFew => null;

  @override
  String get timerPickerMinuteLabelMany => null;

  @override
  String get timerPickerMinuteLabelOne => 'mín.';

  @override
  String get timerPickerMinuteLabelOther => 'mín.';

  @override
  String get timerPickerMinuteLabelTwo => null;

  @override
  String get timerPickerMinuteLabelZero => null;

  @override
  String get timerPickerSecondLabelFew => null;

  @override
  String get timerPickerSecondLabelMany => null;

  @override
  String get timerPickerSecondLabelOne => 'sek.';

  @override
  String get timerPickerSecondLabelOther => 'sek.';

  @override
  String get timerPickerSecondLabelTwo => null;

  @override
  String get timerPickerSecondLabelZero => null;

  @override
  String get todayLabel => 'Í dag';
}

/// The translations for Italian (`it`).
class CupertinoLocalizationIt extends GlobalCupertinoLocalizations {
  /// Create an instance of the translation bundle for Italian.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationIt({
    String localeName = 'it',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get alertDialogLabel => 'Avviso';

  @override
  String get anteMeridiemAbbreviation => 'AM';

  @override
  String get copyButtonLabel => 'Copia';

  @override
  String get cutButtonLabel => 'Taglia';

  @override
  String get datePickerDateOrderString => 'dmy';

  @override
  String get datePickerDateTimeOrderString => 'date_time_dayPeriod';

  @override
  String get datePickerHourSemanticsLabelFew => null;

  @override
  String get datePickerHourSemanticsLabelMany => null;

  @override
  String get datePickerHourSemanticsLabelOne => r'$hour in punto';

  @override
  String get datePickerHourSemanticsLabelOther => r'$hour in punto';

  @override
  String get datePickerHourSemanticsLabelTwo => null;

  @override
  String get datePickerHourSemanticsLabelZero => null;

  @override
  String get datePickerMinuteSemanticsLabelFew => null;

  @override
  String get datePickerMinuteSemanticsLabelMany => null;

  @override
  String get datePickerMinuteSemanticsLabelOne => '1 minuto';

  @override
  String get datePickerMinuteSemanticsLabelOther => r'$minute minuti';

  @override
  String get datePickerMinuteSemanticsLabelTwo => null;

  @override
  String get datePickerMinuteSemanticsLabelZero => null;

  @override
  String get modalBarrierDismissLabel => 'Ignora';

  @override
  String get pasteButtonLabel => 'Incolla';

  @override
  String get postMeridiemAbbreviation => 'PM';

  @override
  String get searchTextFieldPlaceholerLabel => 'Search';

  @override
  String get selectAllButtonLabel => 'Seleziona tutto';

  @override
  String get tabSemanticsLabelRaw => r'Scheda $tabIndex di $tabCount';

  @override
  String get timerPickerHourLabelFew => null;

  @override
  String get timerPickerHourLabelMany => null;

  @override
  String get timerPickerHourLabelOne => 'ora';

  @override
  String get timerPickerHourLabelOther => 'ore';

  @override
  String get timerPickerHourLabelTwo => null;

  @override
  String get timerPickerHourLabelZero => null;

  @override
  String get timerPickerMinuteLabelFew => null;

  @override
  String get timerPickerMinuteLabelMany => null;

  @override
  String get timerPickerMinuteLabelOne => 'min.';

  @override
  String get timerPickerMinuteLabelOther => 'min.';

  @override
  String get timerPickerMinuteLabelTwo => null;

  @override
  String get timerPickerMinuteLabelZero => null;

  @override
  String get timerPickerSecondLabelFew => null;

  @override
  String get timerPickerSecondLabelMany => null;

  @override
  String get timerPickerSecondLabelOne => 'sec.';

  @override
  String get timerPickerSecondLabelOther => 'sec.';

  @override
  String get timerPickerSecondLabelTwo => null;

  @override
  String get timerPickerSecondLabelZero => null;

  @override
  String get todayLabel => 'Oggi';
}

/// The translations for Japanese (`ja`).
class CupertinoLocalizationJa extends GlobalCupertinoLocalizations {
  /// Create an instance of the translation bundle for Japanese.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationJa({
    String localeName = 'ja',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get alertDialogLabel => '通知';

  @override
  String get anteMeridiemAbbreviation => 'AM';

  @override
  String get copyButtonLabel => 'コピー';

  @override
  String get cutButtonLabel => '切り取り';

  @override
  String get datePickerDateOrderString => 'mdy';

  @override
  String get datePickerDateTimeOrderString => 'date_time_dayPeriod';

  @override
  String get datePickerHourSemanticsLabelFew => null;

  @override
  String get datePickerHourSemanticsLabelMany => null;

  @override
  String get datePickerHourSemanticsLabelOne => r'$hour時';

  @override
  String get datePickerHourSemanticsLabelOther => r'$hour時';

  @override
  String get datePickerHourSemanticsLabelTwo => null;

  @override
  String get datePickerHourSemanticsLabelZero => null;

  @override
  String get datePickerMinuteSemanticsLabelFew => null;

  @override
  String get datePickerMinuteSemanticsLabelMany => null;

  @override
  String get datePickerMinuteSemanticsLabelOne => '1分';

  @override
  String get datePickerMinuteSemanticsLabelOther => r'$minute分';

  @override
  String get datePickerMinuteSemanticsLabelTwo => null;

  @override
  String get datePickerMinuteSemanticsLabelZero => null;

  @override
  String get modalBarrierDismissLabel => '閉じる';

  @override
  String get pasteButtonLabel => '貼り付け';

  @override
  String get postMeridiemAbbreviation => 'PM';

  @override
  String get searchTextFieldPlaceholerLabel => 'Search';

  @override
  String get selectAllButtonLabel => 'すべて選択';

  @override
  String get tabSemanticsLabelRaw => r'タブ: $tabIndex/$tabCount';

  @override
  String get timerPickerHourLabelFew => null;

  @override
  String get timerPickerHourLabelMany => null;

  @override
  String get timerPickerHourLabelOne => '時間';

  @override
  String get timerPickerHourLabelOther => '時間';

  @override
  String get timerPickerHourLabelTwo => null;

  @override
  String get timerPickerHourLabelZero => null;

  @override
  String get timerPickerMinuteLabelFew => null;

  @override
  String get timerPickerMinuteLabelMany => null;

  @override
  String get timerPickerMinuteLabelOne => '分';

  @override
  String get timerPickerMinuteLabelOther => '分';

  @override
  String get timerPickerMinuteLabelTwo => null;

  @override
  String get timerPickerMinuteLabelZero => null;

  @override
  String get timerPickerSecondLabelFew => null;

  @override
  String get timerPickerSecondLabelMany => null;

  @override
  String get timerPickerSecondLabelOne => '秒';

  @override
  String get timerPickerSecondLabelOther => '秒';

  @override
  String get timerPickerSecondLabelTwo => null;

  @override
  String get timerPickerSecondLabelZero => null;

  @override
  String get todayLabel => '今日';
}

/// The translations for Georgian (`ka`).
class CupertinoLocalizationKa extends GlobalCupertinoLocalizations {
  /// Create an instance of the translation bundle for Georgian.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationKa({
    String localeName = 'ka',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get alertDialogLabel => 'გაფრთხილება';

  @override
  String get anteMeridiemAbbreviation => 'AM';

  @override
  String get copyButtonLabel => 'კოპირება';

  @override
  String get cutButtonLabel => 'ამოჭრა';

  @override
  String get datePickerDateOrderString => 'dmy';

  @override
  String get datePickerDateTimeOrderString => 'date_dayPeriod_time';

  @override
  String get datePickerHourSemanticsLabelFew => null;

  @override
  String get datePickerHourSemanticsLabelMany => null;

  @override
  String get datePickerHourSemanticsLabelOne => r'$hour საათი';

  @override
  String get datePickerHourSemanticsLabelOther => r'$hour საათი';

  @override
  String get datePickerHourSemanticsLabelTwo => null;

  @override
  String get datePickerHourSemanticsLabelZero => null;

  @override
  String get datePickerMinuteSemanticsLabelFew => null;

  @override
  String get datePickerMinuteSemanticsLabelMany => null;

  @override
  String get datePickerMinuteSemanticsLabelOne => '1 წუთი';

  @override
  String get datePickerMinuteSemanticsLabelOther => r'$minute წუთი';

  @override
  String get datePickerMinuteSemanticsLabelTwo => null;

  @override
  String get datePickerMinuteSemanticsLabelZero => null;

  @override
  String get modalBarrierDismissLabel => 'დახურვა';

  @override
  String get pasteButtonLabel => 'ჩასმა';

  @override
  String get postMeridiemAbbreviation => 'PM';

  @override
  String get searchTextFieldPlaceholerLabel => 'Search';

  @override
  String get selectAllButtonLabel => 'ყველას არჩევა';

  @override
  String get tabSemanticsLabelRaw => r'ჩანართი $tabIndex / $tabCount-დან';

  @override
  String get timerPickerHourLabelFew => null;

  @override
  String get timerPickerHourLabelMany => null;

  @override
  String get timerPickerHourLabelOne => 'საათი';

  @override
  String get timerPickerHourLabelOther => 'საათი';

  @override
  String get timerPickerHourLabelTwo => null;

  @override
  String get timerPickerHourLabelZero => null;

  @override
  String get timerPickerMinuteLabelFew => null;

  @override
  String get timerPickerMinuteLabelMany => null;

  @override
  String get timerPickerMinuteLabelOne => 'წთ';

  @override
  String get timerPickerMinuteLabelOther => 'წთ';

  @override
  String get timerPickerMinuteLabelTwo => null;

  @override
  String get timerPickerMinuteLabelZero => null;

  @override
  String get timerPickerSecondLabelFew => null;

  @override
  String get timerPickerSecondLabelMany => null;

  @override
  String get timerPickerSecondLabelOne => 'წმ';

  @override
  String get timerPickerSecondLabelOther => 'წმ';

  @override
  String get timerPickerSecondLabelTwo => null;

  @override
  String get timerPickerSecondLabelZero => null;

  @override
  String get todayLabel => 'დღეს';
}

/// The translations for Kazakh (`kk`).
class CupertinoLocalizationKk extends GlobalCupertinoLocalizations {
  /// Create an instance of the translation bundle for Kazakh.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationKk({
    String localeName = 'kk',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get alertDialogLabel => 'Дабыл';

  @override
  String get anteMeridiemAbbreviation => 'түстен кейін';

  @override
  String get copyButtonLabel => 'Көшіру';

  @override
  String get cutButtonLabel => 'Қию';

  @override
  String get datePickerDateOrderString => 'dmy';

  @override
  String get datePickerDateTimeOrderString => 'date_time_dayPeriod';

  @override
  String get datePickerHourSemanticsLabelFew => null;

  @override
  String get datePickerHourSemanticsLabelMany => null;

  @override
  String get datePickerHourSemanticsLabelOne => r'Сағат: $hour';

  @override
  String get datePickerHourSemanticsLabelOther => r'Сағат: $hour';

  @override
  String get datePickerHourSemanticsLabelTwo => null;

  @override
  String get datePickerHourSemanticsLabelZero => null;

  @override
  String get datePickerMinuteSemanticsLabelFew => null;

  @override
  String get datePickerMinuteSemanticsLabelMany => null;

  @override
  String get datePickerMinuteSemanticsLabelOne => '1 минут';

  @override
  String get datePickerMinuteSemanticsLabelOther => r'$minute минут';

  @override
  String get datePickerMinuteSemanticsLabelTwo => null;

  @override
  String get datePickerMinuteSemanticsLabelZero => null;

  @override
  String get modalBarrierDismissLabel => 'Жабу';

  @override
  String get pasteButtonLabel => 'Қою';

  @override
  String get postMeridiemAbbreviation => 'түстен кейін';

  @override
  String get searchTextFieldPlaceholerLabel => 'Search';

  @override
  String get selectAllButtonLabel => 'Барлығын таңдау';

  @override
  String get tabSemanticsLabelRaw => r'Қойынды: $tabIndex/$tabCount';

  @override
  String get timerPickerHourLabelFew => null;

  @override
  String get timerPickerHourLabelMany => null;

  @override
  String get timerPickerHourLabelOne => 'сағат';

  @override
  String get timerPickerHourLabelOther => 'сағат';

  @override
  String get timerPickerHourLabelTwo => null;

  @override
  String get timerPickerHourLabelZero => null;

  @override
  String get timerPickerMinuteLabelFew => null;

  @override
  String get timerPickerMinuteLabelMany => null;

  @override
  String get timerPickerMinuteLabelOne => 'мин';

  @override
  String get timerPickerMinuteLabelOther => 'мин';

  @override
  String get timerPickerMinuteLabelTwo => null;

  @override
  String get timerPickerMinuteLabelZero => null;

  @override
  String get timerPickerSecondLabelFew => null;

  @override
  String get timerPickerSecondLabelMany => null;

  @override
  String get timerPickerSecondLabelOne => 'сек';

  @override
  String get timerPickerSecondLabelOther => 'сек';

  @override
  String get timerPickerSecondLabelTwo => null;

  @override
  String get timerPickerSecondLabelZero => null;

  @override
  String get todayLabel => 'Бүгін';
}

/// The translations for Khmer Central Khmer (`km`).
class CupertinoLocalizationKm extends GlobalCupertinoLocalizations {
  /// Create an instance of the translation bundle for Khmer Central Khmer.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationKm({
    String localeName = 'km',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get alertDialogLabel => 'ជូនដំណឹង';

  @override
  String get anteMeridiemAbbreviation => 'AM';

  @override
  String get copyButtonLabel => 'ចម្លង';

  @override
  String get cutButtonLabel => 'កាត់';

  @override
  String get datePickerDateOrderString => 'dmy';

  @override
  String get datePickerDateTimeOrderString => 'date_time_dayPeriod';

  @override
  String get datePickerHourSemanticsLabelFew => null;

  @override
  String get datePickerHourSemanticsLabelMany => null;

  @override
  String get datePickerHourSemanticsLabelOne => r'ម៉ោង $hour';

  @override
  String get datePickerHourSemanticsLabelOther => r'ម៉ោង $hour';

  @override
  String get datePickerHourSemanticsLabelTwo => null;

  @override
  String get datePickerHourSemanticsLabelZero => null;

  @override
  String get datePickerMinuteSemanticsLabelFew => null;

  @override
  String get datePickerMinuteSemanticsLabelMany => null;

  @override
  String get datePickerMinuteSemanticsLabelOne => '1 នាទី';

  @override
  String get datePickerMinuteSemanticsLabelOther => r'$minute នាទី';

  @override
  String get datePickerMinuteSemanticsLabelTwo => null;

  @override
  String get datePickerMinuteSemanticsLabelZero => null;

  @override
  String get modalBarrierDismissLabel => 'ច្រាន​ចោល';

  @override
  String get pasteButtonLabel => 'ដាក់​ចូល';

  @override
  String get postMeridiemAbbreviation => 'PM';

  @override
  String get searchTextFieldPlaceholerLabel => 'Search';

  @override
  String get selectAllButtonLabel => 'ជ្រើសរើស​ទាំងអស់';

  @override
  String get tabSemanticsLabelRaw => r'ផ្ទាំងទី $tabIndex នៃ $tabCount';

  @override
  String get timerPickerHourLabelFew => null;

  @override
  String get timerPickerHourLabelMany => null;

  @override
  String get timerPickerHourLabelOne => 'ម៉ោង';

  @override
  String get timerPickerHourLabelOther => 'ម៉ោង';

  @override
  String get timerPickerHourLabelTwo => null;

  @override
  String get timerPickerHourLabelZero => null;

  @override
  String get timerPickerMinuteLabelFew => null;

  @override
  String get timerPickerMinuteLabelMany => null;

  @override
  String get timerPickerMinuteLabelOne => 'នាទី';

  @override
  String get timerPickerMinuteLabelOther => 'នាទី';

  @override
  String get timerPickerMinuteLabelTwo => null;

  @override
  String get timerPickerMinuteLabelZero => null;

  @override
  String get timerPickerSecondLabelFew => null;

  @override
  String get timerPickerSecondLabelMany => null;

  @override
  String get timerPickerSecondLabelOne => 'វិនាទី';

  @override
  String get timerPickerSecondLabelOther => 'វិនាទី';

  @override
  String get timerPickerSecondLabelTwo => null;

  @override
  String get timerPickerSecondLabelZero => null;

  @override
  String get todayLabel => 'ថ្ងៃនេះ';
}

/// The translations for Kannada (`kn`).
class CupertinoLocalizationKn extends GlobalCupertinoLocalizations {
  /// Create an instance of the translation bundle for Kannada.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationKn({
    String localeName = 'kn',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get alertDialogLabel => '\u{c8e}\u{c9a}\u{ccd}\u{c9a}\u{cb0}\u{cbf}\u{c95}\u{cc6}';

  @override
  String get anteMeridiemAbbreviation => '\u{cac}\u{cc6}\u{cb3}\u{cbf}\u{c97}\u{ccd}\u{c97}\u{cc6}';

  @override
  String get copyButtonLabel => '\u{ca8}\u{c95}\u{cb2}\u{cbf}\u{cb8}\u{cbf}';

  @override
  String get cutButtonLabel => '\u{c95}\u{ca4}\u{ccd}\u{ca4}\u{cb0}\u{cbf}\u{cb8}\u{cbf}';

  @override
  String get datePickerDateOrderString => 'dmy';

  @override
  String get datePickerDateTimeOrderString => 'date_time_dayPeriod';

  @override
  String get datePickerHourSemanticsLabelFew => null;

  @override
  String get datePickerHourSemanticsLabelMany => null;

  @override
  String get datePickerHourSemanticsLabelOne => '\u{24}\u{68}\u{6f}\u{75}\u{72}\u{20}\u{c97}\u{c82}\u{c9f}\u{cc6}';

  @override
  String get datePickerHourSemanticsLabelOther => '\u{24}\u{68}\u{6f}\u{75}\u{72}\u{20}\u{c97}\u{c82}\u{c9f}\u{cc6}';

  @override
  String get datePickerHourSemanticsLabelTwo => null;

  @override
  String get datePickerHourSemanticsLabelZero => null;

  @override
  String get datePickerMinuteSemanticsLabelFew => null;

  @override
  String get datePickerMinuteSemanticsLabelMany => null;

  @override
  String get datePickerMinuteSemanticsLabelOne => '\u{31}\u{20}\u{ca8}\u{cbf}\u{cae}\u{cbf}\u{cb7}';

  @override
  String get datePickerMinuteSemanticsLabelOther => '\u{24}\u{6d}\u{69}\u{6e}\u{75}\u{74}\u{65}\u{20}\u{ca8}\u{cbf}\u{cae}\u{cbf}\u{cb7}\u{c97}\u{cb3}\u{cc1}';

  @override
  String get datePickerMinuteSemanticsLabelTwo => null;

  @override
  String get datePickerMinuteSemanticsLabelZero => null;

  @override
  String get modalBarrierDismissLabel => '\u{cb5}\u{c9c}\u{cbe}\u{c97}\u{cca}\u{cb3}\u{cbf}\u{cb8}\u{cbf}';

  @override
  String get pasteButtonLabel => '\u{c85}\u{c82}\u{c9f}\u{cbf}\u{cb8}\u{cbf}';

  @override
  String get postMeridiemAbbreviation => '\u{cb8}\u{c82}\u{c9c}\u{cc6}';

  @override
  String get searchTextFieldPlaceholerLabel => 'Search';

  @override
  String get selectAllButtonLabel => '\u{c8e}\u{cb2}\u{ccd}\u{cb2}\u{cb5}\u{ca8}\u{ccd}\u{ca8}\u{cc2}\u{20}\u{c86}\u{caf}\u{ccd}\u{c95}\u{cc6}\u{cae}\u{cbe}\u{ca1}\u{cbf}';

  @override
  String get tabSemanticsLabelRaw => '\u{24}\u{74}\u{61}\u{62}\u{43}\u{6f}\u{75}\u{6e}\u{74}\u{20}\u{cb0}\u{cb2}\u{ccd}\u{cb2}\u{cbf}\u{ca8}\u{20}\u{24}\u{74}\u{61}\u{62}\u{49}\u{6e}\u{64}\u{65}\u{78}\u{20}\u{c9f}\u{ccd}\u{caf}\u{cbe}\u{cac}\u{ccd}';

  @override
  String get timerPickerHourLabelFew => null;

  @override
  String get timerPickerHourLabelMany => null;

  @override
  String get timerPickerHourLabelOne => '\u{c97}\u{c82}\u{c9f}\u{cc6}';

  @override
  String get timerPickerHourLabelOther => '\u{c97}\u{c82}\u{c9f}\u{cc6}\u{c97}\u{cb3}\u{cc1}';

  @override
  String get timerPickerHourLabelTwo => null;

  @override
  String get timerPickerHourLabelZero => null;

  @override
  String get timerPickerMinuteLabelFew => null;

  @override
  String get timerPickerMinuteLabelMany => null;

  @override
  String get timerPickerMinuteLabelOne => '\u{ca8}\u{cbf}\u{cae}\u{cbf}\u{2e}';

  @override
  String get timerPickerMinuteLabelOther => '\u{ca8}\u{cbf}\u{cae}\u{cbf}\u{2e}';

  @override
  String get timerPickerMinuteLabelTwo => null;

  @override
  String get timerPickerMinuteLabelZero => null;

  @override
  String get timerPickerSecondLabelFew => null;

  @override
  String get timerPickerSecondLabelMany => null;

  @override
  String get timerPickerSecondLabelOne => '\u{cb8}\u{cc6}\u{2e}';

  @override
  String get timerPickerSecondLabelOther => '\u{cb8}\u{cc6}\u{2e}';

  @override
  String get timerPickerSecondLabelTwo => null;

  @override
  String get timerPickerSecondLabelZero => null;

  @override
  String get todayLabel => '\u{c87}\u{c82}\u{ca6}\u{cc1}';
}

/// The translations for Korean (`ko`).
class CupertinoLocalizationKo extends GlobalCupertinoLocalizations {
  /// Create an instance of the translation bundle for Korean.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationKo({
    String localeName = 'ko',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get alertDialogLabel => '알림';

  @override
  String get anteMeridiemAbbreviation => '오전';

  @override
  String get copyButtonLabel => '복사';

  @override
  String get cutButtonLabel => '잘라냄';

  @override
  String get datePickerDateOrderString => 'ymd';

  @override
  String get datePickerDateTimeOrderString => 'date_time_dayPeriod';

  @override
  String get datePickerHourSemanticsLabelFew => null;

  @override
  String get datePickerHourSemanticsLabelMany => null;

  @override
  String get datePickerHourSemanticsLabelOne => r'$hour시 정각';

  @override
  String get datePickerHourSemanticsLabelOther => r'$hour시 정각';

  @override
  String get datePickerHourSemanticsLabelTwo => null;

  @override
  String get datePickerHourSemanticsLabelZero => null;

  @override
  String get datePickerMinuteSemanticsLabelFew => null;

  @override
  String get datePickerMinuteSemanticsLabelMany => null;

  @override
  String get datePickerMinuteSemanticsLabelOne => '1분';

  @override
  String get datePickerMinuteSemanticsLabelOther => r'$minute분';

  @override
  String get datePickerMinuteSemanticsLabelTwo => null;

  @override
  String get datePickerMinuteSemanticsLabelZero => null;

  @override
  String get modalBarrierDismissLabel => '닫기';

  @override
  String get pasteButtonLabel => '붙여넣기';

  @override
  String get postMeridiemAbbreviation => '오후';

  @override
  String get searchTextFieldPlaceholerLabel => 'Search';

  @override
  String get selectAllButtonLabel => '전체 선택';

  @override
  String get tabSemanticsLabelRaw => r'탭 $tabCount개 중 $tabIndex번째';

  @override
  String get timerPickerHourLabelFew => null;

  @override
  String get timerPickerHourLabelMany => null;

  @override
  String get timerPickerHourLabelOne => '시간';

  @override
  String get timerPickerHourLabelOther => '시간';

  @override
  String get timerPickerHourLabelTwo => null;

  @override
  String get timerPickerHourLabelZero => null;

  @override
  String get timerPickerMinuteLabelFew => null;

  @override
  String get timerPickerMinuteLabelMany => null;

  @override
  String get timerPickerMinuteLabelOne => '분';

  @override
  String get timerPickerMinuteLabelOther => '분';

  @override
  String get timerPickerMinuteLabelTwo => null;

  @override
  String get timerPickerMinuteLabelZero => null;

  @override
  String get timerPickerSecondLabelFew => null;

  @override
  String get timerPickerSecondLabelMany => null;

  @override
  String get timerPickerSecondLabelOne => '초';

  @override
  String get timerPickerSecondLabelOther => '초';

  @override
  String get timerPickerSecondLabelTwo => null;

  @override
  String get timerPickerSecondLabelZero => null;

  @override
  String get todayLabel => '오늘';
}

/// The translations for Kirghiz Kyrgyz (`ky`).
class CupertinoLocalizationKy extends GlobalCupertinoLocalizations {
  /// Create an instance of the translation bundle for Kirghiz Kyrgyz.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationKy({
    String localeName = 'ky',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get alertDialogLabel => 'Эскертүү';

  @override
  String get anteMeridiemAbbreviation => 'түшкө чейин';

  @override
  String get copyButtonLabel => 'Көчүрүү';

  @override
  String get cutButtonLabel => 'Кесүү';

  @override
  String get datePickerDateOrderString => 'dmy';

  @override
  String get datePickerDateTimeOrderString => 'date_time_dayPeriod';

  @override
  String get datePickerHourSemanticsLabelFew => null;

  @override
  String get datePickerHourSemanticsLabelMany => null;

  @override
  String get datePickerHourSemanticsLabelOne => r'Саат $hour';

  @override
  String get datePickerHourSemanticsLabelOther => r'Саат $hour';

  @override
  String get datePickerHourSemanticsLabelTwo => null;

  @override
  String get datePickerHourSemanticsLabelZero => null;

  @override
  String get datePickerMinuteSemanticsLabelFew => null;

  @override
  String get datePickerMinuteSemanticsLabelMany => null;

  @override
  String get datePickerMinuteSemanticsLabelOne => '1 мүнөт';

  @override
  String get datePickerMinuteSemanticsLabelOther => r'$minute мүнөт';

  @override
  String get datePickerMinuteSemanticsLabelTwo => null;

  @override
  String get datePickerMinuteSemanticsLabelZero => null;

  @override
  String get modalBarrierDismissLabel => 'Жабуу';

  @override
  String get pasteButtonLabel => 'Чаптоо';

  @override
  String get postMeridiemAbbreviation => 'түштөн кийин';

  @override
  String get searchTextFieldPlaceholerLabel => 'Search';

  @override
  String get selectAllButtonLabel => 'Баарын тандоо';

  @override
  String get tabSemanticsLabelRaw => r'$tabCount ичинен $tabIndex-өтмөк';

  @override
  String get timerPickerHourLabelFew => null;

  @override
  String get timerPickerHourLabelMany => null;

  @override
  String get timerPickerHourLabelOne => 'саат';

  @override
  String get timerPickerHourLabelOther => 'саат';

  @override
  String get timerPickerHourLabelTwo => null;

  @override
  String get timerPickerHourLabelZero => null;

  @override
  String get timerPickerMinuteLabelFew => null;

  @override
  String get timerPickerMinuteLabelMany => null;

  @override
  String get timerPickerMinuteLabelOne => 'мүн.';

  @override
  String get timerPickerMinuteLabelOther => 'мүн.';

  @override
  String get timerPickerMinuteLabelTwo => null;

  @override
  String get timerPickerMinuteLabelZero => null;

  @override
  String get timerPickerSecondLabelFew => null;

  @override
  String get timerPickerSecondLabelMany => null;

  @override
  String get timerPickerSecondLabelOne => 'сек.';

  @override
  String get timerPickerSecondLabelOther => 'сек.';

  @override
  String get timerPickerSecondLabelTwo => null;

  @override
  String get timerPickerSecondLabelZero => null;

  @override
  String get todayLabel => 'Бүгүн';
}

/// The translations for Lao (`lo`).
class CupertinoLocalizationLo extends GlobalCupertinoLocalizations {
  /// Create an instance of the translation bundle for Lao.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationLo({
    String localeName = 'lo',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get alertDialogLabel => 'ການເຕືອນ';

  @override
  String get anteMeridiemAbbreviation => 'ກ່ອນທ່ຽງ';

  @override
  String get copyButtonLabel => 'ສຳເນົາ';

  @override
  String get cutButtonLabel => 'ຕັດ';

  @override
  String get datePickerDateOrderString => 'mdy';

  @override
  String get datePickerDateTimeOrderString => 'date_time_dayPeriod';

  @override
  String get datePickerHourSemanticsLabelFew => null;

  @override
  String get datePickerHourSemanticsLabelMany => null;

  @override
  String get datePickerHourSemanticsLabelOne => r'$hour ໂມງກົງ';

  @override
  String get datePickerHourSemanticsLabelOther => r'$hour ໂມງກົງ';

  @override
  String get datePickerHourSemanticsLabelTwo => null;

  @override
  String get datePickerHourSemanticsLabelZero => null;

  @override
  String get datePickerMinuteSemanticsLabelFew => null;

  @override
  String get datePickerMinuteSemanticsLabelMany => null;

  @override
  String get datePickerMinuteSemanticsLabelOne => '1 ນາທີ';

  @override
  String get datePickerMinuteSemanticsLabelOther => r'$minute ນາທີ';

  @override
  String get datePickerMinuteSemanticsLabelTwo => null;

  @override
  String get datePickerMinuteSemanticsLabelZero => null;

  @override
  String get modalBarrierDismissLabel => 'ປິດໄວ້';

  @override
  String get pasteButtonLabel => 'ວາງ';

  @override
  String get postMeridiemAbbreviation => 'ຫຼັງທ່ຽງ';

  @override
  String get searchTextFieldPlaceholerLabel => 'Search';

  @override
  String get selectAllButtonLabel => 'ເລືອກທັງໝົດ';

  @override
  String get tabSemanticsLabelRaw => r'ແຖບທີ $tabIndex ຈາກທັງໝົດ $tabCount';

  @override
  String get timerPickerHourLabelFew => null;

  @override
  String get timerPickerHourLabelMany => null;

  @override
  String get timerPickerHourLabelOne => 'ຊົ່ວໂມງ';

  @override
  String get timerPickerHourLabelOther => 'ຊົ່ວໂມງ';

  @override
  String get timerPickerHourLabelTwo => null;

  @override
  String get timerPickerHourLabelZero => null;

  @override
  String get timerPickerMinuteLabelFew => null;

  @override
  String get timerPickerMinuteLabelMany => null;

  @override
  String get timerPickerMinuteLabelOne => 'ນທ.';

  @override
  String get timerPickerMinuteLabelOther => 'ນທ.';

  @override
  String get timerPickerMinuteLabelTwo => null;

  @override
  String get timerPickerMinuteLabelZero => null;

  @override
  String get timerPickerSecondLabelFew => null;

  @override
  String get timerPickerSecondLabelMany => null;

  @override
  String get timerPickerSecondLabelOne => 'ວິ.';

  @override
  String get timerPickerSecondLabelOther => 'ວິ.';

  @override
  String get timerPickerSecondLabelTwo => null;

  @override
  String get timerPickerSecondLabelZero => null;

  @override
  String get todayLabel => 'ມື້ນີ້';
}

/// The translations for Lithuanian (`lt`).
class CupertinoLocalizationLt extends GlobalCupertinoLocalizations {
  /// Create an instance of the translation bundle for Lithuanian.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationLt({
    String localeName = 'lt',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get alertDialogLabel => 'Įspėjimas';

  @override
  String get anteMeridiemAbbreviation => 'priešpiet';

  @override
  String get copyButtonLabel => 'Kopijuoti';

  @override
  String get cutButtonLabel => 'Iškirpti';

  @override
  String get datePickerDateOrderString => 'ymd';

  @override
  String get datePickerDateTimeOrderString => 'date_time_dayPeriod';

  @override
  String get datePickerHourSemanticsLabelFew => r'$hour val.';

  @override
  String get datePickerHourSemanticsLabelMany => r'$hour val.';

  @override
  String get datePickerHourSemanticsLabelOne => r'$hour val.';

  @override
  String get datePickerHourSemanticsLabelOther => r'$hour val.';

  @override
  String get datePickerHourSemanticsLabelTwo => null;

  @override
  String get datePickerHourSemanticsLabelZero => null;

  @override
  String get datePickerMinuteSemanticsLabelFew => r'$minute min.';

  @override
  String get datePickerMinuteSemanticsLabelMany => r'$minute min.';

  @override
  String get datePickerMinuteSemanticsLabelOne => '1 min.';

  @override
  String get datePickerMinuteSemanticsLabelOther => r'$minute min.';

  @override
  String get datePickerMinuteSemanticsLabelTwo => null;

  @override
  String get datePickerMinuteSemanticsLabelZero => null;

  @override
  String get modalBarrierDismissLabel => 'Atsisakyti';

  @override
  String get pasteButtonLabel => 'Įklijuoti';

  @override
  String get postMeridiemAbbreviation => 'popiet';

  @override
  String get searchTextFieldPlaceholerLabel => 'Search';

  @override
  String get selectAllButtonLabel => 'Pasirinkti viską';

  @override
  String get tabSemanticsLabelRaw => r'$tabIndex skirtukas iš $tabCount';

  @override
  String get timerPickerHourLabelFew => 'val.';

  @override
  String get timerPickerHourLabelMany => 'val.';

  @override
  String get timerPickerHourLabelOne => 'val.';

  @override
  String get timerPickerHourLabelOther => 'val.';

  @override
  String get timerPickerHourLabelTwo => null;

  @override
  String get timerPickerHourLabelZero => null;

  @override
  String get timerPickerMinuteLabelFew => 'min.';

  @override
  String get timerPickerMinuteLabelMany => 'min.';

  @override
  String get timerPickerMinuteLabelOne => 'min.';

  @override
  String get timerPickerMinuteLabelOther => 'min.';

  @override
  String get timerPickerMinuteLabelTwo => null;

  @override
  String get timerPickerMinuteLabelZero => null;

  @override
  String get timerPickerSecondLabelFew => 'sek.';

  @override
  String get timerPickerSecondLabelMany => 'sek.';

  @override
  String get timerPickerSecondLabelOne => 'sek.';

  @override
  String get timerPickerSecondLabelOther => 'sek.';

  @override
  String get timerPickerSecondLabelTwo => null;

  @override
  String get timerPickerSecondLabelZero => null;

  @override
  String get todayLabel => 'Šiandien';
}

/// The translations for Latvian (`lv`).
class CupertinoLocalizationLv extends GlobalCupertinoLocalizations {
  /// Create an instance of the translation bundle for Latvian.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationLv({
    String localeName = 'lv',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get alertDialogLabel => 'Brīdinājums';

  @override
  String get anteMeridiemAbbreviation => 'priekšpusdienā';

  @override
  String get copyButtonLabel => 'Kopēt';

  @override
  String get cutButtonLabel => 'Izgriezt';

  @override
  String get datePickerDateOrderString => 'mdy';

  @override
  String get datePickerDateTimeOrderString => 'date_time_dayPeriod';

  @override
  String get datePickerHourSemanticsLabelFew => null;

  @override
  String get datePickerHourSemanticsLabelMany => null;

  @override
  String get datePickerHourSemanticsLabelOne => r'plkst. $hour';

  @override
  String get datePickerHourSemanticsLabelOther => r'plkst. $hour';

  @override
  String get datePickerHourSemanticsLabelTwo => null;

  @override
  String get datePickerHourSemanticsLabelZero => r'plkst. $hour';

  @override
  String get datePickerMinuteSemanticsLabelFew => null;

  @override
  String get datePickerMinuteSemanticsLabelMany => null;

  @override
  String get datePickerMinuteSemanticsLabelOne => '1 minūte';

  @override
  String get datePickerMinuteSemanticsLabelOther => r'$minute minūtes';

  @override
  String get datePickerMinuteSemanticsLabelTwo => null;

  @override
  String get datePickerMinuteSemanticsLabelZero => r'$minute minūtes';

  @override
  String get modalBarrierDismissLabel => 'Nerādīt';

  @override
  String get pasteButtonLabel => 'Ielīmēt';

  @override
  String get postMeridiemAbbreviation => 'pēcpusdienā';

  @override
  String get searchTextFieldPlaceholerLabel => 'Search';

  @override
  String get selectAllButtonLabel => 'Atlasīt visu';

  @override
  String get tabSemanticsLabelRaw => r'$tabIndex. cilne no $tabCount';

  @override
  String get timerPickerHourLabelFew => null;

  @override
  String get timerPickerHourLabelMany => null;

  @override
  String get timerPickerHourLabelOne => 'h';

  @override
  String get timerPickerHourLabelOther => 'h';

  @override
  String get timerPickerHourLabelTwo => null;

  @override
  String get timerPickerHourLabelZero => 'h';

  @override
  String get timerPickerMinuteLabelFew => null;

  @override
  String get timerPickerMinuteLabelMany => null;

  @override
  String get timerPickerMinuteLabelOne => 'min';

  @override
  String get timerPickerMinuteLabelOther => 'min';

  @override
  String get timerPickerMinuteLabelTwo => null;

  @override
  String get timerPickerMinuteLabelZero => 'min';

  @override
  String get timerPickerSecondLabelFew => null;

  @override
  String get timerPickerSecondLabelMany => null;

  @override
  String get timerPickerSecondLabelOne => 's';

  @override
  String get timerPickerSecondLabelOther => 's';

  @override
  String get timerPickerSecondLabelTwo => null;

  @override
  String get timerPickerSecondLabelZero => 's';

  @override
  String get todayLabel => 'Šodien';
}

/// The translations for Macedonian (`mk`).
class CupertinoLocalizationMk extends GlobalCupertinoLocalizations {
  /// Create an instance of the translation bundle for Macedonian.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationMk({
    String localeName = 'mk',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get alertDialogLabel => 'Предупредување';

  @override
  String get anteMeridiemAbbreviation => 'ПРЕТПЛАДНЕ';

  @override
  String get copyButtonLabel => 'Копирај';

  @override
  String get cutButtonLabel => 'Исечи';

  @override
  String get datePickerDateOrderString => 'dmy';

  @override
  String get datePickerDateTimeOrderString => 'date_time_dayPeriod';

  @override
  String get datePickerHourSemanticsLabelFew => null;

  @override
  String get datePickerHourSemanticsLabelMany => null;

  @override
  String get datePickerHourSemanticsLabelOne => r'$hour часот';

  @override
  String get datePickerHourSemanticsLabelOther => r'$hour часот';

  @override
  String get datePickerHourSemanticsLabelTwo => null;

  @override
  String get datePickerHourSemanticsLabelZero => null;

  @override
  String get datePickerMinuteSemanticsLabelFew => null;

  @override
  String get datePickerMinuteSemanticsLabelMany => null;

  @override
  String get datePickerMinuteSemanticsLabelOne => '1 минута';

  @override
  String get datePickerMinuteSemanticsLabelOther => r'$minute минути';

  @override
  String get datePickerMinuteSemanticsLabelTwo => null;

  @override
  String get datePickerMinuteSemanticsLabelZero => null;

  @override
  String get modalBarrierDismissLabel => 'Отфрли';

  @override
  String get pasteButtonLabel => 'Залепи';

  @override
  String get postMeridiemAbbreviation => 'ПОПЛАДНЕ';

  @override
  String get searchTextFieldPlaceholerLabel => 'Search';

  @override
  String get selectAllButtonLabel => 'Избери ги сите';

  @override
  String get tabSemanticsLabelRaw => r'Картичка $tabIndex од $tabCount';

  @override
  String get timerPickerHourLabelFew => null;

  @override
  String get timerPickerHourLabelMany => null;

  @override
  String get timerPickerHourLabelOne => 'час';

  @override
  String get timerPickerHourLabelOther => 'часа';

  @override
  String get timerPickerHourLabelTwo => null;

  @override
  String get timerPickerHourLabelZero => null;

  @override
  String get timerPickerMinuteLabelFew => null;

  @override
  String get timerPickerMinuteLabelMany => null;

  @override
  String get timerPickerMinuteLabelOne => 'мин.';

  @override
  String get timerPickerMinuteLabelOther => 'мин.';

  @override
  String get timerPickerMinuteLabelTwo => null;

  @override
  String get timerPickerMinuteLabelZero => null;

  @override
  String get timerPickerSecondLabelFew => null;

  @override
  String get timerPickerSecondLabelMany => null;

  @override
  String get timerPickerSecondLabelOne => 'сек.';

  @override
  String get timerPickerSecondLabelOther => 'сек.';

  @override
  String get timerPickerSecondLabelTwo => null;

  @override
  String get timerPickerSecondLabelZero => null;

  @override
  String get todayLabel => 'Денес';
}

/// The translations for Malayalam (`ml`).
class CupertinoLocalizationMl extends GlobalCupertinoLocalizations {
  /// Create an instance of the translation bundle for Malayalam.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationMl({
    String localeName = 'ml',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get alertDialogLabel => 'മുന്നറിയിപ്പ്';

  @override
  String get anteMeridiemAbbreviation => 'AM';

  @override
  String get copyButtonLabel => 'പകർത്തുക';

  @override
  String get cutButtonLabel => 'മുറിക്കുക';

  @override
  String get datePickerDateOrderString => 'dmy';

  @override
  String get datePickerDateTimeOrderString => 'date_time_dayPeriod';

  @override
  String get datePickerHourSemanticsLabelFew => null;

  @override
  String get datePickerHourSemanticsLabelMany => null;

  @override
  String get datePickerHourSemanticsLabelOne => r'$hour മണി';

  @override
  String get datePickerHourSemanticsLabelOther => r'$hour മണി';

  @override
  String get datePickerHourSemanticsLabelTwo => null;

  @override
  String get datePickerHourSemanticsLabelZero => null;

  @override
  String get datePickerMinuteSemanticsLabelFew => null;

  @override
  String get datePickerMinuteSemanticsLabelMany => null;

  @override
  String get datePickerMinuteSemanticsLabelOne => 'ഒരു മിനിറ്റ്';

  @override
  String get datePickerMinuteSemanticsLabelOther => r'$minute മിനിറ്റ്';

  @override
  String get datePickerMinuteSemanticsLabelTwo => null;

  @override
  String get datePickerMinuteSemanticsLabelZero => null;

  @override
  String get modalBarrierDismissLabel => 'നിരസിക്കുക';

  @override
  String get pasteButtonLabel => 'ഒട്ടിക്കുക';

  @override
  String get postMeridiemAbbreviation => 'PM';

  @override
  String get searchTextFieldPlaceholerLabel => 'Search';

  @override
  String get selectAllButtonLabel => 'എല്ലാം തിരഞ്ഞെടുക്കുക';

  @override
  String get tabSemanticsLabelRaw => r'$tabCount ടാബിൽ $tabIndex-ാമത്തേത്';

  @override
  String get timerPickerHourLabelFew => null;

  @override
  String get timerPickerHourLabelMany => null;

  @override
  String get timerPickerHourLabelOne => 'മണിക്കൂർ';

  @override
  String get timerPickerHourLabelOther => 'മണിക്കൂർ';

  @override
  String get timerPickerHourLabelTwo => null;

  @override
  String get timerPickerHourLabelZero => null;

  @override
  String get timerPickerMinuteLabelFew => null;

  @override
  String get timerPickerMinuteLabelMany => null;

  @override
  String get timerPickerMinuteLabelOne => 'മിനിറ്റ്';

  @override
  String get timerPickerMinuteLabelOther => 'മിനിറ്റ്';

  @override
  String get timerPickerMinuteLabelTwo => null;

  @override
  String get timerPickerMinuteLabelZero => null;

  @override
  String get timerPickerSecondLabelFew => null;

  @override
  String get timerPickerSecondLabelMany => null;

  @override
  String get timerPickerSecondLabelOne => 'സെക്കൻഡ്';

  @override
  String get timerPickerSecondLabelOther => 'സെക്കൻഡ്';

  @override
  String get timerPickerSecondLabelTwo => null;

  @override
  String get timerPickerSecondLabelZero => null;

  @override
  String get todayLabel => 'ഇന്ന്';
}

/// The translations for Mongolian (`mn`).
class CupertinoLocalizationMn extends GlobalCupertinoLocalizations {
  /// Create an instance of the translation bundle for Mongolian.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationMn({
    String localeName = 'mn',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get alertDialogLabel => 'Сэрэмжлүүлэг';

  @override
  String get anteMeridiemAbbreviation => 'ӨГЛӨӨ';

  @override
  String get copyButtonLabel => 'Хуулах';

  @override
  String get cutButtonLabel => 'Таслах';

  @override
  String get datePickerDateOrderString => 'mdy';

  @override
  String get datePickerDateTimeOrderString => 'date_time_dayPeriod';

  @override
  String get datePickerHourSemanticsLabelFew => null;

  @override
  String get datePickerHourSemanticsLabelMany => null;

  @override
  String get datePickerHourSemanticsLabelOne => r'$hour цаг';

  @override
  String get datePickerHourSemanticsLabelOther => r'$hour цаг';

  @override
  String get datePickerHourSemanticsLabelTwo => null;

  @override
  String get datePickerHourSemanticsLabelZero => null;

  @override
  String get datePickerMinuteSemanticsLabelFew => null;

  @override
  String get datePickerMinuteSemanticsLabelMany => null;

  @override
  String get datePickerMinuteSemanticsLabelOne => '1 минут';

  @override
  String get datePickerMinuteSemanticsLabelOther => r'$minute минут';

  @override
  String get datePickerMinuteSemanticsLabelTwo => null;

  @override
  String get datePickerMinuteSemanticsLabelZero => null;

  @override
  String get modalBarrierDismissLabel => 'Үл хэрэгсэх';

  @override
  String get pasteButtonLabel => 'Буулгах';

  @override
  String get postMeridiemAbbreviation => 'ОРОЙ';

  @override
  String get searchTextFieldPlaceholerLabel => 'Search';

  @override
  String get selectAllButtonLabel => 'Бүгдийг сонгох';

  @override
  String get tabSemanticsLabelRaw => r'$tabCount-н $tabIndex-р таб';

  @override
  String get timerPickerHourLabelFew => null;

  @override
  String get timerPickerHourLabelMany => null;

  @override
  String get timerPickerHourLabelOne => 'цаг';

  @override
  String get timerPickerHourLabelOther => 'цаг';

  @override
  String get timerPickerHourLabelTwo => null;

  @override
  String get timerPickerHourLabelZero => null;

  @override
  String get timerPickerMinuteLabelFew => null;

  @override
  String get timerPickerMinuteLabelMany => null;

  @override
  String get timerPickerMinuteLabelOne => 'минут.';

  @override
  String get timerPickerMinuteLabelOther => 'минут.';

  @override
  String get timerPickerMinuteLabelTwo => null;

  @override
  String get timerPickerMinuteLabelZero => null;

  @override
  String get timerPickerSecondLabelFew => null;

  @override
  String get timerPickerSecondLabelMany => null;

  @override
  String get timerPickerSecondLabelOne => 'секунд.';

  @override
  String get timerPickerSecondLabelOther => 'секунд.';

  @override
  String get timerPickerSecondLabelTwo => null;

  @override
  String get timerPickerSecondLabelZero => null;

  @override
  String get todayLabel => 'Өнөөдөр';
}

/// The translations for Marathi (`mr`).
class CupertinoLocalizationMr extends GlobalCupertinoLocalizations {
  /// Create an instance of the translation bundle for Marathi.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationMr({
    String localeName = 'mr',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get alertDialogLabel => 'सूचना';

  @override
  String get anteMeridiemAbbreviation => 'AM';

  @override
  String get copyButtonLabel => 'कॉपी करा';

  @override
  String get cutButtonLabel => 'कट करा';

  @override
  String get datePickerDateOrderString => 'mdy';

  @override
  String get datePickerDateTimeOrderString => 'date_time_dayPeriod';

  @override
  String get datePickerHourSemanticsLabelFew => null;

  @override
  String get datePickerHourSemanticsLabelMany => null;

  @override
  String get datePickerHourSemanticsLabelOne => r'$hour वाजता';

  @override
  String get datePickerHourSemanticsLabelOther => r'$hour वाजता';

  @override
  String get datePickerHourSemanticsLabelTwo => null;

  @override
  String get datePickerHourSemanticsLabelZero => null;

  @override
  String get datePickerMinuteSemanticsLabelFew => null;

  @override
  String get datePickerMinuteSemanticsLabelMany => null;

  @override
  String get datePickerMinuteSemanticsLabelOne => 'एक मिनिट';

  @override
  String get datePickerMinuteSemanticsLabelOther => r'$minute मिनिटे';

  @override
  String get datePickerMinuteSemanticsLabelTwo => null;

  @override
  String get datePickerMinuteSemanticsLabelZero => null;

  @override
  String get modalBarrierDismissLabel => 'डिसमिस करा';

  @override
  String get pasteButtonLabel => 'पेस्ट करा';

  @override
  String get postMeridiemAbbreviation => 'PM';

  @override
  String get searchTextFieldPlaceholerLabel => 'Search';

  @override
  String get selectAllButtonLabel => 'सर्व निवडा';

  @override
  String get tabSemanticsLabelRaw => r'$tabCount पैकी $tabIndex टॅब';

  @override
  String get timerPickerHourLabelFew => null;

  @override
  String get timerPickerHourLabelMany => null;

  @override
  String get timerPickerHourLabelOne => 'तास';

  @override
  String get timerPickerHourLabelOther => 'तास';

  @override
  String get timerPickerHourLabelTwo => null;

  @override
  String get timerPickerHourLabelZero => null;

  @override
  String get timerPickerMinuteLabelFew => null;

  @override
  String get timerPickerMinuteLabelMany => null;

  @override
  String get timerPickerMinuteLabelOne => 'मि.';

  @override
  String get timerPickerMinuteLabelOther => 'मि.';

  @override
  String get timerPickerMinuteLabelTwo => null;

  @override
  String get timerPickerMinuteLabelZero => null;

  @override
  String get timerPickerSecondLabelFew => null;

  @override
  String get timerPickerSecondLabelMany => null;

  @override
  String get timerPickerSecondLabelOne => 'से.';

  @override
  String get timerPickerSecondLabelOther => 'से.';

  @override
  String get timerPickerSecondLabelTwo => null;

  @override
  String get timerPickerSecondLabelZero => null;

  @override
  String get todayLabel => 'आज';
}

/// The translations for Malay (`ms`).
class CupertinoLocalizationMs extends GlobalCupertinoLocalizations {
  /// Create an instance of the translation bundle for Malay.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationMs({
    String localeName = 'ms',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get alertDialogLabel => 'Makluman';

  @override
  String get anteMeridiemAbbreviation => 'PG';

  @override
  String get copyButtonLabel => 'Salin';

  @override
  String get cutButtonLabel => 'Potong';

  @override
  String get datePickerDateOrderString => 'dmy';

  @override
  String get datePickerDateTimeOrderString => 'date_time_dayPeriod';

  @override
  String get datePickerHourSemanticsLabelFew => null;

  @override
  String get datePickerHourSemanticsLabelMany => null;

  @override
  String get datePickerHourSemanticsLabelOne => r'Pukul $hour';

  @override
  String get datePickerHourSemanticsLabelOther => r'Pukul $hour';

  @override
  String get datePickerHourSemanticsLabelTwo => null;

  @override
  String get datePickerHourSemanticsLabelZero => null;

  @override
  String get datePickerMinuteSemanticsLabelFew => null;

  @override
  String get datePickerMinuteSemanticsLabelMany => null;

  @override
  String get datePickerMinuteSemanticsLabelOne => '1 minit';

  @override
  String get datePickerMinuteSemanticsLabelOther => r'$minute minit';

  @override
  String get datePickerMinuteSemanticsLabelTwo => null;

  @override
  String get datePickerMinuteSemanticsLabelZero => null;

  @override
  String get modalBarrierDismissLabel => 'Tolak';

  @override
  String get pasteButtonLabel => 'Tampal';

  @override
  String get postMeridiemAbbreviation => 'PTG';

  @override
  String get searchTextFieldPlaceholerLabel => 'Search';

  @override
  String get selectAllButtonLabel => 'Pilih Semua';

  @override
  String get tabSemanticsLabelRaw => r'Tab $tabIndex daripada $tabCount';

  @override
  String get timerPickerHourLabelFew => null;

  @override
  String get timerPickerHourLabelMany => null;

  @override
  String get timerPickerHourLabelOne => 'jam';

  @override
  String get timerPickerHourLabelOther => 'jam';

  @override
  String get timerPickerHourLabelTwo => null;

  @override
  String get timerPickerHourLabelZero => null;

  @override
  String get timerPickerMinuteLabelFew => null;

  @override
  String get timerPickerMinuteLabelMany => null;

  @override
  String get timerPickerMinuteLabelOne => 'minit';

  @override
  String get timerPickerMinuteLabelOther => 'minit';

  @override
  String get timerPickerMinuteLabelTwo => null;

  @override
  String get timerPickerMinuteLabelZero => null;

  @override
  String get timerPickerSecondLabelFew => null;

  @override
  String get timerPickerSecondLabelMany => null;

  @override
  String get timerPickerSecondLabelOne => 'saat';

  @override
  String get timerPickerSecondLabelOther => 'saat';

  @override
  String get timerPickerSecondLabelTwo => null;

  @override
  String get timerPickerSecondLabelZero => null;

  @override
  String get todayLabel => 'Hari ini';
}

/// The translations for Burmese (`my`).
class CupertinoLocalizationMy extends GlobalCupertinoLocalizations {
  /// Create an instance of the translation bundle for Burmese.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationMy({
    String localeName = 'my',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get alertDialogLabel => 'သတိပေးချက်';

  @override
  String get anteMeridiemAbbreviation => 'AM';

  @override
  String get copyButtonLabel => 'မိတ္တူကူးရန်';

  @override
  String get cutButtonLabel => 'ဖြတ်ယူရန်';

  @override
  String get datePickerDateOrderString => 'mdy';

  @override
  String get datePickerDateTimeOrderString => 'date_time_dayPeriod';

  @override
  String get datePickerHourSemanticsLabelFew => null;

  @override
  String get datePickerHourSemanticsLabelMany => null;

  @override
  String get datePickerHourSemanticsLabelOne => r'$hour နာရီ';

  @override
  String get datePickerHourSemanticsLabelOther => r'$hour နာရီ';

  @override
  String get datePickerHourSemanticsLabelTwo => null;

  @override
  String get datePickerHourSemanticsLabelZero => null;

  @override
  String get datePickerMinuteSemanticsLabelFew => null;

  @override
  String get datePickerMinuteSemanticsLabelMany => null;

  @override
  String get datePickerMinuteSemanticsLabelOne => '၁ မိနစ်';

  @override
  String get datePickerMinuteSemanticsLabelOther => r'$minute မိနစ်';

  @override
  String get datePickerMinuteSemanticsLabelTwo => null;

  @override
  String get datePickerMinuteSemanticsLabelZero => null;

  @override
  String get modalBarrierDismissLabel => 'ပယ်ရန်';

  @override
  String get pasteButtonLabel => 'ကူးထည့်ရန်';

  @override
  String get postMeridiemAbbreviation => 'PM';

  @override
  String get searchTextFieldPlaceholerLabel => 'Search';

  @override
  String get selectAllButtonLabel => 'အားလုံး ရွေးရန်';

  @override
  String get tabSemanticsLabelRaw => r'တဘ် $tabCount ခုအနက် $tabIndex ခု';

  @override
  String get timerPickerHourLabelFew => null;

  @override
  String get timerPickerHourLabelMany => null;

  @override
  String get timerPickerHourLabelOne => 'နာရီ';

  @override
  String get timerPickerHourLabelOther => 'နာရီ';

  @override
  String get timerPickerHourLabelTwo => null;

  @override
  String get timerPickerHourLabelZero => null;

  @override
  String get timerPickerMinuteLabelFew => null;

  @override
  String get timerPickerMinuteLabelMany => null;

  @override
  String get timerPickerMinuteLabelOne => 'မိနစ်';

  @override
  String get timerPickerMinuteLabelOther => 'မိနစ်';

  @override
  String get timerPickerMinuteLabelTwo => null;

  @override
  String get timerPickerMinuteLabelZero => null;

  @override
  String get timerPickerSecondLabelFew => null;

  @override
  String get timerPickerSecondLabelMany => null;

  @override
  String get timerPickerSecondLabelOne => 'စက္ကန့်';

  @override
  String get timerPickerSecondLabelOther => 'စက္ကန့်';

  @override
  String get timerPickerSecondLabelTwo => null;

  @override
  String get timerPickerSecondLabelZero => null;

  @override
  String get todayLabel => 'ယနေ့';
}

/// The translations for Norwegian Bokmål (`nb`).
class CupertinoLocalizationNb extends GlobalCupertinoLocalizations {
  /// Create an instance of the translation bundle for Norwegian Bokmål.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationNb({
    String localeName = 'nb',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get alertDialogLabel => 'Varsel';

  @override
  String get anteMeridiemAbbreviation => 'AM';

  @override
  String get copyButtonLabel => 'Kopiér';

  @override
  String get cutButtonLabel => 'Klipp ut';

  @override
  String get datePickerDateOrderString => 'dmy';

  @override
  String get datePickerDateTimeOrderString => 'date_time_dayPeriod';

  @override
  String get datePickerHourSemanticsLabelFew => null;

  @override
  String get datePickerHourSemanticsLabelMany => null;

  @override
  String get datePickerHourSemanticsLabelOne => r'$hour null-null';

  @override
  String get datePickerHourSemanticsLabelOther => r'$hour null-null';

  @override
  String get datePickerHourSemanticsLabelTwo => null;

  @override
  String get datePickerHourSemanticsLabelZero => null;

  @override
  String get datePickerMinuteSemanticsLabelFew => null;

  @override
  String get datePickerMinuteSemanticsLabelMany => null;

  @override
  String get datePickerMinuteSemanticsLabelOne => '1 minutt';

  @override
  String get datePickerMinuteSemanticsLabelOther => r'$minute minutter';

  @override
  String get datePickerMinuteSemanticsLabelTwo => null;

  @override
  String get datePickerMinuteSemanticsLabelZero => null;

  @override
  String get modalBarrierDismissLabel => 'Avvis';

  @override
  String get pasteButtonLabel => 'Lim inn';

  @override
  String get postMeridiemAbbreviation => 'PM';

  @override
  String get searchTextFieldPlaceholerLabel => 'Search';

  @override
  String get selectAllButtonLabel => 'Velg alle';

  @override
  String get tabSemanticsLabelRaw => r'Fane $tabIndex av $tabCount';

  @override
  String get timerPickerHourLabelFew => null;

  @override
  String get timerPickerHourLabelMany => null;

  @override
  String get timerPickerHourLabelOne => 'time';

  @override
  String get timerPickerHourLabelOther => 'timer';

  @override
  String get timerPickerHourLabelTwo => null;

  @override
  String get timerPickerHourLabelZero => null;

  @override
  String get timerPickerMinuteLabelFew => null;

  @override
  String get timerPickerMinuteLabelMany => null;

  @override
  String get timerPickerMinuteLabelOne => 'min.';

  @override
  String get timerPickerMinuteLabelOther => 'min.';

  @override
  String get timerPickerMinuteLabelTwo => null;

  @override
  String get timerPickerMinuteLabelZero => null;

  @override
  String get timerPickerSecondLabelFew => null;

  @override
  String get timerPickerSecondLabelMany => null;

  @override
  String get timerPickerSecondLabelOne => 'sek.';

  @override
  String get timerPickerSecondLabelOther => 'sek.';

  @override
  String get timerPickerSecondLabelTwo => null;

  @override
  String get timerPickerSecondLabelZero => null;

  @override
  String get todayLabel => 'I dag';
}

/// The translations for Nepali (`ne`).
class CupertinoLocalizationNe extends GlobalCupertinoLocalizations {
  /// Create an instance of the translation bundle for Nepali.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationNe({
    String localeName = 'ne',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get alertDialogLabel => 'अलर्ट';

  @override
  String get anteMeridiemAbbreviation => 'पूर्वाह्न';

  @override
  String get copyButtonLabel => 'प्रतिलिपि गर्नुहोस्';

  @override
  String get cutButtonLabel => 'काट्नुहोस्';

  @override
  String get datePickerDateOrderString => 'mdy';

  @override
  String get datePickerDateTimeOrderString => 'date_time_dayPeriod';

  @override
  String get datePickerHourSemanticsLabelFew => null;

  @override
  String get datePickerHourSemanticsLabelMany => null;

  @override
  String get datePickerHourSemanticsLabelOne => r'$hour बजे';

  @override
  String get datePickerHourSemanticsLabelOther => r'$hour बजे';

  @override
  String get datePickerHourSemanticsLabelTwo => null;

  @override
  String get datePickerHourSemanticsLabelZero => null;

  @override
  String get datePickerMinuteSemanticsLabelFew => null;

  @override
  String get datePickerMinuteSemanticsLabelMany => null;

  @override
  String get datePickerMinuteSemanticsLabelOne => '१ मिनेट';

  @override
  String get datePickerMinuteSemanticsLabelOther => r'$minute मिनेट';

  @override
  String get datePickerMinuteSemanticsLabelTwo => null;

  @override
  String get datePickerMinuteSemanticsLabelZero => null;

  @override
  String get modalBarrierDismissLabel => 'खारेज गर्नुहोस्';

  @override
  String get pasteButtonLabel => 'टाँस्नुहोस्';

  @override
  String get postMeridiemAbbreviation => 'अपराह्न';

  @override
  String get searchTextFieldPlaceholerLabel => 'Search';

  @override
  String get selectAllButtonLabel => 'सबै चयन गर्नुहोस्';

  @override
  String get tabSemanticsLabelRaw => r'$tabCount मध्ये $tabIndex ट्याब';

  @override
  String get timerPickerHourLabelFew => null;

  @override
  String get timerPickerHourLabelMany => null;

  @override
  String get timerPickerHourLabelOne => 'घन्टा';

  @override
  String get timerPickerHourLabelOther => 'घन्टा';

  @override
  String get timerPickerHourLabelTwo => null;

  @override
  String get timerPickerHourLabelZero => null;

  @override
  String get timerPickerMinuteLabelFew => null;

  @override
  String get timerPickerMinuteLabelMany => null;

  @override
  String get timerPickerMinuteLabelOne => 'मिनेट';

  @override
  String get timerPickerMinuteLabelOther => 'मिनेट';

  @override
  String get timerPickerMinuteLabelTwo => null;

  @override
  String get timerPickerMinuteLabelZero => null;

  @override
  String get timerPickerSecondLabelFew => null;

  @override
  String get timerPickerSecondLabelMany => null;

  @override
  String get timerPickerSecondLabelOne => 'सेकेन्ड';

  @override
  String get timerPickerSecondLabelOther => 'सेकेन्ड';

  @override
  String get timerPickerSecondLabelTwo => null;

  @override
  String get timerPickerSecondLabelZero => null;

  @override
  String get todayLabel => 'आज';
}

/// The translations for Dutch Flemish (`nl`).
class CupertinoLocalizationNl extends GlobalCupertinoLocalizations {
  /// Create an instance of the translation bundle for Dutch Flemish.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationNl({
    String localeName = 'nl',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get alertDialogLabel => 'Melding';

  @override
  String get anteMeridiemAbbreviation => 'am';

  @override
  String get copyButtonLabel => 'Kopiëren';

  @override
  String get cutButtonLabel => 'Knippen';

  @override
  String get datePickerDateOrderString => 'dmy';

  @override
  String get datePickerDateTimeOrderString => 'date_time_dayPeriod';

  @override
  String get datePickerHourSemanticsLabelFew => null;

  @override
  String get datePickerHourSemanticsLabelMany => null;

  @override
  String get datePickerHourSemanticsLabelOne => r'$hour uur';

  @override
  String get datePickerHourSemanticsLabelOther => r'$hour uur';

  @override
  String get datePickerHourSemanticsLabelTwo => null;

  @override
  String get datePickerHourSemanticsLabelZero => null;

  @override
  String get datePickerMinuteSemanticsLabelFew => null;

  @override
  String get datePickerMinuteSemanticsLabelMany => null;

  @override
  String get datePickerMinuteSemanticsLabelOne => '1 minuut';

  @override
  String get datePickerMinuteSemanticsLabelOther => r'$minute minuten';

  @override
  String get datePickerMinuteSemanticsLabelTwo => null;

  @override
  String get datePickerMinuteSemanticsLabelZero => null;

  @override
  String get modalBarrierDismissLabel => 'Sluiten';

  @override
  String get pasteButtonLabel => 'Plakken';

  @override
  String get postMeridiemAbbreviation => 'pm';

  @override
  String get searchTextFieldPlaceholerLabel => 'Search';

  @override
  String get selectAllButtonLabel => 'Alles selecteren';

  @override
  String get tabSemanticsLabelRaw => r'Tabblad $tabIndex van $tabCount';

  @override
  String get timerPickerHourLabelFew => null;

  @override
  String get timerPickerHourLabelMany => null;

  @override
  String get timerPickerHourLabelOne => 'uur';

  @override
  String get timerPickerHourLabelOther => 'uur';

  @override
  String get timerPickerHourLabelTwo => null;

  @override
  String get timerPickerHourLabelZero => null;

  @override
  String get timerPickerMinuteLabelFew => null;

  @override
  String get timerPickerMinuteLabelMany => null;

  @override
  String get timerPickerMinuteLabelOne => 'min.';

  @override
  String get timerPickerMinuteLabelOther => 'min.';

  @override
  String get timerPickerMinuteLabelTwo => null;

  @override
  String get timerPickerMinuteLabelZero => null;

  @override
  String get timerPickerSecondLabelFew => null;

  @override
  String get timerPickerSecondLabelMany => null;

  @override
  String get timerPickerSecondLabelOne => 'sec.';

  @override
  String get timerPickerSecondLabelOther => 'sec.';

  @override
  String get timerPickerSecondLabelTwo => null;

  @override
  String get timerPickerSecondLabelZero => null;

  @override
  String get todayLabel => 'Vandaag';
}

/// The translations for Norwegian (`no`).
class CupertinoLocalizationNo extends GlobalCupertinoLocalizations {
  /// Create an instance of the translation bundle for Norwegian.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationNo({
    String localeName = 'no',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get alertDialogLabel => 'Varsel';

  @override
  String get anteMeridiemAbbreviation => 'AM';

  @override
  String get copyButtonLabel => 'Kopiér';

  @override
  String get cutButtonLabel => 'Klipp ut';

  @override
  String get datePickerDateOrderString => 'dmy';

  @override
  String get datePickerDateTimeOrderString => 'date_time_dayPeriod';

  @override
  String get datePickerHourSemanticsLabelFew => null;

  @override
  String get datePickerHourSemanticsLabelMany => null;

  @override
  String get datePickerHourSemanticsLabelOne => r'$hour null-null';

  @override
  String get datePickerHourSemanticsLabelOther => r'$hour null-null';

  @override
  String get datePickerHourSemanticsLabelTwo => null;

  @override
  String get datePickerHourSemanticsLabelZero => null;

  @override
  String get datePickerMinuteSemanticsLabelFew => null;

  @override
  String get datePickerMinuteSemanticsLabelMany => null;

  @override
  String get datePickerMinuteSemanticsLabelOne => '1 minutt';

  @override
  String get datePickerMinuteSemanticsLabelOther => r'$minute minutter';

  @override
  String get datePickerMinuteSemanticsLabelTwo => null;

  @override
  String get datePickerMinuteSemanticsLabelZero => null;

  @override
  String get modalBarrierDismissLabel => 'Avvis';

  @override
  String get pasteButtonLabel => 'Lim inn';

  @override
  String get postMeridiemAbbreviation => 'PM';

  @override
  String get searchTextFieldPlaceholerLabel => 'Search';

  @override
  String get selectAllButtonLabel => 'Velg alle';

  @override
  String get tabSemanticsLabelRaw => r'Fane $tabIndex av $tabCount';

  @override
  String get timerPickerHourLabelFew => null;

  @override
  String get timerPickerHourLabelMany => null;

  @override
  String get timerPickerHourLabelOne => 'time';

  @override
  String get timerPickerHourLabelOther => 'timer';

  @override
  String get timerPickerHourLabelTwo => null;

  @override
  String get timerPickerHourLabelZero => null;

  @override
  String get timerPickerMinuteLabelFew => null;

  @override
  String get timerPickerMinuteLabelMany => null;

  @override
  String get timerPickerMinuteLabelOne => 'min.';

  @override
  String get timerPickerMinuteLabelOther => 'min.';

  @override
  String get timerPickerMinuteLabelTwo => null;

  @override
  String get timerPickerMinuteLabelZero => null;

  @override
  String get timerPickerSecondLabelFew => null;

  @override
  String get timerPickerSecondLabelMany => null;

  @override
  String get timerPickerSecondLabelOne => 'sek.';

  @override
  String get timerPickerSecondLabelOther => 'sek.';

  @override
  String get timerPickerSecondLabelTwo => null;

  @override
  String get timerPickerSecondLabelZero => null;

  @override
  String get todayLabel => 'I dag';
}

/// The translations for Oriya (`or`).
class CupertinoLocalizationOr extends GlobalCupertinoLocalizations {
  /// Create an instance of the translation bundle for Oriya.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationOr({
    String localeName = 'or',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get alertDialogLabel => 'ଆଲର୍ଟ';

  @override
  String get anteMeridiemAbbreviation => 'AM';

  @override
  String get copyButtonLabel => 'କପି କରନ୍ତୁ';

  @override
  String get cutButtonLabel => 'କଟ୍ କରନ୍ତୁ';

  @override
  String get datePickerDateOrderString => 'mdy';

  @override
  String get datePickerDateTimeOrderString => 'date_time_dayPeriod';

  @override
  String get datePickerHourSemanticsLabelFew => null;

  @override
  String get datePickerHourSemanticsLabelMany => null;

  @override
  String get datePickerHourSemanticsLabelOne => r'$hourଟା';

  @override
  String get datePickerHourSemanticsLabelOther => r'$hourଟା';

  @override
  String get datePickerHourSemanticsLabelTwo => null;

  @override
  String get datePickerHourSemanticsLabelZero => null;

  @override
  String get datePickerMinuteSemanticsLabelFew => null;

  @override
  String get datePickerMinuteSemanticsLabelMany => null;

  @override
  String get datePickerMinuteSemanticsLabelOne => '1 ମିନିଟ୍';

  @override
  String get datePickerMinuteSemanticsLabelOther => r'$minute ମିନିଟ୍';

  @override
  String get datePickerMinuteSemanticsLabelTwo => null;

  @override
  String get datePickerMinuteSemanticsLabelZero => null;

  @override
  String get modalBarrierDismissLabel => 'ଖାରଜ କରନ୍ତୁ';

  @override
  String get pasteButtonLabel => 'ପେଷ୍ଟ କରନ୍ତୁ';

  @override
  String get postMeridiemAbbreviation => 'PM';

  @override
  String get searchTextFieldPlaceholerLabel => 'Search';

  @override
  String get selectAllButtonLabel => 'ସମସ୍ତ ଚୟନ କରନ୍ତୁ';

  @override
  String get tabSemanticsLabelRaw => r'$tabCountର $tabIndex ଟାବ୍';

  @override
  String get timerPickerHourLabelFew => null;

  @override
  String get timerPickerHourLabelMany => null;

  @override
  String get timerPickerHourLabelOne => 'ଘଣ୍ଟା';

  @override
  String get timerPickerHourLabelOther => 'ଘଣ୍ଟା';

  @override
  String get timerPickerHourLabelTwo => null;

  @override
  String get timerPickerHourLabelZero => null;

  @override
  String get timerPickerMinuteLabelFew => null;

  @override
  String get timerPickerMinuteLabelMany => null;

  @override
  String get timerPickerMinuteLabelOne => 'ମିନିଟ୍';

  @override
  String get timerPickerMinuteLabelOther => 'ମିନିଟ୍';

  @override
  String get timerPickerMinuteLabelTwo => null;

  @override
  String get timerPickerMinuteLabelZero => null;

  @override
  String get timerPickerSecondLabelFew => null;

  @override
  String get timerPickerSecondLabelMany => null;

  @override
  String get timerPickerSecondLabelOne => 'ସେକେଣ୍ଡ';

  @override
  String get timerPickerSecondLabelOther => 'ସେକେଣ୍ଡ';

  @override
  String get timerPickerSecondLabelTwo => null;

  @override
  String get timerPickerSecondLabelZero => null;

  @override
  String get todayLabel => 'ଆଜି';
}

/// The translations for Panjabi Punjabi (`pa`).
class CupertinoLocalizationPa extends GlobalCupertinoLocalizations {
  /// Create an instance of the translation bundle for Panjabi Punjabi.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationPa({
    String localeName = 'pa',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get alertDialogLabel => 'ਸੁਚੇਤਨਾ';

  @override
  String get anteMeridiemAbbreviation => 'AM';

  @override
  String get copyButtonLabel => 'ਕਾਪੀ ਕਰੋ';

  @override
  String get cutButtonLabel => 'ਕੱਟ ਕਰੋ';

  @override
  String get datePickerDateOrderString => 'dmy';

  @override
  String get datePickerDateTimeOrderString => 'date_time_dayPeriod';

  @override
  String get datePickerHourSemanticsLabelFew => null;

  @override
  String get datePickerHourSemanticsLabelMany => null;

  @override
  String get datePickerHourSemanticsLabelOne => r'$hour ਵਜੇ';

  @override
  String get datePickerHourSemanticsLabelOther => r'$hour ਵਜੇ';

  @override
  String get datePickerHourSemanticsLabelTwo => null;

  @override
  String get datePickerHourSemanticsLabelZero => null;

  @override
  String get datePickerMinuteSemanticsLabelFew => null;

  @override
  String get datePickerMinuteSemanticsLabelMany => null;

  @override
  String get datePickerMinuteSemanticsLabelOne => '1 ਮਿੰਟ';

  @override
  String get datePickerMinuteSemanticsLabelOther => r'$minute ਮਿੰਟ';

  @override
  String get datePickerMinuteSemanticsLabelTwo => null;

  @override
  String get datePickerMinuteSemanticsLabelZero => null;

  @override
  String get modalBarrierDismissLabel => 'ਖਾਰਜ ਕਰੋ';

  @override
  String get pasteButtonLabel => 'ਪੇਸਟ ਕਰੋ';

  @override
  String get postMeridiemAbbreviation => 'PM';

  @override
  String get searchTextFieldPlaceholerLabel => 'Search';

  @override
  String get selectAllButtonLabel => 'ਸਭ ਚੁਣੋ';

  @override
  String get tabSemanticsLabelRaw => r'$tabCount ਵਿੱਚੋਂ $tabIndex ਟੈਬ';

  @override
  String get timerPickerHourLabelFew => null;

  @override
  String get timerPickerHourLabelMany => null;

  @override
  String get timerPickerHourLabelOne => 'ਘੰਟਾ';

  @override
  String get timerPickerHourLabelOther => 'ਘੰਟੇ';

  @override
  String get timerPickerHourLabelTwo => null;

  @override
  String get timerPickerHourLabelZero => null;

  @override
  String get timerPickerMinuteLabelFew => null;

  @override
  String get timerPickerMinuteLabelMany => null;

  @override
  String get timerPickerMinuteLabelOne => 'ਮਿੰ.';

  @override
  String get timerPickerMinuteLabelOther => 'ਮਿੰ.';

  @override
  String get timerPickerMinuteLabelTwo => null;

  @override
  String get timerPickerMinuteLabelZero => null;

  @override
  String get timerPickerSecondLabelFew => null;

  @override
  String get timerPickerSecondLabelMany => null;

  @override
  String get timerPickerSecondLabelOne => 'ਸਕਿੰ.';

  @override
  String get timerPickerSecondLabelOther => 'ਸਕਿੰ.';

  @override
  String get timerPickerSecondLabelTwo => null;

  @override
  String get timerPickerSecondLabelZero => null;

  @override
  String get todayLabel => 'ਅੱਜ';
}

/// The translations for Polish (`pl`).
class CupertinoLocalizationPl extends GlobalCupertinoLocalizations {
  /// Create an instance of the translation bundle for Polish.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationPl({
    String localeName = 'pl',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get alertDialogLabel => 'Alert';

  @override
  String get anteMeridiemAbbreviation => 'AM';

  @override
  String get copyButtonLabel => 'Kopiuj';

  @override
  String get cutButtonLabel => 'Wytnij';

  @override
  String get datePickerDateOrderString => 'dmy';

  @override
  String get datePickerDateTimeOrderString => 'date_time_dayPeriod';

  @override
  String get datePickerHourSemanticsLabelFew => r'$hour';

  @override
  String get datePickerHourSemanticsLabelMany => r'$hour';

  @override
  String get datePickerHourSemanticsLabelOne => r'$hour';

  @override
  String get datePickerHourSemanticsLabelOther => r'$hour';

  @override
  String get datePickerHourSemanticsLabelTwo => null;

  @override
  String get datePickerHourSemanticsLabelZero => null;

  @override
  String get datePickerMinuteSemanticsLabelFew => r'$minute minuty';

  @override
  String get datePickerMinuteSemanticsLabelMany => r'$minute minut';

  @override
  String get datePickerMinuteSemanticsLabelOne => '1 minuta';

  @override
  String get datePickerMinuteSemanticsLabelOther => r'$minute minuty';

  @override
  String get datePickerMinuteSemanticsLabelTwo => null;

  @override
  String get datePickerMinuteSemanticsLabelZero => null;

  @override
  String get modalBarrierDismissLabel => 'Zamknij';

  @override
  String get pasteButtonLabel => 'Wklej';

  @override
  String get postMeridiemAbbreviation => 'PM';

  @override
  String get searchTextFieldPlaceholerLabel => 'Search';

  @override
  String get selectAllButtonLabel => 'Wybierz wszystkie';

  @override
  String get tabSemanticsLabelRaw => r'Karta $tabIndex z $tabCount';

  @override
  String get timerPickerHourLabelFew => 'godziny';

  @override
  String get timerPickerHourLabelMany => 'godzin';

  @override
  String get timerPickerHourLabelOne => 'godzina';

  @override
  String get timerPickerHourLabelOther => 'godziny';

  @override
  String get timerPickerHourLabelTwo => null;

  @override
  String get timerPickerHourLabelZero => null;

  @override
  String get timerPickerMinuteLabelFew => 'min';

  @override
  String get timerPickerMinuteLabelMany => 'min';

  @override
  String get timerPickerMinuteLabelOne => 'min';

  @override
  String get timerPickerMinuteLabelOther => 'min';

  @override
  String get timerPickerMinuteLabelTwo => null;

  @override
  String get timerPickerMinuteLabelZero => null;

  @override
  String get timerPickerSecondLabelFew => 's';

  @override
  String get timerPickerSecondLabelMany => 's';

  @override
  String get timerPickerSecondLabelOne => 's';

  @override
  String get timerPickerSecondLabelOther => 's';

  @override
  String get timerPickerSecondLabelTwo => null;

  @override
  String get timerPickerSecondLabelZero => null;

  @override
  String get todayLabel => 'Dziś';
}

/// The translations for Portuguese (`pt`).
class CupertinoLocalizationPt extends GlobalCupertinoLocalizations {
  /// Create an instance of the translation bundle for Portuguese.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationPt({
    String localeName = 'pt',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get alertDialogLabel => 'Alerta';

  @override
  String get anteMeridiemAbbreviation => 'AM';

  @override
  String get copyButtonLabel => 'Copiar';

  @override
  String get cutButtonLabel => 'Cortar';

  @override
  String get datePickerDateOrderString => 'dmy';

  @override
  String get datePickerDateTimeOrderString => 'date_time_dayPeriod';

  @override
  String get datePickerHourSemanticsLabelFew => null;

  @override
  String get datePickerHourSemanticsLabelMany => null;

  @override
  String get datePickerHourSemanticsLabelOne => r'$hour hora';

  @override
  String get datePickerHourSemanticsLabelOther => r'$hour horas';

  @override
  String get datePickerHourSemanticsLabelTwo => null;

  @override
  String get datePickerHourSemanticsLabelZero => null;

  @override
  String get datePickerMinuteSemanticsLabelFew => null;

  @override
  String get datePickerMinuteSemanticsLabelMany => null;

  @override
  String get datePickerMinuteSemanticsLabelOne => '1 minuto';

  @override
  String get datePickerMinuteSemanticsLabelOther => r'$minute minutos';

  @override
  String get datePickerMinuteSemanticsLabelTwo => null;

  @override
  String get datePickerMinuteSemanticsLabelZero => null;

  @override
  String get modalBarrierDismissLabel => 'Dispensar';

  @override
  String get pasteButtonLabel => 'Colar';

  @override
  String get postMeridiemAbbreviation => 'PM';

  @override
  String get searchTextFieldPlaceholerLabel => 'Search';

  @override
  String get selectAllButtonLabel => 'Selecionar Tudo';

  @override
  String get tabSemanticsLabelRaw => r'Guia $tabIndex de $tabCount';

  @override
  String get timerPickerHourLabelFew => null;

  @override
  String get timerPickerHourLabelMany => null;

  @override
  String get timerPickerHourLabelOne => 'hora';

  @override
  String get timerPickerHourLabelOther => 'horas';

  @override
  String get timerPickerHourLabelTwo => null;

  @override
  String get timerPickerHourLabelZero => null;

  @override
  String get timerPickerMinuteLabelFew => null;

  @override
  String get timerPickerMinuteLabelMany => null;

  @override
  String get timerPickerMinuteLabelOne => 'min';

  @override
  String get timerPickerMinuteLabelOther => 'min';

  @override
  String get timerPickerMinuteLabelTwo => null;

  @override
  String get timerPickerMinuteLabelZero => null;

  @override
  String get timerPickerSecondLabelFew => null;

  @override
  String get timerPickerSecondLabelMany => null;

  @override
  String get timerPickerSecondLabelOne => 's';

  @override
  String get timerPickerSecondLabelOther => 's';

  @override
  String get timerPickerSecondLabelTwo => null;

  @override
  String get timerPickerSecondLabelZero => null;

  @override
  String get todayLabel => 'Hoje';
}

/// The translations for Portuguese, as used in Portugal (`pt_PT`).
class CupertinoLocalizationPtPt extends CupertinoLocalizationPt {
  /// Create an instance of the translation bundle for Portuguese, as used in Portugal.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationPtPt({
    String localeName = 'pt_PT',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get tabSemanticsLabelRaw => r'Separador $tabIndex de $tabCount';

  @override
  String get datePickerHourSemanticsLabelOther => r'$hour hora';

  @override
  String get timerPickerSecondLabelOne => 'seg';

  @override
  String get timerPickerSecondLabelOther => 'seg';

  @override
  String get selectAllButtonLabel => 'Selecionar tudo';

  @override
  String get modalBarrierDismissLabel => 'Ignorar';
}

/// The translations for Romanian Moldavian Moldovan (`ro`).
class CupertinoLocalizationRo extends GlobalCupertinoLocalizations {
  /// Create an instance of the translation bundle for Romanian Moldavian Moldovan.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationRo({
    String localeName = 'ro',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get alertDialogLabel => 'Alertă';

  @override
  String get anteMeridiemAbbreviation => 'a.m.';

  @override
  String get copyButtonLabel => 'Copiați';

  @override
  String get cutButtonLabel => 'Decupați';

  @override
  String get datePickerDateOrderString => 'dmy';

  @override
  String get datePickerDateTimeOrderString => 'date_time_dayPeriod';

  @override
  String get datePickerHourSemanticsLabelFew => r'Ora $hour';

  @override
  String get datePickerHourSemanticsLabelMany => null;

  @override
  String get datePickerHourSemanticsLabelOne => r'Ora $hour';

  @override
  String get datePickerHourSemanticsLabelOther => r'Ora $hour';

  @override
  String get datePickerHourSemanticsLabelTwo => null;

  @override
  String get datePickerHourSemanticsLabelZero => null;

  @override
  String get datePickerMinuteSemanticsLabelFew => r'$minute minute';

  @override
  String get datePickerMinuteSemanticsLabelMany => null;

  @override
  String get datePickerMinuteSemanticsLabelOne => '1 minut';

  @override
  String get datePickerMinuteSemanticsLabelOther => r'$minute de minute';

  @override
  String get datePickerMinuteSemanticsLabelTwo => null;

  @override
  String get datePickerMinuteSemanticsLabelZero => null;

  @override
  String get modalBarrierDismissLabel => 'Închideți';

  @override
  String get pasteButtonLabel => 'Inserați';

  @override
  String get postMeridiemAbbreviation => 'p.m.';

  @override
  String get searchTextFieldPlaceholerLabel => 'Search';

  @override
  String get selectAllButtonLabel => 'Selectați-le pe toate';

  @override
  String get tabSemanticsLabelRaw => r'Fila $tabIndex din $tabCount';

  @override
  String get timerPickerHourLabelFew => 'ore';

  @override
  String get timerPickerHourLabelMany => null;

  @override
  String get timerPickerHourLabelOne => 'oră';

  @override
  String get timerPickerHourLabelOther => 'de ore';

  @override
  String get timerPickerHourLabelTwo => null;

  @override
  String get timerPickerHourLabelZero => null;

  @override
  String get timerPickerMinuteLabelFew => 'min.';

  @override
  String get timerPickerMinuteLabelMany => null;

  @override
  String get timerPickerMinuteLabelOne => 'min.';

  @override
  String get timerPickerMinuteLabelOther => 'min.';

  @override
  String get timerPickerMinuteLabelTwo => null;

  @override
  String get timerPickerMinuteLabelZero => null;

  @override
  String get timerPickerSecondLabelFew => 'sec.';

  @override
  String get timerPickerSecondLabelMany => null;

  @override
  String get timerPickerSecondLabelOne => 'sec.';

  @override
  String get timerPickerSecondLabelOther => 'sec.';

  @override
  String get timerPickerSecondLabelTwo => null;

  @override
  String get timerPickerSecondLabelZero => null;

  @override
  String get todayLabel => 'Azi';
}

/// The translations for Russian (`ru`).
class CupertinoLocalizationRu extends GlobalCupertinoLocalizations {
  /// Create an instance of the translation bundle for Russian.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationRu({
    String localeName = 'ru',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get alertDialogLabel => 'Оповещение';

  @override
  String get anteMeridiemAbbreviation => 'АМ';

  @override
  String get copyButtonLabel => 'Копировать';

  @override
  String get cutButtonLabel => 'Вырезать';

  @override
  String get datePickerDateOrderString => 'dmy';

  @override
  String get datePickerDateTimeOrderString => 'date_time_dayPeriod';

  @override
  String get datePickerHourSemanticsLabelFew => r'$hour часа';

  @override
  String get datePickerHourSemanticsLabelMany => r'$hour часов';

  @override
  String get datePickerHourSemanticsLabelOne => r'$hour час';

  @override
  String get datePickerHourSemanticsLabelOther => r'$hour часа';

  @override
  String get datePickerHourSemanticsLabelTwo => null;

  @override
  String get datePickerHourSemanticsLabelZero => null;

  @override
  String get datePickerMinuteSemanticsLabelFew => r'$minute минуты';

  @override
  String get datePickerMinuteSemanticsLabelMany => r'$minute минут';

  @override
  String get datePickerMinuteSemanticsLabelOne => '1 минута';

  @override
  String get datePickerMinuteSemanticsLabelOther => r'$minute минуты';

  @override
  String get datePickerMinuteSemanticsLabelTwo => null;

  @override
  String get datePickerMinuteSemanticsLabelZero => null;

  @override
  String get modalBarrierDismissLabel => 'Закрыть';

  @override
  String get pasteButtonLabel => 'Вставить';

  @override
  String get postMeridiemAbbreviation => 'PM';

  @override
  String get searchTextFieldPlaceholerLabel => 'Search';

  @override
  String get selectAllButtonLabel => 'Выбрать все';

  @override
  String get tabSemanticsLabelRaw => r'Вкладка $tabIndex из $tabCount';

  @override
  String get timerPickerHourLabelFew => 'часа';

  @override
  String get timerPickerHourLabelMany => 'часов';

  @override
  String get timerPickerHourLabelOne => 'час';

  @override
  String get timerPickerHourLabelOther => 'часа';

  @override
  String get timerPickerHourLabelTwo => null;

  @override
  String get timerPickerHourLabelZero => null;

  @override
  String get timerPickerMinuteLabelFew => 'мин.';

  @override
  String get timerPickerMinuteLabelMany => 'мин.';

  @override
  String get timerPickerMinuteLabelOne => 'мин.';

  @override
  String get timerPickerMinuteLabelOther => 'мин.';

  @override
  String get timerPickerMinuteLabelTwo => null;

  @override
  String get timerPickerMinuteLabelZero => null;

  @override
  String get timerPickerSecondLabelFew => 'сек.';

  @override
  String get timerPickerSecondLabelMany => 'сек.';

  @override
  String get timerPickerSecondLabelOne => 'сек.';

  @override
  String get timerPickerSecondLabelOther => 'сек.';

  @override
  String get timerPickerSecondLabelTwo => null;

  @override
  String get timerPickerSecondLabelZero => null;

  @override
  String get todayLabel => 'Сегодня';
}

/// The translations for Sinhala Sinhalese (`si`).
class CupertinoLocalizationSi extends GlobalCupertinoLocalizations {
  /// Create an instance of the translation bundle for Sinhala Sinhalese.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationSi({
    String localeName = 'si',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get alertDialogLabel => 'ඇඟවීම';

  @override
  String get anteMeridiemAbbreviation => 'පෙ.ව.';

  @override
  String get copyButtonLabel => 'පිටපත් කරන්න';

  @override
  String get cutButtonLabel => 'කපන්න';

  @override
  String get datePickerDateOrderString => 'ymd';

  @override
  String get datePickerDateTimeOrderString => 'date_dayPeriod_time';

  @override
  String get datePickerHourSemanticsLabelFew => null;

  @override
  String get datePickerHourSemanticsLabelMany => null;

  @override
  String get datePickerHourSemanticsLabelOne => r'$hourයි';

  @override
  String get datePickerHourSemanticsLabelOther => r'$hourයි';

  @override
  String get datePickerHourSemanticsLabelTwo => null;

  @override
  String get datePickerHourSemanticsLabelZero => null;

  @override
  String get datePickerMinuteSemanticsLabelFew => null;

  @override
  String get datePickerMinuteSemanticsLabelMany => null;

  @override
  String get datePickerMinuteSemanticsLabelOne => 'මිනිත්තු 1';

  @override
  String get datePickerMinuteSemanticsLabelOther => r'මිනිත්තු $minute';

  @override
  String get datePickerMinuteSemanticsLabelTwo => null;

  @override
  String get datePickerMinuteSemanticsLabelZero => null;

  @override
  String get modalBarrierDismissLabel => 'ඉවත ලන්න';

  @override
  String get pasteButtonLabel => 'අලවන්න';

  @override
  String get postMeridiemAbbreviation => 'ප.ව.';

  @override
  String get searchTextFieldPlaceholerLabel => 'Search';

  @override
  String get selectAllButtonLabel => 'සියල්ල තෝරන්න';

  @override
  String get tabSemanticsLabelRaw => r'ටැබ $tabCount න් $tabIndex';

  @override
  String get timerPickerHourLabelFew => null;

  @override
  String get timerPickerHourLabelMany => null;

  @override
  String get timerPickerHourLabelOne => 'පැය';

  @override
  String get timerPickerHourLabelOther => 'පැය';

  @override
  String get timerPickerHourLabelTwo => null;

  @override
  String get timerPickerHourLabelZero => null;

  @override
  String get timerPickerMinuteLabelFew => null;

  @override
  String get timerPickerMinuteLabelMany => null;

  @override
  String get timerPickerMinuteLabelOne => 'මිනි.';

  @override
  String get timerPickerMinuteLabelOther => 'මිනි.';

  @override
  String get timerPickerMinuteLabelTwo => null;

  @override
  String get timerPickerMinuteLabelZero => null;

  @override
  String get timerPickerSecondLabelFew => null;

  @override
  String get timerPickerSecondLabelMany => null;

  @override
  String get timerPickerSecondLabelOne => 'තත්.';

  @override
  String get timerPickerSecondLabelOther => 'තත්.';

  @override
  String get timerPickerSecondLabelTwo => null;

  @override
  String get timerPickerSecondLabelZero => null;

  @override
  String get todayLabel => 'අද';
}

/// The translations for Slovak (`sk`).
class CupertinoLocalizationSk extends GlobalCupertinoLocalizations {
  /// Create an instance of the translation bundle for Slovak.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationSk({
    String localeName = 'sk',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get alertDialogLabel => 'Upozornenie';

  @override
  String get anteMeridiemAbbreviation => 'AM';

  @override
  String get copyButtonLabel => 'Kopírovať';

  @override
  String get cutButtonLabel => 'Vystrihnúť';

  @override
  String get datePickerDateOrderString => 'mdy';

  @override
  String get datePickerDateTimeOrderString => 'date_time_dayPeriod';

  @override
  String get datePickerHourSemanticsLabelFew => r'$hour hodiny';

  @override
  String get datePickerHourSemanticsLabelMany => r'$hour hodiny';

  @override
  String get datePickerHourSemanticsLabelOne => r'$hour hodina';

  @override
  String get datePickerHourSemanticsLabelOther => r'$hour hodín';

  @override
  String get datePickerHourSemanticsLabelTwo => null;

  @override
  String get datePickerHourSemanticsLabelZero => null;

  @override
  String get datePickerMinuteSemanticsLabelFew => r'$minute minúty';

  @override
  String get datePickerMinuteSemanticsLabelMany => r'$minute minúty';

  @override
  String get datePickerMinuteSemanticsLabelOne => '1 minúta';

  @override
  String get datePickerMinuteSemanticsLabelOther => r'$minute minút';

  @override
  String get datePickerMinuteSemanticsLabelTwo => null;

  @override
  String get datePickerMinuteSemanticsLabelZero => null;

  @override
  String get modalBarrierDismissLabel => 'Odmietnuť';

  @override
  String get pasteButtonLabel => 'Prilepiť';

  @override
  String get postMeridiemAbbreviation => 'PM';

  @override
  String get searchTextFieldPlaceholerLabel => 'Search';

  @override
  String get selectAllButtonLabel => 'Vybrať všetko';

  @override
  String get tabSemanticsLabelRaw => r'Karta $tabIndex z $tabCount';

  @override
  String get timerPickerHourLabelFew => 'hodiny';

  @override
  String get timerPickerHourLabelMany => 'hodiny';

  @override
  String get timerPickerHourLabelOne => 'hodina';

  @override
  String get timerPickerHourLabelOther => 'hodín';

  @override
  String get timerPickerHourLabelTwo => null;

  @override
  String get timerPickerHourLabelZero => null;

  @override
  String get timerPickerMinuteLabelFew => 'min';

  @override
  String get timerPickerMinuteLabelMany => 'min';

  @override
  String get timerPickerMinuteLabelOne => 'min';

  @override
  String get timerPickerMinuteLabelOther => 'min';

  @override
  String get timerPickerMinuteLabelTwo => null;

  @override
  String get timerPickerMinuteLabelZero => null;

  @override
  String get timerPickerSecondLabelFew => 's';

  @override
  String get timerPickerSecondLabelMany => 's';

  @override
  String get timerPickerSecondLabelOne => 's';

  @override
  String get timerPickerSecondLabelOther => 's';

  @override
  String get timerPickerSecondLabelTwo => null;

  @override
  String get timerPickerSecondLabelZero => null;

  @override
  String get todayLabel => 'Dnes';
}

/// The translations for Slovenian (`sl`).
class CupertinoLocalizationSl extends GlobalCupertinoLocalizations {
  /// Create an instance of the translation bundle for Slovenian.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationSl({
    String localeName = 'sl',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get alertDialogLabel => 'Opozorilo';

  @override
  String get anteMeridiemAbbreviation => 'DOP.';

  @override
  String get copyButtonLabel => 'Kopiraj';

  @override
  String get cutButtonLabel => 'Izreži';

  @override
  String get datePickerDateOrderString => 'dmy';

  @override
  String get datePickerDateTimeOrderString => 'date_time_dayPeriod';

  @override
  String get datePickerHourSemanticsLabelFew => r'$hour';

  @override
  String get datePickerHourSemanticsLabelMany => null;

  @override
  String get datePickerHourSemanticsLabelOne => r'$hour';

  @override
  String get datePickerHourSemanticsLabelOther => r'$hour';

  @override
  String get datePickerHourSemanticsLabelTwo => r'$hour';

  @override
  String get datePickerHourSemanticsLabelZero => null;

  @override
  String get datePickerMinuteSemanticsLabelFew => r'$minute minute';

  @override
  String get datePickerMinuteSemanticsLabelMany => null;

  @override
  String get datePickerMinuteSemanticsLabelOne => '1 minuta';

  @override
  String get datePickerMinuteSemanticsLabelOther => r'$minute minut';

  @override
  String get datePickerMinuteSemanticsLabelTwo => r'$minute minuti';

  @override
  String get datePickerMinuteSemanticsLabelZero => null;

  @override
  String get modalBarrierDismissLabel => 'Opusti';

  @override
  String get pasteButtonLabel => 'Prilepi';

  @override
  String get postMeridiemAbbreviation => 'POP.';

  @override
  String get searchTextFieldPlaceholerLabel => 'Search';

  @override
  String get selectAllButtonLabel => 'Izberi vse';

  @override
  String get tabSemanticsLabelRaw => r'Zavihek $tabIndex od $tabCount';

  @override
  String get timerPickerHourLabelFew => 'ure';

  @override
  String get timerPickerHourLabelMany => null;

  @override
  String get timerPickerHourLabelOne => 'ura';

  @override
  String get timerPickerHourLabelOther => 'ure';

  @override
  String get timerPickerHourLabelTwo => 'ure';

  @override
  String get timerPickerHourLabelZero => null;

  @override
  String get timerPickerMinuteLabelFew => 'min';

  @override
  String get timerPickerMinuteLabelMany => null;

  @override
  String get timerPickerMinuteLabelOne => 'min';

  @override
  String get timerPickerMinuteLabelOther => 'min';

  @override
  String get timerPickerMinuteLabelTwo => 'min';

  @override
  String get timerPickerMinuteLabelZero => null;

  @override
  String get timerPickerSecondLabelFew => 's';

  @override
  String get timerPickerSecondLabelMany => null;

  @override
  String get timerPickerSecondLabelOne => 's';

  @override
  String get timerPickerSecondLabelOther => 's';

  @override
  String get timerPickerSecondLabelTwo => 's';

  @override
  String get timerPickerSecondLabelZero => null;

  @override
  String get todayLabel => 'Danes';
}

/// The translations for Albanian (`sq`).
class CupertinoLocalizationSq extends GlobalCupertinoLocalizations {
  /// Create an instance of the translation bundle for Albanian.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationSq({
    String localeName = 'sq',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get alertDialogLabel => 'Sinjalizim';

  @override
  String get anteMeridiemAbbreviation => 'paradite';

  @override
  String get copyButtonLabel => 'Kopjo';

  @override
  String get cutButtonLabel => 'Prit';

  @override
  String get datePickerDateOrderString => 'dmy';

  @override
  String get datePickerDateTimeOrderString => 'date_time_dayPeriod';

  @override
  String get datePickerHourSemanticsLabelFew => null;

  @override
  String get datePickerHourSemanticsLabelMany => null;

  @override
  String get datePickerHourSemanticsLabelOne => r'$hour fiks';

  @override
  String get datePickerHourSemanticsLabelOther => r'$hour fiks';

  @override
  String get datePickerHourSemanticsLabelTwo => null;

  @override
  String get datePickerHourSemanticsLabelZero => null;

  @override
  String get datePickerMinuteSemanticsLabelFew => null;

  @override
  String get datePickerMinuteSemanticsLabelMany => null;

  @override
  String get datePickerMinuteSemanticsLabelOne => '1 minutë';

  @override
  String get datePickerMinuteSemanticsLabelOther => r'$minute minuta';

  @override
  String get datePickerMinuteSemanticsLabelTwo => null;

  @override
  String get datePickerMinuteSemanticsLabelZero => null;

  @override
  String get modalBarrierDismissLabel => 'Hiq';

  @override
  String get pasteButtonLabel => 'Ngjit';

  @override
  String get postMeridiemAbbreviation => 'pasdite';

  @override
  String get searchTextFieldPlaceholerLabel => 'Search';

  @override
  String get selectAllButtonLabel => 'Zgjidhi të gjitha';

  @override
  String get tabSemanticsLabelRaw => r'Skeda $tabIndex nga $tabCount';

  @override
  String get timerPickerHourLabelFew => null;

  @override
  String get timerPickerHourLabelMany => null;

  @override
  String get timerPickerHourLabelOne => 'orë';

  @override
  String get timerPickerHourLabelOther => 'orë';

  @override
  String get timerPickerHourLabelTwo => null;

  @override
  String get timerPickerHourLabelZero => null;

  @override
  String get timerPickerMinuteLabelFew => null;

  @override
  String get timerPickerMinuteLabelMany => null;

  @override
  String get timerPickerMinuteLabelOne => 'min.';

  @override
  String get timerPickerMinuteLabelOther => 'min.';

  @override
  String get timerPickerMinuteLabelTwo => null;

  @override
  String get timerPickerMinuteLabelZero => null;

  @override
  String get timerPickerSecondLabelFew => null;

  @override
  String get timerPickerSecondLabelMany => null;

  @override
  String get timerPickerSecondLabelOne => 'sek.';

  @override
  String get timerPickerSecondLabelOther => 'sek.';

  @override
  String get timerPickerSecondLabelTwo => null;

  @override
  String get timerPickerSecondLabelZero => null;

  @override
  String get todayLabel => 'Sot';
}

/// The translations for Serbian (`sr`).
class CupertinoLocalizationSr extends GlobalCupertinoLocalizations {
  /// Create an instance of the translation bundle for Serbian.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationSr({
    String localeName = 'sr',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get alertDialogLabel => 'Обавештење';

  @override
  String get anteMeridiemAbbreviation => 'пре подне';

  @override
  String get copyButtonLabel => 'Копирај';

  @override
  String get cutButtonLabel => 'Исеци';

  @override
  String get datePickerDateOrderString => 'dmy';

  @override
  String get datePickerDateTimeOrderString => 'date_time_dayPeriod';

  @override
  String get datePickerHourSemanticsLabelFew => r'$hour сата';

  @override
  String get datePickerHourSemanticsLabelMany => null;

  @override
  String get datePickerHourSemanticsLabelOne => r'$hour сат';

  @override
  String get datePickerHourSemanticsLabelOther => r'$hour сати';

  @override
  String get datePickerHourSemanticsLabelTwo => null;

  @override
  String get datePickerHourSemanticsLabelZero => null;

  @override
  String get datePickerMinuteSemanticsLabelFew => r'$minute минута';

  @override
  String get datePickerMinuteSemanticsLabelMany => null;

  @override
  String get datePickerMinuteSemanticsLabelOne => '1 минут';

  @override
  String get datePickerMinuteSemanticsLabelOther => r'$minute минута';

  @override
  String get datePickerMinuteSemanticsLabelTwo => null;

  @override
  String get datePickerMinuteSemanticsLabelZero => null;

  @override
  String get modalBarrierDismissLabel => 'Одбаци';

  @override
  String get pasteButtonLabel => 'Налепи';

  @override
  String get postMeridiemAbbreviation => 'по подне';

  @override
  String get searchTextFieldPlaceholerLabel => 'Search';

  @override
  String get selectAllButtonLabel => 'Изабери све';

  @override
  String get tabSemanticsLabelRaw => r'$tabIndex. картица од $tabCount';

  @override
  String get timerPickerHourLabelFew => 'сата';

  @override
  String get timerPickerHourLabelMany => null;

  @override
  String get timerPickerHourLabelOne => 'сат';

  @override
  String get timerPickerHourLabelOther => 'сати';

  @override
  String get timerPickerHourLabelTwo => null;

  @override
  String get timerPickerHourLabelZero => null;

  @override
  String get timerPickerMinuteLabelFew => 'мин';

  @override
  String get timerPickerMinuteLabelMany => null;

  @override
  String get timerPickerMinuteLabelOne => 'мин';

  @override
  String get timerPickerMinuteLabelOther => 'мин';

  @override
  String get timerPickerMinuteLabelTwo => null;

  @override
  String get timerPickerMinuteLabelZero => null;

  @override
  String get timerPickerSecondLabelFew => 'сек';

  @override
  String get timerPickerSecondLabelMany => null;

  @override
  String get timerPickerSecondLabelOne => 'сек';

  @override
  String get timerPickerSecondLabelOther => 'сек';

  @override
  String get timerPickerSecondLabelTwo => null;

  @override
  String get timerPickerSecondLabelZero => null;

  @override
  String get todayLabel => 'Данас';
}

/// The translations for Serbian, using the Cyrillic script (`sr_Cyrl`).
class CupertinoLocalizationSrCyrl extends CupertinoLocalizationSr {
  /// Create an instance of the translation bundle for Serbian, using the Cyrillic script.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationSrCyrl({
    String localeName = 'sr_Cyrl',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );
}

/// The translations for Serbian, using the Latin script (`sr_Latn`).
class CupertinoLocalizationSrLatn extends CupertinoLocalizationSr {
  /// Create an instance of the translation bundle for Serbian, using the Latin script.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationSrLatn({
    String localeName = 'sr_Latn',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get alertDialogLabel => 'Obaveštenje';

  @override
  String get anteMeridiemAbbreviation => 'pre podne';

  @override
  String get copyButtonLabel => 'Kopiraj';

  @override
  String get cutButtonLabel => 'Iseci';

  @override
  String get datePickerHourSemanticsLabelFew => r'$hour sata';

  @override
  String get datePickerHourSemanticsLabelOne => r'$hour sat';

  @override
  String get datePickerHourSemanticsLabelOther => r'$hour sati';

  @override
  String get datePickerMinuteSemanticsLabelFew => r'$minute minuta';

  @override
  String get datePickerMinuteSemanticsLabelOne => '1 minut';

  @override
  String get datePickerMinuteSemanticsLabelOther => r'$minute minuta';

  @override
  String get modalBarrierDismissLabel => 'Odbaci';

  @override
  String get pasteButtonLabel => 'Nalepi';

  @override
  String get postMeridiemAbbreviation => 'po podne';

  @override
  String get selectAllButtonLabel => 'Izaberi sve';

  @override
  String get tabSemanticsLabelRaw => r'$tabIndex. kartica od $tabCount';

  @override
  String get timerPickerHourLabelFew => 'sata';

  @override
  String get timerPickerHourLabelOne => 'sat';

  @override
  String get timerPickerHourLabelOther => 'sati';

  @override
  String get timerPickerMinuteLabelFew => 'min';

  @override
  String get timerPickerMinuteLabelOne => 'min';

  @override
  String get timerPickerMinuteLabelOther => 'min';

  @override
  String get timerPickerSecondLabelFew => 'sek';

  @override
  String get timerPickerSecondLabelOne => 'sek';

  @override
  String get timerPickerSecondLabelOther => 'sek';

  @override
  String get todayLabel => 'Danas';
}

/// The translations for Swedish (`sv`).
class CupertinoLocalizationSv extends GlobalCupertinoLocalizations {
  /// Create an instance of the translation bundle for Swedish.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationSv({
    String localeName = 'sv',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get alertDialogLabel => 'Varning';

  @override
  String get anteMeridiemAbbreviation => 'FM';

  @override
  String get copyButtonLabel => 'Kopiera';

  @override
  String get cutButtonLabel => 'Klipp ut';

  @override
  String get datePickerDateOrderString => 'dmy';

  @override
  String get datePickerDateTimeOrderString => 'date_time_dayPeriod';

  @override
  String get datePickerHourSemanticsLabelFew => null;

  @override
  String get datePickerHourSemanticsLabelMany => null;

  @override
  String get datePickerHourSemanticsLabelOne => r'Klockan $hour';

  @override
  String get datePickerHourSemanticsLabelOther => r'Klockan $hour';

  @override
  String get datePickerHourSemanticsLabelTwo => null;

  @override
  String get datePickerHourSemanticsLabelZero => null;

  @override
  String get datePickerMinuteSemanticsLabelFew => null;

  @override
  String get datePickerMinuteSemanticsLabelMany => null;

  @override
  String get datePickerMinuteSemanticsLabelOne => '1 minut';

  @override
  String get datePickerMinuteSemanticsLabelOther => r'$minute minuter';

  @override
  String get datePickerMinuteSemanticsLabelTwo => null;

  @override
  String get datePickerMinuteSemanticsLabelZero => null;

  @override
  String get modalBarrierDismissLabel => 'Stäng';

  @override
  String get pasteButtonLabel => 'Klistra in';

  @override
  String get postMeridiemAbbreviation => 'EM';

  @override
  String get searchTextFieldPlaceholerLabel => 'Search';

  @override
  String get selectAllButtonLabel => 'Markera alla';

  @override
  String get tabSemanticsLabelRaw => r'Flik $tabIndex av $tabCount';

  @override
  String get timerPickerHourLabelFew => null;

  @override
  String get timerPickerHourLabelMany => null;

  @override
  String get timerPickerHourLabelOne => 'timme';

  @override
  String get timerPickerHourLabelOther => 'timmar';

  @override
  String get timerPickerHourLabelTwo => null;

  @override
  String get timerPickerHourLabelZero => null;

  @override
  String get timerPickerMinuteLabelFew => null;

  @override
  String get timerPickerMinuteLabelMany => null;

  @override
  String get timerPickerMinuteLabelOne => 'min';

  @override
  String get timerPickerMinuteLabelOther => 'min';

  @override
  String get timerPickerMinuteLabelTwo => null;

  @override
  String get timerPickerMinuteLabelZero => null;

  @override
  String get timerPickerSecondLabelFew => null;

  @override
  String get timerPickerSecondLabelMany => null;

  @override
  String get timerPickerSecondLabelOne => 'sek';

  @override
  String get timerPickerSecondLabelOther => 'sek';

  @override
  String get timerPickerSecondLabelTwo => null;

  @override
  String get timerPickerSecondLabelZero => null;

  @override
  String get todayLabel => 'I dag';
}

/// The translations for Swahili (`sw`).
class CupertinoLocalizationSw extends GlobalCupertinoLocalizations {
  /// Create an instance of the translation bundle for Swahili.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationSw({
    String localeName = 'sw',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get alertDialogLabel => 'Arifa';

  @override
  String get anteMeridiemAbbreviation => 'AM';

  @override
  String get copyButtonLabel => 'Nakili';

  @override
  String get cutButtonLabel => 'Kata';

  @override
  String get datePickerDateOrderString => 'dmy';

  @override
  String get datePickerDateTimeOrderString => 'date_time_dayPeriod';

  @override
  String get datePickerHourSemanticsLabelFew => null;

  @override
  String get datePickerHourSemanticsLabelMany => null;

  @override
  String get datePickerHourSemanticsLabelOne => r'Saa $hour kamili';

  @override
  String get datePickerHourSemanticsLabelOther => r'Saa $hour kamili';

  @override
  String get datePickerHourSemanticsLabelTwo => null;

  @override
  String get datePickerHourSemanticsLabelZero => null;

  @override
  String get datePickerMinuteSemanticsLabelFew => null;

  @override
  String get datePickerMinuteSemanticsLabelMany => null;

  @override
  String get datePickerMinuteSemanticsLabelOne => 'Dakika 1';

  @override
  String get datePickerMinuteSemanticsLabelOther => r'Dakika $minute';

  @override
  String get datePickerMinuteSemanticsLabelTwo => null;

  @override
  String get datePickerMinuteSemanticsLabelZero => null;

  @override
  String get modalBarrierDismissLabel => 'Ondoa';

  @override
  String get pasteButtonLabel => 'Bandika';

  @override
  String get postMeridiemAbbreviation => 'PM';

  @override
  String get searchTextFieldPlaceholerLabel => 'Search';

  @override
  String get selectAllButtonLabel => 'Teua Zote';

  @override
  String get tabSemanticsLabelRaw => r'Kichupo cha $tabIndex kati ya $tabCount';

  @override
  String get timerPickerHourLabelFew => null;

  @override
  String get timerPickerHourLabelMany => null;

  @override
  String get timerPickerHourLabelOne => 'saa';

  @override
  String get timerPickerHourLabelOther => 'saa';

  @override
  String get timerPickerHourLabelTwo => null;

  @override
  String get timerPickerHourLabelZero => null;

  @override
  String get timerPickerMinuteLabelFew => null;

  @override
  String get timerPickerMinuteLabelMany => null;

  @override
  String get timerPickerMinuteLabelOne => 'dakika';

  @override
  String get timerPickerMinuteLabelOther => 'dakika';

  @override
  String get timerPickerMinuteLabelTwo => null;

  @override
  String get timerPickerMinuteLabelZero => null;

  @override
  String get timerPickerSecondLabelFew => null;

  @override
  String get timerPickerSecondLabelMany => null;

  @override
  String get timerPickerSecondLabelOne => 'sekunde';

  @override
  String get timerPickerSecondLabelOther => 'sekunde';

  @override
  String get timerPickerSecondLabelTwo => null;

  @override
  String get timerPickerSecondLabelZero => null;

  @override
  String get todayLabel => 'Leo';
}

/// The translations for Tamil (`ta`).
class CupertinoLocalizationTa extends GlobalCupertinoLocalizations {
  /// Create an instance of the translation bundle for Tamil.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationTa({
    String localeName = 'ta',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get alertDialogLabel => 'விழிப்பூட்டல்';

  @override
  String get anteMeridiemAbbreviation => 'AM';

  @override
  String get copyButtonLabel => 'நகலெடு';

  @override
  String get cutButtonLabel => 'வெட்டு';

  @override
  String get datePickerDateOrderString => 'dmy';

  @override
  String get datePickerDateTimeOrderString => 'date_time_dayPeriod';

  @override
  String get datePickerHourSemanticsLabelFew => null;

  @override
  String get datePickerHourSemanticsLabelMany => null;

  @override
  String get datePickerHourSemanticsLabelOne => r'$hour மணி';

  @override
  String get datePickerHourSemanticsLabelOther => r'$hour மணி';

  @override
  String get datePickerHourSemanticsLabelTwo => null;

  @override
  String get datePickerHourSemanticsLabelZero => null;

  @override
  String get datePickerMinuteSemanticsLabelFew => null;

  @override
  String get datePickerMinuteSemanticsLabelMany => null;

  @override
  String get datePickerMinuteSemanticsLabelOne => '1 நிமிடம்';

  @override
  String get datePickerMinuteSemanticsLabelOther => r'$minute நிமிடங்கள்';

  @override
  String get datePickerMinuteSemanticsLabelTwo => null;

  @override
  String get datePickerMinuteSemanticsLabelZero => null;

  @override
  String get modalBarrierDismissLabel => 'நிராகரிக்கும்';

  @override
  String get pasteButtonLabel => 'ஒட்டு';

  @override
  String get postMeridiemAbbreviation => 'PM';

  @override
  String get searchTextFieldPlaceholerLabel => 'Search';

  @override
  String get selectAllButtonLabel => 'எல்லாம் தேர்ந்தெடு';

  @override
  String get tabSemanticsLabelRaw => r'தாவல் $tabIndex / $tabCount';

  @override
  String get timerPickerHourLabelFew => null;

  @override
  String get timerPickerHourLabelMany => null;

  @override
  String get timerPickerHourLabelOne => 'மணிநேரம்';

  @override
  String get timerPickerHourLabelOther => 'மணிநேரம்';

  @override
  String get timerPickerHourLabelTwo => null;

  @override
  String get timerPickerHourLabelZero => null;

  @override
  String get timerPickerMinuteLabelFew => null;

  @override
  String get timerPickerMinuteLabelMany => null;

  @override
  String get timerPickerMinuteLabelOne => 'நிமி.';

  @override
  String get timerPickerMinuteLabelOther => 'நிமி.';

  @override
  String get timerPickerMinuteLabelTwo => null;

  @override
  String get timerPickerMinuteLabelZero => null;

  @override
  String get timerPickerSecondLabelFew => null;

  @override
  String get timerPickerSecondLabelMany => null;

  @override
  String get timerPickerSecondLabelOne => 'வி.';

  @override
  String get timerPickerSecondLabelOther => 'வி.';

  @override
  String get timerPickerSecondLabelTwo => null;

  @override
  String get timerPickerSecondLabelZero => null;

  @override
  String get todayLabel => 'இன்று';
}

/// The translations for Telugu (`te`).
class CupertinoLocalizationTe extends GlobalCupertinoLocalizations {
  /// Create an instance of the translation bundle for Telugu.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationTe({
    String localeName = 'te',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get alertDialogLabel => 'అలర్ట్';

  @override
  String get anteMeridiemAbbreviation => 'AM';

  @override
  String get copyButtonLabel => 'కాపీ చేయి';

  @override
  String get cutButtonLabel => 'కత్తిరించు';

  @override
  String get datePickerDateOrderString => 'mdy';

  @override
  String get datePickerDateTimeOrderString => 'date_time_dayPeriod';

  @override
  String get datePickerHourSemanticsLabelFew => null;

  @override
  String get datePickerHourSemanticsLabelMany => null;

  @override
  String get datePickerHourSemanticsLabelOne => r'$hour అవుతుంది';

  @override
  String get datePickerHourSemanticsLabelOther => r'$hour అవుతుంది';

  @override
  String get datePickerHourSemanticsLabelTwo => null;

  @override
  String get datePickerHourSemanticsLabelZero => null;

  @override
  String get datePickerMinuteSemanticsLabelFew => null;

  @override
  String get datePickerMinuteSemanticsLabelMany => null;

  @override
  String get datePickerMinuteSemanticsLabelOne => '1 నిమిషం';

  @override
  String get datePickerMinuteSemanticsLabelOther => r'$minute నిమిషాలు';

  @override
  String get datePickerMinuteSemanticsLabelTwo => null;

  @override
  String get datePickerMinuteSemanticsLabelZero => null;

  @override
  String get modalBarrierDismissLabel => 'విస్మరించు';

  @override
  String get pasteButtonLabel => 'అతికించు';

  @override
  String get postMeridiemAbbreviation => 'PM';

  @override
  String get searchTextFieldPlaceholerLabel => 'Search';

  @override
  String get selectAllButtonLabel => 'అన్నింటినీ ఎంచుకోండి';

  @override
  String get tabSemanticsLabelRaw => r'$tabCountలో $tabIndexవ ట్యాబ్';

  @override
  String get timerPickerHourLabelFew => null;

  @override
  String get timerPickerHourLabelMany => null;

  @override
  String get timerPickerHourLabelOne => 'గంట';

  @override
  String get timerPickerHourLabelOther => 'గంటలు';

  @override
  String get timerPickerHourLabelTwo => null;

  @override
  String get timerPickerHourLabelZero => null;

  @override
  String get timerPickerMinuteLabelFew => null;

  @override
  String get timerPickerMinuteLabelMany => null;

  @override
  String get timerPickerMinuteLabelOne => 'నిమి.';

  @override
  String get timerPickerMinuteLabelOther => 'నిమి.';

  @override
  String get timerPickerMinuteLabelTwo => null;

  @override
  String get timerPickerMinuteLabelZero => null;

  @override
  String get timerPickerSecondLabelFew => null;

  @override
  String get timerPickerSecondLabelMany => null;

  @override
  String get timerPickerSecondLabelOne => 'సెకన్లు.';

  @override
  String get timerPickerSecondLabelOther => 'సెకన్లు.';

  @override
  String get timerPickerSecondLabelTwo => null;

  @override
  String get timerPickerSecondLabelZero => null;

  @override
  String get todayLabel => 'ఈరోజు';
}

/// The translations for Thai (`th`).
class CupertinoLocalizationTh extends GlobalCupertinoLocalizations {
  /// Create an instance of the translation bundle for Thai.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationTh({
    String localeName = 'th',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get alertDialogLabel => 'การแจ้งเตือน';

  @override
  String get anteMeridiemAbbreviation => 'AM';

  @override
  String get copyButtonLabel => 'คัดลอก';

  @override
  String get cutButtonLabel => 'ตัด';

  @override
  String get datePickerDateOrderString => 'dmy';

  @override
  String get datePickerDateTimeOrderString => 'date_time_dayPeriod';

  @override
  String get datePickerHourSemanticsLabelFew => null;

  @override
  String get datePickerHourSemanticsLabelMany => null;

  @override
  String get datePickerHourSemanticsLabelOne => r'$hour นาฬิกา';

  @override
  String get datePickerHourSemanticsLabelOther => r'$hour นาฬิกา';

  @override
  String get datePickerHourSemanticsLabelTwo => null;

  @override
  String get datePickerHourSemanticsLabelZero => null;

  @override
  String get datePickerMinuteSemanticsLabelFew => null;

  @override
  String get datePickerMinuteSemanticsLabelMany => null;

  @override
  String get datePickerMinuteSemanticsLabelOne => '1 นาที';

  @override
  String get datePickerMinuteSemanticsLabelOther => r'$minute นาที';

  @override
  String get datePickerMinuteSemanticsLabelTwo => null;

  @override
  String get datePickerMinuteSemanticsLabelZero => null;

  @override
  String get modalBarrierDismissLabel => 'ปิด';

  @override
  String get pasteButtonLabel => 'วาง';

  @override
  String get postMeridiemAbbreviation => 'PM';

  @override
  String get searchTextFieldPlaceholerLabel => 'Search';

  @override
  String get selectAllButtonLabel => 'เลือกทั้งหมด';

  @override
  String get tabSemanticsLabelRaw => r'แท็บที่ $tabIndex จาก $tabCount';

  @override
  String get timerPickerHourLabelFew => null;

  @override
  String get timerPickerHourLabelMany => null;

  @override
  String get timerPickerHourLabelOne => 'ชั่วโมง';

  @override
  String get timerPickerHourLabelOther => 'ชั่วโมง';

  @override
  String get timerPickerHourLabelTwo => null;

  @override
  String get timerPickerHourLabelZero => null;

  @override
  String get timerPickerMinuteLabelFew => null;

  @override
  String get timerPickerMinuteLabelMany => null;

  @override
  String get timerPickerMinuteLabelOne => 'นาที';

  @override
  String get timerPickerMinuteLabelOther => 'นาที';

  @override
  String get timerPickerMinuteLabelTwo => null;

  @override
  String get timerPickerMinuteLabelZero => null;

  @override
  String get timerPickerSecondLabelFew => null;

  @override
  String get timerPickerSecondLabelMany => null;

  @override
  String get timerPickerSecondLabelOne => 'วินาที';

  @override
  String get timerPickerSecondLabelOther => 'วินาที';

  @override
  String get timerPickerSecondLabelTwo => null;

  @override
  String get timerPickerSecondLabelZero => null;

  @override
  String get todayLabel => 'วันนี้';
}

/// The translations for Tagalog (`tl`).
class CupertinoLocalizationTl extends GlobalCupertinoLocalizations {
  /// Create an instance of the translation bundle for Tagalog.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationTl({
    String localeName = 'tl',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get alertDialogLabel => 'Alerto';

  @override
  String get anteMeridiemAbbreviation => 'AM';

  @override
  String get copyButtonLabel => 'Kopyahin';

  @override
  String get cutButtonLabel => 'I-cut';

  @override
  String get datePickerDateOrderString => 'mdy';

  @override
  String get datePickerDateTimeOrderString => 'date_time_dayPeriod';

  @override
  String get datePickerHourSemanticsLabelFew => null;

  @override
  String get datePickerHourSemanticsLabelMany => null;

  @override
  String get datePickerHourSemanticsLabelOne => r'Ala $hour';

  @override
  String get datePickerHourSemanticsLabelOther => r'Alas $hour';

  @override
  String get datePickerHourSemanticsLabelTwo => null;

  @override
  String get datePickerHourSemanticsLabelZero => null;

  @override
  String get datePickerMinuteSemanticsLabelFew => null;

  @override
  String get datePickerMinuteSemanticsLabelMany => null;

  @override
  String get datePickerMinuteSemanticsLabelOne => '1 minuto';

  @override
  String get datePickerMinuteSemanticsLabelOther => r'$minute na minuto';

  @override
  String get datePickerMinuteSemanticsLabelTwo => null;

  @override
  String get datePickerMinuteSemanticsLabelZero => null;

  @override
  String get modalBarrierDismissLabel => 'I-dismiss';

  @override
  String get pasteButtonLabel => 'I-paste';

  @override
  String get postMeridiemAbbreviation => 'PM';

  @override
  String get searchTextFieldPlaceholerLabel => 'Search';

  @override
  String get selectAllButtonLabel => 'Piliin Lahat';

  @override
  String get tabSemanticsLabelRaw => r'Tab $tabIndex ng $tabCount';

  @override
  String get timerPickerHourLabelFew => null;

  @override
  String get timerPickerHourLabelMany => null;

  @override
  String get timerPickerHourLabelOne => 'oras';

  @override
  String get timerPickerHourLabelOther => 'na oras';

  @override
  String get timerPickerHourLabelTwo => null;

  @override
  String get timerPickerHourLabelZero => null;

  @override
  String get timerPickerMinuteLabelFew => null;

  @override
  String get timerPickerMinuteLabelMany => null;

  @override
  String get timerPickerMinuteLabelOne => 'min.';

  @override
  String get timerPickerMinuteLabelOther => 'na min.';

  @override
  String get timerPickerMinuteLabelTwo => null;

  @override
  String get timerPickerMinuteLabelZero => null;

  @override
  String get timerPickerSecondLabelFew => null;

  @override
  String get timerPickerSecondLabelMany => null;

  @override
  String get timerPickerSecondLabelOne => 'seg.';

  @override
  String get timerPickerSecondLabelOther => 'na seg.';

  @override
  String get timerPickerSecondLabelTwo => null;

  @override
  String get timerPickerSecondLabelZero => null;

  @override
  String get todayLabel => 'Ngayon';
}

/// The translations for Turkish (`tr`).
class CupertinoLocalizationTr extends GlobalCupertinoLocalizations {
  /// Create an instance of the translation bundle for Turkish.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationTr({
    String localeName = 'tr',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get alertDialogLabel => 'Uyarı';

  @override
  String get anteMeridiemAbbreviation => 'ÖÖ';

  @override
  String get copyButtonLabel => 'Kopyala';

  @override
  String get cutButtonLabel => 'Kes';

  @override
  String get datePickerDateOrderString => 'dmy';

  @override
  String get datePickerDateTimeOrderString => 'date_time_dayPeriod';

  @override
  String get datePickerHourSemanticsLabelFew => null;

  @override
  String get datePickerHourSemanticsLabelMany => null;

  @override
  String get datePickerHourSemanticsLabelOne => r'Saat $hour';

  @override
  String get datePickerHourSemanticsLabelOther => r'Saat $hour';

  @override
  String get datePickerHourSemanticsLabelTwo => null;

  @override
  String get datePickerHourSemanticsLabelZero => null;

  @override
  String get datePickerMinuteSemanticsLabelFew => null;

  @override
  String get datePickerMinuteSemanticsLabelMany => null;

  @override
  String get datePickerMinuteSemanticsLabelOne => '1 dakika';

  @override
  String get datePickerMinuteSemanticsLabelOther => r'$minute dakika';

  @override
  String get datePickerMinuteSemanticsLabelTwo => null;

  @override
  String get datePickerMinuteSemanticsLabelZero => null;

  @override
  String get modalBarrierDismissLabel => 'Kapat';

  @override
  String get pasteButtonLabel => 'Yapıştır';

  @override
  String get postMeridiemAbbreviation => 'ÖS';

  @override
  String get searchTextFieldPlaceholerLabel => 'Search';

  @override
  String get selectAllButtonLabel => 'Tümünü Seç';

  @override
  String get tabSemanticsLabelRaw => r'Sekme $tabIndex/$tabCount';

  @override
  String get timerPickerHourLabelFew => null;

  @override
  String get timerPickerHourLabelMany => null;

  @override
  String get timerPickerHourLabelOne => 'saat';

  @override
  String get timerPickerHourLabelOther => 'saat';

  @override
  String get timerPickerHourLabelTwo => null;

  @override
  String get timerPickerHourLabelZero => null;

  @override
  String get timerPickerMinuteLabelFew => null;

  @override
  String get timerPickerMinuteLabelMany => null;

  @override
  String get timerPickerMinuteLabelOne => 'dk.';

  @override
  String get timerPickerMinuteLabelOther => 'dk.';

  @override
  String get timerPickerMinuteLabelTwo => null;

  @override
  String get timerPickerMinuteLabelZero => null;

  @override
  String get timerPickerSecondLabelFew => null;

  @override
  String get timerPickerSecondLabelMany => null;

  @override
  String get timerPickerSecondLabelOne => 'sn.';

  @override
  String get timerPickerSecondLabelOther => 'sn.';

  @override
  String get timerPickerSecondLabelTwo => null;

  @override
  String get timerPickerSecondLabelZero => null;

  @override
  String get todayLabel => 'Bugün';
}

/// The translations for Ukrainian (`uk`).
class CupertinoLocalizationUk extends GlobalCupertinoLocalizations {
  /// Create an instance of the translation bundle for Ukrainian.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationUk({
    String localeName = 'uk',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get alertDialogLabel => 'Сповіщення';

  @override
  String get anteMeridiemAbbreviation => 'дп';

  @override
  String get copyButtonLabel => 'Копіювати';

  @override
  String get cutButtonLabel => 'Вирізати';

  @override
  String get datePickerDateOrderString => 'mdy';

  @override
  String get datePickerDateTimeOrderString => 'date_time_dayPeriod';

  @override
  String get datePickerHourSemanticsLabelFew => r'$hour години';

  @override
  String get datePickerHourSemanticsLabelMany => r'$hour годин';

  @override
  String get datePickerHourSemanticsLabelOne => r'$hour година';

  @override
  String get datePickerHourSemanticsLabelOther => r'$hour години';

  @override
  String get datePickerHourSemanticsLabelTwo => null;

  @override
  String get datePickerHourSemanticsLabelZero => null;

  @override
  String get datePickerMinuteSemanticsLabelFew => r'$minute хвилини';

  @override
  String get datePickerMinuteSemanticsLabelMany => r'$minute хвилин';

  @override
  String get datePickerMinuteSemanticsLabelOne => '1 хвилина';

  @override
  String get datePickerMinuteSemanticsLabelOther => r'$minute хвилини';

  @override
  String get datePickerMinuteSemanticsLabelTwo => null;

  @override
  String get datePickerMinuteSemanticsLabelZero => null;

  @override
  String get modalBarrierDismissLabel => 'Закрити';

  @override
  String get pasteButtonLabel => 'Вставити';

  @override
  String get postMeridiemAbbreviation => 'пп';

  @override
  String get searchTextFieldPlaceholerLabel => 'Search';

  @override
  String get selectAllButtonLabel => 'Вибрати все';

  @override
  String get tabSemanticsLabelRaw => r'Вкладка $tabIndex з $tabCount';

  @override
  String get timerPickerHourLabelFew => 'години';

  @override
  String get timerPickerHourLabelMany => 'годин';

  @override
  String get timerPickerHourLabelOne => 'година';

  @override
  String get timerPickerHourLabelOther => 'години';

  @override
  String get timerPickerHourLabelTwo => null;

  @override
  String get timerPickerHourLabelZero => null;

  @override
  String get timerPickerMinuteLabelFew => 'хв';

  @override
  String get timerPickerMinuteLabelMany => 'хв';

  @override
  String get timerPickerMinuteLabelOne => 'хв';

  @override
  String get timerPickerMinuteLabelOther => 'хв';

  @override
  String get timerPickerMinuteLabelTwo => null;

  @override
  String get timerPickerMinuteLabelZero => null;

  @override
  String get timerPickerSecondLabelFew => 'с';

  @override
  String get timerPickerSecondLabelMany => 'с';

  @override
  String get timerPickerSecondLabelOne => 'с';

  @override
  String get timerPickerSecondLabelOther => 'с';

  @override
  String get timerPickerSecondLabelTwo => null;

  @override
  String get timerPickerSecondLabelZero => null;

  @override
  String get todayLabel => 'Сьогодні';
}

/// The translations for Urdu (`ur`).
class CupertinoLocalizationUr extends GlobalCupertinoLocalizations {
  /// Create an instance of the translation bundle for Urdu.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationUr({
    String localeName = 'ur',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get alertDialogLabel => 'الرٹ';

  @override
  String get anteMeridiemAbbreviation => 'AM';

  @override
  String get copyButtonLabel => 'کاپی کریں';

  @override
  String get cutButtonLabel => 'کٹ کریں';

  @override
  String get datePickerDateOrderString => 'dmy';

  @override
  String get datePickerDateTimeOrderString => 'date_time_dayPeriod';

  @override
  String get datePickerHourSemanticsLabelFew => null;

  @override
  String get datePickerHourSemanticsLabelMany => null;

  @override
  String get datePickerHourSemanticsLabelOne => r'$hour بجے';

  @override
  String get datePickerHourSemanticsLabelOther => r'$hour بجے';

  @override
  String get datePickerHourSemanticsLabelTwo => null;

  @override
  String get datePickerHourSemanticsLabelZero => null;

  @override
  String get datePickerMinuteSemanticsLabelFew => null;

  @override
  String get datePickerMinuteSemanticsLabelMany => null;

  @override
  String get datePickerMinuteSemanticsLabelOne => '1 منٹ';

  @override
  String get datePickerMinuteSemanticsLabelOther => r'$minute منٹس';

  @override
  String get datePickerMinuteSemanticsLabelTwo => null;

  @override
  String get datePickerMinuteSemanticsLabelZero => null;

  @override
  String get modalBarrierDismissLabel => 'برخاست کریں';

  @override
  String get pasteButtonLabel => 'پیسٹ کریں';

  @override
  String get postMeridiemAbbreviation => 'PM';

  @override
  String get searchTextFieldPlaceholerLabel => 'Search';

  @override
  String get selectAllButtonLabel => 'سبھی منتخب کریں';

  @override
  String get tabSemanticsLabelRaw => r'$tabCount میں سے $tabIndex ٹیب';

  @override
  String get timerPickerHourLabelFew => null;

  @override
  String get timerPickerHourLabelMany => null;

  @override
  String get timerPickerHourLabelOne => 'گھنٹہ';

  @override
  String get timerPickerHourLabelOther => 'گھنٹے';

  @override
  String get timerPickerHourLabelTwo => null;

  @override
  String get timerPickerHourLabelZero => null;

  @override
  String get timerPickerMinuteLabelFew => null;

  @override
  String get timerPickerMinuteLabelMany => null;

  @override
  String get timerPickerMinuteLabelOne => 'منٹ۔';

  @override
  String get timerPickerMinuteLabelOther => 'منٹ۔';

  @override
  String get timerPickerMinuteLabelTwo => null;

  @override
  String get timerPickerMinuteLabelZero => null;

  @override
  String get timerPickerSecondLabelFew => null;

  @override
  String get timerPickerSecondLabelMany => null;

  @override
  String get timerPickerSecondLabelOne => 'سیکنڈ۔';

  @override
  String get timerPickerSecondLabelOther => 'سیکنڈ۔';

  @override
  String get timerPickerSecondLabelTwo => null;

  @override
  String get timerPickerSecondLabelZero => null;

  @override
  String get todayLabel => 'آج';
}

/// The translations for Uzbek (`uz`).
class CupertinoLocalizationUz extends GlobalCupertinoLocalizations {
  /// Create an instance of the translation bundle for Uzbek.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationUz({
    String localeName = 'uz',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get alertDialogLabel => 'Ogohlantirish';

  @override
  String get anteMeridiemAbbreviation => 'AM';

  @override
  String get copyButtonLabel => 'Nusxa olish';

  @override
  String get cutButtonLabel => 'Kesib olish';

  @override
  String get datePickerDateOrderString => 'mdy';

  @override
  String get datePickerDateTimeOrderString => 'date_time_dayPeriod';

  @override
  String get datePickerHourSemanticsLabelFew => null;

  @override
  String get datePickerHourSemanticsLabelMany => null;

  @override
  String get datePickerHourSemanticsLabelOne => r'$hour soat';

  @override
  String get datePickerHourSemanticsLabelOther => r'$hour soat';

  @override
  String get datePickerHourSemanticsLabelTwo => null;

  @override
  String get datePickerHourSemanticsLabelZero => null;

  @override
  String get datePickerMinuteSemanticsLabelFew => null;

  @override
  String get datePickerMinuteSemanticsLabelMany => null;

  @override
  String get datePickerMinuteSemanticsLabelOne => '1 daqiqa';

  @override
  String get datePickerMinuteSemanticsLabelOther => r'$minute daqiqa';

  @override
  String get datePickerMinuteSemanticsLabelTwo => null;

  @override
  String get datePickerMinuteSemanticsLabelZero => null;

  @override
  String get modalBarrierDismissLabel => 'Yopish';

  @override
  String get pasteButtonLabel => 'Joylash';

  @override
  String get postMeridiemAbbreviation => 'PM';

  @override
  String get searchTextFieldPlaceholerLabel => 'Search';

  @override
  String get selectAllButtonLabel => 'Barchasini tanlash';

  @override
  String get tabSemanticsLabelRaw => r'$tabCount varaqdan $tabIndex';

  @override
  String get timerPickerHourLabelFew => null;

  @override
  String get timerPickerHourLabelMany => null;

  @override
  String get timerPickerHourLabelOne => 'soat';

  @override
  String get timerPickerHourLabelOther => 'soat';

  @override
  String get timerPickerHourLabelTwo => null;

  @override
  String get timerPickerHourLabelZero => null;

  @override
  String get timerPickerMinuteLabelFew => null;

  @override
  String get timerPickerMinuteLabelMany => null;

  @override
  String get timerPickerMinuteLabelOne => 'daqiqa';

  @override
  String get timerPickerMinuteLabelOther => 'daqiqa';

  @override
  String get timerPickerMinuteLabelTwo => null;

  @override
  String get timerPickerMinuteLabelZero => null;

  @override
  String get timerPickerSecondLabelFew => null;

  @override
  String get timerPickerSecondLabelMany => null;

  @override
  String get timerPickerSecondLabelOne => 'soniya';

  @override
  String get timerPickerSecondLabelOther => 'soniya';

  @override
  String get timerPickerSecondLabelTwo => null;

  @override
  String get timerPickerSecondLabelZero => null;

  @override
  String get todayLabel => 'Bugun';
}

/// The translations for Vietnamese (`vi`).
class CupertinoLocalizationVi extends GlobalCupertinoLocalizations {
  /// Create an instance of the translation bundle for Vietnamese.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationVi({
    String localeName = 'vi',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get alertDialogLabel => 'Thông báo';

  @override
  String get anteMeridiemAbbreviation => 'SÁNG';

  @override
  String get copyButtonLabel => 'Sao chép';

  @override
  String get cutButtonLabel => 'Cắt';

  @override
  String get datePickerDateOrderString => 'dmy';

  @override
  String get datePickerDateTimeOrderString => 'date_time_dayPeriod';

  @override
  String get datePickerHourSemanticsLabelFew => null;

  @override
  String get datePickerHourSemanticsLabelMany => null;

  @override
  String get datePickerHourSemanticsLabelOne => r'$hour giờ';

  @override
  String get datePickerHourSemanticsLabelOther => r'$hour giờ';

  @override
  String get datePickerHourSemanticsLabelTwo => null;

  @override
  String get datePickerHourSemanticsLabelZero => null;

  @override
  String get datePickerMinuteSemanticsLabelFew => null;

  @override
  String get datePickerMinuteSemanticsLabelMany => null;

  @override
  String get datePickerMinuteSemanticsLabelOne => '1 phút';

  @override
  String get datePickerMinuteSemanticsLabelOther => r'$minute phút';

  @override
  String get datePickerMinuteSemanticsLabelTwo => null;

  @override
  String get datePickerMinuteSemanticsLabelZero => null;

  @override
  String get modalBarrierDismissLabel => 'Bỏ qua';

  @override
  String get pasteButtonLabel => 'Dán';

  @override
  String get postMeridiemAbbreviation => 'CHIỀU';

  @override
  String get searchTextFieldPlaceholerLabel => 'Search';

  @override
  String get selectAllButtonLabel => 'Chọn tất cả';

  @override
  String get tabSemanticsLabelRaw => r'Thẻ $tabIndex/$tabCount';

  @override
  String get timerPickerHourLabelFew => null;

  @override
  String get timerPickerHourLabelMany => null;

  @override
  String get timerPickerHourLabelOne => 'giờ';

  @override
  String get timerPickerHourLabelOther => 'giờ';

  @override
  String get timerPickerHourLabelTwo => null;

  @override
  String get timerPickerHourLabelZero => null;

  @override
  String get timerPickerMinuteLabelFew => null;

  @override
  String get timerPickerMinuteLabelMany => null;

  @override
  String get timerPickerMinuteLabelOne => 'phút';

  @override
  String get timerPickerMinuteLabelOther => 'phút';

  @override
  String get timerPickerMinuteLabelTwo => null;

  @override
  String get timerPickerMinuteLabelZero => null;

  @override
  String get timerPickerSecondLabelFew => null;

  @override
  String get timerPickerSecondLabelMany => null;

  @override
  String get timerPickerSecondLabelOne => 'giây';

  @override
  String get timerPickerSecondLabelOther => 'giây';

  @override
  String get timerPickerSecondLabelTwo => null;

  @override
  String get timerPickerSecondLabelZero => null;

  @override
  String get todayLabel => 'Hôm nay';
}

/// The translations for Chinese (`zh`).
class CupertinoLocalizationZh extends GlobalCupertinoLocalizations {
  /// Create an instance of the translation bundle for Chinese.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationZh({
    String localeName = 'zh',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get alertDialogLabel => '提醒';

  @override
  String get anteMeridiemAbbreviation => '上午';

  @override
  String get copyButtonLabel => '复制';

  @override
  String get cutButtonLabel => '剪切';

  @override
  String get datePickerDateOrderString => 'ymd';

  @override
  String get datePickerDateTimeOrderString => 'date_time_dayPeriod';

  @override
  String get datePickerHourSemanticsLabelFew => null;

  @override
  String get datePickerHourSemanticsLabelMany => null;

  @override
  String get datePickerHourSemanticsLabelOne => r'$hour 点';

  @override
  String get datePickerHourSemanticsLabelOther => r'$hour 点';

  @override
  String get datePickerHourSemanticsLabelTwo => null;

  @override
  String get datePickerHourSemanticsLabelZero => null;

  @override
  String get datePickerMinuteSemanticsLabelFew => null;

  @override
  String get datePickerMinuteSemanticsLabelMany => null;

  @override
  String get datePickerMinuteSemanticsLabelOne => '1 分钟';

  @override
  String get datePickerMinuteSemanticsLabelOther => r'$minute 分钟';

  @override
  String get datePickerMinuteSemanticsLabelTwo => null;

  @override
  String get datePickerMinuteSemanticsLabelZero => null;

  @override
  String get modalBarrierDismissLabel => '关闭';

  @override
  String get pasteButtonLabel => '粘贴';

  @override
  String get postMeridiemAbbreviation => '下午';

  @override
  String get searchTextFieldPlaceholerLabel => 'Search';

  @override
  String get selectAllButtonLabel => '全选';

  @override
  String get tabSemanticsLabelRaw => r'第 $tabIndex 个标签，共 $tabCount 个';

  @override
  String get timerPickerHourLabelFew => null;

  @override
  String get timerPickerHourLabelMany => null;

  @override
  String get timerPickerHourLabelOne => '小时';

  @override
  String get timerPickerHourLabelOther => '小时';

  @override
  String get timerPickerHourLabelTwo => null;

  @override
  String get timerPickerHourLabelZero => null;

  @override
  String get timerPickerMinuteLabelFew => null;

  @override
  String get timerPickerMinuteLabelMany => null;

  @override
  String get timerPickerMinuteLabelOne => '分钟';

  @override
  String get timerPickerMinuteLabelOther => '分钟';

  @override
  String get timerPickerMinuteLabelTwo => null;

  @override
  String get timerPickerMinuteLabelZero => null;

  @override
  String get timerPickerSecondLabelFew => null;

  @override
  String get timerPickerSecondLabelMany => null;

  @override
  String get timerPickerSecondLabelOne => '秒';

  @override
  String get timerPickerSecondLabelOther => '秒';

  @override
  String get timerPickerSecondLabelTwo => null;

  @override
  String get timerPickerSecondLabelZero => null;

  @override
  String get todayLabel => '今天';
}

/// The translations for Chinese, using the Han script (`zh_Hans`).
class CupertinoLocalizationZhHans extends CupertinoLocalizationZh {
  /// Create an instance of the translation bundle for Chinese, using the Han script.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationZhHans({
    String localeName = 'zh_Hans',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );
}

/// The translations for Chinese, using the Han script (`zh_Hant`).
class CupertinoLocalizationZhHant extends CupertinoLocalizationZh {
  /// Create an instance of the translation bundle for Chinese, using the Han script.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationZhHant({
    String localeName = 'zh_Hant',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get alertDialogLabel => '通知';

  @override
  String get copyButtonLabel => '複製';

  @override
  String get cutButtonLabel => '剪下';

  @override
  String get datePickerDateTimeOrderString => 'date_dayPeriod_time';

  @override
  String get datePickerHourSemanticsLabelOne => r'$hour 點';

  @override
  String get datePickerHourSemanticsLabelOther => r'$hour 點';

  @override
  String get datePickerMinuteSemanticsLabelOne => '1 分鐘';

  @override
  String get datePickerMinuteSemanticsLabelOther => r'$minute 分鐘';

  @override
  String get modalBarrierDismissLabel => '拒絕';

  @override
  String get pasteButtonLabel => '貼上';

  @override
  String get selectAllButtonLabel => '全選';

  @override
  String get tabSemanticsLabelRaw => r'$tabCount 個分頁中嘅第 $tabIndex 個';

  @override
  String get timerPickerHourLabelOne => '小時';

  @override
  String get timerPickerHourLabelOther => '小時';

  @override
  String get timerPickerMinuteLabelOne => '分鐘';

  @override
  String get timerPickerMinuteLabelOther => '分鐘';
}

/// The translations for Chinese, as used in Hong Kong, using the Han script (`zh_Hant_HK`).
class CupertinoLocalizationZhHantHk extends CupertinoLocalizationZhHant {
  /// Create an instance of the translation bundle for Chinese, as used in Hong Kong, using the Han script.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationZhHantHk({
    String localeName = 'zh_Hant_HK',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );
}

/// The translations for Chinese, as used in Taiwan, using the Han script (`zh_Hant_TW`).
class CupertinoLocalizationZhHantTw extends CupertinoLocalizationZhHant {
  /// Create an instance of the translation bundle for Chinese, as used in Taiwan, using the Han script.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationZhHantTw({
    String localeName = 'zh_Hant_TW',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get tabSemanticsLabelRaw => r'第 $tabIndex 個分頁標籤，共 $tabCount 個';

  @override
  String get datePickerMinuteSemanticsLabelOne => '1 分';

  @override
  String get datePickerMinuteSemanticsLabelOther => r'$minute 分';

  @override
  String get datePickerDateTimeOrderString => 'date_time_dayPeriod';

  @override
  String get alertDialogLabel => '快訊';

  @override
  String get timerPickerMinuteLabelOne => '分';

  @override
  String get timerPickerMinuteLabelOther => '分';

  @override
  String get modalBarrierDismissLabel => '關閉';
}

/// The translations for Zulu (`zu`).
class CupertinoLocalizationZu extends GlobalCupertinoLocalizations {
  /// Create an instance of the translation bundle for Zulu.
  ///
  /// For details on the meaning of the arguments, see [GlobalCupertinoLocalizations].
  const CupertinoLocalizationZu({
    String localeName = 'zu',
    @required intl.DateFormat fullYearFormat,
    @required intl.DateFormat dayFormat,
    @required intl.DateFormat mediumDateFormat,
    @required intl.DateFormat singleDigitHourFormat,
    @required intl.DateFormat singleDigitMinuteFormat,
    @required intl.DateFormat doubleDigitMinuteFormat,
    @required intl.DateFormat singleDigitSecondFormat,
    @required intl.NumberFormat decimalFormat,
  }) : super(
    localeName: localeName,
    fullYearFormat: fullYearFormat,
    dayFormat: dayFormat,
    mediumDateFormat: mediumDateFormat,
    singleDigitHourFormat: singleDigitHourFormat,
    singleDigitMinuteFormat: singleDigitMinuteFormat,
    doubleDigitMinuteFormat: doubleDigitMinuteFormat,
    singleDigitSecondFormat: singleDigitSecondFormat,
    decimalFormat: decimalFormat,
  );

  @override
  String get alertDialogLabel => 'Isexwayiso';

  @override
  String get anteMeridiemAbbreviation => 'AM';

  @override
  String get copyButtonLabel => 'Kopisha';

  @override
  String get cutButtonLabel => 'Sika';

  @override
  String get datePickerDateOrderString => 'mdy';

  @override
  String get datePickerDateTimeOrderString => 'date_time_dayPeriod';

  @override
  String get datePickerHourSemanticsLabelFew => null;

  @override
  String get datePickerHourSemanticsLabelMany => null;

  @override
  String get datePickerHourSemanticsLabelOne => r'$hour ezimpondweni';

  @override
  String get datePickerHourSemanticsLabelOther => r'$hour ezimpondweni';

  @override
  String get datePickerHourSemanticsLabelTwo => null;

  @override
  String get datePickerHourSemanticsLabelZero => null;

  @override
  String get datePickerMinuteSemanticsLabelFew => null;

  @override
  String get datePickerMinuteSemanticsLabelMany => null;

  @override
  String get datePickerMinuteSemanticsLabelOne => '1 iminithi';

  @override
  String get datePickerMinuteSemanticsLabelOther => r'$minute amaminithi';

  @override
  String get datePickerMinuteSemanticsLabelTwo => null;

  @override
  String get datePickerMinuteSemanticsLabelZero => null;

  @override
  String get modalBarrierDismissLabel => 'Cashisa';

  @override
  String get pasteButtonLabel => 'Namathisela';

  @override
  String get postMeridiemAbbreviation => 'PM';

  @override
  String get searchTextFieldPlaceholerLabel => 'Search';

  @override
  String get selectAllButtonLabel => 'Khetha konke';

  @override
  String get tabSemanticsLabelRaw => r'Ithebhu $tabIndex kwangu-$tabCount';

  @override
  String get timerPickerHourLabelFew => null;

  @override
  String get timerPickerHourLabelMany => null;

  @override
  String get timerPickerHourLabelOne => 'ihora';

  @override
  String get timerPickerHourLabelOther => 'amahora';

  @override
  String get timerPickerHourLabelTwo => null;

  @override
  String get timerPickerHourLabelZero => null;

  @override
  String get timerPickerMinuteLabelFew => null;

  @override
  String get timerPickerMinuteLabelMany => null;

  @override
  String get timerPickerMinuteLabelOne => 'iminithi.';

  @override
  String get timerPickerMinuteLabelOther => 'iminithi.';

  @override
  String get timerPickerMinuteLabelTwo => null;

  @override
  String get timerPickerMinuteLabelZero => null;

  @override
  String get timerPickerSecondLabelFew => null;

  @override
  String get timerPickerSecondLabelMany => null;

  @override
  String get timerPickerSecondLabelOne => 'isekhondi.';

  @override
  String get timerPickerSecondLabelOther => 'isekhondi.';

  @override
  String get timerPickerSecondLabelTwo => null;

  @override
  String get timerPickerSecondLabelZero => null;

  @override
  String get todayLabel => 'Namuhla';
}

/// The set of supported languages, as language code strings.
///
/// The [GlobalCupertinoLocalizations.delegate] can generate localizations for
/// any [Locale] with a language code from this set, regardless of the region.
/// Some regions have specific support (e.g. `de` covers all forms of German,
/// but there is support for `de-CH` specifically to override some of the
/// translations for Switzerland).
///
/// See also:
///
///  * [getCupertinoTranslation], whose documentation describes these values.
final Set<String> kCupertinoSupportedLanguages = HashSet<String>.from(const <String>[
  'af', // Afrikaans
  'am', // Amharic
  'ar', // Arabic
  'as', // Assamese
  'az', // Azerbaijani
  'be', // Belarusian
  'bg', // Bulgarian
  'bn', // Bengali Bangla
  'bs', // Bosnian
  'ca', // Catalan Valencian
  'cs', // Czech
  'da', // Danish
  'de', // German
  'el', // Modern Greek
  'en', // English
  'es', // Spanish Castilian
  'et', // Estonian
  'eu', // Basque
  'fa', // Persian
  'fi', // Finnish
  'fil', // Filipino Pilipino
  'fr', // French
  'gl', // Galician
  'gsw', // Swiss German Alemannic Alsatian
  'gu', // Gujarati
  'he', // Hebrew
  'hi', // Hindi
  'hr', // Croatian
  'hu', // Hungarian
  'hy', // Armenian
  'id', // Indonesian
  'is', // Icelandic
  'it', // Italian
  'ja', // Japanese
  'ka', // Georgian
  'kk', // Kazakh
  'km', // Khmer Central Khmer
  'kn', // Kannada
  'ko', // Korean
  'ky', // Kirghiz Kyrgyz
  'lo', // Lao
  'lt', // Lithuanian
  'lv', // Latvian
  'mk', // Macedonian
  'ml', // Malayalam
  'mn', // Mongolian
  'mr', // Marathi
  'ms', // Malay
  'my', // Burmese
  'nb', // Norwegian Bokmål
  'ne', // Nepali
  'nl', // Dutch Flemish
  'no', // Norwegian
  'or', // Oriya
  'pa', // Panjabi Punjabi
  'pl', // Polish
  'pt', // Portuguese
  'ro', // Romanian Moldavian Moldovan
  'ru', // Russian
  'si', // Sinhala Sinhalese
  'sk', // Slovak
  'sl', // Slovenian
  'sq', // Albanian
  'sr', // Serbian
  'sv', // Swedish
  'sw', // Swahili
  'ta', // Tamil
  'te', // Telugu
  'th', // Thai
  'tl', // Tagalog
  'tr', // Turkish
  'uk', // Ukrainian
  'ur', // Urdu
  'uz', // Uzbek
  'vi', // Vietnamese
  'zh', // Chinese
  'zu', // Zulu
]);

/// Creates a [GlobalCupertinoLocalizations] instance for the given `locale`.
///
/// All of the function's arguments except `locale` will be passed to the [
/// GlobalCupertinoLocalizations] constructor. (The `localeName` argument of that
/// constructor is specified by the actual subclass constructor by this
/// function.)
///
/// The following locales are supported by this package:
///
/// {@template flutter.localizations.cupertino.languages}
///  * `af` - Afrikaans
///  * `am` - Amharic
///  * `ar` - Arabic
///  * `as` - Assamese
///  * `az` - Azerbaijani
///  * `be` - Belarusian
///  * `bg` - Bulgarian
///  * `bn` - Bengali Bangla
///  * `bs` - Bosnian
///  * `ca` - Catalan Valencian
///  * `cs` - Czech
///  * `da` - Danish
///  * `de` - German (plus one country variation)
///  * `el` - Modern Greek
///  * `en` - English (plus 8 country variations)
///  * `es` - Spanish Castilian (plus 20 country variations)
///  * `et` - Estonian
///  * `eu` - Basque
///  * `fa` - Persian
///  * `fi` - Finnish
///  * `fil` - Filipino Pilipino
///  * `fr` - French (plus one country variation)
///  * `gl` - Galician
///  * `gsw` - Swiss German Alemannic Alsatian
///  * `gu` - Gujarati
///  * `he` - Hebrew
///  * `hi` - Hindi
///  * `hr` - Croatian
///  * `hu` - Hungarian
///  * `hy` - Armenian
///  * `id` - Indonesian
///  * `is` - Icelandic
///  * `it` - Italian
///  * `ja` - Japanese
///  * `ka` - Georgian
///  * `kk` - Kazakh
///  * `km` - Khmer Central Khmer
///  * `kn` - Kannada
///  * `ko` - Korean
///  * `ky` - Kirghiz Kyrgyz
///  * `lo` - Lao
///  * `lt` - Lithuanian
///  * `lv` - Latvian
///  * `mk` - Macedonian
///  * `ml` - Malayalam
///  * `mn` - Mongolian
///  * `mr` - Marathi
///  * `ms` - Malay
///  * `my` - Burmese
///  * `nb` - Norwegian Bokmål
///  * `ne` - Nepali
///  * `nl` - Dutch Flemish
///  * `no` - Norwegian
///  * `or` - Oriya
///  * `pa` - Panjabi Punjabi
///  * `pl` - Polish
///  * `pt` - Portuguese (plus one country variation)
///  * `ro` - Romanian Moldavian Moldovan
///  * `ru` - Russian
///  * `si` - Sinhala Sinhalese
///  * `sk` - Slovak
///  * `sl` - Slovenian
///  * `sq` - Albanian
///  * `sr` - Serbian (plus 2 scripts)
///  * `sv` - Swedish
///  * `sw` - Swahili
///  * `ta` - Tamil
///  * `te` - Telugu
///  * `th` - Thai
///  * `tl` - Tagalog
///  * `tr` - Turkish
///  * `uk` - Ukrainian
///  * `ur` - Urdu
///  * `uz` - Uzbek
///  * `vi` - Vietnamese
///  * `zh` - Chinese (plus 2 country variations and 2 scripts)
///  * `zu` - Zulu
/// {@endtemplate}
///
/// Generally speaking, this method is only intended to be used by
/// [GlobalCupertinoLocalizations.delegate].
GlobalCupertinoLocalizations getCupertinoTranslation(
  Locale locale,
  intl.DateFormat fullYearFormat,
  intl.DateFormat dayFormat,
  intl.DateFormat mediumDateFormat,
  intl.DateFormat singleDigitHourFormat,
  intl.DateFormat singleDigitMinuteFormat,
  intl.DateFormat doubleDigitMinuteFormat,
  intl.DateFormat singleDigitSecondFormat,
  intl.NumberFormat decimalFormat,
) {
  switch (locale.languageCode) {
    case 'af':
      return CupertinoLocalizationAf(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
    case 'am':
      return CupertinoLocalizationAm(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
    case 'ar':
      return CupertinoLocalizationAr(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
    case 'as':
      return CupertinoLocalizationAs(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
    case 'az':
      return CupertinoLocalizationAz(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
    case 'be':
      return CupertinoLocalizationBe(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
    case 'bg':
      return CupertinoLocalizationBg(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
    case 'bn':
      return CupertinoLocalizationBn(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
    case 'bs':
      return CupertinoLocalizationBs(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
    case 'ca':
      return CupertinoLocalizationCa(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
    case 'cs':
      return CupertinoLocalizationCs(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
    case 'da':
      return CupertinoLocalizationDa(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
    case 'de': {
      switch (locale.countryCode) {
        case 'CH':
          return CupertinoLocalizationDeCh(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
      }
      return CupertinoLocalizationDe(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
    }
    case 'el':
      return CupertinoLocalizationEl(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
    case 'en': {
      switch (locale.countryCode) {
        case 'AU':
          return CupertinoLocalizationEnAu(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
        case 'CA':
          return CupertinoLocalizationEnCa(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
        case 'GB':
          return CupertinoLocalizationEnGb(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
        case 'IE':
          return CupertinoLocalizationEnIe(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
        case 'IN':
          return CupertinoLocalizationEnIn(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
        case 'NZ':
          return CupertinoLocalizationEnNz(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
        case 'SG':
          return CupertinoLocalizationEnSg(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
        case 'ZA':
          return CupertinoLocalizationEnZa(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
      }
      return CupertinoLocalizationEn(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
    }
    case 'es': {
      switch (locale.countryCode) {
        case '419':
          return CupertinoLocalizationEs419(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
        case 'AR':
          return CupertinoLocalizationEsAr(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
        case 'BO':
          return CupertinoLocalizationEsBo(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
        case 'CL':
          return CupertinoLocalizationEsCl(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
        case 'CO':
          return CupertinoLocalizationEsCo(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
        case 'CR':
          return CupertinoLocalizationEsCr(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
        case 'DO':
          return CupertinoLocalizationEsDo(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
        case 'EC':
          return CupertinoLocalizationEsEc(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
        case 'GT':
          return CupertinoLocalizationEsGt(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
        case 'HN':
          return CupertinoLocalizationEsHn(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
        case 'MX':
          return CupertinoLocalizationEsMx(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
        case 'NI':
          return CupertinoLocalizationEsNi(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
        case 'PA':
          return CupertinoLocalizationEsPa(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
        case 'PE':
          return CupertinoLocalizationEsPe(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
        case 'PR':
          return CupertinoLocalizationEsPr(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
        case 'PY':
          return CupertinoLocalizationEsPy(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
        case 'SV':
          return CupertinoLocalizationEsSv(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
        case 'US':
          return CupertinoLocalizationEsUs(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
        case 'UY':
          return CupertinoLocalizationEsUy(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
        case 'VE':
          return CupertinoLocalizationEsVe(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
      }
      return CupertinoLocalizationEs(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
    }
    case 'et':
      return CupertinoLocalizationEt(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
    case 'eu':
      return CupertinoLocalizationEu(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
    case 'fa':
      return CupertinoLocalizationFa(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
    case 'fi':
      return CupertinoLocalizationFi(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
    case 'fil':
      return CupertinoLocalizationFil(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
    case 'fr': {
      switch (locale.countryCode) {
        case 'CA':
          return CupertinoLocalizationFrCa(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
      }
      return CupertinoLocalizationFr(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
    }
    case 'gl':
      return CupertinoLocalizationGl(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
    case 'gsw':
      return CupertinoLocalizationGsw(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
    case 'gu':
      return CupertinoLocalizationGu(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
    case 'he':
      return CupertinoLocalizationHe(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
    case 'hi':
      return CupertinoLocalizationHi(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
    case 'hr':
      return CupertinoLocalizationHr(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
    case 'hu':
      return CupertinoLocalizationHu(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
    case 'hy':
      return CupertinoLocalizationHy(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
    case 'id':
      return CupertinoLocalizationId(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
    case 'is':
      return CupertinoLocalizationIs(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
    case 'it':
      return CupertinoLocalizationIt(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
    case 'ja':
      return CupertinoLocalizationJa(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
    case 'ka':
      return CupertinoLocalizationKa(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
    case 'kk':
      return CupertinoLocalizationKk(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
    case 'km':
      return CupertinoLocalizationKm(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
    case 'kn':
      return CupertinoLocalizationKn(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
    case 'ko':
      return CupertinoLocalizationKo(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
    case 'ky':
      return CupertinoLocalizationKy(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
    case 'lo':
      return CupertinoLocalizationLo(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
    case 'lt':
      return CupertinoLocalizationLt(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
    case 'lv':
      return CupertinoLocalizationLv(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
    case 'mk':
      return CupertinoLocalizationMk(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
    case 'ml':
      return CupertinoLocalizationMl(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
    case 'mn':
      return CupertinoLocalizationMn(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
    case 'mr':
      return CupertinoLocalizationMr(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
    case 'ms':
      return CupertinoLocalizationMs(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
    case 'my':
      return CupertinoLocalizationMy(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
    case 'nb':
      return CupertinoLocalizationNb(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
    case 'ne':
      return CupertinoLocalizationNe(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
    case 'nl':
      return CupertinoLocalizationNl(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
    case 'no':
      return CupertinoLocalizationNo(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
    case 'or':
      return CupertinoLocalizationOr(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
    case 'pa':
      return CupertinoLocalizationPa(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
    case 'pl':
      return CupertinoLocalizationPl(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
    case 'pt': {
      switch (locale.countryCode) {
        case 'PT':
          return CupertinoLocalizationPtPt(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
      }
      return CupertinoLocalizationPt(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
    }
    case 'ro':
      return CupertinoLocalizationRo(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
    case 'ru':
      return CupertinoLocalizationRu(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
    case 'si':
      return CupertinoLocalizationSi(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
    case 'sk':
      return CupertinoLocalizationSk(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
    case 'sl':
      return CupertinoLocalizationSl(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
    case 'sq':
      return CupertinoLocalizationSq(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
    case 'sr': {
      switch (locale.scriptCode) {
        case 'Cyrl': {
          return CupertinoLocalizationSrCyrl(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
        }
        case 'Latn': {
          return CupertinoLocalizationSrLatn(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
        }
      }
      return CupertinoLocalizationSr(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
    }
    case 'sv':
      return CupertinoLocalizationSv(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
    case 'sw':
      return CupertinoLocalizationSw(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
    case 'ta':
      return CupertinoLocalizationTa(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
    case 'te':
      return CupertinoLocalizationTe(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
    case 'th':
      return CupertinoLocalizationTh(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
    case 'tl':
      return CupertinoLocalizationTl(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
    case 'tr':
      return CupertinoLocalizationTr(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
    case 'uk':
      return CupertinoLocalizationUk(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
    case 'ur':
      return CupertinoLocalizationUr(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
    case 'uz':
      return CupertinoLocalizationUz(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
    case 'vi':
      return CupertinoLocalizationVi(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
    case 'zh': {
      switch (locale.scriptCode) {
        case 'Hans': {
          return CupertinoLocalizationZhHans(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
        }
        case 'Hant': {
          switch (locale.countryCode) {
            case 'HK':
              return CupertinoLocalizationZhHantHk(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
            case 'TW':
              return CupertinoLocalizationZhHantTw(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
          }
          return CupertinoLocalizationZhHant(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
        }
      }
      switch (locale.countryCode) {
        case 'HK':
          return CupertinoLocalizationZhHantHk(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
        case 'TW':
          return CupertinoLocalizationZhHantTw(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
      }
      return CupertinoLocalizationZh(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
    }
    case 'zu':
      return CupertinoLocalizationZu(fullYearFormat: fullYearFormat, dayFormat: dayFormat, mediumDateFormat: mediumDateFormat, singleDigitHourFormat: singleDigitHourFormat, singleDigitMinuteFormat: singleDigitMinuteFormat, doubleDigitMinuteFormat: doubleDigitMinuteFormat, singleDigitSecondFormat: singleDigitSecondFormat, decimalFormat: decimalFormat);
  }
  assert(false, 'getCupertinoTranslation() called for unsupported locale "$locale"');
  return null;
}
