1 /*---------------------------------------------------------------------\
3 | |__ / \ / / . \ . \ |
8 \---------------------------------------------------------------------*/
9 /** \file zypp/LanguageCode.cc
14 #include "zypp/base/Logger.h"
15 #include "zypp/base/String.h"
16 #include "zypp/base/Gettext.h"
17 #include "zypp/base/Tr1hash.h"
19 #include "zypp/LanguageCode.h"
23 ///////////////////////////////////////////////////////////////////
25 { /////////////////////////////////////////////////////////////////
27 ///////////////////////////////////////////////////////////////////
29 { /////////////////////////////////////////////////////////////////
31 /** Wrap static codemap data. */
32 struct CodeMaps // singleton
34 typedef std::tr1::unordered_map<std::string,std::string> CodeMap;
35 typedef CodeMap::const_iterator Index;
37 /** Return the CodeMap Index for \a code_r. */
38 static Index getIndex( const std::string & code_r )
40 static CodeMaps _maps; // the singleton instance
41 return _maps.lookup( code_r );
45 /** Ctor initializes the code maps.
46 * http://www.loc.gov/standards/iso639-2/ISO-639-2_values_8bits.txt
50 /** Make shure the code is in the code maps and return it's index. */
51 inline Index lookup( const std::string & code_r );
58 inline CodeMaps::Index CodeMaps::lookup( const std::string & code_r )
60 Index it = codes.find( code_r );
61 if ( it != codes.end() )
64 // not found: Remember a new code
65 CodeMap::value_type nval( code_r, std::string() );
67 if ( code_r.size() > 3 || code_r.size() < 2 )
68 WAR << "Malformed LanguageCode '" << code_r << "' (expect 2 or 3-letter)" << endl;
70 std::string lcode( str::toLower( code_r ) );
71 if ( lcode != code_r )
73 WAR << "Malformed LanguageCode '" << code_r << "' (not lower case)" << endl;
74 // but maybe we're lucky with the lower case code
75 // and find a language name.
76 it = codes.find( lcode );
77 if ( it != codes.end() )
78 nval.second = it->second;
81 MIL << "Remember LanguageCode '" << code_r << "': '" << nval.second << "'" << endl;
82 return codes.insert( nval ).first;
85 /////////////////////////////////////////////////////////////////
87 ///////////////////////////////////////////////////////////////////
89 ///////////////////////////////////////////////////////////////////
91 // CLASS NAME : LanguageCode::Impl
93 /** LanguageCode implementation.
94 * \note CodeMaps contain the untranslated language names.
95 * Translation is done in \ref name.
97 struct LanguageCode::Impl
100 : _index( CodeMaps::getIndex( std::string() ) )
103 Impl( const std::string & code_r )
104 : _index( CodeMaps::getIndex( code_r ) )
107 std::string code() const
108 { return _index->first; }
110 std::string name() const {
111 if ( _index->second.empty() )
113 std::string ret( _("Unknown language: ") );
115 ret += _index->first;
119 return _( _index->second.c_str() );
123 /** index into code map. */
124 CodeMaps::Index _index;
127 /** Offer default Impl. */
128 static shared_ptr<Impl> nullimpl()
130 static shared_ptr<Impl> _nullimpl( new Impl );
134 ///////////////////////////////////////////////////////////////////
136 ///////////////////////////////////////////////////////////////////
138 // CLASS NAME : LanguageCode
140 ///////////////////////////////////////////////////////////////////
142 const LanguageCode LanguageCode::noCode;
144 ///////////////////////////////////////////////////////////////////
146 // METHOD NAME : LanguageCode::LanguageCode
147 // METHOD TYPE : Ctor
149 LanguageCode::LanguageCode()
150 : _pimpl( Impl::nullimpl() )
153 ///////////////////////////////////////////////////////////////////
155 // METHOD NAME : LanguageCode::LanguageCode
156 // METHOD TYPE : Ctor
158 LanguageCode::LanguageCode( const std::string & code_r )
159 : _pimpl( new Impl( code_r ) )
162 ///////////////////////////////////////////////////////////////////
164 // METHOD NAME : LanguageCode::~LanguageCode
165 // METHOD TYPE : Dtor
167 LanguageCode::~LanguageCode()
170 ///////////////////////////////////////////////////////////////////
172 // METHOD NAME : LanguageCode::code
173 // METHOD TYPE : std::string
175 std::string LanguageCode::code() const
176 { return _pimpl->code(); }
178 ///////////////////////////////////////////////////////////////////
180 // METHOD NAME : LanguageCode::name
181 // METHOD TYPE : std::string
183 std::string LanguageCode::name() const
184 { return _pimpl->name(); }
186 ///////////////////////////////////////////////////////////////////
188 { /////////////////////////////////////////////////////////////////
192 // Defined LanguageCode constants
193 codes[""] = N_("No Code");
197 const char *iso639_2;
198 const char *iso639_1;
202 // some languages have more than one iso639_2 code
203 // so there are items with duplicate names
204 const LangInit langInit[] = {
205 // language code: aar aa
206 { "aar", "aa", N_( "Afar" ) },
207 // language code: abk ab
208 { "abk", "ab", N_( "Abkhazian" ) },
209 // language code: ace
210 { "ace", NULL, N_( "Achinese" ) },
211 // language code: ach
212 { "ach", NULL, N_( "Acoli" ) },
213 // language code: ada
214 { "ada", NULL, N_( "Adangme" ) },
215 // language code: ady
216 { "ady", NULL, N_( "Adyghe" ) },
217 // language code: afa
218 { "afa", NULL, N_( "Afro-Asiatic (Other)" ) },
219 // language code: afh
220 { "afh", NULL, N_( "Afrihili" ) },
221 // language code: afr af
222 { "afr", "af", N_( "Afrikaans" ) },
223 // language code: ain
224 { "ain", NULL, N_( "Ainu" ) },
225 // language code: aka ak
226 { "aka", "ak", N_( "Akan" ) },
227 // language code: akk
228 { "akk", NULL, N_( "Akkadian" ) },
229 // language code: alb sqi sq
230 { "alb", "sq", N_( "Albanian" ) },
231 // language code: alb sqi sq
232 { "sqi", NULL, N_( "Albanian" ) },
233 // language code: ale
234 { "ale", NULL, N_( "Aleut" ) },
235 // language code: alg
236 { "alg", NULL, N_( "Algonquian Languages" ) },
237 // language code: alt
238 { "alt", NULL, N_( "Southern Altai" ) },
239 // language code: amh am
240 { "amh", "am", N_( "Amharic" ) },
241 // language code: ang
242 { "ang", NULL, N_( "English, Old (ca.450-1100)" ) },
243 // language code: apa
244 { "apa", NULL, N_( "Apache Languages" ) },
245 // language code: ara ar
246 { "ara", "ar", N_( "Arabic" ) },
247 // language code: arc
248 { "arc", NULL, N_( "Aramaic" ) },
249 // language code: arg an
250 { "arg", "an", N_( "Aragonese" ) },
251 // language code: arm hye hy
252 { "arm", "hy", N_( "Armenian" ) },
253 // language code: arm hye hy
254 { "hye", NULL, N_( "Armenian" ) },
255 // language code: arn
256 { "arn", NULL, N_( "Araucanian" ) },
257 // language code: arp
258 { "arp", NULL, N_( "Arapaho" ) },
259 // language code: art
260 { "art", NULL, N_( "Artificial (Other)" ) },
261 // language code: arw
262 { "arw", NULL, N_( "Arawak" ) },
263 // language code: asm as
264 { "asm", "as", N_( "Assamese" ) },
265 // language code: ast
266 { "ast", NULL, N_( "Asturian" ) },
267 // language code: ath
268 { "ath", NULL, N_( "Athapascan Languages" ) },
269 // language code: aus
270 { "aus", NULL, N_( "Australian Languages" ) },
271 // language code: ava av
272 { "ava", "av", N_( "Avaric" ) },
273 // language code: ave ae
274 { "ave", "ae", N_( "Avestan" ) },
275 // language code: awa
276 { "awa", NULL, N_( "Awadhi" ) },
277 // language code: aym ay
278 { "aym", "ay", N_( "Aymara" ) },
279 // language code: aze az
280 { "aze", "az", N_( "Azerbaijani" ) },
281 // language code: bad
282 { "bad", NULL, N_( "Banda" ) },
283 // language code: bai
284 { "bai", NULL, N_( "Bamileke Languages" ) },
285 // language code: bak ba
286 { "bak", "ba", N_( "Bashkir" ) },
287 // language code: bal
288 { "bal", NULL, N_( "Baluchi" ) },
289 // language code: bam bm
290 { "bam", "bm", N_( "Bambara" ) },
291 // language code: ban
292 { "ban", NULL, N_( "Balinese" ) },
293 // language code: baq eus eu
294 { "baq", "eu", N_( "Basque" ) },
295 // language code: baq eus eu
296 { "eus", NULL, N_( "Basque" ) },
297 // language code: bas
298 { "bas", NULL, N_( "Basa" ) },
299 // language code: bat
300 { "bat", NULL, N_( "Baltic (Other)" ) },
301 // language code: bej
302 { "bej", NULL, N_( "Beja" ) },
303 // language code: bel be
304 { "bel", "be", N_( "Belarusian" ) },
305 // language code: bem
306 { "bem", NULL, N_( "Bemba" ) },
307 // language code: ben bn
308 { "ben", "bn", N_( "Bengali" ) },
309 // language code: ber
310 { "ber", NULL, N_( "Berber (Other)" ) },
311 // language code: bho
312 { "bho", NULL, N_( "Bhojpuri" ) },
313 // language code: bih bh
314 { "bih", "bh", N_( "Bihari" ) },
315 // language code: bik
316 { "bik", NULL, N_( "Bikol" ) },
317 // language code: bin
318 { "bin", NULL, N_( "Bini" ) },
319 // language code: bis bi
320 { "bis", "bi", N_( "Bislama" ) },
321 // language code: bla
322 { "bla", NULL, N_( "Siksika" ) },
323 // language code: bnt
324 { "bnt", NULL, N_( "Bantu (Other)" ) },
325 // language code: bos bs
326 { "bos", "bs", N_( "Bosnian" ) },
327 // language code: bra
328 { "bra", NULL, N_( "Braj" ) },
329 // language code: bre br
330 { "bre", "br", N_( "Breton" ) },
331 // language code: btk
332 { "btk", NULL, N_( "Batak (Indonesia)" ) },
333 // language code: bua
334 { "bua", NULL, N_( "Buriat" ) },
335 // language code: bug
336 { "bug", NULL, N_( "Buginese" ) },
337 // language code: bul bg
338 { "bul", "bg", N_( "Bulgarian" ) },
339 // language code: bur mya my
340 { "bur", "my", N_( "Burmese" ) },
341 // language code: bur mya my
342 { "mya", NULL, N_( "Burmese" ) },
343 // language code: byn
344 { "byn", NULL, N_( "Blin" ) },
345 // language code: cad
346 { "cad", NULL, N_( "Caddo" ) },
347 // language code: cai
348 { "cai", NULL, N_( "Central American Indian (Other)" ) },
349 // language code: car
350 { "car", NULL, N_( "Carib" ) },
351 // language code: cat ca
352 { "cat", "ca", N_( "Catalan" ) },
353 // language code: cau
354 { "cau", NULL, N_( "Caucasian (Other)" ) },
355 // language code: ceb
356 { "ceb", NULL, N_( "Cebuano" ) },
357 // language code: cel
358 { "cel", NULL, N_( "Celtic (Other)" ) },
359 // language code: cha ch
360 { "cha", "ch", N_( "Chamorro" ) },
361 // language code: chb
362 { "chb", NULL, N_( "Chibcha" ) },
363 // language code: che ce
364 { "che", "ce", N_( "Chechen" ) },
365 // language code: chg
366 { "chg", NULL, N_( "Chagatai" ) },
367 // language code: chi zho zh
368 { "chi", "zh", N_( "Chinese" ) },
369 // language code: chi zho zh
370 { "zho", NULL, N_( "Chinese" ) },
371 // language code: chk
372 { "chk", NULL, N_( "Chuukese" ) },
373 // language code: chm
374 { "chm", NULL, N_( "Mari" ) },
375 // language code: chn
376 { "chn", NULL, N_( "Chinook Jargon" ) },
377 // language code: cho
378 { "cho", NULL, N_( "Choctaw" ) },
379 // language code: chp
380 { "chp", NULL, N_( "Chipewyan" ) },
381 // language code: chr
382 { "chr", NULL, N_( "Cherokee" ) },
383 // language code: chu cu
384 { "chu", "cu", N_( "Church Slavic" ) },
385 // language code: chv cv
386 { "chv", "cv", N_( "Chuvash" ) },
387 // language code: chy
388 { "chy", NULL, N_( "Cheyenne" ) },
389 // language code: cmc
390 { "cmc", NULL, N_( "Chamic Languages" ) },
391 // language code: cop
392 { "cop", NULL, N_( "Coptic" ) },
393 // language code: cor kw
394 { "cor", "kw", N_( "Cornish" ) },
395 // language code: cos co
396 { "cos", "co", N_( "Corsican" ) },
397 // language code: cpe
398 { "cpe", NULL, N_( "Creoles and Pidgins, English-Based (Other)" ) },
399 // language code: cpf
400 { "cpf", NULL, N_( "Creoles and Pidgins, French-Based (Other)" ) },
401 // language code: cpp
402 { "cpp", NULL, N_( "Creoles and Pidgins, Portuguese-Based (Other)" ) },
403 // language code: cre cr
404 { "cre", "cr", N_( "Cree" ) },
405 // language code: crh
406 { "crh", NULL, N_( "Crimean Tatar" ) },
407 // language code: crp
408 { "crp", NULL, N_( "Creoles and Pidgins (Other)" ) },
409 // language code: csb
410 { "csb", NULL, N_( "Kashubian" ) },
411 // language code: cus
412 { "cus", NULL, N_( "Cushitic (Other)" ) },
413 // language code: cze ces cs
414 { "cze", "cs", N_( "Czech" ) },
415 // language code: cze ces cs
416 { "ces", NULL, N_( "Czech" ) },
417 // language code: dak
418 { "dak", NULL, N_( "Dakota" ) },
419 // language code: dan da
420 { "dan", "da", N_( "Danish" ) },
421 // language code: dar
422 { "dar", NULL, N_( "Dargwa" ) },
423 // language code: day
424 { "day", NULL, N_( "Dayak" ) },
425 // language code: del
426 { "del", NULL, N_( "Delaware" ) },
427 // language code: den
428 { "den", NULL, N_( "Slave (Athapascan)" ) },
429 // language code: dgr
430 { "dgr", NULL, N_( "Dogrib" ) },
431 // language code: din
432 { "din", NULL, N_( "Dinka" ) },
433 // language code: div dv
434 { "div", "dv", N_( "Divehi" ) },
435 // language code: doi
436 { "doi", NULL, N_( "Dogri" ) },
437 // language code: dra
438 { "dra", NULL, N_( "Dravidian (Other)" ) },
439 // language code: dsb
440 { "dsb", NULL, N_( "Lower Sorbian" ) },
441 // language code: dua
442 { "dua", NULL, N_( "Duala" ) },
443 // language code: dum
444 { "dum", NULL, N_( "Dutch, Middle (ca.1050-1350)" ) },
445 // language code: dut nld nl
446 { "dut", "nl", N_( "Dutch" ) },
447 // language code: dut nld nl
448 { "nld", NULL, N_( "Dutch" ) },
449 // language code: dyu
450 { "dyu", NULL, N_( "Dyula" ) },
451 // language code: dzo dz
452 { "dzo", "dz", N_( "Dzongkha" ) },
453 // language code: efi
454 { "efi", NULL, N_( "Efik" ) },
455 // language code: egy
456 { "egy", NULL, N_( "Egyptian (Ancient)" ) },
457 // language code: eka
458 { "eka", NULL, N_( "Ekajuk" ) },
459 // language code: elx
460 { "elx", NULL, N_( "Elamite" ) },
461 // language code: eng en
462 { "eng", "en", N_( "English" ) },
463 // language code: enm
464 { "enm", NULL, N_( "English, Middle (1100-1500)" ) },
465 // language code: epo eo
466 { "epo", "eo", N_( "Esperanto" ) },
467 // language code: est et
468 { "est", "et", N_( "Estonian" ) },
469 // language code: ewe ee
470 { "ewe", "ee", N_( "Ewe" ) },
471 // language code: ewo
472 { "ewo", NULL, N_( "Ewondo" ) },
473 // language code: fan
474 { "fan", NULL, N_( "Fang" ) },
475 // language code: fao fo
476 { "fao", "fo", N_( "Faroese" ) },
477 // language code: fat
478 { "fat", NULL, N_( "Fanti" ) },
479 // language code: fij fj
480 { "fij", "fj", N_( "Fijian" ) },
481 // language code: fil
482 { "fil", NULL, N_( "Filipino" ) },
483 // language code: fin fi
484 { "fin", "fi", N_( "Finnish" ) },
485 // language code: fiu
486 { "fiu", NULL, N_( "Finno-Ugrian (Other)" ) },
487 // language code: fon
488 { "fon", NULL, N_( "Fon" ) },
489 // language code: fre fra fr
490 { "fre", "fr", N_( "French" ) },
491 // language code: fre fra fr
492 { "fra", NULL, N_( "French" ) },
493 // language code: frm
494 { "frm", NULL, N_( "French, Middle (ca.1400-1600)" ) },
495 // language code: fro
496 { "fro", NULL, N_( "French, Old (842-ca.1400)" ) },
497 // language code: fry fy
498 { "fry", "fy", N_( "Frisian" ) },
499 // language code: ful ff
500 { "ful", "ff", N_( "Fulah" ) },
501 // language code: fur
502 { "fur", NULL, N_( "Friulian" ) },
503 // language code: gaa
504 { "gaa", NULL, N_( "Ga" ) },
505 // language code: gay
506 { "gay", NULL, N_( "Gayo" ) },
507 // language code: gba
508 { "gba", NULL, N_( "Gbaya" ) },
509 // language code: gem
510 { "gem", NULL, N_( "Germanic (Other)" ) },
511 // language code: geo kat ka
512 { "geo", "ka", N_( "Georgian" ) },
513 // language code: geo kat ka
514 { "kat", NULL, N_( "Georgian" ) },
515 // language code: ger deu de
516 { "ger", "de", N_( "German" ) },
517 // language code: ger deu de
518 { "deu", NULL, N_( "German" ) },
519 // language code: gez
520 { "gez", NULL, N_( "Geez" ) },
521 // language code: gil
522 { "gil", NULL, N_( "Gilbertese" ) },
523 // language code: gla gd
524 { "gla", "gd", N_( "Gaelic" ) },
525 // language code: gle ga
526 { "gle", "ga", N_( "Irish" ) },
527 // language code: glg gl
528 { "glg", "gl", N_( "Galician" ) },
529 // language code: glv gv
530 { "glv", "gv", N_( "Manx" ) },
531 // language code: gmh
532 { "gmh", NULL, N_( "German, Middle High (ca.1050-1500)" ) },
533 // language code: goh
534 { "goh", NULL, N_( "German, Old High (ca.750-1050)" ) },
535 // language code: gon
536 { "gon", NULL, N_( "Gondi" ) },
537 // language code: gor
538 { "gor", NULL, N_( "Gorontalo" ) },
539 // language code: got
540 { "got", NULL, N_( "Gothic" ) },
541 // language code: grb
542 { "grb", NULL, N_( "Grebo" ) },
543 // language code: grc
544 { "grc", NULL, N_( "Greek, Ancient (to 1453)" ) },
545 // language code: gre ell el
546 { "gre", "el", N_( "Greek, Modern (1453-)" ) },
547 // language code: gre ell el
548 { "ell", NULL, N_( "Greek, Modern (1453-)" ) },
549 // language code: grn gn
550 { "grn", "gn", N_( "Guarani" ) },
551 // language code: guj gu
552 { "guj", "gu", N_( "Gujarati" ) },
553 // language code: gwi
554 { "gwi", NULL, N_( "Gwich'in" ) },
555 // language code: hai
556 { "hai", NULL, N_( "Haida" ) },
557 // language code: hat ht
558 { "hat", "ht", N_( "Haitian" ) },
559 // language code: hau ha
560 { "hau", "ha", N_( "Hausa" ) },
561 // language code: haw
562 { "haw", NULL, N_( "Hawaiian" ) },
563 // language code: heb he
564 { "heb", "he", N_( "Hebrew" ) },
565 // language code: her hz
566 { "her", "hz", N_( "Herero" ) },
567 // language code: hil
568 { "hil", NULL, N_( "Hiligaynon" ) },
569 // language code: him
570 { "him", NULL, N_( "Himachali" ) },
571 // language code: hin hi
572 { "hin", "hi", N_( "Hindi" ) },
573 // language code: hit
574 { "hit", NULL, N_( "Hittite" ) },
575 // language code: hmn
576 { "hmn", NULL, N_( "Hmong" ) },
577 // language code: hmo ho
578 { "hmo", "ho", N_( "Hiri Motu" ) },
579 // language code: hsb
580 { "hsb", NULL, N_( "Upper Sorbian" ) },
581 // language code: hun hu
582 { "hun", "hu", N_( "Hungarian" ) },
583 // language code: hup
584 { "hup", NULL, N_( "Hupa" ) },
585 // language code: iba
586 { "iba", NULL, N_( "Iban" ) },
587 // language code: ibo ig
588 { "ibo", "ig", N_( "Igbo" ) },
589 // language code: ice isl is
590 { "ice", "is", N_( "Icelandic" ) },
591 // language code: ice isl is
592 { "isl", NULL, N_( "Icelandic" ) },
593 // language code: ido io
594 { "ido", "io", N_( "Ido" ) },
595 // language code: iii ii
596 { "iii", "ii", N_( "Sichuan Yi" ) },
597 // language code: ijo
598 { "ijo", NULL, N_( "Ijo" ) },
599 // language code: iku iu
600 { "iku", "iu", N_( "Inuktitut" ) },
601 // language code: ile ie
602 { "ile", "ie", N_( "Interlingue" ) },
603 // language code: ilo
604 { "ilo", NULL, N_( "Iloko" ) },
605 // language code: ina ia
606 { "ina", "ia", N_( "Interlingua (International Auxiliary Language Association)" ) },
607 // language code: inc
608 { "inc", NULL, N_( "Indic (Other)" ) },
609 // language code: ind id
610 { "ind", "id", N_( "Indonesian" ) },
611 // language code: ine
612 { "ine", NULL, N_( "Indo-European (Other)" ) },
613 // language code: inh
614 { "inh", NULL, N_( "Ingush" ) },
615 // language code: ipk ik
616 { "ipk", "ik", N_( "Inupiaq" ) },
617 // language code: ira
618 { "ira", NULL, N_( "Iranian (Other)" ) },
619 // language code: iro
620 { "iro", NULL, N_( "Iroquoian Languages" ) },
621 // language code: ita it
622 { "ita", "it", N_( "Italian" ) },
623 // language code: jav jv
624 { "jav", "jv", N_( "Javanese" ) },
625 // language code: jbo
626 { "jbo", NULL, N_( "Lojban" ) },
627 // language code: jpn ja
628 { "jpn", "ja", N_( "Japanese" ) },
629 // language code: jpr
630 { "jpr", NULL, N_( "Judeo-Persian" ) },
631 // language code: jrb
632 { "jrb", NULL, N_( "Judeo-Arabic" ) },
633 // language code: kaa
634 { "kaa", NULL, N_( "Kara-Kalpak" ) },
635 // language code: kab
636 { "kab", NULL, N_( "Kabyle" ) },
637 // language code: kac
638 { "kac", NULL, N_( "Kachin" ) },
639 // language code: kal kl
640 { "kal", "kl", N_( "Kalaallisut" ) },
641 // language code: kam
642 { "kam", NULL, N_( "Kamba" ) },
643 // language code: kan kn
644 { "kan", "kn", N_( "Kannada" ) },
645 // language code: kar
646 { "kar", NULL, N_( "Karen" ) },
647 // language code: kas ks
648 { "kas", "ks", N_( "Kashmiri" ) },
649 // language code: kau kr
650 { "kau", "kr", N_( "Kanuri" ) },
651 // language code: kaw
652 { "kaw", NULL, N_( "Kawi" ) },
653 // language code: kaz kk
654 { "kaz", "kk", N_( "Kazakh" ) },
655 // language code: kbd
656 { "kbd", NULL, N_( "Kabardian" ) },
657 // language code: kha
658 { "kha", NULL, N_( "Khasi" ) },
659 // language code: khi
660 { "khi", NULL, N_( "Khoisan (Other)" ) },
661 // language code: khm km
662 { "khm", "km", N_( "Khmer" ) },
663 // language code: kho
664 { "kho", NULL, N_( "Khotanese" ) },
665 // language code: kik ki
666 { "kik", "ki", N_( "Kikuyu" ) },
667 // language code: kin rw
668 { "kin", "rw", N_( "Kinyarwanda" ) },
669 // language code: kir ky
670 { "kir", "ky", N_( "Kirghiz" ) },
671 // language code: kmb
672 { "kmb", NULL, N_( "Kimbundu" ) },
673 // language code: kok
674 { "kok", NULL, N_( "Konkani" ) },
675 // language code: kom kv
676 { "kom", "kv", N_( "Komi" ) },
677 // language code: kon kg
678 { "kon", "kg", N_( "Kongo" ) },
679 // language code: kor ko
680 { "kor", "ko", N_( "Korean" ) },
681 // language code: kos
682 { "kos", NULL, N_( "Kosraean" ) },
683 // language code: kpe
684 { "kpe", NULL, N_( "Kpelle" ) },
685 // language code: krc
686 { "krc", NULL, N_( "Karachay-Balkar" ) },
687 // language code: kro
688 { "kro", NULL, N_( "Kru" ) },
689 // language code: kru
690 { "kru", NULL, N_( "Kurukh" ) },
691 // language code: kua kj
692 { "kua", "kj", N_( "Kuanyama" ) },
693 // language code: kum
694 { "kum", NULL, N_( "Kumyk" ) },
695 // language code: kur ku
696 { "kur", "ku", N_( "Kurdish" ) },
697 // language code: kut
698 { "kut", NULL, N_( "Kutenai" ) },
699 // language code: lad
700 { "lad", NULL, N_( "Ladino" ) },
701 // language code: lah
702 { "lah", NULL, N_( "Lahnda" ) },
703 // language code: lam
704 { "lam", NULL, N_( "Lamba" ) },
705 // language code: lao lo
706 { "lao", "lo", N_( "Lao" ) },
707 // language code: lat la
708 { "lat", "la", N_( "Latin" ) },
709 // language code: lav lv
710 { "lav", "lv", N_( "Latvian" ) },
711 // language code: lez
712 { "lez", NULL, N_( "Lezghian" ) },
713 // language code: lim li
714 { "lim", "li", N_( "Limburgan" ) },
715 // language code: lin ln
716 { "lin", "ln", N_( "Lingala" ) },
717 // language code: lit lt
718 { "lit", "lt", N_( "Lithuanian" ) },
719 // language code: lol
720 { "lol", NULL, N_( "Mongo" ) },
721 // language code: loz
722 { "loz", NULL, N_( "Lozi" ) },
723 // language code: ltz lb
724 { "ltz", "lb", N_( "Luxembourgish" ) },
725 // language code: lua
726 { "lua", NULL, N_( "Luba-Lulua" ) },
727 // language code: lub lu
728 { "lub", "lu", N_( "Luba-Katanga" ) },
729 // language code: lug lg
730 { "lug", "lg", N_( "Ganda" ) },
731 // language code: lui
732 { "lui", NULL, N_( "Luiseno" ) },
733 // language code: lun
734 { "lun", NULL, N_( "Lunda" ) },
735 // language code: luo
736 { "luo", NULL, N_( "Luo (Kenya and Tanzania)" ) },
737 // language code: lus
738 { "lus", NULL, N_( "Lushai" ) },
739 // language code: mac mkd mk
740 { "mac", "mk", N_( "Macedonian" ) },
741 // language code: mac mkd mk
742 { "mkd", NULL, N_( "Macedonian" ) },
743 // language code: mad
744 { "mad", NULL, N_( "Madurese" ) },
745 // language code: mag
746 { "mag", NULL, N_( "Magahi" ) },
747 // language code: mah mh
748 { "mah", "mh", N_( "Marshallese" ) },
749 // language code: mai
750 { "mai", NULL, N_( "Maithili" ) },
751 // language code: mak
752 { "mak", NULL, N_( "Makasar" ) },
753 // language code: mal ml
754 { "mal", "ml", N_( "Malayalam" ) },
755 // language code: man
756 { "man", NULL, N_( "Mandingo" ) },
757 // language code: mao mri mi
758 { "mao", "mi", N_( "Maori" ) },
759 // language code: mao mri mi
760 { "mri", NULL, N_( "Maori" ) },
761 // language code: map
762 { "map", NULL, N_( "Austronesian (Other)" ) },
763 // language code: mar mr
764 { "mar", "mr", N_( "Marathi" ) },
765 // language code: mas
766 { "mas", NULL, N_( "Masai" ) },
767 // language code: may msa ms
768 { "may", "ms", N_( "Malay" ) },
769 // language code: may msa ms
770 { "msa", NULL, N_( "Malay" ) },
771 // language code: mdf
772 { "mdf", NULL, N_( "Moksha" ) },
773 // language code: mdr
774 { "mdr", NULL, N_( "Mandar" ) },
775 // language code: men
776 { "men", NULL, N_( "Mende" ) },
777 // language code: mga
778 { "mga", NULL, N_( "Irish, Middle (900-1200)" ) },
779 // language code: mic
780 { "mic", NULL, N_( "Mi'kmaq" ) },
781 // language code: min
782 { "min", NULL, N_( "Minangkabau" ) },
783 // language code: mis
784 { "mis", NULL, N_( "Miscellaneous Languages" ) },
785 // language code: mkh
786 { "mkh", NULL, N_( "Mon-Khmer (Other)" ) },
787 // language code: mlg mg
788 { "mlg", "mg", N_( "Malagasy" ) },
789 // language code: mlt mt
790 { "mlt", "mt", N_( "Maltese" ) },
791 // language code: mnc
792 { "mnc", NULL, N_( "Manchu" ) },
793 // language code: mni
794 { "mni", NULL, N_( "Manipuri" ) },
795 // language code: mno
796 { "mno", NULL, N_( "Manobo Languages" ) },
797 // language code: moh
798 { "moh", NULL, N_( "Mohawk" ) },
799 // language code: mol mo
800 { "mol", "mo", N_( "Moldavian" ) },
801 // language code: mon mn
802 { "mon", "mn", N_( "Mongolian" ) },
803 // language code: mos
804 { "mos", NULL, N_( "Mossi" ) },
805 // language code: mul
806 { "mul", NULL, N_( "Multiple Languages" ) },
807 // language code: mun
808 { "mun", NULL, N_( "Munda languages" ) },
809 // language code: mus
810 { "mus", NULL, N_( "Creek" ) },
811 // language code: mwl
812 { "mwl", NULL, N_( "Mirandese" ) },
813 // language code: mwr
814 { "mwr", NULL, N_( "Marwari" ) },
815 // language code: myn
816 { "myn", NULL, N_( "Mayan Languages" ) },
817 // language code: myv
818 { "myv", NULL, N_( "Erzya" ) },
819 // language code: nah
820 { "nah", NULL, N_( "Nahuatl" ) },
821 // language code: nai
822 { "nai", NULL, N_( "North American Indian" ) },
823 // language code: nap
824 { "nap", NULL, N_( "Neapolitan" ) },
825 // language code: nau na
826 { "nau", "na", N_( "Nauru" ) },
827 // language code: nav nv
828 { "nav", "nv", N_( "Navajo" ) },
829 // language code: nbl nr
830 { "nbl", "nr", N_( "Ndebele, South" ) },
831 // language code: nde nd
832 { "nde", "nd", N_( "Ndebele, North" ) },
833 // language code: ndo ng
834 { "ndo", "ng", N_( "Ndonga" ) },
835 // language code: nds
836 { "nds", NULL, N_( "Low German" ) },
837 // language code: nep ne
838 { "nep", "ne", N_( "Nepali" ) },
839 // language code: new
840 { "new", NULL, N_( "Nepal Bhasa" ) },
841 // language code: nia
842 { "nia", NULL, N_( "Nias" ) },
843 // language code: nic
844 { "nic", NULL, N_( "Niger-Kordofanian (Other)" ) },
845 // language code: niu
846 { "niu", NULL, N_( "Niuean" ) },
847 // language code: nno nn
848 { "nno", "nn", N_( "Norwegian Nynorsk" ) },
849 // language code: nob nb
850 { "nob", "nb", N_( "Norwegian Bokmal" ) },
851 // language code: nog
852 { "nog", NULL, N_( "Nogai" ) },
853 // language code: non
854 { "non", NULL, N_( "Norse, Old" ) },
855 // language code: nor no
856 { "nor", "no", N_( "Norwegian" ) },
857 // language code: nso
858 { "nso", NULL, N_( "Northern Sotho" ) },
859 // language code: nub
860 { "nub", NULL, N_( "Nubian Languages" ) },
861 // language code: nwc
862 { "nwc", NULL, N_( "Classical Newari" ) },
863 // language code: nya ny
864 { "nya", "ny", N_( "Chichewa" ) },
865 // language code: nym
866 { "nym", NULL, N_( "Nyamwezi" ) },
867 // language code: nyn
868 { "nyn", NULL, N_( "Nyankole" ) },
869 // language code: nyo
870 { "nyo", NULL, N_( "Nyoro" ) },
871 // language code: nzi
872 { "nzi", NULL, N_( "Nzima" ) },
873 // language code: oci oc
874 { "oci", "oc", N_( "Occitan (post 1500)" ) },
875 // language code: oji oj
876 { "oji", "oj", N_( "Ojibwa" ) },
877 // language code: ori or
878 { "ori", "or", N_( "Oriya" ) },
879 // language code: orm om
880 { "orm", "om", N_( "Oromo" ) },
881 // language code: osa
882 { "osa", NULL, N_( "Osage" ) },
883 // language code: oss os
884 { "oss", "os", N_( "Ossetian" ) },
885 // language code: ota
886 { "ota", NULL, N_( "Turkish, Ottoman (1500-1928)" ) },
887 // language code: oto
888 { "oto", NULL, N_( "Otomian Languages" ) },
889 // language code: paa
890 { "paa", NULL, N_( "Papuan (Other)" ) },
891 // language code: pag
892 { "pag", NULL, N_( "Pangasinan" ) },
893 // language code: pal
894 { "pal", NULL, N_( "Pahlavi" ) },
895 // language code: pam
896 { "pam", NULL, N_( "Pampanga" ) },
897 // language code: pan pa
898 { "pan", "pa", N_( "Panjabi" ) },
899 // language code: pap
900 { "pap", NULL, N_( "Papiamento" ) },
901 // language code: pau
902 { "pau", NULL, N_( "Palauan" ) },
903 // language code: peo
904 { "peo", NULL, N_( "Persian, Old (ca.600-400 B.C.)" ) },
905 // language code: per fas fa
906 { "per", "fa", N_( "Persian" ) },
907 // language code: per fas fa
908 { "fas", NULL, N_( "Persian" ) },
909 // language code: phi
910 { "phi", NULL, N_( "Philippine (Other)" ) },
911 // language code: phn
912 { "phn", NULL, N_( "Phoenician" ) },
913 // language code: pli pi
914 { "pli", "pi", N_( "Pali" ) },
915 // language code: pol pl
916 { "pol", "pl", N_( "Polish" ) },
917 // language code: pon
918 { "pon", NULL, N_( "Pohnpeian" ) },
919 // language code: por pt
920 { "por", "pt", N_( "Portuguese" ) },
921 // language code: pra
922 { "pra", NULL, N_( "Prakrit Languages" ) },
923 // language code: pro
924 { "pro", NULL, N_( "Provencal, Old (to 1500)" ) },
925 // language code: pus ps
926 { "pus", "ps", N_( "Pushto" ) },
927 // language code: que qu
928 { "que", "qu", N_( "Quechua" ) },
929 // language code: raj
930 { "raj", NULL, N_( "Rajasthani" ) },
931 // language code: rap
932 { "rap", NULL, N_( "Rapanui" ) },
933 // language code: rar
934 { "rar", NULL, N_( "Rarotongan" ) },
935 // language code: roa
936 { "roa", NULL, N_( "Romance (Other)" ) },
937 // language code: roh rm
938 { "roh", "rm", N_( "Raeto-Romance" ) },
939 // language code: rom
940 { "rom", NULL, N_( "Romany" ) },
941 // language code: rum ron ro
942 { "rum", "ro", N_( "Romanian" ) },
943 // language code: rum ron ro
944 { "ron", NULL, N_( "Romanian" ) },
945 // language code: run rn
946 { "run", "rn", N_( "Rundi" ) },
947 // language code: rus ru
948 { "rus", "ru", N_( "Russian" ) },
949 // language code: sad
950 { "sad", NULL, N_( "Sandawe" ) },
951 // language code: sag sg
952 { "sag", "sg", N_( "Sango" ) },
953 // language code: sah
954 { "sah", NULL, N_( "Yakut" ) },
955 // language code: sai
956 { "sai", NULL, N_( "South American Indian (Other)" ) },
957 // language code: sal
958 { "sal", NULL, N_( "Salishan Languages" ) },
959 // language code: sam
960 { "sam", NULL, N_( "Samaritan Aramaic" ) },
961 // language code: san sa
962 { "san", "sa", N_( "Sanskrit" ) },
963 // language code: sas
964 { "sas", NULL, N_( "Sasak" ) },
965 // language code: sat
966 { "sat", NULL, N_( "Santali" ) },
967 // language code: scc srp sr
968 { "scc", "sr", N_( "Serbian" ) },
969 // language code: scc srp sr
970 { "srp", NULL, N_( "Serbian" ) },
971 // language code: scn
972 { "scn", NULL, N_( "Sicilian" ) },
973 // language code: sco
974 { "sco", NULL, N_( "Scots" ) },
975 // language code: scr hrv hr
976 { "scr", "hr", N_( "Croatian" ) },
977 // language code: scr hrv hr
978 { "hrv", NULL, N_( "Croatian" ) },
979 // language code: sel
980 { "sel", NULL, N_( "Selkup" ) },
981 // language code: sem
982 { "sem", NULL, N_( "Semitic (Other)" ) },
983 // language code: sga
984 { "sga", NULL, N_( "Irish, Old (to 900)" ) },
985 // language code: sgn
986 { "sgn", NULL, N_( "Sign Languages" ) },
987 // language code: shn
988 { "shn", NULL, N_( "Shan" ) },
989 // language code: sid
990 { "sid", NULL, N_( "Sidamo" ) },
991 // language code: sin si
992 { "sin", "si", N_( "Sinhala" ) },
993 // language code: sio
994 { "sio", NULL, N_( "Siouan Languages" ) },
995 // language code: sit
996 { "sit", NULL, N_( "Sino-Tibetan (Other)" ) },
997 // language code: sla
998 { "sla", NULL, N_( "Slavic (Other)" ) },
999 // language code: slo slk sk
1000 { "slo", "sk", N_( "Slovak" ) },
1001 // language code: slo slk sk
1002 { "slk", NULL, N_( "Slovak" ) },
1003 // language code: slv sl
1004 { "slv", "sl", N_( "Slovenian" ) },
1005 // language code: sma
1006 { "sma", NULL, N_( "Southern Sami" ) },
1007 // language code: sme se
1008 { "sme", "se", N_( "Northern Sami" ) },
1009 // language code: smi
1010 { "smi", NULL, N_( "Sami Languages (Other)" ) },
1011 // language code: smj
1012 { "smj", NULL, N_( "Lule Sami" ) },
1013 // language code: smn
1014 { "smn", NULL, N_( "Inari Sami" ) },
1015 // language code: smo sm
1016 { "smo", "sm", N_( "Samoan" ) },
1017 // language code: sms
1018 { "sms", NULL, N_( "Skolt Sami" ) },
1019 // language code: sna sn
1020 { "sna", "sn", N_( "Shona" ) },
1021 // language code: snd sd
1022 { "snd", "sd", N_( "Sindhi" ) },
1023 // language code: snk
1024 { "snk", NULL, N_( "Soninke" ) },
1025 // language code: sog
1026 { "sog", NULL, N_( "Sogdian" ) },
1027 // language code: som so
1028 { "som", "so", N_( "Somali" ) },
1029 // language code: son
1030 { "son", NULL, N_( "Songhai" ) },
1031 // language code: sot st
1032 { "sot", "st", N_( "Sotho, Southern" ) },
1033 // language code: spa es
1034 { "spa", "es", N_( "Spanish" ) },
1035 // language code: srd sc
1036 { "srd", "sc", N_( "Sardinian" ) },
1037 // language code: srr
1038 { "srr", NULL, N_( "Serer" ) },
1039 // language code: ssa
1040 { "ssa", NULL, N_( "Nilo-Saharan (Other)" ) },
1041 // language code: ssw ss
1042 { "ssw", "ss", N_( "Swati" ) },
1043 // language code: suk
1044 { "suk", NULL, N_( "Sukuma" ) },
1045 // language code: sun su
1046 { "sun", "su", N_( "Sundanese" ) },
1047 // language code: sus
1048 { "sus", NULL, N_( "Susu" ) },
1049 // language code: sux
1050 { "sux", NULL, N_( "Sumerian" ) },
1051 // language code: swa sw
1052 { "swa", "sw", N_( "Swahili" ) },
1053 // language code: swe sv
1054 { "swe", "sv", N_( "Swedish" ) },
1055 // language code: syr
1056 { "syr", NULL, N_( "Syriac" ) },
1057 // language code: tah ty
1058 { "tah", "ty", N_( "Tahitian" ) },
1059 // language code: tai
1060 { "tai", NULL, N_( "Tai (Other)" ) },
1061 // language code: tam ta
1062 { "tam", "ta", N_( "Tamil" ) },
1063 // language code: tat tt
1064 { "tat", "tt", N_( "Tatar" ) },
1065 // language code: tel te
1066 { "tel", "te", N_( "Telugu" ) },
1067 // language code: tem
1068 { "tem", NULL, N_( "Timne" ) },
1069 // language code: ter
1070 { "ter", NULL, N_( "Tereno" ) },
1071 // language code: tet
1072 { "tet", NULL, N_( "Tetum" ) },
1073 // language code: tgk tg
1074 { "tgk", "tg", N_( "Tajik" ) },
1075 // language code: tgl tl
1076 { "tgl", "tl", N_( "Tagalog" ) },
1077 // language code: tha th
1078 { "tha", "th", N_( "Thai" ) },
1079 // language code: tib bod bo
1080 { "tib", "bo", N_( "Tibetan" ) },
1081 // language code: tib bod bo
1082 { "bod", NULL, N_( "Tibetan" ) },
1083 // language code: tig
1084 { "tig", NULL, N_( "Tigre" ) },
1085 // language code: tir ti
1086 { "tir", "ti", N_( "Tigrinya" ) },
1087 // language code: tiv
1088 { "tiv", NULL, N_( "Tiv" ) },
1089 // language code: tkl
1090 { "tkl", NULL, N_( "Tokelau" ) },
1091 // language code: tlh
1092 { "tlh", NULL, N_( "Klingon" ) },
1093 // language code: tli
1094 { "tli", NULL, N_( "Tlingit" ) },
1095 // language code: tmh
1096 { "tmh", NULL, N_( "Tamashek" ) },
1097 // language code: tog
1098 { "tog", NULL, N_( "Tonga (Nyasa)" ) },
1099 // language code: ton to
1100 { "ton", "to", N_( "Tonga (Tonga Islands)" ) },
1101 // language code: tpi
1102 { "tpi", NULL, N_( "Tok Pisin" ) },
1103 // language code: tsi
1104 { "tsi", NULL, N_( "Tsimshian" ) },
1105 // language code: tsn tn
1106 { "tsn", "tn", N_( "Tswana" ) },
1107 // language code: tso ts
1108 { "tso", "ts", N_( "Tsonga" ) },
1109 // language code: tuk tk
1110 { "tuk", "tk", N_( "Turkmen" ) },
1111 // language code: tum
1112 { "tum", NULL, N_( "Tumbuka" ) },
1113 // language code: tup
1114 { "tup", NULL, N_( "Tupi Languages" ) },
1115 // language code: tur tr
1116 { "tur", "tr", N_( "Turkish" ) },
1117 // language code: tut
1118 { "tut", NULL, N_( "Altaic (Other)" ) },
1119 // language code: tvl
1120 { "tvl", NULL, N_( "Tuvalu" ) },
1121 // language code: twi tw
1122 { "twi", "tw", N_( "Twi" ) },
1123 // language code: tyv
1124 { "tyv", NULL, N_( "Tuvinian" ) },
1125 // language code: udm
1126 { "udm", NULL, N_( "Udmurt" ) },
1127 // language code: uga
1128 { "uga", NULL, N_( "Ugaritic" ) },
1129 // language code: uig ug
1130 { "uig", "ug", N_( "Uighur" ) },
1131 // language code: ukr uk
1132 { "ukr", "uk", N_( "Ukrainian" ) },
1133 // language code: umb
1134 { "umb", NULL, N_( "Umbundu" ) },
1135 // language code: und
1136 { "und", NULL, N_( "Undetermined" ) },
1137 // language code: urd ur
1138 { "urd", "ur", N_( "Urdu" ) },
1139 // language code: uzb uz
1140 { "uzb", "uz", N_( "Uzbek" ) },
1141 // language code: vai
1142 { "vai", NULL, N_( "Vai" ) },
1143 // language code: ven ve
1144 { "ven", "ve", N_( "Venda" ) },
1145 // language code: vie vi
1146 { "vie", "vi", N_( "Vietnamese" ) },
1147 // language code: vol vo
1148 { "vol", "vo", N_( "Volapuk" ) },
1149 // language code: vot
1150 { "vot", NULL, N_( "Votic" ) },
1151 // language code: wak
1152 { "wak", NULL, N_( "Wakashan Languages" ) },
1153 // language code: wal
1154 { "wal", NULL, N_( "Walamo" ) },
1155 // language code: war
1156 { "war", NULL, N_( "Waray" ) },
1157 // language code: was
1158 { "was", NULL, N_( "Washo" ) },
1159 // language code: wel cym cy
1160 { "wel", "cy", N_( "Welsh" ) },
1161 // language code: wel cym cy
1162 { "cym", NULL, N_( "Welsh" ) },
1163 // language code: wen
1164 { "wen", NULL, N_( "Sorbian Languages" ) },
1165 // language code: wln wa
1166 { "wln", "wa", N_( "Walloon" ) },
1167 // language code: wol wo
1168 { "wol", "wo", N_( "Wolof" ) },
1169 // language code: xal
1170 { "xal", NULL, N_( "Kalmyk" ) },
1171 // language code: xho xh
1172 { "xho", "xh", N_( "Xhosa" ) },
1173 // language code: yao
1174 { "yao", NULL, N_( "Yao" ) },
1175 // language code: yap
1176 { "yap", NULL, N_( "Yapese" ) },
1177 // language code: yid yi
1178 { "yid", "yi", N_( "Yiddish" ) },
1179 // language code: yor yo
1180 { "yor", "yo", N_( "Yoruba" ) },
1181 // language code: ypk
1182 { "ypk", NULL, N_( "Yupik Languages" ) },
1183 // language code: zap
1184 { "zap", NULL, N_( "Zapotec" ) },
1185 // language code: zen
1186 { "zen", NULL, N_( "Zenaga" ) },
1187 // language code: zha za
1188 { "zha", "za", N_( "Zhuang" ) },
1189 // language code: znd
1190 { "znd", NULL, N_( "Zande" ) },
1191 // language code: zul zu
1192 { "zul", "zu", N_( "Zulu" ) },
1193 // language code: zun
1194 { "zun", NULL, N_( "Zuni" ) },
1196 { NULL, NULL, NULL }
1199 for (const LangInit * i = langInit; i->iso639_2 != NULL; ++i)
1201 std::string name( i->name );
1202 codes[i->iso639_2] = name;
1203 if (i->iso639_1 != NULL)
1204 codes[i->iso639_1] = name;
1208 /////////////////////////////////////////////////////////////////
1210 ///////////////////////////////////////////////////////////////////
1212 /////////////////////////////////////////////////////////////////
1214 ///////////////////////////////////////////////////////////////////