2016-07-25 11 views
0

So was, wenn ich die folgende Eigenschaft haben:Ist es sicher, zu überprüfen, ob eine Zeichenfolge in einer mehrsprachigen App zu einem qstr Zeichenfolge entspricht - qml

property string someString: qsTr("Text")

und ich habe die folgende Funktion:

function isEqual(toThisString) { 
    if (someString === toThisString) { 
    return true 
    } else 
    return false 
    } 
} 

Meine Frage ist, was ist, wenn meine Anwendung eine Übersetzung in eine andere Sprache als Englisch hat. Wird die Funktion immer noch mit "Text" verglichen oder wird sie mit der übersetzten Zeichenfolge verglichen?

+1

Zu der übersetzten Zeichenfolge. Und die Überprüfung von sichtbaren Strings klingt wie ein Katastrophenrezept. – peppe

Antwort

3

Ein Beispiel mit Qt:

const QString english = "Hello world"); 
const QString spanish = QObject::tr(english); // Hola mundo 

gleich?

qDebug() << "Is equal? " << (english == spanish); 
qDebug() << "Is equal? " << (QObject::tr(english) == spanish); 

Ergebnis:

Is equal? false 
Is equal? true 

Sie haben jede Zeichenfolge zu übersetzen, und sollte die gleiche Zeichenfolge genau sein. Es ist schwierig zu verwalten, sieht aus wie ein Rezept für eine Katastrophe.

Sie müssen ein alternatives Datenfeld verwenden, um Werte zu vergleichen, Strings zu vermeiden. Beispiel für eine QComboBox:

enum Countries {EEUU = 0, Spain, France}; 
QCombobox* combo = new QCombobox; 
combo->addItem(QObject::tr("EEUU"), EEUU); 
combo->addItem(QObject::tr("Spain"), Spain); 
combo->addItem(QObject::tr("France"), France); 

das ausgewählte Land zu erhalten oder mit einem Feld in dem Combo-Modell zu vergleichen, können Sie Current() Funktion oder ähnliches verwenden.

Verwandte Themen