다음을 통해 공유


ResourceManager 클래스

런타임에서 culture별 리소스에 대한 편리한 액세스를 제공합니다.

네임스페이스: System.Resources
어셈블리: mscorlib(mscorlib.dll)

구문

‘선언
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Class ResourceManager
‘사용 방법
Dim instance As ResourceManager
[SerializableAttribute] 
[ComVisibleAttribute(true)] 
public class ResourceManager
[SerializableAttribute] 
[ComVisibleAttribute(true)] 
public ref class ResourceManager
/** @attribute SerializableAttribute() */ 
/** @attribute ComVisibleAttribute(true) */ 
public class ResourceManager
SerializableAttribute 
ComVisibleAttribute(true) 
public class ResourceManager

설명

ResourceManager 클래스에서는 culture별 리소스를 찾아서 지역화된 리소스가 없는 경우 대체 리소스를 제공하고 리소스 serialization을 지원합니다.

호출자는 ResourceManager의 메서드를 사용할 수 있으므로 호출자는 GetObjectGetString 메서드를 사용하여 특정 culture에 대한 리소스에 액세스할 수 있습니다. 기본적으로 이러한 메서드는 호출한 스레드의 현재 culture 설정으로 결정된 culture에 대한 리소스를 반환합니다. 자세한 내용은 Thread.CurrentUICulture를 참조하십시오. 호출자는 ResourceManager.GetResourceSet 메서드를 사용하여 culture 대체 규칙을 무시하고 특정 culture에 대한 리소스를 나타내는 ResourceSet을 가져올 수 있습니다. 그런 다음 ResourceSet을 사용하여 해당 culture에 대해 지역화된 리소스에 이름으로 액세스할 수 있습니다.

모든 언어에 대한 리소스를 만들거나 최소한 의미 있는 언어의 하위 집합을 만들어야 합니다. 리소스 파일 이름은 basename.cultureName.resources 명명 규칙을 따릅니다. 여기에서 basename은 필요한 세부 정도에 따라 응용 프로그램 이름 또는 클래스 이름입니다. CultureInfoName 속성은 cultureName을 확인하는 데 사용됩니다. InvariantCulture에서 반환된 중립 culture에 대한 리소스 이름은 basename.resources로 지정되어야 합니다.

예를 들어, 어셈블리의 리소스 파일에 기본 이름이 "MyResources"인 리소스가 몇 개 있다고 하면, 이러한 리소스 파일은 "MyResources.ja-JP.resources", "MyResources.de.resources", "MyResources.zh-CHS.resources", "MyResources.fr-BE.resources" 등의 이름을 가지며, 각각 일본어, 독일어, 중국어 간체 및 프랑스어(벨기에)에 대한 리소스를 포함합니다. 기본 리소스 파일의 이름은 MyResources.resources로 지정되어야 합니다. 일반적으로 culture별 리소스 파일은 각 culture에 대해 위성 어셈블리에 패키지됩니다. 기본 리소스 파일은 주 어셈블리에 있어야 합니다.

이 기본 이름을 갖는 리소스를 나타내는 ResourceManager가 만들어진 경우 ResourceManager를 사용하면 GetResourceSet(new CultureInfo ("ja-JP"), TRUE, FALSE)를 호출하여 "MyResources.ja-JP.resources"를 캡슐화하는 ResourceSet을 가져올 수 있습니다. 또는 "MyResources""TOOLBAR_ICON"이라는 리소스가 들어 있다는 것을 아는 경우 GetObject("TOOLBAR_ICON", new CultureInfo("ja-JP"))를 호출하여 일본어에 맞게 지역화된 해당 리소스의 값을 가져올 수 있습니다.

ResourceManager를 기본적인 방법으로 사용하는 대부분의 경우에는 꼭 필요하지 않지만, 공개적으로 제공되는 어셈블리에서는 위성 어셈블리를 다시 배포하지 않고도 주 어셈블리의 버전을 관리할 수 있도록 SatelliteContractVersionAttribute를 사용하고, 존재하지 않는 위성 어셈블리를 조회하지 않도록 NeutralResourcesLanguageAttribute를 사용해야 합니다.

