【问题标题】:How to get culture information from current keyboard layout in windows?如何从 Windows 中的当前键盘布局中获取文化信息?
【发布时间】:2022-02-02 18:08:14
【问题描述】:

我想将十进制值从我的程序复制到 Excel,反之亦然。我的程序将双精度值格式化为带有“。”的字符串。作为小数分隔符,但如果我将这些值粘贴到 excel 中,它们将被格式化为日期,因为我的 excel 程序以某种方式适用于不同的文化,即使我的操作系统是英语并且 Excel 是用英语安装的,但我使用的是德语键盘布局。所以我猜excel决定了它的文化格式。

我知道我可以通过将区域性参数化到 .ToString() 和 Parse 方法中来防止解析错误:

value.ToString(CultureInfo.CreateSpecificCulture("de-DE"));
double.TryParse(string, NumberStyles.Float, CultureInfo.CreateSpecificCulture("de-DE"), out y);

问题是我不了解客户的文化,他们在世界各地工作,而我的课程是英语。但我不能只使用英文格式,因为它在粘贴到 excel 时会引起麻烦。

我试图通过以下方式了解当前的文化:

CultureInfo currentCulture = CultureInfo.CurrentUICulture;
CultureInfo currentCulture = CultureInfo.CurrentCulture;

第一个返回“en-US”,第二个返回“”不变文化。 所以这对我一点帮助都没有。

有没有办法从 Windows 中读取当前活动键盘布局中的文化信息?或者是否可以直接从excel中检索信息?或者有人对我的问题有更好的解决方案吗?我不认为我是第一个遇到这种情况的人,但我在 google 上找不到任何有用的东西。

【问题讨论】:

  • 这听起来像是您选择了“,”作为小数点分隔符的系统设置。

标签: c# excel


【解决方案1】:

好吧,没关系,我找到了解决方案:

对于 WPF,它是:

string currentKeyboardLayout = System.Windows.Input.InputLanguageManager.Current.CurrentInputLanguage.Name;
CultureInfo culture = CultureInfo.CreateSpecificCulture(currentKeyboardLayout);

见:Detect system language change in WPF

对于 Windows 窗体,您可以使用:

string test = InputLanguage.CurrentInputLanguage.Culture.Name;

见:Detect current keyboard language/layout name in multi-language computer

【讨论】:

  • 我注意到InputLanguage.CurrentInputLanguageSystem.Windows.Forms 中,因此它不适用于/不适用于非 WinForms 项目,如 WPF、ASP.NET、控制台、Windows 服务等。在 .NET Core 中/ .NET 5+ 它仅在面向“Windows 桌面”平台的 .NET 项目中可用。
  • 谢谢@Dai 我没有注意到这一点,但是很好,因为我想在 WPF 上下文中使用它。幸运的是,有一个 System.Windows.Input 等效项:string currentKeyboardLayout = System.Windows.Input.InputLanguageManager.Current.CurrentInputLanguage.Name;
【解决方案2】:

此方法可用于获取输入语言并展示如何将其与您的文本框显示一起使用。

public void MyCurrentInputLanguage() {
    // Gets the current input language  and prints it in a text box.
    InputLanguage myCurrentLanguage = InputLanguage.CurrentInputLanguage;
    textBox1.Text = "Current input language is: " +
    myCurrentLanguage.Culture.EnglishName;
}

Source

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-21
    • 1970-01-01
    • 2014-02-24
    • 2012-05-01
    相关资源
    最近更新 更多