Udostępnij przez


Używanie przekierowania ciągów rejestru

Przechowywanie zakodowanych ciągów w rejestrze jest częścią modelu lokalizacji przed systemem Windows Vista. Nie jest obsługiwany przez interfejs MUI. W bieżącym modelu interfejs użytkownika dla systemu operacyjnego jest uruchamiany w plikach zasobów specyficznych dla języka na bazie neutralnej dla języka. Składniki systemu operacyjnego używają rejestru w sposób neutralny dla języka.

Interfejs MUI używa tylko przekierowanych ciągów rejestru zdefiniowanych przez zasoby Win32 PE w podstawowym pliku zasobów języka. Przekierowanie jest definiowane oddzielnie, na przykład w pliku inf. Ten typ magazynu umożliwia modułowi ładującego zasoby automatyczne wybieranie odpowiednich zasobów językowych podczas ładowania modułu zasobów.

Notatka

Ten temat dotyczy tylko zasobów Win32 PE. W przypadku korzystania z zasobów innych niż Win32 PE, w razie potrzeby należy podać dostosowane przekierowanie ciągów rejestru.

 

Tworzenie zasobu Language-Neutral

Aplikacja MUI działająca w systemie Windows Vista i nowszych używa zasobu ciągu neutralnego dla języka, aby umożliwić dostęp do ciągów specyficznych dla języka przechowywanych w tabeli zasobów ciągu. Kod aplikacji, który odczytuje te wartości z rejestru, jest opisany w sekcji Wczytaj wartość rejestru Language-Neutral Lokalizowanie przekierowanych ciągów.

Dane dla wartości rejestru neutralnego dla języka mają format "@<PE-path>,-<stringID>[;<comment>]", gdzie:

  • PE-path określa ścieżkę pliku wykonywalnego. Ścieżkę można określić przy użyciu zmiennej środowiskowej, takiej jak %ProgramFiles%, w celu obsługi wdrożenia. Alternatywą dla tworzenia odwołania do ciągu jest pominięcie informacji o ścieżce pliku. W takim przypadku aplikacja musi mieć pewne środki, na przykład inną wartość rejestru, aby komunikować się z własnym katalogem instalacyjnym.
  • stringID Określa numeryczny identyfikator odpowiedniego zasobu ciągu znaków, który jest implementowany tak samo jak każdy inny lokalizowalny zasób ciągu znaków.
  • comment Określa opcjonalne informacje dotyczące debugowania lub czytelności wartości rejestru. Funkcje interfejsu API rejestru ignorują komentarz podczas ładowania ciągu.

Notatka

Dane wartości rejestru nie odwołują się jawnie do pliku zasobów specyficznego dla języka. Prawidłowy plik jest określany w czasie wykonywania na podstawie bieżących preferencji języka interfejsu użytkownika.

 

Wartość rejestru jest wprowadzana bez spacji między znakiem "", a "-". Prawidłowa wartość rejestru to:

shell32.dll,-22912

Nieprawidłowa wartość rejestru to:

shell32.dll, -22912

Przykładem systemu Windows Vista jest wartość rejestru z następującymi danymi:

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

Tworzenie zasobów dla skrótów klawiszowych

Gdy aplikacja MUI wyświetla swoją nazwę w interfejsie użytkownika shell, wyświetlany jest ciąg komunikatu informacyjnego dla ikony aplikacji. Powinieneś utworzyć zasoby ciągów dla nazwy wyświetlanej aplikacji i skojarzonego ciągu podpowiedzi dla każdego obsługiwanego języka. Gdy zasoby są gotowe, aplikacja może używać ciągów zgodnie z opisem w sekcji Użycie API do ładowania ciągów skrótów z rejestru w Znajdowanie przekierowanych ciągów.

Przygotowywanie zasobów dla skrótu utworzonego za pomocą Instalatora Windows

