Neo*_*isk 6 vb.net globalization winforms
我想测试一下我的应用程序在不同文化下的工作方式.因此,出于测试目的,在Windows 7下,我尝试更改CurrentUICulture系统设置.
这似乎是正确的选择:Language for non-Unicode programs 如此处所示,但它不起作用,即应用程序的语言环境仍然是英语.
我也在Region and Language对话框中试过这个:
问题是我应该在Windows 7中设置什么才能影响:
Thread.CurrentThread.CurrentUICulture
Run Code Online (Sandbox Code Playgroud)
而不是写这个:
Thread.CurrentThread.CurrentUICulture = New CultureInfo("fr")
Run Code Online (Sandbox Code Playgroud)
最终,这段代码应该选择正确的文化,获取正确的后缀资源文件并将其显示在屏幕上(它与上面的行一样):
Label1.Text = My.Resources.Form1Resource.TestString
Run Code Online (Sandbox Code Playgroud)
StackOverflow也提出了类似的问题,但没有一个答案解决了这个问题.
Cod*_*ray 11
旋钮位于"区域和语言"控制面板的"键盘和语言"选项卡上.单击"安装/卸载语言..."按钮开始.如果您只安装了一种UI语言,则需要安装另一种语言.向导应该引导您完成此操作.您还必须注销并重新登录才能看到效果.
在大多数情况下,该CurrentUICulture属性将返回用户首选UI语言列表中的第一种语言,因此设置此值应该足够了.其他语言用作后备语言,以防首选语言中没有必要的资源.
但CurrentUICulture用于确定UI文化的实际算法有点复杂:
DefaultThreadCurrentUICulture财产.如果不是null,则返回当前应用程序域中所有线程的默认UI文化.DefaultThreadCurrentUICulture是null,则调用该GetUserDefaultUILanguage函数.
当然,这种测试方法可能有点过分,因为它正在改变全局设置(至少对于整个用户帐户而言).由于当前UI文化是按线程维护的,因此您可以仅针对应用程序的线程进行修改.为此,请设置Thread.CurrentUICulture属性.如果您的应用程序是多线程的,您可能需要设置该DefaultThreadCurrentUICulture属性以确保其他线程获取正确的文化.问题是你已经找到了这个,但我不清楚为什么你不想使用它.
另外,请注意将UI语言与语言环境混淆; 他们不一样.CurrentCulture是区域设置,它设置日期/数字/时间格式和排序顺序.CurrentUICulture是UI语言,它处理加载正确本地化的资源.它们可能是相同的,我想它们经常是,但它们不一定是.在某些情况下,用户可能希望它们不同; 例如,如果他们说英语并且更喜欢本地化的英文版本,但希望看到根据他们的习惯格式化的日期和时间等内容.