Seite 1 von 1
Problem mit Internationalisierung
Verfasst: 10. Januar 2008 14:26
von grisu1972
Wie kann ich einen QString internationalisieren:
Ich habe einen QString str_A. Diesen möchte ich internationalisiert ausgeben.
Vorgehensweise:
in der Sprachdatei steht
Schlüssel: HELLO
für deutsch: Hallo
für englisch: hello
QString str_A = "HELLO"
Dann stelle ich die Sprache um, das funktioniert für die GUI Elemente auch soweit.
Was ich aber wissen möchte ist wie kann ich den QString übersetzen lassen?
Ich stelle mir etwas in der Art vor wie:
cout (tr(str_A));
ausgegben soll werden nach einer Umstellung auf englisch:
hello
Also nicht die GUI internationalisiern sondern einen String z.B für eine Log message!
Kann mir jemand helfen?
Verfasst: 10. Januar 2008 14:41
von solarix
QString str_A = tr("HELLO") ?
Verfasst: 10. Januar 2008 14:45
von grisu1972
ja in etwa enspricht das meinem Problem?
sieht komisch aus!
Verfasst: 10. Januar 2008 14:48
von grisu1972
Mein Problem ist:
ich habe eine Tabelle:
1. diese Tabelle hat internationalisiert Header
2. diese Tabelle kann verändert werden , Spalten verschoben, oder entfernt
3. ich habe mir eine Methode geschrieben, die mir zu einem übergebenen Header die Spaltennummer zurückgibt:
Das hat bis zu dem Punkt funktioniert an dem ich das ganze internationalisiern wollte!
Jetzt stimmen die Header nicht mehr mit dem nicht internationalisiertem #define überein!
Verfasst: 10. Januar 2008 15:19
von Christian81
Abgesehen davon dass imho dein Ansatz nicht schön ist - was spricht gegen die Lösung von Solarix?
Verfasst: 10. Januar 2008 15:21
von solarix
jetzt stimmen die Header nicht mehr mit dem nicht internationalisiertem #define überein!
warum denn nicht anstelle des defines ein
Code: Alles auswählen
const QString COLUMN_NAME = QObject::tr("spaltenname");
oder bei der uebergabe in deiner Methode:
Code: Alles auswählen
#define COLUMN_NAME "spaltenname"
...
int index = getIndexByName(tr(COLUMN_NAME));
Oder interne Benennung von der View abkoppeln, so dass die Spalten im Model immer die gleichen Bezeichnungen haben und auf der Anzeige stehen kann was will...
Verfasst: 10. Januar 2008 15:27
von grisu1972
Hallo ich habe die Nachrich von solarix als Frage interpretiert.
Wenn das so klappt werde ich es so verwenden! Werde es jezt ausprobieren!
Gruss Carsten
Verfasst: 10. Januar 2008 15:46
von grisu1972
ich habe es (meiner Meinung nach) genau so gemacht, es funktioniert bei mir aber nicht:
In der Headerdatei
#define CFG_TABLE_HEADER_ISSUE_STATE "col_SAPState"
Schnittstelle der Funktion
int CdiStandardStatusFrame::getColumnByHeader (QString header)
Aufruf der Funktion
int column4State = getColumnByHeader(tr(CFG_TABLE_HEADER_ISSUE_STATE));
In der Funktion lasse ich mir den Header ausgeben, dieser ist nicht internationalisiert, also schein
getColumnByHeader(tr(CFG_TABLE_HEADER_ISSUE_STATE));
nicht zu funktionieren
Verfasst: 10. Januar 2008 15:47
von grisu1972
grisu1972 hat geschrieben:ich habe es (meiner Meinung nach) genau so gemacht, es funktioniert bei mir aber nicht:
In der Headerdatei
#define CFG_TABLE_HEADER_ISSUE_STATE "col_SAPState"
Schnittstelle der Funktion
int CdiStandardStatusFrame::getColumnByHeader (QString header)
Aufruf der Funktion
int column4State = getColumnByHeader(tr(CFG_TABLE_HEADER_ISSUE_STATE));
In der Funktion lasse ich mir den Header ausgeben, dieser ist nicht internationalisiert, also schein
getColumnByHeader(tr(CFG_TABLE_HEADER_ISSUE_STATE));
nicht zu funktionieren
hat jemand eine Idee?
Verfasst: 10. Januar 2008 15:55
von Christian81
Ich würde mal sagen - es ist nicht internationalisiert weil es nicht übersetzt wurde / es von lupdate nicht gefunden wird. lupdate kann ja nicht wissen was Du übersetzen willst - es findet nur strings innerhalb von tr() (und noch ein paar andere denke ich, siehe Doku)
Verfasst: 10. Januar 2008 16:04
von grisu1972
Die Header der Tabelle werden ja internationalisiert angezeigt, und ich habe die Methode getColumnByHeader(QString) in der gleichen Klasse, es ist also ein internationalisierter Eintrag vorhanden!
Verfasst: 10. Januar 2008 16:28
von grisu1972
Hallo Leute,
ganz offiziell:
ich bin eine Knackwurst, Ihr hattet natürlich recht
ich habe ZWEI Dateien:
- einmal die UI Datei mit der GUI und der Tabelle
- meine Klasse
-> daher auch der Fehler das es in der einen internationalisiert wurde und in der andren nicht.
Jetzt habe ich das Problem das ich an zwei Stellen in den Sprachdateien den Key nachpflegen muss, geht das auch einfacher?
Grüsse Carsten