위성 어셈블리의 버전 관리 지원에 대한 자세한 내용은 위성 어셈블리의 리소스 검색을 참조하십시오. 위성 어셈블리 만들기에 대한 자세한 내용은 위성 어셈블리 만들기를 참조하십시오. Windows Forms 대화 상자 지역화에 대한 자세한 내용은 Microsoft .NET Framework SDK에 있는 Windows Forms 리소스 편집기(Winres.exe) 도구를 참조하십시오.

리소스 설정 및 만들기에 대한 자세한 내용은 응용 프로그램의 리소스를 참조하십시오.

경고

ASP.NET 응용 프로그램에서 독립 실행형 .resources 파일을 사용하면 ReleaseAllResources 메서드를 사용하여 명시적으로 잠금을 해제할 때까지는 리소스가 잠겨 있기 때문에 XCOPY 배포가 중단됩니다. 리소스를 ASP.NET 응용 프로그램에 배포하려면 .resources를 위성 어셈블리에 컴파일해야 합니다.

경고

전용으로 표시된 리소스는 그러한 리소스가 배치된 어셈블리에서만 액세스될 수 있습니다. 위성 어셈블리에는 코드가 없으므로 어떤 메커니즘을 통해서도 위성 어셈블리의 전용 리소스를 사용할 수 없습니다. 그러므로 위성 어셈블리의 리소스는 주 어셈블리에서 액세스할 수 있도록 항상 공용이어야 합니다. 주 어셈블리에 포함된 리소스는 전용이든 공용이든 주 어셈블리에서 액세스할 수 있습니다.

<satelliteassemblies> 구성 파일 노드

응용 프로그램 구성 파일에 <satelliteassemblies> 노드를 만들어, 응용 프로그램에 대해 특정 culture 집합을 배포했으며 ResourceManager 클래스에서 해당 노드에 나열되지 않은 culture를 조사하지 않도록 지정할 수 있습니다.

참고

<satelliteassemblies> 노드를 만드는 것보다 좋은 방법은 ClickOnce 배포 매니페스트 기능을 사용하는 것입니다.

다음 코드 예제와 같은 구성 파일 섹션을 만듭니다.

<?xml version ="1.0"?>
<configuration>
    <satelliteassemblies>
        <assembly name="MainAssemblyName, Version=versionNumber, Culture=neutral, PublicKeyToken=null|yourPublicKeyToken">
            <culture>cultureName1</culture>
            <culture>cultureName2</culture>
            <culture>cultureName3</culture>
        </assembly>
    </satelliteassemblies>
</configuration>

구성 파일에서 다음을 수행합니다.

  • 배포하는 각 주 어셈블리에 대해 <assembly> 노드를 하나 이상 지정합니다. 여기서 <assembly> 노드 특성은 정규화된 어셈블리 이름을 지정합니다. MainAssemblyName 대신 주 어셈블리의 이름을 지정하고 이 주 어셈블리에 해당하는 Version, PublicKeyTokenCulture 특성 값을 지정합니다.

    Version 특성의 경우 어셈블리의 버전 번호를 지정합니다. 예를 들어, 첫 번째 어셈블리 릴리스의 버전 번호는 1.0.0.0일 수 있습니다.

    PublicKeyToken 특성의 경우 강력한 이름으로 어셈블리에 서명하지 않았으면 "null"을 지정하고, 어셈블리에 서명했으면 공개 키 토큰을 지정합니다.

    Culture 특성의 경우 "neutral" 키워드를 사용하여 주 어셈블리를 지정하고 ResourceManager 클래스에서 <culture> 노드에 나열된 culture만 조사하도록 합니다.

    정규화된 어셈블리 이름에 대한 자세한 내용은 어셈블리 이름을 참조하십시오. 강력한 이름의 어셈블리에 대한 자세한 내용은 강력한 이름의 어셈블리 만들기 및 사용을 참조하십시오.

  • "fr-FR"와 같은 특정 culture 이름이나 "fr"와 같은 중립 culture 이름을 사용하여 <culture> 노드를 하나 이상 지정합니다.

<satelliteassemblies> 노드에 나열되지 않은 어셈블리에 리소스가 필요한 경우 ResourceManager 클래스에서는 표준 조사 규칙을 사용하여 culture를 조사합니다.

예제

다음 코드 예제에서는 명시적 culture와 암시적 현재 UI culture를 사용하여 주 어셈블리와 위성 어셈블리에서 문자열 리소스를 가져오는 방법을 보여 줍니다. 자세한 내용은 위성 어셈블리 만들기 항목의 "전역 어셈블리 캐시에 설치되지 않은 위성 어셈블리의 디렉터리 위치" 하위 항목을 참조하십시오.

