ISO 639 is a standard by the International Organization for Standardization (ISO) concerned with the representation of languages and language groups.

It currently consists of four sets (1–3, 5) of code, named after each part which formerly described respective set (part 4 was guidelines without its own coding system); a part 6 was published but withdrawn.

It was first approved in 1967 as a single-part ISO Recommendation, ISO/R 639, superseded in 2002 by part 1 of the new series, ISO 639-1, followed by additional parts. All existing parts of the series were consolidated into a single standard in 2023, largely based on the text of ISO 639-4.

Use of ISO 639 codes

The language codes defined in the several sections of ISO 639 are used for bibliographic purposes and, in computing and internet environments, as a key element of locale data. The codes also find use in various applications, such as Wikipedia URLs for its different language editions.

History

The early form of ISO's language coding system was manifested by ISO/R 639:1967 titled Symbols for Languages, Countries and Authorities, which aimed chiefly to regulate vocabularies signifying languages, countries, and standardization agencies of ISO member bodies. Its "language symbols" consisted of one- or two-letter variable-length identifiers in capitalized Latin alphabets, e.g. <code>E</code> or <code>En</code> for English; <code>S</code>, <code>Sp</code>, or <code>Es</code> for Spanish; and <code>In</code> for Indonesian. It was also allowed to use (the pre-1993 version of) UDC numeral auxiliaries to indicate languages.

{| class="wikitable sortable mw-collapsible mw-collapsed"

|+ class="nowrap" | List of language symbols in ISO/R 639:1967

|-

! Name (English) !! 1-letter !! 2-letter !! UDC !! (1988) !! (Current Set 1)

|-

| Afrikaans || — || <code>Af</code> || <code>=393.6</code> || <code>af</code> || <code>af</code>

|-

| Arabic || — || <code>Ar</code> || <code>=927</code> || <code>ar</code> || <code>ar</code>

|-

| Bulgarian || — || <code>Bg</code> || <code>=867</code> || <code>bg</code> || <code>bg</code>

|-

| Chinese || <code>C</code> || <code>Ch</code> || <code>=951</code> || <code>zh</code> || <code>zh</code>

|-

| Czech || — || <code>Cs</code> || <code>=850</code> || <code>cs</code> || <code>cs</code>

|-

| German || <code>D</code> || <code>De</code> || <code>=30</code> || <code>de</code> || <code>de</code>

|-

| Danish || — || <code>Da</code> || <code>=398</code> || <code>da</code> || <code>da</code>

|-

| English || <code>E</code> || <code>En</code> || <code>=20</code> || <code>en</code> || <code>en</code>

|-

| Esperanto || — || <code>Eo</code> || <code>=089.2</code> || <code>eo</code> || <code>eo</code>

|-

| Spanish || <code>S</code> || <code>Es</code> <code>Sp</code> || <code>=60</code> || <code>es</code> || <code>es</code>

|-

| French || <code>F</code> || <code>Fr</code> || <code>=40</code> || <code>fr</code> || <code>fr</code>

|-

| Finnish || — || <code>Fi</code> || <code>=945.41</code> || <code>fi</code> || <code>fi</code>

|-

| Greek || <code>G</code> || <code>Gr</code> || <code>=75</code> || <code>el</code> || <code>el</code>

|-

| Hebrew || — || <code>He</code> || <code>=924</code> || <code>iw</code> || <code>he</code>

|-

| Hindi || — || <code>Hi</code> || <code>=914.3</code> || <code>hi</code> || <code>hi</code>

|-

| Hungarian || — || <code>Hu</code> || <code>=945.11</code> || <code>hu</code> || <code>hu</code>

|-

| Italian || <code>I</code> || <code>It</code> || <code>=50</code> || <code>it</code> || <code>it</code>

|-

| Interlingua || — || <code>Ia</code> || <code>=089.7</code> || <code>ia</code> || <code>ia</code>

|-

| Interlingue || — || <code>Ie</code> || <code>=089.6</code> || <code>ie</code> || <code>ie</code>

|-

| Indonesian || — || <code>In</code> || <code>=992.21</code> || <code>in</code> || <code>id</code>

|-

| Japanese || <code>J</code> || <code>Ja</code> || <code>=956</code> || <code>ja</code> || <code>ja</code>

|-

| Korean || — || <code>Ko</code> || <code>=957</code> || <code>ko</code> || <code>ko</code>

|-

| Latin || <code>L</code> || <code>La</code> || <code>=71</code> || <code>la</code> || <code>la</code>

|-

| Dutch || — || <code>Nl</code> || <code>=393.1</code> || <code>nl</code> || <code>nl</code>

|-

| Norwegian || — || <code>No</code> || <code>=396</code> || <code>no</code> || <code>no</code>

|-

| Polish || — || <code>Pl</code> || <code>=84</code> || <code>pl</code> || <code>pl</code>

|-

| Portuguese || — || <code>Pt</code> || <code>=690</code> || <code>pt</code> || <code>pt</code>

|-

| Russian || <code>R</code> || <code>Ru</code> || <code>=82</code> || <code>ru</code> || <code>ru</code>

|-

| Romanian || — || <code>Ro</code> || <code>=590</code> || <code>ro</code> || <code>ro</code>

|-

| Sanskrit || — || <code>Sa</code> || <code>=912.3</code> || <code>sa</code> || <code>sa</code>

|-

| Serbo-Croat || — || <code>Sh</code> || <code>=861/862</code> || <code>sh</code> || —

|-

| Slovak || — || <code>Sk</code> || <code>=854</code> || <code>sk</code> || <code>sk</code>

|-

| Slovenian || — || <code>Sn</code> || <code>=863</code> || <code>sl</code> || <code>sl</code>

|-

| Swedish || — || <code>Sv</code> || <code>=397</code> || <code>sv</code> || <code>sv</code>

|-

| Turkish || — || <code>Tr</code> || <code>=943.5</code> || <code>tr</code> || <code>tr</code>

|-

| Ukrainian || — || <code>Uk</code> || <code>=83</code> || <code>uk</code> || <code>uk</code>

|-

| Urdu || — || <code>Ur</code> || <code>=914.31</code> || <code>ur</code> || <code>ur</code>

|}

