DevTrain Startseite Advanced Developers Conference vom 14.-15. Februar 2011  
  
  
SUCHEN:  
ARTIKEL ONLINE: 525   

Kategorien
.NET
Datenbanken
Web
XML

Allgemein
Camp
Foren
Events
Persönliche Einstellungen
Registrieren
Prämien Shop
Kontakt
Impressum
Über DevTrain

Autoren


   Autor: Rene Paschold Artikel Drucken
        
Lokalisierung die 2te: Ressourcedateien verwenden

Im Artikel Lokalisierung von Webseiten wurde auf Globalisierungs- und Lokalisierungsfunktionen welche automatisch in ASP .NET zur Verfügung stehen, eingegangen. Doch spätestens wenn es sich um umfangreiche Texte handelt, reichen diese Funktionen nicht mehr aus. Zu diesem Zweck können Resourcedateien mit dem ResourceManager gelesen werden.

Ressourcedateien allgemein

Das .NET Framework bietet dem Programmierer drei unterschiedliche Formate für Ressourcedateien an:

  • Binär
  • Text
  • XML

Dieser Artikel beschäftigt sich mit dem Format XML. Ressourcedateien dieses Formats haben die Dateiendung .resx und werden bei der Verwendung von Visual Studio .NET automatisch für jede Code-Behind-Klasse erstellt. In einer Ressourcedatei können Texte sowie Bilder gespeichert werden, die für einen bestimmten Kulturkreis definiert werden.

Für jeden Kulturkreis den man ansprechen will muss eine eigene Ressourcedatei erstellt werden. Dabei wird eine bestimmte Notation für den Namen der Datei benötigt Die folgende Tabelle zeigt diese benötigte Notation:

Dateiname Erklärung
texte.resx Standard-Ressourcedatei. Diese Datei wird immer dann verwendet wenn für einen ausgewählten Kulturkreis keine Ressourcedatei vorhanden ist.
texte.de-DE.resx Ressourcedatei mit deutschen Inhalten.
texte.en-GB.resx Ressoucedatei mit englischen Inhalten.

Erstellung von Ressourcedateien

Das .NET Framework bietet ein Programm mit dem man relativ einfach Ressourcedateien erstellen kann. Wer das Visual Studio .NET sein eigen nennen kann der halt eine wesentlich einfachere Methode um Ressourcedateien zu erstellen. Die folgende Abbildung zeigt den Visual Studio .NET Ressourcedateien Editor:

Um Ressourcedateien zum aktuellen Projekt hinzuzufügen öffnet man den Projektmappen-Explorer, klickt mit der rechten Maustaste auf das Projekt und wählt Hinzufügen->Neues Element hinzufügen:

Nachdem die Datei erstellt wurde kann man anfangen die Inhalte zu pflegen. Für das Beispielprojekt wurde folgende Ressourcedatei erstellt:

Eine zweite Datei wurde für den englischen Inhalt angelegt.

Dynamisches Ändern der Texte

Um das ganze jetzt entsprechend mit den WebControls auf der Website zu verknüpfen wird der ResourceManager verwenden.

Um die DropDownList zu füllen wird folgende Methode verwendet:

'## KulturInfo auslesen und DropDownList füllen
Private Sub LoadCultureList()

  '## Variablen definieren
  Dim cInfo() As Globalization.CultureInfo
  Dim listItem As ListItem

  '## Kulturinformationen auslesen
  cInfo = Globalization.CultureInfo.GetCultures( _
   Globalization.CultureTypes.SpecificCultures)

  '## Leeren Eintrag in die DropDownList schreiben
  listItem = New ListItem("---")
  ddlKultur.Items.Add(listItem)

  Dim strDisplay As String
  Dim strValue As String

  '## Alle verfügbaren Kulturkreise in die DropDownList schreiben
  For Each culture As Globalization.CultureInfo In cInfo

  strDisplay = culture.DisplayName & " (" & culture.Name & ")"
  strValue = culture.LCID.ToString()

  listItem = New ListItem(strDisplay, strValue)
  ddlKultur.Items.Add(listItem)

  Next

