레지스트리 문자열 리디렉션 사용

레지스트리에서 하드 코딩된 문자열의 스토리지는 Windows Vista 이전 지역화 모델의 일부입니다. MUI에서 지원되지 않습니다. 현재 모델에서 운영 체제의 사용자 인터페이스는 언어 중립적 기반 위에 있는 언어별 리소스 파일에서 실행됩니다. 운영 체제의 구성 요소는 언어 중립적인 방식으로 레지스트리를 사용합니다.

MUI는 기본 언어 리소스 파일에서 Win32 PE 리소스로 정의된 리디렉션된 레지스트리 문자열만 사용합니다. 리디렉션은 .inf 파일과 같이 별도로 정의됩니다. 이 유형의 스토리지를 사용하면 리소스 모듈을 로드하는 동안 리소스 로더가 올바른 언어 리소스를 자동으로 선택할 수 있습니다.

참고 항목

이 항목은 Win32 PE 리소스에만 관련됩니다. 비 Win32 PE 리소스를 사용하는 경우 필요한 경우 사용자 지정된 레지스트리 문자열 리디렉션을 제공해야 합니다.

 

언어 중립적 리소스 만들기

Windows Vista 이상에서 실행되는 MUI 애플리케이션은 언어 중립적 문자열 리소스를 사용하여 문자열 리소스 테이블에 저장된 언어별 문자열에 대한 액세스를 허용합니다. 레지스트리에서 이러한 값을 읽는 애플리케이션 코드는 리디렉션된 문자열 찾기의 언어 중립 레지스트리 값 로드 섹션에 설명되어 있습니다.

언어 중립적 레지스트리 값에 대한 데이터에는 다음과 같은 형식의 "@<PE-path>,-<stringID>[;<comment>]"가 있습니다.

  • PE 경로 는 실행 파일의 경로를 지정합니다. %ProgramFiles%와 같은 환경 변수를 사용하여 경로를 지정하여 배포를 지원할 수 있습니다. 문자열 참조를 만드는 대안은 파일 경로 정보를 제외하는 것입니다. 이 경우 애플리케이션에는 자체 설치 디렉터리를 전달하기 위해 다른 레지스트리 값과 같은 몇 가지 수단이 있어야 합니다.
  • stringID 는 다른 지역화 가능한 문자열 리소스와 마찬가지로 구현되는 관련 문자열 리소스의 숫자 리소스 식별자를 지정합니다.
  • 주석 은 레지스트리 값의 디버깅 또는 가독성을 위한 선택적 정보를 지정합니다. 레지스트리 API 함수는 문자열을 로드할 때 주석을 무시합니다.

참고 항목

레지스트리 값에 대한 데이터는 언어별 리소스 파일에 대한 명시적 참조를 만들지 않습니다. 올바른 파일은 현재 사용자 인터페이스 언어 기본 설정에 따라 런타임에 결정됩니다.

 

레지스트리 값은 ""와 "-" 사이의 공백 없이 입력됩니다. 올바른 레지스트리 값은 다음과 같습니다.

shell32.dll,-22912

잘못된 레지스트리 값은 다음과 같습니다.

shell32.dll, -22912

Windows Vista의 예는 다음 데이터가 포함된 레지스트리 값입니다.

@%SystemRoot%\system32\input.dll,-5020

바로 가기 문자열에 대한 리소스 만들기

MUI 애플리케이션이 셸 사용자 인터페이스에 해당 이름을 표시하면 애플리케이션 아이콘에 대한 InfoTip 문자열이 표시됩니다. 지원되는 각 언어에 대한 애플리케이션 표시 이름 및 관련 InfoTip 문자열에 대한 문자열 리소스를 만들어야 합니다. 리소스가 준비되면 애플리케이션은 셸 API 사용에서 설명한 대로 문자열을 사용하여 리디렉션된 문자열 찾기의 레지스트리 섹션에서 바로 가기 문자열을 로드할 수 있습니다.

Windows Installer를 사용하여 만든 바로 가기를 위한 리소스 준비

MSI(Windows Installer)를 사용하여 바로 가기를 만드는 경우 문자열 리소스에는 바로 가기 표시 이름 및 설명이 포함됩니다. MSI 바로 가기 테이블에서 리소스 DLL은 적절한 열에서 참조되고 바로 가기 표시 이름 및 설명에 대한 리소스 식별자는 해당 리소스 식별자 열에서 사용됩니다.

