2016-10-17 94 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