After decoupling the country code into ISO 3166 in 1974, the first edition of the standard ISO 639:1988 Code for the representation of names of languages was published with a framework of uniformly two-letter identifiers in lowercase Latin alphabets, mostly identical in format and vocabulary to that of the current ISO 639 Set 1.

Since then, the standard has been adopted as a fundamental technology of the rapidly expanding computer industry (RFC 1766), leading to development of more expressive three-letter framework, published as ISO 639-2:1998, largely based on MARC codes for languages. The original two-letter system was redefined as ISO 639-1 in 2001.

Seeking for more extensive support of languages for widening applications, separate supersets of the ISO 639-2 namespace that cover individual languages and groups were established as ISO 639-3 and ISO 639-5, respectively. There was also an attempt to code more precise language variants using four-letter identifiers as ISO 639-6, which was later withdrawn and to be reorganized under another framework, ISO 21636.

Relatively constant updates in parts of ISO 639 had been handled by each own authority in charge until the publication of ISO 639:2023, which harmonized and reunified the body text of former standards and brought about organizational change with a joint maintenance agency supervising all sets and issuing newsletters. The maintenance agency is located in Norway.

Current sets and historical parts of the standard

{|class="wikitable sortable"

|-

!scope=col"| Set (past Part)

!scope=col"| Former name (Codes for the representation of names of languages – ...)

!scope=col"| Language Coding Agency

!scope=col"| First edition

!scope=col"| Current

!scope=col" data-sort-type="number"| No. in list ()

|-

!scope="row"| Set 1

| Part 1: Alpha-2 code

| Infoterm

| 1967 (original ISO/R 639) || 2023

| 183

|-

!scope="row"| Set 2

| Part 2: Alpha-3 code

| Library of Congress

| 1998 || 2023

| 482 + 20 B-only + 4 special + 520 for local use

|-

!scope="row"| Set 3

| Part 3: Alpha-3 code for comprehensive coverage of languages

| SIL International

| 2007 || 2023

| 7,916 + 4 special + 520 for local use<!-- active codes in 2023-01-23 data -->

|-

!scope="row"| (ISO 639-4)

| Part 4: Implementation guidelines and general principles for language coding

| ISO/TC 37/SC 2

| 2010-07-16 || 2023

| (not a list)

|-

!scope="row"| Set 5

| Part 5: Alpha-3 code for language families and groups

| Library of Congress

| 2008-05-15 || 2023

| 115 (including 36 remainder + 29 regular groups from ISO 639-2)

|-

!scope="row"| (ISO 639-6)

| Part 6: Alpha-4 representation for comprehensive coverage of language variants (withdrawn)

| Geolang

| 2009-11-17 || withdrawn

| 21,000+

|}

