C ++, Multilanguage / Lokalisierungsunterstützung

7

Was ist der beste Weg, um mehrsprachige Unterstützung für ein C ++ - Programm hinzuzufügen?

Wenn möglich, sollte die Sprache aus einer einfachen Textdatei eingelesen werden, die so etwas wie Schlüssel / Wert-Paare enthält (§WelcomeMessage§ "Hello% s!").

Ich dachte an etwas wie das Hinzufügen einer localizedString (key) -Funktion, die den String der geladenen Sprachdatei zurückgibt. Gibt es bessere oder effizientere Wege?

%Vor%     
blubberbernd 25.03.2011, 13:05
quelle

4 Antworten

10

Einfachster Weg ohne externe Bibliotheken:

// strings.h

%Vor%

// strings.c

%Vor%

Dies wird Ihnen geben, was Sie wollen. Natürlich könnten Sie die Strings aus einer Datei lesen. Ie.

// en_au.lang

%Vor%

Sie benötigen jedoch eine Liste von String-Namen, die mit den String-Titeln übereinstimmen müssen. d. h.

// parse_strings.c

%Vor%

Das obige sollte in C ++ etwas einfacher sein, da Sie die enum-Klassen toString () -Methode verwenden könnten (oder was auch immer - es kann nicht gestört werden, nachzuschlagen).

Sie müssen dann nur die Sprachdateien analysieren.

Ich hoffe, das hilft.

PS: und um auf die Strings zuzugreifen:

%Vor%

PPS: Entschuldigung für die halbe C halbe C ++ Antwort.

    
PAntoine 25.03.2011, 14:43
quelle
6

Die ICU-Bibliothek wurde speziell dafür entwickelt.

    
Björn Pollex 25.03.2011 13:07
quelle
5

Space_C0wb0w's Vorschlag ist ein guter. Wir verwenden derzeit erfolgreich ICU für diese in unseren Produkten.

Es ist wirklich schwer zu sagen, dass die Intensivstation "klein, sauber, unkompliziert" ist. Es gibt eine "zufällige" Komplexität in der ICU, die von ihrer "Java-ish" -Schnittstelle kommt, aber ein großer Teil der Komplexität und Größe ergibt sich einfach aus der Komplexität und Größe der Problemdomäne, die adressiert wird.

Wenn Sie die volle Leistungsfähigkeit der Intensivstation nicht benötigen und nur an der "Nachrichtenübersetzung" interessiert sind, können Sie sich die GNU ansehen: GNU gettext , das je nach Plattform und Lizenzanforderungen eine "kleinere, sauberere und weniger komplizierte" Alternative sein kann.

Das Projekt Boost.Locale ist ebenfalls eine interessante Alternative. Die Funktion " Nachrichten formatieren " basiert auf dem gettext-Modell.

    
Éric Malenfant 25.03.2011 14:52
quelle
3

Da Sie nach dem besten Weg fragen (und die Plattform nicht erwähnt haben), würde ich GNU Gettext .

Wahrscheinlich ist es die vollständigste und ausgereifteste Internationalisierungsbibliothek für C / C ++ - Programmierung.

    
Paweł Dyda 25.03.2011 18:45
quelle