Latest Posts

Topic: [Patch] Sprache Deutsch unter Ubuntu

carli

Topic Opener
Joined: 2010-12-31, 16:53
Posts: 39
Ranking
Pry about Widelands
Posted at: 2011-01-23, 22:53

Hi,

Ein Kumpel hat nen Patch geschrieben, der die Locales unter Ubuntu fixt:

http://pastebin.com/Htb8G6wZ

Ich finde das ganze ein bisschen hacky, vielleicht sollte man lieber "locale -a" abfragen und daraus die Sprachenliste erzeugen.

Was meint ihr? Er (martin) meint, es sollte auf alle Fälle noch auf anderen Linux-Systemen (gentoo) getestet werden.

Edited: 2011-01-23, 22:57

Top Quote
Nasenbaer
Avatar
Joined: 2009-02-21, 18:17
Posts: 826
Ranking
One Elder of Players
Location: Germany
Posted at: 2011-01-24, 19:07

Moin carli,

Zwei Anmerkungen warum wir das so leider nicht übernehmen zu können:

  • Es ist tatsächlich ein (hässlicher) Hack - wir können schlichtweg nicht für jede Sprache ein Replacement String einfügen.
  • und noch schlimmer: es geht nicht nur darum auf anderen Linux Distributionen zu testen - ich wäre froph, wenn wir erstmal eine Lösung hätten die zuverlässig auf allen UBUNTU Versionen funktioniert - denn tatsächlich sind diese Anhängsel wie ".UTF-8" nicht nur Distributionsspezifisch, sondern gerade bei Ubuntu sogar Versionsspezifisch...

Dennoch sind wir auch gerade bei dem Übersetzungsproblem über jede Hilfe dankbar :).

Liebe Grüße

Nasenbaer

Edited: 2011-01-24, 19:07

Top Quote
martin

Joined: 2011-01-13, 14:21
Posts: 65
Ranking
Likes to be here
Posted at: 2011-01-24, 22:06

Hallo Nasenbaer,

Danke fürs Drüberschauen. Ich kann deine Anmerkungen gut nachvollziehen. Mir ist auch klar, dass man den Fix nicht gerade "elegant" nennen kann. :)

Fakt ist aber, dass unter den aktuellen Ubuntus keine andere Einstellung als "de_DE.utf8" bzw. "de_DE.utf-8" mehr funktioniert, denn auf diese Locale wird das System ja standardmäßig konfiguriert (Deutsch vorausgesetzt). Leider ist es nicht sehr benutzerfreundlich, wenn der geneigte Widelands-Spieler zum Wechseln der Sprache erstmal seine locales komplett umkonfigurieren muss. Klar, ich weiß, dass es mit "try system language" funktioniert, doch intuitiv sollten "Systemsprache" und "Deutsch" bei einem auf deutsch konfigurierten System auch die gleiche Auswirkung haben - klappt bisher leider nicht :(

Soweit ich weiß, liefert "locale -a" unter allen relevanten Linux-Distributionen einen Eintrag "de_DE.utf8". Daraus schloss ich, dass der Fix auch dort funktionieren müsste. Selbstverständlich ist eine endlose if/elseif/elseif/elseif-Geschichte nicht das Ziel. Eleganter wäre z.B. eine entsprechende Lookup-Tabelle in einer hierfür einzulesenden Datei. Das habe ich allerdings nicht implementiert, weil ich vorher gern wissen wollte, ob es tatsächlich überall funktioniert. Das habt ihr (du und carli) offensichtlich falsch verstanden ;) es sollte sich hierbei nicht um einen offiziellen Patch handeln, sondern er war erstmal nur zum Test vorgesehen - und das unter möglichst vielen Systemen.

Übrigens: der Inhalt der Umgebungsvariable "LANGUAGE" scheint keinerlei Auswirkungen auf die Locale zu haben. Sie wird in

man 3 gettext
zwar erwähnt - da hatte ich insgeheim die Hoffnung, man könnte das Problem über diese Doppelpunkt-Liste für mehrere Locales sehr einfach lösen.
In src/i18n.cc ist außerdem ersichtlich, dass mal jemand mit dem Doppelpunkt experimentiert haben muss. Weißt du, was dabei rausgekommen ist - bzw. ob das Problem da lag, wo ich es vermute?
Denn wenn jemand wüsste, wie man LANGUAGE vom Programm aus für gettext nutzbar macht, könnte das einen neuen Ansatz zur Problemlösung bieten.

