Поделиться через


Использование перенаправления строк реестра

служба хранилища жестко закодированных строк в реестре является частью модели локализации Windows Vista. Он не поддерживается МОДИ. В текущей модели пользовательский интерфейс операционной системы выполняется в файлах ресурсов, относящихся к языку, на основе нейтрализации языка. Компоненты операционной системы используют реестр на нейтральном языке.

MUI использует только перенаправленные строки реестра, определенные ресурсами PE Win32 в файле ресурсов базового языка. Перенаправление определяется отдельно, например, в INF-файле. Этот тип хранилища позволяет загрузчику ресурсов автоматически выбирать правильные языковые ресурсы во время загрузки модуля ресурсов.

Примечание.

Этот раздел относится только к ресурсам Среды предустановки Win32. При использовании ресурсов PE, отличных от Win32, при необходимости необходимо предоставить настраиваемое перенаправление строк реестра.

 

Создание ресурса с нейтральным языком

Приложение MUI, работающее в Windows Vista и более поздних версиях, использует нейтрализующий язык ресурс строки, чтобы разрешить доступ к строкам, хранящимся в строковой таблице ресурсов. Код приложения, считывающий эти значения из реестра, описывается в разделе "Загрузка нейтрализуемого значения реестра" в разделе "Поиск перенаправленных строк".

Данные для значения реестра, нейтрального на языке, имеют формат "@<PE-path>,-<stringID>[;<comment>]", где:

  • Pe-path задает путь исполняемого файла. Путь можно указать с помощью переменной среды, например %ProgramFiles%, для поддержки развертывания. Альтернативой для ссылки на строку является выход из сведений о пути к файлу. В этом случае приложение должно иметь некоторые средства, например другое значение реестра, чтобы сообщить о своем собственном каталоге установки.
  • stringID задает числовый идентификатор ресурса соответствующей строки, который реализуется так же, как и любой другой локализуемый строковый ресурс.
  • комментарий указывает необязательные сведения для отладки или удобочитаемости значения реестра. Функции API реестра игнорируют комментарий при загрузке строки.

Примечание.

Данные для значения реестра не имеют явной ссылки на файл ресурсов для конкретного языка. Правильный файл определяется во время выполнения на основе текущих языковых настроек пользовательского интерфейса.

 

Значение реестра вводится без пробела между "," и "-". Правильное значение реестра:

shell32.dll,-22912

Неправильное значение реестра:

shell32.dll, -22912

Примером из Windows Vista является значение реестра со следующими данными:

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

Создание ресурсов для сочетаний строк

Когда приложение MUI отображает свое имя в пользовательском интерфейсе оболочки, для значка приложения отображается строка InfoTip. Необходимо создать строковые ресурсы для отображаемого имени приложения и связанной строки InfoTip для каждого поддерживаемого языка. Когда ресурсы будут готовы, приложение может использовать строки, как описано в API оболочки для загрузки ярлыков строк из раздела реестра поиска перенаправленных строк.

Подготовка ресурсов к созданию ярлыка, созданного с помощью установщика Windows

При использовании установщика Windows (MSI) для создания ярлыка строковые ресурсы включают отображаемое имя и описание ярлыка. В таблице ярлыков MSI библиотека DLL ресурсов ссылается в соответствующих столбцах, а идентификаторы ресурсов для отображаемого имени и описания используются в соответствующих столбцах идентификаторов ресурса.

Чтобы ярлык приложения правильно работал с технологией ресурсов MUI, при подготовке сочетания клавиш следует учитывать следующие моменты:

  • Используйте переменные среды или относительный путь для регистрации библиотеки DLL. Можно указать @%systemroot%\system32\shell32.dll, если тип строки реестра REG_EXPAND_SZ. Строковый идентификатор ресурса для "Текстовый документ" в Shell32.dll имеет значение 12345.
  • Не используйте пробелы вокруг символов "" и "-". Правильный пример — shell32.dll,-22912.
  • Не используйте короткое имя файла. Этот тип имени не работает с загрузчиком ресурсов.

Подготовка ресурсов к ярлыку с помощью формата INF

Если вы используете формат INF-файла для создания сочетаний строк, файл ресурсов должен сделать следующие параметры реестра. Эти инструкции предполагают использование синтаксиса ProfileItems API установки.

  1. Измените значение InfoTip, чтобы указать ссылку на перенаправление строки, используя путь и идентификатор ресурса.
  2. Добавьте новое значение DisplayResource в разделы установки ProfileItems.

Ниже приведен пример добавления приложения Калькулятора в меню "Пуск ".

