2016-10-17 70 views
7

我正在为我的应用程序的快捷方式设置菜单上工作。应用程序确实支持两种语言(英语和德语),所以我需要能够显示文化依赖字符串。例如。 “en-US”为Ctrl + Ins,“de-DE”为Strg + Einfg。键盘按键本地化

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

我从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”。

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

+0

http://stackoverflow.com/questions/37100079/how-to-get-the-localized-keyboard-key-name-in-vs-c-sharp? – CodeCaster

+0

@CodeCaster 'var x = kc.ConvertTo(null,new CultureInfo(“de-DE”),Keys.Insert,typeof(String));' 'Console.WriteLine(x);' 将返回“Ins ”。因此基本上和我的例子中的ConvertToString()方法一样。 – invo

+0

你可以试试https://github.com/SeriousM/WPFLocalizationExtension。除了绑定到Xaml中的DependencyProperties(WPF东西)之外,您还可以在代码中以编程方式检索本地化资源值。 – Dima

回答

-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)) {... 

要显示当前输入语言, d试试

MsgBox(InputLanguage.CurrentInputLanguage.LayoutName) 
+0

似乎没时间读问题了。 – invo