vb.net - 从.NET应用程序的角度来看,CurrentUICulture设置在Windows 7中的哪个位置?

标签 vb.net winforms globalization

我想测试我的应用在不同文化下的工作方式。
因此,出于测试目的,在Windows 7下,我尝试在系统设置中更改CurrentUICulture

这似乎是正确的选择:Language for non-Unicode programs as suggested here,但是它不起作用,即应用程序的语言环境仍然是英语。

我也在Region and Language对话框中尝试了此操作:

  • 格式:将格式更改为另一种文化
  • 位置:将当前位置设置为另一个国家。

  • 问题是我应该在Windows 7中设置什么才能影响它:
    Thread.CurrentThread.CurrentUICulture
    

    不必写这个:
    Thread.CurrentThread.CurrentUICulture = New CultureInfo("fr")
    

    最终,此代码应选择正确的区域性,获取正确后缀的资源文件,并将其显示在屏幕上(这与上一行内容相同):
    Label1.Text = My.Resources.Form1Resource.TestString
    

    A similar question has been asked on StackOverflow,但是没有一个答案解决了这个问题。

    最佳答案

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

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

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

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

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

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

    关于vb.net - 从.NET应用程序的角度来看,CurrentUICulture设置在Windows 7中的哪个位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17052214/

    相关文章:

    c# - 通过 C# 递归通知子控件

    angularjs - 如何使用cordova angularjs获取设备的语言?

    ruby-on-rails - 在 Rails 中本地化嵌套的虚拟属性

    mysql - 表单中的 TextBox 值并使用 VB.NET 将其显示到 Crystal Reports

    vb.net - 从 "Case"语句中省略 "Select...Case"

    c# - 带有布局引擎的自定义面板

    jquery 全局化与 parseFloat 验证的问题

    vb.net - 如何编写线程安全的方法?

    .net - "There is already an open DataReader..."重用或处置数据库连接?

    c# - 我如何获得 RadGridView 列总和?