System.Resources.NeutralResourcesLanguageAttribute 클래스

이 문서에서는 이 API에 대한 참조 설명서에 대한 추가 설명서를 제공합니다.

데스크톱 앱에서 특성은 NeutralResourcesLanguageAttribute 앱의 기본 문화권 및 해당 리소스의 위치를 리소스 관리자에게 알릴 수 있습니다. 기본적으로 리소스는 기본 앱 어셈블리에 포함되며 다음과 같이 특성을 사용할 수 있습니다. 이 문은 영어(미국)가 앱의 기본 문화권임을 지정합니다.

[assembly: NeutralResourcesLanguage("en-US")]
<Assembly:NeutralResourcesLanguage("en-US")>

특성을 사용하여 NeutralResourcesLanguageAttribute 특성 문에 열거형 값을 제공하여 기본 문화권의 리소스를 UltimateResourceFallbackLocation 찾을 수 있는 위치를 ResourceManager 나타낼 수도 있습니다. 이는 리소스가 위성 어셈블리에 상주함을 나타내기 위해 가장 일반적으로 수행됩니다. 예를 들어 다음 문은 영어(미국)가 앱의 기본 또는 중립 문화권이며 해당 리소스가 위성 어셈블리에 있다고 지정합니다. 개체는 ResourceManager en-US라는 하위 디렉터리에서 해당 개체를 찾습니다.

[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]
<Assembly:NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)>

항상 특성을 사용하여 NeutralResourcesLanguageAttribute 앱의 기본 문화권을 정의하는 것이 좋습니다.

이 특성은 다음 두 가지 역할을 수행합니다.

  • 기본 문화권의 리소스가 앱의 기본 어셈블리에 포함되어 있고 기본 문화권과 ResourceManager 동일한 문화 ResourceManager 권에 속하는 리소스를 검색해야 하는 경우 위성 어셈블리를 검색하는 대신 기본 어셈블리에 있는 리소스를 자동으로 사용합니다. 따라서 일반적인 어셈블리 검색이 무시되고 로드하는 첫 번째 리소스에 대한 조회 성능이 향상되며 작업 집합을 줄일 수 있습니다. 리소스 파일을 검색하는 데 사용하는 프로세스 ResourceManager 에 대한 리소스 패키징 및 배포를 참조하세요.

  • 기본 문화권의 리소스가 기본 앱 어셈블리가 아닌 위성 어셈블리 NeutralResourcesLanguageAttribute 에 있는 경우 특성은 런타임에서 리소스를 로드할 수 있는 문화권 및 디렉터리를 지정합니다.

Windows 8.x 스토어 앱

클래스 NeutralResourcesLanguageAttribute 를 사용하여 ResourceManager 리소스를 로드하고 검색하는 Windows 8.x 스토어 앱에서 이 특성은 프로브 실패 시 리소스가 사용되는 중립 문화권을 정의합니다. 리소스의 위치를 지정하지 않습니다. 기본적으로 ResourceManager 앱의 PRI(패키지 리소스 인덱스) 파일을 사용하여 기본 문화권의 리소스를 찾습니다. 특성에 의해 NeutralResourcesLanguageAttribute 정의된 중립 문화권은 이 효과를 시뮬레이션하기 위해 UI 언어 목록의 끝에 추가됩니다.

Windows 런타임Windows.ApplicationModel.Resources.ResourceLoader 클래스 또는 Windows.ApplicationModel.Resources.Core 네임스페 NeutralResourcesLanguageAttribute 이스의 형식을 사용하여 리소스를 로드하고 검색하면 특성이 무시됩니다.

예제

다음 예제에서는 간단한 "헬로 월드" 앱을 사용하여 특성을 사용하여 NeutralResourcesLanguageAttribute 기본 문화권 또는 대체 문화권을 정의하는 방법을 보여 줍니다. 영어(en), 영어(미국) 및 프랑스어(프랑스)(fr-FR) 문화권에 대한 별도의 리소스 파일을 생성해야 합니다. 다음은 영어 문화권의 ExampleResources.txt 텍스트 파일의 내용을 보여 줍니다.

# Resources for the default (en) culture.
Greeting=Hello

