在我的应用程序中,默认情况下是否应将Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture设置为真?

6
我有一个应用程序,面向全球市场,需要本地化。在开发过程中,我遇到了一些问题,即使我更改了区域设置,我的卫星程序集似乎从未被选中。经过一些研究,我现在明白了这是为什么,并且能够通过在代码中设置CurrentUICulture进行测试,并验证事情按预期工作。
现在,当我打包发布应用程序时,我不确定在我的应用程序启动时是否将Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture设置为当前线程是否是一个好主意。一方面,如果更改区域设置,我的应用程序将可本地化(如果这是一个优点),但我担心可能会有未预见的缺点。一个立即想到的问题是,虽然我所做的对于我的线程来说都很好,但它不适用于任何由我的应用程序创建的线程(除非我也在其中设置CurrentUICulture),或者更糟糕的是,由我使用的任何组件创建的线程。
还可能存在其他问题吗?将CurrentCultures设置为相同的内容是标准做法还是不受欢迎的做法?
在做出决定之前,我希望掌握尽可能多的关于此事的利弊信息。
谢谢
山姆
2个回答

5

Sam,除非你确信自己知道在做什么,否则不要去碰它。

我假设我们在谈论WinForms。框架从系统中获取(由用户配置)最佳设置。从你的问题来看,这可能只是一个测试问题。我经常在 #if DEBUG 之后加入一些代码来选择区域设置进行测试。

我的个人案例:我的区域设置是荷兰语(nl-NL),但我通常运行英文版Windows。如果你覆盖了CurrentUICulture,我会得到荷兰语版本(如果有的话),这通常没问题。但是,我从经验中知道,某些控件/插件将保持英文(包括ShowMessage框和标准对话框)。这种组合很丑陋。

但是,还要考虑以下情况:当您没有添加与CurrentCulture匹配的卫星时,系统将回退到程序中的默认值,而用户的UI文化可能是更好的选择。我不知道所有的回退规则,但你可能会遇到类似这样的情况:

用户在fr-FR Windows上运行fr-CA设置。你的程序回退到en-US,用户不高兴。

我的建议:

  • 进行一些现场测试
  • 如果你确实构建了覆盖,则在app.config中使用开关

谢谢,所有有用的信息。我同意这些原则,并认为我们将采用一种方法,允许切换选项的开启和关闭。 - Sam Holder

2

虽然这是一个老问题,但有一些用户和开发者的评论:

  • 我是挪威人,但我使用英文操作系统是有原因的。当应用程序以挪威语显示时,我会很讨厌,只因为我的区域设置是挪威语。
  • 我以前使用过Thread.CurrentThread.CurrentCulture,起初它似乎很好用...然后突然你有了一个触发新线程的东西...(花了很长时间才弄清楚为什么我的应用程序中数字格式正确,但在我的报告中却不正确)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接