Texte von Außerhalb übersetzen

Alles rund um die Programmierung mit Qt
Antworten
dazedly
Beiträge: 197
Registriert: 3. Oktober 2010 15:38
Kontaktdaten:

Texte von Außerhalb übersetzen

Beitrag von dazedly »

Hallo.

ich habe in meiner Library einen Message Parser, der jeder Message ein enum-Wert zuteilt. Die Lib und der Client werden übersetzt. Der Server wirft im Prinzip nur einen Message Code und gegebenfalls Parameter, welche auf dem Client eingesetzt werden. Jetzt bin ich leider an den Punkt gekommen, bei dem die Parameter auch übersetzt werden müssen.
Ich habe versucht die einzelnen Worte in einem Phrasebook zu übersetzten und das ganze mittels tr() zu übersetzen. Doch leider funktioniert das nicht wie erhofft.

Code: Alles auswählen

QString MessageParser::setArgs(QString s, QStringList sl)
{
	QString result(s);
	foreach(QString str, sl)
	{
		std::string newstr = std::string(str.toAscii().data());
		const char * data = newstr.c_str();
		result = result.arg(parseString(tr(data))); // << hier soll übersetzt werden
	}
	return result;
}
Ich will keine Map anlegen müssen für diese Übersetzung. Hat eventuell noch einer Anregungen?
veeman
Beiträge: 280
Registriert: 3. Oktober 2012 01:43
Kontaktdaten:

Re: Texte von Außerhalb übersetzen

Beitrag von veeman »

Vermutung: Mir kommt es so vor als ob du nicht verstanden hast wie tr Funktioniert.
Diese Funktion gibt den übersetzen String der aktuellen Sprache zurück insofern der zu übersetzende String in der aktuell (nicht) geladenen Übersetzungsdatei auch gefunden wird.

Wenn ich mit meiner Vermutung falsch liege: Werden denn statische Elemente übersetzt?

Mfg veeman
dazedly
Beiträge: 197
Registriert: 3. Oktober 2010 15:38
Kontaktdaten:

Re: Texte von Außerhalb übersetzen

Beitrag von dazedly »

Naja ganz so doof bin bin ich nicht ;) Der erste Teil der Message wird übersetzt, nur eben mein Dynamischer Parameter nicht. Das ganze restliche Programm wird auch übersetzt. Was hat dich denn bitte darauf schließen lassen, dass ich nicht weiß wie ich den Translator von Qt benutze?

Edit: Ich denke das Wörterbuch vom Linguist ist nicht zum Einbinden gedacht. Ich sehe so auch kaum eine Möglichkeit einzelne Begriffe ohne Codeangabe zu übersetzen...
Edit2: Ich hatte eben festgestellt, dass mit meiner Dynamischen Methode übersetzt wird, wenn der Begriff irgendwo im ts file steht. Da ich in der Serverapplikation kein tr benutzen kann, da ich definitiv kein QObject benutzen kann, bekomme ich die Begriffe nicht mit lupdate ins Übersetzungsfile. Gibt es da irgendwie eine Möglichkeit?
dazedly
Beiträge: 197
Registriert: 3. Oktober 2010 15:38
Kontaktdaten:

Re: Texte von Außerhalb übersetzen

Beitrag von dazedly »

Wie ich es nicht machen will:

Code: Alles auswählen

QString MessageParser::translate(QString string)
{
	QString ret = string;
	if(string == "Appointment")
	{
		ret = tr("Appointment");
	} else if(string == "Task")
	{
		ret = tr("Task");
	} else if(string == "Activity")
	{
		ret = tr("Activity");
	}
	else if(string == "Pricelist")
	{
		ret = tr("Pricelist");
	}else if(string == "Skill")
	{
		ret = tr("Skill");
	}else if(string == "Ressource")
	{
		ret = tr("Ressource");
	}else if(string == "Raster")
	{
		ret = tr("Raster");
	}else if(string == "Notice")
	{
		ret = tr("Notice");
	}else if(string == "Prescription")
	{
		ret = tr("Prescription");
	}else if(string == "Project template")
	{
		ret = tr("Project template");
	}else if(string == "Project")
	{
		ret = tr("Project");
	}else if(string == "Price")
	{
		ret = tr("Price");
	}else if(string == "Message")
	{
		ret = tr("Message");
	}else if(string == "Action")
	{
		ret = tr("Action");
	}
	
	return ret;
}
Ich hoffe das verdeutlicht mein Problem. Genauso könnte man das mit einem ENUM Umsetzen.
veeman
Beiträge: 280
Registriert: 3. Oktober 2012 01:43
Kontaktdaten:

Re: Texte von Außerhalb übersetzen

Beitrag von veeman »

dazedly hat geschrieben: Edit2: Ich hatte eben festgestellt, dass mit meiner Dynamischen Methode übersetzt wird, wenn der Begriff irgendwo im ts file steht. Da ich in der Serverapplikation kein tr benutzen kann, da ich definitiv kein QObject benutzen kann, bekomme ich die Begriffe nicht mit lupdate ins Übersetzungsfile. Gibt es da irgendwie eine Möglichkeit?
Du übersetzt doch die Texte auf dem Clienten, also müssen die Texte auch in der ts bzw qm Datei des Clienten enthalten sein.
Die ts-Datei kannst du ggf. mit einem (XML-) Editor öffnen und die fehlenden Elemente/Items von Hand hinzufügen.

Mfg veeman
Antworten