여러 플랫폼을 대상으로 하는 라이브러리의 앱 리소스App Resources for Libraries That Target Multiple Platforms

.NET Framework를 사용 하 여 이식 가능한 클래스 라이브러리 프로젝트 형식에 여러 플랫폼에서 클래스 라이브러리의 리소스에에서 액세스할 수 있는지 확인 합니다.You can use the .NET Framework Portable Class Library project type to ensure that resources in your class libraries can be accessed from multiple platforms. 이 프로젝트 형식은 Visual Studio 2012에서 사용할 수 및.NET Framework 클래스 라이브러리의 이식 가능한 하위 집합을 대상으로 합니다.This project type is available in Visual Studio 2012 and targets the portable subset of the .NET Framework class library. 이식 가능한 클래스 라이브러리Portable Class Library을 사용할 경우 데스크톱 앱, Silverlight 앱, Windows Phone 앱 및 Windows 8.x 스토어Windows 8.x Store 앱을 통해 라이브러리에 액세스할 수 있게 됩니다.Using a 이식 가능한 클래스 라이브러리Portable Class Library ensures that your library can be accessed from desktop apps, Silverlight apps, Windows Phone apps, and Windows 8.x 스토어Windows 8.x Store apps.

중요

이식 가능한 클래스 라이브러리 프로젝트는.NET 구현의 매우 구체적인 하위 집합만 대상으로 하기 때문에 강력한 것이 좋습니다 새 응용 프로그램 개발에 사용을 합니다.Because Portable Class Library projects target only a very specific subset of .NET implementations, we strongly discourage their use in new application development. 권장 되는 대신.NET Standard 라이브러리를.NET 표준의 특정 버전을 지 원하는 모든.NET 구현을 대상으로 하는 경우The recommended replacement is a .NET Standard library, which targets all .NET implementations that support a specific version of the .NET Standard. 자세한 내용은 .NET 표준을 참조하세요.For more information, see .NET Standard.

이식 가능한 클래스 라이브러리Portable Class Library 프로젝트는 응용 프로그램에서 사용할 수 있는 System.Resources 네임스페이스에서 형식의 매우 제한된 하위 집합만 만들지만 ResourceManager 클래스를 사용하여 리소스를 검색할 수 있습니다.The 이식 가능한 클래스 라이브러리Portable Class Library project makes only a very limited subset of the types in the System.Resources namespace available to your application, but it does allow you to use the ResourceManager class to retrieve resources. 그러나 Visual Studio를 사용하여 응용 프로그램을 만들려면 ResourceManager 클래스를 직접 사용하는 대신에 Visual Studio가 생성한 강력한 형식의 래퍼를 사용하여야 합니다.However, if you are creating an app by using Visual Studio, you should use the strongly typed wrapper created by Visual Studio instead of using the ResourceManager class directly.

Visual Studio를 강력한 형식의 래퍼를 만들려면 주 리소스 파일의 설정 액세스 한정자 Visual Studio 리소스 디자이너에서 공용합니다.To create a strongly typed wrapper in Visual Studio, set the main resource file's Access Modifier in the Visual Studio Resource Designer to Public. 이를 통해 강력한 형식의 ResourceManager 래퍼를 포함하는 [resourceFileName].designer.cs 또는 [resourceFileName].designer.vb 파일을 만듭니다.This creates a [resourceFileName].designer.cs or [resourceFileName].designer.vb file that contains the strongly typed ResourceManager wrapper. 강력한 형식의 리소스 래퍼를 사용 하는 방법에 대 한 자세한 내용은의 "강력한 형식의 리소스 클래스 생성" 섹션을 참조 합니다 Resgen.exe (리소스 파일 생성기) 항목입니다.For more information about using a strongly typed resource wrapper, see the "Generating a Strongly Typed Resource Class" section in the Resgen.exe (Resource File Generator) topic.

이식 가능한 클래스 라이브러리Portable Class Library의 리소스 관리자Resource Manager in the 이식 가능한 클래스 라이브러리Portable Class Library

