【问题标题】:Keyboard keys localization键盘按键本地化
【发布时间】:2017-02-26 15:06:58
【问题描述】:

我正在为我的应用程序的快捷方式设置菜单。应用程序确实支持两种语言(英语和德语),所以我需要能够显示依赖于文化的字符串。例如。 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”。

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

【问题讨论】:

  • @CodeCaster var x = kc.ConvertTo(null, new CultureInfo("de-DE"), Keys.Insert, typeof (String)); Console.WriteLine(x); 将返回“Ins”。所以基本上和我的例子中的 ConvertToString() 一样。
  • 你可以试试github.com/SeriousM/WPFLocalizationExtension。除了绑定到 Xaml(WPF 内容)中的 DependencyProperties 之外,您还可以在代码中以编程方式检索本地化的资源值。
  • @Yeah69 我的问题不在于使用资源,而是在没有资源无法管理的情况下填充资源。
  • @Yeah69 对不起。我之前的评论有点误导。我想说的是,键名在一种语言中没有变化,所以每个程序员都会为自己的应用程序定义自己的字符串资源的想法是很不舒服的。因此,也许有一种方法可以获得一些可以包含在解决方案中的源,以便为开发人员提供必要的本地化键名。

标签: c# .net localization


【解决方案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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-12
    • 2011-06-14
    相关资源
    最近更新 更多