Soweit meine Ideen. Bin dankbar für Rückmeldung.

Viele Grüße
Martin
Edited: 2011-01-24, 22:10

Top Quote
carli

Topic Opener
Joined: 2010-12-31, 16:53
Posts: 39
Ranking
Pry about Widelands
Posted at: 2011-01-24, 22:46

Die Lösung naht:

Die auf dem System installierten Sprachen bekommt man mit $ locale -a

Das ist unter allen Distributionen der Parameter, den gettext nimmt und aus dem auch die Sprach-Auswahlliste aufgebaut werden sollte.

Wie das mit Windows läuft, weiß ich ehrlich gesagt nicht. Dass dann nur die auf dem System installierten Sprachen verfügbar sind und nicht alle Sprachen, die Widelands unterstützt, sollte uns jetzt mal nicht weiter stören. Ich denke mal, wenn jemand eine Sprache spielen will, hat er sie auch installiert.


Top Quote
Nasenbaer
Avatar
Joined: 2009-02-21, 18:17
Posts: 826
Ranking
One Elder of Players
Location: Germany
Posted at: 2011-01-26, 19:13

Moin nochmal :),

martin wrote: Fakt ist aber, dass unter den aktuellen Ubuntus keine andere Einstellung als "de_DE.utf8" bzw. "de_DE.utf-8" mehr funktioniert, denn auf diese Locale wird das System ja standardmäßig konfiguriert (Deutsch vorausgesetzt). Leider ist es nicht sehr benutzerfreundlich, wenn der geneigte Widelands-Spieler zum Wechseln der Sprache erstmal seine locales komplett umkonfigurieren muss. Klar, ich weiß, dass es mit "try system language" funktioniert, doch intuitiv sollten "Systemsprache" und "Deutsch" bei einem auf deutsch konfigurierten System auch die gleiche Auswirkung haben - klappt bisher leider nicht face-sad.png

Das seh ich genauso, aber bisher gab es halt leider keine ausreichend zufriedenstellende Lösung - so wie es im Moment ist, läuft es immerhin mit "try system language" unter fast allen Systemen. Was das mit "unter den aktuellen Ubuntus keine andere Einstellung als "de_DE.utf8" bzw. "de_DE.utf-8" angeht: So wie ich die gettext development guides verstehe ist genau da das Problem, weil Ubuntu Gettext auf irgendeine Weise restriktiv verwendet. Ein anderer Fakt ist nämlich zum Beispiel, dass bei älteren Ubuntu Versionen die Endung utf8 minimal anders war (sei es case sensitivity oder das ein "-" drin war, ich weiß es gerade nicht mehr) - es gab schonmal ähnliche Patches, die leider die Übersetzung auf besagten älteren Ubuntu Versionen verhinderten - und jetzt reden wir nur über Ubuntu face-wink.png - ich benutze Mandriva, andere Arch, Gentoo, Debian, Fedora, OpenSuSE und was auch immer face-wink.png

Die wirklich große Frage ist: auf welche Weise kann man herausbekommen, wie besagte restriktiv festgesetzte Sprach "Strings" auf dem System zur verfügung stehen, dann könnte man theoretisch durch ein std::string::find() schauen, ob z.B. "de" im String enthalten ist usw. usf.

Übrigens: der Inhalt der Umgebungsvariable "LANGUAGE" scheint keinerlei Auswirkungen auf die Locale zu haben. Sie wird in man 3 gettextzwar erwähnt - da hatte ich insgeheim die Hoffnung, man könnte das Problem über diese Doppelpunkt-Liste für mehrere Locales sehr einfach lösen. In src/i18n.cc ist außerdem ersichtlich, dass mal jemand mit dem Doppelpunkt experimentiert haben muss. Weißt du, was dabei rausgekommen ist - bzw. ob das Problem da lag, wo ich es vermute? Denn wenn jemand wüsste, wie man LANGUAGE vom Programm aus für gettext nutzbar macht, könnte das einen neuen Ansatz zur Problemlösung bieten.

