1 /*
2  * iso639-2 language codes
3  */
4 #include <string.h>
5 #include "iso639_2.h"
6 
7 typedef struct {
8 	char *code1;
9 	char *code2;
10 	unsigned char main;
11 	char *language;
12 } iso639_2_t;
13 
14 static iso639_2_t iso639_2[] = {
15 	{ "abk", "",    1, "Abkhazian" },
16 	{ "ace", "",    1, "Achenese" },
17 	{ "ace", "",    1, "Achinese" },
18 	{ "ach", "",    1, "Acoli" },
19 	{ "ada", "",    1, "Adangme" },
20 	{ "ady", "",    1, "Adygei" },
21 	{ "ady", "",    1, "Adyghe" },
22 	{ "aar", "",    1, "Afar" },
23 	{ "afh", "",    1, "Afrihili" },
24 	{ "afr", "",    1, "Afrikaans" },
25 	{ "afa", "",    1, "Afroasiatic languages" },
26 	{ "ain", "",    1, "Ainu" },
27 	{ "aka", "",    1, "Akan" },
28 	{ "akk", "",    1, "Akkadian" },
29 	{ "alb", "sqi", 1, "Albanian" },
30 	{ "gsw", "",    1, "Alemannic" },
31 	{ "ale", "",    1, "Aleut" },
32 	{ "alg", "",    1, "Algonquian languages" },
33 	{ "gsw", "",    1, "Alsatian" },
34 	{ "alt", "",    1, "Altai, Southern" },
35 	{ "tut", "",    1, "Altaic languages" },
36 	{ "amh", "",    1, "Amharic" },
37 	{ "egy", "",    1, "Ancient Egyptian" },
38 	{ "grc", "",    1, "Ancient Greek" },
39 	{ "anp", "",    1, "Angika" },
40 	{ "apa", "",    1, "Apache languages" },
41 	{ "arc", "",    1, "Aramaic, Imperial" },
42 	{ "arc", "",    1, "Aramaic, Official" },
43 	{ "arp", "",    1, "Arapaho" },
44 	{ "arw", "",    1, "Arawak" },
45 	{ "arg", "",    1, "Argonese" },
46 	{ "arm", "hye", 1, "Armenian" },
47 	{ "rup", "",    1, "Aromanian" },
48 	{ "art", "",    1, "Artificial languages" },
49 	{ "rup", "",    1, "Arumanian" },
50 	{ "asm", "",    1, "Assamese" },
51 	{ "ast", "",    1, "Asturian" },
52 	{ "ast", "",    1, "Asturleonese" },
53 	{ "ath", "",    1, "Athabaskan languages" },
54 	{ "aus", "",    1, "Australian languages" },
55 	{ "map", "",    1, "Austronesian languages" },
56 	{ "ava", "",    1, "Avaric" },
57 	{ "ave", "",    1, "Avestan" },
58 	{ "awa", "",    1, "Awadhi" },
59 	{ "aze", "",    1, "Azerbaijani" },
60 	{ "ast", "",    1, "Bable" },
61 	{ "ban", "",    1, "Balinese" },
62 	{ "bat", "",    1, "Baltic languages" },
63 	{ "bal", "",    1, "Baluchi" },
64 	{ "bam", "",    1, "Bambara" },
65 	{ "bai", "",    1, "Bamileke languages" },
66 	{ "bad", "",    1, "Banda languages" },
67 	{ "bnt", "",    1, "Bantu languages" },
68 	{ "bas", "",    1, "Basa" },
69 	{ "bak", "",    1, "Bashkir" },
70 	{ "baq", "eus", 1, "Basque" },
71 	{ "bej", "",    1, "Bedawiyet" },
72 	{ "bej", "",    1, "Beja" },
73 	{ "bel", "",    1, "Belarusian" },
74 	{ "bem", "",    1, "Bemba" },
75 	{ "ben", "",    1, "Bengali" },
76 	{ "ber", "",    1, "Berber languages" },
77 	{ "bho", "",    1, "Bhojpuri" },
78 	{ "bih", "",    1, "Bihari languages" },
79 	{ "bik", "",    1, "Bikol" },
80 	{ "byn", "",    1, "Bilin" },
81 	{ "bin", "",    1, "Bini" },
82 	{ "bis", "",    1, "Bislama" },
83 	{ "bla", "",    1, "Blackfoot" },
84 	{ "byn", "",    1, "Blin" },
85 	{ "zbl", "",    1, "Blissymbols" },
86 	{ "bos", "",    1, "Bosnian" },
87 	{ "bra", "",    1, "Braj" },
88 	{ "btk", "",    1, "Bratak languages" },
89 	{ "bre", "",    1, "Breton" },
90 	{ "bug", "",    1, "Buginese" },
91 	{ "bul", "",    1, "Bulgarian" },
92 	{ "bua", "",    1, "Buriat" },
93 	{ "bur", "mya", 1, "Burmese" },
94 	{ "cad", "",    1, "Caddo" },
95 	{ "spa", "",    0, "Castilian" },
96 	{ "cat", "",    1, "Catalan" },
97 	{ "cau", "",    1, "Caucasian languages" },
98 	{ "ceb", "",    1, "Cebuano" },
99 	{ "cel", "",    1, "Celtic languages" },
100 	{ "cai", "",    1, "Central American Indian languages" },
101 	{ "khm", "",    1, "Central Khmer" },
102 	{ "chg", "",    1, "Chagatai" },
103 	{ "cmc", "",    1, "Chamic languages" },
104 	{ "cha", "",    1, "Chamorro" },
105 	{ "che", "",    1, "Chechen" },
106 	{ "chr", "",    1, "Cherokee" },
107 	{ "nya", "",    1, "Chewa" },
108 	{ "chy", "",    1, "Cheyenne" },
109 	{ "chb", "",    1, "Chibcha" },
110 	{ "nya", "",    1, "Chichewa" },
111 	{ "chi", "zho", 1, "Chinese" },
112 	{ "chn", "",    1, "Chinook Jargon" },
113 	{ "chp", "",    1, "Chipewyan" },
114 	{ "cho", "",    1, "Choctaw" },
115 	{ "zha", "",    1, "Chuang" },
116 	{ "chu", "",    1, "Church Slavic" },
117 	{ "chu", "",    1, "Church Slavonic" },
118 	{ "chk", "",    1, "Chuukese" },
119 	{ "chv", "",    1, "Chuvash" },
120 	{ "kbd", "",    1, "Circassian" },
121 	{ "nwc", "",    1, "Classical Nepal Bhasa" },
122 	{ "nwc", "",    1, "Classical Newari" },
123 	{ "syc", "",    1, "Classical Syriac" },
124 	{ "rar", "",    1, "Cook Islands Maori" },
125 	{ "cop", "",    1, "Coptic" },
126 	{ "cor", "",    1, "Cornish" },
127 	{ "cos", "",    1, "Corsican" },
128 	{ "cre", "",    1, "Cree" },
129 	{ "mus", "",    1, "Creek" },
130 	{ "crp", "",    1, "creoles and pidgins" },
131 	{ "cpe", "",    1, "creoles and pidgins, English-based" },
132 	{ "cpf", "",    1, "creoles and pidgins, French-based" },
133 	{ "cpp", "",    1, "creoles and pidgins, Portuguese-based" },
134 	{ "crh", "",    1, "Crimean Tartar" },
135 	{ "crh", "",    1, "Crimean Turkish" },
136 	{ "hrv", "",    1, "Croatian" },
137 	{ "cus", "",    1, "Cushitic languages" },
138 	{ "cze", "ces", 1, "Czech" },
139 	{ "dak", "",    1, "Dakota" },
140 	{ "dan", "",    1, "Danish" },
141 	{ "dar", "",    1, "Dargwa" },
142 	{ "del", "",    1, "Delaware" },
143 	{ "chp", "",    1, "Dene Suline" },
144 	{ "div", "",    1, "Dhivehi" },
145 	{ "din", "",    1, "Dinka" },
146 	{ "div", "",    1, "Divehi" },
147 	{ "doi", "",    1, "Dogri" },
148 	{ "dgr", "",    1, "Dogrib" },
149 	{ "dra", "",    1, "Dravidian languages" },
150 	{ "dua", "",    1, "Duala" },
151 	{ "dut", "",    1, "Dutch" },
152 	{ "dum", "",    1, "Dutch, Middle" },
153 	{ "dyu", "",    1, "Dyula" },
154 	{ "dzo", "",    1, "Dzongkha" },
155 	{ "frs", "",    1, "Eastern Frisian" },
156 	{ "bin", "",    1, "Edo" },
157 	{ "efi", "",    1, "Efik" },
158 	{ "egy", "",    1, "Egyptian (Ancient)" },
159 	{ "eka", "",    1, "Ekajuk" },
160 	{ "elx", "",    1, "Elamite" },
161 	{ "eng", "",    1, "English" },
162 	{ "enm", "",    0, "English, Middle" },
163 	{ "ang", "",    0, "English, Old" },
164 	{ "myv", "",    1, "Erzya" },
165 	{ "epo", "",    1, "Esperanto" },
166 	{ "est", "",    1, "Estonian" },
167 	{ "ewe", "",    1, "Ewe" },
168 	{ "ewo", "",    1, "Ewondo" },
169 	{ "fan", "",    1, "Fang" },
170 	{ "fat", "",    1, "Fanti" },
171 	{ "fao", "",    1, "Faroese" },
172 	{ "fij", "",    1, "Fijian" },
173 	{ "fil", "",    1, "Filipino" },
174 	{ "fin", "",    1, "Finnish" },
175 	{ "fiu", "",    1, "Finno-Ugric languages" },
176 	{ "dut", "",    1, "Flemish" },
177 	{ "fon", "",    1, "Fon" },
178 	{ "fre", "fra", 1, "French" },
179 	{ "frm", "",    0, "French, Middle" },
180 	{ "fro", "",    0, "French, Old" },
181 	{ "frs", "",    1, "Frisian, Eastern" },
182 	{ "frr", "",    1, "Frisian, Northern" },
183 	{ "fry", "",    1, "Frisian, Western" },
184 	{ "fur", "",    1, "Friulian" },
185 	{ "ful", "",    1, "Fulah" },
186 	{ "gaa", "",    1, "Ga" },
187 	{ "gla", "",    1, "Gaelic" },
188 	{ "car", "",    1, "Galibi Carib" },
189 	{ "lug", "",    1, "Ganda" },
190 	{ "gay", "",    1, "Gayo" },
191 	{ "gba", "",    1, "Gbaya" },
192 	{ "gez", "",    1, "Ge'ez" },
193 	{ "geo", "kat", 1, "Georgian" },
194 	{ "ger", "deu", 1, "German" },
195 	{ "nds", "",    1, "German, Low" },
196 	{ "gmh", "",    1, "German, Middle High" },
197 	{ "goh", "",    1, "German, Old High" },
198 	{ "gem", "",    1, "Germanic languages" },
199 	{ "kik", "",    1, "Gikuyu" },
200 	{ "gil", "",    1, "Gilbertese" },
201 	{ "gon", "",    1, "Gondi" },
202 	{ "gor", "",    1, "Gorontalo" },
203 	{ "got", "",    1, "Gothic" },
204 	{ "grb", "",    1, "Grebo" },
205 	{ "grc", "",    1, "Greek, Ancient" },
206 	{ "gre", "ell", 1, "Greek, Modern" },
207 	{ "kal", "",    1, "Greenlandic" },
208 	{ "grn", "",    1, "Guarani" },
209 	{ "guj", "",    1, "Gujarati" },
210 	{ "gwi", "",    1, "Gwich'in" },
211 	{ "hai", "",    1, "Haida" },
212 	{ "hat", "",    1, "Haitian" },
213 	{ "hat", "",    1, "Haitian Creole" },
214 	{ "hau", "",    1, "Hausa" },
215 	{ "haw", "",    1, "Hawaiian" },
216 	{ "heb", "",    1, "Hebrew" },
217 	{ "hil", "",    1, "Hiligaynon" },
218 	{ "him", "",    1, "Himachali languages" },
219 	{ "hin", "",    1, "Hindi" },
220 	{ "hmo", "",    1, "Hiri Motu" },
221 	{ "hit", "",    1, "Hittite" },
222 	{ "hmn", "",    1, "Hmong" },
223 	{ "hun", "",    1, "Hungarian" },
224 	{ "hup", "",    1, "Hupa" },
225 	{ "iba", "",    1, "Iban" },
226 	{ "ice", "isl", 1, "Icelandic" },
227 	{ "ido", "",    1, "Ido" },
228 	{ "ibo", "",    1, "Igbo" },
229 	{ "ijo", "",    1, "Ijo languages" },
230 	{ "ilo", "",    1, "Iloko" },
231 	{ "arc", "",    1, "Imperial Aramaic" },
232 	{ "smn", "",    1, "Inari Sami" },
233 	{ "inc", "",    1, "Indic languages" },
234 	{ "ine", "",    1, "Indo-European languages" },
235 	{ "ind", "",    1, "Indonesian" },
236 	{ "inh", "",    1, "Ingush" },
237 	{ "ina", "",    1, "Interlingua" },
238 	{ "ile", "",    1, "Interlingue, Occidental" },
239 	{ "iku", "",    1, "Inuktitut" },
240 	{ "ipk", "",    1, "Inupiaq" },
241 	{ "ira", "",    1, "Iranian languages" },
242 	{ "mga", "",    1, "Irish, Middle" },
243 	{ "sga", "",    1, "Irish, Old" },
244 	{ "iro", "",    1, "Iroquoian languages" },
245 	{ "ita", "",    1, "Italian" },
246 	{ "jpn", "",    1, "Japanese" },
247 	{ "jav", "",    1, "Javanese" },
248 	{ "kac", "",    1, "Jingpho" },
249 	{ "jrb", "",    1, "Judaeo-Arabic" },
250 	{ "jpr", "",    1, "Judaeo-Persian" },
251 	{ "kab", "",    1, "Kabyle" },
252 	{ "kac", "",    1, "Kachin" },
253 	{ "kal", "",    1, "Kalaallisut" },
254 	{ "xal", "",    1, "Kalmyk" },
255 	{ "kam", "",    1, "Kamba" },
256 	{ "kan", "",    1, "Kannada" },
257 	{ "kau", "",    1, "Kanuri" },
258 	{ "pam", "",    1, "Kapampangan" },
259 	{ "kaa", "",    1, "Kara-Kalpak" },
260 	{ "krc", "",    1, "Karachay-Balkar" },
261 	{ "krl", "",    1, "Karelian" },
262 	{ "kar", "",    1, "Karen languages" },
263 	{ "kas", "",    1, "Kashmiri" },
264 	{ "csb", "",    1, "Kashubian" },
265 	{ "kaw", "",    1, "Kawi" },
266 	{ "kaz", "",    1, "Kazakh" },
267 	{ "kha", "",    1, "Khasi" },
268 	{ "khi", "",    1, "Khoisan languages" },
269 	{ "kho", "",    1, "Khotanese" },
270 	{ "kik", "",    1, "Kikuyu" },
271 	{ "kmb", "",    1, "Kimbundu" },
272 	{ "kin", "",    1, "Kinyarwanda" },
273 	{ "kir", "",    1, "Kirghiz" },
274 	{ "gil", "",    1, "Kiribati" },
275 	{ "tlh", "",    1, "Klingon" },
276 	{ "kom", "",    1, "Komi" },
277 	{ "kon", "",    1, "Kongo" },
278 	{ "kok", "",    1, "Konkani" },
279 	{ "kor", "",    1, "Korean" },
280 	{ "kos", "",    1, "Kosraean" },
281 	{ "kpe", "",    1, "Kpelle" },
282 	{ "kro", "",    1, "Kru languages" },
283 	{ "kua", "",    1, "Kuanyama" },
284 	{ "kum", "",    1, "Kumyk" },
285 	{ "kur", "",    1, "Kurdish" },
286 	{ "kru", "",    1, "Kurukh" },
287 	{ "kut", "",    1, "Kutenai" },
288 	{ "kua", "",    1, "Kwanyama" },
289 	{ "kir", "",    1, "Kyrgyz" },
290 	{ "lad", "",    1, "Ladino" },
291 	{ "lah", "",    1, "Lahnda" },
292 	{ "lam", "",    1, "Lamba" },
293 	{ "day", "",    1, "Land Dayak languages" },
294 	{ "lao", "",    1, "Lao" },
295 	{ "lat", "",    1, "Latin" },
296 	{ "lav", "",    1, "Latvian" },
297 	{ "ast", "",    1, "Leonese" },
298 	{ "ltz", "",    1, "Letzeburgesch" },
299 	{ "lez", "",    1, "Lezghian" },
300 	{ "lim", "",    1, "Limburgan" },
301 	{ "lim", "",    1, "Limburger" },
302 	{ "lim", "",    1, "Limburgish" },
303 	{ "lin", "",    1, "Lingala" },
304 	{ "lit", "",    1, "Lithuanian" },
305 	{ "jbo", "",    1, "Lojban" },
306 	{ "nds", "",    1, "Low German" },
307 	{ "nds", "",    1, "Low Saxon" },
308 	{ "dsb", "",    1, "Lower Sorbian" },
309 	{ "loz", "",    1, "Lozi" },
310 	{ "lub", "",    1, "Luba-Katanga" },
311 	{ "lua", "",    1, "Luba-Lulua" },
312 	{ "lui", "",    1, "Luiseno" },
313 	{ "smj", "",    1, "Lule Sami" },
314 	{ "lun", "",    1, "Lunda" },
315 	{ "luo", "",    1, "Luo" },
316 	{ "luo", "",    1, "Luo (Kenya and Tanzania)" },
317 	{ "lus", "",    1, "Lushai" },
318 	{ "ltz", "",    1, "Luxembourgish" },
319 	{ "mas", "",    1, "Maasai" },
320 	{ "rup", "",    1, "Macedo-Romanian" },
321 	{ "mac", "mkd", 1, "Macedonian" },
322 	{ "mad", "",    1, "Madurese" },
323 	{ "mag", "",    1, "Magahi" },
324 	{ "mai", "",    1, "Maithili" },
325 	{ "mak", "",    1, "Makasar" },
326 	{ "mlg", "",    1, "Malagasy" },
327 	{ "may", "msa", 1, "Malay" },
328 	{ "mal", "",    1, "Malayalam" },
329 	{ "div", "",    1, "Maldivian" },
330 	{ "mlt", "",    1, "Maltese" },
331 	{ "mnc", "",    1, "Manchu" },
332 	{ "mdr", "",    1, "Mandar" },
333 	{ "man", "",    1, "Mandingo" },
334 	{ "mni", "",    1, "Manipuri" },
335 	{ "mno", "",    1, "Manobo languages" },
336 	{ "glv", "",    1, "Manx" },
337 	{ "mao", "mri", 1, "Maori" },
338 	{ "arn", "",    1, "Mapuche" },
339 	{ "arn", "",    1, "Mapudungun" },
340 	{ "mar", "",    1, "Marathi" },
341 	{ "chm", "",    1, "Mari" },
342 	{ "mah", "",    1, "Marshallese" },
343 	{ "mwr", "",    1, "Marwari" },
344 	{ "myn", "",    1, "Mayan languages" },
345 	{ "men", "",    1, "Mende" },
346 	{ "mic", "",    1, "Mi'kmaq" },
347 	{ "mic", "",    1, "Micmac" },
348 	{ "dum", "",    1, "Middle Dutch" },
349 	{ "enm", "",    1, "Middle English" },
350 	{ "frm", "",    1, "Middle French" },
351 	{ "gmh", "",    1, "Middle High German" },
352 	{ "mga", "",    1, "Middle Irish" },
353 	{ "pal", "",    1, "Middle Persian" },
354 	{ "min", "",    1, "Minangkabau" },
355 	{ "mwl", "",    1, "Mirandese" },
356 	{ "gre", "ell", 1, "Modern Greek" },
357 	{ "moh", "",    1, "Mohawk" },
358 	{ "mdf", "",    1, "Moksha" },
359 	{ "mkh", "",    1, "Mon-Khmer languages" },
360 	{ "lol", "",    1, "Mongo" },
361 	{ "mon", "",    1, "Mongolian" },
362 	{ "mos", "",    1, "Mossi" },
363 	{ "mul", "",    1, "Multiple languages" },
364 	{ "mun", "",    1, "Munda languages" },
365 	{ "nqo", "",    1, "N'Ko" },
366 	{ "nah", "",    1, "Nahuatl" },
367 	{ "nau", "",    1, "Nauruan" },
368 	{ "nav", "",    1, "Navaho" },
369 	{ "nav", "",    1, "Navajo" },
370 	{ "ndo", "",    1, "Ndonga" },
371 	{ "nap", "",    1, "Neapolitan" },
372 	{ "new", "",    1, "Nepal Bhasa" },
373 	{ "nep", "",    1, "Nepali" },
374 	{ "new", "",    1, "Newari" },
375 	{ "nia", "",    1, "Nias" },
376 	{ "nic", "",    1, "Niger-Congo languages" },
377 	{ "ssa", "",    1, "Nilo-Saharan languages" },
378 	{ "niu", "",    1, "Niuean" },
379 	{ "nog", "",    1, "Nogai" },
380 	{ "non", "",    0, "Norse, Old" },
381 	{ "nai", "",    1, "North American Indian languages" },
382 	{ "frr", "",    1, "Northern Frisian" },
383 	{ "nde", "",    1, "Northern Ndebele" },
384 	{ "sme", "",    1, "Northern Sami" },
385 	{ "nso", "",    1, "Northern Sotho" },
386 	{ "nob", "",    1, "Norwegian Bokmaal" },
387 	{ "nno", "",    1, "Norwegian Nynorsk" },
388 	{ "zxx", "",    1, "Not linguistic content; not applicable" },
389 	{ "nub", "",    1, "Nubian languages" },
390 	{ "iii", "",    1, "Nuosu" },
391 	{ "nym", "",    1, "Nyamwezi" },
392 	{ "nya", "",    1, "Nyanja" },
393 	{ "nyn", "",    1, "Nyankole" },
394 	{ "nyr", "",    1, "Nyoro" },
395 	{ "nzi", "",    1, "Nzima" },
396 	{ "oci", "",    1, "Occitan" },
397 	{ "pro", "",    0, "Occitan, Old" },
398 	{ "arc", "",    1, "Official Aramaic" },
399 	{ "xal", "",    1, "Oirat" },
400 	{ "oji", "",    1, "Ojibwa" },
401 	{ "chu", "",    1, "Old Bulgarian" },
402 	{ "chu", "",    1, "Old Church Slavonic" },
403 	{ "ang", "",    1, "Old English" },
404 	{ "fro", "",    1, "Old French" },
405 	{ "goh", "",    1, "Old High German" },
406 	{ "sga", "",    1, "Old Irish" },
407 	{ "nwc", "",    1, "Old Newari" },
408 	{ "non", "",    1, "Old Norse" },
409 	{ "pro", "",    1, "Old Occitan" },
410 	{ "peo", "",    1, "Old Persian" },
411 	{ "pro", "",    1, "Old Provencal" },
412 	{ "chu", "",    1, "Old Slavonic" },
413 	{ "ori", "",    1, "Oriya" },
414 	{ "orm", "",    1, "Oromo" },
415 	{ "osa", "",    1, "Osage" },
416 	{ "oss", "",    1, "Ossetian" },
417 	{ "oss", "",    1, "Ossetic" },
418 	{ "oto", "",    1, "Otomian languages" },
419 	{ "ota", "",    1, "Ottoman Turkish" },
420 	{ "pal", "",    1, "Pahlavi" },
421 	{ "pau", "",    1, "Palauan" },
422 	{ "pli", "",    1, "Pali" },
423 	{ "pam", "",    1, "Pampanga" },
424 	{ "pag", "",    1, "Pangasinan" },
425 	{ "pan", "",    1, "Panjabi" },
426 	{ "pap", "",    1, "Papiamento" },
427 	{ "paa", "",    1, "Papuan languages" },
428 	{ "pus", "",    1, "Pashto" },
429 	{ "pus", "",    1, "Pashto language" },
430 	{ "nso", "",    1, "Pedi" },
431 	{ "per", "fas", 1, "Persian" },
432 	{ "pal", "",    0, "Persian, Middle" },
433 	{ "peo", "",    0, "Persian, Old" },
434 	{ "phi", "",    1, "Philippine languages" },
435 	{ "phn", "",    1, "Phoenician" },
436 	{ "fil", "",    0, "Pilipino" },
437 	{ "pon", "",    1, "Pohnpeian" },
438 	{ "pol", "",    1, "Polish" },
439 	{ "por", "",    1, "Portuguese" },
440 	{ "pra", "",    1, "Prakit" },
441 	{ "pro", "",    0, "Provencal, Old" },
442 	{ "pan", "",    1, "Punjabi" },
443 	{ "que", "",    1, "Quechua" },
444 	{ "raj", "",    1, "Rajasthani" },
445 	{ "rap", "",    1, "Rapanui" },
446 	{ "rar", "",    1, "Rarotongan" },
447 	{ "roa", "",    1, "Romance languages" },
448 	{ "rum", "ron", 1, "Romanian" },
449 	{ "roh", "",    1, "Romansh" },
450 	{ "rom", "",    1, "Romany" },
451 	{ "run", "",    1, "Rundi" },
452 	{ "rus", "",    1, "Russian" },
453 	{ "kho", "",    1, "Sakan" },
454 	{ "sal", "",    1, "Salishan languages" },
455 	{ "sam", "",    1, "Samaritan Aramaic" },
456 	{ "smi", "",    1, "Sami languages" },
457 	{ "smo", "",    1, "Samoan" },
458 	{ "sad", "",    1, "Sandawe" },
459 	{ "sag", "",    1, "Sango" },
460 	{ "san", "",    1, "Sanskrit" },
461 	{ "sat", "",    1, "Santali" },
462 	{ "srd", "",    1, "Sardinian" },
463 	{ "sas", "",    1, "Sasak" },
464 	{ "nds", "",    1, "Saxon, Low" },
465 	{ "sco", "",    1, "Scots" },
466 	{ "gla", "",    1, "Scottish Gaelic" },
467 	{ "sel", "",    1, "Selkup" },
468 	{ "sem", "",    1, "Semitic languages" },
469 	{ "nso", "",    1, "Sepedi" },
470 	{ "srp", "",    1, "Serbian" },
471 	{ "srr", "",    1, "Serer" },
472 	{ "shn", "",    1, "Shan" },
473 	{ "sna", "",    1, "Shona" },
474 	{ "iii", "",    1, "Sichuan Yi" },
475 	{ "scn", "",    1, "Sicilian" },
476 	{ "sid", "",    1, "Sidamo" },
477 	{ "sgn", "",    1, "Sign languages" },
478 	{ "bla", "",    1, "Siksika" },
479 	{ "snd", "",    1, "Sindhi" },
480 	{ "sin", "",    1, "Sinhala" },
481 	{ "sin", "",    1, "Sinhalese" },
482 	{ "sit", "",    1, "Sino-Tibetan languages" },
483 	{ "sio", "",    1, "Siouan languages" },
484 	{ "sms", "",    1, "Skolt Sami" },
485 	{ "den", "",    1, "Slave (Athapascan)" },
486 	{ "sla", "",    1, "Slavic languages" },
487 	{ "slo", "slk", 1, "Slovak" },
488 	{ "slv", "",    1, "Slovenian" },
489 	{ "sog", "",    1, "Sogdian" },
490 	{ "som", "",    1, "Somali" },
491 	{ "son", "",    1, "Songhay languages" },
492 	{ "snk", "",    1, "Soninke" },
493 	{ "wen", "",    1, "Sorbian languages" },
494 	{ "dsb", "",    1, "Sorbian, Lower" },
495 	{ "hsb", "",    1, "Sorbian, Upper" },
496 	{ "sai", "",    1, "South American Indian languages" },
497 	{ "alt", "",    1, "Southern Altai" },
498 	{ "nbl", "",    1, "Southern Ndebele" },
499 	{ "sma", "",    1, "Southern Sami" },
500 	{ "sot", "",    1, "Southern Sotho" },
501 	{ "spa", "",    1, "Spanish" },
502 	{ "srn", "",    1, "Sranan Tongo" },
503 	{ "zgh", "",    1, "Standard Moroccan Tamazight" },
504 	{ "suk", "",    1, "Sukuma" },
505 	{ "sux", "",    1, "Sumerian" },
506 	{ "sun", "",    1, "Sundanese" },
507 	{ "sus", "",    1, "Susu" },
508 	{ "swa", "",    1, "Swahili" },
509 	{ "ssw", "",    1, "Swati" },
510 	{ "swe", "",    1, "Swedish" },
511 	{ "gsw", "",    1, "Swiss German" },
512 	{ "syr", "",    1, "Syriac" },
513 	{ "tgl", "",    1, "Tagalog" },
514 	{ "tah", "",    1, "Tahitian" },
515 	{ "tai", "",    1, "Tai languages" },
516 	{ "tgk", "",    1, "Tajik" },
517 	{ "tmh", "",    1, "Tamashek" },
518 	{ "tam", "",    1, "Tamil" },
519 	{ "tat", "",    1, "Tatar" },
520 	{ "tel", "",    1, "Telugu" },
521 	{ "ter", "",    1, "Tereno" },
522 	{ "tet", "",    1, "Tetum" },
523 	{ "tha", "",    1, "Thai" },
524 	{ "tib", "bod", 1, "Tibetan" },
525 	{ "tig", "",    1, "Tigre" },
526 	{ "tir", "",    1, "Tigrinya" },
527 	{ "tem", "",    1, "Time" },
528 	{ "tiv", "",    1, "Tiv" },
529 	{ "tli", "",    1, "Tlingit" },
530 	{ "tpi", "",    1, "Tok Pisin" },
531 	{ "tkl", "",    1, "Tokelau" },
532 	{ "tog", "",    1, "Tonga (Nyasa)" },
533 	{ "ton", "",    1, "Tonga (Tonga Islands)" },
534 	{ "tsi", "",    1, "Tsimshian" },
535 	{ "tso", "",    1, "Tsonga" },
536 	{ "tsn", "",    1, "Tswana" },
537 	{ "tum", "",    1, "Tumbuka" },
538 	{ "tup", "",    1, "Tupian languages" },
539 	{ "tur", "",    1, "Turkish" },
540 	{ "ota", "",    1, "Turkish, Ottoman" },
541 	{ "tuk", "",    1, "Turkmen" },
542 	{ "tvl", "",    1, "Tuvalu" },
543 	{ "tyv", "",    1, "Tuvinian" },
544 	{ "twi", "",    1, "Twi" },
545 	{ "udm", "",    1, "Udmurt" },
546 	{ "uga", "",    1, "Ugaritic" },
547 	{ "uig", "",    1, "Uighur" },
548 	{ "ukr", "",    1, "Ukranian" },
549 	{ "umb", "",    1, "Umbundu" },
550 	{ "mis", "",    1, "Uncoded languages" },
551 	{ "und", "",    1, "Undetermined language" },
552 	{ "hsb", "",    1, "Upper Sorbian" },
553 	{ "urd", "",    1, "Urdu" },
554 	{ "uig", "",    1, "Uyghur" },
555 	{ "uzb", "",    1, "Uzbek" },
556 	{ "vai", "",    1, "Vai" },
557 	{ "cat", "",    1, "Valencian" },
558 	{ "ven", "",    1, "Venda" },
559 	{ "vie", "",    1, "Vietnamese" },
560 	{ "vol", "",    1, "Volapuk" },
561 	{ "vot", "",    1, "Voltic" },
562 	{ "wak", "",    1, "Wakashan languages" },
563 	{ "wln", "",    1, "Walloon" },
564 	{ "war", "",    1, "Waray-Waray" },
565 	{ "was", "",    1, "Washo" },
566 	{ "wel", "cym", 1, "Welsh" },
567 	{ "fry", "",    1, "Western Frisian" },
568 	{ "wal", "",    1, "Wolaitta" },
569 	{ "wal", "",    1, "Wolaytta" },
570 	{ "wol", "",    1, "Wolof" },
571 	{ "xho", "",    1, "Xhosa" },
572 	{ "sah", "",    1, "Yakut" },
573 	{ "yao", "",    1, "Yao" },
574 	{ "yap", "",    1, "Yapese" },
575 	{ "yid", "",    1, "Yidish" },
576 	{ "yor", "",    1, "Yoruba" },
577 	{ "ypk", "",    1, "Yupik languages" },
578 	{ "znd", "",    1, "Zande languages" },
579 	{ "zap", "",    1, "Zapotec" },
580 	{ "zza", "",    1, "Zaza" },
581 	{ "zza", "",    1, "Zazaki" },
582 	{ "zen", "",    1, "Zenaga" },
583 	{ "zha", "",    1, "Zhuang" },
584 	{ "zul", "",    1, "Zulu" },
585 	{ "zun", "",    1, "Zuni" },
586 };
587 static int niso639_2= sizeof( iso639_2 ) / sizeof( iso639_2[0] );
588 
589 char *
iso639_2_from_code(char * code)590 iso639_2_from_code( char *code )
591 {
592 	int i;
593 	for ( i=0; i<niso639_2; ++i ) {
594 		if ( !iso639_2[i].main ) continue;
595 		if ( !strcasecmp( iso639_2[i].code1, code ) )
596 			return iso639_2[i].language;
597 		if ( iso639_2[i].code2[0]!='\0' && !strcasecmp( iso639_2[i].code2, code ) )
598 			return iso639_2[i].language;
599 	}
600 	return NULL;
601 }
602 
603 char *
iso639_2_from_language(char * lang)604 iso639_2_from_language( char *lang )
605 {
606 	int i, n;
607 	for ( i=0; i<niso639_2; ++i ) {
608 		n = strcasecmp( iso639_2[i].language, lang );
609 		if ( n==0 ) return iso639_2[i].code1;
610 		if ( n > 0 ) return NULL;
611 	}
612 	return NULL;
613 }
614 
615 #ifdef TEST
616 
617 #include <stdio.h>
618 #include <stdlib.h>
619 
620 static int
check_alphabetical(void)621 check_alphabetical( void )
622 {
623 	char *l1, *l2;
624 	int i, ret = 1;
625 	l1 = iso639_2[0].language;
626 	for ( i=0; i<niso639_2-1; ++i ) {
627 		l2 = iso639_2[i+1].language;
628 		if ( strcasecmp( l1, l2 ) >= 0 ) {
629 			// Patch: Disable output logging
630 			ret = 0;
631 		}
632 		l1 = l2;
633 	}
634 	return ret;
635 }
636 
637 int
main(int argc,char * argv[])638 main( int argc, char *argv[] )
639 {
640 	int ok;
641 	ok = check_alphabetical();
642 	if ( ok ) return EXIT_SUCCESS;
643 	return EXIT_FAILURE;
644 }
645 
646 #endif
647