LanguageTag constructor

LanguageTag(
  1. String language, {
  2. String? extlang,
  3. String? script,
  4. String? region,
  5. String? variant,
})

Implementation

factory LanguageTag(String language,
    {String? extlang, String? script, String? region, String? variant}) {
  var locLanguage = language.toLowerCase();
  if (!_isCorrectLanguage(locLanguage)) {
    throw ArgumentError('Incorrect language subtag "$locLanguage"');
  }
  var locExtlang = extlang?.toLowerCase() ?? '';
  if (locExtlang.isNotEmpty && !_isCorrectExtlang(locExtlang)) {
    throw ArgumentError('Incorrect extlang subtag "$locExtlang"');
  }
  var locScript = unfilled(script) ? '' : capitalizeAndLowercase(script!);
  if (locScript.isNotEmpty && !_isCorrectScript(locScript)) {
    throw ArgumentError('Incorrect script subtag "$locScript"');
  }
  // tries to construct a Region to test if the code is correct
  Region? locRegion;
  if (filled(region)) {
    locRegion = Region(region!);
  }

  var locVariant = variant?.toLowerCase() ?? '';
  if (locVariant.isNotEmpty && !_isCorrectVariant(locVariant)) {
    throw ArgumentError('Incorrect variant subtag "$locVariant"');
  }
  var languageTag = LanguageTag._(locLanguage,
      extlang: locExtlang,
      script: locScript,
      region: locRegion,
      variant: locVariant);
  if (_existingLocales.containsKey(languageTag.code)) {
    return _existingLocales[languageTag.code]!;
  }
  _existingLocales[languageTag.code] = languageTag;
  return languageTag;
}