键盘键本地化

时间:2016-10-17 14:56:07

标签: c# .net localization

我正在处理我的应用程序的快捷方式设置菜单。应用程序支持两种语言(英语和德语),因此我需要能够显示文化依赖的字符串。例如。 Ctrl + Ins表示“en-US”,而Strg + Einfg表示“de-DE”。

考虑到可能的密钥数量不是很大,我可以为每个密钥定义资源,但我认为这个问题并不少见,并且应该有内置的功能或为此目的而熟知的库。

我在System.Windows.Forms.KeysConverter中尝试过ConvertToString():

var kc = new System.Windows.Forms.KeysConverter();
var de = kc.ConvertToString(null, new CultureInfo("de-DE"), Keys.Insert);
Console.WriteLine(de);

来自System.Windows.Input.KeyGesture的GetDisplayStringForCulture():

System.Windows.Input.KeyGesture kg = new KeyGesture(Key.Insert);
var de = kg.GetDisplayStringForCulture(new CultureInfo("de-AT"));
Console.WriteLine(de);

但他们两人分别返回英文“Ins”和“Insert”。

所以基本上我正在寻找接受某种标准密钥类和文化并返回各自本地化字符串的方法。

1 个答案:

答案 0 :(得分:-1)

我没有时间自己测试,但你可以尝试下面的方法

参考这两篇文章
(美国英语) https://msdn.microsoft.com/en-us/library/system.windows.forms.keys(v=vs.110).aspx
(德国) https://msdn.microsoft.com/de-de/library/system.windows.forms.keys(v=vs.110).aspx

Strg + Einfg等同于

'VB
If E.KeyCode = (Keys.Control Or Keys.Insert) Then...

//C#
if (e.KeyCode == (Keys.Control | Keys.Insert)) {...

要显示当前输入语言,您可以尝试

MsgBox(InputLanguage.CurrentInputLanguage.LayoutName)