애플리케이션 바로 가기가 MUI 리소스 기술에서 제대로 작동하도록 바로 가기 문자열을 준비할 때 다음 사항에 유의하세요.

  • 환경 변수 또는 상대 경로를 사용하여 DLL을 등록합니다. 레지스트리 문자열 형식이 REG_EXPAND_SZ 한 @%systemroot%\system32\shell32.dll을 지정할 수 있습니다. Shell32.dll의 "텍스트 문서"에 대한 문자열 리소스 식별자는 12345입니다.
  • "" 및 "-" 기호 주위에 공백을 사용하지 마세요. 올바른 예는 "shell32.dll,-22912"입니다.
  • 짧은 파일 이름을 사용하지 마세요. 이 유형의 이름은 리소스 로더에서 작동하지 않습니다.

INF 형식을 사용하여 바로 가기를 위한 리소스 준비

INF 파일 형식을 사용하여 바로 가기 문자열을 만드는 경우 리소스 파일은 다음 레지스트리 설정을 설정해야 합니다. 이러한 지침에서는 설치 API의 ProfileItems 구문을 사용하는 것으로 가정합니다.

  1. 경로 및 리소스 식별자를 사용하여 문자열 리디렉션 참조를 가리키도록 InfoTip 값을 변경합니다.
  2. ProfileItems 설치 섹션 아래에 새 값 DisplayResource를 추가합니다.

다음은 시작 메뉴에 계산기 애플리케이션을 추가하는 예제입니다.

[CalcInstallItems]
"Name" = %Calc_DESC%
"CmdLine" = 11, calc.exe
"SubDir" = %Access_GROUP%
"WorkingDir" = 11

"InfoTip" = "@%systemroot%\system32\shell32.dll,-22531"

"DisplayResource" = "%systemroot%\system32\shell32.dll",22019

INF를 사용하여 시작 메뉴에 항목(예: 액세스 그룹 폴더)을 추가할 때 아래에 표시된 구문을 사용합니다. 이 구문에서는 Syssetup.inf에 사용되는 구문과 유사하게 설치 프로그램에서 [StartMenuItems] 지원을 사용하는 것으로 가정합니다.

[StartMenuItems]
<description> = <binary>,<commandline>,<iconfile>,<iconnum>,<infotip>,<resDLL,resID>

infotip 을 문자열 참조 "@<path>,-resID"로 설정합니다.

표시 이름은 resDLLresID 값에 의해 결정됩니다. resID 값은 언어 중립 파일과 연결된 문자열 리소스의 리소스 식별자를 지정합니다. resDLL 값은 언어 중립 파일의 경로를 지정합니다.

친숙한 문서 형식 이름에 대한 리소스 만들기

애플리케이션에 대한 친숙한 이름 및 InfoTip 문자열을 문자열 리소스로 구현해야 합니다. 친숙한 문서 형식 이름이 사용자 인터페이스 언어에 반응할 수 있도록 하려면 애플리케이션에서 파일 형식에 대한 프로그램 식별자 키 아래에 있는 FriendlyTypeName 값을 사용하여 이름을 등록해야 합니다. 이전 버전과의 호환성을 유지하려면 프로그램 식별자 키의 기본값을 유지해야 합니다. 애플리케이션에서 이름에 액세스하는 방법에 대한 자세한 내용은 리디렉션된 문자열 찾기의 레지스트리 섹션에서 쿼리 친숙한 문서 형식 이름을 참조하세요.

특정 작업에는 다음 단계가 포함됩니다.

  1. 친숙한 이름 및 InfoTip 문자열을 언어별 문자열 리소스로 구현합니다.
  2. 문서 형식 레지스트리 키 아래에 FriendlyTypeName 값을 추가합니다. 값의 데이터는 "@<path>,-<resID>" 패턴을 따릅니다. 여기서 경로 는 실행 파일을 나타내고 resID 는 해당 실행 파일과 연결된 지역화 가능한 문자열 리소스의 리소스 식별자입니다.
  3. "@<path>,-<resID>" 형식에 따라 InfoTip 레지스트리 값을 지정합니다.

다음 예제에서는 .txt 파일에 대한 레지스트리 설정을 보여줍니다.

HKCR\.txt
@="txtfile"
"Content Type"="text/plain"

HKCR\txtfile
@="Text Document"

"FriendlyTypeName" = "@%systemroot%\system32\shell32.dll,-12345"

"InfoTip" = "@%systemroot%\system32\shell32.dll,-12346"

셸 동사 작업 문자열에 대한 리소스 제공

특정 동사(예: "열기" 및 "편집")에 대한 작업 문자열은 사용자가 Windows 탐색기에서 파일을 마우스 오른쪽 단추로 클릭할 때 표시되는 팝업 메뉴에 표시됩니다. 셸에는 이러한 동사에 대한 자체 MUI 사용 기본값이 있으므로 애플리케이션에서 공통 셸 동사에 대한 문자열을 지정할 필요가 없습니다. 그러나 일반 동사를 나타내는 문자열에 대해 지역화 가능한 문자열 리소스를 제공해야 합니다.

Windows XP 이전 운영 체제에서 레지스트리의 셸 동사에 대한 문자열은 다음 구문을 사용하여 렌더링됩니다. 여기서 사는 실제 동사 이름을 지정합니다.

HKCR\<progid>\shell\<verb>
@ = <friendly-name>

예를 들면 다음과 같습니다.

HKCR\Sample.app\shell\Disc
@ = "Disconnect"

Windows XP 이상에서는 간접 참조 수준을 사용하여 작업 문자열이 사용자 인터페이스 언어에 따라 달라지도록 할 수 있습니다. 이러한 운영 체제는 MUI 호환 문자열 정의에 대한 MUIVerb 값을 지원합니다. 다음은 일반적이지 않은 동사에 대한 레지스트리 항목의 예입니다.

HKCR\Sample.app\shell\Disc
@ = "Disconnect"
"MUIVerb" = "@%systemroot%\system32\sample.exe,-9875"

MUI 애플리케이션은 아래와 같이 이전 기본값을 지역화 가능한 문자열로 등록할 수도 있습니다.

HKCR\Sample.app\shell\Disc
@ = "@%systemroot%\system32\sample.exe,-9875"

참고 항목

이전 기본값을 등록하는 것은 이전 운영 체제에서 사용된 설정과 Windows XP에서 다른 설정이 필요하기 때문에 권장되지 않습니다.

 

동사, 프로토콜 및 AuxUserType 문자열에 대한 리소스 만들기

동사, 프로토콜 및 AuxUserType 문자열에 대한 지역화 가능한 문자열 리소스를 만들어야 합니다. 다음 레지스트리 설정을 사용합니다.

HKCR\CLSID\{<Your_CLSID>}\Verb\<number> @="<Your Verb>, <menu_flag>, <verb_flag>"
"LocalizedString"="@<resDLLpath\resDLL.DLL>,-resStrID"
...

HKCR\CLSID\{<Your_CLSID>}\AuxUserType\<number>
@="<Your Short Name>"
"LocalizedString"="@<resDLLpath\resDLL.DLL>,-resStrID1"
...

HKCR\<Your_Name>\protocol\StdFileEditing\verb\<number>
@="<Your Verb>"
"LocalizedString"="@<resDLLpath\resDLL.DLL>,-resStrID"
...

LocalizedString에 지정된 값은 두 플래그 값이 아닌 동사의만 포함하거나 바꿉니다.

올바른 레지스트리 설정을 확인하는 데 도움이 되는 요약은 다음과 같습니다.

  • CLSID에 HKCR\CLSID\{clsid}\Insertable 키가 있는 경우 HKCR\CLSID\{clsid}\LocalizedString을 사용하여 기본 CLSID 값을 정의합니다.
  • CLSID에 HKCR\CLSID\{clsid}\Verb 아래에 하나 이상의 하위 키가 있는 경우 HKCR\CLSID\{clsid}\Verb\xxx\LocalizedString을 사용하여 각 개별 동사 문자열을 정의합니다.
  • CLSID에 HKCR\{progid}\Protocol\Stdfileediting\Verb 아래에 하나 이상의 하위 키가 있는 경우 HKCR\{progid}\Protocol\Stdfileediting\Verb\xxx\LocalizedString을 사용하여 각 개별 동사 문자열을 정의합니다.
  • CLSID에 HKCR\CLSID\{clsid}\AuxUserType 아래에 하나 이상의 나열된 AuxUserType 하위 키가 있는 경우 HKCR\CLSID\{clsid}\AuxUserType\xxx\LocalizedString을 사용하여 각 AuxUserType 항목을 정의합니다.

제거 프로그램에 대한 리소스 만들기