이식 가능한 클래스 라이브러리Portable Class Library 프로젝트에서 리소스에 대한 모든 액세스는 ResourceManager 클래스에서 처리됩니다.In a 이식 가능한 클래스 라이브러리Portable Class Library project, all access to resources is handled by the ResourceManager class. System.ResourcesResourceReader 같은 ResourceSet 네임스페이스의 형식은 이식 가능한 클래스 라이브러리Portable Class Library 프로젝트에서 액세스할 수 없기 때문에 리소스 액세스에 사용할 수 없습니다.Because types in the System.Resources namespace, such as ResourceReader and ResourceSet, are not accessible from a 이식 가능한 클래스 라이브러리Portable Class Library project, they cannot be used to access resources.

이식 가능한 클래스 라이브러리Portable Class Library 프로젝트에는 다음 테이블에 나열된 4개의 ResourceManager 멤버가 포함되어 있습니다.The 이식 가능한 클래스 라이브러리Portable Class Library project includes the four ResourceManager members listed in the following table. 이러한 생성자와 메서드를 사용하여 ResourceManager 개체를 인스턴스화하고 문자열 리소스를 검색할 수 있습니다.These constructors and methods enable you to instantiate a ResourceManager object and retrieve string resources.

ResourceManager 멤버ResourceManager member 설명Description
ResourceManager(String, Assembly) ResourceManager 인스턴스를 만들어 지정한 어셈블리에서 발견되는 명명된 리소스 파일에 액세스합니다.Creates a ResourceManager instance to access the named resource file found in the specified assembly.
ResourceManager(Type) 지정한 형식에 해당하는 ResourceManager 인스턴스를 만듭니다.Creates a ResourceManager instance that corresponds to the specified type.
GetString(String) 현재 문화권에 대해 명명된 리소스를 검색합니다.Retrieves a named resource for the current culture.
GetString(String, CultureInfo) 지정된 문화권에 속하는 명명된 리소스를 검색합니다.Retrieves a named resource belonging to the specified culture.

ResourceManager에서 다른 이식 가능한 클래스 라이브러리Portable Class Library 멤버의 제외는 serialize된 개체, 문자열이 아닌 데이터 및 이미지를 리소스 파일에서 검색할 수 없음을 의미합니다.The exclusion of other ResourceManager members from the 이식 가능한 클래스 라이브러리Portable Class Library means that serialized objects, non-string data, and images cannot be retrieved from a resource file. 이식 가능한 클래스 라이브러리Portable Class Library에서 리소스를 사용하려면 문자열 형식의 모든 개체 데이터를 저장해야 합니다.To use resources from a 이식 가능한 클래스 라이브러리Portable Class Library, you should store all object data in string form. 예를 들어, 이를 문자열로 변환하여 리소스 파일에 숫자 값을 저장할 수 있으며 숫자 데이터 형식의 Parse 또는 TryParse 메서드를 사용하여 다시 숫자로 변환할 수 있습니다.For example, you can store numeric values in a resource file by converting them to strings, and you can retrieve them and then convert them back to numbers by using the numeric data type's Parse or TryParse method. Convert.ToBase64String 메서드를 호출하여 이미지 또는 기타 이진 데이터를 문자열 표현으로 변환하고 Convert.FromBase64String 메서드를 호출하여 바이트 배열로 복원할 수 있습니다.You can convert images or other binary data to a string representation by calling the Convert.ToBase64String method, and restore them to a byte array by calling the Convert.FromBase64String method.

이식 가능한 클래스 라이브러리Portable Class Library 및 Windows 스토어 앱The 이식 가능한 클래스 라이브러리Portable Class Library and Windows Store Apps

