我正在研究一个相对复杂的 .NET 应用程序的本地化。要求不仅是翻译 UI 和切换日期和数字格式 - 还要为某些区域设置不同的算法(例如 - 当地税收规则)。
有没有一种简单的方法可以在 .NET 中实现这一点(比如资源的附属程序集)?
我正在研究一个相对复杂的 .NET 应用程序的本地化。要求不仅是翻译 UI 和切换日期和数字格式 - 还要为某些区域设置不同的算法(例如 - 当地税收规则)。
有没有一种简单的方法可以在 .NET 中实现这一点(比如资源的附属程序集)?
应用程序字符串的直接本地化相当简单,您使用适当命名的资源文件并允许 .Net 运行时完成繁重的工作,以确保根据您的 UICulture 设置加载适当的资源。
当您开始引入基于语言环境的业务规则时,它会变得更加复杂,没有内置功能可以帮助管理这一点 - 相反,您必须自己编写代码。有很多事情需要考虑。
我使用并发现效果很好的一种方法是:
Assembly.Load(name)
)。使用像 Unity 这样好的 IoC 框架会有所帮助,您可以通过编程方式注册和解析接口到实际的类实例。或者, Microsoft 的企业库(“EntLib”)为您提供声明性插件功能,因此您可以使用配置文件来指示发现和加载哪些程序集。 DynamicResource
标记扩展不足以满足我的需要)。其中一些可能适用于您,如果不是,我希望它可以帮助您朝着正确的方向前进。如果可能,请尝试使用 EntLib 之类的产品,尽管这可能有点矫枉过正,或者对您来说不够灵活。我能建议的最好的事情是在开始编码之前做大量的思考和设计,否则如果你发现你选择了错误的选项,可能很难返工。通过您的应用程序部署良好的结构化本地化模式不应该以随机或临时的方式完成。
*通常您不需要在后台线程(.Net 4.5 之前)上设置区域性,除非您正在进行特定于区域性的字符串比较。如果您确实需要在后台线程上设置特定的文化,请注意何时需要并为其设计。考虑将文化作为参数注入需要它的功能。或者将业务区域设置存储在应用程序级别变量中并根据需要读取它。