앱에서 리소스 파일을 사용하려면 다음과 같이 리소스 파일 생성기(Resgen.exe)를 사용하여 파일을 텍스트(.txt) 형식에서 이진(.resources) 형식으로 변환해야 합니다.

resgen ExampleResources.txt

앱이 컴파일되면 이진 리소스 파일이 기본 앱 어셈블리에 포함됩니다.

다음은 영어(미국) 문화권에 대한 리소스를 제공하는 ExampleResources.en-US.txt 텍스트 파일의 내용을 보여 줍니다.

# Resources for the en-US culture.
Greeting=Hi

텍스트 파일은 다음과 같이 명령줄에서 ResGen.exe(리소스 파일 생성기)를 사용하여 이진 리소스 파일로 변환할 수 있습니다.

resgen ExampleResources.en-US.txt ExampleResources.en-US.resources

그런 다음 이진 리소스 파일은 어셈블리 링커(Al.exe)를 사용하여 어셈블리로 컴파일되고 다음 명령을 실행하여 앱 디렉터리의 en-US 하위 디렉터리에 배치되어야 합니다.

al /t:lib /embed:ExampleResources.en-US.resources /culture:en-US /out:en-us\Example.resources.dll

다음은 프랑스어(프랑스) 문화권에 대한 리소스를 제공하는 ExampleResources.fr-FR.txt 텍스트 파일의 내용을 보여 줍니다.

# Resources for the fr-FR culture.
Greeting=Bonjour

텍스트 파일은 다음과 같이 명령줄에서 ResGen.exe 사용하여 이진 리소스 파일로 변환할 수 있습니다.

resgen ExampleResources.fr-FR.txt ExampleResources.fr-FR.resources

그런 다음, 어셈블리 링커를 사용하여 이진 리소스 파일을 어셈블리로 컴파일하고 다음 명령을 실행하여 앱 디렉터리의 fr-FR 하위 디렉터리에 배치해야 합니다.

al /t:lib /embed:ExampleResources.fr-FR.resources /culture:fr-FR /out:fr-FR\Example.resources.dll

다음 예제에서는 현재 문화권을 설정하고, 사용자 이름을 묻는 메시지를 표시하고, 지역화된 문자열을 표시하는 실행 코드를 제공합니다.

using System;
using System.Globalization;
using System.Reflection;
using System.Resources;
using System.Threading;

[assembly: NeutralResourcesLanguageAttribute("en")]
public class Example
{
    public static void Main()
    {
        // Select the current culture randomly to test resource fallback.
        string[] cultures = { "de-DE", "en-us", "fr-FR" };
        Random rnd = new Random();
        int index = rnd.Next(0, cultures.Length);
        Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture(cultures[index]);
        Console.WriteLine("The current culture is {0}",
                          CultureInfo.CurrentUICulture.Name);

        // Retrieve the resource.
        ResourceManager rm = new ResourceManager("ExampleResources",
                                                 typeof(Example).Assembly);
        string greeting = rm.GetString("Greeting");

        Console.Write("Enter your name: ");
        string name = Console.ReadLine();
        Console.WriteLine("{0} {1}!", greeting, name);
    }
}
Imports System.Globalization
Imports System.Resources
Imports System.Threading 

<Assembly:NeutralResourcesLanguageAttribute("en")>

Module Example
   Public Sub Main()
      ' Select the current culture randomly to test resource fallback.
      Dim cultures() As String = { "de-DE", "en-us", "fr-FR" }
      Dim rnd As New Random()
      Dim index As Integer = rnd.Next(0, cultures.Length)
      Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture(cultures(index))      
      Console.WriteLine("The current culture is {0}", 
                        CultureInfo.CurrentUICulture.Name)       

      ' Retrieve the resource.
      Dim rm As New ResourceManager("ExampleResources" , GetType(Example).Assembly)
      Dim greeting As String = rm.GetString("Greeting")
      
      Console.Write("Enter your name: ")
      Dim name As String = Console.ReadLine()
      Console.WriteLine("{0} {1}", greeting, name)
   End Sub
End Module

Visual Basic에서 다음 명령을 사용하여 컴파일할 수 있습니다.

vbc Example.vb /resource:ExampleResources.resources

또는 C#에서 다음 명령을 사용합니다.

csc Example.cs /resource:ExampleResources.resources