애플리케이션에 대한 제거 프로그램을 등록하려면 레지스트리 키 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall 아래에 애플리케이션의 고유 식별자 하위 키에 레지스트리 값을 만들 수 있습니다. 설정할 값은 DisplayName, DisplayVersion, Publisher, ProductID, RegOwner, RegCompany, UrlInfoAbout, HelpTelephone, HelpLink, InstallLocation, InstallSource, InstallDate, Contact, Comments, DisplayIcon, Readme, UrlUpdateInfo입니다.

참고 항목

각 값에 대해 MUI 기술을 사용하도록 설정하려면 값 이름에 "_Localized"를 추가할 수 있습니다.

 

운영 체제 구성 요소는 MUI별 방식으로 DisplayName_Localized 값을 제공하는 데 필요합니다. 식별자를 1245로 가정하여 Res.dll과 같은 DLL에 표시 이름을 문자열 리소스로 배치해야 합니다. 그런 다음 응용 프로그램에서 표시 이름을 "@\res.DLL,-1245" 값으로 DisplayName_Localized 등록할 수 있습니다. DisplayName의 원래 값을 포함하여 다른 모든 레지스트리 설정은 그대로 유지되어야 합니다.

사운드 이벤트에 대한 리소스 만들기

Windows는 특정 이벤트를 소리 파일(예: 새 메일 알림 이벤트 또는 중요 배터리 경보 이벤트)과 연결합니다. 이벤트 이름은 사용자 인터페이스에 의해 표시되어야 하며 세계화를 지원해야 합니다. 따라서 각 이벤트 설명에 대한 설명을 위해 지역화 가능한 문자열 리소스를 구현해야 합니다. 하드 코딩된 기본값 외에도 각 이벤트 이름에 대한 새 레지스트리 값을 추가합니다.

소리 이벤트를 사용하도록 설정하려면 다음을 수행합니다.

  1. 설명을 지역화 가능한 문자열 리소스로 구현합니다.
  2. 하드 코딩된 기본값 외에도 표시 이름에 대한 새 레지스트리 값을 추가합니다. 연결된 레지스트리 레이아웃은 다음과 같습니다.
HKCR\AppEvents\EventLabels
<event_name>
    (Default) REG_SZ "<description>"
    DispFileName REG_EXPAND_SZ "@<path>,-<resID>"

셸에서 DispFileName 값을 찾거나 검색할 수 없는 경우 기본 설명을 사용합니다.

키보드 레이아웃 문자열에 대한 리소스 만들기

애플리케이션에서 키보드 레이아웃을 구현하는 경우 화면 표시를 위한 레이아웃 이름(예: 키보드 레이아웃 목록)에 지역화 가능한 문자열 리소스가 필요합니다. 각 키보드 레이아웃 아래에 레지스트리 키가 있습니다 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layouts.

해당 키의 값 중에는 Layout Text이전 버전과의 호환성을 위해 사람이 읽을 수 있는 이름 및 Layout Display Name. 제공된 Layout Display Name 데이터는 키보드 레이아웃과 연결된 지역화 가능한 문자열 리소스를 참조하는 양식 @<path>,-resID의 문자열 참조여야 합니다.

다음은 스페인어 키보드 레이아웃에 대한 레지스트리 설정의 예입니다.

HKLM\SYSTEM\CurrentControlSet\Control\Keyboard Layouts\
0000040a
    Layout Text REG_SZ "Spanish"
    Layout Display Name REG_EXPAND_SZ "@%SystemRoot%\system32\input.dll,-5020"

OLE 삽입 개체 일반 대화 상자 문자열을 나타냅니다.

OLE 삽입 가능 개체의 표시 이름을 해당 개체를 구현하는 코드와 연결된 지역화 가능한 문자열 리소스로 구현할 수 있습니다. OLE 개체 삽입 대화 상자레지스트리 키 HKCR\CLSID\{<GUID>}에서 표시 이름을 가져옵니다. 여기서 GUID삽입 가능한 OLE 개체의 클래스 식별자를 식별합니다. Windows Vista 이상에서는 사용자 인터페이스 언어에 대한 사용자 지정을 허용하는 MUI 규격 표시 이름을 사용하여 지역화 가능한 방식으로 이러한 유형의 개체를 구현합니다. 반면, Windows Vista 이전 운영 체제는 해당 레지스트리 키의 기본값을 사용하여 이러한 유형의 개체에 대한 표시 이름을 구현합니다. 일반적으로 이 이름은 영어(미국) 이름 또는 시스템 기본 UI 언어의 이름입니다.

참고 항목

레지스트리 키의 하위 키에 해당하는 모든 개체를 삽입할 수 있는 것은 아닙니다.

 

