Uso del redireccionamiento de cadenas del Registro

El almacenamiento de cadenas codificadas de forma rígida en el Registro forma parte de un modelo de localización anterior a Windows Vista. MUI no lo admite. En el modelo actual, la interfaz de usuario del sistema operativo se ejecuta en archivos de recursos específicos del idioma sobre una base independiente del idioma. Los componentes del sistema operativo usan el Registro de forma independiente del idioma.

MUI solo usa cadenas de Registro redirigidas definidas por recursos de Win32 PE en el archivo de recursos del idioma base. El redireccionamiento se define por separado, por ejemplo, en un archivo .inf. Este tipo de almacenamiento permite al cargador de recursos seleccionar automáticamente los recursos de idioma correctos durante la carga del módulo de recursos.

Nota:

Este tema solo pertenece a los recursos de Win32 PE. Si usa recursos que no son de Win32 PE, debe proporcionar un redireccionamiento de las cadenas del Registro personalizados, si es necesario.

 

Creación de un recurso independiente del idioma

Una aplicación MUI que se ejecuta en Windows Vista y versiones posteriores usa un recurso de cadena independiente del idioma para permitir el acceso a cadenas específicas del idioma almacenadas en una tabla de recursos de cadena. El código de aplicación que lee estos valores del Registro se describe en la sección sobre la carga de un valor del Registro independiente del idioma de Búsqueda de cadenas redirigidas.

Los datos de un valor del Registro independiente del idioma tienen el formato "@<PE-path>,-<stringID>[;<comment>]", donde:

  • PE-path especifica la ruta de acceso del ejecutable. Puede especificar la ruta de acceso mediante una variable de entorno, como %ProgramFiles%, para admitir la implementación. Una alternativa para hacer referencia a la cadena es dejar fuera la información de la ruta de acceso del archivo. En este caso, la aplicación debe tener algunos medios, por ejemplo, otro valor del Registro, para comunicar su propio directorio de instalación.
  • stringID especifica el identificador numérico de recursos del recurso de cadena pertinente, que se implementa igual que cualquier otro recurso de cadena localizable.
  • comment especifica información opcional para la depuración o legibilidad del valor del Registro. Las funciones de API del Registro omiten el comentario al cargar la cadena.

Nota:

Los datos del valor del Registro no hacen referencia explícita al archivo de recursos específico del idioma. El archivo correcto se determina en tiempo de ejecución, en función de las preferencias actuales del idioma de la interfaz de usuario.

 

Se escribe un valor del Registro sin un espacio entre "," y "-". Un valor correcto del Registro es:

shell32.dll,-22912

Un valor incorrecto del Registro es:

shell32.dll, -22912

Un ejemplo de Windows Vista es el valor del Registro con los datos siguientes:

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

Creación de recursos para cadenas de acceso directo

Cuando la aplicación MUI muestra su nombre en la interfaz de usuario del shell, se muestra una cadena del recuadro informativo para el icono de la aplicación. Debe crear recursos de cadena para el nombre para mostrar de la aplicación y de cadena del recuadro informativo asociado a cada idioma admitido. Cuando los recursos estén listos, la aplicación puede usar las cadenas tal y como se describe en la sección Uso de la API de shell para cargar cadenas de acceso directo del Registro de Búsqueda de cadenas redirigidas.

Preparación de recursos para un acceso directo creado con Windows Installer

Si usa Windows Installer (MSI) para crear un acceso directo, los recursos de cadena incluyen el nombre para mostrar y la descripción del acceso directo. En la tabla de acceso directo de MSI, se hace referencia al archivo DLL de recursos en las columnas adecuadas y los identificadores de recursos para el nombre para mostrar del acceso directo y la descripción se usan en las columnas de identificador de recursos correspondientes.

Para que el acceso directo de la aplicación funcione correctamente con la tecnología de recursos MUI, tenga en cuenta los siguientes puntos al preparar las cadenas de acceso directo:

  • Use variables de entorno o una ruta de acceso relativa para registrar el archivo DLL. Puede especificar @%systemroot%\system32\shell32.dll siempre que el tipo de cadena del Registro sea REG_EXPAND_SZ. El identificador de recurso de cadena de "Documento de texto" en Shell32.dll es 12345.
  • No agregue espacios alrededor de los símbolos "," y "-". Un ejemplo correcto es "shell32.dll,-22912".
  • No use un nombre de archivo corto. Este tipo de nombre no funciona con el cargador de recursos.

