專利名稱:操作系統(tǒng)的多語(yǔ)言用戶接口的制作方法
本申請(qǐng)是發(fā)明人Edward S.Miller,Bjorn C.Rettig,GregoryWilson,和Shan Xu于1998年8月14日提交的標(biāo)題為"一個(gè)操作系統(tǒng)的多語(yǔ)言用戶接口"的美國(guó)專利申請(qǐng)09/134,559號(hào)的附加部分。
本發(fā)明涉及操作系統(tǒng),更具體的是涉及為切換用戶接口語(yǔ)言提供一個(gè)有效機(jī)制的操作系統(tǒng)。
資源是二進(jìn)制數(shù)據(jù)或非二進(jìn)制數(shù)據(jù),例如一個(gè)文本文件。在Windows NT和所有其它窗口系列的O/S中,資源是二進(jìn)制數(shù)據(jù)。資源數(shù)據(jù)可以駐留在一個(gè)應(yīng)用的可執(zhí)行文件內(nèi),因而可執(zhí)行文件是其中含有代碼和資源數(shù)據(jù)的二進(jìn)制文件。代碼所定義的進(jìn)程可以使用其自己的二進(jìn)制可執(zhí)行文件或其它可執(zhí)行文件中的資源。這種進(jìn)程使用的資源也可以駐留在諸如純資源動(dòng)態(tài)鏈接庫(kù)(DLL)的純資源文件中。資源可以是標(biāo)準(zhǔn)的,也可以是用戶定義的。一個(gè)標(biāo)準(zhǔn)資源中的數(shù)據(jù)描述了一個(gè)圖標(biāo),光標(biāo),菜單,對(duì)話框,位圖,增強(qiáng)元文件,字體,快捷鍵列表,消息表項(xiàng),字符串表項(xiàng),或版本。用戶定義資源包含具體應(yīng)用所需的任何數(shù)據(jù)。通過(guò)各種不同的方式處理操作系統(tǒng)進(jìn)程所需的資源。許多這樣的資源包含特定于語(yǔ)言的字詞,符號(hào),格式化數(shù)據(jù),等等。通常,根據(jù)用戶選擇的操作系統(tǒng)安裝程序包確定具體的語(yǔ)言。如果軟件的語(yǔ)言是英語(yǔ),則操作系統(tǒng)只會(huì)安裝英語(yǔ)專用的資源。由于可以把大量語(yǔ)言專用資源復(fù)制到硬盤或其它非易失存儲(chǔ)器上以覆蓋所有語(yǔ)言,所以這種處理是方便的。
由于允許根據(jù)需要有效地向存儲(chǔ)器加載和卸載資源,所以提供單一語(yǔ)言以供操作系統(tǒng)支持的方式也是方便的??偸怯蟹浅6嗟馁Y源需要駐留在存儲(chǔ)器中。為了管理資源的加載和卸載以便在不需要時(shí)資源不會(huì)不必要地占用存儲(chǔ)器,產(chǎn)生需要資源的進(jìn)程和專用于過(guò)程的資源的代碼可以被并入相同的二進(jìn)制文件。當(dāng)一個(gè)過(guò)程被調(diào)用時(shí),一個(gè)包含進(jìn)程代碼和附帶資源的二進(jìn)制文件可以被載入存儲(chǔ)器或者可以被進(jìn)程訪問(wèn)。當(dāng)進(jìn)程終止時(shí),這種文件的資源和代碼部分被從存儲(chǔ)器卸載出來(lái)或者不可被訪問(wèn)。這些二進(jìn)制文件可以是可執(zhí)行程序,動(dòng)態(tài)鏈接庫(kù)(DLL),設(shè)備驅(qū)動(dòng)程序,等等。如果包括所有可選的語(yǔ)言資源,則會(huì)需要過(guò)量的存儲(chǔ)器。
一個(gè)有關(guān)操作系統(tǒng)如何處理這種資源的例子如下所述。首先,一個(gè)資源搜索程序,即一個(gè)操作系統(tǒng)函數(shù)被用來(lái)產(chǎn)生一個(gè)指向指定資源的信息塊的句柄。一個(gè)需要資源的進(jìn)程向搜索程序發(fā)送一個(gè)資源模塊句柄和資源名稱,類型或語(yǔ)言ID。后者指定資源由資源模塊句柄定義的語(yǔ)言專用資源。搜索程序返回一個(gè)指向指定資源的信息塊的句柄并且進(jìn)程可以調(diào)用一個(gè)資源加載程序把資源放到存儲(chǔ)器中。進(jìn)程向資源加載程序提供資源句柄和資源模塊句柄,而資源加載程序?qū)①Y源放入存儲(chǔ)器并且返回一個(gè)指向包含資源的存儲(chǔ)器塊的句柄。于是進(jìn)程可以使用資源。在向存儲(chǔ)器載入資源的進(jìn)程不再需要該資源,即該進(jìn)程被終止之后,或者在其它情況需要時(shí),操作系統(tǒng)可以使用其它設(shè)備釋放存儲(chǔ)器。
前面描述的只是一個(gè)示例性操作系統(tǒng)中的一種資源訪問(wèn)功能。其它機(jī)制可以通過(guò)其它方式使資源可被訪問(wèn),例如將文本消息放在一個(gè)輸出緩沖區(qū)中,通過(guò)一個(gè)單獨(dú)的函數(shù)調(diào)用立即加載資源數(shù)據(jù)并且返回一個(gè)指向資源數(shù)據(jù)的句柄,等等。這些機(jī)制的共同特性是它們?cè)诖鎯?chǔ)器、磁盤文件或其它存儲(chǔ)系統(tǒng)中搜尋資源并且使資源可被需要該資源的進(jìn)程訪問(wèn)。這會(huì)導(dǎo)致從磁盤向存儲(chǔ)器加載文件或僅僅通過(guò)提供句柄或某些其它設(shè)備來(lái)提供對(duì)資源的訪問(wèn)。包含資源的文件(設(shè)備或通道)可以和定義請(qǐng)求進(jìn)程的代碼位于相同文件內(nèi),也可以位于另一個(gè)文件中。而其它文件可以包含代碼,也可以是一個(gè)純資源文件。進(jìn)程不必明確地卸載其不再需要的資源。
由于磁盤存儲(chǔ)方式的低成本,在某些情況下會(huì)期望一個(gè)操作系統(tǒng)的相同安裝以對(duì)用戶透明的方式提供若干種語(yǔ)言的適當(dāng)資源。然而如下所述,對(duì)于一個(gè)圍繞上述資源管理體系而建立的操作系統(tǒng),可用于修改操作系統(tǒng)以適應(yīng)可選語(yǔ)言的選項(xiàng)似乎有較大的問(wèn)題。
為了提供多語(yǔ)言支持,一個(gè)選項(xiàng)可能必須為各個(gè)語(yǔ)言提供一組不同的二進(jìn)制文件??紤]到可能有大約一千個(gè)包含一個(gè)復(fù)雜操作系統(tǒng)中語(yǔ)言專用資源的二進(jìn)制文件并且可能期望支持許多不同的語(yǔ)言,要安裝的二進(jìn)制文件數(shù)量實(shí)際上會(huì)非常大。除了為用戶提供語(yǔ)言選擇所需的工作量之外,由于針對(duì)各個(gè)要支持的語(yǔ)言會(huì)復(fù)制所有的非語(yǔ)言專用資源,所產(chǎn)生的大量文件中的冗余也會(huì)非常地多。不但非語(yǔ)言專用資源會(huì)需要復(fù)制,復(fù)制所有代碼部分也需要復(fù)制。
另一個(gè)選項(xiàng)可以是每當(dāng)需要不同語(yǔ)言的新用戶登錄時(shí)重新安裝操作系統(tǒng)二進(jìn)制文件。由于會(huì)占用大量時(shí)間,這個(gè)選項(xiàng)是不期望的。
另一個(gè)選項(xiàng)可以是在各個(gè)二進(jìn)制文件中提供不同的語(yǔ)言專用資源。由于各個(gè)二進(jìn)制文件會(huì)只增加語(yǔ)言專用資源,這個(gè)選項(xiàng)可以消除第一個(gè)選項(xiàng)的冗余。然而這個(gè)選項(xiàng)會(huì)需要對(duì)各個(gè)二進(jìn)制文件進(jìn)行重新編碼,所以也不是一個(gè)上佳的選項(xiàng)。目前是以非常有限的方式完成與此類似的處理。某些二進(jìn)制文件包含任選的資源,其中根據(jù)用戶的語(yǔ)言或國(guó)家各個(gè)資源均是最優(yōu)的。這些二進(jìn)制文件的代碼部分定義了根據(jù)對(duì)資源的最優(yōu)語(yǔ)言的"猜測(cè)"訪問(wèn)不同資源的進(jìn)程。根據(jù)某些系統(tǒng)參數(shù)設(shè)置,例如所選擇的日期格式作出這種猜測(cè)。所以,如果選擇俄國(guó)風(fēng)格的日期格式,則可以加載被標(biāo)記成俄國(guó)的資源。
至少有一種目前以有限方式提供語(yǔ)言選擇的操作系統(tǒng)。這個(gè)操作系統(tǒng)為各個(gè)語(yǔ)言提供單獨(dú)的文本文件。當(dāng)一個(gè)進(jìn)程需要某個(gè)具體語(yǔ)言的文本文件資源時(shí),操作系統(tǒng)訪問(wèn)適當(dāng)?shù)奈募S脩艨梢酝ㄟ^(guò)一個(gè)系統(tǒng)變量選擇其缺省語(yǔ)言選擇。
如上所述,至少一個(gè)當(dāng)前的操作系統(tǒng)(Windows)為建立語(yǔ)言專用庫(kù)提供了某些支持,例如文本消息。一個(gè)系統(tǒng)變量被定義成指示操作系統(tǒng)安裝的地區(qū)(注意,一個(gè)系統(tǒng)的地區(qū)不是一種語(yǔ)言設(shè)置。地區(qū)是語(yǔ)言和位置的綜合),并且這個(gè)變量可以被操作系統(tǒng)上運(yùn)行的應(yīng)用用來(lái)格式化當(dāng)前語(yǔ)言專用的消息。然而這需要上述進(jìn)程(應(yīng)用)精確識(shí)別適當(dāng)?shù)恼Z(yǔ)言資源及其位置。作為一種轉(zhuǎn)換模型,其中需要承擔(dān)大范圍的重新編碼工作。
現(xiàn)有技術(shù)的操作系統(tǒng)體系還沒(méi)有哪個(gè)提供了建議操作系統(tǒng)以非常自動(dòng)化的方式提供多語(yǔ)言支持的手段。并且,也沒(méi)有哪個(gè)提出了通過(guò)在相同文件中存儲(chǔ)代碼和資源部分從而保留二進(jìn)制文件固有的節(jié)省空間特性的方法。前面建議的提供期望功能的簡(jiǎn)單變換顯然成本過(guò)高并且/或者所需的冗余數(shù)據(jù)容量過(guò)大。任何易于實(shí)現(xiàn)的轉(zhuǎn)換無(wú)疑將是一種與任何現(xiàn)有技術(shù)的系統(tǒng)顯著不同的系統(tǒng)。
參照
圖1,在一個(gè)現(xiàn)有技術(shù)操作系統(tǒng)的一個(gè)公共操作中,加載一個(gè)二進(jìn)制文件20。二進(jìn)制文件20包含一個(gè)代碼部分10和一個(gè)資源部分30并且可以是操作系統(tǒng)的任何文件單元或由第三方提供的一個(gè)文件單元。例如,二進(jìn)制文件20可以是一個(gè)可執(zhí)行二進(jìn)制文件,一個(gè)動(dòng)態(tài)鏈接庫(kù)(DLL),或一個(gè)設(shè)備驅(qū)動(dòng)程序。資源部分30可以包含代碼部分使用的某些資源,特別是代碼部分10產(chǎn)生的進(jìn)程專門需要并且在代碼部分10定義的進(jìn)程不再需要時(shí)可以從存儲(chǔ)器卸載的那些資源。換言之,資源30是那些會(huì)被編碼在代碼部分10中的進(jìn)程需要的資源,并且一旦那些進(jìn)程被終止,則不再需要維護(hù)存儲(chǔ)器中資源部分30包含的資源。例如,二進(jìn)制文件10可以是一個(gè)核心資源或一個(gè)和操作系統(tǒng)一起提供的,諸如外掛文本編輯器的應(yīng)用。例如對(duì)于編輯器,當(dāng)用戶終止編輯器程序時(shí),但不再需要這個(gè)文本編輯器所需的資源。包含代碼10和資源30的二進(jìn)制文件20會(huì)被從存儲(chǔ)器中清除掉。當(dāng)然,代碼部分10可以使用其它文件的其它資源并且也可以使用其它進(jìn)程。
參照?qǐng)D2,資源85和使用該資源的代碼55也可以位于不同的文件25和22中。例如,在一個(gè)代碼片段50中定義的一個(gè)應(yīng)用55訪問(wèn)的資源85可以被包含在一個(gè)純資源DLL或一個(gè)包含代碼70和資源60的獨(dú)立文件25中。應(yīng)用55可以駐留在一個(gè)也包含資源40的文件中。另一個(gè)操作系統(tǒng)設(shè)備可以被用來(lái)根據(jù)資源類型和名稱搜尋文件。對(duì)資源的管理(加載和卸載)可以由資源加載程序來(lái)完成。
參照?qǐng)D3,一個(gè)進(jìn)程110使用一個(gè)資源加載程序130和一個(gè)資源搜索程序135訪問(wèn)資源。資源加載程序是一個(gè)提供對(duì)資源數(shù)據(jù)125的訪問(wèn)的操作系統(tǒng)設(shè)備,其中資源數(shù)據(jù)125被指定了一個(gè)資源模塊句柄和資源句柄。由資源搜索程序產(chǎn)生指示可以在哪里搜尋到根據(jù)資源名稱指定的資源數(shù)據(jù)的資源模塊句柄。資源名稱,類型和一個(gè)語(yǔ)言(后者是可選的)被提供給資源搜索程序135,而資源搜索程序135返回一個(gè)資源模塊句柄。如果資源位于一個(gè)不是產(chǎn)生調(diào)用進(jìn)程的模塊中,則該模塊的句柄必須被提供給資源搜索程序。資源類型可以指定一個(gè)位圖,活動(dòng)光標(biāo),字體資源,菜單資源,字符串表項(xiàng)等等。
資源加載程序把指定資源加載到存儲(chǔ)器中。其中需要一個(gè)資源模塊句柄和資源句柄。資源模塊句柄是其可執(zhí)行文件包含上述資源的模塊。資源句柄標(biāo)識(shí)要加載的資源。資源加載程序130返回一個(gè)指向包含與該資源相關(guān)的數(shù)據(jù)的存儲(chǔ)器塊的句柄。圖3中示出的情況與圖1或圖2中示出的情況是一致的。注意,在涉及Windows APIFindResource和LoadResource的文檔中定義了上述函數(shù)的例子。還應(yīng)當(dāng)注意的是,可以在一個(gè)預(yù)操作以及如上所述的資源調(diào)用的部分操作中加載資源。例如,在Windows操作系統(tǒng)中,一次對(duì)LoadLibrary的調(diào)用可以導(dǎo)致把一個(gè)模塊加載到存儲(chǔ)器中。
參照?qǐng)D4,其中示出了一個(gè)可以在操作系統(tǒng)中訪問(wèn)資源的通用模式。一個(gè)進(jìn)程210使用一個(gè)資源處理程序230獲得對(duì)一個(gè)資源數(shù)據(jù)220的訪問(wèn)。資源處理程序230可以由若干個(gè)如參照?qǐng)D3所討論的,由操作系統(tǒng)提供的不同設(shè)備構(gòu)成。進(jìn)程通過(guò)文件名稱,模塊250的標(biāo)識(shí)符或某些其它信息向處理程序230標(biāo)識(shí)出所請(qǐng)求的資源并且可以告訴處理程序在哪里能夠找到資源。資源處理程序230可能需要將可能被包含在一個(gè)模塊250中的資源220加載到存儲(chǔ)器中,或者需要某些其它使進(jìn)程210能夠訪問(wèn)可訪問(wèn)數(shù)據(jù)240的裝置。進(jìn)程210被提供一個(gè)句柄,地址,指針等等以便訪問(wèn)資源220。圖4所描述的進(jìn)程的重要特性是進(jìn)程標(biāo)識(shí)所需的資源而操作系統(tǒng)為進(jìn)程提供對(duì)該資源的訪問(wèn)。資源可以駐留在一個(gè)磁盤上,該磁盤位于另一個(gè)計(jì)算機(jī)網(wǎng)絡(luò)連接的上并且通過(guò)一個(gè)通信端口或任何其他向一個(gè)計(jì)算機(jī)上的進(jìn)程傳送數(shù)據(jù)的機(jī)制來(lái)提供。作為請(qǐng)求的一部分,操作系統(tǒng)可以在進(jìn)程能夠訪問(wèn)資源之前向一個(gè)不同介質(zhì)傳送資源,例如從磁盤向存儲(chǔ)器傳送。
一個(gè)操作系統(tǒng)方案提供了資源處理部件,上述部件提供了在不需要從請(qǐng)求資源的進(jìn)程得到任何專門指示的情況下處理多個(gè)語(yǔ)言資源的功能。這允許操作系統(tǒng)在使用現(xiàn)有資源和可執(zhí)行二進(jìn)制文件的同時(shí)以不修改這些構(gòu)成的方式提供多語(yǔ)言支持。即,允許一個(gè)用戶選擇一種用戶接口語(yǔ)言并且資源加載程序會(huì)自動(dòng)將資源調(diào)用重定向到適當(dāng)?shù)馁Y源上。
注意,在后面的所有描述中,向存儲(chǔ)器加載數(shù)據(jù)的概念不能按字面被解釋成實(shí)際從一個(gè)文件取出數(shù)據(jù)并且把它放到存儲(chǔ)器中。在本發(fā)明所考慮的操作系統(tǒng)環(huán)境中,通過(guò)低層操作系統(tǒng)函數(shù)完成對(duì)物理存儲(chǔ)器的實(shí)際數(shù)據(jù)加載。各個(gè)進(jìn)程可以具有一個(gè)不與實(shí)際物理存儲(chǔ)器一致的虛擬存儲(chǔ)器空間。在下面的討論中,當(dāng)談及對(duì)存儲(chǔ)器加載和卸載數(shù)據(jù)的步驟時(shí),其用意是為了將上述步驟廣義地解釋成使數(shù)據(jù)可被進(jìn)程訪問(wèn)的任何操作系統(tǒng)函數(shù)。
從請(qǐng)求資源的角度看,與操作系統(tǒng)設(shè)備的交互同處理單個(gè)語(yǔ)言的資源的交互是相同的。搜尋資源并且將其返回到一個(gè)請(qǐng)求進(jìn)程的操作系統(tǒng)資源處理部件被加以修改以便動(dòng)態(tài)產(chǎn)生一個(gè)到達(dá)某個(gè)可選語(yǔ)言資源模塊的路徑??梢愿鶕?jù)一個(gè)資源標(biāo)識(shí)符和一個(gè)由請(qǐng)求資源的進(jìn)程提供的可選模塊句柄來(lái)產(chǎn)生路徑,并且也可以根據(jù)一個(gè)指定用戶接口的選擇語(yǔ)言的,在全系統(tǒng)使用的用戶設(shè)置來(lái)產(chǎn)生路徑。使用到可選語(yǔ)言資源的路徑取代進(jìn)程提供的模塊句柄。
通過(guò)動(dòng)態(tài)產(chǎn)生模塊句柄,可以在不對(duì)任何固定設(shè)施進(jìn)行修改的情況下擴(kuò)充操作系統(tǒng)以便將基本模塊句柄(被調(diào)用進(jìn)程使用的句柄)與可選語(yǔ)言資源模塊關(guān)聯(lián)起來(lái)。由于動(dòng)態(tài)產(chǎn)生查找表,因而查找表是為了節(jié)約步驟而自動(dòng)產(chǎn)生的并且從不會(huì)過(guò)期。當(dāng)新模塊被加到操作系統(tǒng)中時(shí),在沒(méi)有任何中央數(shù)據(jù)內(nèi)務(wù)處理的情況下可以增加模塊并且可以使用算法產(chǎn)生可選模塊句柄。只要新模塊名稱和現(xiàn)有模塊名稱之間沒(méi)有沖突,就可以在不進(jìn)行任何集中改變的情況下把模塊和任何使用該模塊的代碼或任何包含代碼和資源的二進(jìn)制文件添加到操作系統(tǒng)中。
系統(tǒng)根據(jù)需要自動(dòng)加載和釋放可選語(yǔ)言模塊,并且這種操作對(duì)用戶和請(qǐng)求資源的進(jìn)程是透明的??蛇x語(yǔ)言資源駐留在各個(gè)模塊(在最優(yōu)實(shí)現(xiàn)中,如Windows用語(yǔ)所定義的動(dòng)態(tài)鏈接庫(kù)或DLL)中,每個(gè)模塊均由一個(gè)路徑和模塊名稱唯一指定如下<模塊_路徑>\mui\<語(yǔ)言_ID>\<模塊_名稱>
換言之,操作系統(tǒng)從初始模塊的加載路徑的一個(gè)語(yǔ)言專用子目錄加載一個(gè)可選語(yǔ)言資源模塊。通過(guò)將相同名稱用作調(diào)用進(jìn)程提供的初始模塊名稱來(lái)動(dòng)態(tài)產(chǎn)生路徑和模塊名稱。元素<語(yǔ)言_ID>可以是某些表示語(yǔ)言的緊湊代碼。例如,可以是ISO 639語(yǔ)言標(biāo)準(zhǔn)縮寫(xiě)加上一個(gè)子語(yǔ)言代號(hào)或包含主要和輔助部分的Win32語(yǔ)言標(biāo)識(shí)。
可以根據(jù)變化的特征度來(lái)請(qǐng)求可選語(yǔ)言。即,可以請(qǐng)求具有某個(gè)特征級(jí)別的(法國(guó))法語(yǔ),端士法語(yǔ)或加拿大法語(yǔ),或者僅僅請(qǐng)求具有某個(gè)低特征級(jí)別的法語(yǔ)。為了保證產(chǎn)生一個(gè)可選語(yǔ)言資源模塊句柄的進(jìn)程的健壯性,算法可以使用多個(gè)步驟以便能夠使一個(gè)具有某特征度的用戶接口語(yǔ)言的系統(tǒng)級(jí)請(qǐng)求與被提供了另一個(gè)特征度的可選語(yǔ)言資源的可用度相一致。例如,假定用戶在登錄到操作系統(tǒng)時(shí)請(qǐng)求端士法語(yǔ)。這規(guī)定一個(gè)用戶變量,該變量要求所有能夠遵守要求的進(jìn)程均應(yīng)當(dāng)使用端士法語(yǔ)資源。產(chǎn)生可選語(yǔ)言資源的資源加載程序(或庫(kù)加載程序)算法應(yīng)當(dāng)能夠處理只有一個(gè)與所請(qǐng)求的語(yǔ)言近似的語(yǔ)言可用的情況。在上述例子中假定只有法語(yǔ)和各種其它可選正統(tǒng)語(yǔ)言可用并且沒(méi)有確切符合端士法語(yǔ)的語(yǔ)言。期望該算法根據(jù)一個(gè)請(qǐng)求加載法語(yǔ)可選語(yǔ)言資源,而不是作出某些其它不與系統(tǒng)用戶語(yǔ)言ID提出的系統(tǒng)級(jí)要求接近的缺省選擇。因而,可以象下面那樣為算法定義多個(gè)近似級(jí)別。
首先,算法可以確定在"<模塊_路徑>\"指定的模塊路徑中是否存在一個(gè)具有等價(jià)于當(dāng)前用戶語(yǔ)言ID的標(biāo)識(shí)符,即具有名稱"\mui\<語(yǔ)言_ID>\"的子目錄。如果這個(gè)第一測(cè)試失敗,則算法可以確定是否存在一個(gè)"<模塊_路徑>\"的子目錄,其中該子目錄具有一個(gè)和對(duì)應(yīng)于當(dāng)前用戶語(yǔ)言ID的正統(tǒng)語(yǔ)言ID等價(jià)的標(biāo)識(shí)符,即具有名稱"\mui\<正統(tǒng)_語(yǔ)言_ID>\"。如果沒(méi)有指定系統(tǒng)用戶語(yǔ)言ID,則算法可以使用一個(gè)代理解析一個(gè)子目錄,例如使用某些諸如涉及日期或貨幣格式約定的選項(xiàng),提示用戶的位置的參數(shù)選擇??蛇x地,可以調(diào)用一個(gè)中間語(yǔ)言可選資源模塊。其它可以被分配任何期望的優(yōu)先權(quán)的步驟可以從一個(gè)缺省的可選語(yǔ)言資源子目錄中選擇一個(gè)替代語(yǔ)言,其中用戶語(yǔ)言ID規(guī)定的語(yǔ)言不可用但有一個(gè)在類似地區(qū)平行使用的替代語(yǔ)言。例如,如果在用戶語(yǔ)言ID中請(qǐng)求了加拿大法語(yǔ)并且加拿大法語(yǔ)和法語(yǔ)均不可用,但加拿大英語(yǔ)可用,因而可以使用后者。上述根據(jù)一個(gè)優(yōu)先權(quán)系統(tǒng)選擇最優(yōu)可選資源的過(guò)程允許增加可選語(yǔ)言資源的特征度。如果操作系統(tǒng)只配置了唯一的正統(tǒng)語(yǔ)言(例如,英語(yǔ),但沒(méi)有英國(guó)英語(yǔ),加拿大英語(yǔ)等等。),則用戶可以在后面增加更多的特定語(yǔ)言并且以透明和自動(dòng)的方式實(shí)現(xiàn)用戶的選擇。
為了提高處理速度,在一個(gè)查找表中保存通過(guò)動(dòng)態(tài)產(chǎn)生各個(gè)可選模塊路徑而獲得的映射。當(dāng)一個(gè)調(diào)用進(jìn)程調(diào)用相同資源時(shí),可以通過(guò)搜索查找表而不是動(dòng)態(tài)產(chǎn)生路徑和句柄的方式獲得可選資源模塊。注意,通過(guò)保存動(dòng)態(tài)產(chǎn)生一個(gè)可選資源模塊ID的結(jié)果,每當(dāng)請(qǐng)求一個(gè)資源時(shí)不必重復(fù)上述健壯算法的步驟。
另外,產(chǎn)生一個(gè)清除表以便產(chǎn)生經(jīng)過(guò)修改的資源加載程序根據(jù)系統(tǒng)需求加載和釋放存儲(chǔ)器。清除表列出了被加載的可選資源模塊和請(qǐng)求它們的進(jìn)程。例如,當(dāng)請(qǐng)求一個(gè)資源的進(jìn)程被終止時(shí),可以從存儲(chǔ)器卸載被終止進(jìn)程所請(qǐng)求的資源模塊。
在一個(gè)可選實(shí)施例中,通過(guò)一個(gè)單獨(dú)目錄內(nèi)的不同文件名而不是通過(guò)將不同語(yǔ)言的資源模塊放入不同的目錄來(lái)區(qū)分可選語(yǔ)言資源模塊。更具體地說(shuō),不同的擴(kuò)展名被加到文件名中以指示資源模塊的語(yǔ)言。
注意,操作系統(tǒng)通過(guò)在一個(gè)加載程序數(shù)據(jù)列表中產(chǎn)生條目來(lái)跟蹤被加載和卸載的資源。加載程序數(shù)據(jù)列表指示需要加載資源模塊的進(jìn)程以便在進(jìn)程終止或存在其它系統(tǒng)需求時(shí)可以卸載這些模塊。對(duì)于被例如Windows NT中直接使用LoadLibraryEx函數(shù)的應(yīng)用加載的模塊,上述資源加載程序可能不"知道"模塊的身份。即,沒(méi)有產(chǎn)生加載程序數(shù)據(jù)表項(xiàng)。在這種情況下,加載資源模塊的程序(例如LoadLibrary)可以查詢一個(gè)可選語(yǔ)言資源是否存在并且加載該語(yǔ)言資源以取代應(yīng)用請(qǐng)求的模塊。如果應(yīng)用或進(jìn)程使用一個(gè)產(chǎn)生加載程序數(shù)據(jù)表項(xiàng)的操作系統(tǒng)程序,則肯定不會(huì)加載模塊,直到應(yīng)用或其它進(jìn)程對(duì)資源加載程序發(fā)出一個(gè)資源請(qǐng)求。
根據(jù)一個(gè)實(shí)施例,本發(fā)明是一個(gè)由操作系統(tǒng)執(zhí)行的方法。該方法重定向一個(gè)調(diào)用進(jìn)程對(duì)駐留在一個(gè)第一二進(jìn)制文件中的第一數(shù)據(jù)的調(diào)用。其中執(zhí)行下列步驟在一個(gè)獨(dú)立于調(diào)用進(jìn)程的操作用戶設(shè)置中存儲(chǔ)一個(gè)語(yǔ)言標(biāo)識(shí)符;當(dāng)存在一個(gè)對(duì)應(yīng)于該語(yǔ)言標(biāo)識(shí)符并且也對(duì)應(yīng)于第一數(shù)據(jù)或第一二進(jìn)制文件的一個(gè)標(biāo)識(shí)符的第二二進(jìn)制文件時(shí)(1)根據(jù)語(yǔ)言標(biāo)識(shí)符以及第一數(shù)據(jù)或第一二進(jìn)制文件動(dòng)態(tài)產(chǎn)生一個(gè)到第二二進(jìn)制文件的路徑;(2)在一個(gè)將某個(gè)標(biāo)識(shí)第一二進(jìn)制文件的處理模塊標(biāo)識(shí)符與一個(gè)標(biāo)識(shí)第二二進(jìn)制文件的可選模塊標(biāo)識(shí)符關(guān)聯(lián)起來(lái)的查找表中存儲(chǔ)該路徑;和(3)使第二二進(jìn)制文件中的一個(gè)可選數(shù)據(jù)而不是第一數(shù)據(jù)可被調(diào)用進(jìn)程訪問(wèn)。
根據(jù)另一個(gè)實(shí)施例,本發(fā)明也是一個(gè)由操作系統(tǒng)執(zhí)行的方法。該方法重定向一個(gè)調(diào)用進(jìn)程對(duì)駐留在一個(gè)包含定義調(diào)用進(jìn)程的可執(zhí)行代碼和資源數(shù)據(jù)的第一二進(jìn)制文件中的第一資源數(shù)據(jù)的調(diào)用。在代碼中定義調(diào)用進(jìn)程。該方法具有下列步驟在一個(gè)獨(dú)立于調(diào)用進(jìn)程的變量中存儲(chǔ)一個(gè)語(yǔ)言標(biāo)識(shí)符;當(dāng)存在一個(gè)對(duì)應(yīng)于該語(yǔ)言標(biāo)識(shí)符并且也對(duì)應(yīng)于第一資源數(shù)據(jù)或第一二進(jìn)制文件的第二二進(jìn)制文件時(shí)(1)根據(jù)語(yǔ)言標(biāo)識(shí)符以及第一資源數(shù)據(jù)或第一二進(jìn)制文件動(dòng)態(tài)產(chǎn)生一個(gè)到第二二進(jìn)制文件的路徑;(2)使第二二進(jìn)制文件中的一個(gè)可選資源數(shù)據(jù)而不是第一資源數(shù)據(jù)可被調(diào)用進(jìn)程訪問(wèn)。
根據(jù)另一個(gè)實(shí)施例,本發(fā)明是一個(gè)向具有訪問(wèn)可執(zhí)行二進(jìn)制文件中第一資源數(shù)據(jù)的功能的操作系統(tǒng)增加多語(yǔ)言能力的方法。該方法包含下列步驟增加一個(gè)可選用戶設(shè)置以便存儲(chǔ)一個(gè)選擇語(yǔ)言標(biāo)識(shí)符;增加至少一個(gè)包含資源數(shù)據(jù)的可選語(yǔ)言資源文件,其中各個(gè)資源數(shù)據(jù)分別對(duì)應(yīng)于第一資源數(shù)據(jù)中的相應(yīng)一個(gè)數(shù)據(jù);和修改一個(gè)資源加載程序以便根據(jù)選擇語(yǔ)言標(biāo)識(shí)符中存儲(chǔ)的一個(gè)選定語(yǔ)言把針對(duì)各個(gè)第一資源數(shù)據(jù)的調(diào)用重定向到可選語(yǔ)言資源數(shù)據(jù)中的一個(gè)對(duì)應(yīng)數(shù)據(jù)上。
根據(jù)一個(gè)實(shí)施例,本發(fā)明是一個(gè)由操作系統(tǒng)執(zhí)行的方法。該方法根據(jù)一個(gè)調(diào)用進(jìn)程對(duì)一個(gè)第一數(shù)據(jù)的調(diào)用訪問(wèn)數(shù)據(jù)。該方法具有下列步驟確定是否存在一個(gè)對(duì)應(yīng)于第一數(shù)據(jù)的可選語(yǔ)言文件;當(dāng)確定步驟的結(jié)果表明可選語(yǔ)言文件存在時(shí),從可選語(yǔ)言文件向調(diào)用進(jìn)程返回至少一個(gè)數(shù)據(jù);當(dāng)確定步驟的結(jié)果表明可選語(yǔ)言文件不存在時(shí),向調(diào)用進(jìn)程返回第一數(shù)據(jù)。
根據(jù)一個(gè)實(shí)施例,本發(fā)明是一個(gè)由操作系統(tǒng)執(zhí)行的方法。該方法重定向一個(gè)調(diào)用進(jìn)程對(duì)駐留在一個(gè)第一二進(jìn)制文件中的第一數(shù)據(jù)的調(diào)用。其中執(zhí)行下列步驟在一個(gè)獨(dú)立于各個(gè)用戶的調(diào)用進(jìn)程的操作系統(tǒng)變量中存儲(chǔ)一個(gè)語(yǔ)言標(biāo)識(shí)符;根據(jù)對(duì)一個(gè)對(duì)應(yīng)于該語(yǔ)言標(biāo)識(shí)符并且也對(duì)應(yīng)于第一資源數(shù)據(jù)或第一二進(jìn)制文件的第二二進(jìn)制文件的檢測(cè)結(jié)果(1)根據(jù)語(yǔ)言標(biāo)識(shí)符以及第一數(shù)據(jù)或第一二進(jìn)制文件動(dòng)態(tài)產(chǎn)生一個(gè)到第二二進(jìn)制文件的路徑;(2)在一個(gè)將某個(gè)標(biāo)識(shí)第一二進(jìn)制文件的處理模塊標(biāo)識(shí)符與一個(gè)標(biāo)識(shí)第二二進(jìn)制文件的可選模塊標(biāo)識(shí)符關(guān)聯(lián)起來(lái)的查找表中存儲(chǔ)該路徑;和(3)使第二二進(jìn)制文件中的一個(gè)可選數(shù)據(jù)而不是第一數(shù)據(jù)可被調(diào)用進(jìn)程訪問(wèn)。
可選地,單個(gè)的模塊可以包含共享資源索引。每個(gè)這樣的索引均是一個(gè)指向一套或一組資源模塊的指針。從一個(gè)包含這種索引的模塊對(duì)資源的請(qǐng)求被重定向到由共享資源索引指向的索引模塊組上。在模塊組內(nèi),根據(jù)操作系統(tǒng)維護(hù)的當(dāng)前語(yǔ)言標(biāo)識(shí)符選擇一個(gè)具體的模塊。這允許多個(gè)模塊使用相同的資源模塊組并且減少了需要提供的分立資源模塊的數(shù)量。更具體地說(shuō),這允許所有系統(tǒng)資源被指定到一個(gè)單獨(dú)的資源模塊中并且被系統(tǒng)中所有其它模塊共享。這減少了資源開(kāi)銷并且允許操作系統(tǒng)更快速地加載資源。
圖1是有關(guān)一個(gè)二進(jìn)制文件的示意圖,該文件包含一個(gè)代碼部分,該代碼部分定義了一個(gè)進(jìn)程,而該進(jìn)程則調(diào)用相同二進(jìn)制文件的一個(gè)資源部分中的一個(gè)資源。
圖2是有關(guān)兩個(gè)二進(jìn)制文件的示意圖,其中一個(gè)二進(jìn)制文件包含代碼并且可以包含或不包含資源,而另一個(gè)二進(jìn)制文件包含資源并且可以包含或不包含代碼,而第一個(gè)文件的代碼定義了調(diào)用第二個(gè)文件中的資源的進(jìn)程。
圖3是有關(guān)被一個(gè)進(jìn)程用于檢索一個(gè)資源的,基于現(xiàn)有技術(shù)一個(gè)實(shí)施例的資源加載程序和資源搜索程序的示意圖。
圖4是有關(guān)一個(gè)計(jì)算機(jī)上的進(jìn)程檢索資源的過(guò)程的通用描述中的一個(gè)資源處理程序的示意圖。
圖5是有關(guān)一個(gè)調(diào)用資源數(shù)據(jù)的進(jìn)程的示意圖,其中該進(jìn)程通過(guò)一個(gè)如圖3所示的,經(jīng)過(guò)對(duì)現(xiàn)有技術(shù)過(guò)程加以修改而得到的操作系統(tǒng)調(diào)用上述資源數(shù)據(jù)。
圖6是示出一個(gè)基于本發(fā)明一個(gè)實(shí)施例的模塊組織結(jié)構(gòu)的模塊圖。
圖7是一個(gè)示出根據(jù)本發(fā)明一個(gè)實(shí)施例而執(zhí)行的步驟的流程圖。
參照?qǐng)D5,其中示出了一個(gè)調(diào)用資源數(shù)據(jù)的進(jìn)程,其中該進(jìn)程通過(guò)一個(gè)如圖3所示的,經(jīng)過(guò)對(duì)現(xiàn)有技術(shù)過(guò)程加以修改而得到的操作系統(tǒng)調(diào)用上述資源數(shù)據(jù)。修改參照?qǐng)D3描述的資源加載程序130和資源搜索程序135內(nèi)部的進(jìn)程以產(chǎn)生一個(gè)如圖5所示的進(jìn)程。在根本上,圖5的進(jìn)程將進(jìn)程對(duì)一個(gè)具體資源的調(diào)用重定向到一個(gè)可選語(yǔ)言資源上以便進(jìn)程接收到一個(gè)與選擇的用戶接口語(yǔ)言相關(guān)的資源而不是該進(jìn)程的缺省資源。在一個(gè)實(shí)施例中,只在進(jìn)程沒(méi)有指定其希望加載的語(yǔ)言的情況下才"放棄"加載可選資源。換言之,一個(gè)進(jìn)程嘗試加載資源并且實(shí)際上不關(guān)心其語(yǔ)言。在現(xiàn)有技術(shù)的系統(tǒng)中,資源加載程序會(huì)從模塊自身的資源部分或進(jìn)程指定從其加載資源的一個(gè)外部模塊返回資源。在有關(guān)一個(gè)多語(yǔ)言用戶接口系統(tǒng)的當(dāng)前實(shí)施例中,資源加載程序在進(jìn)程沒(méi)有為資源指定一個(gè)具體語(yǔ)言或其它具體分類的情況下會(huì)加載可選資源。正象圖3的現(xiàn)有技術(shù)實(shí)施例那樣,進(jìn)程從資源搜索程序320請(qǐng)求一個(gè)存儲(chǔ)器句柄。然而在這種情況下,如果有一個(gè)可用句柄,則該句柄是一個(gè)指向某個(gè)可選語(yǔ)言資源的句柄。資源搜索程序嘗試識(shí)別一個(gè)由選擇的用戶接口語(yǔ)言ID 335指示的資源。
選擇的用戶接口語(yǔ)言ID 335是一項(xiàng)用戶設(shè)置。用戶在登錄并且從一個(gè)選項(xiàng)列表中選擇一個(gè)語(yǔ)言時(shí)335建立上述選擇用戶接口語(yǔ)言ID335。接著選擇的用戶接口語(yǔ)言ID 335被存儲(chǔ)起來(lái)直到發(fā)生改變。
一個(gè)進(jìn)程310通過(guò)向一個(gè)資源搜索程序320發(fā)送一個(gè)資源名稱和類型請(qǐng)求一個(gè)資源的存儲(chǔ)器句柄。如果資源位于一個(gè)沒(méi)有定義調(diào)用進(jìn)程310的模塊中,則資源模塊句柄仍然會(huì)被發(fā)送到資源搜索程序320。如果沒(méi)有發(fā)送模塊句柄,則由于該模塊與一個(gè)產(chǎn)生請(qǐng)求資源的進(jìn)程的模塊相同,所以資源搜索程序已經(jīng)從一個(gè)加載程序數(shù)據(jù)列表得到對(duì)模塊句柄的訪問(wèn)。(正如在背景章節(jié)討論的,資源搜索程序和資源加載程序經(jīng)常被用來(lái)訪問(wèn)與產(chǎn)生請(qǐng)求進(jìn)程的代碼相同的二進(jìn)制文件中的資源)進(jìn)程也可以請(qǐng)求一個(gè)語(yǔ)言專用資源,而滿足這種請(qǐng)求的過(guò)程可以不在涉及本發(fā)明的步驟范圍內(nèi)并且可以通過(guò)現(xiàn)有技術(shù)方法來(lái)實(shí)現(xiàn)(參見(jiàn)http//www.microsoft.com/msdn/.中有關(guān)LoadResource的描述)。在后一種情況下,一個(gè)語(yǔ)言ID可以被傳遞到資源搜索程序。
修改操作系統(tǒng)以便維護(hù)一個(gè)可選資源模塊句柄列表323,此前已經(jīng)通過(guò)調(diào)用資源搜索程序320產(chǎn)生了該列表。因而如果另一個(gè)進(jìn)程已經(jīng)從相同模塊請(qǐng)求了一個(gè)資源并且該模塊已經(jīng)與一個(gè)可選資源模塊關(guān)聯(lián),則可以從可選資源模塊列表323中快速獲得可選模塊句柄。如果列表中沒(méi)有針對(duì)該資源的條目,則操作系統(tǒng)動(dòng)態(tài)產(chǎn)生一個(gè)可選模塊路徑。
為了動(dòng)態(tài)產(chǎn)生一個(gè)可選模塊路徑,使用一個(gè)算法325。算法325可以基于某些假定的資源文件組織結(jié)構(gòu),該組織結(jié)構(gòu)表明對(duì)于指定資源是否存在一個(gè)可選語(yǔ)言資源文件。在本實(shí)施例中,可選語(yǔ)言資源文件位于所請(qǐng)求的模塊的路徑的子目錄中,其中通過(guò)一個(gè)與某個(gè)語(yǔ)言標(biāo)識(shí)符唯一關(guān)聯(lián)的文件名區(qū)分各個(gè)子目錄。在各個(gè)語(yǔ)言的子目錄內(nèi)存儲(chǔ)了可選語(yǔ)言資源文件,其中每個(gè)文件均在初始模塊之后被加以命名。
<模塊_路徑>\mui\<語(yǔ)言_ID>\<模塊_名稱>
換言之,操作系統(tǒng)從初始模塊的加載路徑的一個(gè)語(yǔ)言專用子目錄加載一個(gè)可選語(yǔ)言資源模塊。對(duì)于一個(gè)不支持多語(yǔ)言的系統(tǒng),如果初始模塊是"<路徑1>\<文件名1>",則可選語(yǔ)言模塊的路徑會(huì)是"<路徑1>\mui\<語(yǔ)言_ID 1>\<文件名1>",其中假定選擇用戶接口語(yǔ)言ID335所指示的語(yǔ)言是"語(yǔ)言ID 1"。
可以通過(guò)各種可選方式實(shí)現(xiàn)可選語(yǔ)言資源的組織。將它們分成分別對(duì)應(yīng)于普通模塊(通常在一個(gè)單語(yǔ)言操作系統(tǒng)中請(qǐng)求的模塊)的語(yǔ)言專用模塊可以不需要任何附加的存儲(chǔ)器,就象對(duì)于各個(gè)資源模塊,各種語(yǔ)言的資源被合并成一個(gè)單獨(dú)的模塊那樣。
在指定被用來(lái)存儲(chǔ)模塊的路徑結(jié)構(gòu)的情況下,可以直接構(gòu)造一個(gè)對(duì)應(yīng)于由選擇用戶接口語(yǔ)言ID 335和初始使用的路徑與模塊名稱指示的任何語(yǔ)言的可選語(yǔ)言模塊的路徑。資源搜索程序320使用這個(gè)路徑提供一個(gè)資源句柄。以和現(xiàn)有技術(shù)相同的方式產(chǎn)生資源句柄。在這種情況下其差異在于資源句柄將進(jìn)程引向一個(gè)資源數(shù)據(jù)350,而上述資源數(shù)據(jù)被標(biāo)識(shí)在初始模塊路徑的一個(gè)子目錄中。在圖5中,資源數(shù)據(jù)350位于"二進(jìn)制文件2"的一個(gè)可選資源模塊內(nèi),其中選擇用戶接口語(yǔ)言ID是語(yǔ)言ID 2。
通過(guò)將相同名稱用作調(diào)用進(jìn)程提供的初始模塊名稱來(lái)動(dòng)態(tài)產(chǎn)生路徑和模塊名稱。元素<語(yǔ)言_ID>可以是某些表示語(yǔ)言的緊湊代碼。例如,可以是ISO 639語(yǔ)言標(biāo)準(zhǔn)縮寫(xiě)加上一個(gè)子語(yǔ)言代號(hào)或包含主要和輔助部分的Win32語(yǔ)言標(biāo)識(shí)。
在本發(fā)明的一個(gè)最優(yōu)實(shí)施例中,由于在假定所請(qǐng)求的數(shù)據(jù)有一個(gè)可選語(yǔ)言資源的情況下除簡(jiǎn)單地構(gòu)造一個(gè)路徑之外不做更多的事情,所以算法是健壯的??梢愿鶕?jù)變化的特征度來(lái)請(qǐng)求可選語(yǔ)言。并且,可能沒(méi)有可用的可選語(yǔ)言資源,或者有一個(gè)可用的可選資源,即在除了語(yǔ)言之外的某些其它方面與基本資源有所不同的資源。算法和相關(guān)過(guò)程的健壯程度足夠處理和利用這些情況以及如圖5所示的直接方案。
選擇的用戶接口語(yǔ)言可以是非常特定的。例如,一個(gè)用戶可以請(qǐng)求法國(guó),端士,或加拿大法語(yǔ)。算法可以使用多個(gè)步驟以便能夠使一個(gè)具有某特征度的用戶接口語(yǔ)言的系統(tǒng)級(jí)請(qǐng)求與被提供了另一個(gè)特征度的可選語(yǔ)言資源的可用度相一致。如果用戶在登錄到操作系統(tǒng)時(shí)請(qǐng)求法國(guó)法語(yǔ),則只有一種與請(qǐng)求語(yǔ)言近似的可用語(yǔ)言。為了處理這種情況,算法和相關(guān)過(guò)程可以根據(jù)下列內(nèi)置步驟層次進(jìn)行操作。
首先,算法可以確定在"<模塊_路徑>\mui\"指定的模塊路徑中是否存在一個(gè)具有等價(jià)于當(dāng)前用戶語(yǔ)言ID的標(biāo)識(shí)符,即具有名稱"\<語(yǔ)言_ID>\"的子目錄。如果這個(gè)第一測(cè)試失敗,則算法可以確定是否存在一個(gè)"<模塊_路徑>\mui\"的子目錄,其中該子目錄具有一個(gè)和對(duì)應(yīng)于當(dāng)前用戶語(yǔ)言ID的主要語(yǔ)言ID等價(jià)的標(biāo)識(shí)符,即具有名稱"\<主要_語(yǔ)言_ID>\"。如果沒(méi)有指定系統(tǒng)用戶語(yǔ)言ID,則算法可以使用一個(gè)代理解析一個(gè)子目錄,例如使用某些諸如涉及日期或貨幣格式約定的選項(xiàng),提示用戶的位置的參數(shù)選擇。可選地,可以調(diào)用一個(gè)中間語(yǔ)言可選資源模塊。其它可以被分配任何期望的優(yōu)先權(quán)的步驟可以從一個(gè)缺省的可選語(yǔ)言資源子目錄中選擇一個(gè)替代語(yǔ)言,其中用戶語(yǔ)言ID規(guī)定的語(yǔ)言不可用但有一個(gè)在類似地區(qū)經(jīng)常使用的預(yù)定替代語(yǔ)言,例如在用戶語(yǔ)言ID中請(qǐng)求加拿大法語(yǔ)而英語(yǔ)可用的情況下,上述預(yù)定代替語(yǔ)言即是英語(yǔ)。上述根據(jù)一個(gè)優(yōu)先權(quán)系統(tǒng)選擇最優(yōu)可選資源的過(guò)程允許增加可選語(yǔ)言資源的特征度。如果操作系統(tǒng)只配置了唯一的主要語(yǔ)言(例如,英語(yǔ),但沒(méi)有英國(guó)英語(yǔ),加拿大英語(yǔ)等等。),則用戶可以在后面增加更多的特定語(yǔ)言并且以透明和自動(dòng)的方式實(shí)現(xiàn)用戶的選擇。
注意,上述功能不會(huì)干擾針對(duì)某特定語(yǔ)言的資源的正常請(qǐng)求,例如通過(guò)Windows中的FindResourceEx函數(shù)發(fā)出的請(qǐng)求。如果請(qǐng)求進(jìn)程提供一個(gè)指定的語(yǔ)言ID,則上述可選語(yǔ)言資源方案不會(huì)把請(qǐng)求重定向到另一個(gè)資源模塊。
在構(gòu)成路徑的算法325已經(jīng)確定一個(gè)資源路徑之后,在使其可被請(qǐng)求進(jìn)程訪問(wèn)之前可以對(duì)所標(biāo)識(shí)的文件進(jìn)行版本檢查和任何其他的完整性檢查。作為參照?qǐng)D5描述的過(guò)程的結(jié)果,如果可選語(yǔ)言模塊370被重新放入存儲(chǔ)器或通過(guò)調(diào)用資源搜索程序320使其可被訪問(wèn),則一個(gè)新條目可以被放入可選資源模塊列表323中。最終可以向調(diào)用進(jìn)程返回一個(gè)句柄以便允許進(jìn)程訪問(wèn)請(qǐng)求的資源。后者可以產(chǎn)生一個(gè)步驟,該步驟使另一個(gè)函數(shù),即資源加載程序330向存儲(chǔ)器加載數(shù)據(jù)并且提供一個(gè)句柄以便進(jìn)程用來(lái)訪問(wèn)數(shù)據(jù)。
注意,雖然圖5和附帶的討論提出將模塊載入存儲(chǔ)器,但實(shí)際上可能不需要由資源搜索程序或資源加載程序完成這個(gè)操作。唯一的要求是適當(dāng)?shù)臄?shù)據(jù)可被進(jìn)程訪問(wèn)。操作系統(tǒng)可以通過(guò)其I/O和存儲(chǔ)器管理程序完成實(shí)際的數(shù)據(jù)移動(dòng)。前面針對(duì)圖5描述的內(nèi)容的重要性在于以透明的方式將一個(gè)針對(duì)不同語(yǔ)言有不同要求的進(jìn)程對(duì)某個(gè)資源的請(qǐng)求自動(dòng)重定向到發(fā)出請(qǐng)求的進(jìn)程。為了使操作系統(tǒng)支持多語(yǔ)言不需要修改定義進(jìn)程的代碼。圖5和附帶的討論描述了重定向針對(duì)資源環(huán)境中被并入也包含可執(zhí)行代碼的二進(jìn)制文件的數(shù)據(jù)的請(qǐng)求的過(guò)程??梢詳U(kuò)充相同的基本模式以便包含對(duì)純資源文件,例如DLL中的數(shù)據(jù)的訪問(wèn)。
注意,在上述討論中,雖然一個(gè)進(jìn)程需要將數(shù)據(jù)載入存儲(chǔ)器或從存儲(chǔ)器卸載數(shù)據(jù),但應(yīng)當(dāng)從被映射到進(jìn)程地址空間這種更廣泛的意義上觀察這種步驟。這是由于完成映射I/O的操作系統(tǒng)程序混淆了涉及從磁盤向存儲(chǔ)器加載數(shù)據(jù)的具體概念。換言之,由于操作系統(tǒng)的I/O系統(tǒng)和虛擬存儲(chǔ)器管理功能可以透明地完成這個(gè)具體步驟,在向存儲(chǔ)器加載數(shù)據(jù)的顯式步驟不必涉及的若干步驟之后,當(dāng)前的操作系統(tǒng)可以允許一個(gè)進(jìn)程訪問(wèn)磁盤上的數(shù)據(jù)。
上述過(guò)程可以將可選資源模塊當(dāng)作一個(gè)簡(jiǎn)單的數(shù)據(jù)文件映射到調(diào)用進(jìn)程的地址空間上。有關(guān)這個(gè)過(guò)程的詳細(xì)情況是現(xiàn)有技術(shù)已知的,例如在Windows中是通過(guò)定義一個(gè)被稱作LoadLibrary的操作系統(tǒng)函數(shù)的代碼來(lái)實(shí)現(xiàn)這種過(guò)程的。
如上所述,存在各種區(qū)別對(duì)應(yīng)于不同語(yǔ)言的資源文件的方式。例如,與使用文件系統(tǒng)路徑的方式不同,在某些情況下可以期望使用文件名稱本身。根據(jù)本發(fā)明的一個(gè)實(shí)施例,資源文件由兩個(gè)部分構(gòu)成一個(gè)初始部分和一個(gè)語(yǔ)言擴(kuò)展部分,其中初始部分與資源模塊所對(duì)應(yīng)的一個(gè)可執(zhí)行模塊相同,而語(yǔ)言擴(kuò)展部分指示資源模塊內(nèi)本地化資源的語(yǔ)言。
圖6圖解了資源模塊如何與基于本實(shí)施例的對(duì)應(yīng)可執(zhí)行模塊相關(guān)聯(lián)。作為背景介紹,許多模塊均是使用"C"或"C++"編程語(yǔ)言編寫(xiě)的。根據(jù)已被接受的各種實(shí)踐,通常在具有一個(gè)不同于被用來(lái)表示其它可執(zhí)行模塊的".c"擴(kuò)展名的".rc"擴(kuò)展名,被稱作"資源腳本文件"的單獨(dú)源文件中定義資源。通過(guò)一個(gè)資源編譯器(通常命名為"RC.EXE")編譯資源腳本文件,該編譯器產(chǎn)生一個(gè)".res"文件(一個(gè)具有".res"擴(kuò)展名的文件)。
資源模塊通常與正常的可執(zhí)行模塊成對(duì)出現(xiàn);可執(zhí)行模塊包含可執(zhí)行代碼,而資源模塊包含可執(zhí)行代碼使用的資源。在鏈接時(shí),資源文件被綁定到可執(zhí)行文件的末端,并且資源腳本文件中定義的所有資源均變成可執(zhí)行文件的一部分以便在執(zhí)行期間使用。如上所述,"FindResource"和"LoadResource"函數(shù)被一個(gè)可執(zhí)行模塊用來(lái)從可執(zhí)行模塊自身或另一個(gè)已標(biāo)識(shí)的可執(zhí)行模塊加載資源。當(dāng)調(diào)用"FindResource"函數(shù)時(shí),調(diào)用模塊標(biāo)識(shí)出其中定義了期望資源的可執(zhí)行模塊。
根據(jù)本發(fā)明的一個(gè)實(shí)施例,一個(gè)計(jì)算機(jī)系統(tǒng)包括多個(gè)可執(zhí)行模塊401,402,403,和404。為了進(jìn)行討論,這些可執(zhí)行模塊被命名為"myappl.dll","myapp2.dll","myapp3.dll",和"myapp4.dll"。另外,計(jì)算機(jī)系統(tǒng)包括對(duì)應(yīng)于多個(gè)語(yǔ)言的多個(gè)資源模塊411,412,413,414,415,和416。每個(gè)資源模塊均包含對(duì)應(yīng)語(yǔ)言的本地化資源。注意,除了不包含可執(zhí)行代碼之外,這些資源模塊實(shí)際上是僅僅定義了資源的正常可執(zhí)行模塊。還應(yīng)當(dāng)注意,可執(zhí)行模塊401-404可以包含資源定義(雖然在本發(fā)明的這個(gè)實(shí)施例中通常不會(huì)使用它們)。
資源模塊411-416被加以命名以構(gòu)成集合417,418,和419。一個(gè)指定集合中的所有資源模塊定義了實(shí)際上相同的資源,但一個(gè)集合中的各個(gè)模塊分別為其定義了具有不同語(yǔ)言的資源。一個(gè)指定集合中的所有資源模塊被命名成兩個(gè)部分。文件名的第一個(gè)部分是常規(guī)的"全部"文件名。這部分總文件名對(duì)于一個(gè)集合內(nèi)部的所有模塊而言均是相同的,從而表明各個(gè)模塊均是一個(gè)集合的一部分。后一部分文件名是一個(gè)擴(kuò)展名,該擴(kuò)展名包括一個(gè)語(yǔ)言代碼,其中語(yǔ)言代碼的后面是一個(gè)".mui"擴(kuò)展名。這部分文件名表明所包含的資源的語(yǔ)言。在圖6中,語(yǔ)言代碼包括一個(gè)描述性的語(yǔ)言文字代號(hào)。在實(shí)際的實(shí)施例中,語(yǔ)言代碼是一個(gè)指示某個(gè)具體語(yǔ)言的數(shù)字代碼。
根據(jù)本發(fā)明,一個(gè)針對(duì)操作系統(tǒng)的資源管理器的資源請(qǐng)求會(huì)標(biāo)識(shí)出一個(gè)諸如模塊401,402,403,或404的具體模塊。然而與使用該模塊中定義的資源不同的是,資源管理器會(huì)識(shí)別出一個(gè)對(duì)應(yīng)于在資源請(qǐng)求中標(biāo)識(shí)的模塊的資源模塊集合,并且從該集合的一個(gè)資源模塊提供資源。
圖6圖解了如何在一個(gè)可執(zhí)行模塊和一組資源模塊之間建立對(duì)應(yīng)關(guān)系??梢酝ㄟ^(guò)兩種方式建立對(duì)應(yīng)關(guān)系。第一種對(duì)應(yīng)關(guān)系如模塊401,402和對(duì)應(yīng)的資源模塊集合417,418所示。當(dāng)使用這類對(duì)應(yīng)時(shí),每個(gè)可執(zhí)行模塊均具有一個(gè)對(duì)應(yīng)的唯一資源模塊集合。在這種情況下,命名為"myapp1.dll"的可執(zhí)行模塊401具有一個(gè)對(duì)應(yīng)的資源模塊集合417,該集合依次包含分別被命名為"myapp1.dll.french.mui"和"myapp1.dll.english.mui"的資源模塊411和412。注意,資源模塊文件名的第一個(gè)第一與對(duì)應(yīng)可執(zhí)行模塊的文件名相同。這樣就將資源模塊411和412標(biāo)識(shí)成屬于一個(gè)對(duì)應(yīng)于可執(zhí)行模塊401的集合。
類似地,命名為"myapp2.dll"的可執(zhí)行模塊402具有一個(gè)對(duì)應(yīng)的資源模塊集合418,該集合依次包含分別被命名為"myapp2.dll.french.mui"和"myapp2.dll.english.mui"的資源模塊413和414。
當(dāng)一個(gè)應(yīng)用程序或可執(zhí)行模塊從資源管理器請(qǐng)求一個(gè)資源并且標(biāo)識(shí)出一個(gè)將從其獲得資源,諸如模塊401的具體可執(zhí)行模塊時(shí),操作系統(tǒng)資源處理程序首先識(shí)別一個(gè)與所標(biāo)識(shí)的可執(zhí)行模塊相關(guān)的資源模塊集合。通過(guò)記錄所標(biāo)識(shí)的諸如"myapp1.dll"的可執(zhí)行模塊的文件名可以實(shí)現(xiàn)這個(gè)操作。其文件名從這個(gè)字符串開(kāi)始的任何資源模塊均屬于與所標(biāo)識(shí)的可執(zhí)行模塊相關(guān)的資源模塊集合。在這種情況下,資源模塊411和412具有從"myapp1.dll"開(kāi)始的文件名,因而屬于對(duì)應(yīng)于所標(biāo)識(shí)的模塊401的期望資源模塊集合。
接著,資源處理程序根據(jù)一個(gè)以獨(dú)立于針對(duì)資源處理程序的請(qǐng)求的方式獲得的語(yǔ)言標(biāo)識(shí)符選擇資源模塊集合中的一個(gè)資源模塊。上述操作的實(shí)現(xiàn)方式是構(gòu)造一個(gè)從所標(biāo)識(shí)的模塊的文件名("myapp1.dll")開(kāi)始的資源模塊文件名,并且接著繼續(xù)通過(guò)對(duì)應(yīng)于當(dāng)前語(yǔ)言標(biāo)識(shí)符的語(yǔ)言代碼構(gòu)成一個(gè)后跟".mui"的擴(kuò)展名。這樣,如果當(dāng)前語(yǔ)言標(biāo)識(shí)符和對(duì)應(yīng)語(yǔ)言代碼是"法語(yǔ)",則資源處理程序構(gòu)造一個(gè)文件名"myapp1.dll.french.mui"。資源管理器接著從這個(gè)文件中檢索出所請(qǐng)求的資源并且將其提供給發(fā)出請(qǐng)求的應(yīng)用程序或可執(zhí)行模塊。
可執(zhí)行模塊和資源模塊之間的第二種對(duì)應(yīng)關(guān)系如可執(zhí)行模塊403,404和資源模塊集合419所示。根據(jù)本發(fā)明,某些可執(zhí)行模塊可以包含共享資源索引。每個(gè)共享資源索引均標(biāo)識(shí)一個(gè)對(duì)應(yīng)于不同語(yǔ)言的資源模塊集合。在所述的實(shí)施例中,共享資源索引指示一個(gè)文件名或文件標(biāo)識(shí)符的一部分。在圖6所示的例子中,可執(zhí)行模塊403和404均包含一個(gè)共享資源索引420。適當(dāng)?shù)馁Y源模塊集合由一個(gè)字符串標(biāo)識(shí),該字符串規(guī)定了一個(gè)資源文件的文件名的第一部分,例如本例子中的"shared.dll"。在這種情況下,不同可執(zhí)行模塊403和404包含相同的共享資源索引"shared.dll"。因而這兩個(gè)可執(zhí)行模塊均指向一個(gè)單獨(dú)的共享資源模塊集合419。
當(dāng)一個(gè)應(yīng)用程序或可執(zhí)行模塊從資源管理器請(qǐng)求一個(gè)資源并且標(biāo)識(shí)出一個(gè)將從其獲得資源,諸如可執(zhí)行模塊403或404的模塊時(shí),資源處理程序通過(guò)識(shí)別一個(gè)資源模塊集合來(lái)作為響應(yīng)。通過(guò)根據(jù)共享資源索引和操作系統(tǒng)維護(hù)的當(dāng)前語(yǔ)言標(biāo)識(shí)符選擇或構(gòu)造一個(gè)文件名可以實(shí)現(xiàn)這種操作。具體地,通過(guò)在共享資源索引(在這種情況下為"shared.dll")后面附加擴(kuò)展名".language.mui"來(lái)構(gòu)造一個(gè)文件名,其中"language"是一個(gè)對(duì)應(yīng)于當(dāng)前語(yǔ)言標(biāo)識(shí)符的語(yǔ)言代碼。資源處理程序接著從具有所構(gòu)造的文件名的資源文件提供所請(qǐng)求的資源。
這個(gè)方案允許將資源模塊統(tǒng)一到一個(gè)具有多個(gè)可執(zhí)行模塊的工程項(xiàng)目中。與使每個(gè)單獨(dú)的可執(zhí)行模塊具有一個(gè)不同的英語(yǔ)語(yǔ)言資源模塊的方式不同的是,一個(gè)單獨(dú)的英語(yǔ)語(yǔ)言資源模塊可以支持多個(gè)可執(zhí)行模塊。這樣就大大減少了一個(gè)復(fù)雜應(yīng)用中需要的單獨(dú)資源模塊的數(shù)量。
圖7圖解了在本發(fā)明的這個(gè)實(shí)施例中執(zhí)行的步驟。步驟430包括接收一個(gè)資源請(qǐng)求。通常由一個(gè)應(yīng)用或可執(zhí)行模塊通過(guò)上述"FindResource"和"LoadResource"函數(shù)向資源處理程序發(fā)出這種請(qǐng)求。作為請(qǐng)求的一部分,應(yīng)用指定所請(qǐng)求資源的名稱或ID并且還提供一個(gè)指示將從其獲得資源的模塊的模塊標(biāo)識(shí)符。模塊標(biāo)識(shí)符是一個(gè)對(duì)應(yīng)于期望模塊的操作系統(tǒng)句柄。期望模塊具有一個(gè)為操作系統(tǒng)已知的文件名。
步驟431包括確定模塊標(biāo)識(shí)符所標(biāo)識(shí)的模塊是否包含一個(gè)共享資源索引。在所述的實(shí)施例中,共享資源被實(shí)現(xiàn)成一個(gè)具有預(yù)定或保留名稱的資源。所述的實(shí)施例使用資源名稱"RT_MUI"。這個(gè)資源的值被設(shè)置成一個(gè)規(guī)定某個(gè)資源模塊文件名的第一部分的字符串或?qū)捵止?jié)字符集字符串。例如,如圖6所示,"RT_MUI"資源可以被設(shè)置成"shared.dll"。
如果步驟431發(fā)現(xiàn)在資源請(qǐng)求所標(biāo)識(shí)的模塊內(nèi)存在"RT_MUI"資源,則執(zhí)行步驟432以便從一個(gè)由"RE_MUI"資源值標(biāo)識(shí)的資源模塊集合中選擇一個(gè)具有適當(dāng)語(yǔ)言的資源模塊。在所述的實(shí)施例中,"RT_MUI"數(shù)值包括一個(gè)文件名的第一部分,因而標(biāo)識(shí)出一組均從相同數(shù)值開(kāi)始的文件名。通過(guò)在"RT_MUI"共享資源索引后面附加一個(gè)擴(kuò)展名來(lái)選擇具有適當(dāng)語(yǔ)言的模塊。擴(kuò)展名由字符串".Ianguage.mui"構(gòu)成,其中"language"是一個(gè)對(duì)應(yīng)于由操作系統(tǒng)的語(yǔ)言標(biāo)識(shí)符指示的語(yǔ)言的語(yǔ)言代碼。
如果步驟431在資源請(qǐng)求所標(biāo)識(shí)的模塊內(nèi)沒(méi)有發(fā)現(xiàn)一個(gè)共享資源指示符,則執(zhí)行步驟433以便從一個(gè)由所標(biāo)識(shí)模塊的文件名指示的資源模塊集合中選擇一個(gè)具有適當(dāng)語(yǔ)言的資源模塊。所標(biāo)識(shí)的模塊的文件名被用作一個(gè)資源模塊文件名的第一部分,因而標(biāo)識(shí)出一組均從相同字符串開(kāi)始的文件名。通過(guò)在所標(biāo)識(shí)的模塊的文件名后面附加一個(gè)由字符串".language.mui"構(gòu)成的擴(kuò)展名來(lái)選擇一個(gè)具體的模塊,其中"language"是一個(gè)對(duì)應(yīng)于由操作系統(tǒng)的語(yǔ)言標(biāo)識(shí)符指示的語(yǔ)言的語(yǔ)言代碼。
步驟434在步驟432或433之后,并且包括從構(gòu)造的文件名標(biāo)識(shí)的資源模塊提供所請(qǐng)求的本地化資源。
通過(guò)這種方式,在不需要發(fā)出請(qǐng)求的模塊采取任何選擇具體語(yǔ)言的明顯動(dòng)作的情況下可以提供具有適當(dāng)語(yǔ)言的資源。
在某些情況下,當(dāng)前語(yǔ)言標(biāo)識(shí)符指示的語(yǔ)言不能被一個(gè)具體資源模塊集合的資源模塊表示。這了解決這個(gè)問(wèn)題,資源處理程序提供一個(gè)回退機(jī)制,該機(jī)制試圖提供盡可能最優(yōu)的語(yǔ)言選擇,即使在語(yǔ)言標(biāo)識(shí)符指示的實(shí)際語(yǔ)言不可用時(shí)也是如此。具體地,如果沒(méi)有符合語(yǔ)言標(biāo)識(shí)符的資源模塊,則資源處理程序按照優(yōu)先權(quán)的降序根據(jù)下列語(yǔ)言選擇一個(gè)可選的資源模塊語(yǔ)言標(biāo)識(shí)符指示的語(yǔ)言的母語(yǔ);系統(tǒng)的缺省語(yǔ)言;系統(tǒng)缺省語(yǔ)言的母語(yǔ);美國(guó)英語(yǔ);正統(tǒng)英語(yǔ)。
術(shù)語(yǔ)"正統(tǒng)"是指某個(gè)包含多個(gè)子集的通用語(yǔ)言。例如,一個(gè)系統(tǒng)可以使用"加拿大法語(yǔ)"。加拿大法語(yǔ)的正統(tǒng)語(yǔ)言是法語(yǔ)。當(dāng)最初配置一個(gè)計(jì)算機(jī)時(shí)設(shè)置一個(gè)"系統(tǒng)缺省"語(yǔ)言,并且根據(jù)操作系統(tǒng)語(yǔ)言標(biāo)識(shí)符當(dāng)前指示的語(yǔ)言,"系統(tǒng)缺?。⒖梢园l(fā)生改變。
雖然前面已經(jīng)通過(guò)特定于語(yǔ)言的結(jié)構(gòu)功能和/或方法步驟描述了本發(fā)明,但應(yīng)當(dāng)理解所附權(quán)利要求書(shū)定義的本發(fā)明不必受上述特定功能或步驟的限制。而是將特定的功能和步驟公開(kāi)成實(shí)現(xiàn)權(quán)利要求書(shū)提到的發(fā)明的最優(yōu)形式。
權(quán)利要求
1.一種計(jì)算機(jī)系統(tǒng),其中包括對(duì)應(yīng)于多個(gè)語(yǔ)言的多個(gè)資源模塊,每個(gè)資源模塊均包含對(duì)應(yīng)語(yǔ)言的本地化資源;多個(gè)可執(zhí)行模塊,其中至少某些可執(zhí)行模塊包含一個(gè)共享資源索引,其中每個(gè)共享資源索引均標(biāo)識(shí)一個(gè)對(duì)應(yīng)于不同語(yǔ)言的資源模塊集合;一個(gè)從所標(biāo)識(shí)的可執(zhí)行模塊接收本地化資源請(qǐng)求的資源處理程序,其中根據(jù)一個(gè)標(biāo)識(shí)某個(gè)具有共享資源索引的可執(zhí)行模塊的請(qǐng)求,資源處理程序(a)根據(jù)以獨(dú)立于針對(duì)資源處理程序的請(qǐng)求的方式獲得的一個(gè)語(yǔ)言標(biāo)識(shí)符選擇由共享資源索引標(biāo)識(shí)的資源模塊集合中的一個(gè)資源模塊,并且(b)從選擇的一個(gè)資源模塊提供所請(qǐng)求的本地化資源。
2.如權(quán)利要求1所述的計(jì)算機(jī)系統(tǒng),其中不同的可執(zhí)行模塊包含相同的共享資源索引。
3.如權(quán)利要求1所述的計(jì)算機(jī)系統(tǒng),其中共享資源索引是一個(gè)文件標(biāo)識(shí)符并且資源處理程序通過(guò)根據(jù)語(yǔ)言標(biāo)識(shí)符修改文件標(biāo)識(shí)符選擇一個(gè)資源模塊集合。
4.如權(quán)利要求1所述的計(jì)算機(jī)系統(tǒng),其中每個(gè)資源模塊均具有一個(gè)文件標(biāo)識(shí)符并且每個(gè)共享資源索引均指示一個(gè)或多個(gè)資源模塊的文件標(biāo)識(shí)符的一部分。
5.如權(quán)利要求1所述的計(jì)算機(jī)系統(tǒng),其中共享資源索引是被包含在可執(zhí)行模塊中的命名資源。
6.如權(quán)利要求1所述的計(jì)算機(jī)系統(tǒng),其中還包括一個(gè)操作系統(tǒng),其中資源處理程序是操作系統(tǒng)的一部分并且其中操作系統(tǒng)以獨(dú)立于應(yīng)用程序的方式維護(hù)語(yǔ)言標(biāo)識(shí)符。
7.如權(quán)利要求1所述的計(jì)算機(jī)系統(tǒng),其中在共享資源索引標(biāo)識(shí)的資源模塊集合中沒(méi)有與語(yǔ)言標(biāo)識(shí)符一致的集合的情況下,資源處理程序按照優(yōu)先權(quán)的降序根據(jù)下列語(yǔ)言從共享資源索引標(biāo)識(shí)的資源模塊集合中選擇一個(gè)可選資源模塊語(yǔ)言標(biāo)識(shí)符指示的語(yǔ)言的正統(tǒng)語(yǔ)言;系統(tǒng)的缺省語(yǔ)言;系統(tǒng)缺省語(yǔ)言的正統(tǒng)語(yǔ)言。
8.一種計(jì)算機(jī)系統(tǒng),其中包括對(duì)應(yīng)于多個(gè)語(yǔ)言的多個(gè)資源模塊,每個(gè)資源模塊均包含對(duì)應(yīng)語(yǔ)言的本地化資源;一個(gè)從所標(biāo)識(shí)的模塊接收本地化資源請(qǐng)求的資源處理程序,其中根據(jù)一個(gè)標(biāo)識(shí)某個(gè)具體模塊的請(qǐng)求,資源處理程序(a)識(shí)別一個(gè)與所標(biāo)識(shí)的可執(zhí)行模塊相關(guān)的資源模塊集合,(b)根據(jù)以獨(dú)立于針對(duì)資源處理程序的請(qǐng)求的方式獲得的一個(gè)語(yǔ)言標(biāo)識(shí)符選擇資源模塊集合中的一個(gè)資源模塊,和(c)從選擇的一個(gè)資源模塊而不是所標(biāo)識(shí)的可執(zhí)行模塊提供所請(qǐng)求的本地化資源。
9.如權(quán)利要求8所述的計(jì)算機(jī)系統(tǒng),其中還包括一或多個(gè)包含共享資源索引的模塊,其中每個(gè)共享資源索引均標(biāo)識(shí)了對(duì)應(yīng)于不同語(yǔ)言的資源模塊;其中資源處理程序根據(jù)所標(biāo)識(shí)的模塊的共享資源索引識(shí)別出與所標(biāo)識(shí)的模塊相關(guān)的資源模塊集合。
10.如權(quán)利要求8所述的計(jì)算機(jī)系統(tǒng),其中還包括一或多個(gè)包含共享資源索引的模塊,其中每個(gè)共享資源索引均標(biāo)識(shí)了對(duì)應(yīng)于不同語(yǔ)言的資源模塊;其中資源處理程序根據(jù)所標(biāo)識(shí)的模塊的共享資源索引識(shí)別出與所標(biāo)識(shí)的模塊相關(guān)的資源模塊集合。其中不同的模塊包含相同的共享資源索引。
11.如權(quán)利要求8所述的計(jì)算機(jī)系統(tǒng),其中還包括一個(gè)操作系統(tǒng),資源處理程序是操作系統(tǒng)的一部分并且操作系統(tǒng)以獨(dú)立于應(yīng)用程序的方式維護(hù)語(yǔ)言標(biāo)識(shí)符。
12.如權(quán)利要求8所述的計(jì)算機(jī)系統(tǒng),其中如果沒(méi)有符合語(yǔ)言標(biāo)識(shí)符的資源模塊集合,則資源處理程序按照優(yōu)先權(quán)的降序根據(jù)下列語(yǔ)言從資源模塊集合中選擇一個(gè)可選資源模塊語(yǔ)言標(biāo)識(shí)符指示的語(yǔ)言的正統(tǒng)語(yǔ)言;系統(tǒng)的缺省語(yǔ)言;系統(tǒng)缺省語(yǔ)言的正統(tǒng)語(yǔ)言。
13.如權(quán)利要求8所述的計(jì)算機(jī)系統(tǒng),其中如果沒(méi)有符合語(yǔ)言標(biāo)識(shí)符的資源模塊集合,則資源處理程序按照優(yōu)先權(quán)的降序根據(jù)下列語(yǔ)言從資源模塊集合中選擇一個(gè)可選資源模塊語(yǔ)言標(biāo)識(shí)符指示的語(yǔ)言的正統(tǒng)語(yǔ)言;系統(tǒng)的缺省語(yǔ)言;系統(tǒng)缺省語(yǔ)言的正統(tǒng)語(yǔ)言;英語(yǔ)。
14.一或多個(gè)含有數(shù)據(jù)結(jié)構(gòu)的計(jì)算機(jī)可讀介質(zhì),其中包括對(duì)應(yīng)于多個(gè)語(yǔ)言的多個(gè)資源模塊,每個(gè)資源模塊均包含對(duì)應(yīng)語(yǔ)言的本地化資源;多個(gè)可執(zhí)行模塊,其中至少某些可執(zhí)行模塊包含一個(gè)共享資源索引,每個(gè)共享資源索引均標(biāo)識(shí)一個(gè)對(duì)應(yīng)于不同語(yǔ)言的資源模塊集合;其中共享資源索引允許一個(gè)資源處理程序(a)根據(jù)以獨(dú)立于針對(duì)資源處理程序的請(qǐng)求的方式獲得的一個(gè)語(yǔ)言標(biāo)識(shí)符從語(yǔ)言專用資源模塊自動(dòng)提供本地化資源,并且(b)從選擇的一個(gè)資源模塊提供所請(qǐng)求的本地化資源。
15.如權(quán)利要求14所述的一或多個(gè)計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其中不同的可執(zhí)行模塊包含相同的共享資源索引。
16.如權(quán)利要求14所述的一或多個(gè)計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其中共享資源索引是一個(gè)文件標(biāo)識(shí)符。
17.如權(quán)利要求14所述的一或多個(gè)計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其中每個(gè)資源模塊均具有一個(gè)文件標(biāo)識(shí)符并且每個(gè)共享資源索引均指示一個(gè)或多個(gè)資源模塊的文件標(biāo)識(shí)符的一部分。
18.如權(quán)利要求14所述的一或多個(gè)計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其中共享資源索引是被包含在可執(zhí)行模塊中的命名資源。
19.一種提供資源的方法,其中包括接收一個(gè)針對(duì)某個(gè)所標(biāo)識(shí)的本地化資源的請(qǐng)求,請(qǐng)求包含一個(gè)模塊標(biāo)識(shí);在接收到請(qǐng)求時(shí),(a)根據(jù)模塊標(biāo)識(shí)和以獨(dú)立于請(qǐng)求的方式獲得的一個(gè)語(yǔ)言標(biāo)識(shí)符選擇一個(gè)資源模塊,并且(b)從選擇的資源模塊提供所請(qǐng)求的本地化資源。
20.如權(quán)利要求19所述的方法,其中選擇步驟包括從模塊標(biāo)識(shí)所指的一個(gè)模塊獲得一個(gè)共享資源索引,其中共享由索引標(biāo)識(shí)了對(duì)應(yīng)于不同語(yǔ)言的一個(gè)資源模塊集合;從資源模塊集合中選擇一個(gè)資源模塊,該資源模塊具有符合語(yǔ)言標(biāo)識(shí)符所指示的語(yǔ)言的本地化資源。
21.如權(quán)利要求19所述的方法,其中選擇步驟包括根據(jù)語(yǔ)言標(biāo)識(shí)符修改模塊標(biāo)識(shí)。
22.如權(quán)利要求19所述的方法,其中選擇步驟包括按照優(yōu)先權(quán)的降序根據(jù)下列語(yǔ)言選擇一個(gè)資源模塊由語(yǔ)言標(biāo)識(shí)符指示的語(yǔ)言;語(yǔ)言標(biāo)識(shí)符指示的語(yǔ)言的正統(tǒng)語(yǔ)言;系統(tǒng)的缺省語(yǔ)言;系統(tǒng)缺省語(yǔ)言的正統(tǒng)語(yǔ)言。
23.如權(quán)利要求19所述的方法,其中選擇步驟包括按照優(yōu)先權(quán)的降序根據(jù)下列語(yǔ)言選擇一個(gè)資源模塊由語(yǔ)言標(biāo)識(shí)符指示的語(yǔ)言;語(yǔ)言標(biāo)識(shí)符指示的語(yǔ)言的正統(tǒng)語(yǔ)言;系統(tǒng)的缺省語(yǔ)言;系統(tǒng)缺省語(yǔ)言的正統(tǒng)語(yǔ)言;英語(yǔ)。
24.一或多個(gè)包含一個(gè)執(zhí)行如權(quán)利要求19所述的步驟的計(jì)算機(jī)可執(zhí)行程序的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)。
全文摘要
在一個(gè)操作系統(tǒng)中,一個(gè)資源處理程序從應(yīng)用模塊接受資源請(qǐng)求。資源請(qǐng)求標(biāo)識(shí)出將從其獲得所請(qǐng)求資源的一個(gè)模塊。資源處理程序從一個(gè)相關(guān)的資源模塊提供所請(qǐng)求的資源。通過(guò)一個(gè)已定義的文件命名約定建立一個(gè)可執(zhí)行模塊與不同語(yǔ)言的資源模塊之間的關(guān)聯(lián),也可以通過(guò)對(duì)不同語(yǔ)言的資源模塊使用不同目錄的方式建立關(guān)聯(lián)。某些可執(zhí)行模塊包含一個(gè)共享資源索引,該共享資源索引可用于建立多個(gè)可執(zhí)行模塊與一個(gè)單獨(dú)的共享資源模塊集合之間的關(guān)聯(lián)。
文檔編號(hào)G06F9/54GK1329309SQ0112118
公開(kāi)日2002年1月2日 申請(qǐng)日期2001年6月13日 優(yōu)先權(quán)日2000年6月13日
發(fā)明者愛(ài)德華·S·米勒, 比約恩·C·雷蒂克, 格雷戈里·威爾遜, 徐杉(音譯), 阿倫·A·門茨, 邁克爾·J·湯普森, 沙拉德·馬瑟, 羅伯托·卡扎羅, 邁克爾·金斯伯格 申請(qǐng)人:微軟公司