이식 가능한 클래스 라이브러리Portable Class Library 프로젝트는 .resx 파일에 리소스를 저장한 다음 .resources 파일로 컴파일하고 컴파일 타임에 주 어셈블리 또는 위성 어셈블리에 포함시킵니다.projects store resources in .resx files, which are then compiled into .resources files and embedded in the main assembly or in satellite assemblies at compile time. 반면에 Windows 8.x 스토어Windows 8.x Store 응용 프로그램은 리소스를 단일 패키지 리소스 인덱스(PRI) 파일로 컴파일되는 .resw 파일에 저장해야 합니다.Windows 8.x 스토어Windows 8.x Store apps, on the other hand, require resources to be stored in .resw files, which are then compiled into a single package resource index (PRI) file. 그러나 호환되지 않는 파일 형식에도 불구하고 이식 가능한 클래스 라이브러리Portable Class LibraryWindows 8.x 스토어Windows 8.x Store 응용 프로그램에서 작동합니다.However, despite the incompatible file formats, your 이식 가능한 클래스 라이브러리Portable Class Library will work in a Windows 8.x 스토어Windows 8.x Store app.

Windows 8.x 스토어Windows 8.x Store 응용 프로그램에서 클래스 라이브러리를 사용하려면 Windows 스토어 앱 프로젝트에 이 라이브러리에 대한 참조를 추가합니다.To consume your class library from a Windows 8.x 스토어Windows 8.x Store app, add a reference to it in your Windows Store app project. Visual Studio는 어셈블리의 리소스를 .resw 파일에 투명하게 추출하여 Windows 런타임Windows Runtime에서 리소스를 추출할 수 있는 PRI 파일을 생성하는 데 이 파일을 사용합니다.Visual Studio will transparently extract the resources from your assembly into a .resw file and use it to generate a PRI file from which the Windows 런타임Windows Runtime can extract resources. 런타임에 Windows 런타임Windows Runtime이식 가능한 클래스 라이브러리Portable Class Library에서 코드를 실행하지만 PRI 파일에서 이식 가능한 클래스 라이브러리의 리소스를 검색합니다.At run time, the Windows 런타임Windows Runtime executes the code in your 이식 가능한 클래스 라이브러리Portable Class Library, but it retrieves your Portable Class Library's resources from the PRI file.

이식 가능한 클래스 라이브러리Portable Class Library 프로젝트에 지역화된 리소스가 포함된 경우 허브 및 스포크 모델을 사용하여 데스크톱 응용 프로그램에서 라이브러리에 대해 수행하는 것처럼 배포합니다.If your 이식 가능한 클래스 라이브러리Portable Class Library project includes localized resources, you use the hub-and-spoke model to deploy them just as you would for a library in a desktop app. Windows 8.x 스토어Windows 8.x Store 응용 프로그램에서 주 리소스 파일과 지역화된 모든 리소스 파일을 사용하도록 주 어셈블리에 대한 참조를 추가합니다.To consume your main resource file and any localized resource files in your Windows 8.x 스토어Windows 8.x Store app, you add a reference to the main assembly. 컴파일 타임에 Visual Studio는 주 리소스 파일 및 지역화된 리소스 파일에서 리소스를 추출하여 별도의 .resw 파일에 넣습니다.At compile time, Visual Studio extracts the resources from your main resource file and any localized resource files into separate .resw files. 그런 다음 런타임에 Windows 런타임Windows Runtime가 액세스하는 단일 PRI 파일로 .resw 파일을 컴파일합니다.It then compiles the .resw files into a single PRI file that the Windows 런타임Windows Runtime accesses at run time.

예제: 지역화 되지 않은 이식 가능한 클래스 라이브러리Portable Class LibraryExample: Non-Localized 이식 가능한 클래스 라이브러리Portable Class Library

다음 간단하고 지역화되지 않은 이식 가능한 클래스 라이브러리Portable Class Library 예제는 리소스를 사용하여 열 이름을 지정하고 표 형식 데이터를 예약하는 문자 수를 확인하는 데 사용합니다.The following simple, non-localized 이식 가능한 클래스 라이브러리Portable Class Library example uses resources to store the names of columns and to determine the number of characters to reserve for tabular data. 예제에서는 LibResources.resx라는 파일을 사용하여 다음 테이블에 나열된 문자열 리소스를 저장합니다.The example uses a file named LibResources.resx to store the string resources listed in the following table.

리소스 이름Resource name 리소스 값Resource value
BornBorn BirthdateBirthdate
BornLengthBornLength 1212
HiredHired Hire DateHire Date
HiredLengthHiredLength 1212
IDID IDID
ID.LengthID.Length 1212
이름Name 이름Name
NameLengthNameLength 2525
제목Title 직원 데이터베이스Employee Database

