Lokalisierung - Möglichkeiten...
-
Hey!
Mein Programm soll es in verschiedenen Sprachen geben und am besten sollen einfach neue Sprachen hinzugefügt werden können.
Nun, so kompliziert ist es nicht, ich könnte zB. im Programmcode sowas machen:[Pseudocode]
button1Text = localisation["First Button"];Ich möchte halt nicht Nummern zum ansprechen der Texte verwenden.
Standard ist Englisch und die Klasse gibt dann den entsprechenden String zurück jenachdem welche Sprache vorher eingestellt wurde:[Pseudocode]
localisation.SetLanguage("German");Die Basisdatei wäre dann halt Englisch wo die ganzen Texte drin stehen:
[Datei]
First Button
Second Button
Third ButtonIn der Datei für Deutsch steht dann eben zeilenorientiert dasselbe in Deutsch.
Ist ja schon ziemlich gut finde ich, für mich jedenfalls. Aber wie würdet ihr es machen? Geht es einfacher? Geht ja nur drum anstatt einen Text zu schreiben auf eine Resource zu verweisen.
Vielleicht eine std::map anlegen mit Zeilennummer und Text dazu zum einfachen Suchen bei einem Aufruf wie "localisation["First Button"];". Hab aber nicht näher drüber nachgedacht denn vielleicht kennt ihr ja was viel Einfacheres
Danke und MFG
-
Musst die Lokalisierung selbst implementiert werden? Ansonsten würd mir mal gettext angucken.
(Erfüllt so ziemlich allen Anforderungen, die Du hier genannt hast.)
-
Danke werd ich mir mal ansehen.
Allerdings hasse ich jegliches unnützes Zeug, und sei es eine einzige Funktion.
Sorry, mein PerfektionismusAber dürfte doch nicht so schwer sein... Muss ja wirklich nur das können was ich beschrieben habe. Statt einen String zu schreiben halt auf eine Resource verweisen.
MfG
-
Hey schrieb:
Danke werd ich mir mal ansehen.
Allerdings hasse ich jegliches unnützes Zeug, und sei es eine einzige Funktion.
Sorry, mein PerfektionismusAber dürfte doch nicht so schwer sein... Muss ja wirklich nur das können was ich beschrieben habe. Statt einen String zu schreiben halt auf eine Resource verweisen.
MfG
Was du willst ist eine Ressourcen-DLL welche nur Strings enthält und per Nummer identifiziert wird. Wenn du das ganze mit Visual Studio entwickelst ist das sehr einfach über den Ressourcen-Editor zu realisieren.
Ansonsten scheinst du nicht lokalisieren zu wollen, sondern nur zu übersetzen. Denn zur Lokalisierung gehören auch so Dinge wie Formatierung von Uhrzeit, Datum, Zahlen, Geldbeträge, ... und dann natürlich noch die Textrichtung. Außerdem musst du auch die Textgröße beachten. I.A. wird deine deutsche Version mehr Platz für Text verbrauchen als es in der englischen Version nötig ist.
Nur um mal ein paar Beispiele zu nennen.Übrigens bietet auch C++ schon eine Lokalisierungsunterstützung, sogar das was du willst nämlich einen String in der gewünschten Sprache aufzufinden. Allerdings ist das Framework nur ein Gerüst das ganze 'Meat' muss man selber implementieren. Aber das nur nebenbei...
-
Hey schrieb:
Ich möchte halt nicht Nummern zum ansprechen der Texte verwenden.
Standard ist Englisch und die Klasse gibt dann den entsprechenden String zurück jenachdem welche Sprache vorher eingestellt wurde:Tippgeber schrieb:
Was du willst ist eine Ressourcen-DLL welche nur Strings enthält und per Nummer identifiziert wird. Wenn du das ganze mit Visual Studio entwickelst ist das sehr einfach über den Ressourcen-Editor zu realisieren.
Wer lesen kann, ist klar im Vorteil. Außerdem hat er keinerlei Plattform erwähnt und eine DLL (Resourcen-DLL an sich) für Lokalisierung zu verwenden ist schlichtweg overkill...
-
devkid schrieb:
Hey schrieb:
Ich möchte halt nicht Nummern zum ansprechen der Texte verwenden.
Standard ist Englisch und die Klasse gibt dann den entsprechenden String zurück jenachdem welche Sprache vorher eingestellt wurde:Tippgeber schrieb:
Was du willst ist eine Ressourcen-DLL welche nur Strings enthält und per Nummer identifiziert wird. Wenn du das ganze mit Visual Studio entwickelst ist das sehr einfach über den Ressourcen-Editor zu realisieren.
Wer lesen kann, ist klar im Vorteil. Außerdem hat er keinerlei Plattform erwähnt und eine DLL (Resourcen-DLL an sich) für Lokalisierung zu verwenden ist schlichtweg overkill...
Da dir offensichtlich die Ressourcen-DLLs ein Begriff sind weißt du auch sicher, dass die Nummer normal nicht von einem Programmierer verwaltet wird und er diese auch nie anfassen muss...
-
@Tippgeber
"Resource" meinte ich allgemein, sorry. Soll einfach in eine Textdatei würd ich meinen, ist wohl das einfachste. Die Textdatei könnte ich dann ja in die .exe einbinden.
Ja stimmt, eher übersetzen wobei deine genannten Beispiele für mein Programm bis auf die Textgröße irrelevant sind.Trotzdem interessiert mich: Wie wäre denn eine richtige Lokalisierung zu implementieren?
C++ bietet Unterstützung? Welche denn?
Jedenfalls wäre eine ständige Stringsuche mit dem Index-Operator auch irgendwie overkill, da müsste ich noch verbessern, hmm...
Ach, aber da ich sowieso keine Windows Controls verwende sondern das GUI selbst zeichne, werde ich auch einen Editor erstellen. Dort könnte ich dann gleich die Texte definieren und den Controls zuweisen. Jeder Text und jedes Control mit einer ID und bei Sprachenwechsel wird jedes Control durchiteriert und der Text entsprechend geändert.
Ich denke, so mache ich es...
MfG
-
Tippgeber schrieb:
Übrigens bietet auch C++ schon eine Lokalisierungsunterstützung, sogar das was du willst nämlich einen String in der gewünschten Sprache aufzufinden. Allerdings ist das Framework nur ein Gerüst das ganze 'Meat' muss man selber implementieren. Aber das nur nebenbei...
Ach ja?
Na dann zeig mal her!
-
hustbaer schrieb:
Tippgeber schrieb:
Übrigens bietet auch C++ schon eine Lokalisierungsunterstützung, sogar das was du willst nämlich einen String in der gewünschten Sprache aufzufinden. Allerdings ist das Framework nur ein Gerüst das ganze 'Meat' muss man selber implementieren. Aber das nur nebenbei...
Ach ja?
Na dann zeig mal her!Geh in eine Bibliothek und blätter mal ein wenig in Standard C++ IOStreams and Locales | ISBN: 0201183951, da steht alles über die IOStreams und Locales drin.
-
devkid schrieb:
ine DLL für Lokalisierung zu verwenden ist schlichtweg overkill...
rofl halts m0wl wenn du keine ahnung hast. das is standard technik und was is daran "overkill" rofl.
-
Du bist lustig.
Wie kann ich denn mit iostreams und locales einen String in der gewünschten Sprache auffinden?
-
hustbaer schrieb:
Du bist lustig.
Wie kann ich denn mit iostreams und locales einen String in der gewünschten Sprache auffinden?Ich weiß nicht worauf du herumhacken willst, daher spiel ich mal mit:
es gibt ein "standard facet" namens "messages"