A Dart package for working with language codes and device locales.
Includes a complete set of ISO 639-1 (2-letter) and ISO 639-2 (3-letter) codes with English and native names.
- Detect the device’s current language and locale
- Convert between
Locale
andLanguageCodes
- Look up by code, English name, or native name
- Includes almost all ISO 639 codes with English + native names
- Test-friendly (override locale or code in tests)
- Auto-generated from Wikipedia’s ISO 639-2 list
final languageCode = LanguageCode.code; // as LanguageCodes
final locale = LanguageCode.locale; // as Locale
May not be supported by LanguageCodes
:
final rawLocale = LanguageCode.rawLocale;
- [code]: language code.
- [englishName]: preferred English name.
- [nativeName]: preferred native name.
- [nativeLatinName]: preferred native latin name (if available).
- [nativeNonLatinName]: preferred native non-latin name (if available).
var language = LanguageCodes.en;
print(language.englishName); // 'English'
print(language.nativeName); // 'English'
language = LanguageCodes.vi;
print(language.englishName); // 'Vietnamese'
print(language.nativeName); // 'Tiếng Việt'
ar("ar", r"Arabic", r"العربية", r"al'Arabiyyeẗ", r"العربية")
language = LanguageCodes.ar;
print(language.code); // ar
print(language.englishName); // Arabic
print(language.nativeName); // العربية
print(language.nativeLatinName); // al'Arabiyyeẗ
print(language.nativeNonLatinName); // العربية
LanguageCodes.fromLocale(Locale('vi')); // → LanguageCodes.vi
LanguageCodes.fromCode('vi'); // → LanguageCodes.vi
LanguageCodes.fromEnglishName('Vietnamese'); // → Iterable<LanguageCodes>
LanguageCodes.fromNativeName('Tiếng Việt'); // → Iterable<LanguageCodes>
⚠️ If no matching element is found, the methods throw aStateError
unless anorElse
is provided.
final code = LanguageCode.tryCode(defaultCode: LanguageCodes.en);
Fallback order:
- Full
rawLocale
rawLocale.languageCode
defaultCode
(default:LanguageCodes.und
)
Override values in unit tests:
LanguageCode.setTestCode(LanguageCodes.vi);
// or
LanguageCode.setTestLocale(const Locale('fr'));
Reset with null
to restore normal behavior.
⚠️ You can only use one override at a time.
Missing or incorrect language? Please open an issue or create a PR. The codes are auto-generated via a crawler, but feedback is always welcome.