다음 코드는 정의 UILibrary 라는 리소스 관리자 래퍼를 사용 하는 클래스 resources Visual Studio에서 생성 된 때를 액세스 한정자 파일에 변경 된 공개 .The following code defines a UILibrary class that uses the Resource Manager wrapper named resources generated by Visual Studio when the Access Modifier for the file is changed to Public. UILibrary 클래스는 필요에 따라 문자열 데이터를 구문 분석합니다.The UILibrary class parses the string data as necessary. .. 클래스는 MyCompany.Employees 네임스페이스에 있습니다.Note that the class is in the MyCompany.Employees namespace.

using System;
using System.Resources;
using MyCompany.Employees;

[assembly: NeutralResourcesLanguage("en-US")]

namespace MyCompany.Employees
{
   public class UILibrary
   {
      private const int nFields = 4;

      public static string GetTitle()
      {
         string retval = LibResources.Born; 
         if (String.IsNullOrEmpty(retval))
            retval = "";

         return retval;
      }

      public static string[] GetFieldNames()
      {
         string[] fieldnames = new string[nFields];
         fieldnames[0] = LibResources.Name;
         fieldnames[1] = LibResources.ID;
         fieldnames[2] = LibResources.Born;
         fieldnames[3] = LibResources.Hired;
         return fieldnames;
      }

      public static int[] GetFieldLengths()
      {
         int[] fieldLengths = new int[nFields];
         fieldLengths[0] = Int32.Parse(LibResources.NameLength);
         fieldLengths[1] = Int32.Parse(LibResources.IDLength);
         fieldLengths[2] = Int32.Parse(LibResources.BornLength);
         fieldLengths[3] = Int32.Parse(LibResources.HiredLength);
         return fieldLengths;
      }
   }
}
Imports System.Resources

<Assembly: NeutralResourcesLanguage("en-US")> 

Public Class UILibrary
   Private Const nFields As Integer = 4

   Public Shared Function GetTitle() As String
      Dim retval As String = My.Resources.LibResources.Title
      If String.IsNullOrEmpty(retval) Then retval = "<No value>"

      Return retval
   End Function

   Public Shared Function GetFieldNames() As String()
      Dim fieldnames(nFields - 1) As String
      fieldnames(0) = My.Resources.LibResources.Name
      fieldnames(1) = My.Resources.LibResources.ID
      fieldnames(2) = My.Resources.LibResources.Born
      fieldnames(3) = My.Resources.LibResources.Hired
      Return fieldnames
   End Function

   Public Shared Function GetFieldLengths() As Integer()
      Dim fieldLengths(nFields - 1) As Integer
      fieldLengths(0) = Int32.Parse(My.Resources.LibResources.NameLength)
      fieldLengths(1) = Int32.Parse(My.Resources.LibResources.IDLength)
      fieldLengths(2) = Int32.Parse(My.Resources.LibResources.BornLength)
      fieldLengths(3) = Int32.Parse(My.Resources.LibResources.HiredLength)
      Return fieldLengths
   End Function
End Class

다음 코드는 UILibrary 클래스와 해당 리소스를 콘솔 모드 응용 프로그램에서 액세스하는 방법을 보여 줍니다.The following code illustrates how the UILibrary class and its resources can be accessed from a console-mode app. 이 콘솔 응용 프로그램 프로젝트에 추가하려면 UILIbrary.dll에 대한 참조가 필요합니다.It requires a reference to UILIbrary.dll to be added to the console app project.

using System;
using System.Collections.Generic;
using MyCompany.Employees;
 
