Try Catch / Mehrsprachigkeit

05/07/2008 - 11:35 von Maxi | Report spam
Hallo,

über Try/Catch kann ich ja z.Bsp. bei Dateioperationen einen
Ausnahmefehler abfangen, nur danach ist ja quasi der Programm-Ablauf
beendet.

Wie kann man sicherstellen (wenn man den aktuellen Schritt im eigenen
Programm eher unktitisch sieht) dass das Programm fortgesetzt werden
kann?

An manchen Stellen würde es mir ausreichen auf einen Ausnahmefehler zu
reagieren (z.Bsp. wàhrend dem einlesen einer Datei), das ganze in
einer Log-Datei schreiben und den nàchsten Schritt fortsetzen?

Wie macht ihr Euer Programm Mehrsprachentauglich wobei ich von Windows
die Einstellung der Sprache auslese und entsprechend die Labels,
Texte, Button-Beschriftung uvm anpasse und wenn eine Sprache nicht
verfügbar ist auf Englisch zurückfalle?

Es müsste eben einfach sein (wegen der Texte). Bisher habe ich im
init() der Form eine ganze Reihe an Stringvariablen die ich vorbelege
und dann im Programm mit .text an das Element gebe.

Ist mit Anzahl der Zeilen aber ehr unübersichtlich geworden.

Eine XML-Datei als Datecontainer wàre sicher auch nicht schlecht (da
anpassbar) aber ich bin noch nicht weitergekommen mit dem einlesen der
XML-Datei bzw einer Funktion die mir einfachst einen Text unabhàngig
der Gross-Kleinschreibung des Element gewàhrleistet.

Ach ja, bei XML to LINQ benötige ich dot.net 3.5, brauche ich das auch
auf dem ausführenden System oder reicht es beim erstellenden System?


Viele Grüsse,
Maxi
 

Lesen sie die antworten

#1 Martin H.
05/07/2008 - 13:04 | Warnen spam
Hallo Maxi,

über Try/Catch kann ich ja z.Bsp. bei Dateioperationen einen
Ausnahmefehler abfangen, nur danach ist ja quasi der Programm-Ablauf
beendet.



Nein, das ist nicht der Fall. Du behandelst ja den Fehler. Das Programm
wird nur dann beendet, wenn Du den Fehler nicht behandelst, da der
Compiler ja nicht weiß, was er sonst besseres machen soll.

Wie kann man sicherstellen (wenn man den aktuellen Schritt im eigenen
Programm eher unktitisch sieht) dass das Programm fortgesetzt werden
kann?



Das mußt DU programmieren.

An manchen Stellen würde es mir ausreichen auf einen Ausnahmefehler zu
reagieren (z.Bsp. wàhrend dem einlesen einer Datei), das ganze in
einer Log-Datei schreiben und den nàchsten Schritt fortsetzen?




Try
...
Catch
WriteIntoLogFile("Fehler: Konnte Datei 'xyz.txt' nicht öffnen")
End Try


Wie macht ihr Euer Programm Mehrsprachentauglich wobei ich von Windows
die Einstellung der Sprache auslese und entsprechend die Labels,
Texte, Button-Beschriftung uvm anpasse und wenn eine Sprache nicht
verfügbar ist auf Englisch zurückfalle?

Es müsste eben einfach sein (wegen der Texte). Bisher habe ich im
init() der Form eine ganze Reihe an Stringvariablen die ich vorbelege
und dann im Programm mit .text an das Element gebe.

Ist mit Anzahl der Zeilen aber ehr unübersichtlich geworden.

Eine XML-Datei als Datecontainer wàre sicher auch nicht schlecht (da
anpassbar) aber ich bin noch nicht weitergekommen mit dem einlesen der
XML-Datei bzw einer Funktion die mir einfachst einen Text unabhàngig
der Gross-Kleinschreibung des Element gewàhrleistet.



Beim Thema Mehrsprachigkeit gehe ich folgendermaßen vor:

In jedem Form gibt es eine sub "TranslateMe", die dann die einzelnen
String Controls übersetzt. Das sieht dann bei mir folgendermaßen aus:

Private Sub TranslateMe()
cmdCancel.Text = _
Translation.TranslateDialog(Translation.SettingConstants.CANCEL, _
cmdCancel.Text)

cmdOK.Text = _
Translation.TranslateDialog(Translation.SettingConstants.OK, cmdOK.Text)

cmdReset.Text = _
Translation.TranslateDialog(Translation.SettingConstants.RESET, _
cmdReset.Text)
End Sub

In der Klasse "Translation" gibt es dann für jeden zu übersetzenden
String einen Enumeration-Eintrag und für jedes Form oder Klasse eine
Enumeration sowie eine Sub, die dann die Strings in die jeweilige
Sprache übersetzt. Vorher wird natürlich die Sprachdatei eingelesen und
die Variablennamen als Keys in einer Collection verwendet (für schnellen
Zugriff). GetVariableValue liest dann den Text für die jeweilige
Variable aus.

Public Enum SettingConstants As Integer
CANCEL
OK
RESET
End Enum

Public Shared Function TranslateSettings(ByVal ThisText As _
SettingConstants, ByVal DefaultValue As String) As String
Dim ThisVariable As String = _SETTINGS
ThisVariable &= [Enum].GetName(GetType(SettingConstants), ThisText)

Return GetVariableValue(ThisVariable, DefaultValue)
End Function

Private Shared Function GetVariableValue(ByVal ThisVariable As String,
ByVal DefaultValue As String) As String
Dim retVal As String

Try
retVal = iTranslationData.Item(ThisVariable).ToString
Catch
retVal = DefaultValue
End Try

retVal = Replace(retVal, "", vbCrLf)

Return retVal
End Function

Alternativ könnte man das auch über eine Datenbank (z.B.
Accessdatenbank) machen.

Beste Grüße,

Martin

Ähnliche fragen