RecAPI
All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Properties Modules Pages
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. The BCP 47 identifiers are also supported, they can also be used to uniquely identify all of our languages (see below).

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 (see the LANGUAGE_INFO structure). 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 BCP 47 style 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 in the Name_639_1 field. See also the Name_BCP_47 field (in the LANGUAGE_INFO structure).

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 language identifier standard can map 1-to-1 to our languages, 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
  • qsl - for Latin Serbian
  • qti - for Pirez

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. The Sami language is a language collection that does not have an ISO 639-3 code but has an ISO 639-2/B code. In this case the capitalized 639-2/B code (SMI) is used by us as extended 639-3 code. This is not a standard 639-3 name, but adding it made the 639-3 superset able to identify all of our languages. (In previous versions MYN, NAH and WEN were also used as similar uppercase extensions for the Mayan, Nahuatl and Sorbian language collections; now we use the standard quc, nci and hsb language codes instead that are the 639-3 codes for the largest languages of those families. Simplified Chinese used to be coded with a local code, qcs, now zho is returned. Visayan used to be coded as qis, now it is changed to ceb. Note that all the previously used names can still be used with the kRecFindLanguage family of functions to maintain backwards compatibility.)

BCP 47: This is a newer standard that uniquely identifies all the languages supported by any of the previous 639-x standards. kRecGetLanguageInfo returns such language names (like en-US or sr-Latn-RS, etc.) in Name_BCP_47. These names are mostly based on the 639-1 two-letter standard, but sometimes 3 letter language codes are also used (like hsb-DE). The country-code component is usually 2 letters, but rarely a 3 digit code is used (like pap-029). The kRecFindLanguageEx function supports these names both as BCP 47 codes and 639-1 ones for backwards compatibility.

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 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 this is the most flexible function 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-1BCP 47WindowsMicrosoft ID
English LANG_ENGLatinEurope, Oceania,
North America
engengenen-USENU, ENG, ENA,
ENC, ENZ
0409, 0809, 0C09,
1009, 1409
German LANG_GERLatinEuropedeugerdede-DEDEU, GER0407
French LANG_FRELatinEurope, North Americafrafrefrfr-FRFRA, FRC040C, 0C0C
DutchFlemishLANG_DUTLatinEuropenlddutnlnl-NLNLD0413
NorwegianBokmal, NynorskLANG_NORLatinEuropenornorno, nb, nnno-NONOR, NON0414, 0814
Swedish LANG_SWELatinEuropesweswesvsv-SESVE041D
Finnish LANG_FINLatinEuropefinfinfifi-FIFIN040B
Danish LANG_DANLatinEuropedandandada-DKDAN0406
Icelandic LANG_ICELatinEuropeisliceisis-ISISL040F
Portuguese LANG_PORLatinEuropeporporpt, pt-PTpt-PTPTG0816
Spanish LANG_SPALatinEurope, Latin Americaspaspaeses-ESESN, ESM0C0A, 080A
CatalanCatalonian,
Valencian
LANG_CATLatinEuropecatcatcaca-ESCAT0403
GalicianGalleganLANG_GALLatinEuropeglgglgglgl-ESGLC0456
Italian LANG_ITALatinEuropeitaitaitit-ITITA0410
Maltese LANG_MALLatinEuropemltmltmtmt-MTMLT043A
Greek LANG_GREGreekEuropeellgreelel-GRELL0408
Polish LANG_POLLatinEuropepolpolplpl-PLPLK0415
Czech LANG_CZHLatinEuropecesczecscs-CZCSY0405
Slovak LANG_SLKLatinEuropeslkslosksk-SKSKY041B
Hungarian LANG_HUNLatinEuropehunhunhuhu-HUHUN040E
Slovenian LANG_SLNLatinEuropeslvslvslsl-SISLV0424
Croatian LANG_CROLatinEuropehrvscrhrhr-HRHRV, HRB041A, 001A
RomanianRumanianLANG_ROMLatinEuroperonrumroro-ROROM0418
Albanian LANG_ALBLatinEuropesqialbsqsq-ALSQI041C
Turkish LANG_TURLatinEurope, Asiaturturtrtr-TRTRK041F
Estonian LANG_ESTLatinEuropeestestetet-EEETI0425
Latvian LANG_LATLatinEuropelavlavlvlv-LVLVI0426
Lithuanian LANG_LITLatinEuropelitlitltlt-LTLTH0427
Esperanto LANG_ESPLatinInternationalepoepoeoeo-001  
Serbian(Latin)BosnianLANG_SRLLatinEuropeqsl "", sr-Latn,
Lt-sr, bs
sr-Latn-RSSRL, SRS, SRM,
SRP, BSB
081A, 181A, 241A,
2C1A, 701A, 141A,
681A
Serbian LANG_SRBCyrillicEuropesrpsrp, sccsr, sr-Cyrl,
Cy-sr
sr-Cyrl-RSSRB, SRN, SRO,
SRQ, BSC
0C1A, 1C1A, 281A,
301A, 6C1A, 7C1A,
201A, 641A, 781A
Macedonian LANG_MACCyrillicEuropemkdmacmkmk-MKMKI042F
MoldavianMoldovanLANG_MOLCyrillicEuropemolmolmo, ro-MOro-MO 0818
Bulgarian LANG_BULCyrillicEuropebulbulbgbg-BGBGR0402
ByelorussianBelarusian,
Belarusan
LANG_BELCyrillicEuropebelbelbebe-BYBEL0423
Ukrainian LANG_UKRCyrillicEuropeukrukrukuk-UAUKR0422
Russian LANG_RUSCyrillicEurope, Asiarusrusruru-RURUS0419
Chechen LANG_CHECyrillicAsiachechecece-RU  
Kabardian LANG_KABCyrillicAsiakbdkbd kbd-RU  
Afrikaans LANG_AFRLatinAfricaafrafrafaf-ZAAFK0436
Aymara LANG_AYMLatinLatin Americaaymaymayay-BO  
Basque LANG_BASLatinEuropeeusbaqeueu-ESEUQ042D
BembaIchibembaLANG_BEMLatinAfricabembem bem-ZM  
BlackfootSiksikaLANG_BLALatinNorth Americablabla bla-CA  
Breton LANG_BRELatinEuropebrebrebrbr-FRBRE047E
Brazilian LANG_BRALatinLatin Americaqbp "", pt-BRpt-BRPTB0416
BugotuBughotuLANG_BUGLatinOceaniabgt  bgt-SB  
Chamorro LANG_CHALatinOceaniachachachch-MP  
Tswana(Chuana)Chuana,
Setswana
LANG_CHULatinAfricatsntsntntn-ZATSN, TNA0432
Corsican LANG_CORLatinEuropecoscoscoco-FRCOS0483
Crow LANG_CRWLatinNorth Americacro  cro-US  
EskimoInuitLANG_ESKLatinEurope, North Americaqes, esx  esx-CA  
Faroese LANG_FARLatinEuropefaofaofofo-FOFOS0438
Fijian LANG_FIJLatinOceaniafijfijfjfj-FJ  
Frisian LANG_FRILatinEuropefryfryfyfy-NLFYN0462
Friulian LANG_FRULatinEuropefurfur fur-IT  
Gaelic(Irish)IrishLANG_GLILatinEuropegleglega, gd-IEga-IEIRE083C
Gaelic(Scottish)ScottishLANG_GLSLatinEuropeglaglagdgd-GBGLA0491, 043C
Ganda(Luganda)LugandaLANG_GANLatinAfricalugluglglg-UG  
Guarani LANG_GUALatinLatin Americagrngrngngn-PY 0474
Hani LANG_HANLatinAsiahni  hni-CN  
Hawaiian LANG_HAWLatinOceaniahawhaw haw-US 0475
Ido LANG_IDOLatinInternationalidoidoioio-001  
Indonesian LANG_INDLatinAsiaindindidid-IDIND0421
Interlingua LANG_INTLatinInternationalinainaiaia-001  
KasubKashubianLANG_KASLatinEuropecsbcsb csb-PL  
KawaWa, BlangLANG_KAWLatinAsiawbm  wbm-MM  
KikuyuGikuyuLANG_KIKLatinAfricakikkikkiki-KE  
Kongo LANG_KONLatinAfricakonkonkgkg-CD  
Kpelle LANG_KPELatinAfricakpekpe kpe-LR  
Kurdish LANG_KURLatinAsiakurkurkuku-Latn-TR  
Latin LANG_LTNLatinInternationallatlatlala-001 0476
Luba LANG_LUBLatinAfricalualua lua-CD  
LuxembourgishLuxembourgian,
Letzeburgesch,
Luxembourgeois
LANG_LUXLatinEuropeltzltzlblb-LULBX046E
Malagasy LANG_MLGLatinAfricamlgmlgmgmg-MG  
Malay LANG_MLYLatinAsiamsamaymsms-MYMSL043E
MalinkeManinkakan,
Maninka
LANG_MLNLatinAfricaemk, mlq  emk-GN  
Maori LANG_MAOLatinOceaniamrimaomimi-NZMRI0481
MayanK'iche'LANG_MAYLatinLatin Americaquc, mynmyn myn-GT 0486
MiaoHmong, MongLANG_MIALatinAsiahmnhmn hmn-CN  
MinangkabauMinankabawLANG_MINLatinAsiaminmin min-ID  
Mohawk LANG_MOHLatinNorth Americamohmoh moh-CAMWK047C
NahuatlAztecLANG_NAHLatinLatin Americanci, nahnah nah-MX  
NyanjaChewa, ChichewaLANG_NYALatinAfricanyanyanyny-ZW  
OccidentalInterlingueLANG_OCCLatinInternationalile, occileieie-001  
OjibwayOjibwaLANG_OJILatinNorth Americaojiojiojoj-CA  
Papiamento LANG_PAPLatinLatin Americapappap pap-029 0479
PidginEnglishTok PisinLANG_PIDLatinOceaniatpitpi tpi-PG  
ProvencalOccitanLANG_PROLatinEuropeoci, prvociococ-FROCI0482
Quechua LANG_QUELatinLatin Americaque, quzqueququ-PEQUE086B
RhaeticRomanshLANG_RHALatinEuroperohrohrmrm-CHRMC0417
Romany LANG_ROYLatinEuroperomrom rom-001  
RwandaRuanda,
Kinyarwanda
LANG_RUALatinAfricakinkinrwrw-RWKIN 
Rundi LANG_RUNLatinAfricarunrunrnrn-BI  
Samoan LANG_SAMLatinOceaniasmosmosmsm-WS  
Sardinian LANG_SARLatinEuropesrdsrdscsc-IT  
Shona LANG_SHOLatinAfricasnasnasnsn-ZW  
SiouxDakotaLANG_SIOLatinNorth Americadakdak dak-US  
Sami LANG_SMILatinEuropeSMIsmi smi-NO"", SZI003B
Sami(Lule)Lule SamiLANG_SMLLatinEuropesmjsmj smj-NOSMJ103B
Sami(Northern)Northern SamiLANG_SMNLatinEuropesmesmesese-NOSME043B
Sami(Southern)Southern SamiLANG_SMSLatinEuropesmasma sma-NOSMA183B
Somali LANG_SOMLatinAfricasomsomsoso-SO 0477
SothoSesotho, SutuLANG_SOTLatinAfricasotsotstst-ZA 0430
Sundanese LANG_SUNLatinAsiasunsunsusu-Latn-ID  
SwahiliKiswahiliLANG_SWALatinAfricaswaswaswsw-KESWK0441
SwaziSwatiLANG_SWZLatinAfricasswsswssss-SZ  
TagalogFilipino,
Pilipino
LANG_TAGLatinAsiatgl, filtgl, filtltl-PHFPO0464
Tahitian LANG_TAHLatinOceaniatahtahtyty-PF  
PirezTinpoLANG_TINLatinEurope, Asia,
Africa
qti  qti-001  
TonganTongaLANG_TONLatinOceaniatontontoto-TO  
TunTuniaLANG_TUNLatinAsiatug  tug-TD  
VisayanCebuanoLANG_VISLatinAsiaceb, qis  ceb-PH  
Welsh LANG_WELLatinEuropecymwelcycy-GBCYM0452
Sorbian(Wend)WendLANG_WENLatinEuropehsb, dsb, wenwen, hsb, dsb"", sbwen-DEHSB, DSB042E
Wolof LANG_WOLLatinAfricawolwolwowo-SNWOL0488
Xhosa LANG_XHOLatinAfricaxhoxhoxhxh-ZAXHO0434
Zapotec LANG_ZAPLatinLatin Americazapzap zap-MX  
Zulu LANG_ZULLatinAfricazulzulzuzu-ZAZUL0435
Japanese LANG_JPNAsianAsiajpnjpnjaja-JPJPN0411
Chinese(S)Simplified ChineseLANG_CHSAsianAsiazho, qcschizh, zh-CHS,
zh-CN, zh-SG
zh-Hans-CNCHS, ZHI0804, 0004, 1004
Chinese(T)Traditional ChineseLANG_CHTAsianAsiaqct "", zh-CHT,
zh-HK, zh-MO,
zh-TW
zh-Hant-TWCHT, ZHH, ZHM0404, 7C04, 0C04,
1404
Korean LANG_KRNAsianAsiakorkorkoko-KRKOR0412
Thai LANG_THAAsianAsiathathathth-THTHA041E
Arabic LANG_ARARight-to-leftAsiaaraaraarar-SAARA0401
Hebrew LANG_HEBRight-to-leftEurope, Asiahebhebhehe-ILHEB040D
Vietnamese LANG_VIELatinAsiavievievivi-VNVIT042A