← Back to Blog

Flutter Supported Locales: Complete List of Languages 2025

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.

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.