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