【问题标题】:recognize my system current Language [duplicate]识别我的系统当前语言[重复]
【发布时间】:2013-12-20 22:51:29
【问题描述】:

我想在我的表单中有一个标签,并在我的系统语言更改时更改其文本

类似这样的:

else if (Thread.CurrentThread.CurrentCulture.Name == "en-US")
        {
            label1.Text = "En";
        }
        else
            label1.Text = "Not En";

1:这段代码总是显示“En”,我该怎么办?

2:如果我希望它始终检查,我应该把我的代码放在哪里?

【问题讨论】:

  • 如果不注销并重新登录,您将无法更改系统默认语言。我猜测您实际上只是更改了键盘布局。在 superuser.com 上询问如何正确操作。
  • +1 对 Hans Passant 的评论 - 我建议重复谈论输入语言(即键盘输入),而不是系统当前的 UI 语言。

标签: c#


【解决方案1】:

您需要阅读 .Net 中的全球化知识。您要做的是创建资源文件,每种支持的语言一个,然后让基础架构找出用于给定资源 ID 的适当资源。

http://msdn.microsoft.com/en-us/library/vstudio/aa992030(v=vs.100).aspx

我建议使用ResourceBlenderZeta Resource Editor 之类的工具来帮助翻译。默认的 Visual Studio 支持......不是很好。

【讨论】:

    【解决方案2】:

    由于这是一个用户界面,您有一个消息循环,您可以使用SystemEvents.UserPreferenceChanged event 检测区域/语言设置更改。但是,即使在使用该事件之后,您仍需要使用 ClearCachedData 刷新 CultureInfo。下面是一个打印到输出窗口的非常基本的实现。请注意,SystemEvents.UserPreferenceChanged 是一个静态事件,因此您需要在表单关闭时与该事件分离,否则它将保持表单实例处于活动状态。

    public AppForm() // constructor
    {
        SystemEvents.UserPreferenceChanged += SystemEvents_UserPreferenceChanged;
    }
    
    private void SystemEvents_UserPreferenceChanged(object sender, UserPreferenceChangedEventArgs e)
    {
        Debug.Print("Settings changed category: {0}", e.Category);
        CultureInfo.CurrentCulture.ClearCachedData();
        CultureInfo.CurrentUICulture.ClearCachedData();
        Debug.Print("Current Culture: {0}", CultureInfo.CurrentCulture);
        Debug.Print("Current UI Culture: {0}", CultureInfo.CurrentUICulture);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-29
      • 2015-08-07
      • 2016-01-06
      • 1970-01-01
      • 2015-03-18
      • 1970-01-01
      相关资源
      最近更新 更多