DevTrain Startseite Visual Studio 1 Magazin  
  
  
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
        
ASP.NET 2.0 - Lokalisierung von Webseiten

Unternehmen weiten sich aus, das Internet wird immer mehr als zentrale Kommunikations-Plattform genutzt. Umso wichtiger ist es Webseiten in mehreren Sprachen zur Verfügung zu stellen.

Unter ASP.NET 1.1 war das erstellen von mehrsprachigen Webseiten ein etwas komplizierter Weg wie in folgenden Artikeln beschreiben wurde:

Lokalisierung von Webseiten
Lokalisierung die 2te: Ressourcedateien verwenden

Unter ASP.NET 2.0 hat sich auch bei der Lokalisierung einiges geändert. Das "70% weniger Code" Versprechen trifft auch hier zu. Mit wenigen Klicks im Visual Studio.NET 2005 ist eine "automatische" Lokalisierung der aktiven WebForm möglich. Gut, die Übersetzung muss noch selbst gemacht werden aber der Assistent ermittelt alle Eigenschaften der Controls die lokalisiert werden können und generiert daraus eine Ressource-Datei.

Im folgenden werden zwei Wege der Lokalisierung erklärt: Explizite und Implizite Lokalisierung. Zuerst wird allerdings der neue Ressource-Editor unter die Lupe genommen. Auch hier hat sich einiges geändert. Er ist übersichtlicher, einfach und kann einiges mehr als der Editor aus dem Visual Studio.NET 2003.

Resource-Editor in Visual Studio.NET 2005
Abb. 1: Resource-Editor in Visual Studio.NET 2005
Resource hinzufügen
Abb. 2: Resource hinzufügen
Resoucre-Type wählen
Abb. 3: Resource-Typ wählen

Abbildung 1 zeigt den neuen Resource-Editor in der Gesamtübersicht. Mit ihm ist es möglich jegliche Art von Resourcen per Assistent in die Resource-Datei aufzunehmen. Abbildung 3 zeigt die Auswahl der Resource-Typen die verwendet werden können. Im Vergleich zum Vorgänger müssen hier keine Third-Party Tools mehr verwendet werden da der neue Editor die entsprechenden Objekte automatisch serialisieren kann.

Im folgenden Beispiel wird das DevTrain Logo mit in die Resource-Datei aufgenommen. Folgende Schritte sind hierfür notwendig:

  1. Auswahl des Resource-Typs Images
  2. Add Resource aufklappen und Add Exisiting File ... auswählen
  3. Im Datei Explorer das entsprechende Bild auswählen

Über den gleichen Weg kann man sämtliche Resourcen zu einer Resource-Datei hinzufügen. Wurde eine Resource hinzugefügt können deren Eigenschaft verändert werden. Dazu markiert die entsprechende Resource und ruft dann das Eigenschaftsfenster auf. Folgende Eigenschaften stehen hierbei zur Verfügung:

Name der Eigenschaft Kommentar
(Name) Der eindeutige Name einer Resource innerhalb einer Resource-Datei
Comment Kommentar zu einer Resource. Diese Eigenschaft ist nur zur Designzeit brauchbar.
Filename Der Pfad zu einer verlinkten Datei (Nicht alle Resourcen können binär aufgenommen werden).
FileType Beschreibt ob die Datei welche in einer Resource-Datei verlinkt ist binär oder als Text gespeichert wird.
Persistence Legt fest ob die Resource eingebettet oder verlinkt wird. Eingebettete Resourcen werden in der entsprechenden Resource-Datei gespeichert. Verlinkte Resourcen liegen extern auf der Festplatte. Nicht alle Resource-Typen können in der Resource-Datei abgelegt werden.
Type Die Resource wird als dieser Type in der strongly-typed Resource-Datei erzeugt. Zum Beispiel als Bitmap oder String Objekt.

Sind Resourcen im Projekt gespeichert, können diese auf zwei Wege angezeigt oder gebunden werden. Zum ersten über den Visual Studio.NET 2005 Designer oder per Code. Vorab muss aber erst unterschieden werden um welche Art von Resource es sich handelt. Unter ASP.NET 2.0 gibt es zwei Arten von Resourcen:

  • Globale Resourcen (Verzeichnis: App_GlobalResources)
    Die globalen Resourcen werden dazu verwenden programmatisch auf Resourcen zuzugreifen. Diese Resourcen sind global für das ganze Projekt gültig und können auf jeder ASPX Form verwendet werden. Hier spricht man von der expliziten Lokalisierung.
  • Lokale Resourcen (Verzeichnis: App_LocalResources)
    Die lokalen Resourcen werden an eine spezielle ASPX Form gebunden. Das heißt das jede WebForm die lokalisiert wird eine eigene Resource Datei bekommen welche aus dem Namen der Form + .resx zusammen setzt. Hier spricht man von der impliziten Lokalisierung.

Explizite Lokalisierung

