Cleanup in localizations code (#20018)

The following changes are made by this PR:

 * Translation bundles now implement MaterialLocalizations directly,
   and are public so that they can be directly extended.

 * The list of supported languages is now a generated constant.

 * The icuShortTimePattern/TimeOfDayFormat values are now pre-parsed.

 * Various other changes for consistency with the style guide and the
   rest of the codebase, e.g. the class names don't use `_`, the
   `path` library is imported as such, more dartdocs, fewer `//
   ignore`s, validation using exceptions.

This reduces our technical debt benchmark.
diff --git a/packages/flutter_localizations/lib/src/l10n/material_en.arb b/packages/flutter_localizations/lib/src/l10n/material_en.arb
index 5a6d308..c58de4c 100644
--- a/packages/flutter_localizations/lib/src/l10n/material_en.arb
+++ b/packages/flutter_localizations/lib/src/l10n/material_en.arb
@@ -6,7 +6,8 @@
 
   "timeOfDayFormat": "h:mm a",
   "@timeOfDayFormat": {
-    "description": "The ICU 'Short Time' pattern, such as 'HH:mm', 'h:mm a', 'H:mm'. See: http://demo.icu-project.org/icu-bin/locexp?d_=en&_=en_US"
+    "description": "The ICU 'Short Time' pattern, such as 'HH:mm', 'h:mm a', 'H:mm'. See: http://demo.icu-project.org/icu-bin/locexp?d_=en&_=en_US",
+    "x-flutter-type": "icuShortTimePattern"
   },
 
   "openAppDrawerTooltip": "Open navigation menu",