Add a localization for counter text, separate into own semantic node (#21029)

diff --git a/packages/flutter/lib/src/material/input_decorator.dart b/packages/flutter/lib/src/material/input_decorator.dart
index 18ee930..98d3e30 100644
--- a/packages/flutter/lib/src/material/input_decorator.dart
+++ b/packages/flutter/lib/src/material/input_decorator.dart
@@ -1813,10 +1813,14 @@
     );
 
     final Widget counter = decoration.counterText == null ? null :
-      new Text(
-        decoration.counterText,
-        style: _getHelperStyle(themeData).merge(decoration.counterStyle),
-        overflow: TextOverflow.ellipsis,
+      new Semantics(
+        container: true,
+        child: new Text(
+          decoration.counterText,
+          style: _getHelperStyle(themeData).merge(decoration.counterStyle),
+          overflow: TextOverflow.ellipsis,
+          semanticsLabel: decoration.semanticCounterText,
+        ),
       );
 
     // The _Decoration widget and _RenderDecoration assume that contentPadding
@@ -1940,6 +1944,7 @@
     this.enabledBorder,
     this.border,
     this.enabled = true,
+    this.semanticCounterText,
   }) : assert(enabled != null),
        assert(!(prefix != null && prefixText != null), 'Declaring both prefix and prefixText is not allowed'),
        assert(!(suffix != null && suffixText != null), 'Declaring both suffix and suffixText is not allowed'),
@@ -1983,7 +1988,8 @@
        focusedBorder = null,
        focusedErrorBorder = null,
        disabledBorder = null,
-       enabledBorder = null;
+       enabledBorder = null,
+       semanticCounterText = null;
 
   /// An icon to show before the input field and outside of the decoration's
   /// container.
@@ -2197,6 +2203,8 @@
   ///
   /// Rendered using [counterStyle]. Uses [helperStyle] if [counterStyle] is
   /// null.
+  ///
+  /// The semantic label can be replaced by providing a [semanticCounterText].
   final String counterText;
 
   /// The style to use for the [counterText].
@@ -2380,6 +2388,13 @@
   /// This property is true by default.
   final bool enabled;
 
+  /// A semantic label for the [counterText].
+  ///
+  /// Defaults to null.
+  ///
+  /// If provided, this replaces the semantic label of the [counterText].
+  final String semanticCounterText;
+
   /// Creates a copy of this input decoration with the given fields replaced
   /// by the new values.
   ///
@@ -2416,6 +2431,7 @@
     InputBorder enabledBorder,
     InputBorder border,
     bool enabled,
+    String semanticCounterText,
   }) {
     return new InputDecoration(
       icon: icon ?? this.icon,
@@ -2449,6 +2465,7 @@
       enabledBorder: enabledBorder ?? this.enabledBorder,
       border: border ?? this.border,
       enabled: enabled ?? this.enabled,
+      semanticCounterText: semanticCounterText ?? this.semanticCounterText,
     );
   }
 
@@ -2518,7 +2535,8 @@
         && typedOther.disabledBorder == disabledBorder
         && typedOther.enabledBorder == enabledBorder
         && typedOther.border == border
-        && typedOther.enabled == enabled;
+        && typedOther.enabled == enabled
+        && typedOther.semanticCounterText == semanticCounterText;
   }
 
   @override
@@ -2565,6 +2583,7 @@
         enabledBorder,
         border,
         enabled,
+        semanticCounterText,
       ),
     );
   }
@@ -2630,6 +2649,8 @@
       description.add('border: $border');
     if (!enabled)
       description.add('enabled: false');
+    if (semanticCounterText != null)
+      description.add('semanticCounterText: $semanticCounterText');
     return 'InputDecoration(${description.join(', ')})';
   }
 }
diff --git a/packages/flutter/lib/src/material/material_localizations.dart b/packages/flutter/lib/src/material/material_localizations.dart
index f222e04..e8236f8 100644
--- a/packages/flutter/lib/src/material/material_localizations.dart
+++ b/packages/flutter/lib/src/material/material_localizations.dart
@@ -307,6 +307,9 @@
   /// The semantics hint to describe the tap action on a collapsed [ExpandIcon].
   String get collapsedIconTapHint => 'Expand';
 
+  /// The label for the [TextField]'s character counter.
+  String remainingTextFieldCharacterCount(int remaining);
+
   /// The `MaterialLocalizations` from the closest [Localizations] instance
   /// that encloses the given context.
   ///
@@ -709,4 +712,16 @@
   ///
   /// [MaterialApp] automatically adds this value to [MaterialApp.localizationsDelegates].
   static const LocalizationsDelegate<MaterialLocalizations> delegate = _MaterialLocalizationsDelegate();
+
+  @override
+  String remainingTextFieldCharacterCount(int remaining) {
+    switch (remaining) {
+      case 0:
+        return 'No characters remaining';
+      case 1:
+        return '1 character remaining';
+      default:
+        return '$remaining characters remaining';
+    }
+  }
 }
diff --git a/packages/flutter/lib/src/material/text_field.dart b/packages/flutter/lib/src/material/text_field.dart
index 4401ffa..36a0282 100644
--- a/packages/flutter/lib/src/material/text_field.dart
+++ b/packages/flutter/lib/src/material/text_field.dart
@@ -14,6 +14,7 @@
 import 'ink_well.dart' show InteractiveInkFeature;
 import 'input_decorator.dart';
 import 'material.dart';
+import 'material_localizations.dart';
 import 'text_selection.dart';
 import 'theme.dart';
 
@@ -379,6 +380,7 @@
     && widget.decoration.counterText == null;
 
   InputDecoration _getEffectiveDecoration() {
+    final MaterialLocalizations localizations = MaterialLocalizations.of(context);
     final InputDecoration effectiveDecoration = (widget.decoration ?? const InputDecoration())
       .applyDefaults(Theme.of(context).inputDecorationTheme)
       .copyWith(
@@ -388,7 +390,10 @@
     if (!needsCounter)
       return effectiveDecoration;
 
-    final String counterText = '${_effectiveController.value.text.runes.length}/${widget.maxLength}';
+    final int currentLength = _effectiveController.value.text.runes.length;
+    final String counterText = '$currentLength/${widget.maxLength}';
+    final int remaining = (widget.maxLength - currentLength).clamp(0, widget.maxLength);
+    final String semanticCounterText = localizations.remainingTextFieldCharacterCount(remaining);
     if (_effectiveController.value.text.runes.length > widget.maxLength) {
       final ThemeData themeData = Theme.of(context);
       return effectiveDecoration.copyWith(
@@ -396,9 +401,13 @@
         counterStyle: effectiveDecoration.errorStyle
           ?? themeData.textTheme.caption.copyWith(color: themeData.errorColor),
         counterText: counterText,
+        semanticCounterText: semanticCounterText,
       );
     }
-    return effectiveDecoration.copyWith(counterText: counterText);
+    return effectiveDecoration.copyWith(
+      counterText: counterText,
+      semanticCounterText: semanticCounterText,
+    );
   }
 
   @override
diff --git a/packages/flutter/test/material/text_field_test.dart b/packages/flutter/test/material/text_field_test.dart
index 336002d..5d3151a 100644
--- a/packages/flutter/test/material/text_field_test.dart
+++ b/packages/flutter/test/material/text_field_test.dart
@@ -2580,11 +2580,11 @@
         child: new TextField(
           key: key,
           controller: controller,
+          maxLength: 10,
           decoration: const InputDecoration(
             labelText: 'label',
             hintText: 'hint',
             helperText: 'helper',
-            counterText: 'counter',
           ),
         ),
       ),
@@ -2593,7 +2593,7 @@
     expect(semantics, hasSemantics(new TestSemantics.root(
       children: <TestSemantics>[
         new TestSemantics.rootChild(
-          label: 'label\nhelper\ncounter',
+          label: 'label\nhelper',
           id: 1,
           textDirection: TextDirection.ltr,
           actions: <SemanticsAction>[
@@ -2602,6 +2602,13 @@
           flags: <SemanticsFlag>[
             SemanticsFlag.isTextField,
           ],
+          children: <TestSemantics>[
+            new TestSemantics(
+              id: 2,
+              label: '10 characters remaining',
+              textDirection: TextDirection.ltr,
+            ),
+          ],
         ),
       ],
     ), ignoreTransform: true, ignoreRect: true));
@@ -2612,7 +2619,7 @@
     expect(semantics, hasSemantics(new TestSemantics.root(
       children: <TestSemantics>[
         new TestSemantics.rootChild(
-          label: 'hint\nhelper\ncounter',
+          label: 'hint\nhelper',
           id: 1,
           textDirection: TextDirection.ltr,
           textSelection: const TextSelection(baseOffset: 0, extentOffset: 0),
@@ -2625,6 +2632,13 @@
             SemanticsFlag.isTextField,
             SemanticsFlag.isFocused,
           ],
+          children: <TestSemantics>[
+            new TestSemantics(
+              id: 2,
+              label: '10 characters remaining',
+              textDirection: TextDirection.ltr,
+            ),
+          ],
         ),
       ],
     ), ignoreTransform: true, ignoreRect: true));
@@ -2634,4 +2648,49 @@
     semantics.dispose();
   });
 
+  testWidgets('InputDecoration counterText can have a semanticCounterText', (WidgetTester tester) async {
+    final SemanticsTester semantics = new SemanticsTester(tester);
+    final TextEditingController controller = new TextEditingController();
+    final Key key = new UniqueKey();
+
+    await tester.pumpWidget(
+      overlay(
+        child: new TextField(
+          key: key,
+          controller: controller,
+          decoration: const InputDecoration(
+            labelText: 'label',
+            hintText: 'hint',
+            helperText: 'helper',
+            counterText: '0/10',
+            semanticCounterText: '0 out of 10',
+          ),
+        ),
+      ),
+    );
+
+    expect(semantics, hasSemantics(new TestSemantics.root(
+      children: <TestSemantics>[
+        new TestSemantics.rootChild(
+          label: 'label\nhelper',
+          id: 1,
+          textDirection: TextDirection.ltr,
+          actions: <SemanticsAction>[
+            SemanticsAction.tap,
+          ],
+          flags: <SemanticsFlag>[
+            SemanticsFlag.isTextField,
+          ],
+          children: <TestSemantics>[
+            new TestSemantics(
+              label: '0 out of 10',
+              textDirection: TextDirection.ltr,
+            ),
+          ],
+        ),
+      ],
+    ), ignoreTransform: true, ignoreRect: true, ignoreId: true));
+
+    semantics.dispose();
+  });
 }
diff --git a/packages/flutter_localizations/lib/src/l10n/localizations.dart b/packages/flutter_localizations/lib/src/l10n/localizations.dart
index d54d7ab..2d9e76f 100644
--- a/packages/flutter_localizations/lib/src/l10n/localizations.dart
+++ b/packages/flutter_localizations/lib/src/l10n/localizations.dart
@@ -132,6 +132,15 @@
   String get previousPageTooltip => r'الصفحة السابقة';
 
   @override
+  String get remainingTextFieldCharacterCountOne => r'TBD';
+
+  @override
+  String get remainingTextFieldCharacterCountOther => r'TBD';
+
+  @override
+  String get remainingTextFieldCharacterCountZero => r'TBD';
+
+  @override
   String get reorderItemDown => r'TBD';
 
   @override
@@ -315,6 +324,15 @@
   String get previousPageTooltip => r'Предишната страница';
 
   @override
+  String get remainingTextFieldCharacterCountOne => r'TBD';
+
+  @override
+  String get remainingTextFieldCharacterCountOther => r'TBD';
+
+  @override
+  String get remainingTextFieldCharacterCountZero => r'TBD';
+
+  @override
   String get reorderItemDown => r'TBD';
 
   @override
@@ -498,6 +516,15 @@
   String get previousPageTooltip => r'Prethodna stranica';
 
   @override
+  String get remainingTextFieldCharacterCountOne => r'TBD';
+
+  @override
+  String get remainingTextFieldCharacterCountOther => r'TBD';
+
+  @override
+  String get remainingTextFieldCharacterCountZero => r'TBD';
+
+  @override
   String get reorderItemDown => r'TBD';
 
   @override
@@ -681,6 +708,15 @@
   String get previousPageTooltip => r'Pàgina anterior';
 
   @override
+  String get remainingTextFieldCharacterCountOne => r'TBD';
+
+  @override
+  String get remainingTextFieldCharacterCountOther => r'TBD';
+
+  @override
+  String get remainingTextFieldCharacterCountZero => r'TBD';
+
+  @override
   String get reorderItemDown => r'TBD';
 
   @override
@@ -864,6 +900,15 @@
   String get previousPageTooltip => r'Předchozí stránka';
 
   @override
+  String get remainingTextFieldCharacterCountOne => r'TBD';
+
+  @override
+  String get remainingTextFieldCharacterCountOther => r'TBD';
+
+  @override
+  String get remainingTextFieldCharacterCountZero => r'TBD';
+
+  @override
   String get reorderItemDown => r'TBD';
 
   @override
@@ -1047,6 +1092,15 @@
   String get previousPageTooltip => r'Forrige side';
 
   @override
+  String get remainingTextFieldCharacterCountOne => r'TBD';
+
+  @override
+  String get remainingTextFieldCharacterCountOther => r'TBD';
+
+  @override
+  String get remainingTextFieldCharacterCountZero => r'TBD';
+
+  @override
   String get reorderItemDown => r'TBD';
 
   @override
@@ -1230,6 +1284,15 @@
   String get previousPageTooltip => r'Vorherige Seite';
 
   @override
+  String get remainingTextFieldCharacterCountOne => r'TBD';
+
+  @override
+  String get remainingTextFieldCharacterCountOther => r'TBD';
+
+  @override
+  String get remainingTextFieldCharacterCountZero => r'TBD';
+
+  @override
   String get reorderItemDown => r'TBD';
 
   @override
@@ -1443,6 +1506,15 @@
   String get previousPageTooltip => r'Προηγούμενη σελίδα';
 
   @override
+  String get remainingTextFieldCharacterCountOne => r'TBD';
+
+  @override
+  String get remainingTextFieldCharacterCountOther => r'TBD';
+
+  @override
+  String get remainingTextFieldCharacterCountZero => r'TBD';
+
+  @override
   String get reorderItemDown => r'TBD';
 
   @override
@@ -1626,6 +1698,15 @@
   String get previousPageTooltip => r'Previous page';
 
   @override
+  String get remainingTextFieldCharacterCountOne => r'1 character remaining';
+
+  @override
+  String get remainingTextFieldCharacterCountOther => r'$remainingCount characters remaining';
+
+  @override
+  String get remainingTextFieldCharacterCountZero => r'No characters remaining';
+
+  @override
   String get reorderItemDown => r'Move down';
 
   @override
@@ -2070,6 +2151,15 @@
   String get previousPageTooltip => r'Página anterior';
 
   @override
+  String get remainingTextFieldCharacterCountOne => r'TBD';
+
+  @override
+  String get remainingTextFieldCharacterCountOther => r'TBD';
+
+  @override
+  String get remainingTextFieldCharacterCountZero => r'TBD';
+
+  @override
   String get reorderItemDown => r'TBD';
 
   @override
@@ -3576,6 +3666,15 @@
   String get previousPageTooltip => r'Eelmine leht';
 
   @override
+  String get remainingTextFieldCharacterCountOne => r'TBD';
+
+  @override
+  String get remainingTextFieldCharacterCountOther => r'TBD';
+
+  @override
+  String get remainingTextFieldCharacterCountZero => r'TBD';
+
+  @override
   String get reorderItemDown => r'TBD';
 
   @override
@@ -3759,6 +3858,15 @@
   String get previousPageTooltip => r'صفحه قبل';
 
   @override
+  String get remainingTextFieldCharacterCountOne => r'TBD';
+
+  @override
+  String get remainingTextFieldCharacterCountOther => r'TBD';
+
+  @override
+  String get remainingTextFieldCharacterCountZero => r'TBD';
+
+  @override
   String get reorderItemDown => r'TBD';
 
   @override
@@ -3942,6 +4050,15 @@
   String get previousPageTooltip => r'Edellinen sivu';
 
   @override
+  String get remainingTextFieldCharacterCountOne => r'TBD';
+
+  @override
+  String get remainingTextFieldCharacterCountOther => r'TBD';
+
+  @override
+  String get remainingTextFieldCharacterCountZero => r'TBD';
+
+  @override
   String get reorderItemDown => r'TBD';
 
   @override
@@ -4125,6 +4242,15 @@
   String get previousPageTooltip => r'Nakaraang page';
 
   @override
+  String get remainingTextFieldCharacterCountOne => r'TBD';
+
+  @override
+  String get remainingTextFieldCharacterCountOther => r'TBD';
+
+  @override
+  String get remainingTextFieldCharacterCountZero => r'TBD';
+
+  @override
   String get reorderItemDown => r'TBD';
 
   @override
@@ -4308,6 +4434,15 @@
   String get previousPageTooltip => r'Page précédente';
 
   @override
+  String get remainingTextFieldCharacterCountOne => r'TBD';
+
+  @override
+  String get remainingTextFieldCharacterCountOther => r'TBD';
+
+  @override
+  String get remainingTextFieldCharacterCountZero => r'TBD';
+
+  @override
   String get reorderItemDown => r'TBD';
 
   @override
@@ -4518,6 +4653,15 @@
   String get previousPageTooltip => r'Vorherige Seite';
 
   @override
+  String get remainingTextFieldCharacterCountOne => r'TBD';
+
+  @override
+  String get remainingTextFieldCharacterCountOther => r'TBD';
+
+  @override
+  String get remainingTextFieldCharacterCountZero => r'TBD';
+
+  @override
   String get reorderItemDown => r'TBD';
 
   @override
@@ -4701,6 +4845,15 @@
   String get previousPageTooltip => r'הדף הקודם';
 
   @override
+  String get remainingTextFieldCharacterCountOne => r'TBD';
+
+  @override
+  String get remainingTextFieldCharacterCountOther => r'TBD';
+
+  @override
+  String get remainingTextFieldCharacterCountZero => r'TBD';
+
+  @override
   String get reorderItemDown => r'TBD';
 
   @override
@@ -4884,6 +5037,15 @@
   String get previousPageTooltip => r'पिछला पेज';
 
   @override
+  String get remainingTextFieldCharacterCountOne => r'TBD';
+
+  @override
+  String get remainingTextFieldCharacterCountOther => r'TBD';
+
+  @override
+  String get remainingTextFieldCharacterCountZero => r'TBD';
+
+  @override
   String get reorderItemDown => r'TBD';
 
   @override
@@ -5067,6 +5229,15 @@
   String get previousPageTooltip => r'Prethodna stranica';
 
   @override
+  String get remainingTextFieldCharacterCountOne => r'TBD';
+
+  @override
+  String get remainingTextFieldCharacterCountOther => r'TBD';
+
+  @override
+  String get remainingTextFieldCharacterCountZero => r'TBD';
+
+  @override
   String get reorderItemDown => r'TBD';
 
   @override
@@ -5250,6 +5421,15 @@
   String get previousPageTooltip => r'Előző oldal';
 
   @override
+  String get remainingTextFieldCharacterCountOne => r'TBD';
+
+  @override
+  String get remainingTextFieldCharacterCountOther => r'TBD';
+
+  @override
+  String get remainingTextFieldCharacterCountZero => r'TBD';
+
+  @override
   String get reorderItemDown => r'TBD';
 
   @override
@@ -5433,6 +5613,15 @@
   String get previousPageTooltip => r'Halaman sebelumnya';
 
   @override
+  String get remainingTextFieldCharacterCountOne => r'TBD';
+
+  @override
+  String get remainingTextFieldCharacterCountOther => r'TBD';
+
+  @override
+  String get remainingTextFieldCharacterCountZero => r'TBD';
+
+  @override
   String get reorderItemDown => r'TBD';
 
   @override
@@ -5616,6 +5805,15 @@
   String get previousPageTooltip => r'Pagina precedente';
 
   @override
+  String get remainingTextFieldCharacterCountOne => r'TBD';
+
+  @override
+  String get remainingTextFieldCharacterCountOther => r'TBD';
+
+  @override
+  String get remainingTextFieldCharacterCountZero => r'TBD';
+
+  @override
   String get reorderItemDown => r'TBD';
 
   @override
@@ -5799,6 +5997,15 @@
   String get previousPageTooltip => r'前のページ';
 
   @override
+  String get remainingTextFieldCharacterCountOne => r'TBD';
+
+  @override
+  String get remainingTextFieldCharacterCountOther => r'TBD';
+
+  @override
+  String get remainingTextFieldCharacterCountZero => r'TBD';
+
+  @override
   String get reorderItemDown => r'TBD';
 
   @override
@@ -5982,6 +6189,15 @@
   String get previousPageTooltip => r'이전 페이지';
 
   @override
+  String get remainingTextFieldCharacterCountOne => r'TBD';
+
+  @override
+  String get remainingTextFieldCharacterCountOther => r'TBD';
+
+  @override
+  String get remainingTextFieldCharacterCountZero => r'TBD';
+
+  @override
   String get reorderItemDown => r'TBD';
 
   @override
@@ -6165,6 +6381,15 @@
   String get previousPageTooltip => r'Ankstesnis puslapis';
 
   @override
+  String get remainingTextFieldCharacterCountOne => r'TBD';
+
+  @override
+  String get remainingTextFieldCharacterCountOther => r'TBD';
+
+  @override
+  String get remainingTextFieldCharacterCountZero => r'TBD';
+
+  @override
   String get reorderItemDown => r'TBD';
 
   @override
@@ -6348,6 +6573,15 @@
   String get previousPageTooltip => r'Iepriekšējā lapa';
 
   @override
+  String get remainingTextFieldCharacterCountOne => r'TBD';
+
+  @override
+  String get remainingTextFieldCharacterCountOther => r'TBD';
+
+  @override
+  String get remainingTextFieldCharacterCountZero => r'TBD';
+
+  @override
   String get reorderItemDown => r'TBD';
 
   @override
@@ -6531,6 +6765,15 @@
   String get previousPageTooltip => r'Halaman sebelumnya';
 
   @override
+  String get remainingTextFieldCharacterCountOne => r'TBD';
+
+  @override
+  String get remainingTextFieldCharacterCountOther => r'TBD';
+
+  @override
+  String get remainingTextFieldCharacterCountZero => r'TBD';
+
+  @override
   String get reorderItemDown => r'TBD';
 
   @override
@@ -6714,6 +6957,15 @@
   String get previousPageTooltip => r'Forrige side';
 
   @override
+  String get remainingTextFieldCharacterCountOne => r'TBD';
+
+  @override
+  String get remainingTextFieldCharacterCountOther => r'TBD';
+
+  @override
+  String get remainingTextFieldCharacterCountZero => r'TBD';
+
+  @override
   String get reorderItemDown => r'TBD';
 
   @override
@@ -6897,6 +7149,15 @@
   String get previousPageTooltip => r'Vorige pagina';
 
   @override
+  String get remainingTextFieldCharacterCountOne => r'TBD';
+
+  @override
+  String get remainingTextFieldCharacterCountOther => r'TBD';
+
+  @override
+  String get remainingTextFieldCharacterCountZero => r'TBD';
+
+  @override
   String get reorderItemDown => r'TBD';
 
   @override
@@ -7080,6 +7341,15 @@
   String get previousPageTooltip => r'Poprzednia strona';
 
   @override
+  String get remainingTextFieldCharacterCountOne => r'TBD';
+
+  @override
+  String get remainingTextFieldCharacterCountOther => r'TBD';
+
+  @override
+  String get remainingTextFieldCharacterCountZero => r'TBD';
+
+  @override
   String get reorderItemDown => r'TBD';
 
   @override
@@ -7263,6 +7533,15 @@
   String get previousPageTooltip => r'مخکینی مخ';
 
   @override
+  String get remainingTextFieldCharacterCountOne => r'TBD';
+
+  @override
+  String get remainingTextFieldCharacterCountOther => r'TBD';
+
+  @override
+  String get remainingTextFieldCharacterCountZero => r'TBD';
+
+  @override
   String get reorderItemDown => r'TBD';
 
   @override
@@ -7446,6 +7725,15 @@
   String get previousPageTooltip => r'Página anterior';
 
   @override
+  String get remainingTextFieldCharacterCountOne => r'TBD';
+
+  @override
+  String get remainingTextFieldCharacterCountOther => r'TBD';
+
+  @override
+  String get remainingTextFieldCharacterCountZero => r'TBD';
+
+  @override
   String get reorderItemDown => r'TBD';
 
   @override
