Mehrsprachige Programmierung

Herbert zur Nedden erlätert, wie das ResFind/ResConf-Paket genutzt werden kann, um Anwendungen mehrsprachig zu machen


This article is also available in English.


Mit ResFind können Programmierer ihre Anwendungen recht leicht so schreiben, daß diese mehrere Sprachen für die Benutzeroberfläche unterstützen. Mit ResConf können Anwender dann auf die Sprachwahl Einfluß nehmen, wenn sie wollen. Dieser Artikel soll das Konzept näher erläutern.
Zip
See Run

Einleitung

Schon von jeher bietet RISC OS mit dem Konzept der Messages und der Templates die Voraussetzungen, damit Programme in andere Sprachen übersetzt werden können, ohne Zugriff auf die Quelltexte haben zu müssen. Davon machen fast alle Programmierer Gebrauch. Folge ist, daß es viele Programme mittlerweile in mehreren Sprachen gibt. Häufig - besonders im Freeware-Bereich - werden sogar alle vorhandenen Übersetzungen mit ausgeliefert, um dem Benutzer die Wahl zu lassen, in welcher Sprache er das Programm laufen lassen möchte. Unpraktischerweise muß der Anwender bei einigen Programmen die gewünschte Sprache durch Kopieren von Dateien einstellen.

Erst sehr spät hat Acorn bei Einführung der Toolbox ein Konzept für die Mehrsprachen-Fähigkeit von Applikationen eingeführt - aber eines nur für Anwendungen, die auf Basis der Toolbox programmiert wurden. ResFind mit dem zugehörigen Konzept für mehrsprachige Anwendungen gibt es seit 1992. Viele Programmierer verwenden jedoch die Toolbox nicht - sei es, weil ihnen Acorns Entwicklungsumgebung zu teuer war oder der Aufwand für das Umstellen der Programme oder das Umlernen auf die Toolbox-Techniken zu hoch ist.

Auch ist die Toolbox-Lösung für mehrsprachige Anwendungen nicht besonders flexibel aus Sicht des Anwenders, da dieser keinen Einfluß auf die gewählte Sprache nehmen kann. Mit !ResConf hingegen hat der Anwender sehr große Freiheiten bei den Spracheneinstellungen.

Anwender: ResConf

Bekommt ein Anwender eine Applikation, die ResFind nutzt, so kann er diese ebenso, wie jede andere Anwendung einfach nutzen (er muß gar nicht wissen, daß ResFind im Einsatz ist). Allerdings ist er evtl. angenehm überrascht, daß das Programm automatisch in einer ihm verständlichen Sprache läuft. Aber...

Mittels ResConf kann der Anwender einige Einstellungen vornehmen und so z.B. angeben, welche Sprache ihm lieber als die ist, auf die sein Rechner konfiguriert ist und vor allem, was ihm mehr liegt, als englisch. Auch kann man mit !ResConf für einzelne Anwendungen die Sprache explizit vorgeben.

Nehmen wir als Beispiel einen Anwender aus der französischen Schweiz. Sein Rechner ist auf das Land Schweiz (Switzerland) eingestellt, aber eigentlich mag er am liebsten französische Anwendungen und deutsche sind ihm noch immer lieber, als englische. Diese Wünsche kann er mittels !ResConf leicht im System hinterlegen und ResFind nutzende Anwendungen beachten dann automatisch seine Wünsche.

Hier werden mittels !ResConf die Sprachenvorlieben eingestellt: Die Sprache Französisch bekommt den Vorzug vor der konfigurierten Sprache des Landes Schweiz sowie Deutsch den Vorzug vor der Standardsprache Englisch ResConf zum Setzen der Systemeinstellungen

Wenn ich ein Programm einsetze, daß es zwar in meiner Landessprache gibt, die Übersetzung mir aber überhaupt nicht gefällt, so kann ich mit ResConf diese Anwendung fest auf eine andere Sprache einstellen (sofern die Anwendung diese auch bietet und ResFind nutzt).

Hier wird mittels ResConf eine Anwendung (es ist die CD-Brennsoftware CD-Burn) auf eine bestimmte Sprache eingestellt. Sie bietet die beiden Sprachen Deutsch (Germany) und Englisch (UK), gewählt wurde Deutsch ResConf zum Konfigurieren einer Anwendung

