Använda registersträngsomdirigering
Lagring av hårdkodade strängar i registret är en del av en pre-Windows Vista-lokaliseringsmodell. Det stöds inte av MUI. I den aktuella modellen körs användargränssnittet för operativsystemet i språkspecifika resursfiler ovanpå en språkneutral bas. Komponenterna i operativsystemet använder registret på ett språkneutralt sätt.
MUI använder endast omdirigerade registersträngar som definierats av Win32 PE-resurser i basspråkets resursfil. Omdirigering definieras separat, till exempel i en .inf-fil. Med den här typen av lagring kan resursinläsaren välja rätt språkresurser automatiskt när resursmodulen läses in.
Not
Det här avsnittet gäller endast Win32 PE-resurser. Om du använder icke-Win32 PE-resurser måste du ange anpassad omdirigering av registersträngar om det behövs.
Skapa en Language-Neutral resurs
Ett MUI-program som körs i Windows Vista och senare använder en språkneutral strängresurs för att ge åtkomst till språkspecifika strängar som lagras i en strängresurstabell. Programkod som läser dessa värden från registret beskrivs i avsnittet Ladda ett Language-Neutral registervärde i avsnittet Lokalisera omdirigerade strängar.
Data för ett språkneutralt registervärde har formatet "@<PE-path>,-<stringID>[;<comment>]
", där:
- PE-sökväg anger sökvägen till den körbara filen. Du kan ange sökvägen med hjälp av en miljövariabel, till exempel %ProgramFiles%, som stöd för distribution. Ett alternativ för att skapa en strängreferens är att utelämna filsökvägsinformationen. I det här fallet måste ditt program ha vissa medel, till exempel ett annat registervärde, för att kunna kommunicera sin egen installationskatalog.
- stringID- anger den numeriska resursidentifieraren för den relevanta strängresursen, som implementeras precis som andra lokala strängresurser.
- kommentaren anger valfri information för felsökning eller läsbarhet för registervärdet. Register-API-funktionerna ignorerar kommentaren när strängen läses in.
Notera
Data för registervärdet refererar inte uttryckligen till den språkspecifika resursfilen. Rätt fil bestäms vid körning, baserat på de aktuella språkinställningarna för användargränssnittet.
Ett registervärde anges utan blanksteg mellan "" och "-". Ett korrekt registervärde är:
shell32.dll,-22912
Ett felaktigt registervärde är:
shell32.dll, -22912
Ett exempel från Windows Vista är registervärdet med följande data:
@%SystemRoot%\system32\input.dll,-5020
Skapa resurser för genvägssträngar
När MUI-programmet visar sitt namn i användargränssnittet visas en InfoTip-text för programikonen. Du bör skapa strängresurser för programmets visningsnamn och tillhörande InfoTip-sträng för varje språk som stöds. När resurserna är klara kan ditt program använda strängarna enligt beskrivningen i avsnittet "Använd Shell API för att ladda genvägssträngar från registret" under Lokalisera omdirigerade strängar.
Förbereda resurser för en genväg som skapats med Windows Installer
Om du använder Windows Installer (MSI) för att skapa en genväg innehåller strängresurserna visningsnamn och beskrivning för genvägar. I MSI-genvägstabellenrefereras resurs-DLL:en till i lämpliga kolumner och resursidentifierarna för genvägsvisningsnamnet och beskrivningen används i motsvarande resursidentifierarkolumner.
Så att programgenvägen fungerar korrekt med MUI-resurstekniken bör du tänka på följande när du förbereder genvägssträngarna:
- Använd antingen miljövariabler eller en relativ sökväg för att registrera DLL-filen. Du kan ange @%systemroot%\system32\shell32.dll så länge registersträngstypen är REG_EXPAND_SZ. Strängresursidentifieraren för "Textdokument" i Shell32.dll är 12345.
- Använd inte blanksteg runt symbolerna "," och "-". Ett korrekt exempel är "shell32.dll,-22912".
- Använd inte ett kort filnamn. Den här typen av namn fungerar inte med resursinläsaren.
Förbereda resurser för en genväg med INF-format
Om du använder INF-filformatet för att skapa genvägssträngar bör resursfilen göra följande registerinställningar. Dessa instruktioner förutsätter användning av ProfileItems-syntaxen för installations-API:et.
- Ändra InfoTip-värdet så att det pekar på referensen för strängomdirigering med hjälp av sökvägen och resursidentifieraren.
- Lägg till det nya värdet DisplayResource under installationsavsnitten ProfileItems.
Följande är ett exempel som visar tillägget av kalkylatorprogrammet i menyn Start:
[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
Använd syntaxen som visas nedan när du använder INF för att lägga till objekt, till exempel en åtkomstgruppmapp, på menyn Start. Den här syntaxen förutsätter användning av stöd för [StartMenuItems] från installationsprogrammet, ungefär som den syntax som används i Syssetup.inf.
[StartMenuItems]
<description> = <binary>,<commandline>,<iconfile>,<iconnum>,<infotip>,<resDLL,resID>
Ange värdet infotip till strängreferensen "@<path>,-resID
".
Visningsnamnet bestäms av resDLL- och resID- värden. Värdet resID anger resursidentifieraren för en strängresurs som är associerad med den språkneutrala filen. Värdet resDLL anger sökvägen till den språkneutrala filen.
Skapa resurser för vänliga dokumenttypsnamn
Du måste implementera vänliga namn och InfoTip-strängar för din applikation som strängresurser. Om du vill tillåta att vänliga dokumenttypsnamn reagerar på gränssnittsspråket måste programmet registrera namnen med hjälp av värdet FriendlyTypeName under programidentifieringsnyckeln för filtypen. Standardvärdet för programidentifierarnyckeln ska behållas för att hålla bakåtkompatibiliteten. Information om hur du kommer åt namnen från ditt program finns i avsnittet Frågevänliga dokumenttypnamn i registret i Lokalisera omdirigerade strängar.
Det specifika arbetet omfattar följande steg:
- Implementera det vänliga namnet och InfoTip-strängarna som språkspecifika strängresurser.
- Lägg till värdet FriendlyTypeName under registernyckeln för dokumenttyp. Data för värdet följer mönstret "
@<path>,-<resID>
", där sökväg anger den körbara filen och resID är resursidentifieraren för en lokal strängresurs som är associerad med den körbara filen. - Ange registervärdet InfoTip enligt formatet "
@<path>,-<resID>
".
I följande exempel visas registerinställningarna för en .txt fil:
HKCR\.txt
@="txtfile"
"Content Type"="text/plain"
HKCR\txtfile
@="Text Document"
"FriendlyTypeName" = "@%systemroot%\system32\shell32.dll,-12345"
"InfoTip" = "@%systemroot%\system32\shell32.dll,-12346"
Ange resurser för Shell Verb-åtgärdssträngar
Åtgärdssträngar för vissa verb, till exempel "öppna" och "redigera", visas i popup-menyn som visas när användaren högerklickar på en fil i Utforskaren. Programmet behöver inte ange strängar för vanliga gränssnittsverb, eftersom gränssnittet har sina egna MUI-aktiverade standardvärden för dessa verb. Du bör dock ange lokala strängresurser för strängar som representerar ovanliga verb.
I operativsystem före Windows XP återges strängar för shell-verb i registret med hjälp av följande syntax, där verb anger det faktiska verbnamnet:
HKCR\<progid>\shell\<verb>
@ = <friendly-name>
Här är ett exempel:
HKCR\Sample.app\shell\Disc
@ = "Disconnect"
I Windows XP och senare kan du använda en indirekt nivå för att göra en åtgärdssträng beroende av användargränssnittsspråket. Dessa operativsystem stöder ett MUIVerb-värde för definition av en MUI-kompatibel sträng. Här är ett exempel på en registerpost för ett ovanligt verb:
HKCR\Sample.app\shell\Disc
@ = "Disconnect"
"MUIVerb" = "@%systemroot%\system32\sample.exe,-9875"
MUI-programmet bör också kunna registrera det gamla standardvärdet som en localizable-sträng, enligt nedan:
HKCR\Sample.app\shell\Disc
@ = "@%systemroot%\system32\sample.exe,-9875"
Not
Registrering av det gamla standardvärdet rekommenderas inte eftersom det kräver en annan konfiguration i Windows XP och senare än den konfiguration som användes i tidigare operativsystem.
Skapa resurser för verb-, protokoll- och AuxUserType-strängar
Du bör skapa lokala strängresurser för verb-, protokoll- och AuxUserType-strängar. Använd följande registerinställningar:
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"
...
Värdet som anges för LocalizedString innehåller eller ersätter endast värdet för Ditt verb, inte de två flaggvärdena.
Här är en sammanfattning som hjälper dig att säkerställa rätt registerinställningar:
- Om CLSID har en HKCR\CLSID\{clsid}\Insertable-nyckel definierar du CLSID-standardvärdet med HKCR\CLSID\{clsid}\LocalizedString.
- Om CLSID har en eller flera undernycklar under HKCR\CLSID\{clsid}\Verb definierar du varje enskild verbsträng med HKCR\CLSID\{clsid}\Verb\xxx\LocalizedString.
- Om CLSID har en eller flera undernycklar under HKCR\{progid}\Protocol\Stdfileediting\Verb definierar du varje enskild verbsträng med HKCR\{progid}\Protocol\Stdfileediting\Verb\xxx\LocalizedString.
- Om CLSID har en eller flera AuxUserType-undernycklar under HKCR\CLSID\{clsid}\AuxUserType definierar du varje AuxUserType-post med HKCR\CLSID\{clsid}\AuxUserType\xxx\LocalizedString.
Skapa en resurs för avinstallationsprogrammet
Om du vill registrera avinstallationsprogrammet för programmet kan du skapa registervärden i den unika undernyckeln för identifieraren för programmet under registernyckeln HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall. Värden som ska anges är: DisplayName, DisplayVersion, Publisher, ProductID, RegOwner, RegCompany, UrlInfoAbout, HelpTelephone, HelpLink, InstallLocation, InstallSource, InstallDate, Contact, Comments, DisplayIcon, Readme, UrlUpdateInfo.
Notera
Om du vill aktivera MUI-teknik för varje värde kan du lägga till "_Localized" i värdenamnet.
Operativsystemkomponenter krävs för att ange ett värde för DisplayName_Localized på ett MUI-specifikt sätt. Du bör placera visningsnamnet i en DLL, till exempel Res.dll, som en strängresurs, förutsatt att identifieraren är 1245. Sedan kan programmet registrera visningsnamnet som DisplayName_Localized med värdet "@\res.DLL,-1245". Alla andra registerinställningar bör behållas som de är, inklusive det ursprungliga värdet för DisplayName.
Skapa resurser för ljudhändelser
Windows associerar vissa händelser med ljudfiler, till exempel en ny e-postaviseringshändelse eller en kritisk batterilarmhändelse. Händelsenamnen måste visas av användargränssnittet och måste ha stöd för globalisering. Därför bör du implementera en lokal strängresurs för beskrivningen av varje händelsebeskrivning. Lägg till ett nytt registervärde för varje händelsenamn, utöver det hårdkodade standardvärdet.
Gör följande för att aktivera en ljudhändelse:
- Implementera beskrivningen som en lokal strängresurs.
- Lägg till ett nytt registervärde för visningsnamnet, utöver det hårdkodade standardvärdet. Den associerade registerlayouten visas nedan:
HKCR\AppEvents\EventLabels
<event_name>
(Default) REG_SZ "<description>"
DispFileName REG_EXPAND_SZ "@<path>,-<resID>"
Om gränssnittet inte kan hitta eller hämta värdet för DispFileName använder det standardbeskrivningen.
Skapa resurser för tangentbordslayoutsträngar
Om programmet implementerar en tangentbordslayout krävs en lokal strängresurs för namnet på layouten för skärmvisning, till exempel i listor med tangentbordslayouter. Varje tangentbordslayout har en registernyckel under HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layouts
.
Bland värdena för nyckeln finns Layout Text
, ett läsbart namn för bakåtkompatibilitet och Layout Display Name
. De data som anges för Layout Display Name
ska vara en strängreferens för formuläret @<path>,-resID
, som refererar till en lokal strängresurs som är associerad med tangentbordslayouten.
Här är ett exempel på en registerinställning för spansk tangentbordslayout:
HKLM\SYSTEM\CurrentControlSet\Control\Keyboard Layouts\
0000040a
Layout Text REG_SZ "Spanish"
Layout Display Name REG_EXPAND_SZ "@%SystemRoot%\system32\input.dll,-5020"
Representera vanliga dialogsträngar för OLE-infogningsobjekt
Du kan implementera visningsnamnet för ett OLE-infogat objekt som en localizable-strängresurs som är associerad med koden som implementerar objektet. Dialogrutan OLE Insert Object hämtar ett visningsnamn från registernyckeln HKCR\CLSID\{<GUID>}, där GUID identifierar klassidentifieraren för ett infogbart OLE-objekt. Windows Vista och senare implementerar den här typen av objekt på ett lokalt sätt med hjälp av ett MUI-kompatibelt visningsnamn som tillåter anpassning till användargränssnittsspråket. Däremot implementerar operativsystemen före Windows Vista visningsnamnet för den här typen av objekt med standardvärdet för motsvarande registernyckel. Vanligtvis är det här namnet antingen ett engelskt (USA) namn eller ett namn i systemets standardspråk för användargränssnittet.
Notera
Alla objekt som motsvarar undernycklar i registernyckeln kan inte infogas.
Standardvärdet för nyckeln HKCR\CLSID\{<GUID>} bör behålla ett läsbart namn för bakåtkompatibilitet. Men det bör också definiera värdet LocalizedString i formatet "@<path>,-ResID
", där sökvägen identifierar den körbara fil som implementerar objektet. ResID-värdet anger resursidentifieraren för den lokaliserade strängen för visningsnamnet.
Registreringsskriptet för det infogbara Media Clip-objektet innehåller till exempel följande rader:
HKCR,"CLSID\%CLSID_Media_Clip%",,,"%default description%"
HKCR,"CLSID\%CLSID_Media_Clip%","LocalizedString",,"@%systemroot%\system32\mplay32.exe,-9217"
Den första raden ger bakåtkompatibilitet genom att placera en enkel textsträng i registret som standardvisningsnamn. Den andra raden ger åtkomst till det MUI-kompatibla visningsnamnet. Det anger strängidentifieraren som lagras i Mplay32.exe. Strängen med identifieraren 9217 i Mplay32.exe kan associeras med strängresursvärden för valfritt antal språk. Dess engelska (USA) namn är "Media Clip".
Skapa strängresurser för Microsoft Management Console Snap-Ins
Du bör skapa en lokal strängresurs för varje snapin-modul för Microsoft Management Console (MMC) som används av DITT MUI-program. Eftersom en snapin-modul är en del av en konsol har den ett användargränssnitt och måste globaliseras för att fungera på mer än ett språk.
För det mesta skapar MMC-snapin-moduler samma globaliserings- och lokaliseringsproblem som själva MUI-programmet. En MMC-snapin måste återspegla sitt namn i registret för att visas. Registerposten bör innehålla både en indirekt referens till en localizable-strängresurs och en literalsträng för bakåtkompatibilitet.
Varje MMC-snapin har en registernyckel under HKEY_LOCAL_MACHINE\Software\Microsoft\MMC\SnapIns. Bland värdena för den nyckeln finns NameString, som anger ett läsbart namn för bakåtkompatibilitet och NameStringIndirect, som anger en indirekt referens till en localizable-strängresurs. För NameStringIndirect bör du ange en strängreferens för formuläret "@<path>,-resID
", som representerar en localizable-strängresurs.
Du kan till exempel göra följande inställning för Mymmc.dll, där 12345 är identifieraren för motsvarande strängresurs som innehåller snapinets lokaliserbara namn:
NameStringIndirect=@%systemroot%@c:\windir\system32\mymmc.dll,-12345
Vissa snapin-moduler registrerar andra registersträngsvärden som MMC inte läser från registret. Mer information om hur du använder dessa värden finns i Microsoft Management Console Snap-In Strängar inte lästa från registret i Lokalisera omdirigerade strängar.
Skapa strängresurser för en Windows-tjänst
Även om en Windows-tjänst vanligtvis har lite eller inget användargränssnitt, måste den visa ett MUI-kompatibelt namn och tillhandahåller vanligtvis en SPRÅKspecifik beskrivning som är kompatibel med MUI. Registernyckeln som beskriver en Windows-tjänst stöder endast DisplayName-värdet för tjänstnamnet och beskrivningsvärdet för tjänstbeskrivningen.
Inställningar för Windows-tjänsten görs från programmet enligt beskrivningen i Ange visningsnamn och beskrivning för en Windows-tjänst från registret i hitta omdirigerade strängar. Om ditt program inte anger registervärdena för tjänstens användargränssnitt förblir värdena i registret inställda på engelska, även om användargränssnittet är på ett annat språk.
Relaterade ämnen