【问题标题】:Should I set Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture by default in my app?我应该在我的应用程序中默认设置 Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture 吗?
【发布时间】:2009-02-04 13:16:40
【问题描述】:

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

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

会不会有其他问题?将 CurrentCultures 设置为与标准做法相同的东西还是令人不悦的东西?

在做出决定之前,我希望尽可能多地了解这件事的起起落落。

谢谢

山姆

【问题讨论】:

    标签: .net localization internationalization


    【解决方案1】:

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

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

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

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

    用户在 fr-FR 窗口上运行 fr-CA 设置。您的程序回退到 en-US,用户非常高兴。

    我的建议:

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

    【讨论】:

    • 谢谢,所有有用的信息。我同意这些原则,并认为我们将使用一种允许打开和关闭选项的方法。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-06-16
      • 2011-07-13
      • 2014-01-02
      • 1970-01-01
      • 2018-11-18
      • 2011-05-11
      • 2020-04-09
      相关资源
      最近更新 更多