使用附屬資源程序集本地化WinForms控件
本文檔演示了使用附屬資源程序集(包含已翻譯資源的庫)本地化 .NET 應(yīng)用程序的最常見方法,這些程序集是 .NET Framework 提供的標(biāo)準(zhǔn)本地化機(jī)制,用于構(gòu)建多語言應(yīng)用程序。
提示:您也可以使用自定義本地化程序來翻譯應(yīng)用程序,但是有些控件只有附屬程序集才能翻譯(例如,XtraReports中的Search對話框)。我們建議您使用附屬程序集來翻譯應(yīng)用程序,另外請注意,如果使用自定義本地化程序則忽略附屬程序集。
獲取附屬組件
在大多數(shù)情況下,沒有必要手動翻譯所有特定于語言的資源,因?yàn)镈evExpress包含針對各種語言和文化的附屬程序集。
統(tǒng)一組件安裝程序包括某些語言(DE、ES、JA)的資源程序集,這些資源不會自動安裝,您可以自行決定安裝它們。
提示:本地化的資源可能不完整,可以導(dǎo)航到DevExpress Localization Service 下載其他語言的社區(qū)來源翻譯,此服務(wù)允許您修改現(xiàn)有的翻譯,并編譯和下載附屬程序集。
提示:確保附屬程序集的主要版本(例如,v23.1)與項(xiàng)目中DevExpress庫的主要版本匹配。
添加附屬程序集到您的應(yīng)用程序
將包含附屬程序集的文件夾(例如,es)復(fù)制到應(yīng)用程序的EXE文件目錄。
例如,要包含 German assemblies,請將名為de的文件夾從\Bin\Framework\目錄復(fù)制到應(yīng)用程序的EXE文件目錄(通常是Bin\ Debug\子目錄),您可以更改Output path項(xiàng)目來選擇另一個位置。
提示:附屬程序集必須放置在名稱與這些程序集目標(biāo)的區(qū)域性名稱相匹配的文件夾中。例如,如果附屬程序集針對中立的 German culture (“de”),則它們必須放置在“de”文件夾中(而不是“de-DE”或任何其他文件夾)。
下圖說明了在應(yīng)用程序的目錄中放置附屬程序集的位置:
提示:
除了將附屬程序集復(fù)制到應(yīng)用程序的文件夾中,還可以將它們安裝到gac中。請注意,如果存在具有相同名稱的不同資源程序集則一個位于應(yīng)用程序EXE文件附近,另一個安裝在GAC中—來自GAC的程序集將具有更高的優(yōu)先級。
將應(yīng)用程序與附屬組件一起部署到最終用戶的機(jī)器上。當(dāng)啟動時,程序自動確定操作系統(tǒng)的區(qū)域性,加載相應(yīng)的資源程序集,并相應(yīng)地翻譯顯示文本。
下圖演示了德語本地化的 Print Preview和Report Designer:
選擇與系統(tǒng)文化不同的文化
將所需區(qū)域性的縮寫分配給CurrentThread.CurrentUICulture和CurrentThread.CurrentCulture屬性,手動指定應(yīng)用程序的區(qū)域性(無論目標(biāo)操作系統(tǒng)是什么)。
請注意,雖然您可以為CurrentUICulture屬性(例如,“de”)使用短區(qū)域性縮寫(中性區(qū)域性),但CurrentCulture屬性需要設(shè)置為特定的區(qū)域性(例如,“de- de”)。
以下示例代碼設(shè)置應(yīng)用程序的德語區(qū)域設(shè)置:
C#:
、using System.Globalization; using System.Threading; // ... static void Main() { // Create a new object, representing the German culture. CultureInfo culture = CultureInfo.CreateSpecificCulture("de-DE"); // The following line localizes the application's user interface. Thread.CurrentThread.CurrentUICulture = culture; // The following line localizes data formats. Thread.CurrentThread.CurrentCulture = culture; // Set this culture as the default culture for all threads in this application. // Note: The following properties are supported in .NET Framework 4.5+: CultureInfo.DefaultThreadCurrentCulture = culture; CultureInfo.DefaultThreadCurrentUICulture = culture; // Note that the above code should be added BEFORE calling the Run() method. Application.Run(new Form1()); }
VB.NET:
Imports System.Globalization Imports System.Threading ' ... Shared Sub Main() ' Create a new object, representing the German culture. Dim Culture = CultureInfo.CreateSpecificCulture("de-DE") ' The following line localizes the application's user interface. Thread.CurrentThread.CurrentUICulture = Culture ' The following line localizes data formats. Thread.CurrentThread.CurrentCulture = Culture ' Set this culture as the default culture for all threads in this application. ' Note: The following properties are supported in .NET Framework 4.5+: CultureInfo.DefaultThreadCurrentCulture = Culture CultureInfo.DefaultThreadCurrentUICulture = Culture ' Note that the above code should be added BEFORE calling the Run() method. Application.Run(New Form1()) End Sub
提示:如果您打算允許最終用戶從多個預(yù)定義區(qū)域性中進(jìn)行選擇,請?jiān)诩虞d表單之前執(zhí)行此代碼,雖然可以動態(tài)地分配CurrentCulture和CurrentUICulture屬性,但是沒有重載所有資源的通用方法。
故障處理
我的應(yīng)用程序未本地化。
要使用附屬資源程序集,請將它們放置在適當(dāng)?shù)奈恢?,以便公共語言運(yùn)行庫(CLR)可以輕松地找到它們。在某些情況下,應(yīng)用程序可能無法定位附屬程序集,如果是這種情況,您可以使用標(biāo)準(zhǔn)的.NET Fuslogvw.exe實(shí)用程序檢查它在哪里查找程序集。閱讀MSDN中的以下主題以了解更多信息:
我的應(yīng)用程序中的某些項(xiàng)目未本地化。
發(fā)生這種情況可能是因?yàn)樘囟▍^(qū)域性的附屬程序集不完整,您可以使用DevExpress本地化服務(wù)翻譯缺失的字符串。
我的安全權(quán)限禁止運(yùn)行該應(yīng)用程序。
ecurityPermission必須設(shè)置為ControlThread才能更改Thread.CurrentThread的區(qū)域性。注意,操作線程是危險的,因?yàn)榕c線程相關(guān)的安全狀態(tài)。因此,只有在必要的時候才應(yīng)該給值得信賴的代碼權(quán)限。應(yīng)用程序不能在半受信任代碼中更改線程區(qū)域性