aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Szymon Tomasz Stefanek2011-03-23 02:28:09 +0000
committerGravatar Szymon Tomasz Stefanek2011-03-23 02:28:09 +0000
commit9fff8c9bbbf78c53ecc1240125d44b20236f7f85 (patch)
treead4a1c215cb1834b4d995e6aa28df43ece4c025b
parentupdated popup version: please KEEP this file updated (diff)
downloadKVIrc-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.cpp2
-rw-r--r--src/kvilib/core/KviCString.h2
-rw-r--r--src/kvilib/ext/KviCommandFormatter.cpp6
-rw-r--r--src/kvilib/net/KviHttpRequest.cpp6
-rw-r--r--src/kvilib/system/KviLocale.cpp86
-rw-r--r--src/kvilib/system/KviLocale.h8
-rw-r--r--src/kvirc/kernel/KviIrcSocket.cpp2
-rw-r--r--src/kvirc/sparser/KviIrcServerParser_ctcp.cpp9
-rw-r--r--src/modules/ident/libkviident.cpp2
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())
{