@@ -7698,6 +7986,15 @@
   String get previousPageTooltip => r'Pagina anterioară';
 
   @override
+  String get remainingTextFieldCharacterCountOne => r'TBD';
+
+  @override
+  String get remainingTextFieldCharacterCountOther => r'TBD';
+
+  @override
+  String get remainingTextFieldCharacterCountZero => r'TBD';
+
+  @override
   String get reorderItemDown => r'TBD';
 
   @override
@@ -7881,6 +8178,15 @@
   String get previousPageTooltip => r'Предыдущая страница';
 
   @override
+  String get remainingTextFieldCharacterCountOne => r'TBD';
+
+  @override
+  String get remainingTextFieldCharacterCountOther => r'TBD';
+
+  @override
+  String get remainingTextFieldCharacterCountZero => r'TBD';
+
+  @override
   String get reorderItemDown => r'TBD';
 
   @override
@@ -8064,6 +8370,15 @@
   String get previousPageTooltip => r'Predchádzajúca stránka';
 
   @override
+  String get remainingTextFieldCharacterCountOne => r'TBD';
+
+  @override
+  String get remainingTextFieldCharacterCountOther => r'TBD';
+
+  @override
+  String get remainingTextFieldCharacterCountZero => r'TBD';
+
+  @override
   String get reorderItemDown => r'TBD';
 
   @override
@@ -8247,6 +8562,15 @@
   String get previousPageTooltip => r'Prejšnja stran';
 
   @override
+  String get remainingTextFieldCharacterCountOne => r'TBD';
+
+  @override
+  String get remainingTextFieldCharacterCountOther => r'TBD';
+
+  @override
+  String get remainingTextFieldCharacterCountZero => r'TBD';
+
+  @override
   String get reorderItemDown => r'TBD';
 
   @override
@@ -8430,6 +8754,15 @@
   String get previousPageTooltip => r'Претходна страница';
 
   @override
+  String get remainingTextFieldCharacterCountOne => r'TBD';
+
+  @override
+  String get remainingTextFieldCharacterCountOther => r'TBD';
+
+  @override
+  String get remainingTextFieldCharacterCountZero => r'TBD';
+
+  @override
   String get reorderItemDown => r'TBD';
 
   @override
@@ -8751,6 +9084,15 @@
   String get previousPageTooltip => r'Föregående sida';
 
   @override
+  String get remainingTextFieldCharacterCountOne => r'TBD';
+
+  @override
+  String get remainingTextFieldCharacterCountOther => r'TBD';
+
+  @override
+  String get remainingTextFieldCharacterCountZero => r'TBD';
+
+  @override
   String get reorderItemDown => r'TBD';
 
   @override
@@ -8934,6 +9276,15 @@
   String get previousPageTooltip => r'หน้าก่อน';
 
   @override
+  String get remainingTextFieldCharacterCountOne => r'TBD';
+
+  @override
+  String get remainingTextFieldCharacterCountOther => r'TBD';
+
+  @override
+  String get remainingTextFieldCharacterCountZero => r'TBD';
+
+  @override
   String get reorderItemDown => r'TBD';
 
   @override
@@ -9117,6 +9468,15 @@
   String get previousPageTooltip => r'Nakaraang page';
 
   @override
+  String get remainingTextFieldCharacterCountOne => r'TBD';
+
+  @override
+  String get remainingTextFieldCharacterCountOther => r'TBD';
+
+  @override
+  String get remainingTextFieldCharacterCountZero => r'TBD';
+
+  @override
   String get reorderItemDown => r'TBD';
 
   @override
@@ -9300,6 +9660,15 @@
   String get previousPageTooltip => r'Önceki sayfa';
 
   @override
+  String get remainingTextFieldCharacterCountOne => r'TBD';
+
+  @override
+  String get remainingTextFieldCharacterCountOther => r'TBD';
+
+  @override
+  String get remainingTextFieldCharacterCountZero => r'TBD';
+
+  @override
   String get reorderItemDown => r'TBD';
 
   @override
@@ -9483,6 +9852,15 @@
   String get previousPageTooltip => r'Попередня сторінка';
 
   @override
+  String get remainingTextFieldCharacterCountOne => r'TBD';
+
+  @override
+  String get remainingTextFieldCharacterCountOther => r'TBD';
+
+  @override
+  String get remainingTextFieldCharacterCountZero => r'TBD';
+
+  @override
   String get reorderItemDown => r'TBD';
 
   @override
@@ -9666,6 +10044,15 @@
   String get previousPageTooltip => r'گزشتہ صفحہ';
 
   @override
+  String get remainingTextFieldCharacterCountOne => r'TBD';
+
+  @override
+  String get remainingTextFieldCharacterCountOther => r'TBD';
+
+  @override
+  String get remainingTextFieldCharacterCountZero => r'TBD';
+
+  @override
   String get reorderItemDown => r'TBD';
 
   @override
@@ -9849,6 +10236,15 @@
   String get previousPageTooltip => r'Trang trước';
 
   @override
+  String get remainingTextFieldCharacterCountOne => r'TBD';
+
+  @override
+  String get remainingTextFieldCharacterCountOther => r'TBD';
+
+  @override
+  String get remainingTextFieldCharacterCountZero => r'TBD';
+
+  @override
   String get reorderItemDown => r'TBD';
 
   @override
@@ -10032,6 +10428,15 @@
   String get previousPageTooltip => r'上一页';
 
   @override
+  String get remainingTextFieldCharacterCountOne => r'TBD';
+
+  @override
+  String get remainingTextFieldCharacterCountOther => r'TBD';
+
+  @override
+  String get remainingTextFieldCharacterCountZero => r'TBD';
+
+  @override
   String get reorderItemDown => r'TBD';
 
   @override
diff --git a/packages/flutter_localizations/lib/src/l10n/material_ar.arb b/packages/flutter_localizations/lib/src/l10n/material_ar.arb
index ff4b12c..bd4f0ff 100644
--- a/packages/flutter_localizations/lib/src/l10n/material_ar.arb
+++ b/packages/flutter_localizations/lib/src/l10n/material_ar.arb
@@ -51,5 +51,8 @@
   "reorderItemLeft": "TBD",
   "reorderItemRight": "TBD",
   "expandedIconTapHint": "TBD",
-  "collapsedIconTapHint": "TBD"
+  "collapsedIconTapHint": "TBD",
+  "remainingTextFieldCharacterCountZero": "TBD",
+  "remainingTextFieldCharacterCountOne": "TBD",
+  "remainingTextFieldCharacterCountOther": "TBD"
 }
diff --git a/packages/flutter_localizations/lib/src/l10n/material_bg.arb b/packages/flutter_localizations/lib/src/l10n/material_bg.arb
index 6a8da5c..095aa95 100644
--- a/packages/flutter_localizations/lib/src/l10n/material_bg.arb
+++ b/packages/flutter_localizations/lib/src/l10n/material_bg.arb
@@ -47,5 +47,8 @@
   "reorderItemLeft": "TBD",
   "reorderItemRight": "TBD",
   "expandedIconTapHint": "TBD",
-  "collapsedIconTapHint": "TBD"
+  "collapsedIconTapHint": "TBD",
+  "remainingTextFieldCharacterCountZero": "TBD",
+  "remainingTextFieldCharacterCountOne": "TBD",
+  "remainingTextFieldCharacterCountOther": "TBD"
 }
diff --git a/packages/flutter_localizations/lib/src/l10n/material_bs.arb b/packages/flutter_localizations/lib/src/l10n/material_bs.arb
index 40167b0..543a089 100644
--- a/packages/flutter_localizations/lib/src/l10n/material_bs.arb
+++ b/packages/flutter_localizations/lib/src/l10n/material_bs.arb
@@ -48,5 +48,8 @@
   "reorderItemLeft": "TBD",
   "reorderItemRight": "TBD",
   "expandedIconTapHint": "TBD",
-  "collapsedIconTapHint": "TBD"
+  "collapsedIconTapHint": "TBD",
+  "remainingTextFieldCharacterCountZero": "TBD",
+  "remainingTextFieldCharacterCountOne": "TBD",
+  "remainingTextFieldCharacterCountOther": "TBD"
 }
\ No newline at end of file
diff --git a/packages/flutter_localizations/lib/src/l10n/material_ca.arb b/packages/flutter_localizations/lib/src/l10n/material_ca.arb
index 3da3feb..4305bc5 100644
--- a/packages/flutter_localizations/lib/src/l10n/material_ca.arb
+++ b/packages/flutter_localizations/lib/src/l10n/material_ca.arb
@@ -47,5 +47,8 @@
   "reorderItemLeft": "TBD",
   "reorderItemRight": "TBD",
   "expandedIconTapHint": "TBD",
-  "collapsedIconTapHint": "TBD"
+  "collapsedIconTapHint": "TBD",
+  "remainingTextFieldCharacterCountZero": "TBD",
+  "remainingTextFieldCharacterCountOne": "TBD",
+  "remainingTextFieldCharacterCountOther": "TBD"
 }
diff --git a/packages/flutter_localizations/lib/src/l10n/material_cs.arb b/packages/flutter_localizations/lib/src/l10n/material_cs.arb
index 5e33a89..d7c5b30 100644
--- a/packages/flutter_localizations/lib/src/l10n/material_cs.arb
+++ b/packages/flutter_localizations/lib/src/l10n/material_cs.arb
@@ -49,5 +49,8 @@
   "reorderItemLeft": "TBD",
   "reorderItemRight": "TBD",
   "expandedIconTapHint": "TBD",
-  "collapsedIconTapHint": "TBD"
+  "collapsedIconTapHint": "TBD",
+  "remainingTextFieldCharacterCountZero": "TBD",
+  "remainingTextFieldCharacterCountOne": "TBD",
+  "remainingTextFieldCharacterCountOther": "TBD"
 }
diff --git a/packages/flutter_localizations/lib/src/l10n/material_da.arb b/packages/flutter_localizations/lib/src/l10n/material_da.arb
index 597f31a..52382eb 100644
--- a/packages/flutter_localizations/lib/src/l10n/material_da.arb
+++ b/packages/flutter_localizations/lib/src/l10n/material_da.arb
@@ -47,5 +47,8 @@
   "reorderItemLeft": "TBD",
   "reorderItemRight": "TBD",
   "expandedIconTapHint": "TBD",
-  "collapsedIconTapHint": "TBD"
+  "collapsedIconTapHint": "TBD",
+  "remainingTextFieldCharacterCountZero": "TBD",
+  "remainingTextFieldCharacterCountOne": "TBD",
+  "remainingTextFieldCharacterCountOther": "TBD"
 }
diff --git a/packages/flutter_localizations/lib/src/l10n/material_de.arb b/packages/flutter_localizations/lib/src/l10n/material_de.arb
index 628a594..51f1fbd 100644
--- a/packages/flutter_localizations/lib/src/l10n/material_de.arb
+++ b/packages/flutter_localizations/lib/src/l10n/material_de.arb
@@ -48,5 +48,8 @@
   "reorderItemLeft": "TBD",
   "reorderItemRight": "TBD",
   "expandedIconTapHint": "TBD",
-  "collapsedIconTapHint": "TBD"
+  "collapsedIconTapHint": "TBD",
+  "remainingTextFieldCharacterCountZero": "TBD",
+  "remainingTextFieldCharacterCountOne": "TBD",
+  "remainingTextFieldCharacterCountOther": "TBD"
 }
diff --git a/packages/flutter_localizations/lib/src/l10n/material_de_CH.arb b/packages/flutter_localizations/lib/src/l10n/material_de_CH.arb
index 3458f8d..d316d7f 100644
--- a/packages/flutter_localizations/lib/src/l10n/material_de_CH.arb
+++ b/packages/flutter_localizations/lib/src/l10n/material_de_CH.arb
@@ -47,5 +47,8 @@
   "reorderItemLeft": "TBD",
   "reorderItemRight": "TBD",
   "expandedIconTapHint": "TBD",
-  "collapsedIconTapHint": "TBD"
+  "collapsedIconTapHint": "TBD",
+  "remainingTextFieldCharacterCountZero": "TBD",
+  "remainingTextFieldCharacterCountOne": "TBD",
+  "remainingTextFieldCharacterCountOther": "TBD"
 }
