我想在我的表单中添加标签,并在系统语言更改时更改其文本
这样的事情:
else if (Thread.CurrentThread.CurrentCulture.Name == "en-US")
{
label1.Text = "En";
}
else
label1.Text = "Not En";
1:此代码始终显示“En”,我该怎么办?
2:如果我想要它,我应该把我的代码放在哪里检查?
答案 0 :(得分:0)
您需要阅读.Net中的全球化。您要做的是创建资源文件,每个支持的语言一个,并让基础设施找出用于给定资源ID的适当资源。
http://msdn.microsoft.com/en-us/library/vstudio/aa992030(v=vs.100).aspx
我建议您使用ResourceBlender或Zeta 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);
}