Jeśli używasz Instalatora Windows (MSI) do utworzenia skrótu, zasoby ciągów zawierają nazwę wyświetlaną skrótu i opis. W tabeli skrótów MSI biblioteka DLL zasobu jest przywoływana w odpowiednich kolumnach, a identyfikatory zasobów dla nazwy wyświetlanej i opisu skrótu są używane w odpowiednich kolumnach identyfikatora zasobu.

Aby skrót aplikacji działał prawidłowo z technologią zasobów MUI, należy pamiętać o następujących kwestiach podczas przygotowywania ciągów skrótów:

  • Możesz użyć zmiennych środowiskowych lub ścieżki względnej, aby zarejestrować bibliotekę DLL. Można określić @%systemroot%\system32\shell32.dll, pod warunkiem, że typ ciągu rejestru jest REG_EXPAND_SZ. Identyfikator zasobu ciągu "Dokument tekstowy" w Shell32.dll to 12345.
  • Nie używaj spacji wokół symboli "," i "-". Prawidłowym przykładem jest "shell32.dll,-22912".
  • Nie używaj krótkiej nazwy pliku. Ten typ nazwy nie działa z ładowarką zasobów.

Przygotowywanie zasobów do skrótu przy użyciu formatu INF

Jeśli używasz formatu pliku INF do tworzenia ciągów skrótów, plik zasobu powinien wprowadzić następujące ustawienia rejestru. W tych instrukcjach przyjęto założenie, że jest używana składnia ProfileItems interfejsu API instalacji.

  1. Zmień wartość etykietki informacji, aby wskazywała odwołanie przekierowania ciągu przy użyciu ścieżki i identyfikatora zasobu.
  2. Dodaj nową wartość DisplayResource w sekcjach instalacji ProfileItems.

Poniżej przedstawiono przykład dodawania aplikacji Calculator do menu 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

Użyj poniższej składni podczas dodawania elementów przy użyciu narzędzia INF, na przykład folderu grupy dostępu, do menu Start. Ta składnia zakłada użycie funkcjonalności [StartMenuItems] z Setup, podobnie jak składnia używana w pliku Syssetup.inf.

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

Ustaw wartość etykietki informacji na odwołanie do ciągu "@<path>,-resID".

Nazwa wyświetlana jest określana przez wartości resDLL i resID. Wartość resID określa identyfikator zasobu ciągu skojarzonego z plikiem neutralnym dla języka. Wartość resDLL określa ścieżkę do pliku neutralnego dla języka.

Tworzenie zasobów dla przyjaznych nazw typów dokumentów

Musisz zaimplementować przyjazne nazwy i ciągi opisów informacji dla aplikacji w zasobach tekstowych. Aby przyjazne nazwy typów dokumentów mogły reagować na język interfejsu użytkownika, aplikacja musi zarejestrować te nazwy, korzystając z wartości FriendlyTypeName w kluczu identyfikatora programu dla danego typu pliku. Wartość domyślna klucza identyfikatora programu powinna być zachowywana w celu zachowania zgodności z poprzednimi wersjami. Aby uzyskać informacje na temat uzyskiwania dostępu do nazw z aplikacji, zobacz Nazwy typów dokumentów przyjaznych dla zapytań w sekcji Rejestr lokalizowanie przekierowanych ciągów.

Konkretna praca obejmuje następujące kroki:

  1. Zaimplementuj przyjazną nazwę i ciągi podpowiedzi jako zasoby ciągów zależne od języka.
  2. Dodaj wartość o nazwie FriendlyTypeName pod klucz rejestru typu dokumentu. Dane wartości pasują do wzorca "@<path>,-<resID>", gdzie ścieżka wskazuje plik wykonywalny, a resID jest identyfikatorem lokalizowalnego zasobu ciągu powiązanego z tym plikiem wykonywalnym.
  3. Określ wartość rejestru InfoTip zgodnie z formatem "@<path>,-<resID>".

W poniższym przykładzie przedstawiono ustawienia rejestru dla pliku .txt:

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