diff --git a/packages/flutter_localizations/lib/src/l10n/material_el.arb b/packages/flutter_localizations/lib/src/l10n/material_el.arb
index 941be40..0e18314 100644
--- a/packages/flutter_localizations/lib/src/l10n/material_el.arb
+++ b/packages/flutter_localizations/lib/src/l10n/material_el.arb
@@ -47,5 +47,8 @@
   "reorderItemLeft": "TBD",
   "reorderItemRight": "TBD",
   "expandedIconTapHint": "TBD",
-  "collapsedIconTapHint": "TBD"
+  "collapsedIconTapHint": "TBD",
+  "remainingTextFieldCharacterCountZero": "TBD",
+  "remainingTextFieldCharacterCountOne": "TBD",
+  "remainingTextFieldCharacterCountOther": "TBD"
 }
diff --git a/packages/flutter_localizations/lib/src/l10n/material_en.arb b/packages/flutter_localizations/lib/src/l10n/material_en.arb
index 96b1d7e..d72ca74 100644
--- a/packages/flutter_localizations/lib/src/l10n/material_en.arb
+++ b/packages/flutter_localizations/lib/src/l10n/material_en.arb
@@ -245,5 +245,13 @@
   "collapsedIconTapHint": "Expand",
   "@collapsedIconTapHint": {
     "description": "The verb which describes what happens when a collapsed ExpandIcon toggle button is pressed. This is used by TalkBack on Android to replace the default hint on the accessibility action. The verb will be concatenated with a prefix string which describes how to perform the action, which by default is 'double tap to activate'. In the case of US english, this would be 'double tap to expand.' The exact phrasing of the hint will vary based on locale"
+  },
+
+  "remainingTextFieldCharacterCountZero": "No characters remaining",
+  "remainingTextFieldCharacterCountOne": "1 character remaining",
+  "remainingTextFieldCharacterCountOther": "$remainingCount characters remaining",
+  "@remainingTextFieldCharacterCount": {
+    "description": "The label for the TextField's character counter. remainingCharacters is a integer representing how many more characters the user can type into the text field before using up a given budget. All values are greater than or equal to zero.",
+    "plural": "remainingCount"
   }
 }
diff --git a/packages/flutter_localizations/lib/src/l10n/material_en_AU.arb b/packages/flutter_localizations/lib/src/l10n/material_en_AU.arb
index a9b9a8b..6e1ac6e 100644
--- a/packages/flutter_localizations/lib/src/l10n/material_en_AU.arb
+++ b/packages/flutter_localizations/lib/src/l10n/material_en_AU.arb
@@ -47,5 +47,8 @@
   "reorderItemLeft": "Move left",
   "reorderItemRight": "Move right",
   "expandedIconTapHint": "Collapse",
-  "collapsedIconTapHint": "Expand"
+  "collapsedIconTapHint": "Expand",
+  "remainingTextFieldCharacterCountZero": "No characters remaining",
+  "remainingTextFieldCharacterCountOne": "1 character remaining",
+  "remainingTextFieldCharacterCountOther": "$remainingCount characters remaining"
 }
diff --git a/packages/flutter_localizations/lib/src/l10n/material_en_CA.arb b/packages/flutter_localizations/lib/src/l10n/material_en_CA.arb
index a9b9a8b..6e1ac6e 100644
--- a/packages/flutter_localizations/lib/src/l10n/material_en_CA.arb
+++ b/packages/flutter_localizations/lib/src/l10n/material_en_CA.arb
@@ -47,5 +47,8 @@
   "reorderItemLeft": "Move left",
   "reorderItemRight": "Move right",
   "expandedIconTapHint": "Collapse",
-  "collapsedIconTapHint": "Expand"
+  "collapsedIconTapHint": "Expand",
+  "remainingTextFieldCharacterCountZero": "No characters remaining",
+  "remainingTextFieldCharacterCountOne": "1 character remaining",
+  "remainingTextFieldCharacterCountOther": "$remainingCount characters remaining"
 }
diff --git a/packages/flutter_localizations/lib/src/l10n/material_en_GB.arb b/packages/flutter_localizations/lib/src/l10n/material_en_GB.arb
index 7e60497..317a199 100644
--- a/packages/flutter_localizations/lib/src/l10n/material_en_GB.arb
+++ b/packages/flutter_localizations/lib/src/l10n/material_en_GB.arb
@@ -47,5 +47,8 @@
   "reorderItemLeft": "Move left",
   "reorderItemRight": "Move right",
   "expandedIconTapHint": "Collapse",
-  "collapsedIconTapHint": "Expand"
+  "collapsedIconTapHint": "Expand",
+  "remainingTextFieldCharacterCountZero": "No characters remaining",
+  "remainingTextFieldCharacterCountOne": "1 character remaining",
+  "remainingTextFieldCharacterCountOther": "$remainingCount characters remaining"
 }
diff --git a/packages/flutter_localizations/lib/src/l10n/material_en_IE.arb b/packages/flutter_localizations/lib/src/l10n/material_en_IE.arb
index 7e60497..317a199 100644
--- a/packages/flutter_localizations/lib/src/l10n/material_en_IE.arb
+++ b/packages/flutter_localizations/lib/src/l10n/material_en_IE.arb
@@ -47,5 +47,8 @@
   "reorderItemLeft": "Move left",
   "reorderItemRight": "Move right",
   "expandedIconTapHint": "Collapse",
-  "collapsedIconTapHint": "Expand"
+  "collapsedIconTapHint": "Expand",
+  "remainingTextFieldCharacterCountZero": "No characters remaining",
+  "remainingTextFieldCharacterCountOne": "1 character remaining",
+  "remainingTextFieldCharacterCountOther": "$remainingCount characters remaining"
 }
diff --git a/packages/flutter_localizations/lib/src/l10n/material_en_IN.arb b/packages/flutter_localizations/lib/src/l10n/material_en_IN.arb
index a9b9a8b..6e1ac6e 100644
--- a/packages/flutter_localizations/lib/src/l10n/material_en_IN.arb
+++ b/packages/flutter_localizations/lib/src/l10n/material_en_IN.arb
@@ -47,5 +47,8 @@
   "reorderItemLeft": "Move left",
   "reorderItemRight": "Move right",
   "expandedIconTapHint": "Collapse",
-  "collapsedIconTapHint": "Expand"
+  "collapsedIconTapHint": "Expand",
+  "remainingTextFieldCharacterCountZero": "No characters remaining",
+  "remainingTextFieldCharacterCountOne": "1 character remaining",
+  "remainingTextFieldCharacterCountOther": "$remainingCount characters remaining"
 }
diff --git a/packages/flutter_localizations/lib/src/l10n/material_en_SG.arb b/packages/flutter_localizations/lib/src/l10n/material_en_SG.arb
index a9b9a8b..6e1ac6e 100644
--- a/packages/flutter_localizations/lib/src/l10n/material_en_SG.arb
+++ b/packages/flutter_localizations/lib/src/l10n/material_en_SG.arb
@@ -47,5 +47,8 @@
   "reorderItemLeft": "Move left",
   "reorderItemRight": "Move right",
   "expandedIconTapHint": "Collapse",
-  "collapsedIconTapHint": "Expand"
+  "collapsedIconTapHint": "Expand",
+  "remainingTextFieldCharacterCountZero": "No characters remaining",
+  "remainingTextFieldCharacterCountOne": "1 character remaining",
+  "remainingTextFieldCharacterCountOther": "$remainingCount characters remaining"
 }
diff --git a/packages/flutter_localizations/lib/src/l10n/material_en_ZA.arb b/packages/flutter_localizations/lib/src/l10n/material_en_ZA.arb
index 7e60497..317a199 100644
--- a/packages/flutter_localizations/lib/src/l10n/material_en_ZA.arb
+++ b/packages/flutter_localizations/lib/src/l10n/material_en_ZA.arb
@@ -47,5 +47,8 @@
   "reorderItemLeft": "Move left",
   "reorderItemRight": "Move right",
   "expandedIconTapHint": "Collapse",
-  "collapsedIconTapHint": "Expand"
+  "collapsedIconTapHint": "Expand",
+  "remainingTextFieldCharacterCountZero": "No characters remaining",
+  "remainingTextFieldCharacterCountOne": "1 character remaining",
+  "remainingTextFieldCharacterCountOther": "$remainingCount characters remaining"
 }
diff --git a/packages/flutter_localizations/lib/src/l10n/material_es.arb b/packages/flutter_localizations/lib/src/l10n/material_es.arb
index 64ebd34..33eaa87 100644
--- a/packages/flutter_localizations/lib/src/l10n/material_es.arb
+++ b/packages/flutter_localizations/lib/src/l10n/material_es.arb
@@ -48,5 +48,8 @@
   "reorderItemLeft": "TBD",
   "reorderItemRight": "TBD",
   "expandedIconTapHint": "TBD",
-  "collapsedIconTapHint": "TBD"
+  "collapsedIconTapHint": "TBD",
+  "remainingTextFieldCharacterCountZero": "TBD",
+  "remainingTextFieldCharacterCountOne": "TBD",
+  "remainingTextFieldCharacterCountOther": "TBD"
 }
diff --git a/packages/flutter_localizations/lib/src/l10n/material_es_419.arb b/packages/flutter_localizations/lib/src/l10n/material_es_419.arb
index 54c13b5..1dd8d70 100644
--- a/packages/flutter_localizations/lib/src/l10n/material_es_419.arb
+++ b/packages/flutter_localizations/lib/src/l10n/material_es_419.arb
@@ -47,5 +47,8 @@
   "reorderItemLeft": "TBD",
   "reorderItemRight": "TBD",
   "expandedIconTapHint": "TBD",
-  "collapsedIconTapHint": "TBD"
+  "collapsedIconTapHint": "TBD",
+  "remainingTextFieldCharacterCountZero": "TBD",
+  "remainingTextFieldCharacterCountOne": "TBD",
+  "remainingTextFieldCharacterCountOther": "TBD"
 }
diff --git a/packages/flutter_localizations/lib/src/l10n/material_es_AR.arb b/packages/flutter_localizations/lib/src/l10n/material_es_AR.arb
index 54c13b5..1dd8d70 100644
--- a/packages/flutter_localizations/lib/src/l10n/material_es_AR.arb
+++ b/packages/flutter_localizations/lib/src/l10n/material_es_AR.arb
@@ -47,5 +47,8 @@
   "reorderItemLeft": "TBD",
   "reorderItemRight": "TBD",
   "expandedIconTapHint": "TBD",
-  "collapsedIconTapHint": "TBD"
+  "collapsedIconTapHint": "TBD",
+  "remainingTextFieldCharacterCountZero": "TBD",
+  "remainingTextFieldCharacterCountOne": "TBD",
+  "remainingTextFieldCharacterCountOther": "TBD"
 }
diff --git a/packages/flutter_localizations/lib/src/l10n/material_es_BO.arb b/packages/flutter_localizations/lib/src/l10n/material_es_BO.arb
index d11dc3b..1b494e3 100644
--- a/packages/flutter_localizations/lib/src/l10n/material_es_BO.arb
+++ b/packages/flutter_localizations/lib/src/l10n/material_es_BO.arb
@@ -41,5 +41,8 @@
   "alertDialogLabel": "Alerta",
   "searchFieldLabel": "Buscar",
   "expandedIconTapHint": "TBD",
-  "collapsedIconTapHint": "TBD"
+  "collapsedIconTapHint": "TBD",
+  "remainingTextFieldCharacterCountZero": "TBD",
+  "remainingTextFieldCharacterCountOne": "TBD",
+  "remainingTextFieldCharacterCountOther": "TBD"
 }
diff --git a/packages/flutter_localizations/lib/src/l10n/material_es_CL.arb b/packages/flutter_localizations/lib/src/l10n/material_es_CL.arb
index d11dc3b..1b494e3 100644
--- a/packages/flutter_localizations/lib/src/l10n/material_es_CL.arb
+++ b/packages/flutter_localizations/lib/src/l10n/material_es_CL.arb
@@ -41,5 +41,8 @@
   "alertDialogLabel": "Alerta",
   "searchFieldLabel": "Buscar",
   "expandedIconTapHint": "TBD",
-  "collapsedIconTapHint": "TBD"
+  "collapsedIconTapHint": "TBD",
+  "remainingTextFieldCharacterCountZero": "TBD",
+  "remainingTextFieldCharacterCountOne": "TBD",
+  "remainingTextFieldCharacterCountOther": "TBD"
 }
diff --git a/packages/flutter_localizations/lib/src/l10n/material_es_CO.arb b/packages/flutter_localizations/lib/src/l10n/material_es_CO.arb
index d11dc3b..1b494e3 100644
--- a/packages/flutter_localizations/lib/src/l10n/material_es_CO.arb
+++ b/packages/flutter_localizations/lib/src/l10n/material_es_CO.arb
@@ -41,5 +41,8 @@
   "alertDialogLabel": "Alerta",
   "searchFieldLabel": "Buscar",
   "expandedIconTapHint": "TBD",
-  "collapsedIconTapHint": "TBD"
+  "collapsedIconTapHint": "TBD",
+  "remainingTextFieldCharacterCountZero": "TBD",
+  "remainingTextFieldCharacterCountOne": "TBD",
+  "remainingTextFieldCharacterCountOther": "TBD"
 }
diff --git a/packages/flutter_localizations/lib/src/l10n/material_es_CR.arb b/packages/flutter_localizations/lib/src/l10n/material_es_CR.arb
index d11dc3b..1b494e3 100644
--- a/packages/flutter_localizations/lib/src/l10n/material_es_CR.arb
+++ b/packages/flutter_localizations/lib/src/l10n/material_es_CR.arb
@@ -41,5 +41,8 @@
   "alertDialogLabel": "Alerta",
   "searchFieldLabel": "Buscar",
   "expandedIconTapHint": "TBD",
-  "collapsedIconTapHint": "TBD"
+  "collapsedIconTapHint": "TBD",
+  "remainingTextFieldCharacterCountZero": "TBD",
+  "remainingTextFieldCharacterCountOne": "TBD",
+  "remainingTextFieldCharacterCountOther": "TBD"
 }
diff --git a/packages/flutter_localizations/lib/src/l10n/material_es_DO.arb b/packages/flutter_localizations/lib/src/l10n/material_es_DO.arb
index d11dc3b..1b494e3 100644
--- a/packages/flutter_localizations/lib/src/l10n/material_es_DO.arb
+++ b/packages/flutter_localizations/lib/src/l10n/material_es_DO.arb
@@ -41,5 +41,8 @@
   "alertDialogLabel": "Alerta",
   "searchFieldLabel": "Buscar",
   "expandedIconTapHint": "TBD",
-  "collapsedIconTapHint": "TBD"
+  "collapsedIconTapHint": "TBD",
+  "remainingTextFieldCharacterCountZero": "TBD",
+  "remainingTextFieldCharacterCountOne": "TBD",
+  "remainingTextFieldCharacterCountOther": "TBD"
 }
diff --git a/packages/flutter_localizations/lib/src/l10n/material_es_EC.arb b/packages/flutter_localizations/lib/src/l10n/material_es_EC.arb
index d11dc3b..1b494e3 100644
--- a/packages/flutter_localizations/lib/src/l10n/material_es_EC.arb
+++ b/packages/flutter_localizations/lib/src/l10n/material_es_EC.arb
@@ -41,5 +41,8 @@
   "alertDialogLabel": "Alerta",
   "searchFieldLabel": "Buscar",
   "expandedIconTapHint": "TBD",
-  "collapsedIconTapHint": "TBD"
+  "collapsedIconTapHint": "TBD",
+  "remainingTextFieldCharacterCountZero": "TBD",
+  "remainingTextFieldCharacterCountOne": "TBD",
+  "remainingTextFieldCharacterCountOther": "TBD"
 }
diff --git a/packages/flutter_localizations/lib/src/l10n/material_es_GT.arb b/packages/flutter_localizations/lib/src/l10n/material_es_GT.arb
index d11dc3b..1b494e3 100644
--- a/packages/flutter_localizations/lib/src/l10n/material_es_GT.arb
+++ b/packages/flutter_localizations/lib/src/l10n/material_es_GT.arb
@@ -41,5 +41,8 @@
   "alertDialogLabel": "Alerta",
   "searchFieldLabel": "Buscar",
   "expandedIconTapHint": "TBD",
-  "collapsedIconTapHint": "TBD"
+  "collapsedIconTapHint": "TBD",
+  "remainingTextFieldCharacterCountZero": "TBD",
+  "remainingTextFieldCharacterCountOne": "TBD",
+  "remainingTextFieldCharacterCountOther": "TBD"
 }
diff --git a/packages/flutter_localizations/lib/src/l10n/material_es_HN.arb b/packages/flutter_localizations/lib/src/l10n/material_es_HN.arb
index d11dc3b..1b494e3 100644
--- a/packages/flutter_localizations/lib/src/l10n/material_es_HN.arb
+++ b/packages/flutter_localizations/lib/src/l10n/material_es_HN.arb
@@ -41,5 +41,8 @@
   "alertDialogLabel": "Alerta",
   "searchFieldLabel": "Buscar",
   "expandedIconTapHint": "TBD",
-  "collapsedIconTapHint": "TBD"
+  "collapsedIconTapHint": "TBD",
+  "remainingTextFieldCharacterCountZero": "TBD",
+  "remainingTextFieldCharacterCountOne": "TBD",
+  "remainingTextFieldCharacterCountOther": "TBD"
 }
diff --git a/packages/flutter_localizations/lib/src/l10n/material_es_MX.arb b/packages/flutter_localizations/lib/src/l10n/material_es_MX.arb
index d11dc3b..1b494e3 100644
--- a/packages/flutter_localizations/lib/src/l10n/material_es_MX.arb
+++ b/packages/flutter_localizations/lib/src/l10n/material_es_MX.arb
@@ -41,5 +41,8 @@
   "alertDialogLabel": "Alerta",
   "searchFieldLabel": "Buscar",
   "expandedIconTapHint": "TBD",
-  "collapsedIconTapHint": "TBD"
+  "collapsedIconTapHint": "TBD",
+  "remainingTextFieldCharacterCountZero": "TBD",
+  "remainingTextFieldCharacterCountOne": "TBD",
+  "remainingTextFieldCharacterCountOther": "TBD"
 }
diff --git a/packages/flutter_localizations/lib/src/l10n/material_es_NI.arb b/packages/flutter_localizations/lib/src/l10n/material_es_NI.arb
index d11dc3b..1b494e3 100644
--- a/packages/flutter_localizations/lib/src/l10n/material_es_NI.arb
+++ b/packages/flutter_localizations/lib/src/l10n/material_es_NI.arb
@@ -41,5 +41,8 @@
   "alertDialogLabel": "Alerta",
   "searchFieldLabel": "Buscar",
   "expandedIconTapHint": "TBD",
-  "collapsedIconTapHint": "TBD"
+  "collapsedIconTapHint": "TBD",
+  "remainingTextFieldCharacterCountZero": "TBD",
+  "remainingTextFieldCharacterCountOne": "TBD",
+  "remainingTextFieldCharacterCountOther": "TBD"
 }
diff --git a/packages/flutter_localizations/lib/src/l10n/material_es_PA.arb b/packages/flutter_localizations/lib/src/l10n/material_es_PA.arb
index d11dc3b..1b494e3 100644
--- a/packages/flutter_localizations/lib/src/l10n/material_es_PA.arb
+++ b/packages/flutter_localizations/lib/src/l10n/material_es_PA.arb
@@ -41,5 +41,8 @@
   "alertDialogLabel": "Alerta",
   "searchFieldLabel": "Buscar",
   "expandedIconTapHint": "TBD",
-  "collapsedIconTapHint": "TBD"
+  "collapsedIconTapHint": "TBD",
+  "remainingTextFieldCharacterCountZero": "TBD",
+  "remainingTextFieldCharacterCountOne": "TBD",
+  "remainingTextFieldCharacterCountOther": "TBD"
 }
diff --git a/packages/flutter_localizations/lib/src/l10n/material_es_PE.arb b/packages/flutter_localizations/lib/src/l10n/material_es_PE.arb
index d11dc3b..1b494e3 100644
--- a/packages/flutter_localizations/lib/src/l10n/material_es_PE.arb
+++ b/packages/flutter_localizations/lib/src/l10n/material_es_PE.arb
@@ -41,5 +41,8 @@
   "alertDialogLabel": "Alerta",
   "searchFieldLabel": "Buscar",
   "expandedIconTapHint": "TBD",
-  "collapsedIconTapHint": "TBD"
+  "collapsedIconTapHint": "TBD",
+  "remainingTextFieldCharacterCountZero": "TBD",
+  "remainingTextFieldCharacterCountOne": "TBD",
+  "remainingTextFieldCharacterCountOther": "TBD"
 }
diff --git a/packages/flutter_localizations/lib/src/l10n/material_es_PR.arb b/packages/flutter_localizations/lib/src/l10n/material_es_PR.arb
index d11dc3b..1b494e3 100644
--- a/packages/flutter_localizations/lib/src/l10n/material_es_PR.arb
+++ b/packages/flutter_localizations/lib/src/l10n/material_es_PR.arb
@@ -41,5 +41,8 @@
   "alertDialogLabel": "Alerta",
   "searchFieldLabel": "Buscar",
   "expandedIconTapHint": "TBD",
-  "collapsedIconTapHint": "TBD"
+  "collapsedIconTapHint": "TBD",
+  "remainingTextFieldCharacterCountZero": "TBD",
+  "remainingTextFieldCharacterCountOne": "TBD",
+  "remainingTextFieldCharacterCountOther": "TBD"
 }
diff --git a/packages/flutter_localizations/lib/src/l10n/material_es_PY.arb b/packages/flutter_localizations/lib/src/l10n/material_es_PY.arb
index d11dc3b..1b494e3 100644
--- a/packages/flutter_localizations/lib/src/l10n/material_es_PY.arb
+++ b/packages/flutter_localizations/lib/src/l10n/material_es_PY.arb
@@ -41,5 +41,8 @@
   "alertDialogLabel": "Alerta",
   "searchFieldLabel": "Buscar",
   "expandedIconTapHint": "TBD",
-  "collapsedIconTapHint": "TBD"
+  "collapsedIconTapHint": "TBD",
+  "remainingTextFieldCharacterCountZero": "TBD",
+  "remainingTextFieldCharacterCountOne": "TBD",
+  "remainingTextFieldCharacterCountOther": "TBD"
 }
diff --git a/packages/flutter_localizations/lib/src/l10n/material_es_SV.arb b/packages/flutter_localizations/lib/src/l10n/material_es_SV.arb
index d11dc3b..1b494e3 100644
--- a/packages/flutter_localizations/lib/src/l10n/material_es_SV.arb
+++ b/packages/flutter_localizations/lib/src/l10n/material_es_SV.arb
@@ -41,5 +41,8 @@
   "alertDialogLabel": "Alerta",
   "searchFieldLabel": "Buscar",
   "expandedIconTapHint": "TBD",
-  "collapsedIconTapHint": "TBD"
+  "collapsedIconTapHint": "TBD",
+  "remainingTextFieldCharacterCountZero": "TBD",
+  "remainingTextFieldCharacterCountOne": "TBD",
+  "remainingTextFieldCharacterCountOther": "TBD"
 }
diff --git a/packages/flutter_localizations/lib/src/l10n/material_es_US.arb b/packages/flutter_localizations/lib/src/l10n/material_es_US.arb
index 068a8d3..4c9be81 100644
--- a/packages/flutter_localizations/lib/src/l10n/material_es_US.arb
+++ b/packages/flutter_localizations/lib/src/l10n/material_es_US.arb
@@ -41,5 +41,8 @@
   "alertDialogLabel": "Alerta",
   "searchFieldLabel": "Buscar",
   "expandedIconTapHint": "TBD",
-  "collapsedIconTapHint": "TBD"
+  "collapsedIconTapHint": "TBD",
+  "remainingTextFieldCharacterCountZero": "TBD",
+  "remainingTextFieldCharacterCountOne": "TBD",
+  "remainingTextFieldCharacterCountOther": "TBD"
 }
diff --git a/packages/flutter_localizations/lib/src/l10n/material_es_UY.arb b/packages/flutter_localizations/lib/src/l10n/material_es_UY.arb
index d11dc3b..1b494e3 100644
--- a/packages/flutter_localizations/lib/src/l10n/material_es_UY.arb
+++ b/packages/flutter_localizations/lib/src/l10n/material_es_UY.arb
@@ -41,5 +41,8 @@
   "alertDialogLabel": "Alerta",
   "searchFieldLabel": "Buscar",
   "expandedIconTapHint": "TBD",
