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'