Each set of the standard is maintained by a language coding agency, which adds codes and changes the status of codes when needed. ISO 639-6 was withdrawn in 2014, and not included in ISO 639:2023.

Characteristics of individual codes

Scopes:

  • Individual languages
  • Macrolanguages (Set 3)
  • Collections of languages (Sets 2, 5). Some collections were already in Set 2, and others were added only in Set 5:
  • Remainder groups: 36 collections in both Set 2 and 5 are of this kind — for compatibility with Set 2 when Set 5 was still not published, the remainder groups do not contain any language and collection that was already coded in Set 2 (however new applications compatible with Set 5 may treat these groups inclusively, as long they respect the containment hierarchy published in Set 5 and they use the most specific collection when grouping languages);
  • The only collection which previously assigned with two-alphabet code is Bihari (bh) during the Part 1 era, which deprecated in June 2021.
  • Regular groups: 29 collections in both Sets 2 and 5 are of this kind — for compatibility with Set 2, they can not contain other groups;
  • Families: 50 new collections coded only in Set 5 (including one containing a regular group already coded in Set 2) — for compatibility with Set 2, they may contain other collections except remainder groups.
  • Dialects: they were intended to be covered by former ISO 639-6 (proposed but now withdrawn).
  • Special situations (Sets 2, 3).
  • Reserved for local use (Sets 2, 3). Also used sometimes in applications needing a two-letter code like standard codes in Sets 1 and 2 (where the special code <code>mis</code> is not suitable), or a three-letter code for collections like standard codes in Set 5.

Types (for individual languages):

  • Living languages (Sets 2, 3) (except Sanskrit, all other macrolanguages are living languages)
  • Extinct languages (Sets 2, 3) (599, 5 of them are in Set 2: <code>chb</code>, <code>chg</code>, <code>cop</code>, <code>lui</code>, <code>sam</code>; none are in Set 1)
  • Historical languages (Sets 1, 2, 3) (213, 35 of them are in Set 2; and 5 of them, namely <code>ave</code>, <code>chu</code>, <code>lat</code>, <code>pli</code> and <code>san</code>, also have a code in Set 1: <code>ae</code>, <code>cu</code>, <code>la</code>, <code>pi</code>, <code>sa</code>)
  • 124 of those were categorised as Ancient languages, this type has merged into Historical since about 2024
  • Constructed languages (Sets 1, 2, 3) (23, 9 of them in Set 2: <code>afh</code>, <code>epo</code>, <code>ido</code>, <code>ile</code>, <code>ina</code>, <code>jbo</code>, <code>tlh</code>, <code>vol</code>, <code>zbl</code>; 5 of them in Set 1: <code>eo</code>, <code>ia</code>, <code>ie</code>, <code>io</code>, <code>vo</code>)

Individual languages and macrolanguages with two distinct three-letter codes in Set 2:

  • Bibliographic (some of them were deprecated, none were defined in Set 3): these are legacy codes (based on language names in English).
  • Terminologic (also defined in Set 3): these are the preferred codes (based on native language names, romanized if needed).
  • All others (including collections of languages and special/reserved codes) only have a single three-letter code for both uses.

Relations between the sets

The different sets of ISO 639 are designed to work together, in such a way that no code means one thing in one set and something else in another. However, not all languages are in all sets, and there is a variety of different ways that specific languages and other elements are treated in the different sets. This depends, for example, whether a language is listed in Sets 1 or 2, whether it has separate B/T codes in Set 2, or is classified as a macrolanguage in Set 3, and so forth.

