연습: Visual Studio SharePoint 응용 프로그램 지역화

SharePoint 응용 프로그램 지역화는 하드 코드된 문자열을 리소스 파일에서 지역화된 문자열 값을 검색하는 식과 문으로 바꾸는 것입니다. 이 연습에서는 SharePoint 웹 페이지 응용 프로그램의 모든 문자열 요소를 지역화하는 방법을 보여 줍니다.

이 연습에서는 다음 작업을 수행합니다.

  • 코드 지역화

  • ASPX 태그 지역화

  • 기능 지역화

사전 요구 사항

이 연습을 완료하려면 개발 컴퓨터에 다음 구성 요소가 필요합니다.

다음 개념을 알고 있으면 연습을 완료하는 데 도움이 되지만 반드시 필요하지는 않습니다.

SharePoint 코드 지역화

일반적으로 SharePoint 응용 프로그램의 코드에는 UI 텍스트의 하드 코드된 문자열이 포함됩니다. 이러한 문자열은 GetGlobalResourceObject 호출을 통해 대체하여 지역화할 수 있습니다. 웹 파트 프로젝트를 수정하여 연습을 시작하겠습니다.

웹 파트 프로젝트를 수정하려면

  1. 연습: SharePoint를 위한 웹 파트 만들기 항목에 설명된 절차를 수행합니다.

  2. 웹 파트 프로젝트가 Visual Studio에 로드된 상태에서 응용 프로그램 페이지 프로젝트 항목을 웹 파트 프로젝트에 추가합니다. 기본 이름인 ApplicationPage1.aspx를 사용합니다.

  3. 리소스 파일 프로젝트 항목을 웹 파트 프로젝트에 추가합니다. 기본 이름인 Resource1.resx를 사용합니다. 리소스 파일 프로젝트 항목 템플릿은 새 항목 추가 대화 상자에서 언어 프로젝트 항목 템플릿 폴더에 있습니다.

    리소스 파일이 리소스 편집기에서 열립니다.

  4. 리소스 편집기에서 다음 문자열 IDs 및 값을 입력합니다.

    문자열 ID

    String1

    직원 데이터 파일의 경로

    String2

    직원 데이터가 포함된 XML 파일의 위치

    String3

    관리자만 표시

    String4

    관리자인 직원만 표시

    String5

    모든 직원 표시

    String6

    직원 목록

    String7

    직원 목록 표시

    String8

    응용 프로그램 페이지

    String9

    내 응용 프로그램 페이지 설명

  5. 솔루션 탐색기에서 해당 노드를 클릭한 다음 편집 메뉴에서 복사를 클릭하여 Resource1.resx를 복사합니다.

  6. 솔루션 탐색기에서 웹 파트 노드를 클릭한 다음 편집 메뉴에서 붙여넣기를 클릭합니다.

  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 모바일 디자이너 줄임표) 단추를 클릭하고 지역화된 위성 DLL을 찾습니다.

    어셈블리 파일은 ..\bin\debug\ja-JP 아래의 프로젝트 디렉터리에 있습니다.

  14. 배포 대상 옵션을 GlobalAssemblyCache로 둡니다.

  15. 위치 상자에서 위치 경로 앞에 문화권 ID 폴더를 추가합니다. 이 예제의 경우 기존 값을 jp-JA\Web part name.resources.dll로 변경합니다. 프로젝트에 여러 위성 DLL이 있는 경우에는 각 DLL에 대해 이 단계를 반복합니다.

    이 단계는 패키지에서 동일한 폴더에 이름이 같은 파일이 두 개 있을 수 없기 때문에 필요합니다. 문화권 ID에 따라 하위 폴더를 만들면 두 파일이 함께 패키지될 수 있습니다.

  16. 작업이 끝나면 확인을 클릭하여 대화 상자를 닫습니다.

  17. 웹 파트의 코드 페이지를 열고 기존 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. 웹 파트 페이지에서 웹 파트를 클릭하여 도구 모음을 표시합니다.

  25. 범주 섹션에서 사용자 지정 폴더를 클릭하고 웹 파트 섹션에서 웹 파트를 선택한 다음 추가 단추를 클릭합니다.

  26. 웹 파트의 드롭다운 단추를 클릭한 다음 웹 파트 편집을 클릭하여 웹 파트 속성 대화 상자를 표시합니다.

  27. 기타 섹션을 확장하고 data.xml 파일의 경로를 입력한 다음 적용을 클릭하고 확인을 클릭합니다.

  28. 데이터 표가 나타난 후 웹 파트의 드롭다운 단추를 다시 클릭하고 사용자 지정 동사가 기본 언어로 표시되는지 확인합니다.

  29. 웹 파트 페이지의 위쪽 모퉁이에서 이름 옆의 드롭다운 화살표를 클릭합니다. 언어 팩이 성공적으로 설치되었으면 표시 언어 선택이라는 명령이 있습니다. 이 명령을 가리킨 다음 상황에 맞는 메뉴에서 일본어를 클릭합니다. 다른 언어 팩을 설치한 경우 선택한 언어가 여기에 표시됩니다.

    페이지의 텍스트가 선택한 언어로 표시됩니다.

  30. 웹 파트의 드롭다운 단추를 클릭한 다음 웹 파트 편집을 클릭하여 웹 파트 속성 대화 상자를 표시합니다.

  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.resx라는 파일이 기능에 추가됩니다. 기능 리소스의 이름에는 전체 문화권 식별자가 필요하기 때문에 목록에서 전체 문화권을 지정하는 문화권 ID를 선택합니다. 예를 들어, 일본어 대신 일본어(일본)를 선택합니다.

  5. 지역화된 리소스 파일의 문자열 값을 기본 기능 리소스 파일의 문자열 값과 다른 값으로 변경합니다.

  6. Feature1.feature 파일을 두 번 클릭하여 기능 디자이너에서 엽니다.

  7. 제목 상자의 텍스트를 $Resources:String1로 바꿉니다.

  8. 설명 상자의 텍스트를 $Resources:String2로 바꿉니다.

  9. F5 키를 눌러 솔루션을 빌드하고 실행합니다.

  10. SharePoint 페이지에서 사이트 작업 탭의 사이트 설정을 클릭합니다.

  11. 사이트 모음 관리 아래에서 사이트 모음 기능 링크를 클릭합니다.

  12. 사이트 모음 관리 페이지의 위쪽 모퉁이에서 이름 옆의 드롭다운 화살표를 클릭하고 지역화된 언어를 선택합니다. 기능 제목과 설명이 지역화된 리소스 문자열로 표시됩니다.

  13. 언어를 기본값으로 전환하고 SharePoint 페이지를 닫습니다.

참고 항목

작업

방법: 리소스 파일 추가

기타 리소스

방법: 기능 지역화

방법: ASPX 태그 지역화

방법: 코드 지역화