Mit dieser Klasse kann man komfortabel selbst angelegte Sprachdateien im INI Format auslesen.
Dazu erstellt man eine Datei im INI Format mit Sektionen und Keys, also z.B. so:
[SektionA]001=Hallo Welt!
002=Programm schließen
003=Hilfe anzeigen...
Mit der Klasse kann man nun als Eigenschaft oder direkt diese Sektion angeben (SektionA) und dann einen gewünschten Key auslesen z.B. Key "001" und dann bekommt man den entsprechenden String zurück.
Man kann aber noch Zeilenumbrüche und Variablenplatzhalter im String einbauen die dann von der Klasse entsprechend verarbeitet werden. Hier ein Beispiel:
[SektionB]001=Meine erste Variable lautet: %1. Jetzt der Zeilenumbruch\nUnd das ist die zweite Variable: %2
Der Delimeter "\n" ist in der Klasse schon als Standard festgelegt, kann aber noch geändert werden. Wenn man nun den String mit den Platzhaltern aufrufen will, ausgefüllt mit unseren beiden Variablen dann kann man wie folgt vorgehen:
ReadLine
("C:\Sprachdatei.lng","SektionB","001","","\n",Var1,Var2)
Die Variablen Var1 und Var2 können durch eigene ersetzt werden. Die erste Variable wird dann im String an der Stelle "%1" geschrieben und die zweite Variable wird an der Stelle "%2" im String geschrieben.
Dort wo sich der Zeilenumbruchsidentifizierer befindet, also "\n", dort wird dann auch ein Zeilenumbruch eingefügt (vbNewLine).
Public Class MultiLanguage
Private mSection As String = ""
Private mDefault As String = ""
Private mLineBreak As String = "\n"
Private INI As New MyINI
Public Property Section() As String
Get
Section = mSection
End Get
Set(ByVal Value As String)
mSection = Value
End Set
End Property
Public Property DefaultString() As String
Get
DefaultString = mDefault
End Get
Set(ByVal Value As String)
mDefault = Value
End Set
End Property
Public Property LineBreak() As String
Get
LineBreak = mLineBreak
End Get
Set(ByVal Value As String)
mLineBreak = Value
End Set
End Property
Sub New(ByVal FileName As String)
INI.INIFile = FileName
INI.Read()
End Sub
Public Sub Refresh(ByVal FileName As String)
INI.INIFile = FileName
INI.Read()
End Sub
''' <summary>
''' Diese Funktion ließt eine bestimmte Zeile aus der Sprachdatei heraus.
''' Die Eigenschaften Path und Section müssen hierfür schon vorher festgelegt sein.
''' </summary>
''' <param name="LineID">Die Zeilen ID die ausgelesen werden soll</param>
''' <param name="PlaceHolderVars">Die Variablen für die Platzhalter im String</param>
Public Function GetLine(ByVal LineID As String, ByVal ParamArray PlaceHolderVars() As String) As String
GetLine = GetLine(mSection, LineID, mDefault, mLineBreak, PlaceHolderVars)
End Function
''' <summary>
''' Diese Funktion ließt eine bestimmte Zeile aus der Sprachdatei heraus.
''' Hierfür müssen keine Eigenschaften vorher festgelegt worden sein da man diese alle hier angeben muss.
''' </summary>
''' <param name="Section">Die Sektion in der sich der auszulesende String befindet</param>
''' <param name="Key">Der Key der Zeile der ausgelesen werden soll</param>
''' <param name="Default">Ein Defaultwert der zurückgegeben wird falls die auszulesende Zeile nicht existiert</param>
''' <param name="LineBreak">Ein String der als Zeilenumbruchidentifikation dient z.B.: \n</param>
''' <param name="PlaceHolderVars">Die Variabeln die durch die Platzhalter im String ersetzt werden sollen (%1 bis %X...)</param>
Public Function GetLine(ByVal Section As String, ByVal Key As String, ByVal [Default] As String, ByVal LineBreak As String, ByVal ParamArray PlaceHolderVars() As Object) As String
Try
Dim Parameters() As String
Dim Value As String = ""
Value = INI.GetINIValue(Section, Key)
'Platzhalter suchen (%1, %2, %3 ...) und Variablen aus dem Paramter Array einfügen
'Als erstes den String nach % splitten
Parameters = Split(Value, "%")
'Dann prüfen ob Parameter angabe mit anzahl der Platzhalter übereinstimmt. Wenn OK dann weiter
If Parameters.Length = PlaceHolderVars.Length + 1 Then
For i As Integer = 0 To Parameters.Length - 2
Value = Value.Replace(("%" & i + 1).ToString, (PlaceHolderVars(i)).ToString)
Next i
Else
Throw New Exception("Parametercount doesn't match to placeholdercount!")
End If
'Alles fertig und weiter gehts mit den Zeilenumbrüchen
'Falls kein Delimeter angegeben wurde dann den Wert übergeben und beenden
If mLineBreak = "" Then
Return Value
End If
'Zeilenumbrüche hinzufügen
Value = Value.Replace(LineBreak, vbNewLine)
Return Value
Catch ex As Exception
Return [Default]
End Try
End Function
End Class
2 Kommentare zum Snippet