These various treatments are detailed in the following chart. In each group of rows (one for each scope of Set 3), the last four columns contain codes for a representative language that exemplifies a specific type of relation between the sets of ISO 639, the second column provides an explanation of the relationship, and the first column indicates the number of elements that have that type of relationship. For example, there are four elements that have a code in Set 1, have a B/T code, and are classified as macrolanguages in Set 3. One representative of these four elements is "Persian" <code>fa</code>/<code>per</code>/<code>fas</code>.

{|class="wikitable sortable sort-under" style="text-align:center"

|-

!scope="col" rowspan="2"| Scope

!scope="col" rowspan="2"| Number of cases

!scope="col" rowspan="2"| Description

!scope="col" colspan="4"| Example of matching codes

|-

!scope="col"

!scope="col"

!scope="col"

!scope="col"

|-

!scope="row" rowspan="10"| Individual languages<br /> ("I")

| 128

|style="text-align:left"| Individual languages not part of a macrolanguage, with code in each Set 1, 2 and 3 (only one code in Set 2).<br /> There are 184 assigned codes in Set 1 for individual languages, macrolanguages or groups; subtract those counted in rows below, this leaves:

| <code>en</code> ||colspan="2"| <code>eng</code>

|rowspan="16" style="background:#CCC"

|-

| 2

|style="text-align:left"| Individual languages, with code in each Set 1, 2 and 3, that had separate B/T codes in Set 2, but whose B codes were withdrawn (since 2008-06-28) keeping their T codes for all uses. These are: <code>hr</code>/(<code>scr</code>)/<code>hrv</code>, and <code>sr</code>/(<code>scc</code>)/<code>srp</code>.<br /> Both are part of the same macrolanguage <code>hbs</code> added in Set 3 to include also other newly encoded individual languages, but its code <code>sh</code> in Set 1 was also withdrawn and it had no code defined in Set 2.

| <code>hr</code> || (<code>scr</code>)/<code>hrv</code> (B/T) || <code>hrv</code>

|-

| 3

|style="text-align:left"| Individual languages belonging to a macrolanguage in Set 3, with a single code in Set 2 and also having a code in Set 1. These are: <code>bs</code>/<code>bos</code> (part of macrolanguage <code>hbs</code>), <code>nb</code>/<code>nob</code> and <code>nn</code>/<code>nno</code> (both part of macrolanguage <code>no</code>/<code>nor</code>).

| <code>nb</code> ||colspan="2"| <code>nob</code>

|-

| 11

|style="text-align:left"| Individual languages with separate B/T codes in Set 2, but not in any of the special cases in succeeding lines.<br /> There are 20 pairs of separate B/T codes assigned in Set 2 to individual languages or macrolanguages; subtract the special cases below, this leaves:

| <code>de</code> || <code>ger</code>/<code>deu</code> (B/T) || <code>deu</code>

|-

| 3

|style="text-align:left"| Individual languages with separate B/T codes in Set 2 but the letters from the Set 1 code are not the first two letters of the Set 2T code. These are: <code>cs</code>/<code>cze</code>/<code>ces</code>, <code>mi</code>/<code>mao</code>/<code>mri</code>, and <code>sk</code>/<code>slo</code>/<code>slk</code>.

| <code>cs</code> || <code>cze</code>/<code>ces</code> (B/T) || <code>ces</code>

|-

| 3

|style="text-align:left"| Individual languages in Sets 2 and 3 (do not belong to a macrolanguage), but that were covered in Set 1 by a code whose equivalent in Set 2 is a collective. These are: <code>bho</code>, <code>mai</code>, and <code>mag</code>.

|style="background:#CCC"| (<code>bh</code>)|| colspan="2" | <code>bho</code>

|-

| few

|style="text-align:left"| Any other individual language in Sets 2 and 3, without code in Set 1.

|style="background:#CCC" ||colspan="2"| <code>ast</code>

|-

| 1

|style="text-align:left"| Individual languages added in Set 3 without codes in Sets 1 and 2, but that were covered by a macrolanguage in Sets 2 and 3 also encoded in Set 1.

|style="background:#CCC"| (<code>ar</code>) ||style="background:#CCC"| (<code>ara</code>) || <code>arb</code>

|-

| 1

|style="text-align:left"| An individual language in Set 3, without code in Set 2, but was covered in Set 1 by a code whose equivalent in Set 2 is a collective group (see the entry below for this group).

|style="background:#CCC"| (<code>bh</code>)|| style="background:#CCC" | (<code>bih</code>) || <code>sck</code>

|-

| > 7,000

|style="text-align:left"| Any other individual language in Set 3 without any code in Sets 1 and 2 (possibly covered in Set 2 by a collective code, like <code>nic</code> "Niger-Kodofanian (Other)" which is a remainder group).

|style="background:#CCC" ||style="background:#CCC"| (<code>nic</code>) || <code>aaa</code>

|-style="background:#EEF"

!scope="row" rowspan="6"| Macrolanguages<br /> ("M")

| 28

|style="text-align:left"| Macrolanguages in Set 3 that also have codes in Set 1 and 2.<br /> There are 62 codes assigned in Set 3 for macrolanguages; subtract those with special cases below, this leaves:

| <code>ar</code> ||colspan="2"| <code>ara</code>

|-style="background:#EEF"

| 4

|style="text-align:left"| Macrolanguages in Set 3 with separate B/T codes in Set 2. These are: <code>fa</code>/<code>per</code>/<code>fas</code>, <code>ms</code>/<code>may</code>/<code>msa</code>, <code>sq</code>/<code>alb</code>/<code>sqi</code>, and <code>zh</code>/<code>chi</code>/<code>zho</code>.

| <code>fa</code> || <code>per</code>/<code>fas</code> (B/T) || <code>fas</code>

|-style="background:#EEF"

| 1

|style="text-align:left"| Macrolanguage in Set 3 which contain languages that have codes in Set 1. Only: <code>no</code>/<code>nor</code> (containing: <code>nb</code>/<code>nob</code>, and <code>nn</code>/<code>nno</code>).

| <code>no</code> ||colspan="2"| <code>nor</code>

|-style="background:#EEF"

| 25

|style="text-align:left"| Macrolanguages in Sets 2 and 3, but without code in Set 1.

|style="background:#CCC" ||colspan="2"| <code>bal</code>

|-style="background:#EEF"

| 1

|style="text-align:left"| Macrolanguage in Set 3, without code in Set 2, and whose code in Set 1 is deprecated.

|style="background:#CCC"| (<code>sh</code>)|| style="background:#CCC" | — || <code>hbs</code>

|-style="background:#EEF"

| 3

|style="text-align:left"| Macrolanguages in Set 3, without codes in Set 1 or 2. These are: <code>bnc</code>, <code>kln</code>, and <code>luy</code>.

|style="background:#CCC" ||style="background:#CCC" || <code>bnc</code>

|-

!scope="row" rowspan="4"| Families and groups (collective)<br /> ("C")

| 1

|style="text-align:left"| Bihari is marked as collective and has a Set 2 code. It was having a Set 1 code but deprecated in 2021. B codes were included for historical reasons because previous widely used bibliographic systems used language codes based on the English name for the language. In contrast, the Set 1 codes were based on the native name for the language, and there was also a strong desire to have Set 2 codes (T codes) for these languages which were similar to the corresponding 2-character code in Set 1.

  • For instance, the German language (Set 1: <code>de</code>) has two codes in Set 2: <code>ger</code> (B code) and <code>deu</code> (T code), whereas there is only one code in Set 2, <code>eng</code>, for the English language.
  • 2 former B codes were withdrawn, leaving today only 20 pairs of B/T codes.

Individual languages in Set 2 always have a code in Set 3 (only the Set 2 terminology code is reused there) but may or may not have a code in Set 1, as illustrated by the following examples:

  • Set 3 <code>eng</code> corresponds to Set 2 <code>eng</code> and Set 1 <code>en</code>
  • Set 3 <code>ast</code> corresponds to Set 2 <code>ast</code> but lacks a code in Set 1.

Some codes (62) in Set 3 are macrolanguages. These are groups containing multiple individual languages that have a good mutual understanding and are commonly mixed or confused. Some macrolanguages developed a default standard form on one of their individual languages (e.g. Mandarin is implied by default for the Chinese macrolanguage, other individual languages may be still distinguished if needed but the specific code <code>cmn</code> for Mandarin is rarely used).

  • 1 macrolanguage has a Set 2 code and a Set 1 code, while its member individual languages also have codes in Set 1 and Set 2: <code>nor</code>/<code>no</code> contains <code>nno</code>/<code>nn</code>, <code>nob</code>/<code>nb</code>; or
  • 4 macrolanguages have two Set 2 codes (B/T) and a Set 1 code: <code>per</code>/<code>fas</code>/<code>fa</code>, <code>may</code>/<code>msa</code>/<code>ms</code>, <code>alb</code>/<code>sqi</code>/<code>sq</code>, and <code>chi</code>/<code>zho</code>/<code>zh</code>;
  • 28 macrolanguages have a Set 2 code but no Set 1 code;
  • 29 other macrolanguages only have codes in Set 3.

Collective codes in Set 2 have a code in Set 5: e.g. <code>aus</code> in Sets 2 and 5, which stands for Australian languages.

  • Some codes were added in Set 5 but had no code in Set 2: e.g. <code>sqj</code>

Sets 2 and 3 also have a reserved range and four special codes:

  • Codes <code>qaa</code> through <code>qtz</code> are reserved for local use.
  • There are four special codes: <code>mis</code> for languages that have no code yet assigned, <code>mul</code> for "multiple languages", <code>und</code> for "undefined", and <code>zxx</code> for "no linguistic content, not applicable".

Code space

Two-letter code space

Two-letter (formerly "Alpha-2") identifiers (for codes composed of 2 letters of the ISO basic Latin alphabet) are used in Set 1. When codes for a wider range of languages were desired, more than 2 letter combinations could cover (a maximum of 26<sup>2</sup> = 676), Set 2 was developed using three-letter codes. (However, the latter was formally published first.)

Three-letter code space

Three-letter (formerly "Alpha-3") identifiers (for codes composed of 3 letters of the ISO basic Latin alphabet) are used in Set 2, Set 3, and Set 5. The number of languages and language groups that can be so represented is 26<sup>3</sup> = 17,576.

The common use of three-letter codes by three sets of ISO 639 requires some coordination within a larger system.

Set 2 defines four special codes <code>mis</code>, <code>mul</code>, <code>und</code>, <code>zxx</code>, a reserved range <code>qaa-qtz</code> (20 × 26 = 520 codes) and has 20 double entries (the B/T codes), plus 2 entries with deprecated B-codes.<!-- scc and scr --> This sums up to 520 + 22 + 4 = 546 codes that cannot be used in Set 3 to represent languages or in Set 5 to represent language families or groups. The remainder is 17,576 – 546 = 17,030.

<!-- A further tighter upper limit can be calculated by subtracting the numbers of language collections from ISO 639-2. [Comment: This sentence appears in the article on ISO 639-3. If it is retained here, it might be rewritten to include in a broader overview of the Alpha-3 space. In general as I understand it, most 639-2 codes are also in 639-3, so the math here might be a little misleading.]-->

There are somewhere around six to seven thousand languages on Earth today. So those 17,030 codes are adequate to assign a unique code to each language, although some languages may end up with arbitrary codes that sound nothing like the traditional name(s) of that language.

Alpha-4 code space (withdrawn)

"Alpha-4" codes (for codes composed of 4 letters of the ISO basic Latin alphabet) were proposed to be used in ISO 639-6, which has been withdrawn. The upper limit for the number of languages and dialects that can be represented is 26<sup>4</sup> = 456,976.

See also

  • IETF language tags (based on ISO 639)
  • ISO 3166 (codes for countries)
  • ISO 15924 (codes for writing systems)
  • Codes for constructed languages
  • Language code
  • Language families and languages
  • List of languages
  • List of official languages
  • Lists of ISO 639 codes

Notes and references

  • ISO 639 at ISO official website
  • Language Coding Agency websites:
  • The ISO 639 Language Code at Infoterm, LCA for Set 1 (code list provided by Set 2 LCA below)
  • ISO 639-2 at the Library of Congress, LCA for Set 2
  • ISO 639-3 at SIL International, LCA for Set 3
  • ISO 693-5 at the Library of Congress, LCA for Set 5
  • ISO 639 Maintenance Agency reports
  • Common Locale Data Repository which contains translations of ISO 639 codes in other languages in an XML format. The CLDR survey tool also contains a more readable format of the data.