首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >最佳实践:在C#.net中存储异常/错误或信息性消息以实现国际化的最佳方式是什么?

最佳实践:在C#.net中存储异常/错误或信息性消息以实现国际化的最佳方式是什么?
EN

Stack Overflow用户
提问于 2009-03-31 18:59:13
回答 2查看 3.1K关注 0票数 4

当引发自定义异常或向最终用户发出消息时,可以使用硬编码的字符串(包括字符串常量)、使用仅资源程序集或从数据库的表中获取字符串。

我希望我的应用程序能够轻松地切换到不同的语言,而不必重新编译。虽然将字符串资源存储在程序集或数据库中可以实现此目的,但它增加了程序逻辑的复杂性,进而增加了产品的成本。

我的问题是:在不忽略每个选项带来的成本的情况下,实现目标的最佳方法是什么?如果你有一个比上面列出的更好的实践,我很乐意听听。

技术:操作系统: Windows系列平台:.NET Frame 2及以上语言: C#数据库: MS SQL2005及以上

谢谢你们!

库伦

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-03-31 19:03:50

使用资源:

这如何增加程序逻辑的复杂性?

代码语言:javascript
运行
复制
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是错误的名称。再说一次,我不认为这会增加逻辑上的必然性。

票数 4
EN

Stack Overflow用户

发布于 2010-01-16 06:48:15

.NET已经支持使用命名约定的多个区域性的多个资源:

代码语言:javascript
运行
复制
 <default resource file name>.<culture>.resx

本质上,正如Josh指出的那样,VS2008创建了一个很好的类型安全包装器来访问这些资源。

然而,VS UI公开了您可以做的最小限度的事情。

如果创建的新资源文件与默认值完全相同,请在resx之前添加区域性信息。(注意:您需要在其他地方创建它,然后将其复制到魔术属性文件夹中。)

如果您已将区域性应用于访问资源的线程,则您的应用程序将从特定资源中提取正确的字符串。

例如:

代码语言:javascript
运行
复制
    // 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来参数化输出。

需要注意的一点是,尝试以这样一种方式构建应用程序层,即异常携带丰富的有效负载(用于描述错误),而不是仅仅依赖于文本。

这样,您的表示层可以呈现最佳的UI体验,从而可以利用有效负载。

HTH

菲利普

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/702559

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档