逐步解說:當地語系化 Visual Studio SharePoint 應用程式

當地語系化 SharePoint 應用程式,是指將原本直接寫在程式中的字串,以運算式和陳述式取代,這些運算式和陳述式會從資源檔中擷取已經當地語系化的字串值。 本逐步解說將示範如何當地語系化 SharePoint 網頁應用程式的所有字串項目。

本逐步解說將示範下列工作:

  • 當地語系化程式碼。

  • 當地語系化 ASPX 標記。

  • 當地語系化功能。

必要條件

開發電腦上需要下列元件才能完成此逐步解說:

了解下列概念有助於完成此逐步解說 (但非必要):

當地語系化 SharePoint 程式碼

SharePoint 應用程式中的程式碼通常都含有 UI 文字字串。 將這些字串取代為對 GetGlobalResourceObject 的呼叫,即可當地語系化這些字串。 此逐步解說從修改 Web 組件專案開始。

若要修改 Web 組件專案

  1. 完成主題逐步解說:建立 SharePoint 的 Web 組件中所概述的程序。

  2. 利用 Visual Studio 中載入的 Web 組件專案,將 [應用程式頁面] 專案項目加入至 Web 組件專案。請使用預設名稱 ApplicationPage1.aspx。

  3. 將 [資源檔] 專案項目加入至 Web 組件專案。 使用預設名稱 Resource1.resx。 「資源檔」專案項目範本位於 [加入新項目] 對話方塊中的語言專案項目範本資料夾下方。

    該資源檔便會在 [資源編輯器] 中開啟。

  4. 在 [資源編輯器] 中,輸入下列字串 IDs 和值:

    字串 ID

    String1

    員工資料檔案的路徑

    String2

    包含員工資料的 XML 檔案位置

    String3

    只顯示經理級人員

    String4

    只顯示經理級員工

    String5

    顯示所有的員工

    String6

    員工清單

    String7

    顯示員工清單

    String8

    應用程式頁面

    String9

    我的應用程式頁面描述

  5. 製作 Resource1.resx 的複本,方法是在 [方案總管] 中按一下其節點,然後按一下 [編輯] 功能表上的 [複製]。

  6. 在 [方案總管] 中按一下 Web 組件節點,然後按一下 [編輯] 功能表上的 [貼上]。

  7. 以滑鼠右鍵按一下複製的檔案,然後按一下 [重新命名]。 將檔案命名為 Resource1.ja-JP.resx。

    此檔案可當做當地語系化成日文的資源檔;稍後會將其編譯成附屬組件並部署至 SharePoint。

  8. 在 [資源編輯器] 中開啟 Resource1.ja-JP.resx,並在每個值的前面加上單字 JAPANESE。

    例如,「員工資料檔案的路徑」會成為「JAPANESE 員工資料檔案的路徑」。在實際的當地語系化案例中,這些字串會使用日文字元。

  9. 同時將 Resource1.resx 和 Resource1.ja-JP.resx 的 [部署類型] 屬性變更為 [AppGlobalResource]。

    如此會將檔案部署至伺服器上的 App_GlobalResources 資料夾,並讓資源可用於所有的 ASP.NET 架構專案。

    注意事項注意事項

    只有加入至 SharePoint 專案項目的資源檔才會出現 [部署類型] 屬性。

  10. 按兩下 Package.package 以在 [封裝設計工具] 中開啟它。

  11. 按一下 [進階] 按鈕,再按一下 [加入] 按鈕,然後再按一下 [加入現有組件]。

    這樣會開啟 [加入現有組件] 對話方塊。

  12. 建置專案以建立當地語系化附屬 DLL。

  13. 在 [加入現有組件] 對話方塊中,按一下 [來源路徑] 旁邊的省略符號 (ASP.NET Mobile 設計工具橢圓形) 按鈕,並尋找當地語系化的附屬 DLL。

    組件檔位於您的專案目錄中的 .. \bin\debug\ja-JP 下方。

  14. 將 [部署目標] 選項保留為 [GlobalAssemblyCache]。

  15. 在 [位置] 方塊中,於「位置」路徑前加上文化特性 ID 資料夾。 對於這個範例,將現有的值變更為 jp-JA\Web part name.resources.dll。 如果您的專案具有多個附屬 DLL,則為每個 DLL 重複此步驟。

    此步驟是必要的,因為封裝不允許兩個同名的檔案位於同一個資料夾中。 依據文化特性 ID 建立的子資料夾允許將兩個檔案封裝在一起。

  16. 完成後,請按一下 [確定] 關閉此對話方塊。

  17. 開啟此 Web 組件的字碼頁,然後以下列程式碼取代現有的 Using 或 Includes 陳述式。

    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. 以下列程式碼取代現有的變數宣告和函式。

        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. 加入下列新的函式。

    // 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. F5 建置並執行方案。

  21. 在 SharePoint 中,按一下 [網站動作] 索引標籤上的 [更多選項],顯示 [建立] 對話方塊。

  22. 在 [建立] 對話方塊中,按一下 [篩選依據] 區段中的 [頁面]、按一下已安裝項目窗格中的 [網頁組件頁面],然後按一下 [建立] 按鈕。

  23. 在 [新增網頁組件頁面] 對話方塊中的 [名稱] 方塊中輸入值,然後按一下 [建立] 按鈕。

  24. 在網頁組件頁面中,按一下 Web 組件來顯示工具列。

  25. 按一下 [分類] 區段中的 [自訂] 資料夾、選取 [Web 組件] 區段中的 [Web 組件],然後按一下 [加入] 按鈕。

  26. 按一下 Web 組件的下拉按鈕,然後按一下 [編輯 Web 組件] 以顯示 [Web 組件內容] 對話方塊。

  27. 展開 [其他] 區段、輸入 data.xml 檔案的路徑、按一下 [套用],然後按一下 [確定]。

  28. 在資料格出現以後,重新按一下 Web 組件的下拉按鈕,並注意自訂動詞命令會以預設語言顯示。

  29. 在網頁組件頁面的上方,按一下您名稱旁邊的下拉箭號。 如果已成功安裝語言套件,則存在一個稱為 [選取顯示語言] 的命令。 指向該命令,然後在 [內容] 功能表中按一下 [日文]。 (如果您安裝了不同的語言套件,則會在這裡顯示該語言選項。)

    隨即會以選取的語言顯示該頁面上的文字。

  30. 按一下 Web 組件的下拉按鈕,然後按一下 [編輯 Web 組件] 以顯示 [Web 組件內容] 對話方塊。

  31. 展開 [其他] 區段,並注意如何以當地語系化的語言顯示應用程式中所有可見的字串。 自訂屬性方塊標籤、控制項的工具提示和動詞命令都會以當地語系化的語言顯示。

  32. 將語言切換回預設值並關閉 SharePoint 頁面。

