6

I would like to test how my app would work under different cultures. So for testing purposes, under Windows 7, I tried to change CurrentUICulture in system settings.

This seems to be the right option: Language for non-Unicode programs as suggested here, but it does not work, i.e. app's locale is still English.

I also tried this in Region and Language dialog:

  • Formats: change Format to another culture
  • Location: set current location to another country.

The question is what should I set in Windows 7 for it to affect:

Thread.CurrentThread.CurrentUICulture

instead of having to write this:

Thread.CurrentThread.CurrentUICulture = New CultureInfo("fr")

Ultimately, this code should pick the correct culture, get the correctly suffixed resource file and display it on the screen (which it does with the above line in place):

Label1.Text = My.Resources.Form1Resource.TestString

A similar question has been asked on StackOverflow, but none of the answers addressed this issue.

4

3 回答 3

12

该旋钮位于“区域和语言”控制面板的“键盘和语言”选项卡上。单击“安装/卸载语言...”按钮开始。如果您只安装了一种 UI 语言,则需要安装另一种。向导应引导您完成此操作。您还必须注销并重新登录才能看到效果。

在大多数情况下,该CurrentUICulture属性将返回用户首选 UI 语言列表中的第一种语言,因此设置它就足够了。其他语言用作备用语言,以防首选语言中没有必要的资源。

但是CurrentUICulture用于确定 UI 文化的实际算法要复杂一些:

  • 首先,它检查DefaultThreadCurrentUICulture属性。如果不是null,它将返回任何已设置为当前应用程序域中所有线程默认值的 UI 文化。
  • 如果DefaultThreadCurrentUICulturenull,则调用该GetUserDefaultUILanguage函数。
    • 该函数检查当前用户是否设置了首选的 UI 语言,就像我在开始时描述的那样。如果是这样,它会返回该语言。
    • 如果用户未设置 UI 语言,则该函数返回为系统设置的 UI 语言。这是由管理员在“区域和语言”控制面板的“高级”选项卡中完成的,需要重新启动才能生效。
    • 如果没有为系统设置首选语言,则使用系统默认的UI 语言。这是 Windows 本地化版本(XP 和更早版本)的语言,或者是安装期间选择的语言(Vista 和更高版本)。

当然,这种测试方法可能有点矫枉过正,因为它正在更改全局设置(至少,对于您的整个用户帐户)。由于当前的 UI 文化是按线程维护的,因此您可以仅为应用程序的线程对其进行修改。为此,请设置Thread.CurrentUICulture属性。如果您的应用程序是多线程的,您可能需要设置该DefaultThreadCurrentUICulture属性以确保其他线程选择正确的区域性。这个问题说你已经找到了这个,但我不清楚你为什么不想使用它。

此外,请注意不要将 UI 语言与区域设置混淆;他们不一样。CurrentCulture是语言环境,它设置日期/数字/时间格式和排序顺序等内容。CurrentUICulture是 UI 语言,它处理加载正确本地化的资源。它们可能是一样的,我想它们经常是一样的,但它们不一定是。在某些情况下,用户可能希望它们有所不同;例如,如果他们说英语并更喜欢本地化的英语版本,但希望看到根据他们的习惯格式化的日期和时间等内容。

于 2013-06-11T20:22:20.057 回答
1

You can set UI culture System.Globalization.CultureInfo.CurrentUICulture on windows machine in: Control Panel\Clock, Language, and Region\Language:

System.Globalization.CultureInfo.CurrentUICulture

And in case if you want to set System.Globalization.CultureInfo.CurrentCulture in your windows machine go to Control Panel\Clock, Language, and Region ,and select Region:

System.Globalization.CultureInfo.CurrentCulture

In your code you can just use this to get those values:

  • Thread.CurrentThread.CurrentUICulture = System.Globalization.CultureInfo.CurrentUICulture;

  • Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.CurrentCulture;

Source: CurrentCulture vs. CurrentUICulture

于 2016-10-05T22:20:58.960 回答
0

因此,我尝试使用不同的方式安装法语语言包以进行测试,但都失败了。离线和在线安装,原样或重启后。得到错误代码 800736B3(用于在线)或根本没有代码用于离线安装。尝试了适用于 Windows 7 的系统更新准备工具(390MB msu 包),这是修复此错误代码的最常见方法。在线和离线安装程序仍然存在相同的问题。总共花了大约 4-5 个小时,我开始理解为什么@Cody 建议继续使用它(出于测试目的):

Thread.CurrentThread.CurrentUICulture = New CultureInfo("fr")
于 2013-06-12T18:37:08.320 回答