-  "collapsedIconTapHint": "TBD"
+  "collapsedIconTapHint": "TBD",
+  "remainingTextFieldCharacterCountZero": "TBD",
+  "remainingTextFieldCharacterCountOne": "TBD",
+  "remainingTextFieldCharacterCountOther": "TBD"
 }
diff --git a/packages/flutter_localizations/lib/src/l10n/material_es_VE.arb b/packages/flutter_localizations/lib/src/l10n/material_es_VE.arb
index d11dc3b..1b494e3 100644
--- a/packages/flutter_localizations/lib/src/l10n/material_es_VE.arb
+++ b/packages/flutter_localizations/lib/src/l10n/material_es_VE.arb
@@ -41,5 +41,8 @@
   "alertDialogLabel": "Alerta",
   "searchFieldLabel": "Buscar",
   "expandedIconTapHint": "TBD",
-  "collapsedIconTapHint": "TBD"
+  "collapsedIconTapHint": "TBD",
+  "remainingTextFieldCharacterCountZero": "TBD",
+  "remainingTextFieldCharacterCountOne": "TBD",
+  "remainingTextFieldCharacterCountOther": "TBD"
 }
diff --git a/packages/flutter_localizations/lib/src/l10n/material_et.arb b/packages/flutter_localizations/lib/src/l10n/material_et.arb
index 661be8f..b50f508 100644
--- a/packages/flutter_localizations/lib/src/l10n/material_et.arb
+++ b/packages/flutter_localizations/lib/src/l10n/material_et.arb
@@ -47,5 +47,8 @@
   "reorderItemLeft": "TBD",
   "reorderItemRight": "TBD",
   "expandedIconTapHint": "TBD",
-  "collapsedIconTapHint": "TBD"
+  "collapsedIconTapHint": "TBD",
+  "remainingTextFieldCharacterCountZero": "TBD",
+  "remainingTextFieldCharacterCountOne": "TBD",
+  "remainingTextFieldCharacterCountOther": "TBD"
 }
diff --git a/packages/flutter_localizations/lib/src/l10n/material_fa.arb b/packages/flutter_localizations/lib/src/l10n/material_fa.arb
index 111fa1d..922f012 100644
--- a/packages/flutter_localizations/lib/src/l10n/material_fa.arb
+++ b/packages/flutter_localizations/lib/src/l10n/material_fa.arb
@@ -47,5 +47,8 @@
   "reorderItemLeft": "TBD",
   "reorderItemRight": "TBD",
   "expandedIconTapHint": "TBD",
-  "collapsedIconTapHint": "TBD"
+  "collapsedIconTapHint": "TBD",
+  "remainingTextFieldCharacterCountZero": "TBD",
+  "remainingTextFieldCharacterCountOne": "TBD",
+  "remainingTextFieldCharacterCountOther": "TBD"
 }
diff --git a/packages/flutter_localizations/lib/src/l10n/material_fi.arb b/packages/flutter_localizations/lib/src/l10n/material_fi.arb
index bb4fcd5..b0d9cf7 100644
--- a/packages/flutter_localizations/lib/src/l10n/material_fi.arb
+++ b/packages/flutter_localizations/lib/src/l10n/material_fi.arb
@@ -47,5 +47,8 @@
   "reorderItemLeft": "TBD",
   "reorderItemRight": "TBD",
   "expandedIconTapHint": "TBD",
-  "collapsedIconTapHint": "TBD"
+  "collapsedIconTapHint": "TBD",
+  "remainingTextFieldCharacterCountZero": "TBD",
+  "remainingTextFieldCharacterCountOne": "TBD",
+  "remainingTextFieldCharacterCountOther": "TBD"
 }
diff --git a/packages/flutter_localizations/lib/src/l10n/material_fil.arb b/packages/flutter_localizations/lib/src/l10n/material_fil.arb
index 2773145..9c23985 100644
--- a/packages/flutter_localizations/lib/src/l10n/material_fil.arb
+++ b/packages/flutter_localizations/lib/src/l10n/material_fil.arb
@@ -47,5 +47,8 @@
   "reorderItemLeft": "TBD",
   "reorderItemRight": "TBD",
   "expandedIconTapHint": "TBD",
-  "collapsedIconTapHint": "TBD"
+  "collapsedIconTapHint": "TBD",
+  "remainingTextFieldCharacterCountZero": "TBD",
+  "remainingTextFieldCharacterCountOne": "TBD",
+  "remainingTextFieldCharacterCountOther": "TBD"
 }
diff --git a/packages/flutter_localizations/lib/src/l10n/material_fr.arb b/packages/flutter_localizations/lib/src/l10n/material_fr.arb
index b399faf..487e7a9 100644
--- a/packages/flutter_localizations/lib/src/l10n/material_fr.arb
+++ b/packages/flutter_localizations/lib/src/l10n/material_fr.arb
@@ -48,5 +48,8 @@
   "reorderItemLeft": "TBD",
   "reorderItemRight": "TBD",
   "expandedIconTapHint": "TBD",
-  "collapsedIconTapHint": "TBD"
+  "collapsedIconTapHint": "TBD",
+  "remainingTextFieldCharacterCountZero": "TBD",
+  "remainingTextFieldCharacterCountOne": "TBD",
+  "remainingTextFieldCharacterCountOther": "TBD"
 }
diff --git a/packages/flutter_localizations/lib/src/l10n/material_gsw.arb b/packages/flutter_localizations/lib/src/l10n/material_gsw.arb
index c4c4b84..ee97a5e 100644
--- a/packages/flutter_localizations/lib/src/l10n/material_gsw.arb
+++ b/packages/flutter_localizations/lib/src/l10n/material_gsw.arb
@@ -47,5 +47,8 @@
   "reorderItemLeft": "TBD",
   "reorderItemRight": "TBD",
   "expandedIconTapHint": "TBD",
-  "collapsedIconTapHint": "TBD"
+  "collapsedIconTapHint": "TBD",
+  "remainingTextFieldCharacterCountZero": "TBD",
+  "remainingTextFieldCharacterCountOne": "TBD",
+  "remainingTextFieldCharacterCountOther": "TBD"
 }
diff --git a/packages/flutter_localizations/lib/src/l10n/material_he.arb b/packages/flutter_localizations/lib/src/l10n/material_he.arb
index 55596dc..4c44f84 100644
--- a/packages/flutter_localizations/lib/src/l10n/material_he.arb
+++ b/packages/flutter_localizations/lib/src/l10n/material_he.arb
@@ -49,5 +49,8 @@
   "reorderItemLeft": "TBD",
   "reorderItemRight": "TBD",
   "expandedIconTapHint": "TBD",
-  "collapsedIconTapHint": "TBD"
+  "collapsedIconTapHint": "TBD",
+  "remainingTextFieldCharacterCountZero": "TBD",
+  "remainingTextFieldCharacterCountOne": "TBD",
+  "remainingTextFieldCharacterCountOther": "TBD"
 }
diff --git a/packages/flutter_localizations/lib/src/l10n/material_hi.arb b/packages/flutter_localizations/lib/src/l10n/material_hi.arb
index 64de674..b85f2da 100644
--- a/packages/flutter_localizations/lib/src/l10n/material_hi.arb
+++ b/packages/flutter_localizations/lib/src/l10n/material_hi.arb
@@ -47,5 +47,8 @@
   "reorderItemLeft": "TBD",
   "reorderItemRight": "TBD",
   "expandedIconTapHint": "TBD",
-  "collapsedIconTapHint": "TBD"
+  "collapsedIconTapHint": "TBD",
+  "remainingTextFieldCharacterCountZero": "TBD",
+  "remainingTextFieldCharacterCountOne": "TBD",
+  "remainingTextFieldCharacterCountOther": "TBD"
 }
diff --git a/packages/flutter_localizations/lib/src/l10n/material_hr.arb b/packages/flutter_localizations/lib/src/l10n/material_hr.arb
index 6a3e380..c7ac2f2 100644
--- a/packages/flutter_localizations/lib/src/l10n/material_hr.arb
+++ b/packages/flutter_localizations/lib/src/l10n/material_hr.arb
@@ -48,5 +48,8 @@
   "reorderItemLeft": "TBD",
   "reorderItemRight": "TBD",
   "expandedIconTapHint": "TBD",
-  "collapsedIconTapHint": "TBD"
+  "collapsedIconTapHint": "TBD",
+  "remainingTextFieldCharacterCountZero": "TBD",
+  "remainingTextFieldCharacterCountOne": "TBD",
+  "remainingTextFieldCharacterCountOther": "TBD"
 }
diff --git a/packages/flutter_localizations/lib/src/l10n/material_hu.arb b/packages/flutter_localizations/lib/src/l10n/material_hu.arb
index feb0731..970076e 100644
--- a/packages/flutter_localizations/lib/src/l10n/material_hu.arb
+++ b/packages/flutter_localizations/lib/src/l10n/material_hu.arb
@@ -47,5 +47,8 @@
   "reorderItemLeft": "TBD",
   "reorderItemRight": "TBD",
   "expandedIconTapHint": "TBD",
-  "collapsedIconTapHint": "TBD"
+  "collapsedIconTapHint": "TBD",
+  "remainingTextFieldCharacterCountZero": "TBD",
+  "remainingTextFieldCharacterCountOne": "TBD",
+  "remainingTextFieldCharacterCountOther": "TBD"
 }
diff --git a/packages/flutter_localizations/lib/src/l10n/material_id.arb b/packages/flutter_localizations/lib/src/l10n/material_id.arb
index 00eb556..b72ff7a 100644
--- a/packages/flutter_localizations/lib/src/l10n/material_id.arb
+++ b/packages/flutter_localizations/lib/src/l10n/material_id.arb
@@ -47,5 +47,8 @@
   "reorderItemLeft": "TBD",
   "reorderItemRight": "TBD",
   "expandedIconTapHint": "TBD",
-  "collapsedIconTapHint": "TBD"
+  "collapsedIconTapHint": "TBD",
+  "remainingTextFieldCharacterCountZero": "TBD",
+  "remainingTextFieldCharacterCountOne": "TBD",
+  "remainingTextFieldCharacterCountOther": "TBD"
 }
diff --git a/packages/flutter_localizations/lib/src/l10n/material_it.arb b/packages/flutter_localizations/lib/src/l10n/material_it.arb
index 95974f6..1fe717c 100644
--- a/packages/flutter_localizations/lib/src/l10n/material_it.arb
+++ b/packages/flutter_localizations/lib/src/l10n/material_it.arb
@@ -47,5 +47,8 @@
   "reorderItemLeft": "TBD",
   "reorderItemRight": "TBD",
   "expandedIconTapHint": "TBD",
-  "collapsedIconTapHint": "TBD"
+  "collapsedIconTapHint": "TBD",
+  "remainingTextFieldCharacterCountZero": "TBD",
+  "remainingTextFieldCharacterCountOne": "TBD",
+  "remainingTextFieldCharacterCountOther": "TBD"
 }
diff --git a/packages/flutter_localizations/lib/src/l10n/material_ja.arb b/packages/flutter_localizations/lib/src/l10n/material_ja.arb
index 8c93f50..63068a6 100644
--- a/packages/flutter_localizations/lib/src/l10n/material_ja.arb
+++ b/packages/flutter_localizations/lib/src/l10n/material_ja.arb
@@ -47,5 +47,8 @@
   "reorderItemLeft": "TBD",
   "reorderItemRight": "TBD",
   "expandedIconTapHint": "TBD",
-  "collapsedIconTapHint": "TBD"
+  "collapsedIconTapHint": "TBD",
+  "remainingTextFieldCharacterCountZero": "TBD",
+  "remainingTextFieldCharacterCountOne": "TBD",
+  "remainingTextFieldCharacterCountOther": "TBD"
 }
diff --git a/packages/flutter_localizations/lib/src/l10n/material_ko.arb b/packages/flutter_localizations/lib/src/l10n/material_ko.arb
index c988e82..a830ae4 100644
--- a/packages/flutter_localizations/lib/src/l10n/material_ko.arb
+++ b/packages/flutter_localizations/lib/src/l10n/material_ko.arb
@@ -47,5 +47,8 @@
   "reorderItemLeft": "TBD",
   "reorderItemRight": "TBD",
   "expandedIconTapHint": "TBD",
