Utilisation de la redirection de chaînes de Registre

Le stockage de chaînes codées en dur dans le Registre fait partie d’un modèle de localisation antérieur à Windows Vista. Il n’est pas pris en charge par MUI. Dans le modèle actuel, l’interface utilisateur du système d’exploitation s’exécute dans des fichiers de ressources spécifiques à la langue par-dessus une base indépendante de la langue. Les composants du système d’exploitation utilisent le Registre d’une façon indépendante de la langue.

MUI utilise seulement des chaînes du Registre redirigées qui sont définies par des ressources Win32 PE dans le fichier de ressources de la langue de base. La redirection est définie séparément, par exemple dans un fichier .inf. Ce type de stockage permet au chargeur de ressources de sélectionner automatiquement les ressources linguistiques appropriées lors du chargement des modules de ressources.

Remarque

Cette rubrique concerne seulement les ressources Win32 PE. Si vous utilisez des ressources non-Win32 PE, vous devez fournir une redirection de chaînes du Registre personnalisée quand c’est nécessaire.

 

Créer une ressource indépendante de la langue

Une application MUI s’exécutant sur Windows Vista et ultérieur utilise une ressource de chaînes indépendante de la langue pour autoriser l’accès à des chaînes spécifiques à la langue stockées dans une table de ressources de chaînes. Le code d’application qui lit ces valeurs dans le Registre est décrit dans la section Charger une valeur de Registre indépendante de la langue de Localisation des chaînes redirigées.

Les données pour une valeur de Registre indépendante de la langue ont le format « @<PE-path>,-<stringID>[;<comment>] », où :

  • PE-path spécifie le chemin de l’exécutable. Vous pouvez spécifier le chemin en utilisant une variable d’environnement, comme %ProgramFiles%, pour prendre en charge le déploiement. Une alternative pour faire référence à votre chaîne consiste à ne pas indiquer les informations du chemin du fichier. Dans ce cas, votre application doit disposer d’un moyen, par exemple une autre valeur de Registre, pour communiquer son propre répertoire d’installation.
  • stringID spécifie l’identificateur de ressource numérique de la ressource de chaîne appropriée, qui est implémentée comme toute autre ressource de chaîne localisable.
  • comment spécifie des informations facultatives pour le débogage ou la lisibilité de la valeur de Registre. Les fonctions d’API de Registre ignorent le commentaire lors du chargement de la chaîne.

Remarque

Les données de la valeur de Registre ne font pas de référence explicite au fichier de ressources spécifique à la langue. Le fichier correct est déterminé au moment de l’exécution, en fonction des préférences de langue de l’interface utilisateur actuelle.

 

Une valeur de Registre est entrée sans espace entre la virgule (« , ») et le tiret (« - »). Voici une valeur de Registre correcte :

shell32.dll,-22912

Voici une valeur de Registre incorrecte :

shell32.dll, -22912

La valeur de Registre avec les données suivantes est un exemple provenant de Windows Vista :

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

Créer des ressources pour les chaînes de raccourci

Quand l’application MUI affiche son nom dans l’interface utilisateur du shell, une chaîne d’info-bulle est affichée pour l’icône de l’application. Vous devez créer des ressources de chaîne pour le nom d’affichage de votre application et une chaîne d’info-bulle associée pour chaque langue prise en charge. Quand les ressources sont prêtes, votre application peut utiliser les chaînes décrites dans la section Utiliser l’API Shell pour charger des chaînes de raccourci depuis le Registre de Localisation des chaînes redirigées.

Préparer des ressources pour un raccourci créé avec Windows Installer

Si vous utilisez Windows Installer (MSI) pour créer un raccourci, les ressources de chaîne incluent le nom d’affichage et la description du raccourci. Dans la table de raccourcis MSI, la DLL des ressources est référencée dans les colonnes appropriées, et les identificateurs de ressource pour le nom d’affichage et la description de votre raccourci sont utilisés dans les colonnes d’identificateur de ressource correspondantes.

Pour que le raccourci de l’application fonctionne correctement avec la technologie des ressources MUI, gardez à l’esprit les points suivants lors de la préparation des chaînes de raccourci :

  • Utilisez des variables d’environnement ou un chemin relatif pour inscrire la DLL. Vous pouvez spécifier @%systemroot%\system32\shell32.dll dès lors que le type de chaîne de Registre est REG_EXPAND_SZ. L’identificateur de ressource de chaîne pour « Text Document » dans Shell32.dll est 12345.
  • N’utilisez pas d’espaces autour des symboles « , » et « - ». « shell32.dll,-22912 » est un exemple correct.
  • N’utilisez pas de nom de fichier court. Ce type de nom ne fonctionne pas avec le chargeur de ressources.

Préparer des ressources pour un raccourci en utilisant le format INF

Si vous utilisez le format de fichier INF pour créer des chaînes de raccourci, le fichier de ressources doit définir les paramètres de Registre suivants. Ces instructions supposent l’utilisation de la syntaxe ProfileItems de l’API Configuration.

  1. Changez la valeur d’InfoTip pour qu’elle pointe vers la référence de redirection de chaîne en utilisant le chemin et de l’identificateur de ressource.
  2. Ajoutez la nouvelle valeur de DisplayResource sous les sections d’installation de ProfileItems.

Voici un exemple montrant l’ajout de l’application Calculatrice au menu Démarrer :

[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

Utilisez la syntaxe indiquée ci-dessous quand vous utilisez INF pour ajouter des éléments, par exemple un dossier Groupe d’accès, au menu Démarrer. Cette syntaxe suppose l’utilisation de la prise en charge de [StartMenuItems] du programme d’installation, de façon similaire à la syntaxe utilisée dans Syssetup.inf.

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

Définissez la valeur de infotip sur la référence de chaîne « @<path>,-resID ».

Le nom d’affichage est déterminé par les valeurs de resDLL et resID. La valeur de resID spécifie l’identificateur de ressource d’une ressource de chaîne associée au fichier indépendant de la langue. La valeur de resDLL spécifie le chemin du fichier indépendant de la langue.

Créer des ressources pour les noms conviviaux des types de documents

Vous devez implémenter des chaînes de nom convivial et d’info-bulle pour votre application en tant que ressources de chaîne. Pour permettre aux noms conviviaux de types de documents de réagir à la langue de l’interface utilisateur, l’application doit inscrire les noms en utilisant la valeur FriendlyTypeName sous la clé de l’identificateur de programme pour le type de fichier. La valeur par défaut de la clé de l’identificateur de programme doit être conservée pour maintenir la compatibilité descendante. Pour plus d’informations sur l’accès aux noms depuis votre application, consultez la section Interroger les noms conviviaux des types de documents dans le Registre de Localisation des chaînes redirigées.

Le travail spécifique implique les étapes suivantes :

  1. Implémentez les chaînes de nom convivial et d’info-bulle en tant que ressources de chaîne spécifiques à la langue.
  2. Ajoutez la valeur de FriendlyTypeName sous la clé de Registre du type de document. Les données de la valeur suivent le modèle « @<path>,-<resID> », où path indique l’exécutable et où resID est l’identificateur de ressource d’une ressource de chaîne localisable associée à cet exécutable.
  3. Spécifiez la valeur de Registre InfoTip au format « @<path>,-<resID> ».

L’exemple suivant montre les valeurs de Registre pour un fichier .txt :

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

HKCR\txtfile
@="Text Document"

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

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

Fournir des ressources pour les chaînes d’action des verbes du shell

Les chaînes d’action pour certains verbes, par exemple « ouvrir » et « modifier », sont montrées dans le menu contextuel affiché quand l’utilisateur clique avec le bouton droit sur un fichier dans l’Explorateur Windows. Votre application n’a pas besoin de spécifier des chaînes pour les verbes courants du shell, car le shell a ses propres valeurs par défaut activées pour MUI pour ces verbes. Cependant, vous devez fournir des ressources de chaîne localisables pour les chaînes représentant des verbes peu courants.

Sur les systèmes d’exploitation antérieurs à Windows XP, les chaînes pour les verbes du shell dans le Registre sont rendues en utilisant la syntaxe suivante, où verb spécifie le nom du verbe réel :

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

Voici un exemple :

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

Sur Windows XP et ultérieur, vous pouvez utiliser un niveau d’indirection pour rendre une chaîne d’action dépendante de la langue de l’interface utilisateur. Ces systèmes d’exploitation prennent en charge une valeur MUIVerb pour la définition d’une chaîne compatible MUI. Voici un exemple d’entrée de Registre pour un verbe peu courant :

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

Votre application MUI doit également être en mesure d’inscrire l’ancienne valeur par défaut en tant que chaîne localisable, comme indiqué ci-dessous :

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

Remarque

L’inscription de l’ancienne valeur par défaut n’est pas recommandée, car elle nécessite une configuration sur Windows XP et ultérieur différente de la configuration utilisée sur les systèmes d’exploitation antérieurs.

 

Créer des ressources pour les chaînes Verb, Protocol et AuxUserType

Vous devez créer des ressources de chaîne localisables pour les chaînes Verb, Protocol et AuxUserType. Utilisez les valeurs de Registre suivantes :

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

La valeur spécifiée pour LocalizedString contient ou remplace seulement la valeur pour votre verbe, et non pas les deux valeurs d’indicateur.

Voici un résumé pour vous aider à définir les valeurs de Registre correctes :

  • Si CLSID a une clé HKCR\CLSID\{clsid}\Insertable, définissez la valeur par défaut de CLSID en utilisant HKCR\CLSID\{clsid}\LocalizedString.
  • Si CLSID a une ou plusieurs sous-clés sous HKCR\CLSID\{clsid}\Verb, définissez chaque chaîne Verb individuelle en utilisant HKCR\CLSID\{clsid}\Verb\xxx\LocalizedString.
  • Si CLSID a une ou plusieurs sous-clés sous HKCR\{progid}\Protocol\Stdfileediting\Verb, définissez chaque chaîne Verb individuelle en utilisant HKCR\{progid}\Protocol\Stdfileediting\Verb\xxx\LocalizedString.
  • Si CLSID a une ou plusieurs sous-clés AuxUserType répertoriées sous HKCR\CLSID\{clsid}\AuxUserType, définissez chaque entrée AuxUserType en utilisant HKCR\CLSID\{clsid}\AuxUserType\xxx\LocalizedString.

Créer une ressource pour le programme de désinstallation

Pour inscrire le programme de désinstallation de l’application, vous pouvez créer des valeurs de Registre dans la sous-clé de l’identificateur unique de l’application sous la clé de Registre HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall. Les valeurs à définir incluent : DisplayName, DisplayVersion, Publisher, ProductID, RegOwner, RegCompany, UrlInfoAbout, HelpTelephone, HelpLink, InstallLocation, InstallSource, InstallDate, Contact, Comments, DisplayIcon, Readme, UrlUpdateInfo.

Remarque

Pour activer la technologie MUI pour chaque valeur, vous pouvez ajouter « _Localized » au nom de la valeur.

 

Les composants du système d’exploitation doivent fournir une valeur pour DisplayName_Localized d’une manière spécifique à MUI. Vous devez placer le nom d’affichage dans une DLL, comme Res.dll, en tant que ressource de chaîne, en supposant que l’identificateur soit 1245. Ensuite, l’application peut inscrire le nom d’affichage en tant que DisplayName_Localized avec la valeur « @\res.DLL,-1245 ». Tous les autres paramètres de Registre doivent être conservés tels quels, y compris la valeur d’origine de DisplayName.

Créer des ressources pour des événements audio

Windows associe certains événements à des fichiers sonores, par exemple un événement Notification de nouvel e-mail ou un événement Alarme de batterie critique. Les noms d’événement doivent être affichés par l’interface utilisateur et doivent prendre en charge la globalisation. Par conséquent, vous devez implémenter une ressource de chaîne localisable pour la description de chaque événement. Ajoutez une nouvelle valeur de Registre pour chaque nom d’événement, en plus de la valeur par défaut codée en dur.

Procédez comme suit pour activer un événement sonore :

  1. Implémentez la description en tant que ressource de chaîne localisable.
  2. Ajoutez une nouvelle valeur de Registre pour le nom d’affichage, en plus de la valeur par défaut codée en dur. La disposition de Registre associée est montrée ci-dessous :
HKCR\AppEvents\EventLabels
<event_name>
    (Default) REG_SZ "<description>"
    DispFileName REG_EXPAND_SZ "@<path>,-<resID>"

Si le shell ne peut pas trouver ou récupérer la valeur de DispFileName, il utilise la description par défaut.

Créer des ressources pour les chaînes de disposition du clavier

Si votre application implémente une disposition du clavier, elle nécessite une ressource de chaîne localisable pour le nom de la disposition à afficher à l’écran, par exemple dans les listes de dispositions du clavier. Chaque disposition du clavier a une clé de Registre sous HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layouts.

Parmi les valeurs de cette clé figure Layout Text, un nom lisible par l’humain pour la compatibilité descendante, et Layout Display Name. Les données fournies pour Layout Display Name doivent être une référence de chaîne sous la forme @<path>,-resID, faisant référence à une ressource de chaîne localisable associée à la disposition du clavier.

Voici un exemple de valeur de Registre pour la disposition du clavier espagnol :

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

Représenter des chaînes de boîte de dialogue courantes Insérer un objet OLE

Vous pouvez implémenter le nom d’affichage d’un objet insérable OLE en tant que ressource de chaîne localisable associée au code implémentant cet objet. La boîte de dialogue Insérer un objet OLE obtient un nom d’affichage auprès de la clé de Registre HKCR\CLSID\{<GUID>}, où GUID identifie l’identificateur de classe d’un objet OLE insérable. Windows Vista et ultérieur implémentent ce type d’objet de manière localisable, en utilisant un nom d’affichage conforme à MUI, qui permet la personnalisation de la langue de l’interface utilisateur. En revanche, les systèmes d’exploitation antérieurs à Windows Vista implémentent le nom d’affichage pour ce type d’objet en utilisant la valeur par défaut de la clé de Registre correspondante. En général, ce nom est un nom en Anglais (États-Unis) ou un nom dans la langue de l’interface utilisateur par défaut du système.

Remarque

Les objets correspondant aux sous-clés de la clé de Registre ne sont pas tous insérables.

 

La valeur par défaut de la clé HKCR\CLSID\{<GUID>} doit conserver un nom lisible par l’humain pour la compatibilité descendante. Cependant, il doit également définir la valeur de LocalizedString, au format « @<path>,-ResID », où path identifie le fichier exécutable implémentant l’objet. La valeur de ResID spécifie l’identificateur de ressource de la chaîne localisable pour le nom d’affichage.

Par exemple, le script d’inscription de l’objet Clip multimédia insérable inclut les lignes suivantes :

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

La première ligne fournit une compatibilité descendante en plaçant une chaîne de texte simple dans le Registre comme nom d’affichage par défaut. La deuxième ligne fournit l’accès au nom d’affichage conforme à MUI. Elle indique l’identificateur de chaîne stocké dans Mplay32.exe. La chaîne avec l’identificateur 9217 dans Mplay32.exe peut être associée à des valeurs de ressource de chaîne pour un nombre quelconque de langues. Son nom en Anglais (États-Unis) est « Media Clip ».

Créer des ressources de chaîne pour les composants logiciels enfichables de Microsoft Management Console

Vous devez créer une ressource de chaîne localisable pour chaque composant logiciel enfichable MMC (Microsoft Management Console) utilisé par votre application MUI. Comme un composant logiciel enfichable fait partie d’une console, il a une interface utilisateur et doit être globalisé pour fonctionner dans plusieurs langues.

Dans la plupart des cas, les composants logiciels enfichables MMC posent les mêmes problèmes de globalisation et de localisation que l’application MUI elle-même. Un composant logiciel enfichable MMC doit refléter son nom dans le Registre pour être affiché. L’entrée de Registre doit inclure à la fois une référence indirecte à une ressource de chaîne localisable et une chaîne littérale pour la compatibilité descendante.

Chaque composant logiciel enfichable MMC a une clé de Registre sous HKEY_LOCAL_MACHINE\Software\Microsoft\MMC\SnapIns. Parmi les valeurs de cette clé figurent NameString, qui spécifie un nom lisible par l’humain pour des raisons de compatibilité ascendante, et NameStringIndirect, qui spécifie une référence indirecte à une ressource de chaîne localisable. Pour NameStringIndirect, vous devez fournir une référence de chaîne de la forme « @<path>,-resID », représentant une ressource de chaîne localisable.

Par exemple, vous pouvez définir le paramètre suivant pour Mymmc.dll, où 12345 est l’identificateur de la ressource de chaîne correspondante contenant le nom localisable du composant logiciel enfichable :

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

Certains composants logiciels enfichables inscrivent d’autres valeurs de chaîne de Registre que MMC ne lit pas dans le Registre. Pour plus d’informations sur l’utilisation de ces valeurs, consultez Inscrire des chaînes de composant logiciel enfichable de Microsoft Management Console non lues dans le Registre, dans Localisation des chaînes redirigées.

Créer des ressources de chaîne pour un service Windows

Bien qu’un service Windows ait généralement peu ou pas d’interface utilisateur, il doit afficher un nom conforme à MUI et fournit généralement une description spécifique à la langue conforme à MUI. La clé de Registre qui décrit un service Windows prend en charge seulement la valeur de DisplayName pour le nom du service et la valeur de Description pour la description du service.

Les paramètres du service Windows sont définis à partir de l’application, comme décrit dans Définir le nom d’affichage et la description d’un service Windows à partir du registre dans Localisation des chaînes redirigées. Si votre application ne définit pas les valeurs de Registre pour l’interface utilisateur du service, les valeurs du Registre restent définies sur Anglais, même si l’interface utilisateur est dans une autre langue.

Préparation des ressources

Localisation des chaînes redirigées