Topic: [Patch] Sprache Deutsch unter Ubuntu
martin |
Posted at: 2011-01-29, 21:53
Hey, ich glaub Nasenbaer hat Recht! Ich hab soeben mal sämtliche meiner mittels $ locale -a ausgegebenen Locale-Deskriptoren ausprobiert. Und scheinbar funktionieren unter Ubuntu auch "de_AT.utf8", "de_BE.utf8", "de_CH.utf8", "de_DE.utf8", "de_LI.utf8" und "de_LU.utf8". Auch die Gegenprobe habe ich gemacht: "de_GB.utf8" funktioniert erwartungsgemäß nicht. Jetzt müssen wir nur noch die Ausgabe von $ locale -a ins Programm einlesen und dann haben wir so etwas wie eine Lookup-Tabelle - von der ich schonmal geschrieben habe - mit der dann (entsprechende Vorverarbeitung vorausgesetzt) ein Aktivieren der systemunabhängig richtigen Locale ermöglicht wird. Ich denke, wir sind auf einem guten Weg! Viele Grüße Martin Übrigens: Ich schlage vor, nur die auf dem System installierten Locales als Sprachen in Widelands auswählbar zu machen (plus Englisch natürlich) und/oder einen Hinweis in den Optionen zu ergänzen, dass das Betriebssystem die gewählte Sprache auch unterstützen muss. Das erspart bestimmt ein paar Fragen verwirrter Nutzer... Top Quote |
carli Topic Opener |
Posted at: 2011-01-30, 14:31
btw: macht man das in C++/boost immer noch mit popen()? Oder hat Boost eine Process-Klasse mit Stream-Komponenten? Nasenbaer: wie sieht da der Codestyle aus? Top Quote |
SirVer |
Posted at: 2011-01-30, 15:27
Die Ausgabe von locale -a zu parsen ist eine schlechte Idee. Ich würde eher vorschlagen mal in den Sourceode des Programmes locale zu spicken und rauszufinden, wie der "offizielle" weg ist an die Liste von installierten locals zu kommen. output von anderen Programmen zu parsen ist immer fehleranfällig und potentiell gefährlich. Top Quote |
martin |
Posted at: 2011-01-31, 07:27
SirVer schrieb:
Das ist natürlich auch eine Idee - wahrscheinlich sogar besser und eleganter :) Das würde uns bestimmt die Verwendung von popen() und ähnlichem Zeug ersparen. Da hab ich gar nicht dran gedacht...
Stimmt - das hab ich auch schon erlebt! Als der NetworkManager unter Ubuntu/Debian noch nicht existierte bzw. ausgereift war, hatte ich mir ein Skript geschrieben, um mich komfortabel mit WLAN-Hotspots verbinden zu können. Das basierte dummerweise auf der Ausgabe von $ iwlist wlan0 scan - und diese Ausgabe sah in jeder Folgeversion ein Bisschen anders aus und ich musste das Skript deshalb jedes Mal anpassen Also: stürzen wir uns auf den locale-source! Viele Grüße Martin Top Quote |
SirVer |
Posted at: 2011-01-31, 07:40
Euer enthusiasmus ist sehr erfrischen! Wäre super, wenn dieses blöde locals Problem entgültig gelöst werden könnte; das begleitet uns schon zu viele builds. Top Quote |
martin |
Posted at: 2011-02-02, 16:04
Hallo zusammen, Ich hab den Source von locale aus der eglibc durchgeschaut und hoffe, dass wir irgendwelche Übereinstimmungen zwischen den Distributionen finden können... Folgende Erkenntnisse: locale -a generiert seine Liste einerseits aus dem Locale-Archiv in LOCALEDIR/locale-archive und andererseits aus LOCALEDIR/*/LC_IDENTIFICATION - Ubuntu nutzt offensichtlich nur das Archiv. LOCALEDIR wird laut configure über das Makefile von eglibc standardmäßig auf /usr/local/share/locale gesetzt. Unter Ubuntu allerdings /usr/lib/locale. locale-archive ist eine Binärdatei mit definiertem Format, sie ließe sich daher auslesen - wenn man denn wüsste, wo genau sie sich bei jeder Distro befindet. Allerdings ist sie bei mir über 8 MB groß! Es gibt eine Umgebungsvariable LOCPATH, mit der man ein anderes Verzeichnis für den Locale-Pfad angeben kann. Diese Variable wird aber nicht einheitlich über die Distributionen hinweg verwendet. In man 1 locale wird sie nur bei Debian/Ubuntu erwähnt. Dort wird dann auch gesagt, dass /usr/lib/locale verwendet wird, falls LOCPATH nicht gesetzt ist. Bei Ubuntu gibt es zudem eine Datei /var/lib/belocs/list, deren Inhalt exakt(!) mit der Ausgabe von locale -a übereinstimmt. Es existiert weiterhin eine Datei /var/lib/locales/supported.d/local, welche die auf dem System tatsächlich installierten Locales benennt. Da ich nur Deutsch und Englisch installiert habe, sieht die Datei bei mir folgendermaßen aus:
So. Ich wünschte, die Auswertung hätte Eindeutigeres zu Tage gefördert. Die Frage an euch nun: Seht ihr verwertbare Übereinstimmungen zu anderen Distributionen? Anderenfalls plädiere ich wieder für die Auswertung des Programmoutputs von locale -a - obwohl es nicht die schönste Lösung ist - aber zumindest scheint diese Ausgabe POSIX-genormt zu sein... Viele Grüße Martin Top Quote |
SirVer |
Posted at: 2011-02-02, 20:30
Danke für deine Untersuchungen! Dennoch: Ich raff das einfach nicht. Wie machen das denn andere Spiele? Zum Beispiel Wesnoth muss dieses Problem doch auch irgendwie gehabt und gelöst haben. Magst Du da nicht auch noch mal stöbern. Das parsen von consolen output sollte die letze lösung sein, wenn uns wirklich nix mehr einfällt. Top Quote |
Nasenbaer |
Posted at: 2011-02-02, 23:26
Moin,
/* Return a duplicate of the set of locale in DATASET. All usage ich konnte das bisher mangels Zeit leider nicht weiter testen, aber von den Kommentaren könnte uns das eventuell weiterhelfen. Liebe Grüße Peter Top Quote |
martin |
Posted at: 2011-02-03, 17:18
Danke an SirVer, für den Hinweis mit Wesnoth. Ich werd ab sofort stattdessen dort mitmachen Nee - kleiner Scherz. Widelands ist dem nicht nur in Bezug auf die Grafik meilenweit voraus, sondern - da ich nicht so der Fantasy-Fan bin - trifft Widelands auch meinen Computerspielegeschmack sehr viel besser. Also an dieser Stelle nochmal ein großes Lob an das Widelands-Team! Der Wesnoth-Source gibt allerdings einige aufschlussreiche Details preis - hier meine Erkenntnisse:
Ich denke, am wichtigsten wird für uns erstmal das Abprüfen des setlocale-Ergebnisses und eine damit verbundene "Probierschleife" sein. Davon ausgehend müssen wir wahrscheinlich die Sprachkonfigurationsdatei nochmal überarbeiten. Kein geringer Aufwand, aber hey - es sieht so aus, als könnte es funktionieren Viele Grüße Martin Edited: 2011-02-03, 17:19
Top Quote |
SirVer |
Posted at: 2011-02-04, 10:33
Das klingt doch super. Klau so viel wie Du kannst von Wenoth (via Copy & Paste); das ist auch GPL und damit ist das kein Problem. Erwähne natürlich woher die Lösung kommt. Das scheint mir ein vielversprechender Ansatz! Gute Arbeit. lg, Holger Top Quote |