-  "collapsedIconTapHint": "TBD"
+  "collapsedIconTapHint": "TBD",
+  "remainingTextFieldCharacterCountZero": "TBD",
+  "remainingTextFieldCharacterCountOne": "TBD",
+  "remainingTextFieldCharacterCountOther": "TBD"
 }
diff --git a/packages/flutter_localizations/lib/src/l10n/material_lt.arb b/packages/flutter_localizations/lib/src/l10n/material_lt.arb
index c2bfc86..d7135aa 100644
--- a/packages/flutter_localizations/lib/src/l10n/material_lt.arb
+++ b/packages/flutter_localizations/lib/src/l10n/material_lt.arb
@@ -49,5 +49,8 @@
   "reorderItemLeft": "TBD",
   "reorderItemRight": "TBD",
   "expandedIconTapHint": "TBD",
-  "collapsedIconTapHint": "TBD"
+  "collapsedIconTapHint": "TBD",
+  "remainingTextFieldCharacterCountZero": "TBD",
+  "remainingTextFieldCharacterCountOne": "TBD",
+  "remainingTextFieldCharacterCountOther": "TBD"
 }
diff --git a/packages/flutter_localizations/lib/src/l10n/material_lv.arb b/packages/flutter_localizations/lib/src/l10n/material_lv.arb
index aeb8397..cb8aded 100644
--- a/packages/flutter_localizations/lib/src/l10n/material_lv.arb
+++ b/packages/flutter_localizations/lib/src/l10n/material_lv.arb
@@ -48,5 +48,8 @@
   "reorderItemLeft": "TBD",
   "reorderItemRight": "TBD",
   "expandedIconTapHint": "TBD",
-  "collapsedIconTapHint": "TBD"
+  "collapsedIconTapHint": "TBD",
+  "remainingTextFieldCharacterCountZero": "TBD",
+  "remainingTextFieldCharacterCountOne": "TBD",
+  "remainingTextFieldCharacterCountOther": "TBD"
 }
diff --git a/packages/flutter_localizations/lib/src/l10n/material_ms.arb b/packages/flutter_localizations/lib/src/l10n/material_ms.arb
index a49f789..0ae5a51 100644
--- a/packages/flutter_localizations/lib/src/l10n/material_ms.arb
+++ b/packages/flutter_localizations/lib/src/l10n/material_ms.arb
@@ -48,5 +48,8 @@
   "reorderItemLeft": "TBD",
   "reorderItemRight": "TBD",
   "expandedIconTapHint": "TBD",
-  "collapsedIconTapHint": "TBD"
+  "collapsedIconTapHint": "TBD",
+  "remainingTextFieldCharacterCountZero": "TBD",
+  "remainingTextFieldCharacterCountOne": "TBD",
+  "remainingTextFieldCharacterCountOther": "TBD"
 }
diff --git a/packages/flutter_localizations/lib/src/l10n/material_nb.arb b/packages/flutter_localizations/lib/src/l10n/material_nb.arb
index 3abe4f9..0f53ec2 100644
--- a/packages/flutter_localizations/lib/src/l10n/material_nb.arb
+++ b/packages/flutter_localizations/lib/src/l10n/material_nb.arb
@@ -47,5 +47,8 @@
   "reorderItemLeft": "TBD",
   "reorderItemRight": "TBD",
   "expandedIconTapHint": "TBD",
-  "collapsedIconTapHint": "TBD"
+  "collapsedIconTapHint": "TBD",
+  "remainingTextFieldCharacterCountZero": "TBD",
+  "remainingTextFieldCharacterCountOne": "TBD",
+  "remainingTextFieldCharacterCountOther": "TBD"
 }
diff --git a/packages/flutter_localizations/lib/src/l10n/material_nl.arb b/packages/flutter_localizations/lib/src/l10n/material_nl.arb
index 41938ef..6d59b31 100644
--- a/packages/flutter_localizations/lib/src/l10n/material_nl.arb
+++ b/packages/flutter_localizations/lib/src/l10n/material_nl.arb
@@ -47,5 +47,8 @@
   "reorderItemLeft": "TBD",
   "reorderItemRight": "TBD",
   "expandedIconTapHint": "TBD",
-  "collapsedIconTapHint": "TBD"
+  "collapsedIconTapHint": "TBD",
+  "remainingTextFieldCharacterCountZero": "TBD",
+  "remainingTextFieldCharacterCountOne": "TBD",
+  "remainingTextFieldCharacterCountOther": "TBD"
 }
diff --git a/packages/flutter_localizations/lib/src/l10n/material_pl.arb b/packages/flutter_localizations/lib/src/l10n/material_pl.arb
index eafdf4f..e88dcc3 100644
--- a/packages/flutter_localizations/lib/src/l10n/material_pl.arb
+++ b/packages/flutter_localizations/lib/src/l10n/material_pl.arb
@@ -49,5 +49,8 @@
   "reorderItemLeft": "TBD",
   "reorderItemRight": "TBD",
   "expandedIconTapHint": "TBD",
-  "collapsedIconTapHint": "TBD"
+  "collapsedIconTapHint": "TBD",
+  "remainingTextFieldCharacterCountZero": "TBD",
+  "remainingTextFieldCharacterCountOne": "TBD",
+  "remainingTextFieldCharacterCountOther": "TBD"
 }
diff --git a/packages/flutter_localizations/lib/src/l10n/material_ps.arb b/packages/flutter_localizations/lib/src/l10n/material_ps.arb
index 75b8e88..215aa57 100644
--- a/packages/flutter_localizations/lib/src/l10n/material_ps.arb
+++ b/packages/flutter_localizations/lib/src/l10n/material_ps.arb
@@ -46,5 +46,8 @@
   "reorderItemLeft": "TBD",
   "reorderItemRight": "TBD",
   "expandedIconTapHint": "TBD",
-  "collapsedIconTapHint": "TBD"
+  "collapsedIconTapHint": "TBD",
+  "remainingTextFieldCharacterCountZero": "TBD",
+  "remainingTextFieldCharacterCountOne": "TBD",
+  "remainingTextFieldCharacterCountOther": "TBD"
 }
diff --git a/packages/flutter_localizations/lib/src/l10n/material_pt.arb b/packages/flutter_localizations/lib/src/l10n/material_pt.arb
index 96ea56d..01dd2de 100644
--- a/packages/flutter_localizations/lib/src/l10n/material_pt.arb
+++ b/packages/flutter_localizations/lib/src/l10n/material_pt.arb
@@ -49,5 +49,8 @@
   "reorderItemLeft": "TBD",
   "reorderItemRight": "TBD",
   "expandedIconTapHint": "TBD",
-  "collapsedIconTapHint": "TBD"
+  "collapsedIconTapHint": "TBD",
+  "remainingTextFieldCharacterCountZero": "TBD",
+  "remainingTextFieldCharacterCountOne": "TBD",
+  "remainingTextFieldCharacterCountOther": "TBD"
 }
diff --git a/packages/flutter_localizations/lib/src/l10n/material_pt_PT.arb b/packages/flutter_localizations/lib/src/l10n/material_pt_PT.arb
index 15ab169..36cbc99 100644
--- a/packages/flutter_localizations/lib/src/l10n/material_pt_PT.arb
+++ b/packages/flutter_localizations/lib/src/l10n/material_pt_PT.arb
@@ -47,5 +47,8 @@
   "reorderItemLeft": "TBD",
   "reorderItemRight": "TBD",
   "expandedIconTapHint": "TBD",
-  "collapsedIconTapHint": "TBD"
+  "collapsedIconTapHint": "TBD",
+  "remainingTextFieldCharacterCountZero": "TBD",
+  "remainingTextFieldCharacterCountOne": "TBD",
+  "remainingTextFieldCharacterCountOther": "TBD"
 }
diff --git a/packages/flutter_localizations/lib/src/l10n/material_ro.arb b/packages/flutter_localizations/lib/src/l10n/material_ro.arb
index 8a3d0e0..6e9b7fa 100644
--- a/packages/flutter_localizations/lib/src/l10n/material_ro.arb
+++ b/packages/flutter_localizations/lib/src/l10n/material_ro.arb
@@ -49,5 +49,8 @@
   "reorderItemLeft": "TBD",
   "reorderItemRight": "TBD",
   "expandedIconTapHint": "TBD",
-  "collapsedIconTapHint": "TBD"
+  "collapsedIconTapHint": "TBD",
+  "remainingTextFieldCharacterCountZero": "TBD",
+  "remainingTextFieldCharacterCountOne": "TBD",
+  "remainingTextFieldCharacterCountOther": "TBD"
 }
diff --git a/packages/flutter_localizations/lib/src/l10n/material_ru.arb b/packages/flutter_localizations/lib/src/l10n/material_ru.arb
index c8066de..22be418 100644
--- a/packages/flutter_localizations/lib/src/l10n/material_ru.arb
+++ b/packages/flutter_localizations/lib/src/l10n/material_ru.arb
@@ -50,5 +50,8 @@
   "reorderItemLeft": "TBD",
   "reorderItemRight": "TBD",
   "expandedIconTapHint": "TBD",
-  "collapsedIconTapHint": "TBD"
+  "collapsedIconTapHint": "TBD",
+  "remainingTextFieldCharacterCountZero": "TBD",
+  "remainingTextFieldCharacterCountOne": "TBD",
+  "remainingTextFieldCharacterCountOther": "TBD"
 }
diff --git a/packages/flutter_localizations/lib/src/l10n/material_sk.arb b/packages/flutter_localizations/lib/src/l10n/material_sk.arb
index 76641d7..8b4083f 100644
--- a/packages/flutter_localizations/lib/src/l10n/material_sk.arb
+++ b/packages/flutter_localizations/lib/src/l10n/material_sk.arb
@@ -49,5 +49,8 @@
   "reorderItemLeft": "TBD",
   "reorderItemRight": "TBD",
   "expandedIconTapHint": "TBD",
-  "collapsedIconTapHint": "TBD"
+  "collapsedIconTapHint": "TBD",
+  "remainingTextFieldCharacterCountZero": "TBD",
+  "remainingTextFieldCharacterCountOne": "TBD",
+  "remainingTextFieldCharacterCountOther": "TBD"
 }
diff --git a/packages/flutter_localizations/lib/src/l10n/material_sl.arb b/packages/flutter_localizations/lib/src/l10n/material_sl.arb
index 52da0aa..f001aff 100644
--- a/packages/flutter_localizations/lib/src/l10n/material_sl.arb
+++ b/packages/flutter_localizations/lib/src/l10n/material_sl.arb
@@ -49,5 +49,8 @@
   "reorderItemLeft": "TBD",
   "reorderItemRight": "TBD",
   "expandedIconTapHint": "TBD",
-  "collapsedIconTapHint": "TBD"
+  "collapsedIconTapHint": "TBD",
+  "remainingTextFieldCharacterCountZero": "TBD",
+  "remainingTextFieldCharacterCountOne": "TBD",
+  "remainingTextFieldCharacterCountOther": "TBD"
 }
diff --git a/packages/flutter_localizations/lib/src/l10n/material_sr.arb b/packages/flutter_localizations/lib/src/l10n/material_sr.arb
index 39584ef..62746e4 100644
--- a/packages/flutter_localizations/lib/src/l10n/material_sr.arb
+++ b/packages/flutter_localizations/lib/src/l10n/material_sr.arb
@@ -48,5 +48,8 @@
   "reorderItemLeft": "TBD",
   "reorderItemRight": "TBD",
   "expandedIconTapHint": "TBD",
-  "collapsedIconTapHint": "TBD"
+  "collapsedIconTapHint": "TBD",
+  "remainingTextFieldCharacterCountZero": "TBD",
+  "remainingTextFieldCharacterCountOne": "TBD",
+  "remainingTextFieldCharacterCountOther": "TBD"
 }
diff --git a/packages/flutter_localizations/lib/src/l10n/material_sr_Latn.arb b/packages/flutter_localizations/lib/src/l10n/material_sr_Latn.arb
index a01d4ce..60ac5f4 100644
--- a/packages/flutter_localizations/lib/src/l10n/material_sr_Latn.arb
+++ b/packages/flutter_localizations/lib/src/l10n/material_sr_Latn.arb
@@ -48,5 +48,8 @@
   "reorderItemLeft": "TBD",
   "reorderItemRight": "TBD",
   "expandedIconTapHint": "TBD",
