0

我正在研究一个相对复杂的 .NET 应用程序的本地化。要求不仅是翻译 UI 和切换日期和数字格式 - 还要为某些区域设置不同的算法(例如 - 当地税收规则)。

有没有一种简单的方法可以在 .NET 中实现这一点(比如资源的附属程序集)?

4

1 回答 1

1

应用程序字符串的直接本地化相当简单,您使用适当命名的资源文件并允许 .Net 运行时完成繁重的工作,以确保根据您的 UICulture 设置加载适当的资源。

当您开始引入基于语言环境的业务规则时,它会变得更加复杂,没有内置功能可以帮助管理这一点 - 相反,您必须自己编写代码。有很多事情需要考虑。

我使用并发现效果很好的一种方法是:

  • 在应用程序启动时确定适用于业务规则的位置/区域设置。就我而言,此信息存储在数据库中。当您有一个比字符串本地化更复杂的要求时,您不能依赖起始线程的UICulture - 当您安装 Windows 时,它将默认为 en-US 文化,您需要适应无法纠正的频繁用户数量这个。
  • 使用该语言环境信息来动态加载任何可插入程序集(使用Assembly.Load(name))。使用像 Unity 这样好的 IoC 框架会有所帮助,您可以通过编程方式注册和解析接口到实际的类实例。或者, Microsoft 的企业库(“EntLib”)为您提供声明性插件功能,因此您可以使用配置文件来指示发现和加载哪些程序集。
  • 将先前发现的语言环境应用于初始 (UI) 线程的 UICulture * 有助于从主题和通用资源(即非字符串特定)程序集中获取特定于语言环境的字符串和主题。使用 WPF 时,这允许我加载特定于语言环境的颜色、控件模板、图像(有些带有文本)等。
  • 我编写了一个自定义标记扩展,用于在 XAML 中注入在主题文件中动态加载的字符串(DynamicResource标记扩展不足以满足我的需要)。
  • 我编写了一个自定义转换器来帮助使用特定于语言环境的图像(当您有带有文本的图像时,内置的 .Net 框架本地化功能对您没有帮助)

其中一些可能适用于您,如果不是,我希望它可以帮助您朝着正确的方向前进。如果可能,请尝试使用 EntLib 之类的产品,尽管这可能有点矫枉过正,或者对您来说不够灵活。我能建议的最好的事情是在开始编码之前做大量的思考和设计,否则如果你发现你选择了错误的选项,可能很难返工。通过您的应用程序部署良好的结构化本地化模式不应该以随机或临时的方式完成。

*通常您不需要在后台线程(.Net 4.5 之前)上设置区域性,除非您正在进行特定于区域性的字符串比较。如果您确实需要在后台线程上设置特定的文化,请注意何时需要并为其设计。考虑将文化作为参数注入需要它的功能。或者将业务区域设置存储在应用程序级别变量中并根据需要读取它。

于 2014-02-04T09:33:02.800 回答