Flutter Supported Locales: Complete List of Languages 2025
Flutter's localization system supports 80+ locales out of the box through the flutter_localizations package. Here's the complete reference guide to every supported locale, including language codes, script variants, and RTL support.
🔎 Prefer to search and copy? The free Flutter Locale Explorer lets you filter all supported locales, see native names and RTL flags, and copy Locale() and supportedLocales code with one click.
Quick Reference: Most Common Locales
| Language |
Locale Code |
RTL |
Notes |
| English (US) |
en or en_US |
No |
Default in most apps |
| English (UK) |
en_GB |
No |
Different date formats |
| Spanish |
es |
No |
500M+ speakers |
| French |
fr |
No |
Used in 29 countries |
| German |
de |
No |
Longer text, plan for expansion |
| Chinese (Simplified) |
zh or zh_CN |
No |
1.1B+ speakers |
| Chinese (Traditional) |
zh_TW |
No |
Taiwan, Hong Kong |
| Japanese |
ja |
No |
Character-based |
| Korean |
ko |
No |
Character-based |
| Arabic |
ar |
Yes |
RTL, 400M+ speakers |
| Hindi |
hi |
No |
600M+ speakers |
| Portuguese (Brazil) |
pt_BR |
No |
200M+ speakers |
| Russian |
ru |
No |
Cyrillic script |
Complete List of Supported Locales
A
| Language |
Code |
Country Variant |
RTL |
| Afrikaans |
af |
South Africa |
No |
| Albanian |
sq |
Albania |
No |
| Amharic |
am |
Ethiopia |
No |
| Arabic |
ar |
Multiple |
Yes |
| Arabic (Egypt) |
ar_EG |
Egypt |
Yes |
| Arabic (Saudi) |
ar_SA |
Saudi Arabia |
Yes |
| Armenian |
hy |
Armenia |
No |
| Assamese |
as |
India |
No |
| Azerbaijani |
az |
Azerbaijan |
No |
B
| Language |
Code |
Country Variant |
RTL |
| Basque |
eu |
Spain |
No |
| Belarusian |
be |
Belarus |
No |
| Bengali |
bn |
Bangladesh/India |
No |
| Bosnian |
bs |
Bosnia |
No |
| Bulgarian |
bg |
Bulgaria |
No |
| Burmese |
my |
Myanmar |
No |
C
| Language |
Code |
Country Variant |
RTL |
| Catalan |
ca |
Spain |
No |
| Chinese (Simplified) |
zh |
China |
No |
| Chinese (Traditional) |
zh_TW |
Taiwan |
No |
| Chinese (Hong Kong) |
zh_HK |
Hong Kong |
No |
| Croatian |
hr |
Croatia |
No |
| Czech |
cs |
Czech Republic |
No |
D
| Language |
Code |
Country Variant |
RTL |
| Danish |
da |
Denmark |
No |
| Dutch |
nl |
Netherlands |
No |
| Dutch (Belgium) |
nl_BE |
Belgium |
No |
E
| Language |
Code |
Country Variant |
RTL |
| English |
en |
US (default) |
No |
| English (Australia) |
en_AU |
Australia |
No |
| English (Canada) |
en_CA |
Canada |
No |
| English (UK) |
en_GB |
United Kingdom |
No |
| English (India) |
en_IN |
India |
No |
| English (Ireland) |
en_IE |
Ireland |
No |
| English (New Zealand) |
en_NZ |
New Zealand |
No |
| English (Singapore) |
en_SG |
Singapore |
No |
| English (South Africa) |
en_ZA |
South Africa |
No |
| Estonian |
et |
Estonia |
No |
F
| Language |
Code |
Country Variant |
RTL |
| Filipino |
fil |
Philippines |
No |
| Finnish |
fi |
Finland |
No |
| French |
fr |
France |
No |
| French (Belgium) |
fr_BE |
Belgium |
No |
| French (Canada) |
fr_CA |
Canada |
No |
| French (Switzerland) |
fr_CH |
Switzerland |
No |
G
| Language |
Code |
Country Variant |
RTL |
| Galician |
gl |
Spain |
No |
| Georgian |
ka |
Georgia |
No |
| German |
de |
Germany |
No |
| German (Austria) |
de_AT |
Austria |
No |
| German (Switzerland) |
de_CH |
Switzerland |
No |
| Greek |
el |
Greece |
No |
| Gujarati |
gu |
India |
No |
H
| Language |
Code |
Country Variant |
RTL |
| Hebrew |
he |
Israel |
Yes |
| Hindi |
hi |
India |
No |
| Hungarian |
hu |
Hungary |
No |
I
| Language |
Code |
Country Variant |
RTL |
| Icelandic |
is |
Iceland |
No |
| Indonesian |
id |
Indonesia |
No |
| Italian |
it |
Italy |
No |
J
| Language |
Code |
Country Variant |
RTL |
| Japanese |
ja |
Japan |
No |
K
| Language |
Code |
Country Variant |
RTL |
| Kannada |
kn |
India |
No |
| Kazakh |
kk |
Kazakhstan |
No |
| Khmer |
km |
Cambodia |
No |
| Korean |
ko |
South Korea |
No |
| Kyrgyz |
ky |
Kyrgyzstan |
No |
L
| Language |
Code |
Country Variant |
RTL |
| Lao |
lo |
Laos |
No |
| Latvian |
lv |
Latvia |
No |
| Lithuanian |
lt |
Lithuania |
No |
M
| Language |
Code |
Country Variant |
RTL |
| Macedonian |
mk |
North Macedonia |
No |
| Malay |
ms |
Malaysia |
No |
| Malayalam |
ml |
India |
No |
| Marathi |
mr |
India |
No |
| Mongolian |
mn |
Mongolia |
No |
N
| Language |
Code |
Country Variant |
RTL |
| Nepali |
ne |
Nepal |
No |
| Norwegian (Bokmål) |
nb |
Norway |
No |
| Norwegian (Nynorsk) |
nn |
Norway |
No |
O
| Language |
Code |
Country Variant |
RTL |
| Oriya |
or |
India |
No |
P
| Language |
Code |
Country Variant |
RTL |
| Pashto |
ps |
Afghanistan |
Yes |
| Persian (Farsi) |
fa |
Iran |
Yes |
| Polish |
pl |
Poland |
No |
| Portuguese |
pt |
Portugal |
No |
| Portuguese (Brazil) |
pt_BR |
Brazil |
No |
| Punjabi |
pa |
India/Pakistan |
No |
R
| Language |
Code |
Country Variant |
RTL |
| Romanian |
ro |
Romania |
No |
| Russian |
ru |
Russia |
No |
S
| Language |
Code |
Country Variant |
RTL |
| Serbian |
sr |
Serbia |
No |
| Serbian (Latin) |
sr_Latn |
Serbia |
No |
| Sinhala |
si |
Sri Lanka |
No |
| Slovak |
sk |
Slovakia |
No |
| Slovenian |
sl |
Slovenia |
No |
| Spanish |
es |
Spain |
No |
| Spanish (Latin America) |
es_419 |
Latin America |
No |
| Spanish (Mexico) |
es_MX |
Mexico |
No |
| Spanish (US) |
es_US |
United States |
No |
| Swahili |
sw |
East Africa |
No |
| Swedish |
sv |
Sweden |
No |
T
| Language |
Code |
Country Variant |
RTL |
| Tamil |
ta |
India/Sri Lanka |
No |
| Telugu |
te |
India |
No |
| Thai |
th |
Thailand |
No |
| Turkish |
tr |
Turkey |
No |
U
| Language |
Code |
Country Variant |
RTL |
| Ukrainian |
uk |
Ukraine |
No |
| Urdu |
ur |
Pakistan |
Yes |
| Uzbek |
uz |
Uzbekistan |
No |
V
| Language |
Code |
Country Variant |
RTL |
| Vietnamese |
vi |
Vietnam |
No |
Z
| Language |
Code |
Country Variant |
RTL |
| Zulu |
zu |
South Africa |
No |
Implementing Supported Locales
Basic Setup
import 'package:flutter/material.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
MaterialApp(
localizationsDelegates: [
AppLocalizations.delegate,
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
],
supportedLocales: [
Locale('en'),
Locale('es'),
Locale('fr'),
Locale('de'),
Locale('zh'),
Locale('ja'),
Locale('ar'),
Locale('he'),
],
home: MyHomePage(),
)
With Country Codes
supportedLocales: [
Locale('en', 'US'),
Locale('en', 'GB'),
Locale('pt', 'BR'),
Locale('pt', 'PT'),
Locale('zh', 'CN'),
Locale('zh', 'TW'),
]
With Script Codes
supportedLocales: [
Locale.fromSubtags(languageCode: 'zh', scriptCode: 'Hans'),
Locale.fromSubtags(languageCode: 'zh', scriptCode: 'Hant'),
Locale.fromSubtags(languageCode: 'sr', scriptCode: 'Latn'),
Locale.fromSubtags(languageCode: 'sr', scriptCode: 'Cyrl'),
]
RTL Language Support
Detecting RTL
bool isRtl(BuildContext context) {
return Directionality.of(context) == TextDirection.rtl;
}
Manual RTL Check
const rtlLanguages = ['ar', 'he', 'fa', 'ur', 'ps'];
bool isRtlLocale(Locale locale) {
return rtlLanguages.contains(locale.languageCode);
}
RTL-Aware Widget
Widget buildDirectionalWidget(BuildContext context) {
final isRtl = Directionality.of(context) == TextDirection.rtl;
return Padding(
padding: EdgeInsetsDirectional.only(
start: 16,
end: 8,
),
child: Row(
children: [
Icon(isRtl ? Icons.arrow_back : Icons.arrow_forward),
Text('Navigate'),
],
),
);
}
Locale Resolution
How Flutter Chooses a Locale
- Exact match:
en_US device → en_US supported
- Language match:
en_US device → en supported
- Country match: (rarely used)
- First supported: Fallback to first in list
Custom Resolution
MaterialApp(
localeResolutionCallback: (deviceLocale, supportedLocales) {
for (var locale in supportedLocales) {
if (locale == deviceLocale) return locale;
}
for (var locale in supportedLocales) {
if (locale.languageCode == deviceLocale?.languageCode) {
return locale;
}
}
return supportedLocales.firstWhere(
(l) => l.languageCode == 'en',
orElse: () => supportedLocales.first,
);
},
)
Checking Available Material Localizations
import 'package:flutter_localizations/flutter_localizations.dart';
void printMaterialLocales() {
final locales = GlobalMaterialLocalizations.delegate.supportedLocales;
for (var locale in locales) {
print('${locale.languageCode}_${locale.countryCode ?? ""}');
}
}
Adding a New Locale to Your App
Step 1: Create ARB File
touch lib/l10n/app_fr.arb
Step 2: Add Translations
{
"@@locale": "fr",
"appTitle": "Mon Application",
"@appTitle": {
"description": "Titre de l'application"
}
}
Step 3: Regenerate
flutter gen-l10n
Step 4: Verify Support
print(AppLocalizations.supportedLocales);
Market Priority by Language
Planning which languages to add? Here's a priority guide:
Tier 1: Global Reach (Essential)
- English (en) - 1.5B speakers
- Spanish (es) - 550M speakers
- Chinese (zh) - 1.1B speakers
- Hindi (hi) - 600M speakers
- Arabic (ar) - 400M speakers
Tier 2: High Value Markets
- French (fr) - 280M speakers
- German (de) - 130M speakers
- Japanese (ja) - 125M speakers
- Portuguese (pt_BR) - 220M speakers
- Russian (ru) - 250M speakers
Tier 3: Growing Markets
- Korean (ko) - 80M speakers
- Italian (it) - 65M speakers
- Turkish (tr) - 80M speakers
- Vietnamese (vi) - 85M speakers
- Indonesian (id) - 200M speakers
FlutterLocalisation: Add Languages Instantly
Translating to 80+ languages manually is overwhelming. FlutterLocalisation helps:
- ✅ AI translation to any supported locale
- ✅ Visual editor for all languages side-by-side
- ✅ Export ARB files ready for Flutter
- ✅ Placeholder validation across all locales
- ✅ Missing translation detection
Ready to go global? Try FlutterLocalisation free and add any of Flutter's 80+ supported languages with AI-powered translation.