Die explizite Lokalisierung bietet die Möglichkeit projektübergreifende Resourcen zu definieren. Hier hat der Programmierer eine ganz einfache Möglichkeit über die Expressions Eigenschaft diese Resourcen an ein Control zu binden. Zuerst wird die Form erstellt. Wie schon erwähnt wird ein einfaches Kontaktformular mit Validierung erstellt:

<table>
    <tr>
        <td style="width: 50px">
            <asp:Label ID="LabelVorname" runat="server" Text="Label"></asp:Label></td>
        <td style="width: 147px">
            <asp:TextBox ID="TextBoxVorname" runat="server" Width="200px"></asp:TextBox><asp:RequiredFieldValidator
                ID="RequiredFieldValidatorVorname" runat="server" ErrorMessage="RequiredFieldValidator"
                Display="Dynamic" ControlToValidate="TextBoxVorname"></asp:RequiredFieldValidator></td>
    </tr>
    <tr>
        <td style="width: 50px">
            <asp:Label ID="LabelNachname" runat="server" Text="Label"></asp:Label></td>
        <td style="width: 147px">
            <asp:TextBox ID="TextBoxNachname" runat="server" Width="200px"></asp:TextBox><asp:RequiredFieldValidator
                ID="RequiredFieldValidatorNachname" runat="server" ErrorMessage="RequiredFieldValidator"
                Display="Dynamic" ControlToValidate="TextBoxNachname"></asp:RequiredFieldValidator></td>
    </tr>
    <tr>
        <td style="width: 50px">
            <asp:Label ID="LabelEmail" runat="server" Text="Label"></asp:Label></td>
        <td style="width: 147px">
            <asp:TextBox ID="TextBoxEmail" runat="server" Width="200px"></asp:TextBox><asp:RequiredFieldValidator
                ID="RequiredFieldValidatorEmail" runat="server" ErrorMessage="RequiredFieldValidator"
                Display="Dynamic" ControlToValidate="TextBoxEmail"></asp:RequiredFieldValidator></td>
    </tr>
    <tr>
        <td style="width: 50px" valign="top">
            <asp:Label ID="LabelKommentar" runat="server" Text="Label"></asp:Label></td>
        <td style="width: 147px">
            <asp:TextBox ID="TextBoxKommentar" runat="server" Width="200px" Height="98px"      
                TextMode="MultiLine"></asp:TextBox><asp:RequiredFieldValidator
                ID="RequiredFieldValidatorKommentar" runat="server" ErrorMessage="RequiredFieldValidator"
                Display="Dynamic" ControlToValidate="TextBoxKommentar"></asp:RequiredFieldValidator></td>
    </tr>
    <tr>
        <td style="width: 50px">
        </td>
        <td style="width: 147px">
            <asp:Button ID="ButtonSenden" runat="server" Text="Button" /></td>
    </tr>
</table>

Das Formular selbst sieht jetzt noch recht bescheiden aus da überall noch der Text "Label" steht. Die Texte für die Labels, ValidationControls und den Button werden jetzt in eine globale Resource geschrieben. Dazu wird auf das Projekt im Solution Explorer mit der rechten Maustaste das Menü "Add New Item" ausgewählt und "Assembly Resource File" gewählt. Die Resource Datei wird DevTrain.resx genannt. Mit drücken des Ok Buttons fragt das Visual Studio.NET 2005 ob ein App_GlobalResources Verzeichnis erstellt werden soll. Auch hier wird mit Ja bestätigt da ASP.NET 2.0 aus diesem Folder die entsprechenden Resourcen lesen und zuweisen kann. Im aktuellen Beispiel wird die explizite Lokalisierung gezeigt daher wird das App_GlobalResources Verzeichnis benötigt.

Nachdem mit Ja bestätigt wurde wird das Verzeichnis und die entsprechende Resource Datei erzeugt. Visual Studio.NET 2005 wechselt dann automatisch in den Resource Editor. Hier werden jetzt alle benötigten Texte wie in Abbildung 4 eingegeben:

data/alle/rp1_Lok_DemoDescription.gif
Abb. 4: Resource Keys für das Artikel Beispiel

Wurden die Resourcen eingetragen können diese auf der WebForm verwendet werden. Hierfür hat sich Microsoft auch was nettes einfallen lassen. Die Expressions welche weiter oben schon kurz angesprochen wurden. Über die Expressions (siehe Abbildung 5) ist es sehr einfach möglich bestimmte Eigenschaften eines Controls an verschiedenste Resourcen zu binden.

data/alle/rp1_Lok_Expressions.gif
Abb. 5: Expression Fenster im Visual Studio.NET 2005

Unter Bindable Properties kann jetzt die zu binden Eigenschaft ausgewählt werden. Unter Expression Type kann dann ausgewählt werden was für eine Art von Daten gebunden werden soll. Nachdem in den Expressions-Eingeschaften des entsprechenden Controls unter Type Resources ausgwählt wurde stehen dem Entwickler zwei Felder zur Verfügung.

  • ClassKey
    Über ClassKey wird der Name der Resource-Datei ohne Endung angegeben. Hier also DevTrain
  • ResourceKey
    Über ResourceKey wird die entsprechende Resource selbst angegeben. Im Beispiel für das Label Vorname also LabelVorname

