欧美成人精品手机在线观看_69视频国产_动漫精品第一页_日韩中文字幕网 - 日本欧美一区二区

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

C# 實現多語言支持的本地化(資源)

admin
2025年3月22日 7:43 本文熱度 191

?

本章內容:
● 使用表示區域性和區域的類
● 應用程序的全球化
● 應用程序的本地化
本章將介紹.NET 應用程序的全球化和本地化。全球化(Globalization)用于國際化的應用程序:使 應用程序可以在國際市場上銷售。采用全球化策略,應用程序應根據區域性、不同的日歷等支持不 同的數字和日期格式。本地化(Localization)用于為特定的區域性翻譯應用程序。而字符串的翻譯可 以使用資源,如.NET 資源或WPF 資源字典。

資源

像圖片或字符串表這樣的資源可以放在資源文件或附屬程序集中。在本地化應用程序時,這種 資源非常有用,.NET 對本地化資源的搜索提供了內置支持。

在說明如何使用資源本地化應用程序之前,先討論如何創建和讀取資源,而無須考慮語言因素。

創建資源文件

資源文件包含圖片、字符串表等條目。要創建資源文件,或者使用一般的文本文件,或者使用 那些利用XML 的.resX 文件。下面從一個簡單的文本文件開始。

內嵌字符串表的資源可以使用一般的文本文件來創建。該文本文件只是把字符串賦予鍵。鍵是 可以用來從程序中獲取數值的名稱。鍵和數值中都可以包含空格。

這個例子顯示了Wrox.ProCSharp.Localization.MyResources.txt 文件中的一個簡單字符串表:

Title = Professional C#
Chapter = Localization
Author = Christian Nagel
Publisher = Wrox Press

在保存帶Unicode 字符的文本文件時,必須將文本文件和相應的編碼一起保存。 為此,可以在Save 對話框中選擇Unicode 編碼。

資源文件生成器

可以使用資源文件生成器Resgen.exe(實用程序)在Wrox.ProCSharp.Localization.MyResources.txt 的外部創建一個資源文件,輸入如下代碼: resgen Wrox.ProCSharp.Localization.MyResources.txt

會創建Wrox.ProCSharp.Localization.MyResources.resources 文件。最終的資源文件可以作為一個 外部文件添加到程序集中,或者內嵌到DLL 或EXE 中。Resgen 還可以創建基于XML 的.resX 資源 文件。構建XML 文件的一種簡單方法是使用Resgen 本身:

resgen Wrox.ProCSharp.Localization.MyResources.txt
Wrox.ProCSharp.Localization.MyResources.resX

這條命令創建了XML 資源文件Wrox.ProCSharp.LocalizationMyResources.resX。

Resgen 支持強類型化的資源。強類型化的資源用一個訪問資源的類表示。這個類可以用resgen 實用程序的/str 選項創建:

resgen /str:C#,Wrox.ProCSharp.Localization,MyResources,MyResources.cs
Wrox.ProCSharp.Localization.MyResources.resX

在/str 選項中,按照語言、名稱空間、類名和源代碼文件名的順序定義資源。

Resgen 實用程序不支持添加圖片。在.NET Framework SDK 示例中,有一個ResXGen 示例。使 用ResXGen 可以在.resX 文件中引用圖片。還可以使用ResourceWriter 類或ResXResourceWriter 類 以編程方式把圖片添加到資源中。

ResourceWriter

除了使用Resgen 實用程序構建資源文件外,編寫程序來創建資源也很簡單。ResourceWriter 是 來自System.Resources 名稱空間的一個類,它可以用于編寫二進制資源文件;ResXResourceWriter 類編寫基于XML 的資源文件。這兩個類也支持圖片和任何其他可串行化的對象。在使用 ResXResourceWriter 類時,必須引用System.Windows.Forms 程序集。

下面的代碼使用構造函數和文件名Demo.resx 創建一個ResXResourceWriter 對象rw。在創建了 一個實例后,使用ResXResourceWriter 類的AddResource()方法可以添加至多2GB 的資源。 AddResource()方法的第一個參數指定資源名,第二個參數指定數值。可以使用Image 類的一個實例 來添加圖片資源。要使用Image 類,必須引用System.Drawing 程序集,還要添加using 指令,以打 開System.Drawing 名稱空間。

下面打開logo.gif 文件,創建一個Image 對象。必須把圖片復制到可執行文件的目錄下,或者 在Image.ToFile()方法的參數中指定圖片的完整路徑。using 語句指定應在using 塊的尾部自動釋放圖 像資源。把其他簡單的字符串資源添加到ResXResourceWriter 對象中。ResXResourceWriter 類的 Close()方法會自動調用ResXResourceWriter.Generate()方法,最后把資源寫入Demo.resx 文件中:

using System;
using System.Resources;
using System.Drawing;
class Program
{
static void Main()
{
    var rw = new ResXResourceWriter("Demo.resx");
    using (Image image = Image.FromFile("logo.gif"))
    {
        rw.AddResource("WroxLogo", image);
        rw.AddResource("Title", "Professional C#");
        rw.AddResource("Chapter", "Localization");
        rw.AddResource("Author", "Christian Nagel");
        rw.AddResource("Publisher", "Wrox Press");
        rw.Close();
    }
  }
}

啟動這個小程序,創建嵌入了圖像logo.gif 的資源文件Demo.resx,這個文件將用于下面的一個 Windows 應用程序。

