Exemplarische Vorgehensweise: Lokalisieren einer Visual Studio SharePoint-Anwendung

Beim Lokalisieren einer SharePoint-Anwendung werden die hartcodierten Zeichenfolgen durch Ausdrücke und Anweisungen ersetzt, durch die die lokalisierten Zeichenfolgenwerte aus Ressourcendateien abgerufen werden. In dieser exemplarischen Vorgehensweise wird erläutert, wie alle Zeichenfolgenelemente einer SharePoint-Webseitenanwendung lokalisiert werden.

Diese exemplarische Vorgehensweise enthält die folgenden Aufgaben:

  • Lokalisieren von Code

  • Lokalisieren von ASPX-Markup

  • Lokalisieren einer Funktion

Vorbereitungsmaßnahmen

Zum Durchführen dieser exemplarischen Vorgehensweise werden auf dem Entwicklungscomputer die folgenden Komponenten benötigt:

Kenntnisse der folgenden Konzepte sind hilfreich, wenn auch für die Durchführung der exemplarischen Vorgehensweise nicht erforderlich:

Lokalisieren von SharePoint-Code

Code in SharePoint-Anwendungen enthält häufig hartcodierte Zeichenfolgen für UI-Text. Diese Zeichenfolgen können lokalisiert werden, indem sie durch Aufrufe von GetGlobalResourceObject ersetzt werden. Ändern Sie für die exemplarische Vorgehensweise zunächst ein Webpartprojekt.

So ändern Sie das Webpartprojekt

  1. Führen Sie die im Thema Exemplarische Vorgehensweise: Erstellen eines Webparts für SharePoint beschriebenen Prozeduren aus.

  2. Fügen Sie dem in Visual Studio geladenen Webpartprojekt ein Projektelement vom Typ Anwendungsseite hinzu. Verwenden Sie den Standardnamen "ApplicationPage1.aspx".

  3. Fügen Sie dem Webpartprojekt ein Projektelement vom Typ Ressourcendatei hinzu. Verwenden Sie den Standardnamen "Resource1.resx". Die Projektelementvorlage "Ressourcendatei" befindet sich im Dialogfeld Neues Element hinzufügen unter dem Ordner mit den Vorlagen für Sprachprojektelemente.

    Die Ressourcendatei wird im Ressourcen-Editor geöffnet.

  4. Geben Sie im Ressourcen-Editor die folgenden Zeichenfolgen-IDs und Werte ein:

    Zeichenfolgen-ID

    Wert

    String1

    Pfad zur Mitarbeiterdatendatei

    String2

    Speicherort der XML-Datei mit den Mitarbeiterdaten

    String3

    Nur Manager anzeigen

    String4

    Zeigt nur Mitarbeiter an, bei denen es sich um Manager handelt

    String5

    Alle Mitarbeiter anzeigen

    String6

    Mitarbeiterliste

    String7

    Mitarbeiterliste anzeigen

    String8

    Seite "Anwendung"

    String9

    Beschreibung "Meine Anwendungsseite"

  5. Erstellen Sie eine Kopie von "Resource1.resx", indem Sie im Projektmappen-Explorer auf den entsprechenden Knoten und anschließend im Menü Bearbeiten auf Kopieren klicken.

  6. Klicken Sie im Projektmappen-Explorer auf den Webpartknoten, und klicken Sie anschließend im Menü Bearbeiten auf Einfügen.

  7. Klicken Sie mit der rechten Maustaste auf die kopierte Datei, und klicken Sie anschließend auf Umbenennen. Benennen Sie die Datei mit Resource1.ja-JP.resx.

    Diese Datei fungiert als lokalisierte Ressourcendatei für Japanisch, die später in eine Satellitenassembly kompiliert und für SharePoint bereitgestellt wird.

  8. Öffnen Sie Resource1.ja-JP.resx im Ressourcen-Editor, und stellen Sie jedem Wert das Wort "JAPANISCH" voran.

    Dadurch wird beispielsweise aus "Pfad zur Mitarbeiterdatendatei" der Wert "JAPANISCH Pfad zur Mitarbeiterdatendatei". In einem echten lokalisierten Szenario würden für diese Zeichenfolgen japanische Zeichen verwendet.

  9. Ändern Sie die Eigenschaft Bereitstellungstyp von "Resource1.resx" und "Resource1.ja-JP.resx" zu AppGlobalResource.

    Dadurch werden die Dateien im Ordner "App_GlobalResources" auf dem Server bereitgestellt, und die Ressourcen werden für alle ASP.NET-basierten Projekte verfügbar gemacht.

    Tipp

    Die Eigenschaft "Bereitstellungstyp" wird nur für Ressourcendateien angezeigt, die SharePoint-Projektelementen hinzugefügt wurden.

  10. Doppelklicken Sie auf "Package.package", um es im Paket-Designer zu öffnen.

  11. Klicken Sie auf die Schaltfläche Erweitert, auf die Schaltfläche Hinzufügen und anschließend auf Vorhandene Assembly hinzufügen.

    Dadurch wird das Dialogfeld Vorhandene Assembly hinzufügen geöffnet.

  12. Erstellen Sie das Projekt, um die lokalisierte Satelliten-DLL zu erstellen.

  13. Klicken Sie im Dialogfeld Vorhandene Assembly hinzufügen neben Quellpfad auf die Schaltfläche mit den Auslassungspunkten (Auslassungszeichen im ASP.NET Mobile-Designer), und suchen Sie die lokalisierte Satelliten-DLL.

    Die Assemblydatei befindet sich im Projektverzeichnis unter "\bin\debug\ja-JP".

  14. Lassen Sie die Option Bereitstellungsziel auf GlobalAssemblyCache festgelegt.

  15. Stellen Sie im Feld Speicherort dem Pfad zum Speicherort einen Kultur-ID-Ordner voran. Ändern Sie also in diesem Beispiel den vorhandenen Wert zu "jp-JA\Webpartname.resources.dll". Sind für das Projekt mehrere Satelliten-DLLs vorhanden, wiederholen Sie diesen Schritt für jede DLL.

    Dieser Schritt ist erforderlich, da ein Ordner nicht zwei Dateien mit identischem Namen enthalten kann. Durch Erstellen eines auf der Kultur-ID basierenden Unterordners können beide Dateien gemeinsam gepackt werden.

  16. Klicken Sie anschließend auf "OK", um das Dialogfeld zu schließen.

  17. Öffnen Sie die Codepage für das Webpart, und ersetzen Sie die vorhandenen Anweisungen Using oder Includes durch Folgendes:

    using Microsoft.SharePoint;
    using Microsoft.SharePoint.WebControls;
    using System;
    using System.ComponentModel;
    using System.Data;
    using System.Resources;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    
  18. Ersetzen Sie die vorhandenen Variablendeklarationen und die Funktionen durch Folgendes:

        private DataGrid grid;
            // Replaced: private static string verbText = "Show Managers Only";
            private static string verbText = HttpContext.GetGlobalResourceObject("Resource1", "String3").ToString();
            private Label errorMessage = new Label();
            protected string xmlFilePath;
    
            // Replaced: WedDisplayName and WebDescription attribute strings.
            [Personalizable(PersonalizationScope.Shared), WebBrowsable(true),
            LocalizedWebDisplayName("String1"),
            LocalizedWebDescription("String2")]
            public string DataFilePath
            {
                get
                {
                    return xmlFilePath;
                }
                set
                {
                    xmlFilePath = value;
                }
            }
    
            protected override void CreateChildControls()
            {
                // Define the grid control that displays employee data in the Web Part.
                grid = new DataGrid();
                grid.Width = Unit.Percentage(100);
                grid.GridLines = GridLines.Horizontal;
                grid.HeaderStyle.CssClass = "ms-vh2";
                grid.CellPadding = 2;
                grid.BorderWidth = Unit.Pixel(5);
                grid.HeaderStyle.Font.Bold = true;
                grid.HeaderStyle.HorizontalAlign = HorizontalAlign.Center;
    
                // Populate the grid control with data in the employee data file.
                try
                {
                    DataSet dataset = new DataSet();
                    dataset.ReadXml(xmlFilePath, XmlReadMode.InferSchema);
                    grid.DataSource = dataset;
                    grid.DataBind();
                }
                catch (Exception x)
                {
                    errorMessage.Text += x.Message;
                }
    
                // Add control to the controls collection of the Web Part.
                Controls.Add(grid);
                Controls.Add(errorMessage);
                base.CreateChildControls();
            }
    
            public override WebPartVerbCollection Verbs
            {
                get
                {
                    WebPartVerb customVerb = new WebPartVerb("Manager_Filter_Verb",
                        new WebPartEventHandler(CustomVerbEventHandler));
    
                    customVerb.Text = verbText;
                    // Replaced: Hard-coded description with localized string.
                    customVerb.Description = HttpContext.GetGlobalResourceObject("Resource1", "String4").ToString();
                    WebPartVerb[] newVerbs = new WebPartVerb[] { customVerb };
    
                    return new WebPartVerbCollection(base.Verbs, newVerbs);
                }
            }
    
            protected void CustomVerbEventHandler(object sender, WebPartEventArgs args)
            {
                int titleColumn = 2;
    
                foreach (DataGridItem item in grid.Items)
                {
                    if (item.Cells[titleColumn].Text != "Manager")
                    {
                        if (item.Visible == true)
                        {
                            item.Visible = false;
                        }
                        else
                        {
                            item.Visible = true;
                        }
                    }
    
                }
                // if (verbText == "Show Managers Only")
                if (verbText == HttpContext.GetGlobalResourceObject("Resource1", "String5").ToString())
                {
                    // verbText = "Show All Employees";
                    verbText = HttpContext.GetGlobalResourceObject("Resource1", "String5").ToString();
                }
                else
                {
                    // verbText = "Show Managers Only";
                    verbText = HttpContext.GetGlobalResourceObject("Resource1", "String3").ToString();
                }
            }
    
  19. Fügen Sie die folgenden neuen Funktionen hinzu:

    // Provide localized values for the WebDisplayName and WebDescription
    // attribute strings.
    public class LocalizedWebDisplayName : WebDisplayNameAttribute
    {
        public LocalizedWebDisplayName(string resId)
        {
            base.DisplayNameValue = FetchLocalizedString(resId);
        }
    
        string FetchLocalizedString(string resourceID)
        {
            // Use the ResourceManager to get the string from 
            // the resource file.
            ResourceManager rm = Resource1.ResourceManager;
            return rm.GetString(resourceID);
        }
    }
    
    public class LocalizedWebDescription : WebDescriptionAttribute
    {
        public LocalizedWebDescription(string resId)
        {
            base.DescriptionValue = FetchLocalizedString(resId);
        }
    
        string FetchLocalizedString(string resourceID)
        {
            // Use the ResourceManager to get the string from 
            // the resource file.
            ResourceManager rm = Resource1.ResourceManager;
            return rm.GetString(resourceID);
        }
    }
    
  20. Drücken Sie F5, um die Lösung zu erstellen und auszuführen.

  21. Klicken Sie in SharePoint auf der Registerkarte Websiteaktionen auf Weitere Optionen, um das Dialogfeld Erstellen anzuzeigen.

  22. Klicken Sie im Dialogfeld Erstellen im Abschnitt Filtern nach auf Seite, klicken Sie im Bereich mit den installierten Elementen auf Webpartseite, und klicken Sie anschließend auf die Schaltfläche Erstellen.

  23. Geben Sie im Dialogfeld Neue Webpartseite einen Wert in das Feld Name ein, und klicken Sie anschließend auf die Schaltfläche Erstellen.

  24. Klicken Sie auf der Webpartseite auf ein Webpart, um die Symbolleiste anzuzeigen.

  25. Klicken Sie im Abschnitt Kategorien auf den benutzerdefinierten Ordner, wählen Sie im Abschnitt Webparts das Webpart aus, und klicken Sie anschließend auf die Schaltfläche Hinzufügen.

  26. Klicken Sie auf die Dropdownschaltfläche für das Webpart und anschließend auf Webpart bearbeiten, um das Eigenschaftendialogfeld für das Webpart anzuzeigen.

  27. Erweitern Sie den Abschnitt Sonstiges, geben Sie den Pfad der Datei "data.xml" ein, klicken Sie auf Übernehmen und anschließend auf OK.

  28. Klicken Sie erneut auf die Dropdownschaltfläche für das Webpart, sobald das Datenraster angezeigt wird. Das benutzerdefinierte Verb wird in der Standardsprache angezeigt.

  29. Klicken Sie in der oberen Ecke der Webpartseite auf den Dropdownpfeil neben Ihrem Namen. Sofern das Language Pack erfolgreich installiert wurde, steht der Befehl Anzeigesprache auswählen zur Verfügung. Zeigen Sie darauf, und klicken Sie anschließend im Kontextmenü auf Japanisch. (Wurde ein anderes Language Pack installiert, wird diese Sprachoption hier angezeigt.)

    Der Text auf der Seite wird in der ausgewählten Sprache angezeigt.

  30. Klicken Sie auf die Dropdownschaltfläche für das Webpart und anschließend auf Webpart bearbeiten, um das Eigenschaftendialogfeld für das Webpart anzuzeigen.

  31. Erweitern Sie den Abschnitt Sonstiges. Alle sichtbaren Zeichenfolgen in der Anwendung werden in der lokalisierten Sprache angezeigt. Die benutzerdefinierte Eigenschaftenfeldbezeichnung, die QuickInfo für das Steuerelement und das Verb werden jeweils in der lokalisierten Sprache angezeigt.

  32. Legen Sie wieder die Standardsprache fest, und schließen Sie die SharePoint-Seite.

Lokalisieren von ASPX-Markup

Markup auf ASPX-Seiten und in Steuerelementen kann mithilfe von Ressourcendateien lokalisiert werden.

So lokalisieren Sie ASPX-Markup

  1. Doppelklicken Sie auf die Anwendungsseite, um das Markup anzuzeigen.

  2. Fügen Sie der Anwendungsseite ein Label- und ein Schaltflächen-Steuerelement hinzu, indem Sie den vorhandenen Abschnitt PlaceHolderMain durch Folgendes ersetzen:

    <asp:Content ID="Main" ContentPlaceHolderID="PlaceHolderMain" runat="server">
    <asp:Label ID="lbl" runat="server" Font-Size="Large" Text="<%$Resources:Resource1,String6%>"></asp:Label>
    <br />
    <br />
    <asp:Button ID="btn1" runat="server" onclick="btn1_Click" Text="<%$Resources:Resource1,String7%>"></asp:Button>
    </asp:Content>
    

    Die hartcodierten Zeichenfolgen werden durch den Ausdruck im Format <%$Resources:Ressourcendateiname, Zeichenfolgen-ID der Ressource%> ersetzt. Durch diese Ausdrücke werden die lokalisierten Ressourcenzeichenfolgen angezeigt, die auf der aktuellen Sprache basieren.

  3. Ersetzen Sie die Abschnitte PageTitle und PageTitleInTitleArea durch Folgendes:

    <asp:Content ID="PageTitle" ContentPlaceHolderID="PlaceHolderPageTitle" runat="server">
    <asp:Literal ID="Literal1" runat="server" Text="<%$Resources:Resource1, String8%>" />
    </asp:Content>
    <asp:Content ID="PageTitleInTitleArea" ContentPlaceHolderID="PlaceHolderPageTitleInTitleArea" runat="server" >
    <asp:Literal ID="Literal2" runat="server" Text="<%$Resources:Resource1, String9%>" />
    </asp:Content>
    

    Die hartcodierten Zeichenfolgen werden durch den Ausdruck im Format <asp:literal ID="Literal1" runat="server" Text="<%$Resources:Ressourcendateiname, Zeichenfolgen-ID%>" /> ersetzt. Durch diese Ausdrücke werden die lokalisierten Ressourcenzeichenfolgen angezeigt, die auf der aktuellen Sprache basieren.

  4. Wählen Sie im Projektmappen-Explorer die Anwendungsseite aus, und klicken Sie im Menü Ansicht auf Code, um den Code hinter der Anwendungsseite anzuzeigen.

  5. Fügen Sie den folgenden Code hinzu.

    protected void btn1_Click(object sender, EventArgs e)
    {
        Response.Redirect("http://MyServer/MyPage.aspx", false);            
    }
    
  6. Drücken Sie F5, um die Lösung zu erstellen und auszuführen.

    Die Anwendungsseite wird mit Standard-Ressourcenzeichenfolgen angezeigt.

  7. Klicken Sie in der oberen Ecke der Anwendungsseite auf den Dropdownpfeil neben Ihrem Namen, und wählen Sie die lokalisierte Sprache aus.

    Der Text auf der Seite wird mit lokalisierten Ressourcenzeichenfolgen angezeigt.

  8. Klicken Sie auf die Schaltfläche Mitarbeiterliste anzeigen, um die Webpartseite anzuzeigen.

  9. Legen Sie wieder die Standardsprache fest, und schließen Sie die SharePoint-Seite.