當地語系化 ASPX 標記

您可以使用資源檔來當地語系化 ASPX 頁面和控制項中的標記。

若要當地語系化 ASPX 標記

  1. 按兩下應用程式頁面以檢視其標記。

  2. 以下列程式碼取代現有的 PlaceHolderMain 區段,將標籤和按鈕控制項加入至應用程式頁面:

    <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>
    

    原本直接寫在此頁面中的字串,現在已經改以 <%$Resources:Resource File Name, Resource String ID%> 格式的運算式取代。 這些運算式會根據目前使用的語言顯示對應的當地語系化資源字串。

  3. 以下列程式碼取代 PageTitle 和 PageTitleInTitleArea 區段:

    <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>
    

    原本直接寫在此頁面中的字串,現在已經改以 <asp:literal ID="Literal1" runat="server" Text="<%$Resources:Resource File Name, String ID%>" /> 格式的運算式取代。 這些運算式會根據目前使用的語言顯示對應的當地語系化資源字串。

  4. 選取 [方案總管] 中的應用程式頁面,然後按一下 [檢視] 功能表上的 [程式碼],顯示應用程式頁面的後置程式碼。

  5. 加入下列程式碼。

    protected void btn1_Click(object sender, EventArgs e)
    {
        Response.Redirect("http://MyServer/MyPage.aspx", false);            
    }
    
  6. F5 建置並執行方案。

    會出現具有預設資源字串的應用程式頁面。

  7. 在應用程式頁面的上方,按一下您名稱旁邊的下拉箭號,並選取當地語系化的語言。

    頁面上會出現具有當地語系化資源字串的文字。

  8. 按一下 [顯示員工清單] 按鈕來顯示網頁組件頁面。

  9. 將語言切換回預設值並關閉 SharePoint 頁面。

當地語系化功能

功能的名稱和描述顯示在 SharePoint 中。 您可以使用功能資源檔來當地語系化這些字串。 這些資源檔有別於應用程式中的其他資源檔。

若要當地語系化功能

  1. 以滑鼠右鍵按一下 [方案總管] 中的 [Feature1] 節點,然後按一下 [加入功能資源]。

  2. 在 [加入資源] 對話方塊中,選取預設文化特性 [不因語言而異]。

    這會將名為 Resources.resx 的檔案加入至做為預設功能資源的功能中。 該資源檔便會在 [資源編輯器] 中開啟。

  3. 在 [資源編輯器] 中,輸入下列字串 ID 和值:

    字串 ID

    String1

    我的功能標題

    String2

    我的功能描述

  4. 加入另一個功能資源檔,但請選取不同的文化特性,例如日文 (日本)。

    這會將名為 Resources.ja-JP.rex 的檔案加入至功能。 由於功能資源的名稱需要完整的文化特性識別項,因此請選取清單中指定完整文化特性的文化特性 ID。 例如,選取日文 (日本) 而非日文。

  5. 將當地語系化資源檔中的字串值變更為預設功能資源檔中那些字串值以外的字串值。

  6. 按兩下 [Feature1.feature] 檔案,以在 [功能設計工具] 中開啟它。

  7. 以 $Resources:String1 取代 [標題] 方塊中的文字。

  8. 以 $Resources:String2 取代 [描述] 方塊中的文字。

  9. F5 建置並執行方案。

  10. 在 SharePoint 頁面上,按一下 [網站動作] 索引標籤上的 [網站設定]。

  11. 在 [網站集合管理] 下方,按一下 [網站集合功能] 連結。

  12. 在 [網站集合管理] 頁面的上方,按一下您名稱旁邊的下拉箭號,並選取當地語系化的語言。 隨即會出現具有當地語系化資源字串的功能標題和描述。

  13. 將語言切換回預設值並關閉 SharePoint 頁面。

請參閱

工作

HOW TO:新增資源檔

其他資源

HOW TO:當地語系化功能

HOW TO:當地語系化 ASPX 標記

HOW TO:當地語系化程式碼