/*********
*
* This file is part of BibleTime ' s source code , http : //www.bibletime.info/.
*
* Copyright 1999 - 2006 by the BibleTime developers .
* The BibleTime source code is licensed under the GNU General Public License version 2.0 .
*
* * * * * * * * * */
# include "clanguagemgr.h"
# include "cswordmoduleinfo.h"
# include "cswordbackend.h"
# include "util/cpointers.h"
//Qt includes
# include <tqptrlist.h>
//KDE includes
# include <klocale.h>
//initialize static language list
CLanguageMgr : : LanguageList CLanguageMgr : : m_langList ;
CLanguageMgr : : LanguageList CLanguageMgr : : m_cleanupLangPtrs ;
CLanguageMgr : : Language : : Language ( ) : m_altAbbrevs ( 0 ) {
m_abbrev = TQString : : null ;
m_englishName = TQString : : null ;
m_translatedName = TQString : : null ;
} ;
CLanguageMgr : : Language : : Language ( const Language & l ) {
m_abbrev = l . m_abbrev ;
m_englishName = l . m_englishName ;
m_translatedName = l . m_translatedName ;
if ( l . m_altAbbrevs ) { //copy alternative abbrevs in a new list
m_altAbbrevs = new TQStringList ( * l . m_altAbbrevs ) ;
//*m_altAbbrevs = *l.m_altAbbrevs;
}
else {
m_altAbbrevs = 0 ;
}
}
CLanguageMgr : : Language : : Language ( const TQString & abbrev , const TQString & name , const TQString & translatedName , const TQStringList & altAbbrevs ) : m_altAbbrevs ( 0 ) {
m_abbrev = abbrev ;
m_englishName = name ;
m_translatedName = translatedName ;
if ( altAbbrevs . count ( ) > 0 ) {
m_altAbbrevs = new TQStringList ( ) ;
* m_altAbbrevs = altAbbrevs ;
}
} ;
CLanguageMgr : : Language : : ~ Language ( ) {
delete m_altAbbrevs ;
} ;
/****************************************************/
/******************** CLanguageMgr ******************/
/****************************************************/
CLanguageMgr : : CLanguageMgr ( ) : m_langMap ( 0 ) {
m_availableModulesCache . moduleCount = 0 ;
init ( ) ;
}
CLanguageMgr : : ~ CLanguageMgr ( ) {
m_cleanupLangPtrs . setAutoDelete ( true ) ;
m_cleanupLangPtrs . clear ( ) ;
m_langList . setAutoDelete ( true ) ;
m_langList . clear ( ) ;
}
const CLanguageMgr : : LangMap & CLanguageMgr : : availableLanguages ( ) {
ListCSwordModuleInfo mods = CPointers : : backend ( ) - > moduleList ( ) ;
if ( m_availableModulesCache . moduleCount ! = mods . count ( ) ) { //we have to refill the cached map
m_availableModulesCache . availableLanguages . clear ( ) ;
m_availableModulesCache . moduleCount = mods . count ( ) ;
//collect the languages abbrevs of all modules
TQStrList abbrevs ;
char * abbrev ;
ListCSwordModuleInfo : : iterator end_it = mods . end ( ) ;
for ( ListCSwordModuleInfo : : iterator it ( mods . begin ( ) ) ; it ! = end_it ; + + it ) {
// for (CSwordModuleInfo* m = mods.first(); m; m = mods.next()) {
abbrev = ( * it ) - > module ( ) - > Lang ( ) ;
if ( abbrev & & ! abbrevs . contains ( abbrev ) ) {
abbrevs . append ( abbrev ) ;
}
} ;
//now create a map of available langs
for ( abbrev = abbrevs . first ( ) ; abbrev ; abbrev = abbrevs . next ( ) ) {
const Language * const lang = languageForAbbrev ( abbrev ) ;
if ( lang - > isValid ( ) ) {
m_availableModulesCache . availableLanguages . insert ( abbrev , lang ) ;
}
else { //invalid lang used by a modules, create a new language using the abbrev
Language * newLang = new Language ( abbrev , abbrev , abbrev ) ;
m_cleanupLangPtrs . append ( newLang ) ;
m_availableModulesCache . availableLanguages . insert ( abbrev , newLang ) ;
}
} ;
}
return m_availableModulesCache . availableLanguages ;
} ;
const CLanguageMgr : : Language * const CLanguageMgr : : languageForAbbrev ( const TQString & abbrev ) const {
Language * lang = m_langMap . find ( abbrev ) ;
if ( lang ) {
return lang ;
}
//try to search in the alternative abbrevs
//const LangMapIterator end = m_langMap.constEnd();
for ( LangMapIterator it ( m_langMap ) ; it . current ( ) ; + + it ) {
if ( it . current ( ) - > alternativeAbbrevs ( ) & & it . current ( ) - > alternativeAbbrevs ( ) - > contains ( abbrev ) ) {
return it . current ( ) ;
}
}
// Invalid lang used by a modules, create a new language using the abbrev
Language * newLang = new Language ( abbrev , abbrev , abbrev ) ; //return a language which holds the valid abbrev
m_cleanupLangPtrs . append ( newLang ) ;
return newLang ;
} ;
const CLanguageMgr : : Language * const CLanguageMgr : : languageForName ( const TQString & name ) const {
for ( LangMapIterator it ( m_langMap ) ; it . current ( ) ; + + it ) {
if ( it . current ( ) - > name ( ) = = name ) {
return it . current ( ) ;
}
}
return & m_defaultLanguage ; //invalid language
} ;
const CLanguageMgr : : Language * const CLanguageMgr : : languageForTranslatedName ( const TQString & name ) const {
for ( LangMapIterator it ( m_langMap ) ; it . current ( ) ; + + it ) {
if ( it . current ( ) - > translatedName ( ) = = name ) {
return it . current ( ) ;
}
}
return & m_defaultLanguage ; //invalid language
} ;
void CLanguageMgr : : init ( ) {
//if we've already inserted all items we do not proceed
if ( m_langMap . count ( ) > 0 ) {
return ;
}
/*
* Chris explained in an eMail how language codes are build :
Preference order for locale codes are :
ISO 639 - 1
ISO 639 - 2
Ethnologue ( http : //www.ethnologue.org/)
We intend to always follow OSIS locale conventions , which state that
Ethnologue codes will be encoded in the format x - E - ? ? ? where ? ? ?
represents the 3 - letter Ethnologue code in capital letters ( though
capitalization really doesn ' t matter here ) .
Some older modules maintain a former format for Ethnolgoue codes of
xx - ? ? ? , including the AleWiesler module .
- - Chris
*/
// m_langList.append( new Language("aa" , "Afar" , i18n("Afar")) );
// m_langList.append( new Language("ab" , "Abkhazian" , i18n("Abkhazian")) );
// m_langList.append( new Language("ae" , "Avestan" , i18n("Avestan")) );
m_langList . append ( new Language ( " af " , " Afrikaans " , i18n ( " Afrikaans " ) ) ) ;
// m_langList.append( new Language("am" , "Amharic" , i18n("Amharic")) );
m_langList . append ( new Language ( " ang " , " English, Old (ca.450-1100) " , i18n ( " English, Old (ca.450-1100) " ) ) ) ;
m_langList . append ( new Language ( " ar " , " Arabic " , i18n ( " Arabic " ) ) ) ;
// m_langList.append( new Language("as" , "Assamese" , i18n("Assamese")) );
m_langList . append ( new Language ( " az " , " Azerbaijani " , i18n ( " Azerbaijani " ) ) ) ;
// m_langList.append( new Language("ba" , "Bashkir" , i18n("Bashkir")) );
m_langList . append ( new Language ( " be " , " Belarusian " , i18n ( " Belarusian " ) ) ) ;
m_langList . append ( new Language ( " bg " , " Bulgarian " , i18n ( " Bulgarian " ) ) ) ;
// m_langList.append( new Language("bh" , "Bihari" , i18n("Bihari")) );
// m_langList.append( new Language("bi" , "Bislama" , i18n("Bislama")) );
// m_langList.append( new Language("bn" , "Bengali" , i18n("Bengali")) );
// m_langList.append( new Language("bo" , "Tibetan" , i18n("Tibetan")) );
m_langList . append ( new Language ( " br " , " Breton " , i18n ( " Breton " ) ) ) ;
m_langList . append ( new Language ( " bs " , " Bosnian " , i18n ( " Bosnian " ) ) ) ;
m_langList . append ( new Language ( " ca " , " Catalan " , i18n ( " Catalan " ) ) ) ;
// m_langList.append( new Language("ce" , "Chechen" , i18n("Chechen")) );
m_langList . append ( new Language ( " ceb " , " Cebuano " , i18n ( " Cebuano " ) ) ) ;
m_langList . append ( new Language ( " ch " , " Chamorro " , i18n ( " Chamorro " ) ) ) ;
// m_langList.append( new Language("co" , "Corsican" , i18n("Corsican")) );
m_langList . append ( new Language ( " cop " , " Coptic " , i18n ( " Coptic " ) ) ) ;
m_langList . append ( new Language ( " cs " , " Czech " , i18n ( " Czech " ) ) ) ;
m_langList . append ( new Language ( " cu " , " Church Slavic " , i18n ( " Church Slavic " ) ) ) ;
// m_langList.append( new Language("cv" , "Chuvash" , i18n("Chuvash")) );
m_langList . append ( new Language ( " cy " , " Welsh " , i18n ( " Welsh " ) ) ) ;
m_langList . append ( new Language ( " da " , " Danish " , i18n ( " Danish " ) ) ) ;
m_langList . append ( new Language ( " de " , " German " , i18n ( " German " ) ) ) ;
// m_langList.append( new Language("dz" , "Dzongkha" , i18n("Dzongkha")) );
m_langList . append ( new Language ( " el " , " Greek, Modern (1453-) " , i18n ( " Greek, Modern (1453-) " ) , makeStringList ( " gre;ell " ) ) ) ;
m_langList . append ( new Language ( " en " , " English " , i18n ( " English " ) ) ) ;
m_langList . append ( new Language ( " en_US " , " American English " , i18n ( " American English " ) ) ) ;
m_langList . append ( new Language ( " enm " , " English, Middle (1100-1500) " , i18n ( " English, Middle (1100-1500) " ) ) ) ;
m_langList . append ( new Language ( " eo " , " Esperanto " , i18n ( " Esperanto " ) ) ) ;
m_langList . append ( new Language ( " es " , " Spanish " , i18n ( " Spanish " ) ) ) ;
m_langList . append ( new Language ( " et " , " Estonian " , i18n ( " Estonian " ) ) ) ;
m_langList . append ( new Language ( " eu " , " Basque " , i18n ( " Basque " ) ) ) ;
// m_langList.append( new Language("fa" , "Persian" , i18n("Persian")) );
m_langList . append ( new Language ( " fi " , " Finnish " , i18n ( " Finnish " ) ) ) ;
// m_langList.append( new Language("fj" , "Fijian" , i18n("Fijian")) );
// m_langList.append( new Language("fo" , "Faroese" , i18n("Faroese")) );
m_langList . append ( new Language ( " fr " , " French " , i18n ( " French " ) ) ) ;
m_langList . append ( new Language ( " fy " , " Frisian " , i18n ( " Frisian " ) ) ) ;
m_langList . append ( new Language ( " ga " , " Irish " , i18n ( " Irish " ) ) ) ;
m_langList . append ( new Language ( " gd " , " Gaelic (Scots) " , i18n ( " Gaelic (Scots) " ) ) ) ;
// m_langList.append( new Language("gl" , "Gallegan" , i18n("Gallegan")) );
// m_langList.append( new Language("gn" , "Guarani" , i18n("Guarani")) );
// m_langList.append( new Language("gn" , "Gujarati" , i18n("Gujarati")) );
m_langList . append ( new Language ( " got " , " Gothic " , i18n ( " Gothic " ) ) ) ;
m_langList . append ( new Language ( " gv " , " Manx " , i18n ( " Manx " ) ) ) ;
m_langList . append ( new Language ( " grc " , " Greek, Ancient (to 1453) " , i18n ( " Greek, Ancient (to 1453) " ) ) ) ;
m_langList . append ( new Language ( " he " , " Hebrew " , i18n ( " Hebrew " ) ) ) ;
m_langList . append ( new Language ( " hau " , " Hausa " , i18n ( " Hausa " ) ) ) ;
m_langList . append ( new Language ( " haw " , " Hawaiian " , i18n ( " Hawaiian " ) ) ) ;
// m_langList.append( new Language("hi" , "Hindi" , i18n("Hindi")) );
// m_langList.append( new Language("ho" , "Hiri Motu" , i18n("Hiri Motu")) );
m_langList . append ( new Language ( " hr " , " Croatian " , i18n ( " Croatian " ) ) ) ;
m_langList . append ( new Language ( " hu " , " Hungarian " , i18n ( " Hungarian " ) ) ) ;
m_langList . append ( new Language ( " hy " , " Armenian " , i18n ( " Armenian " ) ) ) ;
// m_langList.append( new Language("hz" , "Herero" , i18n("Herero")) );
// m_langList.append( new Language("ia" , "Interlingua" , i18n("Interlingua")) );
m_langList . append ( new Language ( " id " , " Indonesian " , i18n ( " Indonesian " ) ) ) ;
// m_langList.append( new Language("ie" , "Interlingue" , i18n("Interlingue")) );
// m_langList.append( new Language("ik" , "Inupiaq" , i18n("Inupiaq")) );
m_langList . append ( new Language ( " is " , " Icelandic " , i18n ( " Icelandic " ) ) ) ;
m_langList . append ( new Language ( " it " , " Italian " , i18n ( " Italian " ) ) ) ;
// m_langList.append( new Language("iu" , "Inuktitut" , i18n("Inuktitut")) );
m_langList . append ( new Language ( " ja " , " Japanese " , i18n ( " Japanese " ) ) ) ;
m_langList . append ( new Language ( " ka " , " Georgian " , i18n ( " Georgian " ) ) ) ;
// m_langList.append( new Language("x-E-KAB" , "Kabyle" , i18n("Kabyle")) );
// m_langList.append( new Language("ki" , "Kikuyu" , i18n("Kikuyu")) );
// m_langList.append( new Language("kj" , "Kuanyama" , i18n("Kuanyama")) );
// m_langList.append( new Language("kk" , "Kazakh" , i18n("Kazakh")) );
// m_langList.append( new Language("kl" , "Kalaallisut" , i18n("Kalaallisut")) );
// m_langList.append( new Language("km" , "Khmer" , i18n("Khmer")) );
// m_langList.append( new Language("kn" , "Kannada" , i18n("Kannada")) );
m_langList . append ( new Language ( " ko " , " Korean " , i18n ( " Korean " ) ) ) ;
// m_langList.append( new Language("ks" , "Kashmiri" , i18n("Kashmiri")) );
m_langList . append ( new Language ( " ku " , " Kurdish " , i18n ( " Kurdish " ) ) ) ;
// m_langList.append( new Language("kv" , "Komi" , i18n("Komi")) );
// m_langList.append( new Language("kw" , "Cornish" , i18n("Cornish")) );
m_langList . append ( new Language ( " ky " , " Kirghiz " , i18n ( " Kirghiz " ) ) ) ;
m_langList . append ( new Language ( " la " , " Latin " , i18n ( " Latin " ) ) ) ;
// m_langList.append( new Language("lb" , "Letzeburgesch" , i18n("Letzeburgesch")) );
// m_langList.append( new Language("ln" , "Lingala" , i18n("Lingala")) );
// m_langList.append( new Language("lo" , "Lao" , i18n("Lao")) );
m_langList . append ( new Language ( " lt " , " Lithuanian " , i18n ( " Lithuanian " ) ) ) ;
m_langList . append ( new Language ( " lv " , " Latvian " , i18n ( " Latvian " ) ) ) ;
// m_langList.append( new Language("mg" , "Malagasy" , i18n("Malagasy")) );
// m_langList.append( new Language("mh" , "Marshall" , i18n("Marshall")) );
m_langList . append ( new Language ( " mi " , " Maori " , i18n ( " Maori " ) ) ) ;
m_langList . append ( new Language ( " mk " , " Macedonian " , i18n ( " Macedonian " ) ) ) ;
// m_langList.append( new Language("ml" , "Malayalam" , i18n("Malayalam")) );
// m_langList.append( new Language("mn" , "Mongolian" , i18n("Mongolian")) );
// m_langList.append( new Language("mo" , "Moldavian" , i18n("Moldavian")) );
m_langList . append ( new Language ( " mos " , " More " , i18n ( " More " ) ) ) ;
// m_langList.append( new Language("mr" , "Marathi" , i18n("Marathi")) );
m_langList . append ( new Language ( " ms " , " Malay " , i18n ( " Malay " ) ) ) ;
m_langList . append ( new Language ( " mt " , " Maltese " , i18n ( " Maltese " ) ) ) ;
// m_langList.append( new Language("my" , "Burmese" , i18n("Burmese")) );
// m_langList.append( new Language("na" , "Nauru" , i18n("Nauru")) );
// m_langList.append( new Language("nb" , "Norwegian Bokmål" , i18n("Norwegian Bokmål")) );
// m_langList.append( new Language("nd" , "Ndebele, North" , i18n("Ndebele, North")) );
m_langList . append ( new Language ( " nds " , " Low German; Low Saxon " , i18n ( " Low German; Low Saxon " ) ) ) ;
// m_langList.append( new Language("ne" , "Nepali" , i18n("Nepali")) );
// m_langList.append( new Language("ng" , "Ndonga" , i18n("Ndonga")) );
m_langList . append ( new Language ( " nl " , " Dutch " , i18n ( " Dutch " ) ) ) ;
// m_langList.append( new Language("nn" , "Norwegian Nynorsk" , i18n("Norwegian Nynorsk")) );
m_langList . append ( new Language ( " no " , " Norwegian " , i18n ( " Norwegian " ) ) ) ;
// m_langList.append( new Language("nr" , "Ndebele, South" , i18n("Ndebele, South")) );
// m_langList.append( new Language("nv" , "Navajo" , i18n("Navajo")) );
// m_langList.append( new Language("ny" , "Chichewa; Nyanja" , i18n("Chichewa; Nyanja")) );
// m_langList.append( new Language("oc" , "Occitan (post 1500); Provençal" , i18n("Occitan (post 1500); Provençal")) );
// m_langList.append( new Language("om" , "Oromo" , i18n("Oromo")) );
// m_langList.append( new Language("or" , "Oriya" , i18n("Oriya")) );
// m_langList.append( new Language("os" , "Ossetian; Ossetic" , i18n("Ossetian; Ossetic")) );
// m_langList.append( new Language("pa" , "Panjabi" , i18n("Panjabi")) );
m_langList . append ( new Language ( " pap " , " Papiamento " , i18n ( " Papiamento " ) ) ) ;
// m_langList.append( new Language("pi" , "Pali" , i18n("Pali")) );
m_langList . append ( new Language ( " pl " , " Polish " , i18n ( " Polish " ) ) ) ;
// m_langList.append( new Language("ps" , "Pushto" , i18n("Pushto")) );
m_langList . append ( new Language ( " pt " , " Portuguese " , i18n ( " Portuguese " ) ) ) ;
m_langList . append ( new Language ( " pt_BR " , " Brasilian Portuguese " , i18n ( " Brasilian Portuguese " ) ) ) ; //added by ourself
// m_langList.append( new Language("qu" , "Quechua" , i18n("Quechua")) );
// m_langList.append( new Language("rm" , "Raeto-Romance" , i18n("Raeto-Romance")) );
// m_langList.append( new Language("rn" , "Rundi" , i18n("Rundi")) );
m_langList . append ( new Language ( " ro " , " Romanian " , i18n ( " Romanian " ) ) ) ;
m_langList . append ( new Language ( " ru " , " Russian " , i18n ( " Russian " ) ) ) ;
// m_langList.append( new Language("rw" , "Kinyarwanda" , i18n("Kinyarwanda")) );
// m_langList.append( new Language("sa" , "Sanskrit" , i18n("Sanskrit")) );
// m_langList.append( new Language("sc" , "Sardinian" , i18n("Sardinian")) );
m_langList . append ( new Language ( " sco " , " Scots " , i18n ( " Scots " ) ) ) ;
// m_langList.append( new Language("sd" , "Sindhi" , i18n("Sindhi")) );
// m_langList.append( new Language("se" , "Northern Sami" , i18n("Northern Sami")) );
// m_langList.append( new Language("sg" , "Sango" , i18n("Sango")) );
// m_langList.append( new Language("si" , "Sinhalese" , i18n("Sinhalese")) );
m_langList . append ( new Language ( " sk " , " Slovak " , i18n ( " Slovak " ) ) ) ;
m_langList . append ( new Language ( " sl " , " Slovenian " , i18n ( " Slovenian " ) ) ) ;
// m_langList.append( new Language("sm" , "Samoan" , i18n("Samoan")) );
// m_langList.append( new Language("sn" , "Shona" , i18n("Shona")) );
m_langList . append ( new Language ( " so " , " Somali " , i18n ( " Somali " ) ) ) ;
m_langList . append ( new Language ( " sq " , " Albanian " , i18n ( " Albanian " ) ) ) ;
// m_langList.append( new Language("sr" , "Serbian" , i18n("Serbian")) );
// m_langList.append( new Language("ss" , "Swati" , i18n("Swati")) );
// m_langList.append( new Language("st" , "Sotho, Southern" , i18n("Sotho, Southern")) );
// m_langList.append( new Language("su" , "Sundanese" , i18n("Sundanese")) );
m_langList . append ( new Language ( " sv " , " Swedish " , i18n ( " Swedish " ) ) ) ;
m_langList . append ( new Language ( " sw " , " Swahili " , i18n ( " Swahili " ) ) ) ;
m_langList . append ( new Language ( " syr " , " Syriac " , i18n ( " Syriac " ) ) ) ;
m_langList . append ( new Language ( " ta " , " Tamil " , i18n ( " Tamil " ) ) ) ;
// m_langList.append( new Language("te" , "Telugu" , i18n("Telugu")) );
// m_langList.append( new Language("tg" , "Tajik" , i18n("Tajik")) );
m_langList . append ( new Language ( " th " , " Thai " , i18n ( " Thai " ) ) ) ;
// m_langList.append( new Language("tk" , "Turkmen" , i18n("Turkmen")) );
m_langList . append ( new Language ( " tl " , " Tagalog " , i18n ( " Tagalog " ) ) ) ;
m_langList . append ( new Language ( " tn " , " Tswana " , i18n ( " Tswana " ) ) ) ;
m_langList . append ( new Language ( " tr " , " Turkish " , i18n ( " Turkish " ) ) ) ;
// m_langList.append( new Language("ts" , "Tsonga" , i18n("Tsonga")) );
// m_langList.append( new Language("tt" , "Tatar" , i18n("Tatar")) );
// m_langList.append( new Language("tw" , "Twi" , i18n("Twi")) );
m_langList . append ( new Language ( " ty " , " Tahitian " , i18n ( " Tahitian " ) ) ) ;
//
// m_langList.append( new Language("ug" , "Uighur" , i18n("Uighur")) );
m_langList . append ( new Language ( " uk " , " Ukrainian " , i18n ( " Ukrainian " ) ) ) ;
// m_langList.append( new Language("ur" , "Urdu" , i18n("Urdu")) );
// m_langList.append( new Language("uz" , "Uzbek" , i18n("Uzbek")) );
m_langList . append ( new Language ( " vi " , " Vietnamese " , i18n ( " Vietnamese " ) ) ) ;
// m_langList.append( new Language("vo" , "Volapük" , i18n("Volapük")) );
//
// m_langList.append( new Language("wo" , "Wolof" , i18n("Wolof")) );
m_langList . append ( new Language ( " xh " , " Xhosa " , i18n ( " Xhosa " ) ) ) ;
m_langList . append ( new Language ( " x-E-BAR " , " Bavarian " , i18n ( " Bavarian " ) ) ) ;
m_langList . append ( new Language ( " x-E-DJE " , " Zarma " , i18n ( " Zarma " ) ) ) ;
m_langList . append ( new Language ( " x-E-GSW " , " Alemannisch " , i18n ( " Alemannisch " ) ) ) ;
m_langList . append ( new Language ( " x-E-HAT " , " Haitian Creole French " , i18n ( " Haitian Creole French " ) ) ) ;
m_langList . append ( new Language ( " x-E-ITZ " , TQString : : fromUtf8 ( " Itzá " ) , i18n ( " Itzá " ) ) ) ;
m_langList . append ( new Language ( " x-E-JIV " , " Shuar " , i18n ( " Shuar " ) ) ) ;
m_langList . append ( new Language ( " x-E-KEK " , TQString : : fromUtf8 ( " Kekchí " ) , i18n ( " Kekchí " ) ) ) ;
m_langList . append ( new Language ( " x-E-KAB " , " Kabyle " , i18n ( " Kabyle " ) ) ) ;
m_langList . append ( new Language ( " x-E-LMO " , " Lombard " , i18n ( " Lombard " ) ) ) ;
m_langList . append ( new Language ( " x-E-MKJ " , " Macedonian " , i18n ( " Macedonian " ) ) ) ;
m_langList . append ( new Language ( " x-E-PDG " , " Tok Pisin " , i18n ( " Tok Pisin " ) ) ) ;
m_langList . append ( new Language ( " x-E-PPK " , " Uma " , i18n ( " Uma " ) ) ) ;
m_langList . append ( new Language ( " x-E-RMY " , " Romani, Vlax " , i18n ( " Romani, Vlax " ) ) ) ;
m_langList . append ( new Language ( " x-E-SAJ " , " Sango " , i18n ( " Sango " ) ) ) ;
m_langList . append ( new Language ( " x-E-SRN " , " Sranan " , i18n ( " Sranan " ) ) ) ;
// m_langList.append( new Language("yi" , "Yiddish" , i18n("Yiddish")) );
//
// m_langList.append( new Language("za" , "Zhuang" , i18n("Zhuang")) );
m_langList . append ( new Language ( " zh " , " Chinese " , i18n ( " Chinese " ) ) ) ;
m_langList . append ( new Language ( " zu " , " Zulu " , i18n ( " Zulu " ) ) ) ;
for ( Language * lang = m_langList . first ( ) ; lang ; lang = m_langList . next ( ) ) {
m_langMap . insert ( lang - > abbrev ( ) , lang ) ;
} ;
} ;