Lokalisieren von Funktionen

Funktionen besitzen einen Namen und eine Beschreibung, die in SharePoint angezeigt werden. Diese Zeichenfolgen können mithilfe von Funktionsressourcendateien lokalisiert werden. Diese Ressourcendateien sind von anderen Ressourcendateien in der Anwendung getrennt.

So lokalisieren Sie eine Funktion

  1. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf den Knoten Feature1, und klicken Sie anschließend auf Funktionsressource hinzufügen.

  2. Wählen Sie im Dialogfeld Ressource hinzufügen die Standardkultur Invariante Sprache (Invariantes Land) aus.

    Dadurch wird der Funktion eine Datei mit der Bezeichnung "Resources.resx" hinzugefügt, die als Standardfunktionsressource fungiert. Die Ressourcendatei wird im Ressourcen-Editor geöffnet.

  3. Geben Sie im Ressourcen-Editor die folgenden Zeichenfolgen-IDs und Werte ein:

    Zeichenfolgen-ID

    Wert

    String1

    Mein Funktionstitel

    String2

    Meine Funktionsbeschreibung

  4. Fügen Sie eine weitere Funktionsressourcendatei hinzu, aber wählen Sie eine andere Kultur (beispielsweise "Japanisch (Japan)") aus.

    Dadurch wird der Funktion eine Datei mit der Bezeichnung "Resources.ja-JP.resx" hinzugefügt. Der Name einer Funktionsressource muss einen vollständigen Kulturbezeichner enthalten. Wählen Sie also in der Liste die Kultur-ID aus, mit der die vollständige Kultur angegeben wird. Wählen Sie also beispielsweise anstelle von "Japanisch" die Option "Japanisch (Japan)" aus.

  5. Ändern Sie die Zeichenfolgenwerte in der lokalisierten Ressourcendatei, sodass sie sich von denen der Standard-Funktionsressourcendatei unterscheiden.

  6. Doppelklicken Sie auf die Datei "Feature1.feature", um sie im Funktions-Designer zu öffnen.

  7. Ersetzen Sie den Text im Feld Titel durch "$Resources:String1".

  8. Ersetzen Sie den Text im Feld Beschreibung durch "$Resources:String2".

  9. Drücken Sie F5, um die Lösung zu erstellen und auszuführen.

  10. Klicken Sie auf der SharePoint-Seite auf der Registerkarte Websiteaktionen auf Websiteeinstellungen.

  11. Klicken Sie unter Websitesammlungsverwaltung auf den Link Websitesammlungsfeatures.

  12. Klicken Sie in der oberen Ecke der Seite Websitesammlungsverwaltung auf den Dropdownpfeil neben Ihrem Namen, und wählen Sie die lokalisierte Sprache aus. Der Funktionstitel und die Beschreibung werden mit lokalisierten Ressourcenzeichenfolgen angezeigt.

  13. Legen Sie wieder die Standardsprache fest, und schließen Sie die SharePoint-Seite.

Siehe auch

Aufgaben

Gewusst wie: Hinzufügen einer Ressourcendatei

Weitere Ressourcen

Gewusst wie: Lokalisieren einer Funktion

Gewusst wie: Lokalisieren von ASPX-Markup

Gewusst wie: Lokalisieren von Code