' This code example demonstrates the ResourceManager() 
' constructor and ResourceManager.GetString() method.

Imports System
Imports System.Resources
Imports System.Reflection
Imports System.Threading
Imports System.Globalization

'
'Perform the following steps to use this code example:
'
'Main assembly:
'1) In a main directory, create a file named "rmc.txt" that 
'contains the following resource strings:
'
'day=Friday
'year=2006
'holiday="Cinco de Mayo"
'
'2) Use the resgen.exe tool to generate the "rmc.resources" 
'resource file from the "rmc.txt" input file.
'
'> resgen rmc.txt
'
'Satellite Assembly:
'3) Create a subdirectory of the main directory and name the 
'subdirectory "es-ES", which is the culture name of the 
'satellite assembly.
'
'4) Create a file named "rmc.es-ES.txt" that contains the 
'following resource strings:
'
'day=Viernes
'year=2006
'holiday="Cinco de Mayo"
'
'5) Use the resgen.exe tool to generate the "rmc.es-ES.resources" 
'resource file from the "rmc.es-ES.txt" input file.
'
'> resgen rmc.es-ES.txt
'
'6) Use the al.exe tool to create a satellite assembly. If the 
'base name of the application is "rmc", the satellite assembly 
'name must be "rmc.resources.dll". Also, specify the culture, 
'which is es-ES.
'
'> al /embed:rmc.es-ES.resources /c:es-ES /out:rmc.resources.dll 
'
'7) Assume the filename for this code example is "rmc.vb". Compile 
'rmc.vb and embed the main assembly resource file, rmc.resources, in 
'the executable assembly, rmc.exe:
'
'>vbc /res:rmc.resources rmc.vb
'
'8) Execute rmc.exe, which obtains and displays the embedded 
'resource strings.
'

Class Sample
    Public Shared Sub Main() 
        Dim day As String
        Dim year As String
        Dim holiday As String
        Dim celebrate As String = "{0} will occur on {1} in {2}." & vbCrLf
        
        ' Create a resource manager. The GetExecutingAssembly() method
        ' gets rmc.exe as an Assembly object.
        Dim rm As New ResourceManager("rmc", [Assembly].GetExecutingAssembly())
        
        ' Obtain resources using the current UI culture.
        Console.WriteLine("Obtain resources using the current UI culture.")
        
        ' Get the resource strings for the day, year, and holiday 
        ' using the current UI culture. Use those strings to 
        ' display a message.
        day = rm.GetString("day")
        year = rm.GetString("year")
        holiday = rm.GetString("holiday")
        Console.WriteLine(celebrate, holiday, day, year)
        
        ' Obtain the es-ES culture.
        Dim ci As New CultureInfo("es-ES")
        
        ' Get the resource strings for the day, year, and holiday 
        ' using the specified culture. Use those strings to 
        ' display a message. 
        ' Obtain resources using the es-ES culture.
        Console.WriteLine("Obtain resources using the es-ES culture.")
        
        day = rm.GetString("day", ci)
        year = rm.GetString("year", ci)
        holiday = rm.GetString("holiday", ci)
        
        ' ---------------------------------------------------------------
        ' Alternatively, comment the preceding 3 code statements and 
        ' uncomment the following 4 code statements:
        ' ----------------------------------------------------------------
        ' Set the current UI culture to "es-ES" (Spanish-Spain).
        '    Thread.CurrentThread.CurrentUICulture = ci
        ' Get the resource strings for the day, year, and holiday 
        ' using the current UI culture. Use those strings to 
        ' display a message. 
        '    day  = rm.GetString("day")
        '    year = rm.GetString("year")
        '    holiday = rm.GetString("holiday")
        ' ---------------------------------------------------------------
        ' Regardless of the alternative that you choose, display a message 
        ' using the retrieved resource strings.
        Console.WriteLine(celebrate, holiday, day, year)
    
    End Sub 'Main
End Class 'Sample

'
'This code example produces the following results:
'
'>rmc
'Obtain resources using the current UI culture.
'"5th of May" will occur on Friday in 2006.
'
'Obtain resources using the es-ES culture.
'"Cinco de Mayo" will occur on Viernes in 2006.
'
// This code example demonstrates the ResourceManager() 
// constructor and ResourceManager.GetString() method.

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