Programmierer: ResFind

Eine Anwendung, die ResFind unterstützt, benötigt im Applikationsverzeichnis ein Verzeichnis Namens Resources, in dem sich für jede vorhandene Übersetzung ein weiteres Verzeichnis befindet, das nach dem jeweiligen Land benannt ist. Hierbei muß die Schreibweise gewählt werden, die im RISC OS für die Länderkonfiguration (*Configure Country) vorgesehen ist. Für Deutschland würde das Verzeichnis also Germany heißen, für England (genaugenommen das Vereinigte Königreich) UK. Innerhalb der Sprachenverzeichnisse sind alle sprachabhängigen Dateien untergebracht. Neben den bereits erwähnten Messages und Templates sind das insbesondere die Hilfe und ggf. die Dokumentation des Programms. Die sprachunabhängigen Ressourcen wie Sprites müssen nicht im Sprachverzeichnis liegen, sondern können direkt im Verzeichnis der Anwendung untergebracht werden, was Platz spart, da sie nicht mehrfach vorhanden sein müssen.

Dieses Bild zeigt den Aufbau einer Applikation, die ResFind nutzt. Bitte die Sprachenverzeichnisse in den Ressouceen beachten. (Bei dieser Anwendung liegen die Templates nicht im Sprachenverzeichnis, da die Texte in diesen aus den Messages geholt werden, d.h. die Templates bedürfen keiner Übersetzung.) ResFind Applikationsaufbau

ResFind setzt eine Pfadvariable, die dem Programm sagt, wo es die Ressourcen finden kann, die es benutzen soll. Dabei sucht es nach dem passenden Sprachverzeichnis innerhalb der Anwendung. Standardmäßig ist das die Sprache, auf die der Rechner konfiguriert ist, da diese Einstellung am ehesten die Vorliebe des Benutzers widerspiegelt - oder widerspiegeln sollte. Hat der Anwender per !ResConf erweiterte Vorgaben für die Sprachenwahl gemacht, werden diese natürlich von ResFind beachtet. Ist keine passende Sprache vorhanden, wird UK für englisch gewählt. Daraus folgt, daß ein Programm immer mindestens die Sprache "UK" anbieten muß.

In der !Run-Datei der Anwendung (nennen wir sie mal !Appl) ruft man ResFind auf, damit es die passenden Sprachenressourcen findet:

ResFind setzt die Systemvariable ApplRes$Path so, daß sie auf das Sprachenverzeichnis und das Applikationsverzeichnis von !Appl zeigt. Das Laden der Templates erfolgt nun nicht in der Form:

sondern unter Verwendung der Ressourcen-Pfadvariable ApplRes$Path:

Beim Laden anderer Ressourcen wird natürlich ebenso der Ressourcen-Pfad verwendet. Auch in C ist die Benutzung entsprechend. Einige C-Libraries benutzen intern einen Präfix zum Laden von Programm-Ressourcen. So genügt es bei der DeskLib

vor dem Laden von Ressourcen aufzurufen (das gilt zumindest für ältere Versionen der DeskLib).

Für die Hilfe sollte dieselbe Technik eingesetzt werden, indem man im Sprachenverzeichnis die jeweilige Hilfeinformation ablegt und !Help in der Applikation als Obey-Datei mit folgendem Inhalt ablegt:

Ein Hinweis ist vielleicht noch wichtig: die Texte der Menüeinträge dürfen natürlich nicht im Programm fest kodiert werden, sondern sollten aus den Messages geladen werden, damit man auch diese übersetzen kann.

Home page

Auch, wenn ResFind für einige neu ist - es ist seit 1992 verfügbar und obendrein nicht nur Freeware, sondern darf auch in kommerziellen Anwendungen genutzt werden.

Aktuell sind die Versionen ResFind 2.01b, ResError 1.01 and ResConf 0.30.

ResFind-Homepage: http://www.gag.de/software/ResFind.

"GAG" steht übrigens für "German Archimedes Group", einen deutschsprachigen Club für RISC OS-User; wir geben auch DIE deutsche RISC OS-Zeitschrift GAG-News heraus. Näheres unter http://www.gag.de/ und in der Club Database auf dieser CD.