class Program
{
   static void Main()
   {
     // Get the data from some data source.
      var employees = InitializeData();

      // Display application title.
      string title = UILibrary.GetTitle();
      int start = (Console.WindowWidth + title.Length) / 2;
      string titlefmt = String.Format("{{0,{0}{1}", start, "}");
      Console.WriteLine(titlefmt, title);
      Console.WriteLine();

      // Retrieve resources.
      string[] fields = UILibrary.GetFieldNames();
      int[] lengths = UILibrary.GetFieldLengths();
      string fmtString = String.Empty;
      // Create format string for field headers and data.
      for (int ctr = 0; ctr < fields.Length; ctr++)
         fmtString += String.Format("{{{0},-{1}{2}{3}   ", ctr, lengths[ctr], ctr >= 2 ? ":d" : "", "}");

      // Display the headers.
      Console.WriteLine(fmtString, fields);
      Console.WriteLine();
      // Display the data.
      foreach (var e in employees)
         Console.WriteLine(fmtString, e.Item1, e.Item2, e.Item3, e.Item4);

      Console.ReadLine();
   }

   private static List<Tuple<String, String, DateTime, DateTime>> InitializeData() 
   {
      List<Tuple<String, String, DateTime, DateTime>> employees = new List<Tuple<String, String, DateTime, DateTime>>();
      var t1 = Tuple.Create("John", "16302", new DateTime(1954, 8, 18), new DateTime(2006, 9, 8));
      employees.Add(t1);
      t1 = Tuple.Create("Alice", "19745", new DateTime(1995, 5, 10), new DateTime(2012, 10, 17));
      employees.Add(t1);
      return employees;
   }
}
Imports MyCompany.Employees
Imports System.Collections.Generic

