Verschiedene Sprachstrings - gute Lösung, gute Idee gesucht.
-
Schon mal nach einer entsprechenden Bibliothek fuer C oder C++ gesucht, die sowohl fuer Windows und fuer Linux ausgeliefert wird?
-
hier, aba schon bisschen älter:
http://sourceforge.net/project/showfiles.php?group_id=25167
-
Du benutzt doch sowieso eine cross-platform Bibliothek oder nicht?
Dann schau mal in die Doku, die haben normalerweise alle so etwas fundamentales.Bei QT nennt sich das QLinguist.
-
Die Standardbib bietet entsprechende Funktionalität: std::message + std::codecvt
Wobei die Funktionalität wohl etwas den Implementierungen überlassen wird. Ansonsten schau dir wie bereits gesagt gettext an.
-
Tippgeber schrieb:
Du benutzt doch sowieso eine cross-platform Bibliothek oder nicht?
Dann schau mal in die Doku, die haben normalerweise alle so etwas fundamentales.Bei QT nennt sich das QLinguist.
ausser der c bibliothek hab ich noch die winapi für die windows-version. der rest ist mit #ifdef und co. gemacht.
-
rüdiger schrieb:
Die Standardbib bietet entsprechende Funktionalität: std::message + std::codecvt
WTF ist std::message? Gib mal Link zur Doku.
-
Die Klasse heisst std::messages, und Doku gibt's z.B. hier:
http://gcc.gnu.org/onlinedocs/libstdc++/manual/messages.html
oder hier:
http://stdcxx.apache.org/doc/stdlibref/messages.htmlIst Teil des offiziellen C++ Standards (1998) - siehe Abschnitt 22.2.7.
Lustigerweise ist die Klasse in MSVC implementiert, aber nicht dokumentiert
(Ich hab von dem Ding aber auch noch nie was gehört. Hab nur eben nachgeschaut weil's mich gewundert hätte wenn rüdiger hier totalen Unsinn verzapfen würde...)
p.S.: was locales angeht... so ziemlich alle Implementierungen verwenden die Zwei-Buchstaben ISO-Codes für Sprachen ("de", "en", ...), bzw. die "ll_CC" Version wo ll für die Sprache steht und CC für das Land ("de_AT", "en_US", ...). MSVC nicht, MSVC will hier Drei-Buchstaben ISO-Codes haben ("deu", "eng", "deu_AUT", "eng_USA", ...). Wiedermal total plem!
-
hustbaer schrieb:
Die Klasse heisst std::messages, und Doku gibt's z.B. hier:
http://gcc.gnu.org/onlinedocs/libstdc++/manual/messages.html
oder hier:
http://stdcxx.apache.org/doc/stdlibref/messages.htmlIst Teil des offiziellen C++ Standards (1998) - siehe Abschnitt 22.2.7.
Lustigerweise ist die Klasse in MSVC implementiert, aber nicht dokumentiert
(Ich hab von dem Ding aber auch noch nie was gehört. Hab nur eben nachgeschaut weil's mich gewundert hätte wenn rüdiger hier totalen Unsinn verzapfen würde...)
Die IOStreams und Locales sind leider viel zu unbekannt. Sie sind gewiss nicht perfekt, aber bieten genügend Funktionalität zur Erweiterung. Ich kann jedem nur das Buch Standard C++ IOStreams and Locales | ISBN: 0201183951 empfehlen.
-
@Tippgeber:
Ich hab' mich mit den Dingern nie anfreunden können.
Und ich brauche sie gottseidank nie.Für "einfach nur Daten ausgeben/speichern/laden/versenden" etc. verwende ich aus verschiedensten (guten) Gründen keine C++ Streams.
Und mit Lokalisierung hab' ich gottseidank kaum was zu tun
-
kann denn gettext auch das L"xyz" und "xyz" verarbeiten/unterscheiden?
-
Tippgeber schrieb:
Die IOStreams und Locales sind leider viel zu unbekannt.
Und das völlig zu recht. Die C++-Locales sind eine einzige Krankheit. Ich verstehe nicht, was sich der Standard dabei gedacht hat. Wenn man die Dinger nicht gerade komplett selbst implementieren will, sind sie praktisch unbrauchbar, weil alles absolut plattform- und compilerabhängig ist. Selbst zwischen GCC (Linux) und GCC (MinGW/Windows) kann man nicht denselben Code hernehmen. Es sei denn natürlich, man implementiert wirklich alles selbst und verlässt sich auf absolut gar nichts. Und das sagt schon alles über die Brauchbarkeit aus. Das Einzige, worauf man sich verlassen kann, ist die Verwendbarkeit des C-Locales. Super
-
gettext n00b schrieb:
kann denn gettext auch das L"xyz" und "xyz" verarbeiten/unterscheiden?
scheinbar benutzt das zeug hier keiner!
-
Wenn man sich den Header so ansieht, dann sieht's nicht danach aus. Aber dazu ist vielleicht das hier interessant.
-
.filmor schrieb:
Wenn man sich den Header so ansieht, dann sieht's nicht danach aus. Aber dazu ist vielleicht das hier interessant.
ja, der link ist sehr aufschlussreich, vielen dank! habe zwar jetzt schon alles fest im source-code drin, was man laut obigem link ja nicht machen sollte. aber wenn das proggie später vielleicht mal größer werden sollte, kann ich ja immer noch umrüsten.
ein paar zeilen weiter oben finde ich ja putzig:
“Woe32” denotes the Windows 32-bit operating systems for x86: Windows NT/2000/XP/Vista and Windows 95/98/ME. Microsoft uses the term “Win32” to denote these; this is a psychological trick in order to make everyone believe that these OSes are a “win” for the user. However, for most users and developers, they are a source of woes, which is why I call them “Woe32”.
gruß,
g.n.
-
ja, schön und gut, aaaaber:
Short answer: If you want your program to be useful to other people, then don't use accented characters (or other non-ASCII characters) in string literals in the source code. Instead, use only ASCII for string literals, and use gettext() to retrieve their display-ready form.
was ist denn die "display-ready-form"? in welchem format wird das gespeichert?
-
Das heisst, dass du in deinem Programm nur ASCII Strings wie "Text1" haben sollst, und diese dann verwendest um mittels gettext die Nachricht in der codierung zu erhalten, die du dann Ausgeben willst.
also quasi:
wcout<<gettext("Fehlernachricht1");