使用資源文件

使用 C#命令行編譯器csc.exe 和/resource 選項,或直接使用Visual Studio,可以把資源文件添加 到程序集中。為了說明如何在Visual Studio 中使用資源文件,下面創建一個控制臺應用程序 ResourceDemo。

在 Solution Explorer 窗口的上下文菜單(Add ? Existing Item 命令)中,把前面創建的資源文件 Demo.resx 添加到這個項目中。默認情況下,把這個資源的Build Action 設置為Embedded Resource, 這樣,這個資源就嵌入到輸出的程序集中。

在項目設置(Application ? Assembly information 命令)中,把應用程序的Neutral Language 設置 為主要語言,如EEnglish(United States),下圖 所示。改變這個設置,會在assemblyinfo.cs 文件 中添加[NeutralResourceLanguageAttribute]屬性:

[assembly: NeutralResourcesLanguageAttribute("en-US")]

設置這個選項會提高ResourceManager 的 性能,因為它會更快地找到en-US 的資源,該 資源還會用作默認的回退。使用這個特性也可 以通過構造函數的第二個參數指定默認資源的 位置。使用UltimateResourceFallbackLocation 枚舉可以指定默認資源要在主程序集或附屬程 序集(MainAssembly 和Satellite 值)中存儲。
構建項目后,使用ildasm 查看生成的程序 集時,會在程序集清單中看到.mresource 特性, 下圖 所示。它聲明了程序集中資源的名 稱。如果把.mresource 聲明為public(與本例一 樣),該資源就會從程序集中導出,且可以用于 其他程序集的類中。如果把.mresource 聲明為 private,則表示該資源不能導出,只能用于該 程序集內部。

要訪問嵌入的資源,可以使用System.Resources 名稱空間中的ResourceManager 類。把以嵌入 的資源為參數的程序集傳遞給ResourceManager 類的構造函數。在本例中,因為把資源嵌入到正在 執行的程序集中, 所以應把 Assembly.GetExecutingAssembly() 方法 的結果作為構造函數的第二個參數。第 一個參數是資源的根名。根名由名稱空 間和資源文件名(不帶資源擴展名)組 成。如前所述,使用ildasm 來顯示該名 稱。為此,只需刪除資源的擴展名 resources 即可。還可以使用 System.Reflection.Assembly 類的GetManifestResourceNames()方法通過編程方式獲取該名稱。

using System;
using System.Drawing;
using System.Reflection;
using System.Resources;
namespace Wrox.ProCSharp.Localization
{
class Program
{
    static void Main()
    {
        var rm = new ResourceManager("Wrox.ProCSharp.Localization.Demo",
        Assembly.GetExecutingAssembly());

使用ResourceManager 實例rm,通過指定GetObject()和GetString()方法的鍵,就可以獲得所有 的資源:

    Console.WriteLine(rm.GetString("Title"));
    Console.WriteLine(rm.GetString("Chapter"));
    Console.WriteLine(rm.GetString("Author"));
    using (Image logo = (Image)rm.GetObject("WroxLogo"))
    {
      logo.Save("logo.bmp");
    }
  }
  }
}

通過強類型化的資源,可以簡化前面編寫的代碼:不需要實例化ResourceManager,也不需要 使用索引符訪問資源,而只需使用屬性訪問資源名:

private static void StronglyTypedResources()
{
    Console.WriteLine(Demo.Title);
    Console.WriteLine(Demo.Chapter);
    Console.WriteLine(Demo.Author);
    using (Bitmap logo = Demo.WroxLogo)
    {
      logo.Save("logo.bmp");
    }
}

要使用托管資源編輯器創建強類型化的資源,可以把Access Modifier 從No Code Generation 重 置為Public 或Internal。使用Public 選項,生成的類就使用公共訪問修飾符,并且它可以在其他程序 集中使用。而使用Internal 選項,生成的類就使用內部訪問修飾符,并且它只能在程序集內部訪問。

設置這個選項后,就會創建Demo 類(它與資源同名)。這個類的靜態屬性為所有的資源提供了 強類型化的資源名。通過實現靜態屬性,就可以使用ResourceManager 對象,該對象在第一次訪問 時實例化,并緩存:

System.Resources名稱空間

ResourceManager 類可以用于從程序集或資源文件中獲取當前區域性的資源。使用 ResourceManager 類還可以獲取特定區域性的ResourceSet 類。
ResourceSet 類表示特定區域性的資源。在創建ResourceSet 類的實例時,它會枚舉一個實 現IResourceReader 接口的類,并在散列表中存儲所有的資源。
IResourceReader 接口用于從ResourceSet 中枚舉資源。ResourceReader 類實現這個接口。
ResourceWriter 類用于創建資源文件。ResourceWriter 類實現IResourceWriter 接口。  ResXResourceSet、ResXResourceReader 和ResXResourceWriter 類分別類似于R esourceSet、 ResourceReader 和ResourceWriter 類,但創建的是基于XML 的資源文件.resX,而不是二 進制文件。ResXFileRef 可以用于鏈接資源,而不是把資源嵌入到XML 文件中。
System.Resources.Tools 名稱空間包含的StronglyTypedResourceBuilder 類可以從資源中創建 類。


閱讀原文:原文鏈接


該文章在 2025/3/24 13:20:34 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved