Seite 1 von 1

Bug? QLocale / QLocale::system().name() = IMMER C?

Verfasst: 26. April 2006 15:02
von patrik08
ich lade die linguistic file im resource file...
TRANSLATIONS = locale/app_en.ts locale/app_de.ts locale/app_it.ts locale/app_en.ts locale/app_fr.ts locale/app_pt.ts

qmake compiliert sie...

im resourse datei sind alle drinnen.... text & compiliert..

<qresource prefix="/locale" >
<file>locale/app_de.qm</file>
<file>locale/app_de.ts</file>
<file>locale/app_en.qm</file>
<file>locale/app_en.ts</file>
<file>locale/app_fr.qm</file>
<file>locale/app_fr.ts</file>
<file>locale/app_it.qm</file>
<file>locale/app_it.ts</file>
<file>locale/app_pt.qm</file>
<file>locale/app_pt.ts</file>
</qresource>

in der main() lade ich die funktion vor sie vor QApplication...
doch QLocale::system().name() gibt immer = C .... ist das normal?

Code: Alles auswählen

    QString transdir=QString::fromUtf8(":/locale/locale/app_");   /* dir prefix on resource  */
    QString find = QLocale::system().name().left(QLocale::system().name().indexOf("_"))+".qm";  /* en.qm */
    
    QApplication a( argc, argv );
    Config cf;  /* class Config */
    
    QString filecompletefullpath = transdir + find;
    QFileInfo fi( filecompletefullpath );

    if ( !fi.exists() ) {
	QMessageBox::warning( 0, "File error",
			      QString(" Cannot find "+filecompletefullpath+" translation file for locale language: "+QLocale::system().name().left(QLocale::system().name().indexOf("_"))+
				      "\n Contact the programm owner ... and you can traslate the language=" + QLocale::system().name() + "." ));  //////
	return 0;
    }
    
        QTranslator translator;
        translator.load(filecompletefullpath);
        a.installTranslator(&translator);


Re: Bug? QLocale / QLocale::system().name() = IMMER C?

Verfasst: 26. April 2006 15:23
von macman
patrik08 hat geschrieben:im resourse datei sind alle drinnen.... text & compiliert..
Was sollen denn die *.ts-Dateien in der Resource?
patrik08 hat geschrieben:doch QLocale::system().name() gibt immer = C .... ist das normal?
Keine Ahnung was Du da zurück bekommst, ich erhalte immer 'de_DE'. Und da die Ausgabe genormt ist, würde auch ein left(2) reichen, um an den ersten Teil zu kommen.

Abgesehen davon halte ich nichts davon Sprachdateien ins Programm zu packen. Sobald Du eine neue Übersetzung hast, musst Du es neu compilieren. Wenn Du dann noch mehrere Versionsstände hast, viel Spaß :-)

Verfasst: 26. April 2006 15:44
von patrik08
ja die ts ist ja nicht noetig....
aber auf mac bleibt den alles im ordner xxxx.app so muss man kein mac installer bauen um noch ein locale ordner zu beiliefern neben den xxx.app

sonder eben das schone an mac ein drag im application ordner und alles ist dabei...

bei mac kommt mindestens immer die richtige sprache... nur die window kiste gibt einfach ein simple C.

Verfasst: 26. April 2006 17:49
von patrik08
So das ist sicher der optimale weg ....
wen update da sind .... einfach das file nach DEFAULT_LANG_FILE kopieren.....

und das shoene darann man kann wahrend der laufzeit sprache wechseln.. einfach das file zu DEFAULT_LANG_FILE kopieren... ohne neustart....

oder das programm als installer fuer neue sprach file benutzen

Code: Alles auswählen

#define WORK_CACHEDIR \
              QString( "%1/.%2/" ).arg( QDir::homePath() , _PROGRAM_SHORT_NAME )
#define DEFAULT_LANG_FILE \
             QString( "%1_DEFAULT.qm" ).arg( WORK_CACHEDIR )

    QApplication a( argc, argv );
    QDir dir(WORK_CACHEDIR);
    if ( dir.mkpath(WORK_CACHEDIR) ) { } else {
    QMessageBox::warning( 0, "File error!", "Not possibel to create a work dir on: "+WORK_CACHEDIR);
	return 0;
    }        
    if (!is_file(DEFAULT_LANG_FILE)) {
    QString find;
    QStringList langs;
    langs << "en-English" << "de-Deutsch" << "fr-Français" << "it-Italiano" << "pt-Portuguese";     
    bool ok;
    QString item = QInputDialog::getItem(0,"First small Setup.","Select Your Language:", langs, 0, false, &ok);
           if (ok && !item.isEmpty()) {
           find = item.left(2); 
           QString firstlangfile = QString::fromUtf8(":/locale/locale/app_")+find+".qm";
           Config cf;
           QFile fl(firstlangfile); 
               if (!fl.copy(DEFAULT_LANG_FILE)) {
                 QMessageBox::warning( 0, "File error!", "Not possibel to copy file to: "+DEFAULT_LANG_FILE);
	             return 0;  
               }
           } 
    }
    
    QTranslator translator;
    translator.load( DEFAULT_LANG_FILE );
    a.installTranslator(&translator);

Verfasst: 3. Mai 2006 00:00
von patrik08
Nur Window xp !

Also im qt 4.1.1 & qt 4.1.2 ist diese bug weiter vorhanden!!

qt-win-opensource-src-4.1.1.zip
qt-win-opensource-src-4.1.2.zip

bei trolltech...

http://www.trolltech.com/developer/task ... y&id=86434

QLocale::system returns C Locale, when it cannot recognize the language Windows return.


ich bemerkte das qlocale auf mac richtig reagiert...... Mein Lieber Aepfel ist immer super auf draht... :D