Funktion:
LOCALIZR ist ein Tool für Programmierer, die mehrsprachliche
Varianten ihrer Programmsourcen pflegen müssen (Download hier). Es ist “programmiererfreundlich”: Sprachvarianten von Stringkonstanten werden vor jedem String in der Programmsource in besonderen Kommentaren im Klartext abgelegt. Es wird keine Resourcendatei oder ein ausgelagertes Dictionary benutzt. (Dies erschwert natürlich wiederum die Zusammenarbeit mit den Übersetzern).
Beispiel für einen LOCALIZR-Sprachkommentar in einer
C-Source, der einen englischen (Sprachcode “E”) und einen
deutschen (Sprachcode “D”) String definiert:
/*~LANGUAGE E:"Hello, world!\n" D:"Hallo, Welt!\n" */
printf("Hello, world!\n");
|
Sprachcode und String müssen ohne Spaces und Zeilenumbrüche hintereinander stehen. Pro
String können mehrere Sprachcodes angegeben werden. Das folgende liefert denselben String
für die beiden Sprachen “E” und “US”:
/*~LANGUAGE E,US:"Hello, world!\n"
D:"Hallo, Welt!\n" */
printf("Hello, world!\n");
|
Vor der Übersetzung der Sourcen kopiert LOCALIZR den Text einer ausgewählten
Sprachvarianten aus den Kommentarfeldern in die Stringkonstanten und verändert so direkt
den Programmcode. Die Größe und Geschwindigkeit des übersetzten Programms wird daher
nicht beeinträchtigt. Es müssen auch keine neuen Dateien in die Versionskontrolle eingetragen
werden.
Aufruf:
LOCALIZR ist kommandozeilen-orientiert. Aufrufsyntax:
LOCALIZR.EXE Sprachcode [/make] [/c | /pas] [/crlf | /cr] inputfile [outputfile]
Parameter
|
Bedeutung
|
Sprachcode
|
Kürzel der anzulegenden oder einzutragenden Sprachvariante.
|
/make
|
Die Sprache soll in die Source neu eingetragen werden.
|
/c
|
Der Input ist unabhängig von der Extension eine C-Source
|
/pas
|
Der Input ist unabhängig von der Extension eine Pascal-Source.
|
/lf
|
Die Ausgabe erfolgt unabhängig vom Inputformat mit
UNIX-EndOfLine-Zeichen
|
/crlf
|
Die Ausgabe erfolgt unabhängig vom Inputformat mit
DOS/Windows-EndOfLine-Zeichen
|
/strip
|
Sprachkonserven nach Wandlung aus der Source entfernen.
|
inputfile
|
Name der C- oder Pascal-Source, die verarbeiten
werden soll (die Extension muss .PAS, .C, .H oder
.CPP sein).
|
outputfile
|
Name der geänderten Source. Default: inputfile,
d.h. die Eingabedatei wird überschrieben.
|
Beispiel:
Das bekannte “Hello-world”-Programm soll mehrsprachlich werden.
1) Die ursprüngliche Programm-Source:
// Hello.c - jeder kennt es, es gibt nur "Hello, world" aus!
#include <stdio.h>
int main() {
printf("Hello, world!\n");
printf("You called me again?\n");
}
|
2) Markieren der vorhandenen Sprachkonserven als “E” (Englisch):
Aufruf:
localizr E /make /c hello.c hello1.c
Ergebnis:
// Hello.c - jeder kennt es, es gibt nur "Hello, world" aus!
#include <stdio.h>
int main() {
/*~LANGUAGE E:"Hello, world!\n" */
printf("Hello, world!\n");
/*~LANGUAGE E:"You called me again?\n" */
printf("You called me again?\n");
}
|
3) Hinzufügen der neuen Sprache “DE” (deutsch). Neue Sprachen können zu jedem
Zeitpunkt in eine Source eingetragen werden. Die Texte für die neue Sprache werden aus den
Stringkonstanten initialisiert.
Aufruf:
localizr DE /make /c hello2.c hello3.c
Ergebnis:
// Hello.c - jeder kennt es, es gibt nur "Hello, world" aus!
#include <stdio.h>
int main() {
/*~LANGUAGE E:"Hello, world!\n" DE:"Hello, world!\n" */
printf("Hello, world!\n");
/*~LANGUAGE E:"You called me again?\n" DE:"You called me again?\n" */
printf("You called me again?\n");
}
|
4) Übersetzen der englischen Texte ins Deutsche (Editieren der Sprachkonserven für
Sprache “DE”). Dies ist die eigentliche Arbeit.
Ergebnis:
// Hello.c - jeder kennt es, es gibt nur "Hello, world" aus!
#include <stdio.h>
int main() {
/*~LANGUAGE E:"Hello, world!\n" DE:"Hallo, Welt!\n" */
printf("Hello, world!\n");
/*~LANGUAGE E:"You called me again?\n" DE:"Noch ein Aufruf?\n" */
printf("You called me again?\n");
}
|
5) Einsetzen einer bestimmten Sprachvariante in die Stringkonstanten (hier “DE”). Dieser
Schritt findet öfter statt, am besten vor jeder Neuübersetzung. LOCALIZR definiert zusätzlich
das Symbol LANGUAGE_<Sprache>, damit durch bedingte Compilierung die
Programmfunktion (über das Ersetzen von Strings hinaus) an die gewählte Sprache angepasst
werden kann.
Aufruf:
localizr DE /c hello3.c hello4.c
Ergebnis:
#define LANGUAGE_DE
// Hello.c - jeder kennt es, es gibt nur "Hello, world" aus!
#include <stdio.h>
int main() {
/*~LANGUAGE E:"Hello, world!\n" DE:"Hallo, Welt!\n" */
printf("Hallo, Welt!\n");
/*~LANGUAGE E:"You called me again?\n" DE:"Noch ein Aufruf?\n" */
printf("Noch ein Aufruf?\n");
}
|
|