Module Module1

   Sub Main()
      ' Get the data from some data source.
      Dim employees = InitializeData()

      ' Display application title.
      Dim title As String = UILibrary.GetTitle()
      Dim start As Integer = (Console.WindowWidth + title.Length) \ 2
      Dim titlefmt As String = String.Format("{{0,{0}{1}", start, "}")
      Console.WriteLine(titlefmt, title)
      Console.WriteLine()

      ' Retrieve resources.
      Dim fields() As String = UILibrary.GetFieldNames()
      Dim lengths() As Integer = UILibrary.GetFieldLengths()
      Dim fmtString As String = String.Empty
      ' Create format string for field headers and data.
      For ctr = 0 To fields.Length - 1
         fmtString += String.Format("{{{0},-{1}{2}{3}   ", ctr, lengths(ctr), IIf(ctr >= 2, ":d", ""), "}")
      Next
      ' Display the headers.
      Console.WriteLine(fmtString, fields)
      Console.WriteLine()
      ' Display the data.
      For Each e In employees
         Console.WriteLine(fmtString, e.Item1, e.Item2, e.Item3, e.Item4)
      Next
      Console.ReadLine()
   End Sub

   Private Function InitializeData() As List(Of Tuple(Of String, String, Date, Date))
      Dim employees As New List(Of Tuple(Of String, String, Date, Date))
      Dim t1 = Tuple.Create("John", "16302", #8/18/1954#, #9/8/2006#)
      employees.Add(t1)
      t1 = Tuple.Create("Alice", "19745", #5/10/1995#, #10/17/2012#)
      employees.Add(t1)
      Return employees
   End Function
End Module

다음 코드는 UILibrary 클래스와 해당 리소스를 Windows 8.x 스토어Windows 8.x Store 응용 프로그램에서 액세스하는 방법을 보여줍니다.The following code illustrates how the UILibrary class and its resources can be accessed from a Windows 8.x 스토어Windows 8.x Store app. Windows 스토어 앱 프로젝트에 추가하려면 UILIbrary.dll에 대한 참조가 필요합니다.It requires a reference to UILIbrary.dll to be added to the Windows Store app project.

using System;
using System.Collections.Generic;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;
using MyCompany.Employees;

namespace ConsumerCS
{
    /// <summary>
    /// An empty page that can be used on its own or navigated to within a Frame.
    /// </summary>
    public sealed partial class BlankPage : Page
    {
        public BlankPage()
        {
            this.InitializeComponent();

         }

        /// <summary>
        /// Invoked when this page is about to be displayed in a Frame.
        /// </summary>
        /// <param name="e">Event data that describes how this page was reached.  The Parameter
        /// property is typically used to configure the page.</param>
        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
           Example.DisplayData(outputBlock);
       }
    }
}

public class Example
{
    static public void DisplayData(Windows.UI.Xaml.Controls.TextBlock outputBlock)
    {
        // Get the data from some data source.
        var employees = InitializeData();
        outputBlock.FontFamily = new FontFamily("Courier New");      
        // Display application title.
        string title = UILibrary.GetTitle();
        outputBlock.Text += title + Environment.NewLine + Environment.NewLine;

        // Retrieve resources.
        string[] fields = UILibrary.GetFieldNames();
        int[] lengths = UILibrary.GetFieldLengths();
        string fmtString = String.Empty;
        // Create format string for field headers and data.
        for (int ctr = 0; ctr < fields.Length; ctr++)
            fmtString += String.Format("{{{0},-{1}{2}{3}   ", ctr, lengths[ctr], ctr >= 2 ? ":d" : "", "}");

        // Display the headers.
        outputBlock.Text += String.Format(fmtString, fields) + Environment.NewLine + Environment.NewLine;
        // Display the data.
        foreach (var e in employees)
            outputBlock.Text += String.Format(fmtString, e.Item1, e.Item2, e.Item3, e.Item4) + Environment.NewLine;
    }

    private static List<Tuple<String, String, DateTime, DateTime>> InitializeData()
    {
        List<Tuple<String, String, DateTime, DateTime>> employees = new List<Tuple<String, String, DateTime, DateTime>>();
        var t1 = Tuple.Create("John", "16302", new DateTime(1954, 8, 18), new DateTime(2006, 9, 8));
        employees.Add(t1);
        t1 = Tuple.Create("Alice", "19745", new DateTime(1995, 5, 10), new DateTime(2012, 10, 17));
        employees.Add(t1);
        return employees;
    }
}

예제: 지역화 이식 가능한 클래스 라이브러리Portable Class LibraryExample: Localized 이식 가능한 클래스 라이브러리Portable Class Library

다음의 지역화된 이식 가능한 클래스 라이브러리Portable Class Library 예제에는 프랑스어(프랑스) 및 영어(미국) 문화권에 대한 리소스가 포함됩니다.The following localized 이식 가능한 클래스 라이브러리Portable Class Library example includes resources for the French (France) and English (United States) cultures. 영어 (미국) 문화권은 앱의 기본 문화권; 해당 리소스의 표에 표시 됩니다는 이전 섹션합니다.The English (United States) culture is the app's default culture; its resources are shown in the table in the previous section. 프랑스어(프랑스) 문화권의 리소스 이름은 LibResources.fr-FR.resx라고 하며 다음 표에 나열된 문자열 리소스로 구성됩니다.The resources file for the French (France) culture is named LibResources.fr-FR.resx and consists of the string resources listed in the following table. UILibrary 클래스의 소스 코드는 이전 단원에 나와 있는 것과 동일합니다.The source code for the UILibrary class is the same as that shown in the previous section.

리소스 이름Resource name 리소스 값Resource value
BornBorn Date de naissanceDate de naissance
BornLengthBornLength 2020
HiredHired Date embauchéDate embauché
HiredLengthHiredLength 1616
IDID IDID
이름Name NomNom
제목Title Base de données des employésBase de données des employés

다음 코드는 UILibrary 클래스와 해당 리소스를 콘솔 모드 응용 프로그램에서 액세스하는 방법을 보여 줍니다.The following code illustrates how the UILibrary class and its resources can be accessed from a console-mode app. 이 콘솔 응용 프로그램 프로젝트에 추가하려면 UILIbrary.dll에 대한 참조가 필요합니다.It requires a reference to UILIbrary.dll to be added to the console app project.

using System;
using System.Collections.Generic;
using System.Globalization;

using MyCompany.Employees;
 
class Program
{
   static void Main(string[] args)
   {
     
      // Get the data from some data source.
      var employees = InitializeData();

      // Display application title.
      string title = UILibrary.GetTitle();
      int start = (Console.WindowWidth + title.Length) / 2;
      string titlefmt = String.Format("{{0,{0}{1}", start, "}");
      Console.WriteLine(titlefmt, title);
      Console.WriteLine();

      // Retrieve resources.
      string[] fields = UILibrary.GetFieldNames();
      int[] lengths = UILibrary.GetFieldLengths();
      string fmtString = String.Empty;
      // Create format string for field headers and data.
      for (int ctr = 0; ctr < fields.Length; ctr++)
         fmtString += String.Format("{{{0},-{1}{2}{3}   ", ctr, lengths[ctr], ctr >= 2 ? ":d" : "", "}");

      // Display the headers.
      Console.WriteLine(fmtString, fields);
      Console.WriteLine();
      // Display the data.
      foreach (var e in employees)
         Console.WriteLine(fmtString, e.Item1, e.Item2, e.Item3, e.Item4);

      Console.ReadLine();
   }

   private static List<Tuple<String, String, DateTime, DateTime>> InitializeData() 
   {
      List<Tuple<String, String, DateTime, DateTime>> employees = new List<Tuple<String, String, DateTime, DateTime>>();
      var t1 = Tuple.Create("John", "16302", new DateTime(1954, 8, 18), new DateTime(2006, 9, 8));
      employees.Add(t1);
      t1 = Tuple.Create("Alice", "19745", new DateTime(1995, 5, 10), new DateTime(2012, 10, 17));
      employees.Add(t1);
      return employees;
   }

}
Imports MyCompany.Employees
Imports System.Collections.Generic
Imports System.Globalization
Imports System.Threading

Module Module1
   Sub Main()
      Dim culture As CultureInfo = CultureInfo.CreateSpecificCulture("fr-FR")
      Thread.CurrentThread.CurrentCulture = culture
      Thread.CurrentThread.CurrentUICulture = culture
      Console.WriteLine("Current culture is {0}", CultureInfo.CurrentCulture.Name)

      ' Get the data from some data source.
      Dim employees = InitializeData()

      ' Display application title.
      Dim title As String = UILibrary.GetTitle()
      Dim start As Integer = (Console.WindowWidth + title.Length) \ 2
      Dim titlefmt As String = String.Format("{{0,{0}{1}", start, "}")
      Console.WriteLine(titlefmt, title)
      Console.WriteLine()

      ' Retrieve resources.
      Dim fields() As String = UILibrary.GetFieldNames()
      Dim lengths() As Integer = UILibrary.GetFieldLengths()
      Dim fmtString As String = String.Empty
      ' Create format string for field headers and data.
      For ctr = 0 To fields.Length - 1
         fmtString += String.Format("{{{0},-{1}{2}{3}   ", ctr, lengths(ctr), IIf(ctr >= 2, ":d", ""), "}")
      Next
      ' Display the headers.
      Console.WriteLine(fmtString, fields)
      Console.WriteLine()
      ' Display the data.
      For Each e In employees
         Console.WriteLine(fmtString, e.Item1, e.Item2, e.Item3, e.Item4)
      Next
      Console.ReadLine()
   End Sub

   Private Function InitializeData() As List(Of Tuple(Of String, String, Date, Date))
      Dim employees As New List(Of Tuple(Of String, String, Date, Date))
      Dim t1 = Tuple.Create("John", "16302", #8/18/1954#, #9/8/2006#)
      employees.Add(t1)
      t1 = Tuple.Create("Alice", "19745", #5/10/1995#, #10/17/2012#)
      employees.Add(t1)
      Return employees
   End Function
End Module

다음 코드는 UILibrary 클래스와 해당 리소스를 Windows 8.x 스토어Windows 8.x Store 응용 프로그램에서 액세스하는 방법을 보여줍니다.The following code illustrates how the UILibrary class and its resources can be accessed from a Windows 8.x 스토어Windows 8.x Store app. Windows 스토어 앱 프로젝트에 추가하려면 UILIbrary.dll에 대한 참조가 필요합니다.It requires a reference to UILIbrary.dll to be added to the Windows Store app project. 정적 ApplicationLanguages.PrimaryLanguageOverride 속성을 사용하여 응용 프로그램의 기본 설정 언어를 프랑스어로 설정합니다.It uses the static ApplicationLanguages.PrimaryLanguageOverride property to set the app's preferred language to French.

using System;
using System.Collections.Generic;
using Windows.Globalization;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;
using MyCompany.Employees;

namespace LocConsumerCS
{
    public sealed partial class BlankPage : Page
    {
        public BlankPage()
        {
            this.InitializeComponent();

        }

        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            Example.Demo(outputBlock);
        }
    }

    public class Example
    {
        public static void Demo(TextBlock outputBlock)
        {
            // Set the application preferences.
            ApplicationLanguages.PrimaryLanguageOverride = "fr-FR";

            // Get the data from some data source. 
            var employees = InitializeData();
            outputBlock.FontFamily = new FontFamily("Courier New");
            // Display application title.
            string title = UILibrary.GetTitle();
            outputBlock.Text += title + Environment.NewLine + Environment.NewLine; 

            // Retrieve resources.
            string[] fields = UILibrary.GetFieldNames();
            int[] lengths = UILibrary.GetFieldLengths();
            string fmtString = String.Empty;
            // Create format string for field headers and data.
            for (int ctr = 0; ctr < fields.Length; ctr++)
                fmtString += String.Format("{{{0},-{1}{2}{3}   ", ctr, lengths[ctr], ctr >= 2 ? ":d" : "", "}");

            // Display the headers.
            outputBlock.Text += String.Format(fmtString, fields) + Environment.NewLine + Environment.NewLine;

            // Display the data.
            foreach (var e in employees)
                outputBlock.Text += String.Format(fmtString, e.Item1, e.Item2, e.Item3, e.Item4) + Environment.NewLine;
        }

        private static List<Tuple<String, String, DateTime, DateTime>> InitializeData()
        {
            List<Tuple<String, String, DateTime, DateTime>> employees = new List<Tuple<String, String, DateTime, DateTime>>();
            var t1 = Tuple.Create("John", "16302", new DateTime(1954, 8, 18), new DateTime(2006, 9, 8));
            employees.Add(t1);
            t1 = Tuple.Create("Alice", "19745", new DateTime(1995, 5, 10), new DateTime(2012, 10, 17));
            employees.Add(t1);
            return employees;
        }
    }
}
Imports Windows.Globalization
Imports MyCompany.Employees

Public NotInheritable Class BlankPage
    Inherits Page

    Protected Overrides Sub OnNavigatedTo(e As Navigation.NavigationEventArgs)
        Example.Demo(outputBlock)
    End Sub
End Class

Public Class Example
    Public Shared Sub Demo(outputBlock As Windows.UI.Xaml.Controls.TextBlock)
        ' Set the application preferences.
        ApplicationLanguages.PrimaryLanguageOverride = "fr-FR"

        ' Get the data from some data source. 
        Dim employees = InitializeData()
        outputBlock.FontFamily = New FontFamily("Courier New")
        ' Display application title.
        Dim title As String = UILibrary.GetTitle()
        outputBlock.Text += title + vbCrLf + vbCrLf

        ' Retrieve resources.
        Dim fields() As String = UILibrary.GetFieldNames()
        Dim lengths() As Integer = UILibrary.GetFieldLengths()
        Dim fmtString As String = String.Empty
        ' Create format string for field headers and data.
        For ctr = 0 To fields.Length - 1
            fmtString += String.Format("{{{0},-{1}{2}{3}   ", ctr, lengths(ctr), If(ctr >= 2, ":d", ""), "}")
        Next
        ' Display the headers.
        outputBlock.Text += String.Format(fmtString, fields) + vbCrLf + vbCrLf

        ' Display the data.
        For Each e In employees
            outputBlock.Text += String.Format(fmtString, e.Item1, e.Item2, e.Item3, e.Item4) + vbCrLf
        Next
    End Sub

    Private Shared Function InitializeData() As List(Of Tuple(Of String, String, Date, Date))
        Dim employees As New List(Of Tuple(Of String, String, Date, Date))
        Dim t1 = Tuple.Create("John", "16302", #8/18/1954#, #9/8/2006#)
        employees.Add(t1)
        t1 = Tuple.Create("Alice", "19745", #5/10/1995#, #10/17/2012#)
        employees.Add(t1)
        Return employees
    End Function
End Class

참고자료See also