<< AmigaBasic >> WindowPtr
HelloLocalWorld.c
schreiben. Das
letztendliche Programm sieht dann ungef�hr so aus:
#include "HelloLocalWorld_Cat.h" #include <clib/exec_protos.h> struct Library *LocaleBase; void main(int argc, char *argv[]) { /* �ffne die locale.library. (Kein Abbruch, wenn sie nicht da ist, weil dann einfach die eingebauten Strings verwendet werden. Aus diesem Grund auch keine Verwendung des AutoOpening, auch wenn es der Compiler beherrscht.) */ LocaleBase = OpenLibrary("locale.library", 38); OpenHelloLocalWorldCatalogs(NULL, NULL); printf(GetString(MSG_Hello)); CloseHelloLocalWorldCatalog(); if (LocaleBase) CloseLibrary(LocaleBase); }
Die Funktion GetString pr�ft, ob die gew�nschten Kataloge vorhanden sind und liefert einen Zeiger auf einen String, entweder den eingebauten oder den Katalogstring. (In unserem Fall den deutschen String.)
Der Hauptunterschied zum gewohnten HelloWorld.c ist also (abgesehen von der minimalen Initialisierung und dem Gegenst�ck am Programmende), Strings durch einen Funktionsaufruf zu ersetzen. Man braucht also eine Datei `HelloLocalWorld_Cat.c', die die Funktionen OpenHelloLocalWorld, GetString, CloseHelloLocalWorld_Cat.h und die eingebauten Strings enth�lt (dies k�nnte ein Array sein, das unter anderem
array[MSG_Hello] = "Hello, local world.\n";enth�lt) und ein Includefile `HelloLocalWorld_Cat.h', das die ID's wie MSG_Hello definiert. Es ist nicht n�tig zu wissen, wie diese Dateien intern arbeiten, insbesondere ben�tigt man auch keine Kenntnis der
locale.library
!
Dazu gibt es verschiedene Kataloggeneratoren (im Folgenden KG), n�mlich
`CatComp' (nur f�r Developer), KitCat
(nur deutsche
Dokumentation, was hierzulande kein Problem ist), `MakeCat' (das ich
nicht kenne) und FlexCat
(das ich empfehle, einerseits, weil
es sehr flexibel im erzeugten Source ist und z.B. Lokalisierung unter 2.0
sowie beliebige Programmiersprachen unterst�tzt, selbst Amiga-E, Cluster,
Pascal, ... und andererseits, weil es von mir ist ;-) ), die diese Dateien
sowie die Kataloge erzeugen. (Der obige Quelltext k�nnte je nach KG
leicht unterschiedlich aussehen.) Siehe Aminet, directory `dev/misc'.
Wie funktionieren diese KGs? Zun�chst erzeugt man eine sogenannte
Katalogbeschreibung
(Catalog description
), die so aussehen
k�nnte:
; Mit einem Semikolon beginnende Zeilen sind Kommentare # language english ; die Sprache der eingebauten Strings # version 0 ; die Katalogversion (0 = beliebig) MSG_Hello (1/15/30) Hello, local worldJeder String wird durch zwei Zeilen wie die letzten beiden definiert: MSG_Hello ist die String-ID, (1/15/30) gibt den Wert der ID sowie die minimale und maximale L�nge an. (Diese Argumente k�nnen auch weggelassen werden, in welchem Fall einfach die n�chste freie ID verwendet wird.)
Nun schreiben wir das Programm. Sobald es fertig ist, wird mit dem KG eine sogenannte Katalog�bersetzung (eine f�r jede andere Sprache als die eingebaute) erzeugt, die so aussehen k�nnte:
; Mit einem Semikolon beginnende Zeilen sind Kommentare ## language deutsch ; the catalog language ## version $VER: Deutsch.catalog 1.0 (22.12.93) ; the catalog files version string MSG_Hello ; Hello, local worldBeachten Sie die leere Zeile nach der String-ID! (Die Argumente von ## language und ## version w�ren vielleicht leer.) Hier m�ssten jetzt die deutschen Strings eingesetzt werden. Mit dem KG wird daraus dann der eigentliche
Katalog
erzeugt. (Beachten Sie auch, da�
hier die Angaben �ber String-ID und Stringl�nge fehlen: Sie werden
aus der Katalogbeschreibung �bernommen.
Wenn das Programm ver�ndert wird (neue Strings, andere L�ngen) und die Katalogbeschreibung sich damit ebenfalls �ndert, dann kann der KG analog benutzt werden, um auch die Katalog�bersetzung und damit den Katalog auf den neuesten Stand zu bringen.
<< AmigaBasic >> WindowPtr