LOCALES · ANY VALID BCP-47 TAG

There is no supported-language list

Give a project a BCP-47 tag and Transglot resolves the rest from ICU: display name, native name, CLDR plural categories and text direction. 708 locales are recognised outright, and the long tail validates structurally instead of being rejected.

708
ICU LOCALES RECOGNISED
224
LANGUAGES WITH CLDR PLURAL RULES
6
PLURAL FORMS AT THE WIDEST
LOCALE RESOLVER
ICU · CLDR 48
add language → "ar"
name
Arabic
native_name
العربية
plural_categories
zero · one · two · few · many · other
rtl
true
HOW A LOCALE RESOLVES

Four values, computed rather than curated

Adding a language writes one row. Every field on it comes from ICU and the CLDR plural table shipped with the app, so nobody maintains a list by hand.

FIELD 01
Names, both of them

The English display name and the name in the language’s own script, so a translator picking a locale reads it the way they write it.

FIELD 02
Plural categories

The CLDR categories the locale actually uses, from one for Japanese to six for Arabic. The editor draws exactly that many plural inputs, and QA fails a row with a category missing.

FIELD 03
Text direction

Derived from the locale’s likely script, not from a hand-kept list of four languages. It rides in the API response, so your app can lay out the string it just pulled.

FIELD 04
Validation

A tag is canonicalised and checked before it is accepted. Real long-tail locales pass on structure; xx-XX does not.

THE SAMPLE

Locales teams start with

A sample, not a catalogue. Each row carries the values the app would compute for that tag today — filter it to find the shape of your own market.

54 OF 54 SHOWN
REGION
SCRIPT
Sample locales, with their BCP-47 tag, script, CLDR plural categories, text direction, and whether a scored regression case exists.
LocaleBCP-47ScriptPlural formsDirectionQuality suite
GermanDeutschdeLatin2one · otherLTRscored
FrenchfrançaisfrLatin3one · many · otherLTRscored
French (Canada)français (Canada)fr-CALatin3one · many · otherLTR
SpanishespañolesLatin3one · many · otherLTRscored
Spanish (Latin America)español (Latinoamérica)es-419Latin3one · many · otherLTR
Portuguese (Portugal)português (Portugal)pt-PTLatin3one · many · otherLTR
Portuguese (Brazil)português (Brasil)pt-BRLatin3one · many · otherLTR
ItalianitalianoitLatin3one · many · otherLTR
DutchNederlandsnlLatin2one · otherLTR
SwedishsvenskasvLatin2one · otherLTR
DanishdanskdaLatin2one · otherLTR
Norwegian BokmålNorwegian BokmålnbLatin2one · otherLTR
FinnishsuomifiLatin2one · otherLTR
IcelandicíslenskaisLatin2one · otherLTR
PolishpolskiplLatin4one · few · many · otherLTR
CzechčeštinacsLatin4one · few · many · otherLTR
SlovakslovenčinaskLatin4one · few · many · otherLTR
HungarianmagyarhuLatin2one · otherLTR
RomanianromânăroLatin3one · few · otherLTR
CroatianhrvatskihrLatin3one · few · otherLTR
SlovenianslovenščinaslLatin4one · two · few · otherLTR
SerbianсрпскиsrCyrillic3one · few · otherLTR
BulgarianбългарскиbgCyrillic2one · otherLTR
RussianрусскийruCyrillic4one · few · many · otherLTRscored
UkrainianукраїнськаukCyrillic4one · few · many · otherLTR
GreekΕλληνικάelGreek2one · otherLTR
TurkishTürkçetrLatin2one · otherLTR
LithuanianlietuviųltLatin4one · few · many · otherLTR
LatvianlatviešulvLatin3zero · one · otherLTR
EstonianeestietLatin2one · otherLTR
CatalancatalàcaLatin3one · many · otherLTR
ArabicالعربيةarArabic6zero · one · two · few · many · otherRTLscored
HebrewעבריתheHebrew3one · two · otherRTL
PersianفارسیfaArabic2one · otherRTL
SwahiliKiswahiliswLatin2one · otherLTR
AfrikaansAfrikaansafLatin2one · otherLTR
AmharicአማርኛamEthiopic2one · otherLTR
Hindiहिन्दीhiDevanagari2one · otherLTR
BanglaবাংলাbnBangla2one · otherLTR
Tamilதமிழ்taTamil2one · otherLTR
TeluguతెలుగుteTelugu2one · otherLTR
MarathiमराठीmrDevanagari2one · otherLTR
UrduاردوurArabic2one · otherRTL
Japanese日本語jaHan + Kana1otherLTRscored
Korean한국어koHangul1otherLTR
Chinese (Simplified)中文(简体)zh-HansHan (Simplified)1otherLTR
Chinese (Traditional)中文(繁體)zh-HantHan (Traditional)1otherLTR
ThaiไทยthThai1otherLTR
VietnameseTiếng ViệtviLatin1otherLTR
IndonesianIndonesiaidLatin1otherLTR
MalayMelayumsLatin1otherLTR
FilipinoFilipinofilLatin2one · otherLTR
GeorgianქართულიkaGeorgian2one · otherLTR
ArmenianհայերենhyArmenian2one · otherLTR
QUALITY SUITE MARKS THE 6 LOCALES CARRYING A SCORED REGRESSION CASE IN THE REPOSITORY · IT IS NOT A TIER, AND EVERY OTHER LOCALE TRANSLATES THE SAME WAY
PLURALS

The part that breaks quietly

A locale with four plural forms filled in as two is a bug nobody sees until a count hits the wrong branch. Plural handling is wired to the CLDR table, end to end.

IN THE EDITOR
One input per category

The grid draws the categories the locale declares — no more, no fewer. Polish gets four, Japanese gets one, Arabic gets six.

IN THE FILES
8 of 20 formats hold them

Formats that cannot represent plurals skip them cleanly and report what was skipped in an X-Skipped-Keys header. CSV and XLSX carry them as key[one] rows.

IN GETTEXT
Plural-Forms, mapped by behaviour

An incoming Plural-Forms expression is evaluated over a fixed range of counts and matched to a plural family, so formatting variants and equivalent rewrites all land in the right CLDR category.

RIGHT TO LEFT

Direction is data, not a special case

The rtl flag is computed from the locale's script and stored on the language row, so it reaches the editor, the exports and the API response without anyone remembering to set it.

RTL IN THIS SAMPLE
4 OF 54
  • ar
    العربيةArabic · 6 plural forms
  • he
    עבריתHebrew · 3 plural forms
  • fa
    فارسیPersian · 2 plural forms
  • ur
    اردوUrdu · 2 plural forms

Add the locale you were told to wait for

No request form and no enablement call. If ICU knows the tag, a project can have it today — two locales on Free, unlimited on every paid plan.

PLURAL CATEGORIES AND TEXT DIRECTION ARE RESOLVED FROM CLDR 48 AND ICU AT THE MOMENT YOU ADD THE LANGUAGE