RecAPI
Language identifiers

Language identifier names at functions like kRecGetLanguageInfo and kRecFindLanguageEx can be accessed or specified by their English names or by their coding in a range of standards. Note that some standards don't support all of our languages, these are noted below. There is a different problem with the Chinese, Portuguese and Serbian languages: we use two separate language codes in all of these 3 cases based on the country or the script used: Simplified and Traditional Chinese, Portugal and Brazilian Portuguese, Cyrillic and Latin Serbian. The different ISO 639-x standards don't make such a difference. The handling of these languages is described at "In case of language-pairs" below.

CSDK internal code: This is the last 3 letters of the name used by us as the LANGUAGES enum, i.e. the 3 letters following "LANG_". Note that the kRecFindLanguage family of functions accepts both 3-letter internal codes and the "LANG_" prefixed 8-letter ones. This identifier can be used to uniquely identify any of our languages. Standard ISO idetifiers (see later here) all lack some of our languages. The ISO 639-3 superset used by us also has the feature of uniquely identifying all of our languages so if you want to have a close-to-standard identifier then you may consider using that one instead of this internal code.

ISO 639-1: Some of our languages are not supported by this standard, in such cases kRecGetLanguageInfo returns an empty string in Name_639_1. In case of language-pairs the ISO 639-1 standard code is returned at both languages. The kRecFindLanguage family of functions supports both the 2-letter language codes (e.g. en) and the combined language and country codes (e.g. en-US). Sometimes the country codes are needed for the correct mapping (e.g. pt-BR for Brazilian Portuguese, zh-TW for Traditional Chinese, etc.), while sometimes the script code is necessary (e.g. sr-Cyrl for Cyrillic Serbian and sr-Latn for Latin Serbian). The table below shows those combined codes that could be necessary, but other combinations not shown in the table are supported as well. Note that kRecGetLanguageInfo always returns the 2-letter basic code only.

ISO 639-2/B: Some of our languages are not supported by this standard, in such cases kRecGetLanguageInfo returns an empty string in Name_639_2B. In case of language-pairs the ISO 639-2/B standard code is returned at the first language of the language-pair only, while an empty string is returned at the second language. Note that some of the identifier codes in our 639-2/B implementation do not refer to a specific language, but a language collection. These identifiers are:

  • myn - for Mayan,
  • nah - for Nahuatl,
  • smi - for Sami,
  • wen - for Sorbian.

ISO 639-3: This is the only language identifier standard that can map 1-to-1 to our languages. That is because it has a method to define local language codes. The used local codes are:

  • qbp - for Brazilian Portuguese
  • qct - for Traditional Chinese
  • qes - for Eskimo
  • qis - for Visayan
  • qsl - for Latin Serbian
  • qti - for Tinpo

In case of language-pairs the ISO 639-3 standard code is returned at the first language of the language-pair only, while a local code is returned at the second language. (In previous versions Simplified Chinese was also coded with a local code, qcs, now zho is returned; qcs can still be used with the kRecFindLanguage family of functions.) Some of our languages are language collections that don't have an ISO 639-3 code but do have an ISO 639-2/B code. In these cases the capitalized 639-2/B codes are used by us as extended 639-3 codes:

  • MYN - for Mayan,
  • NAH - for Nahuatl,
  • SMI - for Sami,
  • WEN - for Sorbian.

These are not standard 639-3 names, but adding them made the 639-3 superset able to identify all of our languages.

Windows 3 letter code: This is the GetLocaleInfo(LOCALE_SABBREVLANGNAME) identifier that is sometimes called ISO 639x in the Microsoft documentations, however it does not match any of the ISO standards. It is mostly (but not always) based on the ISO 639-1 two-letter codes by adding a third character. It looks similar to the ISO 639-2/B and ISO 639-3 standards, but has some different codes (e. g. The Swedish language ISO identifier is swe while the Windows identifier is SVE.) Some of our languages are not supported by the Windows 3 letter codes, in such cases kRecGetLanguageInfo returns an empty string in Name_Win_3.