-  "collapsedIconTapHint": "TBD"
+  "collapsedIconTapHint": "TBD",
+  "remainingTextFieldCharacterCountZero": "TBD",
+  "remainingTextFieldCharacterCountOne": "TBD",
+  "remainingTextFieldCharacterCountOther": "TBD"
 }
diff --git a/packages/flutter_localizations/lib/src/l10n/material_sv.arb b/packages/flutter_localizations/lib/src/l10n/material_sv.arb
index 1841594..39c29e9 100644
--- a/packages/flutter_localizations/lib/src/l10n/material_sv.arb
+++ b/packages/flutter_localizations/lib/src/l10n/material_sv.arb
@@ -47,5 +47,8 @@
   "reorderItemLeft": "TBD",
   "reorderItemRight": "TBD",
   "expandedIconTapHint": "TBD",
-  "collapsedIconTapHint": "TBD"
+  "collapsedIconTapHint": "TBD",
+  "remainingTextFieldCharacterCountZero": "TBD",
+  "remainingTextFieldCharacterCountOne": "TBD",
+  "remainingTextFieldCharacterCountOther": "TBD"
 }
diff --git a/packages/flutter_localizations/lib/src/l10n/material_th.arb b/packages/flutter_localizations/lib/src/l10n/material_th.arb
index c450b48..0c8a9bf 100644
--- a/packages/flutter_localizations/lib/src/l10n/material_th.arb
+++ b/packages/flutter_localizations/lib/src/l10n/material_th.arb
@@ -47,5 +47,8 @@
   "reorderItemLeft": "TBD",
   "reorderItemRight": "TBD",
   "expandedIconTapHint": "TBD",
-  "collapsedIconTapHint": "TBD"
+  "collapsedIconTapHint": "TBD",
+  "remainingTextFieldCharacterCountZero": "TBD",
+  "remainingTextFieldCharacterCountOne": "TBD",
+  "remainingTextFieldCharacterCountOther": "TBD"
 }
diff --git a/packages/flutter_localizations/lib/src/l10n/material_tl.arb b/packages/flutter_localizations/lib/src/l10n/material_tl.arb
index 2773145..9c23985 100644
--- a/packages/flutter_localizations/lib/src/l10n/material_tl.arb
+++ b/packages/flutter_localizations/lib/src/l10n/material_tl.arb
@@ -47,5 +47,8 @@
   "reorderItemLeft": "TBD",
   "reorderItemRight": "TBD",
   "expandedIconTapHint": "TBD",
-  "collapsedIconTapHint": "TBD"
+  "collapsedIconTapHint": "TBD",
+  "remainingTextFieldCharacterCountZero": "TBD",
+  "remainingTextFieldCharacterCountOne": "TBD",
+  "remainingTextFieldCharacterCountOther": "TBD"
 }
diff --git a/packages/flutter_localizations/lib/src/l10n/material_tr.arb b/packages/flutter_localizations/lib/src/l10n/material_tr.arb
index 7aac6b9..4d01363 100644
--- a/packages/flutter_localizations/lib/src/l10n/material_tr.arb
+++ b/packages/flutter_localizations/lib/src/l10n/material_tr.arb
@@ -47,5 +47,8 @@
   "reorderItemLeft": "TBD",
   "reorderItemRight": "TBD",
   "expandedIconTapHint": "TBD",
-  "collapsedIconTapHint": "TBD"
+  "collapsedIconTapHint": "TBD",
+  "remainingTextFieldCharacterCountZero": "TBD",
+  "remainingTextFieldCharacterCountOne": "TBD",
+  "remainingTextFieldCharacterCountOther": "TBD"
 }
diff --git a/packages/flutter_localizations/lib/src/l10n/material_uk.arb b/packages/flutter_localizations/lib/src/l10n/material_uk.arb
index 8a45b00..0b52504 100644
--- a/packages/flutter_localizations/lib/src/l10n/material_uk.arb
+++ b/packages/flutter_localizations/lib/src/l10n/material_uk.arb
@@ -49,5 +49,8 @@
   "reorderItemLeft": "TBD",
   "reorderItemRight": "TBD",
   "expandedIconTapHint": "TBD",
-  "collapsedIconTapHint": "TBD"
+  "collapsedIconTapHint": "TBD",
+  "remainingTextFieldCharacterCountZero": "TBD",
+  "remainingTextFieldCharacterCountOne": "TBD",
+  "remainingTextFieldCharacterCountOther": "TBD"
 }
diff --git a/packages/flutter_localizations/lib/src/l10n/material_ur.arb b/packages/flutter_localizations/lib/src/l10n/material_ur.arb
index c7934f0..3a2c069 100644
--- a/packages/flutter_localizations/lib/src/l10n/material_ur.arb
+++ b/packages/flutter_localizations/lib/src/l10n/material_ur.arb
@@ -47,5 +47,8 @@
   "reorderItemLeft": "TBD",
   "reorderItemRight": "TBD",
   "expandedIconTapHint": "TBD",
-  "collapsedIconTapHint": "TBD"
+  "collapsedIconTapHint": "TBD",
+  "remainingTextFieldCharacterCountZero": "TBD",
+  "remainingTextFieldCharacterCountOne": "TBD",
+  "remainingTextFieldCharacterCountOther": "TBD"
 }
diff --git a/packages/flutter_localizations/lib/src/l10n/material_vi.arb b/packages/flutter_localizations/lib/src/l10n/material_vi.arb
index 9c0b3f9..733d7c2 100644
--- a/packages/flutter_localizations/lib/src/l10n/material_vi.arb
+++ b/packages/flutter_localizations/lib/src/l10n/material_vi.arb
@@ -47,5 +47,8 @@
   "reorderItemLeft": "TBD",
   "reorderItemRight": "TBD",
   "expandedIconTapHint": "TBD",
-  "collapsedIconTapHint": "TBD"
+  "collapsedIconTapHint": "TBD",
+  "remainingTextFieldCharacterCountZero": "TBD",
+  "remainingTextFieldCharacterCountOne": "TBD",
+  "remainingTextFieldCharacterCountOther": "TBD"
 }
diff --git a/packages/flutter_localizations/lib/src/l10n/material_zh.arb b/packages/flutter_localizations/lib/src/l10n/material_zh.arb
index e86d468..8db5331 100644
--- a/packages/flutter_localizations/lib/src/l10n/material_zh.arb
+++ b/packages/flutter_localizations/lib/src/l10n/material_zh.arb
@@ -47,5 +47,8 @@
   "reorderItemLeft": "TBD",
   "reorderItemRight": "TBD",
   "expandedIconTapHint": "TBD",
-  "collapsedIconTapHint": "TBD"
+  "collapsedIconTapHint": "TBD",
+  "remainingTextFieldCharacterCountZero": "TBD",
+  "remainingTextFieldCharacterCountOne": "TBD",
+  "remainingTextFieldCharacterCountOther": "TBD"
 }
diff --git a/packages/flutter_localizations/lib/src/l10n/material_zh_HK.arb b/packages/flutter_localizations/lib/src/l10n/material_zh_HK.arb
index 039d8c2..f9a7e40 100644
--- a/packages/flutter_localizations/lib/src/l10n/material_zh_HK.arb
+++ b/packages/flutter_localizations/lib/src/l10n/material_zh_HK.arb
@@ -47,5 +47,8 @@
   "reorderItemLeft": "TBD",
   "reorderItemRight": "TBD",
   "expandedIconTapHint": "TBD",
-  "collapsedIconTapHint": "TBD"
+  "collapsedIconTapHint": "TBD",
+  "remainingTextFieldCharacterCountZero": "TBD",
+  "remainingTextFieldCharacterCountOne": "TBD",
+  "remainingTextFieldCharacterCountOther": "TBD"
 }
diff --git a/packages/flutter_localizations/lib/src/l10n/material_zh_TW.arb b/packages/flutter_localizations/lib/src/l10n/material_zh_TW.arb
index 039d8c2..f9a7e40 100644
--- a/packages/flutter_localizations/lib/src/l10n/material_zh_TW.arb
+++ b/packages/flutter_localizations/lib/src/l10n/material_zh_TW.arb
@@ -47,5 +47,8 @@
   "reorderItemLeft": "TBD",
   "reorderItemRight": "TBD",
   "expandedIconTapHint": "TBD",
-  "collapsedIconTapHint": "TBD"
+  "collapsedIconTapHint": "TBD",
+  "remainingTextFieldCharacterCountZero": "TBD",
+  "remainingTextFieldCharacterCountOne": "TBD",
+  "remainingTextFieldCharacterCountOther": "TBD"
 }
diff --git a/packages/flutter_localizations/lib/src/material_localizations.dart b/packages/flutter_localizations/lib/src/material_localizations.dart
index 0223476..7b40da8 100644
--- a/packages/flutter_localizations/lib/src/material_localizations.dart
+++ b/packages/flutter_localizations/lib/src/material_localizations.dart
@@ -393,6 +393,56 @@
     return timeOfDayFormatRaw;
   }
 
+  /// The "zero" form of [remainingTextFieldCharacterCount].
+  ///
+  /// This form is required.
+  ///
+  /// See also:
+  ///
+  ///  * [Intl.plural], to which this form is passed.
+  ///  * [remainingTextFieldCharacterCountZero], the "zero" form
+  ///  * [remainingTextFieldCharacterCountOne], the "one" form
+  ///  * [remainingTextFieldCharacterCountOther], the "other" form
+  @protected
+  String get remainingTextFieldCharacterCountZero;
+
+  /// The "one" form of [remainingTextFieldCharacterCount].
+  ///
+  /// This form is optional.
+  ///
+  /// See also:
+  ///
+  ///  * [Intl.plural], to which this form is passed.
+  ///  * [remainingTextFieldCharacterCountZero], the "zero" form
+  ///  * [remainingTextFieldCharacterCountOne], the "one" form
+  ///  * [remainingTextFieldCharacterCountOther], the "other" form
+  @protected
+  String get remainingTextFieldCharacterCountOne => null;
+
+  /// The "other" form of [remainingTextFieldCharacterCount].
+  ///
+  /// This form is required.
+  ///
+  /// See also:
+  ///
+  ///  * [Intl.plural], to which this form is passed.
+  ///  * [remainingTextFieldCharacterCountZero], the "zero" form
+  ///  * [remainingTextFieldCharacterCountOne], the "one" form
+  ///  * [remainingTextFieldCharacterCountOther], the "other" form
+  @protected
+  String get remainingTextFieldCharacterCountOther;
+
+  @override
+  String remainingTextFieldCharacterCount(int remainingCount) {
+    return intl.Intl.pluralLogic(
+      remainingCount,
+      zero: remainingTextFieldCharacterCountZero,
+      one: remainingTextFieldCharacterCountOne,
+      other: remainingTextFieldCharacterCountOther,
+      locale: _localeName,
+    ).replaceFirst(r'$remainingCount', formatDecimal(remainingCount));
+  }
+
   /// The script category used by [localTextGeometry]. Must be one of the strings
   /// declared in [MaterialTextGeometry].
   //
diff --git a/packages/flutter_localizations/test/translations_test.dart b/packages/flutter_localizations/test/translations_test.dart
index 93614be..5268d89 100644
--- a/packages/flutter_localizations/test/translations_test.dart
+++ b/packages/flutter_localizations/test/translations_test.dart
@@ -41,6 +41,13 @@
       expect(localizations.collapsedIconTapHint, isNotNull);
       expect(localizations.expandedIconTapHint, isNotNull);
 
+      expect(localizations.remainingTextFieldCharacterCount(0), isNotNull);
+      expect(localizations.remainingTextFieldCharacterCount(1), isNotNull);
+      expect(localizations.remainingTextFieldCharacterCount(10), isNotNull);
+      expect(localizations.remainingTextFieldCharacterCount(0), isNot(contains(r'$remainingCount')));
+      expect(localizations.remainingTextFieldCharacterCount(1), isNot(contains(r'$remainingCount')));
+      expect(localizations.remainingTextFieldCharacterCount(10), isNot(contains(r'$remainingCount')));
+
       expect(localizations.aboutListTileTitle('FOO'), isNotNull);
       expect(localizations.aboutListTileTitle('FOO'), contains('FOO'));