다음을 통해 공유


System.Resources.ResourceManager.GetString 메서드

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

이 속성은 IgnoreCase 리소스 이름과의 name 비교가 대/소문자를 구분하지 않는지(기본값) 또는 대/소문자를 구분하는지를 결정합니다.

참고 항목

메서드는 GetString 나열된 것보다 더 많은 예외를 throw할 수 있습니다. 이 문제가 발생할 수 있는 한 가지 이유는 이 메서드가 호출하는 메서드가 예외를 throw하는 경우입니다. 예를 들어 FileLoadException 위성 어셈블리를 배포하거나 설치하는 동안 오류가 발생하면 예외가 throw되거나, SerializationException 형식이 역직렬화될 때 사용자 정의 형식이 사용자 정의 예외를 throw하는 경우 예외가 throw될 수 있습니다.

GetString(String) 메서드

데스크톱 앱

데스크톱 앱에서 반환되는 리소스는 속성에 정의된 대로 현재 스레드의 UI 문화권에 CultureInfo.CurrentUICulture 대해 지역화됩니다. 리소스가 해당 문화권에 대해 지역화되지 않은 경우 리소스 관리자는 리소스 패키징 및 배포 문서의 "리소스 대체 프로세스" 섹션 에 설명된 단계에 따라 리소스를 검색합니다 . 사용할 수 있는 지역화된 리소스 집합이 없으면 리소스 관리자는 기본 문화권의 리소스를 다시 사용합니다. 리소스 관리자가 기본 문화권의 리소스 집합을 로드할 수 없는 경우 메서드는 예외를 MissingManifestResourceException throw하거나 리소스 집합이 위성 어셈블리에 상주해야 하는 경우 예외를 MissingSatelliteAssemblyException throw합니다. 리소스 관리자가 적절한 리소스 집합을 로드할 수 있지만 이름이 지정된 name리소스를 찾을 수 없는 경우 메서드가 반환됩니다 null.

Windows 8.x 앱

Important

클래스는 ResourceManager Windows 8.x 앱에서 지원되지만 사용하지 않는 것이 좋습니다. Windows 8.x 앱에서 사용할 수 있는 이식 가능한 클래스 라이브러리 프로젝트를 개발하는 경우에만 이 클래스를 사용합니다. Windows 8.x 앱에서 리소스를 검색하려면 Windows.ApplicationModel.Resources.ResourceLoader 클래스를 대신 사용합니다.

Windows 8.x 앱에서 메서드는 GetString(String) 호출자의 현재 UI 문화권 설정에 대해 지역화된 문자열 리소스의 값을 name 반환합니다. 문화권 목록은 운영 체제의 기본 UI 언어 목록에서 파생됩니다. 리소스 관리자가 일치 name할 수 없으면 메서드가 반환됩니다 null.

예시

다음 예제에서는 메서드를 GetString 사용하여 문화권별 리소스를 검색합니다. 영어(en), 프랑스어(프랑스)(fr-FR) 및 러시아어(러시아)(ru-RU) 문화권에 대한 .txt 파일에서 컴파일된 리소스로 구성됩니다. 이 예제에서는 현재 문화권과 현재 UI 문화권을 영어(미국), 프랑스어(프랑스), 러시아어(러시아) 및 스웨덴어(스웨덴)로 변경합니다. 그런 다음 메서드를 GetString 호출하여 지역화된 문자열을 검색합니다. 이 문자열은 현재 날짜 및 월과 함께 표시됩니다. 현재 UI 문화권이 스웨덴어(스웨덴)인 경우를 제외하고 출력에 적절한 지역화된 문자열이 표시됩니다. 스웨덴어 언어 리소스를 사용할 수 없으므로 앱은 대신 영어인 기본 문화권의 리소스를 사용합니다. 이 예제에서는 다음 표에 나열된 텍스트 기반 리소스 파일이 필요합니다. 각각에는 이름이 DateStart1개인 문자열 리소스가 있습니다.

문화권 File name 리소스 이름 리소스 값
en-US DateStrings.txt DateStart 현재는 다음과 입니다.
fr-FR DateStrings.fr-FR.txt DateStart 오주르드후이, c'est le
ru-RU DateStrings.ru-RU.txt DateStart Сегодня

다음 일괄 처리 파일을 사용하여 C# 예제를 컴파일할 수 있습니다. Visual Basic의 경우 cscvbc로 변경하고, 소스 코드 파일의 확장을 .cs 에서 .vb로 변경합니다.

resgen DateStrings.txt
csc showdate.cs /resource:DateStrings.resources

md fr-FR
resgen DateStrings.fr-FR.txt
al /out:fr-FR\Showdate.resources.dll /culture:fr-FR /embed:DateStrings.fr-FR.resources

