簡體   English   中英

最佳實踐:在 C#.net 中存儲異常/錯誤或信息性消息以實現國際化的最佳方式是什么?

[英]Best practice: What is the best way to store exception/error or informational messages in C#.net for internationalization?

當拋出自定義異常或向最終用戶發送消息時,可以使用硬編碼字符串(包括字符串常量)、使用純資源程序集或從數據庫中的表中獲取字符串。

我希望我的應用程序能夠輕松切換到不同的語言,而無需重新編譯。 雖然將字符串資源存儲在程序集或數據庫中可以實現此目的,但它增加了程序邏輯的復雜性,進而增加了產品的成本。

我的問題是:什么是 go 的最佳方法,同時牢記目標而不忽略每個選項帶來的成本? 如果您有比列出的更好的做法,我很樂意聽到。

技術: 操作系統: Windows 系列 平台: .NET 框架 2 及更高版本 語言: C# 數據庫: MS Z9778840A0105CB30C98228276 及更高版本

多謝你們!

卡倫

使用資源:

這如何增加程序邏輯的復雜性?

try
{
   //do something with System.Net.Mail with invalid email..
}
catch (FormatException fex)
{
    throw new Exception(Resources.ErrorMsg.Invalid_Email, fex);
}

編輯

在 VS2008 中,當你創建一個資源時,你可以定義它是內部的還是公共的。 因此,假設我們將其設置為 public,在一個名為 ClassLibrary1 的程序集中,我們可以訪問如下屬性:

ClassLibrary1.Properties.Resources.InvalidError

其中 InvalidError 是錯誤的名稱。 同樣,我認為這不會給邏輯增加任何復雜性。

.NET 已經使用命名約定支持多種文化的多種資源:

 <default resource file name>.<culture>.resx

本質上,正如 Josh 指出的那樣,VS2008 創建了一個很好的類型安全包裝器來訪問這些資源。

然而,VS UI 暴露了你能做的最少的事情。

如果您創建一個與默認名稱完全相同的新資源文件,則在 resx 之前添加文化信息。 (注意:您需要在其他地方創建它,然后將其復制到魔法屬性文件夾中。)

然后,如果您已將區域性應用於訪問資源的線程,您的應用程序將從特定資源中提取正確的字符串。

例如:

    // Using the default culture
    string s = Resources.Error1Msg;

    Thread.CurrentThread.CurrentUICulture = new CultureInfo("es-CO");

    // Using the specific culture specified as above:
    s = Resources.Error1Msg;

如果需要參數化消息,請使用 string.Format 參數化 output。

需要注意的一點是,嘗試以這樣一種方式構建應用程序層,使您的異常攜帶豐富的有效負載(用於描述錯誤),而不僅僅是依賴於文本。

這樣,您的表示層可以呈現可能利用有效負載的最佳 UI 體驗。

高溫高壓

菲利普

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM