Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

update zh-cn translation #8185

Closed
wants to merge 36 commits into from
Closed
Changes from 1 commit
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
0de8ab0
improve translate _summary.md
ymzcdg Feb 13, 2020
d3aabf7
update doc zh-cn contributing.md
ymzcdg Feb 14, 2020
278fa43
update zh-cn custom_quantum_functions.md
ymzcdg Feb 15, 2020
f3bbd09
update zh-cn faq.md
ymzcdg Feb 16, 2020
518aaa5
update zh-cn faq_build.md & faq_debug
ymzcdg Feb 16, 2020
0084cc6
update and fix faq_debug.md
ymzcdg Feb 16, 2020
f6dddf5
fix zh-cn faq_debug.md
ymzcdg Feb 16, 2020
c4c840c
fix bug zh-cn
ymzcdg Feb 17, 2020
8f0c4d7
fix _summary.md
ymzcdg Feb 17, 2020
2601183
update zh-cn faq_general.md
ymzcdg Feb 17, 2020
640dedc
reupload zh-cn faq_general.md
ymzcdg Feb 18, 2020
2a026be
fix doc/getting_started_introduction.md
ymzcdg Feb 20, 2020
a2e644d
upload translation
ymzcdg Feb 21, 2020
8deebe9
update doc/zh-cn/newbs.md
ymzcdg Feb 26, 2020
70a2a3b
update doc/zh-cn/newbs_building_firmware.md
ymzcdg Feb 26, 2020
6c066e6
undo update
ymzcdg Feb 26, 2020
c924b12
update doc/zh-cn/newbs_building_firmware.md
ymzcdg Feb 26, 2020
373f663
update doc/zh-cn/newbs_flashing.md
ymzcdg Feb 26, 2020
478ef2a
update doc/zh-cn/newbs_getting_started.md
ymzcdg Feb 26, 2020
7a476e6
update docs/zh-cn/newbs_learn_more_resources.md
ymzcdg Feb 27, 2020
b954667
update docs/zh-cn/newbs_learn_more_resources.md
ymzcdg Feb 28, 2020
585cd05
update docs/zh-cn/newbs_testing_debugging.md
ymzcdg Feb 28, 2020
45a861e
fix docs/newbs_building_firmware_configurator.md
ymzcdg Feb 28, 2020
4960f6f
update docs/zh-cn/newbs_git_best_practices.md
ymzcdg Feb 29, 2020
db82e1d
upload docs/zh-cn/how_keyboards_work.md
ymzcdg Mar 2, 2020
dd792fd
fix docs/zh-cn/how_keyboards_work.md comment
ymzcdg Mar 5, 2020
8885e69
fix docs/zh-cn/custom_quantum_functions.md comment
ymzcdg Mar 5, 2020
5a78bff
fix docs/zh-cn/newbs_flashing.md comment
ymzcdg Mar 5, 2020
67576c9
Update docs/zh-cn/custom_quantum_functions.md
ymzcdg Mar 13, 2020
a9577de
fix zh-cn/custom_quantum_functions.md
ymzcdg Mar 13, 2020
04b1560
Merge branch 'master' into master
ymzcdg Mar 13, 2020
8bdfa5c
up zh-cn/newbs_git_resolving_merge_conflicts.md
ymzcdg Mar 13, 2020
80c11a9
upload zh-cn docs
ymzcdg Mar 13, 2020
d0dce84
update docs/zh-cn/faq_general.md
ymzcdg Mar 14, 2020
bcb6ad1
update docs/zh-cn/getting_started_getting_help.md
ymzcdg Mar 14, 2020
2909a72
upload docs/zh-cn/understanding_qmk.md
ymzcdg Mar 15, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
80 changes: 80 additions & 0 deletions docs/zh-cn/how_keyboards_work.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
# 计算机是如何注册并解释键的

在本文中,你将会学习键盘通过USB工作的概念,
你将会更好的理解直接改变你的固件可以得到什么。


## 示意图

当你敲击某个键时,将会发生以下一系列事情
如下所示:

``` text
+------+ +-----+ +-----+ +-------+ +----------+
| 用户 |-------->| 键 |------>| 固件 |----->| USB线 |---->| 操作系统 |
+------+ +-----+ +-----+ +-------+ +----------+
```

示意图简化的阐释了发生的事情,接下来的章节中将会详细解释。


## 1. 按下某个键

每当你按下某个键,你键盘的固件就记录了这个事件。<!--TODO:翻译成记录的这个词是:register,也可能翻译成"注册",暂定"记录",有更好的请改正>
ymzcdg marked this conversation as resolved.
Show resolved Hide resolved
可以被记录的事件包括按下,保持和释放。

这通常伴随着周期性按键扫描发生。此速度通常受机械键响应时间,协议传输(此时为USB HID协议)耗时和固件影响。

## 2. 固件发送了什么

[HID规范](https://www.usb.org/sites/default/files/documents/hut1_12v2.pdf)说明了实际上键盘发送了什么才有可能被正确识别。这包括一个`0x00` 到 `0xE7`的简单数字组成的预定义键盘扫描码列表。固件为键盘的每个键分配一个扫描码。

固件并不发送实际的字母或字符,仅发送扫描码。
因此,通过定制固件你可以自定义某个键向USB发送什么扫描码。


## 3. 内核的输入处理做了什么

*扫描码*与*键码*的对应关系因键盘而异,详见[60-keyboard.hwdb at Master](https://github.com/systemd/systemd/blob/master/hwdb.d/60-keyboard.hwdb)。没有这个映射,操作系统将不会收到有效的键码也不能做出应有的反应。<!--TODO:这节题目实在不会翻译,直接翻译根本无法理解,一定是由于我对这节理解不透。不过文档说的不清楚,这个"the Event Input/Kernel"是个啥也不知道>

## 4. 操作系统做了什么

当键码到达操作系统,一些软件必须基于键盘布局将它与实际字符匹配
比如
如果你的布局设置为QWERTY,简化对应表如下:

| 键码 | 字符 |
|------|------|
| 0x04 | a/A |
| 0x05 | b/B |
| 0x06 | c/C |
| ... | ... |
| 0x1C | y/Y |
| 0x1D | z/Z |
| ... | ... |

## 再谈固件开发

由于布局通常是固定的(除非是你自己创立的),固件可以直接通过布局名称调用键码,为您提供方便。这就可以解释对于QWERTY布局`KC_A`实际上代表`0x04`。 全部列表详见 [键码](zh-cn/keycodes.md)。

## 你可以发送的字符的列表

抛开快捷键不谈,只有有限的键码也只能映射到有限的布局,也就是说**你可以分配给某个键的字符的列表只能是布局中存在的字符**。

比如,也就是说假如您有美国的QWERTY布局,并且您想让一个键对应`€` (欧元符号),您将根本无法实现,因为美式QWERTY布局不可以有这样的映射。您可以使用英式QWERTY布局或者美式国际QWERTY。

你可能想知道为什么没有设计一个包含所有Unicode的键盘布局,这是因为通过USB传输的键码数量有限,根本不允许那样。

## 如何输入Unicode字符(可能方案)

你可以让固件发送*一系列键*来使用目标操作系统的[软件Unicode输入方法](https://en.wikipedia.org/wiki/Unicode_input#Hexadecimal_input),从而有效地独立于操作系统中定义的布局输入字符。

然而,它确实有诸多缺点:

- 一次仅能适配一个操作系统(在更换操作系统时要重新编译);
- 对于某个操作系统来说, 并不适配所有软件;
- 在某些操作系统中仅限于Unicode的一个子集。

<!--源文件: https://raw.githubusercontent.com/qmk/qmk_firmware/d5316e9714e6bd661ece1bf364dce1e9fd79988c/docs/how_keyboards_work.md
源提交哈希:d5316e9714e6bd661ece1bf364dce1e9fd79988c-->
<!--翻译时间:20200302-22:37(GMT+8)-->