languagesupport.cpp

Go to the documentation of this file.
00001 /*
00002 **  This file is part of Vidalia, and is subject to the license terms in the
00003 **  LICENSE file, found in the top level directory of this distribution. If you
00004 **  did not receive the LICENSE file with this file, you may obtain it from the
00005 **  Vidalia source package distributed by the Vidalia Project at
00006 **  http://www.vidalia-project.net/. No part of Vidalia, including this file,
00007 **  may be copied, modified, propagated, or distributed except according to the
00008 **  terms described in the LICENSE file.
00009 */
00010 
00011 /*
00012 ** \file languagesupport.cpp
00013 ** \version $Id: languagesupport.cpp 3681 2009-04-08 06:01:04Z edmanm $
00014 ** \brief Contains languages supported by Vidalia
00015 */
00016 
00017 #include <QTranslator>
00018 #include <QLocale>
00019 #include <QLibraryInfo>
00020 #include <vidalia.h>
00021 
00022 #include "languagesupport.h"
00023 
00024 
00025 /** Initializes the list of available languages. */
00026 QMap<QString, QString>
00027 LanguageSupport::languages()
00028 {
00029   static QMap<QString, QString> languages;
00030   if (languages.isEmpty()) {
00031     languages.insert("en",    "English");
00032     languages.insert("ar",
00033       QString::fromUtf8("\330\247\331\204\330\271\330\261\330"
00034                         "\250\331\212\330\251"));
00035 //    languages.insert("bg",
00036 //      QString::fromUtf8("\320\221\321\212\320\273\320\263\320"
00037 //                        "\260\321\200\321\201\320\272\320\270"));
00038 //    languages.insert("cs",    
00039 //      QString::fromUtf8("\304\215e\305\241tina"));
00040     languages.insert("de",    "Deutsch");
00041     languages.insert("es",    
00042       QString::fromUtf8("espa\303\261ol"));
00043     languages.insert("fa",
00044       QString::fromUtf8("\331\201\330\247\330\261\330\263\333\214"));
00045     languages.insert("fi",    "suomi");
00046     languages.insert("fr",    
00047       QString::fromUtf8("fran\303\247ais"));
00048     languages.insert("he",
00049       QString::fromUtf8("\327\242\327\221\327\250\327\231\327\252"));
00050     languages.insert("hu",    "magyar nyelv");
00051     languages.insert("it",    "Italiano");
00052 //    languages.insert("ja",
00053 //      QString::fromUtf8("\346\227\245\346\234\254\350\252\236"));
00054 //    languages.insert("nb",    
00055 //      QString::fromUtf8("Bokm\303\245l"));
00056 //    languages.insert("nl",    "Nederlands");
00057     languages.insert("pl",    "Polski");
00058 //    languages.insert("pt",    
00059 //      QString::fromUtf8("Portugu\303\252s"));
00060     languages.insert("ro",
00061       QString::fromUtf8("rom\303\242n\304\203"));
00062     languages.insert("ru",
00063       QString::fromUtf8("\320\240\321\203\321\201\321\201\320\272\320\270\320\271"));
00064 //    languages.insert("sq",    "Shqip");
00065     languages.insert("sv",    "svenska");
00066     languages.insert("tr",    QString::fromUtf8("T\303\274rk\303\247e"));
00067     languages.insert("zh_CN", 
00068       QString::fromUtf8("\347\256\200\344\275\223\345\255\227"));
00069     languages.insert("zh_TW", 
00070       QString::fromUtf8("\347\260\241\351\253\224\345\255\227"));
00071   }
00072   return languages;
00073 }
00074 
00075 /** Returns the default language code for the system locale. */
00076 QString
00077 LanguageSupport::defaultLanguageCode()
00078 {
00079   QString language = QLocale::system().name();
00080 
00081   if (language != "zh_CN" && language != "zh_TW")
00082     language = language.mid(0, language.indexOf("_"));
00083   if (!isValidLanguageCode(language))
00084     language = "en";
00085   
00086   return language;
00087 }
00088 
00089 /** Returns the language code for a given language name. */
00090 QString
00091 LanguageSupport::languageCode(const QString &languageName)
00092 {
00093   return languages().key(languageName);
00094 }
00095 
00096 /** Returns a list of all supported language codes. (e.g., "en"). */
00097 QStringList
00098 LanguageSupport::languageCodes()
00099 {
00100   return languages().keys();
00101 }
00102 
00103 /** Returns the language name for a given language code. */
00104 QString
00105 LanguageSupport::languageName(const QString &languageCode)
00106 {
00107   return languages().value(languageCode);
00108 }
00109 
00110 /** Returns a list of all supported language names (e.g., "English"). */
00111 QStringList
00112 LanguageSupport::languageNames()
00113 {
00114   return languages().values();
00115 }
00116 
00117 /** Returns true if we understand the given language code. */
00118 bool
00119 LanguageSupport::isValidLanguageCode(const QString &languageCode)
00120 {
00121   return languageCodes().contains(languageCode);
00122 }
00123 
00124 /** Sets the application's translator to the specified language. */
00125 bool
00126 LanguageSupport::translate(const QString &languageCode)
00127 {
00128   if (!isValidLanguageCode(languageCode))
00129     return false;
00130   if (languageCode == "en")
00131     return true;
00132 
00133   /* Attempt to load the translations for Qt's internal widgets from their
00134    * installed Qt directory. */
00135   QTranslator *systemQtTranslator = new QTranslator(vApp);
00136   Q_CHECK_PTR(systemQtTranslator);
00137 
00138   QString qtDir = QLibraryInfo::location(QLibraryInfo::TranslationsPath);
00139   if (systemQtTranslator->load(qtDir + "/qt_" + languageCode + ".qm"))
00140     QApplication::installTranslator(systemQtTranslator);
00141   else
00142     delete systemQtTranslator;
00143 
00144   /* Install the translator for Qt's internal widgets that is shipped with
00145    * Vidalia. */
00146   QTranslator *qtTranslator = new QTranslator(vApp);
00147   Q_CHECK_PTR(qtTranslator);
00148 
00149   if (qtTranslator->load(":/lang/qt_" + languageCode + ".qm"))
00150     QApplication::installTranslator(qtTranslator);
00151   else 
00152     delete qtTranslator;
00153 
00154   /* Install a translator for Vidalia's UI widgets */
00155   QTranslator *vidaliaTranslator = new QTranslator(vApp);
00156   Q_CHECK_PTR(vidaliaTranslator);
00157 
00158   if (vidaliaTranslator->load(":/lang/vidalia_" + languageCode + ".qm")) {
00159     QApplication::installTranslator(vidaliaTranslator);
00160     return true;
00161   }
00162   delete vidaliaTranslator;
00163   return false;
00164 }

Generated on Wed Dec 23 21:06:55 2009 for Vidalia by  doxygen 1.6.1