End Sub

Wenn ein anderer Eintrag aus der DropDownList gewählt wird, dann wird folgender Code ausgeführt:

'## Wenn die Kultur gewechselt wird dann ...
Private Sub ddlKultur_SelectedIndexChanged( _
 
ByVal sender As System.Object, _
 
ByVal e As System.EventArgs) _
 
Handles ddlKultur.SelectedIndexChanged

  Dim selectedCulture As String = ddlKultur.SelectedItem.Value

  '## DropDownList prüfen ob ausgewählt
  If (selectedCulture = "---") Then

    lblKName.Text = ""
    lblKShort.Text = ""

  Else

    '## CultureInfo anhand der ausgwählten Kultur setzen
    Dim cultureInfo As New Globalization.CultureInfo( _
    
Integer.Parse(selectedCulture))

    '## CulturInformation in den aktuellen Thread schreiben
    Threading.Thread.CurrentThread.CurrentCulture = cultureInfo
    Threading.Thread.CurrentThread.CurrentUICulture = cultureInfo

    '## Info Labels zuweisen
    lblKName.Text = cultureInfo.DisplayName
    lblKShort.Text = cultureInfo.Name

    '## Funktion aufrufen
    Me.SetKultur(Integer.Parse(selectedCulture))

  End If

End Sub

Zu guter letzt muss die entsprechende Ressourcedatei ausgelesen und der Inhalt den WebControls zugeordnet werden.

'## Informationen anhand der CultureInfo aus der Resourcedatei
'## lesen und die entsprechenden Labels und Buttons füllen
Private Sub SetKultur(ByVal Culture As Integer)
 
 
Dim rm As System.Resources.ResourceManager

  '## Prüfen ob Kutlur ausgewählt wurde
 
If (Culture <> 0) Then

    '## Übergebene CultureInfo in CultureInfo Instanz speichern
   
Dim kInfo As New System.Globalization.CultureInfo(Culture)

    Threading.Thread.CurrentThread.CurrentCulture = kInfo
    Threading.Thread.CurrentThread.CurrentUICulture = kInfo

    '## ResourceMananger initialsieren
   
rm = New System.Resources.ResourceManager("ResourceDateien.texte", _
     System.Reflection.Assembly.GetExecutingAssembly())

    '## Inhalten der ResourceDatei in die Labels schreiben
   
lblNachricht.Text = rm.GetString("nachricht")
    lblVorname.Text = rm.GetString("vorname")
    lblNachname.Text = rm.GetString("nachname")
    lblEmail.Text = rm.GetString("email")
    lblAnschrift.Text = rm.GetString("anschrift")
    lblLand.Text = rm.GetString("land")
    btnGo.Text = rm.GetString("senden")

  End If

End Sub

Sobald jetzt eine andere Kultur in der DropDownList gewählt wird ändert der ResourceManager die entsprechenden Texte. Wird versucht eine Kultur zu wählen für die keine Ressourcedatei erstellt wurde, dann wird automatisch die Standardressourcedatei gewählt!

Hier noch die zur Vollständigkeit die Page_Load Methode:

Private Sub Page_Load(ByVal sender As System.Object, _
 
ByVal e As System.EventArgs) _
 
Handles MyBase.Load

 
If Not (IsPostBack) Then Me.LoadCultureList()

End Sub

Viel Spaß beim testen :p


DevTrain Camp - Schneller zum .NET 3.5 Developer
 
Verwandte Artikel      Verlinkte Dokumente
    Keine verknüpften Dokumente
    Keine Links vorhanden

  Erfasst am: 10.11.2003
  Gültig bis: 08.02.2004
8 Ratings
Bewertung: 80,0%
schlecht    sehr gut  

 
© Copyright 2007 ppedv AG