[英]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.