# Locale constructor

Locale(

1. String language, [
2. String? country,
3. String? variant

])

A representation of a locale, consisting of a language code and optional country and variant codes.

Useful for internationalization (i18n) and localization (l10n), supporting language tags like `"en"`, `"en-US"`, or `"fr-FR-Paris"`. The locale follows the pattern: `language[-country[-variant]]`.

## Usage

Create a locale with just a language:

    final locale = Locale('en');
    print(locale.getLanguageTag()); // Output: "en"

Create a locale with language and country:

    final locale = Locale('en', 'US');
    print(locale.getLanguageTag()); // Output: "en-US"

Create a locale with language, country, and variant:

    final locale = Locale('fr', 'FR', 'Paris');
    print(locale.getLanguageTag()); // Output: "fr-FR-Paris"

Parse a locale from a string:

    final locale = Locale.parse('es-MX');
    print(locale.getLanguage()); // Output: "es"
    print(locale.getCountry()); // Output: "MX"

## Validation

The class automatically validates and normalizes input:

- Language codes are converted to lowercase and must be 2-3 characters
- Country codes are converted to uppercase and must be exactly 2 characters
- Variants must contain only word characters and hyphens

Invalid inputs will throw InvalidFormatException.

## Implementation

    factory Locale(String language, [String? country, String? variant]) => _Locale(language, country, variant);