c# - 本地化 VirtualKey.Control (WinRT)

标签 c# windows windows-runtime winrt-xaml

我想本地化 VirtualKey for Control。 目前有这样的代码:

using Windows.System;
var message = "Press " + VirtualKey.Control.ToString() + " + D for deletion!";

是否有一个 API 可以用来实现以下功能?

  • 按 Control + D 进行删除! (在英文系统上)
  • 按 Steuerung + D 删除! (在德国系统上)

最佳答案

由于VirtualKey是一个枚举,不能直接翻译枚举中的成员,但可以作为资源文件的key,构建本地化系统:

我关注了this在 Windows 8.1 应用程序上构建简单本地化系统的教程;这些是我遵循的步骤(总结)

  1. 创建一个名为“Strings”的文件夹
  2. 在该文件夹内,为您要支持的默认语言创建一个文件夹并相应地命名它(查看可能代码的完整列表 here)
  3. 在该文件夹中创建 Resources.resw 文件
  4. 添加你想添加的字符串 - 如果你想支持VirtualKey.xxx.ToString()的使用,我强烈建议你使用与枚举相同的标识符;例如:如果您想翻译控制字符,请将新资源称为“Control” -(这就是我所做的):How I did
  5. 复制并粘贴该文件夹的次数等于您要支持的语言数量(我做了两次): Folders
  6. 根据您要翻译的目标语言编辑 Resource.resx 文件。
  7. 在代码中,引用每个翻译后的字符串

    var loader = new Windows.ApplicationModel.Resources.ResourceLoader();
    loader.GetString(VirtualKey.xxx.ToString());
    

    这就是我在 MainPage.xaml 中对 TextBlock 所做的:

    var loader = new Windows.ApplicationModel.Resources.ResourceLoader();
            this.txbCtrl.Text = String.Format("Press {0}-Z to undo", loader.GetString(VirtualKey.Control.ToString()));
    

这就是 it-IT 语言的结果: enter image description here

为了测试其他语言,我遵循了教程,即使我不喜欢它:

  1. 打开控制面板并转到“时钟、语言和区域”>“语言”
  2. 请注意,应用程序运行时显示的语言是列出的最上面的语言,在我的系统上是意大利语。
  3. 要使用其他语言测试该应用,请在列表中选择该语言,然后点击上移直到它位于顶部。然后运行该应用。

注意:如果您的计算机上没有这三种语言,请单击“添加语言”并将它们添加到列表中来添加缺少的语言。

在我的例子中,我将意大利语列为第一个,将英语(英国)列为第二个,但如果我交换它们: Mylangs

再次运行应用程序,这是结果 Result

如果我添加 de-DE: enter image description here

使用这些资源文件: zh-CN: en-GB

还有它-IT: it-IT

和去DE: de-DE

请注意,我将英语控制键称为“Control”,将意大利语称为“Ctrl”;它完美地工作

希望对您有所帮助。

如果您有更多问题,请尽管提问!

卢克斯贾米

编辑:这是一个解决方案,尽管我承认这不是一个好的解决方案(无论如何,这是我能想到的最好的)。无论如何,如上所述here对于 WinForm 应用程序,没有必要这样做,因为如果您使用键的默认名称(即枚举中的名称,就像您现在所做的那样),每个人都会理解您。

EDIT2:然而,这个解决方案为您的应用程序的 future “完全”本地化设置了一切。这样,在开发过程开始时就完成了一半的工作。

关于c# - 本地化 VirtualKey.Control (WinRT),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40427586/

相关文章:

c# - 如何将 pdf 存储到 HTML 对象

c# - WPF:具有重复对象引用的 SelectedItems

c# - 具有多个条件的 while 语句

c# - 通过使用 c# 传递星期几、月份星期、年份月份和年份来获取日期

reactjs - 是否有可能使React-Electron Standalone应用程序始终保持领先地位?

java - 在 Linux Java 中动态加载类

java - Path.equals() 在 Windows 10 上为两个不同的文件夹(小写 m 和大写 M)返回 true

c# - 在 Windows 应用商店应用程序的文本框焦点事件上弹出屏幕键盘

c# - 如何通过 3G 连接检查互联网连接状态?

c# - 在 FlipView 的 KeyDown 事件中处理方向键