Windows locale ID (LCID): The kRecGetLanguageInfo function returns this identifier as an integer. The kRecFindLanguages and kRecFindLanguageEx functions can use this numeric value directly to find a language, while the kRecFindLanguage family of functions as well as the kRecSetUILang functions support a special string representation: "LCID_12345" i.e. the decimal value of the local ID prefixed by the "LCID_" string. In C/C++ it can be generated with the "LCID_%d" sprintf format. Some of our languages are not supported by the LCID codes, in such cases kRecGetLanguageInfo returns the ID of English (0x0409) in LangID.

Note:
There are some conflicting values in different language code standards, so take care when using them with the kRecFindLanguage family of functions:
  • CRO means Croatian as an internal code, while cro means Crow as a 639-3 code
  • LAT means Latvian as an internal code, while lat means Latin as a 639-3 or 639-2B code
  • MAY means Mayan as an internal code, while may means Malay as a 639-2B code
  • ROM means Romanian as an internal or Windows code, while rom means Romany as a 639-3 or 639-2B code
  • SRP means Latin Serbian as a Windows code, while srp means Cyrillic Serbian as a 639-3 or 639-2B code
  • pt means both Portugal and Brazilian Portuguese as a 639-1 code
  • sr means both Cyrillic and Latin Serbian as a 639-1 code
  • zh means both Simplified and Traditional Chinese as a 639-1 code
With kRecFindLanguages it's suggested to stick to a single standard and place the language name in the corresponding field of the LANGUAGE_INFO structure, and not the common EnglishName field. With the simpler kRecFindLanguage function you don't have such choice; in case of conflicting languages it returns the most relevant of the possible languages (usually based on the character case) with a warning. If you're using the CSDK internal code with kRecFindLanguage it's best to use it with the "LANG_" prefix. It is suggested to use kRecFindLanguageEx instead of these functions. With kRecFindLanguageEx you can stick to a single standard, and it is the most flexible even when the general query with LANGCODE_ALL is used. In case of conflicting languages kRecFindLanguageEx returns the most relevant of the possible languages (usually based on the character case) with a warning, and the conflicting other language can be learned as well.

The below table shows all supported languages with the supported language names and identifiers. Some languages have multiple identifiers listed in cells below, in those cases the first ID is the one returned by kRecGetLanguageInfo while the other IDs can also be used with the kRecFindLanguage family of functions.

