dynamische Sprachen und shared/static libs

Alles rund um die Programmierung mit Qt
Antworten
QtBerserker
Beiträge: 71
Registriert: 15. Mai 2006 09:07

dynamische Sprachen und shared/static libs

Beitrag von QtBerserker »

Hallo,

folgendes Problem: Ich schreibe eine (z.Zt. statische ) Library, welche lokalisiert wird. Klappt alles ganz gut, die _ts und _qm files sind alle da, irgendwo in der Lib habe ich eine Funktion, die mir den QTranslator "ausfüllt" entsprechend der QLocal Settings:

Code: Alles auswählen

int ReportError(const ErrorMsg &errMsg,
                const QString &captions,
                const QString &title,
                uint32_t delay)
{
    scoped_ptr<ErrorReport> reporter(new ErrorReport);
    return reporter->ReportError(errMsg, captions, title, delay);
}


ErrorReport::ErrorReport()
{
    if (!m_resInitialized)
        this->initResources();

    QString i18nDir = "../i18n";

    QString localeFile = QString("ReportErrorLib_") + QLocale::system().name();
    qDebug() << "**** load " << localeFile;

    QTranslator translator;

    if (!translator.load(localeFile, i18nDir)) {
        qDebug() << "ERROR loading translation files in library ReportError!";
    }

    QCoreApplication::installTranslator(&translator);
}
d.h. die Klasse wird dynamisch erzeugt/gekillt. Das Problem, wenn ich in der Hauptapp. die language ändere, bekomme ich dieses so nicht in der Lib mit (da ja dynamisch). Über die Systemlocale zu gehen (wie hier) ist kein kleverer Weg. Wie kann ich der Lib die dynamische Sprache einstellen? Leider biete QT keinen Weg an, um an die Translators wieder ranzukommen um so nach den *.qm files zu parsen und anhand der Sprachkennung (de,en, etc) die aktuell eingestellte Sprache hersuzufinden. Wie geht es am besten?

Vielen Dank
Olaf
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag von macman »

Den Pointer auf den Translator musst Du dir merken, an den kommt man hinterher nicht mehr. Und wenn in der Hauptapp die Sprache geändert wird, dann rufst Du halt eine Funktion in der Lib auf, mit der neuen Sprache als Parameter. Wie die Sprache dynamisch geändert wird, wurde hier bereits öfter besprochen, da gehe ich jetzt nicht genauer drauf ein.
Antworten