md ru-RU
resgen DateStrings.ru-RU.txt
al /out:ru-RU\Showdate.resources.dll /culture:ru-RU /embed:DateStrings.ru-RU.resources

다음은 예제의 소스 코드입니다(Visual Basic 버전에 대한 ShowDate.vb 또는 C# 버전의 ShowDate.cs).

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

public class Example
{
   public static void Main()
   {
      string[] cultureNames = [ "en-US", "fr-FR", "ru-RU", "sv-SE" ];
      ResourceManager rm = new ResourceManager("DateStrings",
                                               typeof(Example).Assembly);

      foreach (var cultureName in cultureNames) {
         CultureInfo culture = CultureInfo.CreateSpecificCulture(cultureName);
         Thread.CurrentThread.CurrentCulture = culture;
         Thread.CurrentThread.CurrentUICulture = culture;

         Console.WriteLine("Current UI Culture: {0}",
                           CultureInfo.CurrentUICulture.Name);
         string dateString = rm.GetString("DateStart");
         Console.WriteLine("{0} {1:M}.\n", dateString, DateTime.Now);
      }
   }
}
// The example displays output similar to the following:
//       Current UI Culture: en-US
//       Today is February 03.
//
//       Current UI Culture: fr-FR
//       Aujourd'hui, c'est le 3 février
//
//       Current UI Culture: ru-RU
//       Сегодня февраля 03.
//
//       Current UI Culture: sv-SE
//       Today is den 3 februari.
Imports System.Globalization
Imports System.Resources
Imports System.Threading

<Assembly:NeutralResourcesLanguage("en")>

Module Example
   Public Sub Main()
      Dim cultureNames() As String = { "en-US", "fr-FR", "ru-RU", "sv-SE" }
      Dim rm As New ResourceManager("DateStrings",
                                    GetType(Example).Assembly)
      
      For Each cultureName In cultureNames
         Dim culture As CultureInfo = CultureInfo.CreateSpecificCulture(cultureName)
         Thread.CurrentThread.CurrentCulture = culture 
         Thread.CurrentThread.CurrentUICulture = culture

         Console.WriteLine("Current UI Culture: {0}", 
                           CultureInfo.CurrentUICulture.Name)
         Dim dateString As String = rm.GetString("DateStart")
         Console.WriteLine("{0} {1:M}.", dateString, Date.Now)                           
         Console.WriteLine()
      Next                                           
   End Sub
End Module
' The example displays output similar to the following:
'       Current UI Culture: en-US
'       Today is February 03.
'       
'       Current UI Culture: fr-FR
'       Aujourd'hui, c'est le 3 février
'       
'       Current UI Culture: ru-RU
'       Сегодня февраля 03.
'       
'       Current UI Culture: sv-SE
'       Today is den 3 februari.

GetString(String, CultureInfo) 메서드

데스크톱 앱

데스크톱 앱의 경우 culture 메서드는 nullGetString(String, CultureInfo) 속성에서 가져온 현재 UI 문화권을 CultureInfo.CurrentUICulture 사용합니다.

반환되는 리소스는 매개 변수로 지정된 문화권에 culture 대해 지역화됩니다. 리소스가 지역화 culture되지 않은 경우 리소스 관리자는 리소스 패키징 및 배포 항목의 "리소스 대체 프로세스" 섹션에 설명된 단계에 따라 리소스를 검색합니다 . 사용할 수 있는 리소스 집합을 찾을 수 없는 경우 리소스 관리자는 기본 문화권의 리소스로 돌아갑니다. 리소스 관리자가 기본 문화권의 리소스 집합을 로드할 수 없는 경우 메서드는 예외를 MissingManifestResourceException throw하거나 리소스 집합이 위성 어셈블리에 상주해야 하는 경우 예외를 MissingSatelliteAssemblyException throw합니다. 리소스 관리자가 적절한 리소스 집합을 로드할 수 있지만 이름이 지정된 name리소스를 찾을 수 없는 경우 메서드가 반환됩니다 null.

Windows 8.x 앱

Important

클래스는 ResourceManager Windows 8.x 앱에서 지원되지만 사용하지 않는 것이 좋습니다. Windows 8.x 앱에서 사용할 수 있는 이식 가능한 클래스 라이브러리 프로젝트를 개발하는 경우에만 이 클래스를 사용합니다. Windows 8.x 앱에서 리소스를 검색하려면 Windows.ApplicationModel.Resources.ResourceLoader 클래스를 대신 사용합니다.

Windows 8.x 앱에서 메서드는 GetString(String, CultureInfo) 매개 변수로 지정된 culture 문화권에 대해 지역화된 문자열 리소스의 name 값을 반환합니다. 리소스가 문화권에 대해 culture 지역화되지 않은 경우 조회는 전체 Windows 8 언어 대체 목록을 사용하고 기본 문화권을 살펴본 후 중지됩니다. 리소스 관리자가 일치 name할 수 없으면 메서드가 반환됩니다 null.

예시

다음 예제에서는 메서드를 GetString(String, CultureInfo) 사용하여 문화권별 리소스를 검색합니다. 이 예제의 기본 문화권은 영어(en)이며 프랑스어(프랑스)(fr-FR) 및 러시아어(러시아)(ru-RU) 문화권에 대한 위성 어셈블리를 포함합니다. 이 예제에서는 호출하기 전에 현재 문화권과 현재 UI 문화권을 러시아어(러시아)로 GetString(String, CultureInfo)변경합니다. 그런 다음 메서드와 메서드를 DateTime.ToString(String, IFormatProvider) 호출 GetString 하고 프랑스(프랑스) 및 스웨덴어(스웨덴) 문화권을 나타내는 개체를 각 메서드에 전달 CultureInfo 합니다. 출력에서는 메서드가 프랑스어 리소스를 검색할 수 있기 때문에 GetString 해당 월과 일 및 그 앞에 오는 문자열이 프랑스어로 표시됩니다. 그러나 스웨덴어(스웨덴) 문화권이 사용되는 경우 월과 날짜는 스웨덴어로 표시되지만 앞에 오는 문자열은 영어로 표시됩니다. 이는 리소스 관리자가 지역화된 스웨덴어 리소스를 찾을 수 없기 때문에 기본 영어 문화권에 대한 리소스를 대신 반환하기 때문입니다.

이 예제에서는 다음 표에 나열된 텍스트 기반 리소스 파일이 필요합니다. 각각에는 이름이 DateStart1개인 문자열 리소스가 있습니다.

문화권 File name 리소스 이름 리소스 값
en-US DateStrings.txt DateStart 현재는 다음과 입니다.
fr-FR DateStrings.fr-FR.txt DateStart 오주르드후이, c'est le
ru-RU DateStrings.ru-RU.txt DateStart Сегодня

다음 일괄 처리 파일을 사용하여 Visual Basic 예제를 컴파일할 수 있습니다. C#으로 컴파일하려면 소스 코드 파일의 확장을 로 변경하고 확장명에서 .로 변경 vbccsc합니다.cs..vb

resgen DateStrings.txt
vbc showdate.vb /resource:DateStrings.resources

md fr-FR
resgen DateStrings.fr-FR.txt
al /out:fr-FR\Showdate.resources.dll /culture:fr-FR /embed:DateStrings.fr-FR.resources

md ru-RU
resgen DateStrings.ru-RU.txt
al /out:ru-RU\Showdate.resources.dll /culture:ru-RU /embed:DateStrings.ru-RU.resources

다음은 예제의 소스 코드입니다(Visual Basic 버전에 대한 ShowDate.vb 또는 C# 버전의 ShowDate.cs).

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

public class Example2
{
    public static void Main()
    {
        Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("ru-RU");
        Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture("ru-RU");

        string[] cultureNames = [ "fr-FR", "sv-SE" ];
        ResourceManager rm = new ResourceManager("DateStrings",
                                                 typeof(Example).Assembly);

        foreach (var cultureName in cultureNames)
        {
            CultureInfo culture = CultureInfo.CreateSpecificCulture(cultureName);
            string dateString = rm.GetString("DateStart", culture);
            Console.WriteLine("{0}: {1} {2}.", culture.DisplayName, dateString,
                                               DateTime.Now.ToString("M", culture));
            Console.WriteLine();
        }
    }
}
// The example displays output similar to the following:
//       French (France): Aujourd'hui, c'est le 7 février.
//
//       Swedish (Sweden): Today is den 7 februari.
Imports System.Globalization
Imports System.Resources
Imports System.Threading

Module Example2
    Public Sub Main()
        Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("ru-RU")
        Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture("ru-RU")

        Dim cultureNames() As String = {"fr-FR", "sv-SE"}
        Dim rm As New ResourceManager("DateStrings",
                                    GetType(Example).Assembly)

        For Each cultureName In cultureNames
            Dim culture As CultureInfo = CultureInfo.CreateSpecificCulture(cultureName)
            Dim dateString As String = rm.GetString("DateStart", culture)
            Console.WriteLine("{0}: {1} {2}.", culture.DisplayName, dateString,
                                            Date.Now.ToString("M", culture))
            Console.WriteLine()
        Next
    End Sub
End Module
' The example displays output similar to the following:
'       French (France): Aujourd'hui, c'est le 7 février.
'       
'       Swedish (Sweden): Today is den 7 februari.