HKCR\txtfile
@="Text Document"

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

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

Zapewnienie zasobów dla ShellVerb ciągów akcji

Ciągi akcji dla niektórych czasowników, na przykład "open" i "edit", są wyświetlane w menu podręcznym wyświetlanym, gdy użytkownik kliknie prawym przyciskiem myszy plik w Eksploratorze Windows. Aplikacja nie musi określać ciągów dla typowych shell czasowników, ponieważ shell ma własne domyślne ustawienia interfejsu MUI dla tych czasowników. Należy jednak podać zasoby ciągów lokalizowalnych dla ciągów reprezentujących nietypowe czasowniki.

W systemach operacyjnych starszych niż Windows XP ciągi dla shell czasowników w rejestrze są renderowane przy użyciu następującej składni, gdzie verb określa rzeczywistą verb nazwę.

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

Oto przykład:

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

W systemie Windows XP lub nowszym można użyć poziomu pośredniego, aby ciąg akcji był zależny od języka interfejsu użytkownika. Te systemy operacyjne obsługują wartość MUIVerb dla definicji ciągu zgodnego z MUI. Oto przykład wpisu rejestru dla nietypowego elementu verb.

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

Aplikacja MUI powinna również mieć możliwość zarejestrowania starej wartości domyślnej jako ciągu lokalizowalnego, jak pokazano poniżej:

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

Notatka

Rejestracja starej wartości domyślnej nie jest zalecana, ponieważ wymaga innej konfiguracji w systemie Windows XP i nowszej niż konfiguracja używana we wcześniejszych systemach operacyjnych.

 

Tworzenie zasobów dla ciągów Verb, Protocol oraz AuxUserType.

Należy utworzyć lokalizowalne zasoby ciągów dla Verb, Protocol i AuxUserType. Użyj następujących ustawień rejestru:

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

Wartość określona tylko dla właściwości LocalizedString zawiera lub zastępuje wartość Your Verbparametru , a nie dwie wartości flagi.

Oto podsumowanie, które ułatwia zapewnienie poprawnych ustawień rejestru:

  • Jeśli identyfikator CLSID ma klucz HKCR\CLSID\{clsid}\Insertable, zdefiniuj domyślną wartość CLSID przy użyciu HKCR\CLSID\{clsid}\LocalizedString.
  • Jeśli CLSID ma co najmniej jeden podklucz w HKCR\CLSID\{clsid}\Verb, zdefiniuj każdy pojedynczy Verb ciąg za pomocą HKCR\CLSID\{clsid}\Verb\xxx\LocalizedString.
  • Jeśli clSID ma co najmniej jeden podklucz w folderze HKCR\{progid}\Protocol\Stdfileediting\Verb, zdefiniuj każdy pojedynczy Verb ciąg przy użyciu HKCR\{progid}\Protocol\Stdfileediting\Verb\\xxx\LocalizedString.
  • Jeśli CLSID ma co najmniej jeden podklucz AuxUserType w obszarze HKCR\CLSID\{clsid}\AuxUserType, zdefiniuj każdy wpis AuxUserType przy użyciu HKCR\CLSID\{clsid}\AuxUserType\xxx\LocalizedString.

Tworzenie zasobu dla programu odinstalowywania

Aby zarejestrować program dezinstalacji dla aplikacji, możesz utworzyć wartości rejestru w unikatowym podkluczu identyfikatora dla aplikacji wewnątrz klucza rejestru HKEY\_LOCAL\_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall. Wartości do ustawienia obejmują: DisplayName, DisplayVersion, Publisher, ProductID, RegOwner, RegCompany, UrlInfoAbout, HelpTelephone, HelpLink, InstallLocation, InstallSource, InstallDate, Contact, CommentsDisplayIcon, Readme, UrlUpdateInfo.

Notatka

Aby włączyć technologię MUI dla każdej wartości, możesz dołączyć wartość "_Localized" do nazwy wartości.

 

