home *** CD-ROM | disk | FTP | other *** search
/ The Datafile PD-CD 4 / DATAFILE_PDCD4.iso / utilities / utilsd / evntshell / !EvntShell / ResFind / Deutsch < prev    next >
Encoding:
Text File  |  1993-05-10  |  14.6 KB  |  157 lines

  1. ResFind 2.00 Programmierer Dokumentation
  2. Datum: 01-Nov-1992
  3.  
  4.  
  5. Copyright:
  6. ==========
  7.  
  8. ResFind ist Copyright ©1992
  9. Olaf Krumnow & Herbert zur Nedden
  10. German Archimedes Group (GAG)
  11.  
  12. ResFind ist FREEWARE und darf frei verbreitet und benutzt werden, auch für kommerzielle Programme, solange in der !Help-Datei oder -Application der Hinweis auf unser Copyright mitsamt der Anschriften steht und in der Application die komprimierte Version von ResFind (d.h. nicht ResFindSrc) enthalten ist. Ferner sollte ResFind in der Programmdokumentation erläutert werden - ein Muster hierfür steht am Ende dieser Datei.
  13.  
  14. Es ist ausdrücklich verboten, aus DIESEM ARCHIV Dateien zu entfernen. Das Hinzufügen von Übersetzungen in andere Sprachen ist jedoch ausdrücklich erwünscht. Ausnahme: Die Weitergabe von ResFind wie im vorherigen Absatz beschrieben.
  15.  
  16. Wir würden uns sehr freuen, wenn Sie ResFind weitergeben, damit sich (endlich) ein Standard für die Mehrsprachige Programmierung durchsetzt.
  17.  
  18.  
  19. Autoren:
  20. =======
  21.  
  22. Olaf Krumnow                     Herbert zur Nedden
  23. August-Bebel-Strasse 102c        Alte Landstraße 21
  24. D-21029 Hamburg 80               D-22962 Siek
  25. Deutschland                      Deutschland
  26. (+49 40) 7 21 92 87              (+49 41 07) 99 00
  27.  
  28.    email: ECOMM-II Hamburg  (+49 40) 7 15 88 29 (FIDO, Netmails)
  29.           ArcPool Wolfsburg (+49 53 62) 6 51 03 (FIDO)
  30.  
  31.  
  32. Was ist ResFind?
  33. ================
  34.  
  35. Acorn unterstützt mehrsprachige Programmierung durch das MSGTRANS Modul. Viele Programmierer benutzen dieses, um die Messages (= Meldungen) ihres Programms einzulesen. Es gibt sogar einige (britische) Programme, die nicht nur englische, sondern auch anderssprachige (meist deutsche) Messages beinhalten. Jedoch kenne ich (mit Ausnahme der mit ResFind programmierten) nur ein Programm, welches auch automatisch die Sprache wechselt, wenn es eine andere Umgebung vorfindet - Impression.
  36. Dieser Zustand ist für den normalen Endanwender sicher nicht optimal, muß er doch in den meisten Fällen selber Hand anlegen, um Messages in seiner Sprache zu aktivieren - selbst wenn sie im Programm schon vorhanden sind.
  37. Hier sezt ResFind an. Es versucht, die bestmögliche vorhandene Sprache für den Anwender einzustellen. Natürlich kann ResFind nicht hellsehen, aber auf einer gut konfigurierten Maschine sollte es funktionieren.
  38.  
  39.  
  40. Wie funktioniert's?
  41. ===================
  42.  
  43. ResFind setzt voraus, daß der Programmierer die sprachenabhängigen Resourcen, also nicht nur Messages, sondern auch Templates und evtl. Sprites, Dokumentation usw., in einer Directorystruktur ablegt, die die jeweilige Sprache wiederspiegelt. Dazu befindet sich in der Application ein Directory 'Resources', in welchem für jede unterstützte Sprache ein weiteres Directoy ist, das den Namen des dazugehörigen Landes trägt, also z.B. 'UK' oder 'Germany' - sprich die Sprache, die beim Konfigurieren angegeben wird. In diesen Directories stehen dann die Resourcen-Dateien, in die jeweilige Sprache übersetzt. Für jede neue Sprache, die hinzukommt, muß jetzt lediglich ein neues Directory eingefügt werden.
  44. Lt. Acorn (BBC Acorn User Show '92) sollen diese Sprach-Directories direkt in der Application und nicht im Resources-Directory stehen, was wir etwas unübersichtlich finden. Leider hat Acorn das weder bekanntgegeben noch in eigenen Anwendungen realisiert. ResFind funktioniert daher auch bei fehlendem Resources-Directory und erwartet dann die Sprach-Directories direkt in der Application.
  45.  
  46. Ein Anwender, der überhaupt nichts von ResFind weiß, erhält jetzt, soweit möglich, die Sprache, auf die er seine Maschine konfiguriert hat. Ist diese Sprache nicht vorhanden, wird UK gewählt (das zeigt auch, daß zumindest UK vorhanden sein sollte, damit das Programm in allen Fällen lauffähig bleibt).
  47. Ein Anwender, der von ResFind weiß (und die Programmdokumentation sollte darauf hinweisen), hat noch einige weitere Möglichkeiten: Er kann die Variablen 'ResFind$LanguagesPref' und 'ResFind$LanguagesSuff' definieren, am besten in der System-!Boot-Datei. In ersterer stehen die Sprachen, die er der konfigurierten Systemsprache vorzieht, in letzterer die, die ihm lieber als UK sind. Nehmen wir als Beispiel mal einen norwegischen User (weil von dort so viel gute Software kommt), der seine Maschine auf 'Norway' konfiguriert hat. Nun ist diese Sprache im restlichen Europa nicht sehr verbreitet, weswegen ein nicht norwegisches Programm üblicherweise keine passende Übersetzung anbieten wird. Unser User ist aber äußerst sprachbegabt und spricht noch sehr gut deutsch und französisch, wohingegen das englisch nur für Notfälle ausreicht. Er möchte also, soweit möglich, vor der englischen Version lieber eine deutsche oder französische, falls vorhanden (und bei unseren Programmen ist zumindest deutsch vorhanden). Er schreibt demnach in seine !Boot-Datei die Zeile 'Set ResFind$LanguagesSuff Germany,France'. (Hier ist man übrigens nicht auf die konfigurierbaren Sprachen eingeschränkt. Es sind auch Möglichkeiten wie 'Jokie' verwendbar.)
  48. Jetzt probiert ResFind nach der konfigurierten Sprache (Norway) zunächst Germany, dann France, und erst als letztes (als Default) noch UK, und nimmt natürlich die erste passende Sprache. (Vor der konfigurierten Sprache wird keine andere probiert, da ResFind$LanguagesPref nicht definiert ist.)
  49. Nun mag es Programmierer geben (the RISC Squad scheint dazuzugehören), die einen ausgeprägten Sinn für Humor haben und deshalb eine 'Übersetzung' mit komischen Texten anbietet (wie bei !FormEd). Oder die Übersetzung in die eigentlich bevorzugte Sprache ist bei einem Programm so schlecht gelungen, daß man für dieses Programm eine andere Sprache haben möchte, die eigentlich (nach der oben beschriebenen Reihenfolge) nicht gewählt würde. In diesem Fall kann man für dieses Programm eine Variable setzen (entweder in der System-!Boot-Datei oder in der Application-!Run-Datei; ich würde System-!Boot empfehlen, weil erstens oft ein Ändern der zum Programm gehörenden Dateien nicht erlaubt ist, und zweitens bei einem Update des Programms sofort die gewünschte Sprache gewählt wird, ohne wieder !Run ändern zu müssen), die diese Sprache vorschreibt. Die Variable heißt <ProgName>$Language, wobei für <ProgName> natürlich der Name der Application eingesetzt werden muß; für eine Application !ModulInfo wäre dann 'Set ModulInfo$Language Jokie' eine Möglichkeit. Um wieder unseren norwegischen Anwender zu nehmen: Er erhält also für das Programm !ModulInfo jetzt die Sprache 'Jokie', für alle anderen Programme die bereits erwähnte Reihenfolge.
  50. Um diese Informationen nochmal auf den Punkt zu bringen: ResFind baut einen String auf, der wie folgt aussieht:
  51.    <ProgName$Language>,<ResFind$LanguagesPref>,<konfigurierte Sprache>,<ResFind$LanguagesSuff>,UK
  52. Für den bereits bekannten norwegischen User wäre das also bei !ModulInfo
  53.    Jokie,Norway,Germany,France,UK
  54. bei allen anderen Programmen
  55.    Norway,Germany,France,UK
  56.  
  57.  
  58. Was muß der Programmierer tun?
  59. ==============================
  60.  
  61. Zu Beginn setzt ResFind erst einmal die übliche Variable <ProgName$Dir> auf den Wert von <Obey$Dir>. Dabei ist <ProgName> der Name der Application (ohne das !), den sich ResFind aus <Obey$Dir> holt. Alternativ kann der Name jedoch auch als Aufrufparameter an ResFind übergeben werden, was im Falle von Application-Namen, die Sonderzeichen enthalten (z.B. !Spark'em) angebracht ist.
  62.  
  63. ResFind legt als Ergebnis seiner Suche nach der Sprache eine Variable namens <ProgName>Res$Path an. Diese Pathangabe enthält den Pfad zu dem gefundenen Sprach-Directory und den Pfad zur Application, also
  64.    <ProgName$Dir>.Resources.<gefundene Sprache>.,<ProgName$Dir>.
  65. (Ist das Resources-Directory nicht vorhanden, lautet der Pfad <PogName$Dir>.<gefundene Sprache>.,<ProgName$Dir>.; wurde keine passende Sprache gefunden, ist der gesetzte Pfad lediglich <ProgName$Dir>.)
  66. Somit können mit der Pfadangabe ProgNameRes: die Resourcen in der vom Endanwender gewünschten Sprache angesprochen werden. Nicht sprachspezifische Resourcen sind aufgrund des zweiten Teils des Pfades mit der gleichen Syntax zu erreichen.
  67.  
  68. Ein paar Beispiele in BASIC sollen dieses verdeutlichen:
  69.  
  70. Einlesen von Templates:
  71.  
  72.    SYS "Wimp_OpenTemplate",,"ProgNameRes:Templates"   : REM open templates file
  73.    SYS "Wimp_LoadTemplate",....                       : REM load template definition
  74.    [... load how much you need ...]
  75.    SYS "Wimp_CloseTemplate"                           : REM close templates file
  76.  
  77. Laden von Messages:
  78.  
  79.    SYS "MessageTrans_OpenFile",data%,"ProgNameRes:Messages",buffer%
  80.  
  81.  
  82. Unsere GAG-BASIC-Libraries benutzen diese Syntax (genaugenommen setzen sie voraus, daß eine entsprechende Pfadvariable gesetzt ist), so daß damit die Nutzung von ResFind optimal unterstützt wird.
  83.  
  84. Während der Programmentwicklung ist es nicht nötig, die oben gezeigte Directory-Struktur aufzubauen. Stattdessen können alle Resourcen direkt im Application-Directory stehen (das ja im Pfad liegt), was die Handhabung der Dateien während der Programmerstellung erleichtert. Vor der Veröffentlichung sollte dann das Resources-Directory mit den landesspezifischen Directories erzeugt werden. Zum Testen der verschiedenen Übersetzungen ist es am einfachsten, die Maschine kurzzeitig mit 'COUNTRY UK' bzw. anderen Ländern umzuschalten. Wird danach die Application gestartet, so stellt ResFind das zu testende Land ein. Ein Umschalten des Landes nach dem Programmstart hat natürlich keine Auswirkungen.
  85.  
  86. Damit der Endanwender die Application seinen Wünschen gemäß einstellen kann, sollte ein Hinweis (Muster s.u.) auf ResFind in der Programmdokumentation stehen, der erklärt, wie der Endanwender mit Hilfe der beschriebenen Variablen und der Konfiguration seiner Maschine die gewünschte Sprache erhält. Bei normaler Konfiguration sollte aber gewährleistet sein, daß der Endanwender ohne weitere Eingriffe eine ihm genehme Sprache erhält.
  87.  
  88. Natürlich muß ResFind irgendwann aufgerufen werden, damit es die Pfadvariable richtig setzen kann. Um auch auf kurzfristige Änderungen des Anwenders zu reagieren, ist die !Run-Datei der richtige Ort. Damit ResFind nicht unnötig oft auf der Platte ist, solltest Du die !Run-Datei so schreiben, daß ResFind sowohl im Resources-Directory als auch im Library-Directory des Systems gesucht wird. Also etwa so:
  89.  
  90.    Set Dummy$Path <Run$Path>,<Obey$Dir>.Resources.
  91.    Run Dummy:ResFind ProgName
  92.    Unset Dummy$Path
  93.  
  94. Es wird zunächst eine neue Pfadvariable (Dummy$Path) erzeugt.Zunächst wird im RunPath des Systems und dann im eigenen Resources-Directory nach ResFind gesucht und dieses mit dem Programmnamen als Parameter gestartet. Anschließend wird die temporäre Pfadvariable wieder gelöscht.
  95.  
  96. Eine komplette !Run-Datei (hier von !ModulInfo) sieht dann so aus:
  97.  
  98.    |
  99.    | !Run file for !ModulInfo
  100.    |
  101.    IconSprites <Obey$Dir>.!Sprites
  102.    WimpSlot -min 64k -max 64k
  103.    Set Dummy$Path <Run$Path>,<Obey$Dir>.Resources
  104.    Run Dummy:ResFind ModulInfo
  105.    Unset Dummy$Path
  106.    RMEnsure MessageTrans 0.06 RMLoad <ModulInfo$Dir>.Modules.MsgTrans
  107.    RMensure MessageTrans 0.06 RMLoad System:Modules.MsgTrans
  108.    RMEnsure MessageTrans 0.06 Error 0 ModulInfo needs at least MessageTrans 0.06
  109.    RMEnsure InterfaceManager 2.00 RMLoad <ModulInfo$Dir>.Modules.interface
  110.    RMensure InterfaceManager 2.00 RMLoad System:Modules.interface
  111.    RMEnsure InterfaceManager 2.00 Error 0 ModulInfo needs at least InterfaceManager 2.00
  112.    WimpSlot -min 64k -max 64k
  113.    Run <ModulInfo$Dir>.!RunImage
  114.  
  115.  
  116. Die !Help-Datei sollte dann eine Obey-Datei sein, die auf entsprechende Weise das !Help in der passenden Sprache startet. Also etwas so
  117.  
  118.    Set Dummy$Path <Run$Path>,<Obey$Dir>.Resources
  119.    Run Dummy:ResFind ModulInfo
  120.    Unset Dummy$Path
  121.    Filer_Run ProgNameRes:Help
  122.  
  123. Filer_Run ist leider erst ab RISC OS 3 verfügbar.
  124. Der eigentlich Help-Text sollte nicht !Help heißen, da sonst Probleme auftreten, wenn keine passende Sprache verfügbar ist. ResFind setzt in diesem Fall ja das Application-Directory in die Pfadvariable, so daß dann erneut das !Help gestartet würde --> Endlosschleife!
  125.  
  126.  
  127. Disclaimer:
  128. ===========
  129.  
  130. Die Autoren sind in keiner Weise haftbar für Schäden, gleich welcher Art, die durch die Benutzung oder Nichtbenutzung von ResFind entstehen.
  131.  
  132.  
  133.  
  134. Anwender-Doku
  135. =============
  136.  
  137. (Grundlage für die Programmdokumentation - <ProgName> bitte durch den Namen der Application ohne das ! ersetzen)
  138.  
  139. !<ProgName> paßt sich automatisch an die Sprache des Rechners an, falls die Meldungen usw. in der Sprache vorhanden sind. Dazu befindet sich in der Application ein Directory Resources, in dem sich für jede Sprache ein Directory mit deren Namen befindet. Sollte Ihre Sprache dort nicht zu finden sein, können Sie gerne das Directory einer anderen kopieren und den Inhalt übersetzen.
  140. Beim Starten des Programmes wird ein Utility namens ResFind aufgerufen, welches die konfigurierte Sprache ausliest und nachschaut, ob das passende Sprach-Directory zu finden ist. Anderenfalls läuft das Programm in englisch (UK). Durch ein paar Variablen, die am besten in der !Boot-Datei des Rechners gesetzt werden, kann die Sprachsuche Ihren eigenen Bedürfnissen angepaßt werden. Damit kann z.B. erreicht werden, daß ein Programm immer in einer bestimmten Sprache läuft (z.B., weil die Übersetzung in die Landessprache nicht so gelungen ist). Weiterhin ist es möglich, Sprachen anzugeben, nach denen gesucht wird, bevor Englisch an die Reihe kommt.
  141. Die Steuerung erfolgt durch folgende drei System-Variablen, die am besten in der System-!Boot-Datei gesetzt werden sollten:
  142. <ProgName>$Language, ResFind$LanguagesPref und ResFind$Languages$Suff.
  143. Beim Aufruf der Application sucht ResFind nach der ersten Sprache, die unterstützt wird entlang folgender Liste von Sprachen:
  144. 1. Inhalt der Variablen <ProgName>$Language
  145. 2. Inhalt der Variablen ResFind$LanguagesPref
  146. 3. Die konfigurierte Sprache
  147. 4. Inhalt der Variablen ResFind$LanguagesSuff
  148. 5. UK
  149.  
  150. Nehmen wir als Beispiel einen norwegischen User (weil von dort so viel gute Software kommt), der seine Maschine auf 'Norway' konfiguriert hat. Nun ist diese Sprache im restlichen Europa nicht sehr verbreitet, weswegen ein nicht norwegisches Programm üblicherweise keine passende Übersetzung anbieten wird. Unser User ist aber sehr sprachbegabt und spricht noch sehr gut deutsch und französisch, wohingegen das englisch nur für Notfälle ausreicht. Er möchte also, soweit möglich, vor der englischen Version lieber eine deutsche oder französische, falls vorhanden. Er schreibt demnach in seine System-!Boot-Datei die Zeile
  151. *Set ResFind$LanguagesSuff Germany,France
  152. Wird nun eine Application, die (wie diese) ResFind verwendet aufgerufen, läuft das Programm in der ersten angebotene Sprache aus der Liste 'Norway,Germany,France,UK'.
  153. Hat dieser User z.B. eine Application !Otto, die die Sprache 'Humorvoll' mit entsprechend amüsanten Meldungen bietet, dann genügt die Zeile
  154. *Set Otto$Language Humor
  155. in der !Boot-Datei, um sicherzustellen, daß !Otto humorvoll läuft - egal, was in den anderen Variablen steht.
  156.  
  157.