WaBis

walter.bislins.ch

xlang: xMsg Funktionen

Mit den xMsg Funktionen werden die Strings ihrer ASP-Anwendung in eine andere Sprache übersetzt. Es gibt verschiedene Varianten von xMsg Funktionen.

xMsg: Einfache Übersetzung

Ein String ihrer ASP-Anwendung wird einfach mit der Funktion xMsg() in eine andere Sprache übersetzt:

s = xMsg( "String" )
Write xMsg( "String" )

Hinweis

Das xlang-Tool durchsucht alle ihre ASP-Dateien nach xMsg Aufrufen, in denen das erste Argument ein String ist, und fügt diese Strings in die Sprach-Dateien ein. Wenn sie als erstes Argument anstelle eines Strings eine Variable verwenden, muss bei der Zuweisung des Strings zur Variablen die Funktion xMsgD verwendet werden, damit das Tool den zu übersetzenden String in ihrer Anwendung findet.

 Siehe xMsgD: Variablen übersetzen

xMsgN: Übersetzung mit Platzhaltern

Es gibt Varianten der xMsg Funktion, mit denen Platzhalter in den zu übersetzenden Text eingefügt werden können, zum Beispiel Zahlenwerte:

Write xMsg1( "Input ($1) is ok.", a )
Write xMsg2( "a = $1 and b = $2.", a, b )

Die Zahl hinter xMsg gibt an, wie viele Platzhalter im String vorkommen und wie viele Argumente also die Funktion hat.

Die Platzhalter im String müssen mit einem $ Zeichen beginnen, gefolgt von einer Zahl. Die Zahl hinter dem $ gibt an, welches Argument an der entsprechenden Stelle in den String eingefügt werden soll. Ein Platzhalter darf auch mehrfach im String verwendet werden.

In der Sprach-Datei kann der gleiche Platzhalter auch an anderer Stelle oder in anderer Reihenfolge verwendet werden:

lang/de/xlang.txt

Src = myapp.asp: 123
Key = Input ($1) is ok.
Txt = Die Eingabe ($1) ist OK.

Src = myapp.asp: 124
Key = a = $1 and b = $2.
Txt = b = $2 und a = $1.

xMsgD: Variablen übersetzen

Im Prinzip kann man bei den xMsg Funktionen statt Strings auch Variablen als Argumente übergeben:

text = "String1"
if SomeCheck() then
  text = "String2"
end if
 :
Write xMsg( text )

Dabei entsteht aber folgendes Problem: Wie findet das xlang-Tool nun die zu übersetzenden Strings "String1" und "String2" in ihrer Anwendung?

Die Lösung ist einfach: Verpacken sie die Strings in die Funktion xMsgD wiefolgt:

text = xMsgD( "String1" )
if SomeCheck() then
  text = xMsgD( "String2" )
end if
 :
Write xMsg( text )

Die Funktion xMsgD gibt einfach das Argument als Returnwert zurück. Durch einpacken der Strings in xMsgD findet das xlang-Tool diese Strings in ihrer Anwendung und fügt sie zum Übersetzen in die Sprach-Dateien ein. Die eigentliche Übersetzung passiert dann erst beim Aufruf von xMsg( text ). Da jetzt beide Strings in den Sprach-Dateien vorhanden sind, wird in jedem Fall die korrekte Übersetzung ausgegeben.

Weitere Anwendung von xMsgD

Variable Übersetzungen kommen auch vor, wenn eine Liste von Texten existiert und erst zur Laufzeit einer dieser Texte ausgewählt wird. Angenommen wir haben folgende Text-Liste:

InputTypes = Array( "String", "Integer", "Real Number", "Date" )

Bei der Ausgabe wird folgendermassen auf die Liste zugegriffen:

Write xMsg1( "You must enter a $1 in the text field!", xMsg( InputTypes(tp) ) )

Beim zweiten Aufruf von xMsg wird als Argument ein Array-Element (also eine Variable) übergeben. Da in diesem Fall aber in den Sprach-Dateien die enstprechenden Strings nicht vorhanden sind, werden sie auch nicht übersetzt.

Die Lösung ist auch hier einfach: Packe alle Strings bei der Definition des Arrays in xMsgD Funktionen und diese Strings werden in die Sprach-Dateien aufgenommen und können wie oben übersetzt werden:

InputTypes = Array( _
  xMsgD("String"), _
  xMsgD("Integer"), _
  xMsgD("Real Number"), _
  xMsgD("Date") _
)

Warum xMsgD?

Warum wird denn nicht einfach gleich die Übersetzung der Strings im Array gespeichert, indem statt xMsgD einfach nur xMsg verwendet wird?

Das Problem ist, dass zu diesem Zeitpunkt vielleicht noch gar keine Sprach-Datei per Lang.SetLanguage geladen wurde. Vielleicht wird erst später von einer Konfigurations-Datei eingelesen, welche Sprache für die Ausgabe verwendet werden soll. Daher kann die Übersetzung mit xMsg auch erst direkt bei der Ausgabe mit Write erfolgen!

Merke

  • xMsgD definiert einen String (daher das D)
  • xMsg übersetzt einen String
Weitere Infos zur Seite
Erzeugt Mittwoch, 3. Februar 2010
von wabis
Zum Seitenanfang
Geändert Samstag, 18. Juli 2015
von wabis