INF檔案必須至少有一個 字串區段 ,才能定義該INF中其他地方指定的 %每個 strkey% 標記。
[Strings] |
[Strings.LanguageID] ...
strkey1 = ["]some string["]
strkey2 = " string-with-leading-or-trailing-whitespace " |
"very-long-multiline-string" |
"string-with-semicolon" |
"string-ending-in-backslash" |
""double-quoted-string-value""
...
Entries
strkey1, strkey2, ...
INF檔案中的每個字串鍵必須指定一個由字母、數字及/或其他明顯可見字元組成的獨特名稱。 此類 strkey 標記中的 % 字元必須表示為 %%。
某種繩子 | 「某種線」
指定一個字串,可選擇使用雙引號字元(“),內含字母、數字、標點符號,甚至某些隱含可見的字元,特別是內部空白和/或制表字元。 然而,未引號字串不得包含內部雙引號(“)、分號(;)、換行、返回或任何隱形控制字元,且其末尾字元不得有反斜線()。
「「雙引號字串值」
若 %strkey% 標記的值符合以下任一條件, 必須 以雙引號(「)包圍:
若指定字串有前置或後置空白必須保留為其值的一部分,則該字串必須以雙引號字元包覆,以防止其前置及/或後方空格被 INF 解析器捨棄。
如果長字串因文字編輯器的換行而包含任何內部換行或回傳字元,也應以雙引號包圍,以防止在初始內部換行或回傳字元時截斷字串。
若此類字串包含分號,必須用雙引號包圍,以防止字串在分號處截斷。 (如同 INF 檔案一般語法規則中所述,INF 檔案中每個註解的分號字元皆為開頭。)
若字串以反斜線結尾,必須用雙引號包圍,以防止與下一個條目串接。 (如同 INF 檔案通用語法規則中所述,反斜線字元()作為 INF 檔案中的行續符。)
與未引號字串規範類似,此類「引號字串」內部不可包含雙引號字元。 然而,可以透過使用一對或多對雙引號字元(例如「某個字串」)來明確指定為雙引號字串值。
INF解析器不僅會捨棄本節中任何「引號字串」的最外側雙引號對,還會將後續的每對連續雙引號濃縮成一個雙引號字元。
例如,「某字串」在解析時也會變成「某字串」。
總結來說,任何字串都必須被雙引號字符(“)包圍,且若以下任一條件成立:
- 字串包含前置或後置的空白。
- 繩子長到會纏繞線。
- 字串包含分號或尾斜線字元。
- 字串本身是引號字串。
系統 INF 解析器會捨棄最外側的雙引號字元,以及雙引號字串分隔符外的任何前置或後方空白字元。
Remarks
由於系統 INF 解析器會從定義 %strkey% 標記的「引號字串」中移除最外側的雙引號對,許多系統 INF 檔案會將 %所有 strkey% 標記定義為「引號字串」,以避免在 INF 解析過程中意外遺失前置與後置空白。 使用 「引號字串」也確保了特別長且跨行的字串值無法被截斷,且帶有尾部反斜線的字串無法串接到INF檔案的下一行。
要建立單一的國際 INF 檔案,INF 可以包含一組特定於當地的 字串。LanguageID 區段,如正式語法陳述中所示。 LanguageID 擴充檔名是一個 4 位數的十六進位值(不含前置「0x」),定義如下:
- 下方 10 位元包含主要語言 ID,接下來 6 位元則為子語言 ID,依據 Winnt.h 定義的 MAKELANGID 巨集所規定。
- 語言與子語言 ID 必須與 Winnt.h 中 Win32 LANG_XXX 與 SUBLANG_XXX 常數的系統定義值相符。
例如, LanguageID 值為 0407 代表一個主要語言 ID 為 LANG_GERMAN (07),其子語言 ID 為 SUBLANG_GERMAN (01),如下範例所示:
[Strings] ; No language ID implies English
DiskName="My Excellent Software"
LocaleSubDir="English"
[Strings.0407] ; 0407 is the language ID for German
DiskName="Meine ausgezeichnete Software"
LocaleSubDir="German"
INF檔案只能包含一個字串區段,以及一個字串。每個 LanguageID 值的 LanguageID 區段。
Windows 會選擇一個單一的字串區段,用來翻譯安裝過程中所有 strkey %% token。 根據特定電腦目前的所在地,Windows 會以以下方式選擇字串區塊:
Windows 首先會尋找 . INF中的LanguageID值與電腦目前所分配的地點相符。 如果找到完全吻合的字串,Windows 就會使用該字串。語言識別INF區段用來翻譯INF內定義的所有strkey標記 %%。
你確實需要在所有字串間重複所有字串的標記。*切面,甚至是不需要局部化的數值或固定常數。
否則,Windows會尋找與LANG_XXX值相符的SUBLANG_NEUTRAL值,該值為SUBLANG_XXX。 若找到此類匹配,Windows 會利用該 INF 區段將 INF 內定義 %的所有 strkey% 標記轉換。
否則,Windows會尋找與 LANG_XXX 值的匹配,以及同一 LANG_XXX 家族中任何有效的 SUBLANG_XXX。 如果找到這樣的部分匹配,就使用該 字串。語言識別 INF區段用來翻譯INF中定義的所有 strkey 標記 %%。
否則,Windows 會使用未裝飾的字串部分來翻譯 INF 內定義的 strkey% 代幣 %。
依慣例,且為方便為國際市場建立 INF 檔案集, 字串 區段是所有系統 INF 檔案的最後一個。 使用 %strkey% 標記來處理 INF 內所有使用者可見字串值,並將其置於每個區域的 字串 區段中,簡化了這些字串的轉譯。 欲了解更多關於特定地區的 INF 檔案資訊,請參閱 建立國際 INF 檔案。
雖然字串區段是每個 INF 檔案的最後幾個區段,但任何在字串區段中定義的 %strkey% 標記,都可以在 INF 的其他地方反覆使用,特別是在需要該標記轉換值的地方。 SetupAPI 函式會將每個 %strkey% 的 strkey 標記展開到指定的字串,然後利用該擴展值進行進一步的 INF 處理。
在 INF 檔案中使用 %strkey% tokens 並不限於使用者可見的字串值。 只要每個標記在 字串 區段內定義,這些標記都可以以 INF 撰寫者方便的方式使用。 例如,當你撰寫一個需要指定多個 GUID 的 INF 檔案時,為每個 GUID 建立一個 %strkey% token,並用有意義的名稱替換每個 GUID 值,可能會很方便。
在 INF 檔案的字串區段指定一組 %strkey% = “{GUID}” 值,只需要輸入每個明確的 GUID 值一次。 這有助於提供比在 INF 檔案中明確使用明確 GUID 值更易讀的內部 INF 文件。
%所有 strkey% 標記必須在引用它們的 INF 檔案中定義。 因此,對於任何包含 Include 和 Needs 條目的 INF 檔案,包含的 INF 必須有自己的 字串 區段,以定義該 INF 中 %引用的所有 strkey% 標記。
在 INF 字串區塊中,替換字串(含終止的 NULL 字元)最大長度為 4096(Windows Vista 及後續版本 Windows)及 512(Windows Server 2003、Windows XP 及 Windows 2000)。 字串替換後,INF 檔案字串的最大長度(字元數)為 4096,包含一個終端的 NULL 字元。
Examples
以下範例展示了系統提供的區域特定 dvd.inf 中,為英語國家/地區安裝的字串段落。
[Strings]
Msft="Microsoft"
MfgToshiba="Toshiba"
Tosh404.DeviceDesc="Toshiba DVD decoder card"
; ...
以下範例展示了字串串接。
[OEM Windows System Component Verification]
OID = 1.3.6.1.4.1.311.10.3.7 ; WHQL OEM OID
Notice = "%A% %B% %C% %D% %E%"
[Strings]
A = "This certificate is used to sign untested drivers that have not passed the Windows Hardware Quality Labs (WHQL) testing process."
B = "This certificate and drivers signed with this certificate are intended for use in test environments only, and are not intended for use in any other context."
C = "Vendors who distribute this certificate or drivers signed with this certificate outside a test environment may be in violation of their driver signing agreement."
D = "Vendors who have their drivers signed with this certificate do so at their own risk."
E = "In particular, Microsoft assumes no liability for any damages that may result from the distribution of this certificate or drivers signed with this certificate outside the test environment described in a vendor's driver signing agreement."