4. Übersetzen von R-BASIC ProgrammenR-BASIC unterstützt das Übertragen von Programmen in eine andere Sprache sehr komfortabel. Der Einsteiger mag es für eine gute Idee halten, den Quellcode durchzugehen, jeden Textstring zu ändern und dann das Programm neu zu compilieren. Das wäre jedoch nicht nur mühsam und fehleranfällig, sondern müsste nach jeder noch so kleinen Änderung des Programms wiederholt werden.Deswegen wird mit R-BASIC ein 'Übersetzer' Tool (R-BASIC Translator) mitgeliefert. Dieses Tool öffnet ein fertig compiliertes R-BASIC-Programm, liest die zu übersetzenden Strings aus, ermöglicht deren Übersetzung und speichert eine übersetzte Kopie des Originalprogramms. Die Übersetzungsdaten, d.h. die Originaltexte und die übersetzten Texte, werden außerdem in einer eigenen Datei (im folgenden 'Übersetzungsdatei' genannt) abgelegt, so dass sie wiederverwendet werden können, wenn später eine neue Version des Programms übersetzt werden soll. Ein weiterer Vorteil dieses Prinzips ist es, dass die Übersetzung nicht direkt vom Programmierer ausgeführt werden muss. Vielmehr kann auch ein Sprachkundiger, der keine Ahnung vom Programmieren hat, nach kurzer Einweisung Ihr Programm übersetzen. Da in den meisten Fällen die Originalversion und die übersetzte Version den gleichen Namen haben und auch am gleichen Ort gespeichert werden sollen bzw. müssen (z.B. bei Libraries), ist es erforderlich, die übersetzte Version in einer zweiten PC/GEOS-Installation, dem sogenannten Target (engl. target = Ziel), abzulegen. Dieses Target müssen Sie vorher anlegen und den Pfad dorthin dem 'Übersetzer' einmalig mitteilen. Wenn Sie alle zu Ihrem Projekt gehörenden Dateien in die Target-Installation kopieren, können Sie das Installationspaket für die übersetzte Version komplett unter dem Target anlegen. Um ein R-BASIC-Programm zu übersetzten müssen Sie also folgendermaßen vorgehen:
Anweisungen an das Übersetzer-Tool
In bestimmten Situationen ist es gar nicht gewünscht, wenn bestimmte Strings durch einen Übersetzer geändert werden können. Wenn Sie z.B. ein Spiel programmieren, dessen Levels durch Strings in DATA-Zeilen beschrieben werden, müssen diese Level-Strings vor versehentlichen Änderungen durch den Übersetzer geschützt werden. Ein häufiger Fall sind auch die Zugriffs-Flags oder Dateinamen bei Datei-Operationen (z.B. FileOpen), die als Strings im Quelltext stehen. Ein anderes potentielles Problem stellen Strings dar, die eine bestimmte Länge nicht überschreiten dürfen.
Zur Lösung dieser Probleme bietet R-BASIC die Steueranweisungen NoTranslate und TranslateLen an. Diese können überall im Code, sowohl im BASIC-Code als auch im UI-Code, stehen. Sie steuern das Anlegen der Übersetzungsinformationen, werden aber selbst nicht in im compilierten Code abgespeichert.
NoTranslateSyntax im Code: NoTranslate Die Anweisung NoTranslate bewirkt, dass alle Textstrings, die in der darauf folgenden Anweisung (bis zum Zeilenende oder dem folgenden Doppelpunkt) stehen, vom Übersetzter Tool nicht geändert werden können. In allen drei folgenden Code-Beispielen können die Strings 'Ich bin' und 'Jahre alt.' nicht übersetzt werden. Der String 'Das ist viel' ist wieder übersetzbar. |
NoTranslate Print "Ich bin"; n; "Jahre alt." Print "Das ist viel." |
NoTranslate : Print "Ich bin"; n; "Jahre alt." Print "Das ist viel." |
NoTranslate Print "Ich bin"; n; "Jahre alt." : Print "Das ist viel." |
|
Weitere Beispiele |
NoTranslate DATA "Ein", "Mops", "kam" 'alle nicht übersetzbar DATA "in", "die", "Küche" 'wieder übersetzbar |
NoTranslate FileCreate "info.txt", "orw" |
|
Beispiel im UI-Code: |
Button ApplyButton NoTranslate Caption$ = "Anwenden", 2 End Object |
TranslateLenSyntax im Code: TranslateLen n n: numerischer Wert - maximale Textlänge bei Übersetzung Die Anweisung 'TranslateLen n' bewirkt, dass allen Textstrings, die in der darauf folgenden Anweisung (bis zum Zeilenende oder dem folgenden Doppelpunkt) stehen, vom Übersetzer-Tool nur bis zu n Zeichen zugewiesen werden können. Der Standardwert für die maximale Länge übersetzter Texte ist 1024, der Maximalwert ist ebenfalls 1024. 'TranslateLen 0' ist identisch mit 'NoTranslate'. Beispiel: |
TranslateLen 32 CONST tempFile$ = "MyTmp GEOS File" 'max. 32 Zeichen CONST info$ = "Sind Sie sicher?" 'wieder frei übersetzbar. |
^ |