PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [QT4/c++] Locale unterschiede von linux zu windows und mac



undefined
08-08-2006, 07:02
Ich lade beim start meine Translation Datei.
Unter Linux kann ich ja mit getenv() die Lokalisierung des Systems ermitteln.
Leider habe ich kein Windows und kann jetzt nicht nachsehen wie es dort Funktioniert.

Meine Frage kann ich das so machen das es auch unter Windows und Mac geht?
Oder muss ich eine andere Lösung verwenden.



#include <stdlib.h>

#include <QtCore>
#include <QApplication>
#include <QMessageBox>
#include <QSplashScreen>

#include "QSpokecalculator.h"

int main(int argc, char *argv[])
{
Q_INIT_RESOURCE(qspokecalc);
QT_REQUIRE_VERSION( argc, argv, "4.1.4" )

QApplication app(argc, argv);

// Get Application Main Directory
QString SplashPath( QCoreApplication::applicationDirPath() );
SplashPath.append( QDir::separator() );

// Setting Locale Path
QString lcp( SplashPath );
lcp.append( "locale" );

// Complite Splash path
SplashPath.append( "QSpokecalc.png" );

// FIXME Windows/Mac ?
QString setLang( getenv( "LANG" ) );
setLang = setLang.toLower();
setLang = setLang.replace( QRegExp( "(_.+)*$" ), "" );
setLang.prepend("qspokecalc_");
setLang = setLang.toLocal8Bit();

// init locale
QTranslator translator(0);
translator.load( setLang, lcp, "_" );
app.installTranslator(&translator);

// display notification for help users to rename the qspokecalc_*.qm
std::cout << "Search for Locale: " << setLang.toStdString() << ".qm" << std::endl;

QPixmap pixmap( SplashPath );
QSplashScreen *splash = new QSplashScreen(pixmap);
splash->show();

splash->showMessage( QObject::trUtf8( "Loading Databases ..." ), Qt::AlignCenter | Qt::AlignVCenter, Qt::white );
qApp->processEvents();

QSpokecalculator mainWin;

splash->showMessage( QObject::trUtf8( "Start QSpokecalc ..." ), Qt::AlignCenter | Qt::AlignVCenter, Qt::white );
qApp->processEvents();

mainWin.show();

splash->finish( &mainWin );
delete splash;
return app.exec();
}

anda_skoa
09-08-2006, 23:51
Hast du Zugang zu den anderen Plattformen?

Wenn ja könntest du folgendes dort probieren:



#include <iostream>
#include <locale>

int main()
{
std::locale current = std::locale("");
std::cout << "current locale: '" << current.name() << "'" << std::endl;

return 0;
}


Edit: hmm unter Windows scheint das wiedermal anders zu sein, da kommt statt einem der üblichen Locale String etwas wie "Germany_Germany.1252" :(

Ciao,
_

undefined
10-08-2006, 11:09
Ich habe jetzt auf meinem Rechner winxp home installiert und genau das gleiche Problem. Auf meinem Schleppi habe ich es auch aufgespielt aber mit Mingw Full und QT 4.1.4 - hier funktioniert es ( getenv("LANG") ). Bleibt mir wohl nichts anderes übrig als die Sprach Einstellungen in die Settings auf zu nehmen :( Das dürfte die Sicherste Methode sein.