Seite 1 von 1

Texte von Außerhalb übersetzen

Verfasst: 23. Januar 2013 17:33
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?

Re: Texte von Außerhalb übersetzen

Verfasst: 23. Januar 2013 23:46
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

Re: Texte von Außerhalb übersetzen

Verfasst: 24. Januar 2013 08:54
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?

Re: Texte von Außerhalb übersetzen

Verfasst: 24. Januar 2013 10:18
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.

Re: Texte von Außerhalb übersetzen

Verfasst: 25. Januar 2013 16:48
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