Składniki systemu operacyjnego muszą zapewnić wartość dla DisplayName_Localized w sposób specyficzny dla MUI. Należy umieścić nazwę wyświetlaną w pliku DLL, np. Res.dll, jako zasób tekstowy, przyjmując, że identyfikator to 1245. Następnie aplikacja może zarejestrować nazwę wyświetlaną jako DisplayName_Localized o wartości "@\res.DLL,-1245". Wszystkie inne ustawienia rejestru powinny być zachowywane tak, jak są, w tym oryginalną wartość displayName.

Tworzenie zasobów dla zdarzeń dźwiękowych

System Windows kojarzy niektóre zdarzenia z plikami dźwiękowymi, na przykład zdarzenie Powiadomienia o nowej wiadomości e-mail lub zdarzenie krytycznego alarmu baterii. Nazwy zdarzeń muszą być wyświetlane przez interfejs użytkownika i muszą obsługiwać globalizację. W związku z tym należy zaimplementować zlokalizowany zasób ciągu, aby uzyskać opis każdego opisu zdarzenia. Dodaj nową wartość rejestru dla każdej nazwy zdarzenia oprócz zakodowanej wartości domyślnej.

Wykonaj następujące czynności, aby włączyć zdarzenie dźwiękowe:

  1. Wdróż opis jako zlokalizowany zasób tekstowy.
  2. Dodaj nową wartość rejestru dla nazwy wyświetlanej oprócz zakodowanej wartości domyślnej. Skojarzony układ rejestru jest pokazany poniżej:
HKCR\AppEvents\EventLabels
<event_name>
    (Default) REG_SZ "<description>"
    DispFileName REG_EXPAND_SZ "@<path>,-<resID>"

shell Jeśli nie można odnaleźć lub pobrać wartości DispFileName, użyje domyślnego opisu.

Tworzenie zasobów dla ciągów układu klawiatury

Jeśli aplikacja implementuje układ klawiatury, wymaga lokalizowalnego zasobu ciągu dla nazwy układu na potrzeby wyświetlania ekranu, na przykład na listach układów klawiatury. Każdy układ klawiatury ma klucz rejestru w HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layouts.

Wśród wartości tego klucza są Layout Text, czytelna dla człowieka nazwa zgodności z poprzednimi wersjami i Layout Display Name. Dane podane dla Layout Display Name powinny być referencją do ciągu w formacie @<path>,-resID, odnoszącą się do lokalizowalnego zasobu powiązanego z układem klawiatury.

Oto przykład ustawienia rejestru dla hiszpańskiego układu klawiatury:

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

Reprezentacja typowych ciągów dialogowych obiektu OLE Insert

Można zaimplementować nazwę wyświetlaną obiektu OLE do wstawienia jako lokalizowalny zasób ciągu skojarzony z kodem implementującym ten obiekt. Okno dialogowe Wstaw obiekt OLE pobiera nazwę wyświetlaną z klucza rejestru HKCR\CLSID\{<GUID>}, gdzie GUID identyfikuje klasę obiektu wstawianego OLE. System Windows Vista i później implementują ten typ obiektu w sposób lokalizowalny przy użyciu nazwy wyświetlanej zgodnej ze standardem MUI, która umożliwia dostosowanie języka interfejsu użytkownika. W przeciwieństwie do systemów operacyjnych przed Windows Vista, systemy te implementowały nazwę wyświetlaną tego typu obiektu przy użyciu wartości domyślnej odpowiedniego klucza rejestru. Zazwyczaj jest to nazwa angielska (Stany Zjednoczone) lub nazwa w domyślnym języku interfejsu użytkownika systemu.

Notatka

Nie wszystkie obiekty, które odpowiadają podkluczom klucza rejestru, można wstawić.

 

