CultureInfo在设计时不变

时间:2017-02-21 12:17:40

标签: c# winforms resources windows-forms-designer cultureinfo

我在设计时支持中使用了资源文件进行本地化。将为设计器操作项检索本地化字符串,以便在控件的设计器中添加。这是我用来从设计模式中的资源管理器获取当前文化的代码。

if (resourceManager != null)
{
   CultureInfo currentUICulture = CultureInfo.CurrentUICulture;
   if (resourceManager.GetResourceSet(currentUICulture, true, true) != null)
   {
       ResourceManager result = resourceManager;
       return result;
   }
}

我已使用表单级别的以下代码更改了当前的文化。

 public Form1()
{

    Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("fr-FR");
    Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("fr-FR");

    CultureInfo.CurrentCulture = new CultureInfo("fr-FR");
    CultureInfo.CurrentUICulture = new CultureInfo("fr-FR");

    InitializeComponent();

 }

我的问题 - 在设计时未检索到法语的更改文化。文化得到的是一直在美国。

enter image description here

有谁知道,如何在运行时改变文化以反映上述问题?

此致 Amal Raj

1 个答案:

答案 0 :(得分:1)

考虑以下事实:

  • CultureInfo.CurrentUICulture返回当前的线程UI文化。
  • 您在视觉工作室的设计时间是视觉工作室的运行时间。
  • Form1的构造函数不会在设计时执行。它的InitializeComponent methis将被反序列化以初始化其基类Form的一个实例,该实例在VS设计器中显示。

由于您当前的线程是Visual Studio UI线程,并且它在您的系统中使用en-US,因此您将在设计时收到en-US作为当前UI线程。