我应该在我的应用程序中默认设置Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture吗?

时间:2009-02-04 13:16:41

标签: .net localization internationalization

我有一个适用于全球市场的应用程序,需要可以本地化。在开发过程中,我遇到了一些问题,即使我改变了我的语言环境,我的卫星组件似乎也没有被拾取。经过一些研究后,我现在明白为什么会这样,并且能够通过在代码中设置CurrentUICulture并验证事情是否按预期工作来进行测试。

现在要将应用程序打包发布,我不确定当我的应用程序启动时为当前线程设置Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture是个好主意。从好的方面来说,我的应用程序可以通过更改区域设置进行本地化(如果这是一个好的方面),但我担心可能存在不可预见的缺点。立即浮现在脑海中的是,虽然我所做的一切对我的线程都很好,但它不适用于(从我在这里和周围阅读中理解的内容)到由我的app创建的任何线程(除非我将CurrentUICulture设置为那些或更糟糕的是我使用的任何可能创建自己的线程的组件。

还有其他问题吗?是否将CurrentCultures设置为标准做法或不赞成的东西?

在做出决定之前,我希望尽可能多地了解这方面的起伏。

由于

山姆

2 个答案:

答案 0 :(得分:5)

萨姆 除非你真的确定自己在做什么,否则不要乱用它。

我假设我们在这里谈论WinForms。该框架从系统中获取可论证的最佳设置(由用户配置)。从您的问题来看,它可能只是一个测试问题。我经常在#if DEBUG之后输入一些代码来选择一个用于测试目的的语言环境。

我自己的例子:我的语言环境是荷兰语(nl-NL),但我通常运行Windows的英文版本。如果你覆盖CurrentUICulture我会得到荷兰语版本(如果可用),这通常是好的。但我从经验中知道,一些控件/加载项将保留为英语(包括ShowMessage box和std Dialogs)。这种组合很难看。

但是,如果不添加与CurrentCulture匹配的卫星,还要考虑这种情况。系统将回退到程序中的默认设置,而用户UI文化可能是更好的选择。我不知道所有的后备规则,但你可能会得到类似的东西:

用户在fr-FR窗口上运行fr-CA设置。您的计划可以追溯到en-US,用户最快乐。

我的建议:

  • 做一些现场测试
  • 如果你确实构建了覆盖,那么 使用app.config中的开关

答案 1 :(得分:2)

老问题,但是来自用户和开发人员的一些评论:

  • 我是挪威语,但我有英语操作系统是有原因的。当应用程序出现在挪威语中时,我讨厌它,因为我的区域设置是挪威语。
  • 之前我曾经使用过Thread.CurrentThread.CurrentCulture,虽然它起初看起来很不错......然后突然间你有一些东西会触发一个新的线程......(花了很长时间搞清楚为什么我得到了正确的数字格式在我的应用程序中,但不在我的报告中,例如)