Wartość domyślna klucza HKCR\CLSID\{<identyfikatora GUID>} powinna zachować nazwę czytelną dla człowieka dla zgodności wstecznej. Należy jednak również zdefiniować wartość LocalizedString w formacie "@<path>,-ResID", gdzie ścieżka identyfikuje plik wykonywalny implementujący obiekt. Wartość ResID określa identyfikator zasobu ciągu lokalizowalnego dla nazwy wyświetlanej.

Na przykład skrypt rejestracji dla wstawionego obiektu Media Clip zawiera następujące wiersze:

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

Pierwszy wiersz zapewnia zgodność z poprzednimi wersjami, umieszczając w rejestrze prosty ciąg tekstowy jako domyślną nazwę wyświetlaną. Drugi wiersz zapewnia dostęp do nazwy wyświetlanej zgodnej ze standardem MUI. Wskazuje identyfikator ciągu przechowywany w Mplay32.exe. Ciąg o identyfikatorze 9217 w Mplay32.exe może być skojarzony z wartościami zasobów ciągu dla dowolnej liczby języków. Jego angielska (Stany Zjednoczone) nazwa to "Media Clip".

Tworzenie zasobów ciągów dla programu Microsoft Management Console Snap-Ins

Należy utworzyć zasób tekstowy możliwy do zlokalizowania dla każdej przystawki programu Microsoft Management Console (MMC) używanej przez aplikację MUI. Ponieważ przystawka jest częścią konsoli, ma interfejs użytkownika i musi być zglobalizowany do działania w więcej niż jednym języku.

W większości przypadków przystawki MMC zgłaszają te same problemy związane z globalizacją i lokalizacją, co aplikacja MUI. Przystawka MMC musi odzwierciedlać jego nazwę w rejestrze na potrzeby wyświetlania. Wpis rejestru powinien zawierać zarówno pośrednie odwołanie do zasobu lokalizowalnych ciągów, jak i dosłowny ciąg dla zgodności wstecznej.

Każda przystawka MMC ma klucz rejestru pod HKEY\_LOCAL\_MACHINE\\Software\\Microsoft\\MMC\\SnapIns. Wśród wartości dla tego klucza są NameString, określając nazwę czytelną dla człowieka z myślą o zgodności wstecznej, oraz NameStringIndirect, określając pośrednie odwołanie do lokalizowalnego zasobu tekstowego. W przypadku NameStringIndirect elementu należy podać odwołanie do ciągu w formie "@<path>,-resID", reprezentującego zasób ciągu lokalizowalnego.

Można na przykład ustawić następujące ustawienie dla Mymmc.dll, gdzie 12345 jest identyfikatorem odpowiedniego zasobu ciągu zawierającego zlokalizowaną nazwę przystawki:

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

Niektóre przystawki rejestrują inne wartości łańcucha w rejestrze, których MMC nie odczytuje z rejestru. Aby uzyskać więcej informacji na temat używania tych wartości, zobacz Rejestrowanie programu Microsoft Management Console Snap-In Ciągi nieczytane z rejestru w lokalizowania przekierowanych ciągów.

Tworzenie zasobów ciągów dla usługi systemu Windows

Mimo że usługa systemu Windows zwykle nie ma interfejsu użytkownika, musi wyświetlać nazwę zgodną ze standardem MUI i zwykle zawiera opis specyficzny dla języka zgodny ze standardem MUI. Klucz rejestru opisujący usługę systemu Windows obsługuje tylko DisplayName wartość nazwy usługi i Description wartość opisu usługi.

Ustawienia usługi systemu Windows są dokonywane z aplikacji, zgodnie z opisem w Ustawianie nazwy wyświetlanej i opisu dla usługi systemu Windows z rejestru w Lokalizowanie Przekierowanych Ciągów. Jeśli aplikacja nie ustawi wartości rejestru dla interfejsu użytkownika usługi, wartości w rejestrze pozostaną ustawione na English, nawet jeśli interfejs użytkownika jest w innym języku.

przygotowywanie zasobów

Zlokalizowanie przekierowanych ciągów