← Back to Blog

Flutter Locale List 2025: All 80+ Supported Languages & Country Codes

flutterlocaleslanguagessupported-languagesrtlreference

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'),      // English
    Locale('es'),      // Spanish
    Locale('fr'),      // French
    Locale('de'),      // German
    Locale('zh'),      // Chinese (Simplified)
    Locale('ja'),      // Japanese
    Locale('ar'),      // Arabic (RTL)
    Locale('he'),      // Hebrew (RTL)
  ],
  home: MyHomePage(),
)

With Country Codes

supportedLocales: [
  Locale('en', 'US'),     // English (US)
  Locale('en', 'GB'),     // English (UK)
  Locale('pt', 'BR'),     // Portuguese (Brazil)
  Locale('pt', 'PT'),     // Portuguese (Portugal)
  Locale('zh', 'CN'),     // Chinese (Simplified)
  Locale('zh', 'TW'),     // Chinese (Traditional)
]

With Script Codes

supportedLocales: [
  Locale.fromSubtags(languageCode: 'zh', scriptCode: 'Hans'), // Simplified
  Locale.fromSubtags(languageCode: 'zh', scriptCode: 'Hant'), // Traditional
  Locale.fromSubtags(languageCode: 'sr', scriptCode: 'Latn'), // Serbian Latin
  Locale.fromSubtags(languageCode: 'sr', scriptCode: 'Cyrl'), // Serbian Cyrillic
]

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,  // Left in LTR, Right in RTL
      end: 8,     // Right in LTR, Left in RTL
    ),
    child: Row(
      children: [
        Icon(isRtl ? Icons.arrow_back : Icons.arrow_forward),
        Text('Navigate'),
      ],
    ),
  );
}

Locale Resolution

How Flutter Chooses a Locale

  1. Exact match: en_US device → en_US supported
  2. Language match: en_US device → en supported
  3. Country match: (rarely used)
  4. First supported: Fallback to first in list

Custom Resolution

MaterialApp(
  localeResolutionCallback: (deviceLocale, supportedLocales) {
    // Try exact match
    for (var locale in supportedLocales) {
      if (locale == deviceLocale) return locale;
    }

    // Try language match
    for (var locale in supportedLocales) {
      if (locale.languageCode == deviceLocale?.languageCode) {
        return locale;
      }
    }

    // Fallback to English or first supported
    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

# Create French ARB
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

// AppLocalizations.supportedLocales now includes French
print(AppLocalizations.supportedLocales);
// [Locale('en'), Locale('fr'), ...]

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.