我有一个适用于全球市场的应用程序,需要可以本地化.在开发过程中,我遇到了一些问题,即使我改变了我的语言环境,我的卫星装配似乎也没有被拾取.经过一些研究后,我现在明白为什么会这样,并且能够通过在代码中设置CurrentUICulture并验证事情是否按预期工作来进行测试.
现在要将应用程序打包发布,我不确定当我的应用程序启动时为当前线程设置Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture是个好主意.从好的方面来说,我的应用程序可以通过更改区域设置进行本地化(如果这是一个好的方面),但我担心可能存在不可预见的缺点.立即浮现在脑海中的是,虽然我所做的一切对我的线程都很好,但它不适用于(从我在这里和周围阅读中理解的内容)到由我的app创建的任何线程(除非我设置了CurrentUICulture,或者更糟糕的是我使用的任何组件都可以创建自己的线程.
还有其他问题吗?是否将CurrentCultures设置为标准做法或不赞成的东西?
在做出决定之前,我希望能够掌握有关这方面起伏的信息.
谢谢
山姆
山姆,除非你真的确定你在做什么,否则不要乱用它.
我假设我们在这里谈论WinForms.该框架从系统中获取可论证的最佳设置(由用户配置).从您的问题来看,它可能只是一个测试问题.我经常在#if DEBUG之后输入一些代码来选择一个用于测试目的的语言环境.
我自己的例子:我的语言环境是荷兰语(nl-NL),但我通常运行Windows的英文版本.如果你覆盖CurrentUICulture我会得到荷兰语版本(如果可用),这通常是好的.但我从经验中知道,一些控件/加载项将保留为英语(包括ShowMessage box和std Dialogs).这种组合很难看.
但是,如果不添加与CurrentCulture匹配的卫星,也要考虑这种情况.系统将回退到程序中的默认设置,而用户UI文化可能是更好的选择.我不知道所有的后备规则,但你可能会得到类似的东西:
用户在fr-FR窗口上运行fr-CA设置.您的计划可以追溯到en-US,用户也很高兴.
我的建议:
做一些现场测试
如果你构建了覆盖,那么在app.config中使用一个开关