2016-10-17 65 views
7

Pracuję nad menu dla ustawień skrótów mojej aplikacji. Aplikacja obsługuje dwa języki (angielski i niemiecki), więc muszę mieć możliwość wyświetlania łańcucha zależnego od kultury. Na przykład. Ctrl + Ins dla "en-US" i Strg + Einfg dla "de-DE".Lokalizacja klawiszy klawiatury

Biorąc pod uwagę, że ilość możliwych kluczy nie jest zbyt duża, mógłbym zdefiniować zasoby dla każdego klucza, ale zakładam, że ten problem nie jest rzadkością i powinna istnieć wbudowana funkcjonalność lub dobrze znana biblioteka do tego celu.

Próbowałem ConvertToString() z System.Windows.Forms.KeysConverter:

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

I GetDisplayStringForCulture() z System.Windows.Input.KeyGesture:

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

Ale oboje zwróć odpowiednio angielskie "Ins" i "Insert".

Po prostu szukam metody, która zaakceptuje jakąś standardową klasę klucza i kulturę i zwróci odpowiedni zlokalizowany łańcuch.

+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, nowy CultureInfo (" de-DE "), Keys.Insert, typeof (String));' 'Console.WriteLine (x);' Zwróci "Ins ". W zasadzie działa tak samo jak ConvertToString() z mojego przykładu. – invo

+0

Możesz spróbować https://github.com/SeriousM/WPFLocalizationExtension. Poza powiązaniem z DependencyProperties w Xaml (pliki WPF), można również programowo pobierać zlokalizowane wartości zasobów w kodzie. – Dima

Odpowiedz

-1

nie mam czasu, aby przetestować go na własną rękę, ale można spróbować mojego podejścia poniżej

Odnosząc się do tych dwóch stanowisk
(US English) https://msdn.microsoft.com/en-us/library/system.windows.forms.keys(v=vs.110).aspx
(niemiecki) https://msdn.microsoft.com/de-de/library/system.windows.forms.keys(v=vs.110).aspx

Strg + Einfg jest równoważny z

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

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

Aby wyświetlić bieżący język wprowadzania, możesz coul d spróbować

MsgBox(InputLanguage.CurrentInputLanguage.LayoutName) 
+0

Nie ma czasu również na przeczytanie pytania. – invo