Wird die Seite dann im Browser aufgerufen werden die Texte entsprechend richtig dargestellt.

Eine weitere Neuerung ist das "stronger typing" von Resourcen. Nicht wie im Framework 1.1 bei dem der Resource-Manager explizit verwendet werden musste um Resourcen auszuwählen ist es nun möglich die Werte direkt über die "Code-Vervollständigung" anzusprechen. Typisierte Resourcen sind allerdings nur bei der expliziten Lokalisierung möglich.

Implizite Lokalisierung

Die implizite Lokalisierung verhält sich noch einfacher als die explizte. Hier kann man das erstellen von Resource Dateien und das zuweisen entsprechender Keys dem Visual Studio.NET 2005 komplett überlassen (Siehe Abbildung 6). Um die Resource Datei mit allen Keys generieren zu lassen.

data/alle/rp1_Lok_Generate.gif
Abb. 6: Lokale Resource mit Visual Studio.NET 2005 erstellen

Nach dem das Erstellen erfolgreich durchgeführt wurde findet man im Solution Explorer das Verzeichnis App_LocalResources. Darin enthalten steht die Resource Datei die sich wie folgt zusammen setzt: [Name der WebForm].aspx.resx.

Für jede WebForm muss eine solche Datei erstellt werden. Es werden alle Keys und Values generiert. Die Texte, die vorher schon durch den Programmierer über die Eigenschaft Text, ToolTip, ErrorMessage usw. eingegeben wurden stehen dann in der entsprechenden Resource Datei. Wurden keine Texte eingegeben sind die Values leer.

Hat man jetzt Werte geändert kann man die Resource Datei erneut generieren lassen, ohne das bestehende Texte überschrieben werden. Alles was vorher schon vorhanden war wird beibehalten.

Mehrsprachigkeit

 Resource sind dann Interessant wenn man Anwendungen in mehreren Sprachen entwickeln muss. Hierfür gibt es allerdings keinen Automatismus der das erledigen kann. Übersetzt werden muss die Texte schon noch manuell :-). Das geschieht in ähnlicher Art und Weise wie es auch unter ASP.NET 1.1 gemacht wird. Man kopiert die bestehende Resource Datei, fügt die entsprechende kulturelle Information mit in den Namen ei, sagt der Webseite das sie jetzt in engl. angezeigt werden soll und fertig. Natürlich müssen vorher in der Resource Datei die Texte noch angepasst werden.

In dem hier gezeigten Beispiel werden die beiden Resource Dateien kopiert und umbenannt sodas im App_LocalResources Verzeichnis folgende Dateien enthalten sind:

  • Default2.aspx.resx
  • Default2.aspx.en.resx

Im App_GlobalResources Verzeichnis stehen folgende Dateien

  • DevTrain.resx
  • DevTrain.en.resx

Um die WebForm in der entsprechenden Sprach anzuzeigen können vier Wege genommen werden.

Möglichkeit Code Beschreibung
web.config <globalization culture="en-GB" uiCulture="en" /> Ändert die Kultureinstellungen für die ganze Web-Anwendung.
WebForm Direktive <%@ Page Language="C#" Culture="en-GB" UICulture="en" %> Ändert die Kultureinstellungen explizit für eine ausgewählte Webform.
Code public _Default()
{
    Thread.CurrentThread.CurrentCulture =
      new CultureInfo( "en-GB" );
    Thread.CurrentThread.CurrentUICulture =
      new CultureInfo( "en" );
}
Ändert die Kultureinstellungen im Code. Jede WebForm die diesen Code verwendet wird entsprechend in der angegebenen Sprache dargestellt.
Auto <%@ Page Language="C#" Culture="auto" UICulture="auto" %> Ermittelt die Kultur auf Basis der ausgewählten Sprache im Browser.

Das Visual Studio.NET 2005 in der aktuellen Beta 2 erzeugt in den WebForms automatisch die Direktive Culture="Auto" und UICulture="Auto" die vorher geändert oder gelöscht werden müssen wenn man eigene Sprachen verwenden will. Falls also fertige Resource Dateien vorhanden sind und trotzdem die Standardsprache angezeigt wird sollte zuerst die entsprechende Page Direktive überprüft werden.

Fazit

Die Lokalisierung hat sich gegenüber ASP.NET 1.1 um das vielfache vereinfacht. Man kann nun seine mehrsprachigen Seiten komplett im Designer gestalten und lokalisieren ohne per Code eingreifen zu müssen. Somit ist ein enormes Zeitersparnis garantiert. Auch der Resource-Editor hat sich verbessert sodas es auch hier sehr einfach und schnell möglich ist Resourcen in die Anwendung mit aufzunehmen. Im Zuge der Globalisierung ein ganz wichtiges Feature welches dem Entwickler enorm unter die Arme greift.


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

  Erfasst am: 06.06.2005
  Gültig bis: 04.09.2005
24 Ratings
Bewertung: 88,3%
schlecht    sehr gut  

 
© Copyright 2007 ppedv AG