Problem mit Internationalisierung

Alles rund um die Programmierung mit Qt
Antworten
grisu1972
Beiträge: 66
Registriert: 9. November 2007 16:08

Problem mit Internationalisierung

Beitrag 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?
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Beitrag von solarix »

QString str_A = tr("HELLO") ?
grisu1972
Beiträge: 66
Registriert: 9. November 2007 16:08

Beitrag von grisu1972 »

ja in etwa enspricht das meinem Problem?
sieht komisch aus!
grisu1972
Beiträge: 66
Registriert: 9. November 2007 16:08

Beitrag 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!
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Abgesehen davon dass imho dein Ansatz nicht schön ist - was spricht gegen die Lösung von Solarix?
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Beitrag 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...
grisu1972
Beiträge: 66
Registriert: 9. November 2007 16:08

Beitrag 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
grisu1972
Beiträge: 66
Registriert: 9. November 2007 16:08

Beitrag 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
grisu1972
Beiträge: 66
Registriert: 9. November 2007 16:08

Beitrag 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?
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag 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)
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
grisu1972
Beiträge: 66
Registriert: 9. November 2007 16:08

Beitrag 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!
grisu1972
Beiträge: 66
Registriert: 9. November 2007 16:08

Beitrag 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
Antworten