Scribus Developer Documentation - API
logo-pen

Scribus Developer Documentation - API

langmgr.cpp

Go to the documentation of this file.
00001 /*
00002 For general Scribus (>=1.3.2) copyright and licensing information please refer
00003 to the COPYING file provided with the program. Following this notice may exist
00004 a copyright and/or license notice that predates the release of Scribus 1.3.2
00005 for which a new license (GPL+exception) is in place.
00006 */
00007 /***************************************************************************
00008     begin                : Jan 2005
00009     copyright            : (C) 2005 by Craig Bradney
00010     email                : cbradney@zip.com.au
00011  ***************************************************************************/
00012 
00013 /***************************************************************************
00014  *                                                                         *
00015  *   This program is free software; you can redistribute it and/or modify  *
00016  *   it under the terms of the GNU General Public License as published by  *
00017  *   the Free Software Foundation; either version 2 of the License, or     *
00018  *   (at your option) any later version.                                   *
00019  *                                                                         *
00020  ***************************************************************************/
00021  
00022 #include <iostream>
00023 
00024 #include <QDir>
00025 #include <QFileInfo>
00026 #include <QMap>
00027 #include <QObject>
00028 #include <QStringList> 
00029 
00030 #include "scconfig.h"
00031 #include "langmgr.h"
00032 #include "scpaths.h"
00033 
00034 void LanguageManager::init(bool generateInstalledList)
00035 {
00036     //generateUntranslatedLangList();
00037     generateLangList();
00038     if (generateInstalledList)
00039         generateInstalledLangList();
00040 }
00041 
00042 void LanguageManager::generateLangList()
00043 {
00044     langList.insert("af",       langPair("Afrikaans",           QObject::tr( "Afrikaans" )) );
00045     langList.insert("ar",       langPair("Arabic",              QObject::tr( "Arabic" )) );
00046     langList.insert("sq",       langPair("Albanian",            QObject::tr( "Albanian" )) );
00047     langList.insert("eu",       langPair("Basque",              QObject::tr( "Basque" )) );
00048     langList.insert("bg",       langPair("Bulgarian",           QObject::tr( "Bulgarian" )) );
00049     langList.insert("br",       langPair("Breton",              QObject::tr( "Breton" )) );
00050     langList.insert("ca",       langPair("Catalan",             QObject::tr( "Catalan" )) );
00051     langList.insert("zh",       langPair("Chinese",             QObject::tr( "Chinese" )) );
00052     langList.insert("zh_TW",    langPair("Chinese (Trad.)",     QObject::tr( "Chinese (Trad.)" )) );
00053     langList.insert("hr",       langPair("Croatian",            QObject::tr( "Croatian" )) );
00054     langList.insert("cs",       langPair("Czech",               QObject::tr( "Czech" )) );
00055     langList.insert("cs_CZ",    langPair("Czech",               QObject::tr( "Czech" )) );
00056     langList.insert("da",       langPair("Danish",              QObject::tr( "Danish" )) );
00057     langList.insert("da_DK",    langPair("Danish",              QObject::tr( "Danish" )) );
00058     langList.insert("dz",       langPair("Dzongkha",            QObject::tr( "Dzongkha" )) );
00059     langList.insert("nl",       langPair("Dutch",               QObject::tr( "Dutch" )) );
00060     langList.insert("en",       langPair("English",             QObject::tr( "English" )) );
00061     langList.insert("en_AU",    langPair("English (Australian)",QObject::tr( "English (Australian)" )) );
00062     langList.insert("en_GB",    langPair("English (British)",   QObject::tr( "English (British)" )) );
00063     langList.insert("en_US",    langPair("English (American)",  QObject::tr( "English (American)" )) );
00064     langList.insert("eo",       langPair("Esperanto",           QObject::tr( "Esperanto" )) );
00065     langList.insert("et",       langPair("Estonian",            QObject::tr( "Estonian" )) );
00066     langList.insert("de",       langPair("German",              QObject::tr( "German" )) );
00067     langList.insert("de_CH",    langPair("German (Swiss)",              QObject::tr( "German (Swiss)" )) );
00068     langList.insert("de_ol",    langPair("German (Trad.)",      QObject::tr( "German (Trad.)" )) );
00069     langList.insert("fi",       langPair("Finnish",             QObject::tr( "Finnish" )) );
00070     langList.insert("fr",       langPair("French",              QObject::tr( "French" )) );
00071     langList.insert("ga",       langPair("Galician",            QObject::tr( "Galician" )) );
00072     langList.insert("galician", langPair("Galician",            QObject::tr( "Galician" )) );
00073     langList.insert("gl",       langPair("Galician",            QObject::tr( "Galician" )) );
00074     langList.insert("el",       langPair("Greek",               QObject::tr( "Greek" )) );
00075     langList.insert("he",       langPair("Hebrew",              QObject::tr( "Hebrew" )) );
00076     langList.insert("hu",       langPair("Hungarian",           QObject::tr( "Hungarian" )) );
00077     langList.insert("ia",       langPair("Latin",               QObject::tr( "Latin" )) );
00078     langList.insert("is",       langPair("Icelandic",           QObject::tr( "Icelandic" )) );
00079     langList.insert("id",       langPair("Indonesian",          QObject::tr( "Indonesian" )) );
00080     langList.insert("it",       langPair("Italian",             QObject::tr( "Italian" )) );
00081     langList.insert("ja",       langPair("Japanese",            QObject::tr( "Japanese" )) );
00082     langList.insert("km",       langPair("Khmer",               QObject::tr( "Khmer" )) );
00083     langList.insert("ko",       langPair("Korean",              QObject::tr( "Korean" )) );
00084     langList.insert("lo",       langPair("Lao",                 QObject::tr( "Lao" )) );
00085     langList.insert("la",       langPair("Latin",               QObject::tr( "Latin" )) );
00086     langList.insert("lt",       langPair("Lithuanian",          QObject::tr( "Lithuanian" )) );
00087     langList.insert("lt_LT",    langPair("Lithuanian",          QObject::tr( "Lithuanian" )) );
00088     langList.insert("lu",       langPair("Luxembourgish",       QObject::tr( "Luxembourgish" )) );
00089     //We might need &#00E5; for this accented a
00090     langList.insert("nb",       langPair("Norwegian (Bokmål)",  QObject::trUtf8( "Norwegian (Bokm\225l)" )) );
00091     langList.insert("nb_NO",    langPair("Norwegian (Bokmål)",  QObject::trUtf8( "Norwegian (Bokm\225l)" )) );
00092     langList.insert("nn",       langPair("Norwegian (Nnyorsk)", QObject::tr( "Norwegian (Nnyorsk)" )) );
00093     langList.insert("nn_NO",    langPair("Norwegian (Nnyorsk)", QObject::tr( "Norwegian (Nnyorsk)" )) );
00094     langList.insert("no",       langPair("Norwegian",           QObject::tr( "Norwegian" )) );
00095     langList.insert("no_NO",    langPair("Norwegian",           QObject::tr( "Norwegian" )) );
00096     langList.insert("pl",       langPair("Polish",              QObject::tr( "Polish" )) );
00097     langList.insert("pl_PL",    langPair("Polish",              QObject::tr( "Polish" )) );
00098     langList.insert("pt",       langPair("Portuguese",          QObject::tr( "Portuguese" )) );
00099     langList.insert("pt_BR",    langPair("Portuguese (BR)",     QObject::tr( "Portuguese (BR)" )) );
00100     langList.insert("ro",       langPair("Romanian",            QObject::tr( "Romanian" )) );
00101     langList.insert("ru",       langPair("Russian",             QObject::tr( "Russian" )) );
00102     langList.insert("es",       langPair("Spanish",             QObject::tr( "Spanish" )) );
00103     langList.insert("es_ES",    langPair("Spanish",             QObject::tr( "Spanish" )) );
00104     langList.insert("es_LA",    langPair("Spanish (Latin)",     QObject::tr( "Spanish (Latin)" )) );
00105     langList.insert("sk",       langPair("Slovak",              QObject::tr( "Slovak" )) );
00106     langList.insert("sl",       langPair("Slovenian",           QObject::tr( "Slovenian" )) );
00107     langList.insert("sr",       langPair("Serbian",             QObject::tr( "Serbian" )) );
00108     langList.insert("sv",       langPair("Swedish",             QObject::tr( "Swedish" )) );
00109     langList.insert("th",       langPair("Thai",                QObject::tr( "Thai" )) );
00110     langList.insert("th_TH",    langPair("Thai",                QObject::tr( "Thai" )) );
00111     langList.insert("tr",       langPair("Turkish",             QObject::tr( "Turkish" )) );
00112     langList.insert("tr_TR",    langPair("Turkish",             QObject::tr( "Turkish" )) );
00113     langList.insert("uk",       langPair("Ukranian",            QObject::tr( "Ukranian" )) );
00114     langList.insert("vi",       langPair("Vietnamese",          QObject::tr( "Vietnamese" )) );
00115     langList.insert("cy",       langPair("Welsh",               QObject::tr( "Welsh" )) );
00116 }
00117 
00118 void LanguageManager::generateInstalledLangList()
00119 {
00120     QString path = ScPaths::instance().translationDir();
00121     QString langAbbrev;
00122     QMap<QString, langPair>::Iterator it;
00123     QDir dir(path , "*.*", QDir::Name, QDir::Files | QDir::NoSymLinks);
00124     if (dir.exists() && (dir.count() != 0))
00125     {
00126         for (uint i = 0; i < dir.count(); ++i) 
00127         {
00128             QFileInfo file(path + dir[i]);
00129             if (file.suffix().toLower() == "qm")
00130             {
00131                 langAbbrev = file.completeSuffix().remove(".qm");
00132                 if ((it=langList.find(langAbbrev))!=langList.end())
00133                         installedLangList.insert(it.key(), it.value().second);
00134             }
00135         }
00136     }
00137 }
00138 
00139 const QString LanguageManager::getLangFromAbbrev(QString langAbbrev, bool getTranslated)
00140 {
00141     QMap<QString, langPair>::Iterator it;
00142     if ((it=langList.find(langAbbrev))!=langList.end())
00143     {
00144         if (getTranslated)
00145             return it.value().second;
00146         else
00147             return it.value().first;
00148     }
00149     else
00150         return "";  
00151 }
00152 
00153 const QString LanguageManager::getAbbrevFromLang(QString lang, bool getFromTranslated, bool useInstalled)
00154 {
00155     QMap<QString, langPair>::Iterator it;
00156     if (lang == "English" || lang == QObject::tr( "English"))
00157         useInstalled = false;
00158     if (useInstalled)
00159     {
00160         for (it=langList.begin();it!=langList.end();++it)
00161         {
00162             if (installedLangList.find(it.key()) != installedLangList.end())
00163             {
00164                 if (getFromTranslated && it.value().second==lang)
00165                     return it.key();
00166                 if (!getFromTranslated && it.value().first==lang)
00167                     return it.key();
00168             }
00169         }
00170     }
00171     else
00172     {
00173         for (it=langList.begin();it!=langList.end();++it)
00174         {
00175 //          if (installedLangList.find(it.key()) != installedLangList.end())
00176 //          {
00177             if (getFromTranslated && it.value().second==lang)
00178                 return it.key();
00179             if (!getFromTranslated && it.value().first==lang)
00180                 return it.key();
00181 //          }
00182         }
00183     }
00184     return "";
00185 }
00186 
00187 void LanguageManager::fillInstalledStringList(QStringList *stringListToFill, bool addDefaults) 
00188 {
00189     if (stringListToFill)
00190     {
00191         QMap<QString, QString>::Iterator it;
00192 
00193         if (addDefaults) 
00194         {
00195             stringListToFill->append("");
00196             stringListToFill->append( QObject::tr( "English" ));
00197         }
00198 
00199         for (it=installedLangList.begin();it!=installedLangList.end();++it)
00200             stringListToFill->append(it.value());
00201     }
00202 }
00203 
00204 void LanguageManager::printInstalledList()
00205 {
00206     QMap<QString, QString>::Iterator it;
00207 
00208     for (it=installedLangList.begin();it!=installedLangList.end();++it)
00209         std::cout << it.key().leftJustified(6).toStdString() << ": " << it.value().toStdString() << std::endl;
00210 }
00211 
00212 QString LanguageManager::numericSequence(QString seq)
00213 {
00214     QString retSeq;
00215     const int nsBengali=0,nsDevanagari=1,nsGujarati=2,nsGurumukhi=3,nsKannada=4,nsMalayalam=5,nsOriya=6,nsTamil=7,nsTelugu=8,nsTibetan=9,nsLepcha=10;
00216     switch (1)
00217     {
00218         case nsBengali:
00219             retSeq+="";
00220             break;
00221         case nsDevanagari:
00222             retSeq+="०१२३४५६७८९";
00223             break;
00224         case nsGujarati:
00225             retSeq+="૦૧૨૩૪૫૬૭૮૯";
00226             break;
00227         case nsGurumukhi:
00228             retSeq+="੦੧੨੩੪੫੬੭੮੯";
00229             break;
00230         case nsKannada:
00231             retSeq+="";
00232             break;
00233         case nsMalayalam:
00234             retSeq+="";
00235             break;
00236         case nsOriya:
00237             retSeq+="";
00238             break;
00239         case nsTamil:
00240             retSeq+="";
00241             break;
00242         case nsTelugu:
00243             retSeq+="";
00244             break;
00245         case nsTibetan:
00246             retSeq+="";
00247             break;
00248         case nsLepcha:
00249             retSeq+="";
00250             break;
00251         default:
00252             retSeq="0123456789";
00253             break;
00254     }
00255     return retSeq;
00256 }
00257 
00258 LanguageManager::~LanguageManager()
00259 {
00260     langList.clear();
00261     installedLangList.clear();
00262 }
00263 
Created with personalized Doxygen. This is documentation for GPL software Scribus - Open Source Desktop Publishing.