[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 для добавления элементов, например папки группы доступа, в меню "Пуск ". Этот синтаксис предполагает использование поддержки [StartMenuItems] из программы установки, аналогично синтаксису, используемому в Syssetup.inf.

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

Задайте сведения о значении строковой ссылкой "@<path>,-resID".

Отображаемое имя определяется значениями resDLL и resID . Значение resID указывает идентификатор ресурса для строкового ресурса, связанного с файлом, нейтральным языком. Значение resDLL указывает путь к файлу, нейтральному языку.

Создание ресурсов для понятных имен типов документов

Необходимо реализовать понятное имя и строки InfoTip для приложения в виде строковых ресурсов. Чтобы разрешить понятным именам типов документов реагировать на язык пользовательского интерфейса, приложение должно зарегистрировать имена с помощью значения FriendlyTypeName в ключе идентификатора программы для типа файла. Значение по умолчанию для ключа идентификатора программы должно храниться для обеспечения обратной совместимости. Сведения о доступе к именам из приложения см. в разделе реестра "Поиск перенаправленных строк".

Конкретная работа включает в себя следующие действия:

  1. Реализуйте понятное имя и строки InfoTip в виде ресурсов строки для конкретного языка.
  2. Добавьте значение FriendlyTypeName в раздел реестра типов документа. Данные для значения соответствуют шаблону "@<path>,-<resID>", где путь указывает исполняемый файл и resID является идентификатором ресурса локализуемой строки, связанного с этим исполняемым файлом.
  3. Укажите значение реестра InfoTip в соответствии с форматом "@<path>,-<resID>".

В следующем примере показаны параметры реестра для 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 и более поздних версиях можно использовать уровень косвенного обращения, чтобы строка действия зависела от языка пользовательского интерфейса. Эти операционные системы поддерживают значение MUIVerb для определения строки, совместимой с MUI. Ниже приведен пример записи реестра для редкой команды:

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 и более поздних версий, используемая в предыдущих операционных системах.

 

Создание ресурсов для строк verb, protocol и AuxUserType

Необходимо создать локализуемые строковые ресурсы для строк Verb, Protocol и 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, определите значение CLSID по умолчанию с помощью HKCR\CLSID\{clsid}\LocalizedString.
  • Если CLSID имеет один или несколько подразделов в разделе HKCR\CLSID\{clsid}\Verb, определите каждую отдельную строку глагола с помощью HKCR\CLSID\{clsid}\Verb\xxx\LocalizedString.
  • Если CLSID имеет один или несколько вложенных ключей в HKCR\{progid}\Protocol\Stdfileediting\Verb, определите каждую отдельную строку Verb с помощью HKCR\{progid}\Protocol\Stdfileediting\Verb\xxx\LocalizedString.
  • Если CLSID содержит один или несколько перечисленных вложенных ключей AuxUserType в разделе HKCR\CLSID\{clsid}\AuxUserType, определите каждую запись AuxUserType с помощью HKCR\CLSID\{clsid}\AuxUserType\xxx\LocalizedString.

Создание ресурса для программы удаления

Чтобы зарегистрировать программу удаления для приложения, можно создать значения реестра в подразделе уникального идентификатора для приложения в разделе реестра HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall. Значения, которые необходимо задать, включают: DisplayName, DisplayVersion, Publisher, ProductID, RegOwner, RegCompany, UrlInfoAbout, HelpTelephone, HelpLink, InstallLocation, InstallSource, InstallDate, Contact, DisplayIcon, Readme, UrlUpdateInfo.

Примечание.

Чтобы включить технологию MUI для каждого значения, можно добавить "_Localized" в имя значения.

 

Компоненты операционной системы необходимы для предоставления значения для DisplayName_Localized определенным способом. Отображаемое имя следует поместить в библиотеку DLL, например Res.dll, в качестве строкового ресурса, предполагая, что идентификатор должен быть 1245. Затем приложение может зарегистрировать отображаемое имя как DisplayName_Localized со значением @\res.DLL,-1245. Все остальные параметры реестра должны храниться так же, как они есть, включая исходное значение для 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 Insert

Отображаемое имя вставленного объекта OLE можно реализовать как локализуемый строковый ресурс, связанный с кодом, реализующим этот объект. Диалоговое окно "Объект вставки OLE" получает отображаемое имя из раздела реестра HKCR\CLSID\{<GUID}, где GUID> определяет идентификатор класса вставленного объекта OLE. Windows Vista и более поздних версий реализуют этот тип объекта в локализуемом режиме, используя отображаемое имя, совместимое с MUI, которое позволяет настраивать язык пользовательского интерфейса. В отличие от этого, операционные системы до Windows Vista реализуют отображаемое имя для этого типа объекта, используя значение по умолчанию соответствующего раздела реестра. Обычно это имя — имя английского (США) или имя на языке пользовательского интерфейса по умолчанию системы.

Примечание.

Не все объекты, соответствующие подразделам раздела реестра, вставляются.

 

Значение по умолчанию ключа 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. Строка с идентификатором 9217 в Mplay32.exe может быть связана со строковыми значениями ресурсов для любого числа языков. Его английский (США) имя — "Media Clip".

Создание строковых ресурсов для оснастки консоли управления Майкрософт

Необходимо создать локализуемый строковый ресурс для каждой оснастки консоли управления Майкрософт (MMC), используемой приложением MUI. Так как оснастка является частью консоли, она имеет пользовательский интерфейс и должна быть глобализация для работы на нескольких языках.

В большинстве случаев оснастки 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 не считывается из реестра. Дополнительные сведения об использовании этих значений см. в разделе "Регистрация строк оснастки консоли управления Майкрософт" не считывается из реестра в разделе "Поиск перенаправленных строк".

Создание строковых ресурсов для службы Windows

Хотя служба Windows обычно имеет мало или нет пользовательского интерфейса, она должна отображать имя, совместимое с MUI, и обычно предоставляет описание языка, совместимого с MUI. Раздел реестра, описывающий службу Windows, поддерживает только значение DisplayName для имени службы и значения описания службы.

Параметры для службы Windows создаются из приложения, как описано в разделе "Задание отображаемого имени и описания службы Windows" из реестра Поиск перенаправленных строк. Если приложение не задает значения реестра для пользовательского интерфейса службы, значения в реестре остаются на английском языке, даже если пользовательский интерфейс находится на другом языке.

Подготовка ресурсов

Поиск перенаправленных строк