NameAlternate Nameenum nameScriptContinentISO 639-3ISO 639-2/BISO 639-1WindowsMicrosoft ID
English LANG_ENGLatinEurope, Oceania,
North America
engengenENU, ENG, ENA,
ENC, ENZ
0409, 0809, 0C09,
1009, 1409
German LANG_GERLatinEuropedeugerdeDEU, GER0407
French LANG_FRELatinEurope, North AmericafrafrefrFRA, FRC040C, 0C0C
Dutch LANG_DUTLatinEuropenlddutnlNLD0413
Norwegian LANG_NORLatinEuropenornorno, nb, nnNOR, NON0414, 0814
Swedish LANG_SWELatinEuropesweswesvSVE041D
Finnish LANG_FINLatinEuropefinfinfiFIN040B
Danish LANG_DANLatinEuropedandandaDAN0406
Icelandic LANG_ICELatinEuropeisliceisISL040F
Portuguese LANG_PORLatinEuropeporporpt, pt-PTPTG0816
Spanish LANG_SPALatinEurope, Latin AmericaspaspaesESN, ESM0C0A, 080A
CatalanCatalonianLANG_CATLatinEuropecatcatcaCAT0403
GalicianGalleganLANG_GALLatinEuropeglgglgglGLC0456
Italian LANG_ITALatinEuropeitaitaitITA0410
Maltese LANG_MALLatinEuropemltmltmtMLT043A
Greek LANG_GREGreekEuropeellgreelELL0408
Polish LANG_POLLatinEuropepolpolplPLK0415
Czech LANG_CZHLatinEuropecesczecsCSY0405
Slovak LANG_SLKLatinEuropeslksloskSKY041B
Hungarian LANG_HUNLatinEuropehunhunhuHUN040E
Slovenian LANG_SLNLatinEuropeslvslvslSLV0424
Croatian LANG_CROLatinEuropehrvscrhrHRV, HRB041A, 001A
RomanianRumanianLANG_ROMLatinEuroperonrumroROM0418
Albanian LANG_ALBLatinEuropesqialbsqSQI041C
Turkish LANG_TURLatinEurope, AsiaturturtrTRK041F
Estonian LANG_ESTLatinEuropeestestetETI0425
Latvian LANG_LATLatinEuropelavlavlvLVI0426
Lithuanian LANG_LITLatinEuropelitlitltLTH0427
Esperanto LANG_ESPLatinInternationalepoepoeo  
Serbian(Latin)BosnianLANG_SRLLatinEuropeqsl sr, sr-Latn,
Lt-sr, bs
SRL, SRS, SRM,
SRP, BSB
081A, 181A, 241A,
2C1A, 701A, 141A,
681A
Serbian LANG_SRBCyrillicEuropesrpsrp, sccsr, sr-Cyrl,
Cy-sr
SRB, SRN, SRO,
SRQ, BSC
0C1A, 1C1A, 281A,
301A, 6C1A, 7C1A,
201A, 641A, 781A
Macedonian LANG_MACCyrillicEuropemkdmacmkMKI042F
Moldavian LANG_MOLCyrillicEuropemolmolmo, ro-MO 0818
Bulgarian LANG_BULCyrillicEuropebulbulbgBGR0402
ByelorussianBelarusian,
Belarusan
LANG_BELCyrillicEuropebelbelbeBEL0423
Ukrainian LANG_UKRCyrillicEuropeukrukrukUKR0422
Russian LANG_RUSCyrillicEurope, AsiarusrusruRUS0419
Chechen LANG_CHECyrillicAsiachechece  
Kabardian LANG_KABCyrillicAsiakbdkbd   
Afrikaans LANG_AFRLatinAfricaafrafrafAFK0436
Aymara LANG_AYMLatinLatin Americaaymaymay  
Basque LANG_BASLatinEuropeeusbaqeuEUQ042D
BembaIchibembaLANG_BEMLatinAfricabembem   
BlackfootSiksikaLANG_BLALatinNorth Americablabla   
Breton LANG_BRELatinEuropebrebrebrBRE047E
Brazilian LANG_BRALatinLatin Americaqbp pt, pt-BRPTB0416
BugotuBughotuLANG_BUGLatinOceaniabgt    
Chamorro LANG_CHALatinOceaniachachach  
Tswana(Chuana)Chuana,
Setswana
LANG_CHULatinAfricatsntsntnTSN, TNA0432
Corsican LANG_CORLatinEuropecoscoscoCOS0483
Crow LANG_CRWLatinNorth Americacro    
EskimoInuitLANG_ESKLatinEurope, North Americaqes    
Faroese LANG_FARLatinEuropefaofaofoFOS0438
Fijian LANG_FIJLatinOceaniafijfijfj  
Frisian LANG_FRILatinEuropefryfryfyFYN0462
Friulian LANG_FRULatinEuropefurfur   
Gaelic(Irish)IrishLANG_GLILatinEuropegleglega, gd-IEIRE083C
Gaelic(Scottish)ScottishLANG_GLSLatinEuropeglaglagdGLA0491, 043C
Ganda(Luganda)LugandaLANG_GANLatinAfricalugluglg  
Guarani LANG_GUALatinLatin Americagrngrngn 0474
Hani LANG_HANLatinAsiahni    
Hawaiian LANG_HAWLatinOceaniahawhaw  0475
Ido LANG_IDOLatinInternationalidoidoio  
Indonesian LANG_INDLatinAsiaindindidIND0421
Interlingua LANG_INTLatinInternationalinainaia  
KasubKashubianLANG_KASLatinEuropecsbcsb   
KawaWa, BlangLANG_KAWLatinAsiawbm    
KikuyuGikuyuLANG_KIKLatinAfricakikkikki  
Kongo LANG_KONLatinAfricakonkonkg  
Kpelle LANG_KPELatinAfricakpekpe   
Kurdish LANG_KURLatinAsiakurkurku  
Latin LANG_LTNLatinInternationallatlatla 0476
Luba LANG_LUBLatinAfricalualua   
LuxembourgishLuxembourgian,
Letzeburgesch,
Luxembourgeois
LANG_LUXLatinEuropeltzltzlbLBX046E
Malagasy LANG_MLGLatinAfricamlgmlgmg  
Malay LANG_MLYLatinAsiamsamaymsMSL043E
MalinkeManinkakanLANG_MLNLatinAfricamlq    
Maori LANG_MAOLatinOceaniamrimaomiMRI0481
Mayan LANG_MAYLatinLatin AmericaMYNmyn   
MiaoHmongLANG_MIALatinAsiahmnhmn   
MinangkabauMinankabawLANG_MINLatinAsiaminmin   
Mohawk LANG_MOHLatinNorth Americamohmoh MWK047C
Nahuatl LANG_NAHLatinLatin AmericaNAHnah   
NyanjaChewa, ChichewaLANG_NYALatinAfricanyanyany  
Occidental LANG_OCCLatinInternationalile, occileie  
OjibwayOjibwaLANG_OJILatinNorth Americaojiojioj  
Papiamento LANG_PAPLatinLatin Americapappap  0479
PidginEnglishTok PisinLANG_PIDLatinOceaniatpitpi   
ProvencalOccitanLANG_PROLatinEuropeoci, prvociocOCI0482
Quechua LANG_QUELatinLatin Americaque, quzquequQUE086B
RhaeticRomanshLANG_RHALatinEuroperohrohrmRMC0417
Romany LANG_ROYLatinEuroperomrom   
RwandaRuanda,
Kinyarwanda
LANG_RUALatinAfricakinkinrwKIN 
Rundi LANG_RUNLatinAfricarunrunrn  
Samoan LANG_SAMLatinOceaniasmosmosm  
Sardinian LANG_SARLatinEuropesrdsrdsc  
Shona LANG_SHOLatinAfricasnasnasn  
SiouxDakotaLANG_SIOLatinNorth Americadakdak   
Sami LANG_SMILatinEuropeSMIsmi "", SZI003B
Sami(Lule)Lule SamiLANG_SMLLatinEuropesmjsmj SMJ103B
Sami(Northern)Northern SamiLANG_SMNLatinEuropesmesmeseSME043B
Sami(Southern)Southern SamiLANG_SMSLatinEuropesmasma SMA183B
Somali LANG_SOMLatinAfricasomsomso 0477
SothoSesotho, SutuLANG_SOTLatinAfricasotsotst 0430
Sundanese LANG_SUNLatinAsiasunsunsu  
SwahiliKiswahiliLANG_SWALatinAfricaswaswaswSWK0441
SwaziSwatiLANG_SWZLatinAfricasswsswss  
TagalogFilipinoLANG_TAGLatinAsiatgl, filtgl, filtlFPO0464
Tahitian LANG_TAHLatinOceaniatahtahty  
PirezTinpoLANG_TINLatinAsiaqti    
Tongan LANG_TONLatinOceaniatontonto  
TunTuniaLANG_TUNLatinAsiatug    
VisayanCebuanoLANG_VISLatinAsiaqis, ceb"", ceb   
Welsh LANG_WELLatinEuropecymwelcyCYM0452
Sorbian(Wend)WendLANG_WENLatinEuropeWEN, hsb, dsbwen, hsb, dsbsbHSB, DSB042E
Wolof LANG_WOLLatinAfricawolwolwoWOL0488
Xhosa LANG_XHOLatinAfricaxhoxhoxhXHO0434
Zapotec LANG_ZAPLatinLatin Americazapzap   
Zulu LANG_ZULLatinAfricazulzulzuZUL0435
Japanese LANG_JPNAsianAsiajpnjpnjaJPN0411
Chinese(S)Simplified ChineseLANG_CHSAsianAsiazho, qcschizh, zh-Hans,
zh-CHS, zh-CN,
zh-SG
CHS, ZHI0004, 0804, 1004
Chinese(T)Traditional ChineseLANG_CHTAsianAsiaqct zh, zh-Hant,
zh-CHT, zh-HK,
zh-MO, zh-TW
CHT, ZHH, ZHM7C04, 0404, 0C04,
1404
Korean LANG_KRNAsianAsiakorkorkoKOR0412
Thai LANG_THAAsianAsiathathathTHA041E
Arabic LANG_ARARight-to-leftAsiaaraaraarARA0401
Hebrew LANG_HEBRight-to-leftEurope, AsiahebhebheHEB040D
Vietnamese LANG_VIELatinAsiavievieviVIT042A