diff options
| author | 2011-03-23 02:28:09 +0000 | |
|---|---|---|
| committer | 2011-03-23 02:28:09 +0000 | |
| commit | 9fff8c9bbbf78c53ecc1240125d44b20236f7f85 (patch) | |
| tree | ad4a1c215cb1834b4d995e6aa28df43ece4c025b | |
| parent | updated popup version: please KEEP this file updated (diff) | |
| download | KVIrc-9fff8c9bbbf78c53ecc1240125d44b20236f7f85.tar.gz KVIrc-9fff8c9bbbf78c53ecc1240125d44b20236f7f85.tar.bz2 KVIrc-9fff8c9bbbf78c53ecc1240125d44b20236f7f85.zip | |
Load translation catalogues 'on-the-fly' from the default locale directory
git-svn-id: https://svn.kvirc.de/svn/trunk/kvirc@5671 17fca916-40b9-46aa-a4ea-0a15b648b75c
| -rw-r--r-- | src/kvilib/core/KviCString.cpp | 2 | ||||
| -rw-r--r-- | src/kvilib/core/KviCString.h | 2 | ||||
| -rw-r--r-- | src/kvilib/ext/KviCommandFormatter.cpp | 6 | ||||
| -rw-r--r-- | src/kvilib/net/KviHttpRequest.cpp | 6 | ||||
| -rw-r--r-- | src/kvilib/system/KviLocale.cpp | 86 | ||||
| -rw-r--r-- | src/kvilib/system/KviLocale.h | 8 | ||||
| -rw-r--r-- | src/kvirc/kernel/KviIrcSocket.cpp | 2 | ||||
| -rw-r--r-- | src/kvirc/sparser/KviIrcServerParser_ctcp.cpp | 9 | ||||
| -rw-r--r-- | src/modules/ident/libkviident.cpp | 2 |
9 files changed, 71 insertions, 52 deletions
diff --git a/src/kvilib/core/KviCString.cpp b/src/kvilib/core/KviCString.cpp index 30866c8cb..222ff8219 100644 --- a/src/kvilib/core/KviCString.cpp +++ b/src/kvilib/core/KviCString.cpp @@ -2912,7 +2912,7 @@ int KviCString::findLastIdx(const char *str,bool caseS) const } } -KviCString & KviCString::trimmed() +KviCString & KviCString::trim() { // 0123456789 // abcd 0 diff --git a/src/kvilib/core/KviCString.h b/src/kvilib/core/KviCString.h index 925e6149d..83bfc2875 100644 --- a/src/kvilib/core/KviCString.h +++ b/src/kvilib/core/KviCString.h @@ -322,7 +322,7 @@ public: KviCString & stripRightWhiteSpace(); // Stips inital and final WHITESPACE characters (see man isspace),<br> // and returns a reference to this string. - KviCString & trimmed(); + KviCString & trim(); // Strips spaces and tabs only KviCString & stripSpace(); diff --git a/src/kvilib/ext/KviCommandFormatter.cpp b/src/kvilib/ext/KviCommandFormatter.cpp index a5327fb23..dc7b2816b 100644 --- a/src/kvilib/ext/KviCommandFormatter.cpp +++ b/src/kvilib/ext/KviCommandFormatter.cpp @@ -43,7 +43,7 @@ namespace KviCommandFormatter } else { // we pretend this line to be empty KviCString szTmp = *(*pszArray); - szTmp.trimmed(); + szTmp.trim(); if(szTmp.hasData()) return false; *(*pszArray) = ""; // set it to empty also in the main buffer @@ -143,7 +143,7 @@ namespace KviCommandFormatter void bufferFromBlock(KviCString & szBuffer) { - szBuffer.trimmed(); + szBuffer.trim(); if((*(szBuffer.ptr()) == '{') && szBuffer.lastCharIs('}')) { @@ -154,7 +154,7 @@ namespace KviCommandFormatter unindent(szBuffer); - szBuffer.trimmed(); + szBuffer.trim(); } void bufferFromBlock(QString & szBuffer) diff --git a/src/kvilib/net/KviHttpRequest.cpp b/src/kvilib/net/KviHttpRequest.cpp index 4856e6fcb..34a6dfe8f 100644 --- a/src/kvilib/net/KviHttpRequest.cpp +++ b/src/kvilib/net/KviHttpRequest.cpp @@ -575,7 +575,7 @@ bool KviHttpRequest::processHeader(KviCString &szHeader) szHeader = ""; } - szResponse.trimmed(); + szResponse.trim(); bool bValid = false; @@ -586,7 +586,7 @@ bool KviHttpRequest::processHeader(KviCString &szHeader) { KviCString szR = szResponse; szR.cutToFirst(' '); - szR.trimmed(); + szR.trim(); int idx = szR.findFirstIdx(' '); KviCString szNumber; if(idx != -1)szNumber = szR.left(idx); @@ -637,7 +637,7 @@ bool KviHttpRequest::processHeader(KviCString &szHeader) { KviCString szName = s->left(idx); s->cutLeft(idx + 1); - s->trimmed(); + s->trim(); hdr.replace(szName.ptr(),new KviCString(*s)); //qDebug("FOUND HEADER (%s)=(%s)",szName.ptr(),s->ptr()); } diff --git a/src/kvilib/system/KviLocale.cpp b/src/kvilib/system/KviLocale.cpp index 2d3ea6c9a..f90b5af02 100644 --- a/src/kvilib/system/KviLocale.cpp +++ b/src/kvilib/system/KviLocale.cpp @@ -36,6 +36,7 @@ #include <QDir> #include <QLocale> #include <QByteArray> +#include <QString> #include "KviQString.h" #include "KviEnvironment.h" @@ -43,13 +44,15 @@ #include "KviFile.h" #include "KviPointerHashTable.h" +// TODO: Convert KviLocale to a full featured singleton class with member variables. -KVILIB_API KviMessageCatalogue * g_pMainCatalogue = 0; +KVILIB_API KviMessageCatalogue * g_pMainCatalogue = NULL; -static KviCString g_szLang; -static KviTranslator * g_pTranslator = 0; -static KviPointerHashTable<const char *,KviMessageCatalogue> * g_pCatalogueDict = 0; -static QTextCodec * g_pUtf8TextCodec = 0; +static KviCString g_szLang; +static KviTranslator * g_pTranslator = NULL; +static KviPointerHashTable<const char *,KviMessageCatalogue> * g_pCatalogueDict = NULL; +static QTextCodec * g_pUtf8TextCodec = NULL; +static QString g_szDefaultLocalePath; // FIXME: Convert this to a search path list ///////////////////////////////////////////////////////////////////////////////////// @@ -560,7 +563,7 @@ bool KviMessageCatalogue::load(const QString& name) { szHeader.cutLeft(idx + 8); szHeader.cutFromFirst('\n'); - szHeader.trimmed(); + szHeader.trim(); m_pTextCodec = KviLocale::codecForName(szHeader.ptr()); if(!m_pTextCodec) { @@ -838,26 +841,26 @@ namespace KviLocale return g_szLang; } - bool loadCatalogue(const QString &name,const QString &szLocaleDir) + KviMessageCatalogue * loadCatalogue(const QString &name,const QString &szLocaleDir) { //qDebug("Looking up catalogue %s",name); - if(g_pCatalogueDict->find(name.toUtf8().data())) - return true; // already loaded + KviMessageCatalogue * pCatalogue = g_pCatalogueDict->find(name.toUtf8().data()); + if(pCatalogue) + return pCatalogue; // already loaded QString szBuffer; - if(findCatalogue(szBuffer,name,szLocaleDir)) + if(!findCatalogue(szBuffer,name,szLocaleDir)) + return NULL; + + pCatalogue = new KviMessageCatalogue(); + if(pCatalogue->load(szBuffer)) { - KviMessageCatalogue * c = new KviMessageCatalogue(); - if(c->load(szBuffer)) - { - g_pCatalogueDict->insert(name.toUtf8().data(),c); - return true; - } - delete c; - c = 0; + g_pCatalogueDict->insert(name.toUtf8().data(),pCatalogue); + return pCatalogue; } - return false; + delete pCatalogue; + return NULL; } bool unloadCatalogue(const QString &name) @@ -940,12 +943,19 @@ namespace KviLocale KviFileUtils::readFile(szLangFile,szTmp); g_szLang=szTmp; } - if(g_szLang.isEmpty())g_szLang = KviEnvironment::getVariable("KVIRC_LANG"); - if(g_szLang.isEmpty())g_szLang = KviEnvironment::getVariable("LC_MESSAGES"); - if(g_szLang.isEmpty())g_szLang = KviEnvironment::getVariable("LANG"); - if(g_szLang.isEmpty())g_szLang = QLocale::system().name(); - if(g_szLang.isEmpty())g_szLang = "en"; - g_szLang.trimmed(); + if(g_szLang.isEmpty()) + g_szLang = KviEnvironment::getVariable("KVIRC_LANG"); + if(g_szLang.isEmpty()) + g_szLang = KviEnvironment::getVariable("LC_MESSAGES"); + if(g_szLang.isEmpty()) + g_szLang = KviEnvironment::getVariable("LANG"); + if(g_szLang.isEmpty()) + g_szLang = QLocale::system().name(); + if(g_szLang.isEmpty()) + g_szLang = "en"; + g_szLang.trim(); + + g_szDefaultLocalePath = localeDir; // the main catalogue is supposed to be kvirc_<language>.mo g_pMainCatalogue = new KviMessageCatalogue(); @@ -1016,34 +1026,40 @@ namespace KviLocale const char * translate(const char * text,const char * context) { - if(context) + if(!context) + return g_pMainCatalogue->translate(text); + + KviMessageCatalogue * c = g_pCatalogueDict->find(context); + if(!c) { - KviMessageCatalogue * c = g_pCatalogueDict->find(context); + c = loadCatalogue(QString::fromUtf8(context),g_szDefaultLocalePath); if(!c) { - // FIXME: Should really try to load the catalogue here! + // Fake it.... c = new KviMessageCatalogue(); g_pCatalogueDict->insert(context,c); } - return c->translate(text); } - return g_pMainCatalogue->translate(text); + return c->translate(text); } const QString & translateToQString(const char * text,const char * context) { - if(context) + if(!context) + return g_pMainCatalogue->translateToQString(text); + + KviMessageCatalogue * c = g_pCatalogueDict->find(context); + if(!c) { - KviMessageCatalogue * c = g_pCatalogueDict->find(context); + c = loadCatalogue(QString::fromUtf8(context),g_szDefaultLocalePath); if(!c) { - // FIXME: Should really try to load the catalogue here! + // Fake it.... c = new KviMessageCatalogue(); g_pCatalogueDict->insert(context,c); } - return c->translateToQString(text); } - return g_pMainCatalogue->translateToQString(text); + return c->translateToQString(text); } } diff --git a/src/kvilib/system/KviLocale.h b/src/kvilib/system/KviLocale.h index 709ecd54c..8cd2d0588 100644 --- a/src/kvilib/system/KviLocale.h +++ b/src/kvilib/system/KviLocale.h @@ -61,10 +61,14 @@ namespace KviLocale KVILIB_API QTextCodec * codecForName(const char * szName); KVILIB_API const KviCString & localeName(); KVILIB_API bool findCatalogue(QString &szBuffer,const QString& name,const QString& szLocaleDir); - KVILIB_API bool loadCatalogue(const QString& name,const QString& szLocaleDir); + KVILIB_API KviMessageCatalogue * loadCatalogue(const QString& name,const QString& szLocaleDir); KVILIB_API KviMessageCatalogue * getLoadedCatalogue(const QString& name); KVILIB_API bool unloadCatalogue(const QString& name); - KVILIB_API void init(QApplication * app,const QString& localeDir,const QString& forceLocaleDir); + KVILIB_API void init( + QApplication * app, + const QString& localeDir, + const QString& forceLocaleDir + ); KVILIB_API void done(QApplication * app); KVILIB_API const char * translate(const char * text,const char * context); KVILIB_API const QString & translateToQString(const char * text,const char * context); diff --git a/src/kvirc/kernel/KviIrcSocket.cpp b/src/kvirc/kernel/KviIrcSocket.cpp index 6c6eb30b8..7a4a6eeb5 100644 --- a/src/kvirc/kernel/KviIrcSocket.cpp +++ b/src/kvirc/kernel/KviIrcSocket.cpp @@ -1210,7 +1210,7 @@ void KviIrcSocket::proxyHandleHttpFinalReply(const char * pcBuffer, int) KviCString szTmp = pcBuffer; // FIXME: #warning "We could even show the proxy output here...!" szTmp.cutFromFirst('\n'); - szTmp.trimmed(); + szTmp.trim(); if(kvi_strEqualCIN(szTmp.ptr(),"HTTP",4)) { diff --git a/src/kvirc/sparser/KviIrcServerParser_ctcp.cpp b/src/kvirc/sparser/KviIrcServerParser_ctcp.cpp index cfeda3035..009939b37 100644 --- a/src/kvirc/sparser/KviIrcServerParser_ctcp.cpp +++ b/src/kvirc/sparser/KviIrcServerParser_ctcp.cpp @@ -1255,7 +1255,7 @@ void KviIrcServerParser::parseCtcpRequestClientinfo(KviCtcpMessage *msg) { KviCString szTag; msg->pData = extractCtcpParameter(msg->pData,szTag,false); - szTag.trimmed(); + szTag.trim(); szTag.toUpper(); if(szTag.isEmpty()) { @@ -1362,11 +1362,10 @@ void KviIrcServerParser::parseCtcpRequestPage(KviCtcpMessage *msg) { if(!KVI_OPTION_BOOL(KviOption_boolIgnoreCtcpPage)) { - KVI_OPTION_STRING(KviOption_stringCtcpPageReply).trimmed(); + KVI_OPTION_STRING(KviOption_stringCtcpPageReply) = KVI_OPTION_STRING(KviOption_stringCtcpPageReply).trimmed(); if(KVI_OPTION_STRING(KviOption_stringCtcpPageReply).isEmpty()) - { KVI_OPTION_STRING(KviOption_stringCtcpPageReply) = KVI_DEFAULT_CTCP_PAGE_REPLY; - } + replyCtcp(msg,KVI_OPTION_STRING(KviOption_stringCtcpPageReply)); if(KVI_OPTION_BOOL(KviOption_boolShowDialogOnCtcpPage)) { @@ -1575,7 +1574,7 @@ void KviIrcServerParser::parseCtcpReplyAvatar(KviCtcpMessage *msg) decoded = extractCtcpParameter(decoded.toUtf8().data(),szRemoteFile,true); decoded = extractCtcpParameter(decoded.toUtf8().data(),szGender,true); - szRemoteFile.trimmed(); + szRemoteFile = szRemoteFile.trimmed(); bool bPrivate = IS_ME(msg->msg,msg->szTarget); diff --git a/src/modules/ident/libkviident.cpp b/src/modules/ident/libkviident.cpp index c2b1ebdbf..fb28571ee 100644 --- a/src/modules/ident/libkviident.cpp +++ b/src/modules/ident/libkviident.cpp @@ -465,7 +465,7 @@ ipv6_failure: // Ok...parse the request KviCString szReq = r->m_szData.left(idx); r->m_szData.cutLeft(idx + 1); - szReq.trimmed(); + szReq.trim(); if(szReq.hasData()) { |