HKCR\CLSID\{<GUID>} 키의 기본값은 이전 버전과의 호환성을 위해 사람이 읽을 수 있는 이름을 유지해야 합니다. 그러나 경로가 개체를 구현하는 실행 파일을 식별하는 LocalizedString 값을 "@<path>,-ResID" 형식으로 정의해야 합니다. ResID 값은 표시 이름에 대한 지역화 가능한 문자열의 리소스 식별자를 지정합니다.

예를 들어 삽입 가능한 Media Clip 개체의 등록 스크립트에는 다음 줄이 포함됩니다.

HKCR,"CLSID\%CLSID_Media_Clip%",,,"%default description%"
HKCR,"CLSID\%CLSID_Media_Clip%","LocalizedString",,"@%systemroot%\system32\mplay32.exe,-9217"

첫 번째 줄은 레지스트리에 간단한 텍스트 문자열을 기본 표시 이름으로 배치하여 이전 버전과의 호환성을 제공합니다. 두 번째 줄은 MUI 규격 표시 이름에 대한 액세스를 제공합니다. Mplay32.exe에 저장된 문자열 식별자를 나타냅니다. Mplay32.exe에서 식별자가 9217인 문자열은 임의의 언어에 대한 문자열 리소스 값과 연결할 수 있습니다. 영어(미국) 이름은 "Media Clip"입니다.

Microsoft 관리 콘솔 스냅인용 문자열 리소스 만들기

MUI 애플리케이션에서 사용하는 각 MMC(Microsoft Management Console) 스냅인에 대해 지역화 가능한 문자열 리소스를 만들어야 합니다. 스냅인은 콘솔의 일부이므로 사용자 인터페이스가 있으며 둘 이상의 언어로 작동하려면 전역화되어야 합니다.

대부분의 경우 MMC 스냅인은 MUI 애플리케이션 자체와 동일한 세계화 및 지역화 문제를 발생합니다. MMC 스냅인은 표시를 위해 레지스트리에 해당 이름을 반영해야 합니다. 레지스트리 항목에는 지역화 가능한 문자열 리소스에 대한 간접 참조와 이전 버전과의 호환성을 위한 리터럴 문자열이 모두 포함되어야 합니다.

각 MMC 스냅인에는 HKEY_LOCAL_MACHINE\Software\Microsoft\MMC\SnapIns 아래에 레지스트리 키가 있습니다. 해당 키의 값 중에는 이전 버전과의 호환성을 위해 사람이 읽을 수 있는 이름을 지정하는 NameString과 지역화 가능한 문자열 리소스에 대한 간접 참조를 지정하는 NameStringIndirect가 있습니다. NameStringIndirect의 경우 지역화 가능한 문자열 리소스를 나타내는 "@<path>,-resID" 형식의 문자열 참조를 제공해야 합니다.

예를 들어 Mymmc.dll에 대해 다음 설정을 만들 수 있습니다. 여기서 12345는 스냅인의 지역화 가능한 이름을 포함하는 해당 문자열 리소스의 식별자입니다.

NameStringIndirect=@%systemroot%@c:\windir\system32\mymmc.dll,-12345

일부 스냅인은 MMC가 레지스트리에서 읽지 않는 다른 레지스트리 문자열 값을 등록합니다. 이러한 값을 사용하는 방법에 대한 자세한 내용은 리디렉션된 문자열 찾기의 레지스트리 에서 읽지 않은 Microsoft 관리 콘솔 스냅인 문자열 등록을 참조하세요.

Windows 서비스에 대한 문자열 리소스 만들기

Windows 서비스에는 일반적으로 사용자 인터페이스가 거의 없거나 전혀 없지만 MUI 규격 이름을 표시해야 하며 일반적으로 MUI 규격 언어별 설명을 제공해야 합니다. Windows 서비스를 설명하는 레지스트리 키는 서비스 이름에 대한 DisplayName 값과 서비스 설명에 대한 설명 값만 지원합니다.

Windows 서비스에 대한 설정 레지스트리의 Windows 서비스에 대한 표시 이름 및 설명 설정에 설명된 대로 애플리케이션에서 이루어집니다.리디렉션된 문자열 찾기 애플리케이션이 서비스 사용자 인터페이스에 대한 레지스트리 값을 설정하지 않으면 사용자 인터페이스가 다른 언어인 경우에도 레지스트리의 값이 다시 영어로 설정됩니다기본.

리소스 준비

리디렉션된 문자열 찾기