UninitializedLocaleData should fall back if the canonicalized form matches

That is, either en_US or en-US should use fallback data. This is a better solution than 273850130

PiperOrigin-RevId: 280044665
diff --git a/analysis_options.yaml b/analysis_options.yaml
new file mode 100644
index 0000000..2299a33
--- /dev/null
+++ b/analysis_options.yaml
@@ -0,0 +1,86 @@
+analyzer:
+  errors:
+    dead_code: error
+    override_on_non_overriding_method: error
+    unused_element: error
+    unused_import: error
+    unused_local_variable: error
+linter:
+  rules:
+    - always_declare_return_types
+    - avoid_classes_with_only_static_members
+    - avoid_empty_else
+    - avoid_function_literals_in_foreach_calls
+    - avoid_init_to_null
+    - avoid_null_checks_in_equality_operators
+    - avoid_relative_lib_imports
+    - avoid_renaming_method_parameters
+    - avoid_return_types_on_setters
+    - avoid_returning_null_for_void
+    - avoid_shadowing_type_parameters
+    - avoid_single_cascade_in_expression_statements
+    - avoid_types_as_parameter_names
+    - avoid_unused_constructor_parameters
+    - await_only_futures
+    - camel_case_types
+    - cancel_subscriptions
+    - constant_identifier_names
+    - control_flow_in_finally
+    - curly_braces_in_flow_control_structures
+    - directives_ordering
+    - empty_catches
+    - empty_constructor_bodies
+    - empty_statements
+    - file_names
+    - hash_and_equals
+    - implementation_imports
+    - iterable_contains_unrelated_type
+    - library_names
+    - library_prefixes
+    - list_remove_unrelated_type
+    - literal_only_boolean_expressions
+    - no_duplicate_case_values
+    - non_constant_identifier_names
+    - null_closures
+    - omit_local_variable_types
+    - only_throw_errors
+    - overridden_fields
+    - package_api_docs
+    - package_names
+    - package_prefixed_library_names
+    - prefer_adjacent_string_concatenation
+    - prefer_conditional_assignment
+    - prefer_const_constructors
+    - prefer_contains
+    - prefer_equal_for_default_values
+    - prefer_final_fields
+    - prefer_generic_function_type_aliases
+    - prefer_initializing_formals
+    - prefer_interpolation_to_compose_strings
+    - prefer_iterable_whereType
+    - prefer_is_empty
+    - prefer_is_not_empty
+    - prefer_null_aware_operators
+    - prefer_single_quotes
+    - prefer_typing_uninitialized_variables
+    - recursive_getters
+    - slash_for_doc_comments
+    - test_types_in_equals
+    - throw_in_finally
+    - type_init_formals
+    - unawaited_futures
+    - unnecessary_brace_in_string_interps
+    - unnecessary_const
+    - unnecessary_getters_setters
+    - unnecessary_lambdas
+    - unnecessary_new
+    - unnecessary_null_aware_assignments
+    - unnecessary_null_in_if_null_operators
+    - unnecessary_parenthesis
+    - unnecessary_statements
+    - unnecessary_this
+    - unrelated_type_equality_checks
+    - use_function_type_syntax_for_parameters
+    - use_rethrow_when_possible
+    - valid_regexps
+    - void_checks
diff --git a/lib/src/intl_helpers.dart b/lib/src/intl_helpers.dart
index 57edee8..a807d97 100644
--- a/lib/src/intl_helpers.dart
+++ b/lib/src/intl_helpers.dart
@@ -22,8 +22,10 @@
   final F fallbackData;
   UninitializedLocaleData(this.message, this.fallbackData);
 
+  bool _isFallback(String key) => Intl.canonicalizedLocale(key) == 'en_US';
+
   F operator [](String key) =>
-      (key == 'en_US') ? fallbackData : _throwException();
+      _isFallback(key) ? fallbackData : _throwException();
 
   /// If a message is looked up before any locale initialization, record it,
   /// and throw an exception with that information once the locale is
@@ -66,7 +68,7 @@
 
   List<String> get keys => _throwException() as List<String>;
 
-  bool containsKey(String key) => (key == 'en_US') ? true : _throwException();
+  bool containsKey(String key) => _isFallback(key) ? true : _throwException();
 
   F _throwException() {
     throw LocaleDataException('Locale data has not been initialized'