认识我的系统当前语言

时间:2013-12-20 22:51:29

标签: c#

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

这样的事情:

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

1:此代码始终显示“En”,我该怎么办?

2:如果我想要它,我应该把我的代码放在哪里检查?

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

由于这是一个用户界面,您有一个消息循环,您可以使用SystemEvents.UserPreferenceChanged event检测区域/语言设置更改。但即使使用该事件,您仍需要使用CultureInfo刷新ClearCachedData。下面是一个打印到Output窗口的真正基本实现。请注意,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);
}