C++, Multilanguage/Lokalisierung Unterstützung
was ist der beste Weg, um Mehrsprachige Unterstützung, um ein C++ - Programm?
Wenn möglich, die Sprache, die man Lesen sollte, aus einer einfachen text-Datei mit etwas wie Schlüssel-Wert-Paare (§WelcomeMessage§ "Hallo %s!").
Dachte ich an etwas wie das hinzufügen eines localizedString(key) - Funktion gibt den string zurück, der die geladene Sprachdatei. Gibt es bessere oder effizientere Möglichkeiten?
//half-pseudo code
//somewhere load the language key value pairs into langfile[]
string localizedString(key)
{
//do something else here with the string like parsing placeholders
return langfile[key];
}
cout << localizedString(§WelcomeMessage§);
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einfachste Weise, ohne externe Bibliotheken:
//strings.h
//strings.c
Diese geben wird, was Sie wollen. Natürlich könnten Sie Lesen Sie die Zeichenfolgen aus einer Datei. I. e.
//en_au.lang
Aber Sie müssten eine Liste der string als Namen zum Abgleich der string Titel. also
//parse_strings.c
Oben sollte etwas einfacher in C++ als könnten Sie die enum-Klassen, die toString () - Methode (oder was immer es da - kann nicht sein belästigt, um danach zu suchen).
Alles, was Sie dann tun müssen ist, analysieren Sie die Sprache Dateien.
Ich hoffe, das hilft.
PS: und zu in die Saiten greifen:
PPS: Entschuldigung für die Hälfte c halb C++ zu beantworten.
unsigned char
und dann utf-8 verwenden.Den ICU-Bibliothek ist konzipiert für dieses.
Space_C0wb0w s Vorschlag ist gut. Derzeit nutzen wir erfolgreich die ICU verwenden, für das in unsere Produkte.
Echo Ihren Kommentar zu seiner Antwort: Es ist in der Tat schwer zu sagen, dass die ICU ist "klein, sauber, unkompliziert". Es ist "zufällig" Komplexität in der Intensivmedizin kommen von der "Java-ish" - Schnittstelle, aber einen großen Teil der Komplexität und der Größe kommt einfach von der Komplexität und Größe der problem-domain-Adressierung.
Wenn Sie nicht brauchen, Intensivstation Ihre volle Kraft und sind nur daran interessiert, "message translation", möchten Sie vielleicht zu schauen,GNU gettext, die, je auf Ihre Plattform-und Lizenz-Anforderungen, kann ein "kleiner, übersichtlicher und weniger kompliziert" alternative.
Den Boost.Gebietsschema Projekt ist auch eine interessante alternative. In der Tat, seine " Nachrichten Formatierung " - Funktionalität basiert auf der gettext-Modell.
Da Sie Sie bitten, für die besten Weg (und nicht erwähnt, dass die Plattform) würde ich empfehlen,GNU Gettext.
Wohl vollständigste und Reifen Internationalisierungs-Bibliothek für C/C++ - Programmierung.