Da kann ich leider auch nichts zu sagen - in den gettext development Dokumentationen stand einiges, aber auch da musste ich vor ein, zwei Jahren (als ich mich damit auseinander gesetzt habe) leider feststellen, dass sich gettext auf verschiedenen Linux Distributionen anders verhielt - für die damals als problematisch bekannten (Ubuntu, Debian, Gentoo) schien das aber leider eine Sackgasse zu sein - ich lasse mich aber gerne eines besseren belehren :).

Wie gesagt: bitte nicht als Destruktive Kritik sehen, letztlich sehen wir alle das selbe Problem, was wir brauchen ist nun DIE Lösung ;).

Liebe Grüße

Nasenbaer


Top Quote
carli

Topic Opener
Joined: 2010-12-31, 16:53
Posts: 39
Ranking
Pry about Widelands
Posted at: 2011-01-26, 19:28

was wir brauchen ist nun DIE Lösung .

Gettext statisch einkompilieren!


Top Quote
Nasenbaer
Avatar
Joined: 2009-02-21, 18:17
Posts: 826
Ranking
One Elder of Players
Location: Germany
Posted at: 2011-01-26, 19:29

carli wrote:

was wir brauchen ist nun DIE Lösung .

Gettext statisch einkompilieren!

da machen uns die Packer der Distributionen einen Strich durch die Rechnung face-wink.png


Top Quote
martin

Joined: 2011-01-13, 14:21
Posts: 65
Ranking
Likes to be here
Posted at: 2011-01-26, 21:13

Hmm, scheint alles nicht so einfach zu sein face-sad.png

Aber wenn man mal typische Ausgaben zu $ locale -a für unterschiedliche Distributionen erGooglet, findet man immer eine Zeile "de_DE.utf8". Zumindest hab ich das für (open)SuSE, Debian, Ubuntu, Gentoo, RedHat, Mandriva und Fedora getan. Arch hab ich vergessen - Asche auf mein Haupt...

Es scheint übrigens keinen Unterschied zu machen, ob man UTF-8 nun groß oder klein, mit oder ohne Bindestrich schreibt - aber da spreche ich jetzt wieder nur von den aktuellen Ubuntus.

IMHO gibt es nur drei Möglichkeiten der Lösung: 1. Wir suchen einen hinreichend großen "gemeinsamen Nenner" aller relevanten Distributionen und nehmen den - da dachte ich ja bisher, de_DE.utf8 wäre ein solcher. Kann aber sein, dass ich mich irre. Oder 2. Wir verwenden eine andere Übersetzungs-Schnittstelle als gettext - schreiben schlimmstenfalls unsere eigene. Aber diesen Aufwand halte ich nur für gerechtfertigt, wenn man die bisher geleistete Übersetzungsarbeit sinnvoll "mitnehmen" kann. Oder 3. Uns fällt spontan noch die ultimative Lösung ein. Wer kennt sich denn am besten mit gettext aus? Gibt es vielleicht einen Aspekt, der noch nicht berücksichtigt wurde? Habt ihr z.B. das statische Einkompilieren wirklich bis zum Ende durchgedacht?

Ein vierter Punkt wäre der status quo - den halte ich zwar für eine schlechte Lösung, aber immerhin diejenige mit dem geringsten Aufwand face-wink.png

Viele Grüße Martin


Top Quote
Nasenbaer
Avatar
Joined: 2009-02-21, 18:17
Posts: 826
Ranking
One Elder of Players
Location: Germany
Posted at: 2011-01-28, 22:39

Vielleicht ist die Idee aus meinem letzten Post gar nicht mal so verkehrt: Selektiert man eine Sprache, wird geschaut, ob der Language Code in der Auflistung vorhanden ist - falls ja, wird er unverändert verwendet - ist er es nicht, wird nach Codes gesucht, die den String enthalten und dieser als Alternative verwendet.

How about that? Anyone up for a patch and a test? face-smile.png

Liebe Grüße Peter


Top Quote
carli

Topic Opener
Joined: 2010-12-31, 16:53
Posts: 39
Ranking
Pry about Widelands
Posted at: 2011-01-29, 12:48

Auf unserer nächsten Widelands-LAN-Party wird der bestimmt angefertigt werden face-wink.png


Top Quote