/*
Perform the following steps to use this code example:

Main assembly:
1) In a main directory, create a file named "rmc.txt" that 
contains the following resource strings:

day=Friday
year=2006
holiday="Cinco de Mayo"

2) Use the resgen.exe tool to generate the "rmc.resources" 
resource file from the "rmc.txt" input file.

> resgen rmc.txt

Satellite Assembly:
3) Create a subdirectory of the main directory and name the 
subdirectory "es-ES", which is the culture name of the 
satellite assembly.

4) Create a file named "rmc.es-ES.txt" that contains the 
following resource strings:

day=Viernes
year=2006
holiday="Cinco de Mayo"

5) Use the resgen.exe tool to generate the "rmc.es-ES.resources" 
resource file from the "rmc.es-ES.txt" input file.

> resgen rmc.es-ES.txt

6) Use the al.exe tool to create a satellite assembly. If the 
base name of the application is "rmc", the satellite assembly 
name must be "rmc.resources.dll". Also, specify the culture, 
which is es-ES.

> al /embed:rmc.es-ES.resources /c:es-ES /out:rmc.resources.dll 

7) Assume the filename for this code example is "rmc.cs". Compile 
rmc.cs and embed the main assembly resource file, rmc.resources, in 
the executable assembly, rmc.exe:

>csc /res:rmc.resources rmc.cs

8) Execute rmc.exe, which obtains and displays the embedded 
resource strings.
*/

class Sample 
{
    public static void Main() 
    {
    string day;
    string year;
    string holiday;
    string celebrate = "{0} will occur on {1} in {2}.\n";

// Create a resource manager. The GetExecutingAssembly() method
// gets rmc.exe as an Assembly object.

    ResourceManager rm = new ResourceManager("rmc", 
                             Assembly.GetExecutingAssembly());

// Obtain resources using the current UI culture.
    Console.WriteLine("Obtain resources using the current UI culture.");

// Get the resource strings for the day, year, and holiday 
// using the current UI culture. Use those strings to 
// display a message.

    day  = rm.GetString("day");
    year = rm.GetString("year");
    holiday = rm.GetString("holiday");
    Console.WriteLine(celebrate, holiday, day, year);

// Obtain the es-ES culture.
    CultureInfo ci = new CultureInfo("es-ES");

// Get the resource strings for the day, year, and holiday 
// using the specified culture. Use those strings to 
// display a message. 

// Obtain resources using the es-ES culture.
    Console.WriteLine("Obtain resources using the es-ES culture.");

    day  = rm.GetString("day", ci);
    year = rm.GetString("year", ci);
    holiday = rm.GetString("holiday", ci);

// ---------------------------------------------------------------
// Alternatively, comment the preceding 3 code statements and 
// uncomment the following 4 code statements:
// ----------------------------------------------------------------

// Set the current UI culture to "es-ES" (Spanish-Spain).
//    Thread.CurrentThread.CurrentUICulture = ci;

// Get the resource strings for the day, year, and holiday 
// using the current UI culture. Use those strings to 
// display a message. 
//    day  = rm.GetString("day");
//    year = rm.GetString("year");
//    holiday = rm.GetString("holiday");
// ---------------------------------------------------------------

// Regardless of the alternative that you choose, display a message 
// using the retrieved resource strings.
    Console.WriteLine(celebrate, holiday, day, year);
    }
}

/*
This code example produces the following results:

>rmc
Obtain resources using the current UI culture.
"5th of May" will occur on Friday in 2006.

Obtain resources using the es-ES culture.
"Cinco de Mayo" will occur on Viernes in 2006.

*/

상속 계층 구조

System.Object
  System.Resources.ResourceManager
     System.ComponentModel.ComponentResourceManager

스레드로부터의 안전성

이 형식은 다중 스레드 작업을 수행하는 데 안전합니다.

플랫폼

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

.NET Framework에서 모든 플래폼의 모든 버전을 지원하지는 않습니다. 지원되는 버전의 목록은 시스템 요구 사항을 참조하십시오.

버전 정보

.NET Framework

2.0, 1.1, 1.0에서 지원

.NET Compact Framework

2.0, 1.0에서 지원

참고 항목

참조

ResourceManager 멤버
System.Resources 네임스페이스
CultureInfo
SatelliteContractVersionAttribute

기타 리소스

인코딩 및 지역화