Sprache im laufenden Programm änderbar?

Alles rund um die Programmierung mit Qt
Antworten
bassjupp2oo8
Beiträge: 47
Registriert: 17. Juli 2008 09:45

Sprache im laufenden Programm änderbar?

Beitrag von bassjupp2oo8 »

Hallo!
Ich habe mal eine Frage:
Kann man es mit dem Linguist / Translator hinbekommen, dass man in einem laufenden Programm auf einen Button klickt und dann die GUI komplett in einer anderen Sprache dargestellt wird?

Aus den Dokumentationen lese ich bis jetzt nur raus, dass man erst die Translate-Dateien erstellt und dann quasi zwei verschiedene Programme erstellt, eben eins in Sprache1 und das andere in Sprache2.

Eigentlich möchte ich aber die Sprache zur Laufzeit hin und her wechseln können!
archer
Beiträge: 306
Registriert: 2. Februar 2006 09:56

Beitrag von archer »

Natürlich geht das.
Die verschiedenen Scprachen mit dem Linguit und Co erstellen
Zur Laufzeit die jeweilige Sprachdatei laden (QTranslator).
Der Oberfläche sagen ui.retranslate(this).
Wenn du z.B. eigene Listen hast mußt du diese selber neu laden.
bassjupp2oo8
Beiträge: 47
Registriert: 17. Juli 2008 09:45

Beitrag von bassjupp2oo8 »

Danke für die schnelle Antwort. Das beruhigt mich ja schon mal.
Habe auch ein Beispielprogramm mit Übersetzung komplett hinbekommen.
Aber ich nutze nicht den Qt Designer (falls du das mit dem ui. meinst).
Es gibt also ein HauptWidget, das auch alle anderen (Unter-)Seiten (eigene Klassen) erstellt und aufruft.
Wem kann ich den Aufruf retranslate(this) geben? Dem HauptWidget?
Wird das Widget/die ganze Anwendung dann auch neu gezeichnet (damit dann auf den Buttons die neue Bezeichnung steht?)
archer
Beiträge: 306
Registriert: 2. Februar 2006 09:56

Beitrag von archer »

Das ui. bezog sich auf eine im Designer erstellte Oberfläche.

Ich denke du müsstest dir selber eine Methode schreiben die die Texte der Buttons und Co neu setzt.
z.B.:

Code: Alles auswählen

void CMy::changeLanguage()
{
    btn->setText(tr("Button"));
    ...
}
Es wird dann der jeweilige Text aus dem Transator in das Widget gesetzt.
Was anderes weiß ich leider nicht.
bassjupp2oo8
Beiträge: 47
Registriert: 17. Juli 2008 09:45

Beitrag von bassjupp2oo8 »

hm. das wäre bei einem großen Projekt natürlich seeehr umfangreich!
Aber mal sehen...
Ich probiere das grad im kleinen Beispielprogramm aus.

Dazu noch eine "Anfängerfrage". Ich erstelle ja in main.cpp den Translator mit QTranslator translator;
dann translator.load(...) usw.

aber wenn der Translator nun etwas neues laden soll (zB nach einem ButtonClick), dann passiert das ja in einer meiner Klassen. Von dort aus habe ich aber keinen Zugriff auf den translator. Wie kann man das lösen?

Könnte man in main.cpp einen Slot bauen, der das dann ausführt? Oder darf man so was in einer main datei nicht?
bassjupp2oo8
Beiträge: 47
Registriert: 17. Juli 2008 09:45

Beitrag von bassjupp2oo8 »

bassjupp2oo8
Beiträge: 47
Registriert: 17. Juli 2008 09:45

Beitrag von bassjupp2oo8 »

Und Beschreibung unter "Internationalization with Qt" in der Hilfe lesen!

(manchmal weiß man halt nur nicht, wonach man erst suchen soll!)
Antworten