共用方式為


使用登錄字串重新導向

登錄中硬式編碼字串的 儲存體 是 Windows Vista 前當地語系化模型的一部分。 MUI 不支援它。 在目前的模型中,操作系統的使用者介面會以語言特定資源檔在語言中性基底上執行。 操作系統的元件會以語言中性的方式使用登錄。

MUI 只會使用基底語言資源檔中 Win32 PE 資源所定義的重新導向登錄字串。 重新導向是以個別方式定義,例如,在 .inf 檔案中。 這種類型的記憶體可讓資源載入器在資源模組載入期間自動選取正確的語言資源。

注意

本主題僅適用於 Win32 PE 資源。 如果使用非 Win32 PE 資源,則必須視需要提供自定義的登錄字串重新導向。

 

建立語言中性資源

在 Windows Vista 和更新版本上執行的 MUI 應用程式會使用語言中性字串資源,允許存取儲存在字串資源數據表中的特定語言字串。 從登錄讀取這些值的應用程式程式代碼,請參閱尋找重新導向字串載入語言中性登錄值一節中所述。

語言中性登錄值的數據格式為 “@<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 Installer 建立之快捷方式的資源

如果您使用 Windows Installer (MSI) 來建立快捷方式,字串資源會包含快捷方式顯示名稱和描述。 在 MSI 快捷方式數據表,資源 DLL 會在適當的數據行中參考,而快捷方式顯示名稱和描述的資源識別符則用於對應的資源識別碼數據行中。

讓應用程式快捷方式與 MUI 資源技術正常運作,在準備快捷鍵字串時,請記住下列幾點:

  • 使用環境變數或相對路徑來註冊 DLL。 只要登錄字串類型是REG_EXPAND_SZ,您就可以指定 @%systemroot%\system32\shell32.dll。 Shell32.dll 中 「Text Document」 的字串資源標識碼為 12345。
  • 請勿在 “,” 和 “-” 符號周圍使用空格。 正確的範例是 “shell32.dll,-22912”。
  • 請勿使用簡短檔名。 這種類型的名稱不適用於資源載入器。

使用 INF 格式準備快捷方式的資源

如果您使用 INF 檔案格式來建立快捷方式字串,資源文件應該進行下列登錄設定。 這些指示假設使用安裝程式 API 的 ProfileItems 語法。

  1. 使用路徑和資源識別碼,將 InfoTip 值變更為指向字串重新導向參考。
  2. 在 ProfileItems 安裝區段底下新增 DisplayResource 值。

下列範例顯示將計算機應用程式新增至 [開始 ] 選單:

[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

顯示名稱取決於 resDLLresID 值。 resID 值會指定與語言中性檔案相關聯之字串資源的資源標識碼。 resDLL 值會指定語言中性檔案的路徑。

建立易記檔類型名稱的資源

您必須將應用程式的易記名稱和 InfoTip 字串實作為字串資源。 若要允許易記檔類型名稱回應使用者介面語言,應用程式必須使用檔類型之程式標識元索引鍵下的FriendlyTypeName值來註冊名稱。 應保留程式識別碼密鑰的預設值,以保持回溯相容性。 如需從應用程式存取名稱的相關信息,請參閱尋找重新導向字串之登錄一節中的查詢易記檔類型名稱。

特定工作牽涉到下列步驟:

  1. 實作易記名稱和 InfoTip 字串做為語言特定的字串資源。
  2. 在文件類型登錄機碼下新增FriendlyTypeName值。 值的數據會遵循模式 “@<path>,-<resID>”,其中 path 表示可執行檔, resID 是與該可執行文件相關聯的可當地語系化字串資源的資源標識碼。
  3. 根據 「格式@<path>,-<resID>指定 InfoTip 登錄值」。

下列範例顯示 .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 操作系統前,登錄中殼層動詞動詞的字串會使用下列語法來轉譯,其中 verb 會指定實際的動詞名稱:

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 和更新版本與舊版作業系統上所使用的安裝程式不同的設定。

 

建立動詞、通訊協定和 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 指定的值只包含或取代 Your Verb 的值,而不是兩個旗標值。

以下是可協助您確保正確登錄設定的摘要:

  • 如果 CLSID 有 HKCR\CLSID\{clsid}\Insertable 索引鍵,請使用 HKCR\CLSID\{clsid}\LocalizedString 定義預設 CLSID 值。
  • 如果 CLSID 在 HKCR\CLSID\{clsid}\Verb 下有一個或多個子機碼,請使用 HKCR\CLSID\{clsid}\Verb\xxx\LocalizedString 定義每個個別的 Verb 字符串。
  • 如果 CLSID 在 HKCR\{progid}\Protocol\Stdfileediting\Verb 下有一或多個子機碼,請使用 HKCR\{progid}\Protocol\Stdfileediting\Verb\xxx\LocalizedString 定義每個個別的 Verb 字符串。
  • 如果 CLSID 在 HKCR\CLSID\{clsid}\AuxUserType 下有一或多個列出的 AuxUserType 子機碼,請使用 HKCR\CLSID\{clsid}\AuxUserType\xxx\LocalizedString 來定義每個 AuxUserType 專案。

建立卸載程序的資源

若要註冊應用程式的卸載程式,您可以在登錄機碼HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall 下,為應用程式建立唯一標識符子機碼中的登錄值。 要設定的值包括:DisplayName、DisplayVersion、Publisher、ProductID、RegOwner、RegCompany、UrlInfoAbout、HelpTelephone、HelpLink、InstallLocation、InstallSource、InstallDate、Contact、Comments、DisplayIcon、Readme、UrlUpdateInfo。

注意

若要啟用每個值的 MUI 技術,您可以將 「_Localized」 附加至值名稱。

 

需要操作系統元件,才能以 MUI 特定方式為DisplayName_Localized提供值。 您應該將顯示名稱放在 DLL 中,例如 Res.dll 作為字串資源,假設標識元為 1245。 然後,應用程式可以使用值 “@\res.DLL,-1245” 將顯示名稱註冊為 DisplayName_Localized。 所有其他登錄設定都應該保留,包括 DisplayName 的原始值。

建立音效事件的資源

Windows 會將特定事件與聲音檔案產生關聯,例如 New Mail Notification 事件或重大電池警示事件。 事件名稱必須由使用者介面顯示,而且必須支援全球化。 因此,您應該針對每個事件描述的描述實作可本地化的字串資源。 新增每個事件名稱的新登錄值,以及硬式編碼的預設值。

執行下列動作以啟用音效事件:

  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 前操作系統會使用對應登錄機碼的預設值,實作這種類型的對象的顯示名稱。 此名稱通常是英文 (美國) 名稱或系統預設 UI 語言中的名稱。

注意

並非所有對應至登錄機碼子機碼的物件都可以插入。

 

HKCR\CLSID\{<GUID>} 機碼的預設值應保留人類可讀取的名稱,以提供回溯兼容性。 不過,它也應該以 「@<path>,-ResID格式定義 LocalizedString 值,其中 path 會識別實作 物件的可執行檔。 ResID 值會指定顯示名稱可當地語系化字串的資源識別碼。

例如,可插入 Media Clip 物件的註冊腳本包含下列幾行:

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

第一行會將簡單的文字字串放在登錄中做為預設顯示名稱,以提供回溯相容性。 第二行提供 MUI 相容顯示名稱的存取權。 指出儲存在 Mplay32.exe 中的字串標識碼。 Mplay32.exe 中標識符為 9217 的字串可以與任意數目語言的字串資源值相關聯。 其英文 (美國) 名稱為 「Media Clip」。

建立 Microsoft Management Console 嵌入式管理單元的字串資源

您應該為 MUI 應用程式所使用的每個 Microsoft Management Console (MMC) 嵌入式管理單元建立可本地化的字串資源。 因為嵌入式管理單元是控制台的一部分,所以它有使用者介面,而且必須全球化才能以一種以上的語言運作。

在大多數情況下,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 不會從登錄讀取的其他登錄字串值。 如需使用這些值的詳細資訊,請參閱在尋找重新導向字串中 ,從登錄註冊 Microsoft Management Console 嵌入式管理單元字串

建立 Windows 服務的字串資源

雖然 Windows 服務通常幾乎沒有或沒有使用者介面,但它必須顯示符合 MUI 規範的名稱,而且通常提供符合 MUI 規範的語言特定描述。 描述 Windows 服務的登錄機碼僅支援服務名稱的 DisplayName 值,以及服務描述的描述值。

Windows 服務的 設定 是從應用程式建立,如從登錄設定 Windows 服務的顯示名稱和描述中所述尋找重新導向的字串。 如果您的應用程式未設定服務使用者介面的登錄值,則即使使用者介面是其他語言,登錄中的值仍會設定為英文。

準備資源

尋找重新導向的字串