Skip to content

Reference

Supported Languages

langctl works with any language you can identify with a standard language code, and stores all text as Unicode. This reference lists common languages and their codes.

Language Codes

langctl uses BCP 47 language codes: a lowercase ISO 639 language code (en, fil), optionally followed by a region (ISO 3166-1, e.g. pt-BR) or a script (e.g. zh-Hans).

Note

The language part must be lowercase: use en and pt-BR, not EN or PT-BR.

Format

  • Base language: en (English)
  • Regional variant: en-US (English - United States), en-GB (English - United Kingdom)
  • Script variant: zh-Hans (Chinese - Simplified), zh-Hant (Chinese - Traditional)

Commonly Used Languages

The most popular languages for international applications:

CodeLanguageNative NameSpeakers
enEnglishEnglish1.5B
zhChinese中文1.1B
esSpanishEspañol559M
hiHindiहिन्दी602M
arArabicالعربية274M
ptPortuguesePortuguês264M
bnBengaliবাংলা272M
ruRussianРусский258M
jaJapanese日本語125M
deGermanDeutsch134M
frFrenchFrançais280M
koKorean한국어81M
itItalianItaliano85M
trTurkishTürkçe88M
plPolishPolski45M

European Languages

Western Europe

CodeLanguageNative Name
enEnglishEnglish
frFrenchFrançais
deGermanDeutsch
esSpanishEspañol
itItalianItaliano
ptPortuguesePortuguês
nlDutchNederlands
daDanishDansk
noNorwegianNorsk
svSwedishSvenska
fiFinnishSuomi
isIcelandicÍslenska

Central & Eastern Europe

CodeLanguageNative Name
plPolishPolski
csCzechČeština
skSlovakSlovenčina
huHungarianMagyar
roRomanianRomână
bgBulgarianБългарски
ukUkrainianУкраїнська
ruRussianРусский
hrCroatianHrvatski
srSerbianСрпски
slSlovenianSlovenščina
ltLithuanianLietuvių
lvLatvianLatviešu
etEstonianEesti

Asian Languages

East Asia

CodeLanguageNative NameNotes
zhChinese中文Simplified by default
zh-HansChinese (Simplified)简体中文Mainland China
zh-HantChinese (Traditional)繁體中文Taiwan, Hong Kong
jaJapanese日本語Hiragana, Katakana, Kanji
koKorean한국어Hangul

Southeast Asia

CodeLanguageNative Name
viVietnameseTiếng Việt
thThaiไทย
idIndonesianBahasa Indonesia
msMalayBahasa Melayu
filFilipinoFilipino
kmKhmerភាសាខ្មែរ
loLaoລາວ
myBurmeseမြန်မာဘာသာ

South Asia

CodeLanguageNative Name
hiHindiहिन्दी
bnBengaliবাংলা
urUrduاردو
teTeluguతెలుగు
taTamilதமிழ்
mrMarathiमराठी
guGujaratiગુજરાતી
knKannadaಕನ್ನಡ
mlMalayalamമലയാളം
paPunjabiਪੰਜਾਬੀ

West Asia & Middle East

CodeLanguageNative NameDirection
arArabicالعربيةRTL
heHebrewעבריתRTL
faPersian (Farsi)فارسیRTL
trTurkishTürkçeLTR
azAzerbaijaniAzərbaycanLTR
kaGeorgianქართულიLTR

Right-to-Left Languages

langctl supports RTL languages like Arabic, Hebrew and Persian. In the dashboard, translation fields for right-to-left languages are marked and displayed right-to-left.

Using Languages in langctl

Adding Languages to a Project

Via Dashboard

  1. Select the project in the sidebar
  2. Open Languages
  3. Click Add Language
  4. Search for the language and select it

The dashboard offers a list of common languages (the base codes such as en, es, pt, zh). To add other codes, including regional and script variants like pt-BR or zh-Hant, use the CLI.

The number of languages per project depends on your plan: 3 on Free, 10 on Starter, unlimited on Pro and above.

Via CLI

terminal
langctl projects add-language my-project ja

langctl projects add-language my-project ja ko zh

langctl projects add-language my-project en-US en-GB pt-BR

The default language is the source language for translations and AI translation, and the language langctl push uploads by default:

terminal
langctl projects create "My App" \
--default-language en \
--languages en,es,fr,de

langctl projects update my-app --default-language en

Warning

Changing the default language affects AI translation behavior. The default language is used as the source for all AI translations.

AI Translation Coverage

AI translation uses DeepL, which supports many but not all languages. If DeepL can’t translate between two languages, langctl shows an error naming the pair; you can still add those translations by hand, by import or from the CLI.

Use regional variants for locale-specific differences:

CodeVariantSpelling Differences
en-USUS Englishcolor, center, favorite
en-GBBritish Englishcolour, centre, favourite
en-AUAustralian EnglishSimilar to GB with local terms
en-CACanadian EnglishMix of US/GB spelling
CodeVariantNotes
es-ESSpain SpanishVosotros form, European terms
es-MXMexican SpanishMost common in North America
es-ARArgentine SpanishVoseo usage
CodeVariantScriptRegion
zh-HansSimplified简体Mainland China, Singapore
zh-HantTraditional繁體Taiwan, Hong Kong, Macau
terminal
langctl projects create "Mobile App" \
--languages en,zh-Hans,zh-Hant

langctl keys create mobile-app home.welcome \
--value en="Welcome" \
--value zh-Hans="欢迎" \
--value zh-Hant="歡迎"

Languages that read right-to-left:

  • Arabic (ar)
  • Hebrew (he)
  • Persian/Farsi (fa)
  • Urdu (ur)
css
/* CSS automatically applied for RTL languages */
[dir="rtl"] {
text-align: right;
direction: rtl;
}

langctl supports full Unicode (UTF-8):

  • Latin scripts: Basic Latin, Latin Extended
  • Cyrillic: Russian, Ukrainian, Bulgarian
  • CJK: Chinese, Japanese, Korean
  • Arabic: Arabic, Persian, Urdu
  • Indic: Devanagari, Bengali, Tamil, Telugu
  • Other: Greek, Hebrew, Thai, Georgian

Tip

All files written by langctl pull and langctl export use UTF-8. Ensure your application supports UTF-8 to display all languages correctly.

Track translation progress per language:

terminal
langctl projects stats my-project

projects stats shows key counts and, for each language, how many keys are translated. In CI, langctl pull --require-complete exits with an error if any language is missing translations.

Begin with 2-3 languages and expand:

terminal
--languages en,es

langctl projects add-language my-app fr de it

langctl projects add-language my-app ja zh ko

Only add variants when there are significant differences:

terminal
--languages en-US,en-GB,pt-BR,pt-PT

--languages es-ES,es-MX,es-AR,es-CO  # Start with just es

Add languages based on your user base:

  1. Analyze user location data
  2. Add top 3-5 language markets first
  3. Ensure 100% completion before adding more
  4. Expand gradually based on growth
terminal
--languages en,es,pt,fr,de,ja,zh
terminal
--languages en,de,fr,es,it,pl,nl
terminal
--languages en,zh-Hans,ja,ko,th,vi,id

Check that translations exist:

terminal
langctl projects stats my-project     # translated/total per language
langctl keys get my-project home.welcome  # all translations of one key
langctl pull --require-complete          # fail if any language is incomplete

Ensure UTF-8 encoding:

html
<!-- HTML -->
<meta charset="UTF-8">

<!-- iOS Strings file -->
// Save with UTF-8 encoding

<!-- Android XML -->
<?xml version="1.0" encoding="utf-8"?>

Next Steps