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 2811 2008-06-28 21:41:20Z edmanm $
00014 ** \brief Contains languages supported by Vidalia
00015 */
00016 
00017 #include <QTranslator>
00018 #include <QLocale>
00019 #include <vidalia.h>
00020 
00021 #include "languagesupport.h"
00022 
00023 
00024 /** Initializes the list of available languages. */
00025 QMap<QString, QString>
00026 LanguageSupport::languages()
00027 {
00028   static QMap<QString, QString> languages;
00029   if (languages.isEmpty()) {
00030     languages.insert("en",    "English");
00031     languages.insert("ar",
00032       QString::fromUtf8("\330\247\331\204\330\271\330\261\330"
00033                         "\250\331\212\330\251"));
00034     languages.insert("bg",
00035       QString::fromUtf8("\320\221\321\212\320\273\320\263\320"
00036                         "\260\321\200\321\201\320\272\320\270"));
00037     languages.insert("cs",    
00038       QString::fromUtf8("\304\215e\305\241tina"));
00039     languages.insert("de",    "Deutsch");
00040     languages.insert("es",    
00041       QString::fromUtf8("espa\303\261ol"));
00042     languages.insert("fa",
00043       QString::fromUtf8("\331\201\330\247\330\261\330\263\333\214"));
00044     languages.insert("fi",    "suomi");
00045     languages.insert("fr",    
00046       QString::fromUtf8("fran\303\247ais"));
00047     languages.insert("he",
00048       QString::fromUtf8("\327\242\327\221\327\250\327\231\327\252"));
00049     languages.insert("hu",    "magyar nyelv");
00050     languages.insert("it",    "Italiano");
00051     languages.insert("ja",
00052       QString::fromUtf8("\346\227\245\346\234\254\350\252\236"));
00053     languages.insert("nb",    
00054       QString::fromUtf8("Bokm\303\245l"));
00055     languages.insert("nl",    "Nederlands");
00056     languages.insert("pl",    "Polski");
00057     languages.insert("pt",    
00058       QString::fromUtf8("Portugu\303\252s"));
00059     languages.insert("ro",
00060       QString::fromUtf8("rom\303\242n\304\203"));
00061     languages.insert("ru",
00062       QString::fromUtf8("\320\240\321\203\321\201\321\201\320\272\320\270\320\271"));
00063     languages.insert("sq",    "Shqip");
00064     languages.insert("sv",    "svenska");
00065     languages.insert("tr",    QString::fromUtf8("T\303\274rk\303\247e"));
00066     languages.insert("zh_CN", 
00067       QString::fromUtf8("\347\256\200\344\275\223\345\255\227"));
00068     languages.insert("zh_TW", 
00069       QString::fromUtf8("\347\260\241\351\253\224\345\255\227"));
00070   }
00071   return languages;
00072 }
00073 
00074 /** Returns the default language code for the system locale. */
00075 QString
00076 LanguageSupport::defaultLanguageCode()
00077 {
00078   QString language = QLocale::system().name();
00079 
00080   if (language != "zh_CN" && language != "zh_TW")
00081     language = language.mid(0, language.indexOf("_"));
00082   if (!isValidLanguageCode(language))
00083     language = "en";
00084   
00085   return language;
00086 }
00087 
00088 /** Returns the language code for a given language name. */
00089 QString
00090 LanguageSupport::languageCode(const QString &languageName)
00091 {
00092   return languages().key(languageName);
00093 }
00094 
00095 /** Returns a list of all supported language codes. (e.g., "en"). */
00096 QStringList
00097 LanguageSupport::languageCodes()
00098 {
00099   return languages().keys();
00100 }
00101 
00102 /** Returns the language name for a given language code. */
00103 QString
00104 LanguageSupport::languageName(const QString &languageCode)
00105 {
00106   return languages().value(languageCode);
00107 }
00108 
00109 /** Returns a list of all supported language names (e.g., "English"). */
00110 QStringList
00111 LanguageSupport::languageNames()
00112 {
00113   return languages().values();
00114 }
00115 
00116 /** Returns true if we understand the given language code. */
00117 bool
00118 LanguageSupport::isValidLanguageCode(const QString &languageCode)
00119 {
00120   return languageCodes().contains(languageCode);
00121 }
00122 
00123 /** Returns true if <b>languageCode</b> requires a right-to-left layout. */
00124 bool
00125 LanguageSupport::isRightToLeft(const QString &languageCode)
00126 {
00127   return (!languageCode.compare("ar", Qt::CaseInsensitive) 
00128             || !languageCode.compare("fa", Qt::CaseInsensitive)
00129             || !languageCode.compare("he", Qt::CaseInsensitive));
00130 }
00131 
00132 /** Sets the application's translator to the specified language. */
00133 bool
00134 LanguageSupport::translate(const QString &languageCode)
00135 {
00136   if (!isValidLanguageCode(languageCode))
00137     return false;
00138   if (languageCode == "en")
00139     return true;
00140 
00141   QTranslator *translator = new QTranslator(vApp);
00142   if (translator->load(QString(":/lang/vidalia_%1.qm").arg(languageCode))) {
00143     QApplication::installTranslator(translator);
00144     if (isRightToLeft(languageCode))
00145       vApp->setLayoutDirection(Qt::RightToLeft);
00146     return true;
00147   }
00148   delete translator;
00149   return false;
00150 }
00151 

Generated on Sat Aug 16 17:38:35 2008 for Vidalia by  doxygen 1.5.6