Preparación de recursos para un acceso directo mediante el formato INF

Si usa el formato de archivo INF para crear cadenas de acceso directo, el archivo de recursos debe realizar la siguiente configuración del Registro. En estas instrucciones se presupone el uso de la sintaxis ProfileItems de la API de configuración.

  1. Cambie el valor del recuadro informativo para que apunte a la referencia de redirección de cadenas mediante la ruta de acceso y el identificador de recursos.
  2. Agregue el nuevo valor DisplayResource en las secciones de instalación de ProfileItems.

A continuación se muestra un ejemplo que muestra la adición de la aplicación Calculadora al menú Inicio:

[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

Use la sintaxis que se muestra a continuación al usar INF para agregar elementos, por ejemplo, una carpeta del grupo de acceso, al menú Inicio. Esta sintaxis supone el uso de la compatibilidad de [StartMenuItems] desde el programa de instalación, similar a la sintaxis utilizada en Syssetup.inf.

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

Establezca la referencia del recuadro informativo del valor ”@<path>,-resID”.

El nombre para mostrar viene determinado por los valores resDLL y resID. El valor resID especifica el identificador de recurso de un recurso de cadena asociado al archivo independiente del idioma. El valor resDLL especifica la ruta de acceso al archivo independiente del idioma.

Creación de recursos para nombres de tipos de documentos descriptivos

Debe implementar cadenas de nombres descriptivos y de recuadros informativos para la aplicación como recursos de cadena. Para permitir que los nombres de tipos de documentos descriptivos reaccionen al idioma de la interfaz de usuario, la aplicación debe registrar los nombres con el valor FriendlyTypeName en la clave de identificador de programa para el tipo de archivo. El valor predeterminado de la clave de identificador del programa debe conservarse para mantener la compatibilidad con versiones anteriores. Para más información sobre cómo acceder a los nombres desde la aplicación, consulte la sección Consulta de nombres de tipos de documentos descriptivos en el Registro de Búsqueda de cadenas redirigidas.

El trabajo específico implica los pasos siguientes:

  1. Implemente el nombre descriptivo y las cadenas de recuadro informativo como recursos de cadena específicos del idioma.
  2. Agregue el valor FriendlyTypeName en la clave del Registro del tipo de documento. Los datos del valor siguen el patrón "@<path>,-<resID>", donde path indica el archivo ejecutable y resID es el identificador de recurso de un recurso de cadena localizable asociado a ese ejecutable.
  3. Especifique el valor del Registro del recuadro informativo según el formato "@<path>,-<resID>".

En el ejemplo siguiente se muestra la configuración del Registro para un archivo .txt:

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

HKCR\txtfile
@="Text Document"

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

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

Proporcionar recursos para cadenas de acción de verbo de shell

Las cadenas de acción de determinados verbos, por ejemplo, "abrir" y "editar", se muestran en el menú emergente que se muestra cuando el usuario hace clic con el botón derecho en un archivo en el Explorador de Windows. La aplicación no tiene que especificar cadenas para verbos de shell comunes, ya que el shell tiene sus propios valores predeterminados habilitados para MUI para estos verbos. Sin embargo, debe proporcionar recursos de cadena localizables para las cadenas que representan verbos poco comunes.

En los sistemas operativos anteriores a Windows XP, las cadenas para verbos de shell del Registro se representan mediante la sintaxis siguiente, donde verb especifica el nombre real del verbo:

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

Este es un ejemplo:

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

En Windows XP y versiones posteriores, puede usar un nivel de direccionamiento indirecto para que una cadena de acción dependa del idioma de la interfaz de usuario. Estos sistemas operativos admiten un valor MUIVerb para la definición de una cadena compatible con MUI. Este es un ejemplo de una entrada del Registro para un verbo poco común:

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

La aplicación MUI también debe poder registrar el valor predeterminado anterior como una cadena localizable, como se muestra a continuación:

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

Nota:

No se recomienda el registro del valor predeterminado anterior porque requiere una configuración diferente en Windows XP y versiones posteriores de la configuración usada en sistemas operativos anteriores.

 

Creación de recursos para cadenas Verb, Protocol y AuxUserType

Debe crear recursos de cadena localizables para cadenas Verb, Protocol y AuxUserType. Use la siguiente configuración del Registro:

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"
...

El valor especificado para LocalizedString solo contiene o reemplaza el valor de Your Verb, no los dos valores de marca.

Este es un resumen que le ayudará a garantizar la configuración correcta del Registro:

  • Si CLSID tiene una clave HKCR\CLSID\{clsid}\Insertable, defina el valor CLSID predeterminado mediante HKCR\CLSID\{clsid}\LocalizedString.
  • Si CLSID tiene una o varias subclaves en HKCR\CLSID\{clsid}\Verb, defina cada cadena Verb individual mediante HKCR\CLSID\{clsid}\Verb\xxx\LocalizedString.
  • Si CLSID tiene una o varias subclaves en HKCR\{progid}\Protocol\Stdfileediting\Verb, defina cada cadena Verb individual mediante HKCR\{progid}\Protocol\Stdfileediting\Verb\xxx\LocalizedString.
  • Si CLSID tiene una o varias subclaves AuxUserType enumeradas en HKCR\CLSID\{clsid}\AuxUserType, defina cada entrada AuxUserType mediante HKCR\CLSID\{clsid}\AuxUserType\xxx\LocalizedString.

Creación de un recurso para el programa de desinstalación

Para registrar el programa de desinstalación de la aplicación, puede crear valores del Registro en la subclave de identificador único de la aplicación en la clave del Registro HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall. Los valores que se van a establecer incluyen: DisplayName, DisplayVersion, Publisher, ProductID, RegOwner, RegCompany, UrlInfoAbout, HelpTelephone, HelpLink, InstallLocation, InstallSource, InstallDate, Contact, Comments, DisplayIcon, Readme, UrlUpdateInfo.

Nota:

Para habilitar la tecnología MUI para cada valor, puede anexar "_Localized" al nombre del valor.

 

Los componentes del sistema operativo son necesarios para proporcionar un valor para DisplayName_Localized de una forma específica de MUI. Debe colocar el nombre para mostrar en un archivo DLL, como Res.dll, como un recurso de cadena, suponiendo que el identificador sea 1245. A continuación, la aplicación puede registrar el nombre para mostrar como DisplayName_Localized con el valor "@\res.DLL,-1245". Todas las demás configuraciones del Registro deben conservarse tal como están, incluido el valor original de DisplayName.

Creación de recursos para eventos de sonido

Windows asocia determinados eventos con archivos de sonido, por ejemplo, un evento de notificación de correo nuevo o un evento de alarma de batería crítica. La interfaz de usuario debe mostrar los nombres de evento y debe admitir la globalización. Por lo tanto, debe implementar un recurso de cadena localizable para la descripción de cada descripción del evento. Agregue un nuevo valor del Registro para cada nombre de evento, además del valor predeterminado codificado de forma rígida.

Haga lo siguiente para habilitar un evento de sonido:

  1. Implemente la descripción como un recurso de cadena localizable.
  2. Agregue un nuevo valor del Registro para el nombre para mostrar, además del valor predeterminado codificado de forma rígida. A continuación se muestra el diseño del Registro asociado:
HKCR\AppEvents\EventLabels
<event_name>
    (Default) REG_SZ "<description>"
    DispFileName REG_EXPAND_SZ "@<path>,-<resID>"

Si el shell no encuentra ni recupera el valor de DispFileName, usa la descripción predeterminada.

Creación de recursos para cadenas de diseño de teclado

Si la aplicación implementa una distribución del teclado, requiere un recurso de cadena localizable para el nombre del diseño de la pantalla, por ejemplo, en listas de distribuciones del teclado. Cada distribución del teclado tiene una tecla del Registro en HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layouts.

Entre los valores de esa clave se encuentran Layout Text, un nombre legible para la compatibilidad con versiones anteriores y Layout Display Name. Los datos proporcionados para Layout Display Name deben ser una referencia de cadena del formulario @<path>,-resID, que hacen referencia a un recurso de cadena localizable asociado a la distribución del teclado.

Este es un ejemplo de una configuración del Registro para la distribución del teclado español:

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

Representación de cadenas comunes del cuadro de diálogo Objeto de inserción OLE

Puede implementar el nombre para mostrar de un objeto OLE insertable como un recurso de cadena localizable asociado al código que implementa ese objeto. El cuadro de diálogo Objeto de inserción OLE obtiene un nombre para mostrar de la clave del Registro HKCR\CLSID\{<GUID>}, donde GUID identifica el identificador de clase de un objeto OLE insertable. Windows Vista y versiones posteriores implementan este tipo de objeto de forma localizable, usando un nombre para mostrar compatible con MUI que permite personalizar el idioma de la interfaz de usuario. En cambio, los sistemas operativos anteriores a Windows Vista implementan el nombre para mostrar de este tipo de objeto con el valor predeterminado de la clave del Registro correspondiente. Normalmente, este nombre es un nombre en inglés (Estados Unidos) o un nombre en el idioma predeterminado de la interfaz de usuario del sistema.

Nota:

No todos los objetos que corresponden a subclaves de la clave del Registro se pueden insertar.

 

El valor predeterminado de la clave HKCR\CLSID\{<GUID>} debe conservar un nombre legible para la compatibilidad con versiones anteriores. Sin embargo, también debe definir el valor LocalizedString, en el formato "@<path>,-ResID", donde la ruta de acceso identifica el archivo ejecutable que implementa el objeto. El valor resID especifica el identificador de recurso de la cadena localizable para el nombre para mostrar.

Por ejemplo, el script de registro para el objeto Media Clip insertable incluye las siguientes líneas:

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

La primera línea proporciona compatibilidad con versiones anteriores colocando una cadena de texto simple en el Registro como un nombre para mostrar predeterminado. La segunda línea proporciona acceso al nombre para mostrar compatible con MUI. Indica el identificador de cadena almacenado en Mplay32.exe. La cadena con el identificador 9217 en Mplay32.exe se puede asociar con valores de recursos de cadena para cualquier número de idiomas. Su nombre en inglés (Estados Unidos) es "Media Clip".

Creación de recursos de cadena para complementos de Microsoft Management Console

Debe crear un recurso de cadena localizable para cada complemento de Microsoft Management Console (MMC) utilizado por la aplicación MUI. Dado que un complemento forma parte de una consola, tiene una interfaz de usuario y debe globalizarse para funcionar en más de un idioma.

Por lo general, los complementos MMC generan los mismos problemas de globalización y localización que la propia aplicación MUI. Un complemento MMC debe reflejar su nombre en el Registro para mostrarlo. La entrada del Registro debe incluir una referencia indirecta a un recurso de cadena localizable y una cadena literal para la compatibilidad con versiones anteriores.

Cada complemento MMC tiene una clave del Registro en HKEY_LOCAL_MACHINE\Software\Microsoft\MMC\SnapIns. Entre los valores de esa clave se encuentran NameString, especificando un nombre legible para la compatibilidad con versiones anteriores y NameStringIndirect, especificando una referencia indirecta a un recurso de cadena localizable. Para NameStringIndirect, debe proporcionar una referencia de cadena del formulario "@<path>,-resID", que representa un recurso de cadena localizable.

Por ejemplo, puede establecer la siguiente configuración para Mymmc.dll, donde 12345 es el identificador del recurso de cadena correspondiente que contiene el nombre localizable del complemento:

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

Algunos complementos registran otros valores de cadena del Registro que MMC no lee del Registro. Para más información sobre el uso de estos valores, consulte Registro de cadenas de complemento de Microsoft Management Console no leídas del Registro de Búsqueda de cadenas redirigidas.

Creación de recursos de cadena para un servicio de Windows

Aunque un servicio de Windows normalmente tiene poca o ninguna interfaz de usuario, debe mostrar un nombre compatible con MUI y normalmente proporciona una descripción específica del idioma compatible con MUI. La clave del Registro que describe un servicio de Windows solo admite el valor DisplayName para el nombre del servicio y el valor Description de la descripción del servicio.

La configuración para el servicio de Windows se realiza desde la aplicación, como se describe en Establecimiento del nombre para mostrar y la descripción de un servicio de Windows del Registro de Búsqueda de cadenas redirigidas. Si la aplicación no establece los valores del Registro para la interfaz de usuario del servicio, los valores del Registro permanecen establecidos en inglés, aunque la interfaz de usuario esté en otro idioma.

Preparación de recursos

Búsqueda de cadenas redirigidas