首页
/ Lazydocker 波兰语按键速查表:Keybindings_pl 背后的快捷键机制与自动生成原理

Lazydocker 波兰语按键速查表:Keybindings_pl 背后的快捷键机制与自动生成原理

2026-09-05 17:34:49作者:韦蓉瑛

Lazydocker 把对 Docker 容器、服务、镜像、卷和网络的日常操作压缩成了一套键盘快捷键,而 Keybindings_pl.md 正是这套快捷键的波兰语速查表。本文以该文档为骨架,完整呈现其中 8 个按键分区的全部绑定项,并结合 keybindings 源码cheatsheet 生成脚本,讲清这份速查表是如何从 Go 源码“长”出来的、如何更新、以及如何与波兰语国际化(i18n)体系联动。读完本文,你可以无障碍使用 lazydocker 的波兰语界面,也能掌握在仓库中重新生成或校验所有语言速查表的方法。

文档定位:自动生成的多语言快捷键速查表

Keybindings_pl.md 文件首行就明确声明:

This file is auto-generated. To update, make the changes in the pkg/i18n directory and then run go run scripts/cheatsheet/main.go generate from the project root.

也就是说,它不是一份人工维护的手写文档,而是构建脚本根据源码中的按键绑定和波兰语翻译集合自动产出的结果。仓库 docs/keybindings/ 目录下共有 9 个语言版本(de、en、es、fr、nl、pl、pt、tr、zh),本文聚焦波兰语版本 pl,其余语言结构完全一致,仅翻译文本不同。README 的导航与 "List of keybindings" 部分均指向该目录,速查表是用户使用侧的标准参考入口。

项目(Projekt)分区

当焦点位于项目面板(project 视图,即 docker-compose 项目列表)时,可用按键如下,描述为波兰语原文:

  e: edytuj konfigurację        编辑 lazydocker 配置
  o: otwórz konfigurację        打开 lazydocker 配置
  m: pokaż logi                 查看日志
  enter: skup na głównym panelu 将焦点切到主面板
  [: poprzednia zakładka         切换到上一个主面板标签
  ]: następna zakładka          切换到下一个主面板标签
  /: filter list                过滤列表

keybindings 源码 看,这些按键的绑定与处理函数一一对应:

  • egui.handleEditConfig,描述取自翻译键 EditConfigpolish.go 中为 "edytuj konfigurację");
  • ogui.handleOpenConfig,对应 OpenConfig("otwórz konfigurację");
  • mgui.handleViewAllLogs,对应 ViewLogs("pokaż logi")。

容器(Kontenery)分区

容器面板(containers 视图)是快捷键最密集的分区,完整继承自原文档:

  d: usuń                             删除容器
  e: hide/show stopped containers      显示/隐藏已停止容器
  p: pause                            暂停
  s: zatrzymaj                        停止
  r: restartuj                        重启
  a: przyczep                         附加(attach)
  m: pokaż logi                       查看日志
  E: exec shell                        进入容器执行 shell
  c: wykonaj predefiniowaną własną komende   执行预定义自定义命令
  b: view bulk commands                查看批量命令
  w: open in browser (first port is http)  在浏览器中打开(首个端口按 http 处理)
  enter: skup na głównym panelu       将焦点切到主面板
  [: poprzednia zakładka              上一个主面板标签
  ]: następna zakładka                下一个主面板标签
  /: filter list                      过滤列表

源码中这些按键分别绑定到 handleContainersRemoveMenud)、handleHideStoppedContainerse)、handleContainerPausep)、handleContainerStops)、handleContainerRestartr)、handleContainerAttacha)、handleContainerViewLogsm)、handleContainersExecShellE)、handleContainersCustomCommandc)、handleContainersBulkCommandb)和 handleContainersOpenInBrowserCommandw)。值得注意的是大小写区分:小写 c 执行的是配置中预定义的自定义命令,而全局的 X 打开的是即时自定义命令菜单,两者入口不同。

服务(Serwisy)分区

服务面板(services 视图,对应 docker-compose 项目中的单个 service)分区完整按键如下:

  u: up service                      启动单个服务
  d: usuń kontenery                  移除服务的容器
  s: zatrzymaj                       停止
  p: pause                           暂停
  r: restartuj                       重启
  S: start                            启动
  a: przyczep                        附加
  m: pokaż logi                      查看日志
  U: up project                       启动整个项目
  D: down project                     关闭整个项目
  R: pokaż opcje restartu            查看重启选项(recreate/rebuild 等)
  c: wykonaj predefiniowaną własną komende   执行预定义自定义命令
  b: view bulk commands               查看批量命令
  E: exec shell                       执行 shell
  w: open in browser (first port is http)  在浏览器中打开
  enter: skup na głównym panelu      将焦点切到主面板
  [: poprzednia zakładka             上一个主面板标签
  ]: następna zakładka               下一个主面板标签
  /: filter list                     过滤列表

这里可以清楚看到 lazydocker 的大小写设计约定:小写 u/d/s/p/r 作用于当前服务,大写 U/D 则作用于整个 compose 项目handleProjectUp / handleProjectDown)。翻译文本 "usuń kontenery"(移除容器)来自 polish.go 中的 RemoveService 键,而 "pokaż opcje restartu" 来自 ViewRestartOptions

镜像、卷、网络分区

这三个只读管理型分区的按键结构一致,完整继承自原文档:

Obrazy(镜像)

  c: wykonaj predefiniowaną własną komende   执行预定义自定义命令
  d: usuń obraz                             删除镜像
  b: view bulk commands                    查看批量命令
  enter: skup na głównym panelu           将焦点切到主面板
  [: poprzednia zakładka                  上一个主面板标签
  ]: następna zakładka                    下一个主面板标签
  /: filter list                          过滤列表

Wolumeny(卷)

  c: wykonaj predefiniowaną własną komende   执行预定义自定义命令
  d: usuń wolumen                           删除卷
  b: view bulk commands                    查看批量命令
  enter: skup na głównym panelu           将焦点切到主面板
  [: poprzednia zakładka                  上一个主面板标签
  ]: następna zakładka                    下一个主面板标签
  /: filter list                          过滤列表

Sieci(网络)

  c: wykonaj predefiniowaną własną komende   执行预定义自定义命令
  d: usuń sieci                             删除网络
  b: view bulk commands                    查看批量命令
  enter: skup na głównym panelu           将焦点切到主面板
  [: poprzednia zakładka                  上一个主面板标签
  ]: następna zakładka                    下一个主面板标签
  /: filter list                          过滤列表

三个分区中 d 分别绑定 handleImagesRemoveMenuhandleVolumesRemoveMenuhandleNetworksRemoveMenucb 则对应各自面板的自定义命令与批量命令处理器。

主面板(Główne)与全局(Globalne)分区

Główne(主面板) 只有一个按键:

  esc: powrót    返回(退出主面板视图,回到侧边列表)

Globalne(全局) 分区在任意位置均可用:

  +: next screen mode (normal/half/fullscreen)   切换下一档屏幕模式
  _: prev screen mode                            切换上一档屏幕模式
  1: focus projects panel    聚焦项目面板
  2: focus services panel    聚焦服务面板
  3: focus containers panel  聚焦容器面板
  4: focus images panel      聚焦镜像面板
  5: focus volumes panel     聚焦卷面板
  6: focus networks panel    聚焦网络面板

+ / _ 在源码中绑定 gui.nextScreenMode / gui.prevScreenMode16 绑定 gui.handleGoTo(对应 Panel)。需要说明的是:原文档只列出带有描述文本的按键——生成脚本会跳过 Description 为空的绑定(见 generate.goif binding.Description == "" { continue }),因此 q(退出)、x/?(打开菜单)、方向键翻页等无描述的绑定不会出现在速查表中,实际使用时它们依然生效。

速查表是如何生成的:源码级拆解

生成入口是 scripts/cheatsheet/main.go,它只有两个子命令:generatecheck。核心流程在 generate.gogenerateAtDir 中:

  1. 遍历所有语言for lang := range i18n.GetTranslationSets() 取遍 i18n.go 注册的全部语言(pl、nl、de、tr、en、fr、zh、es、pt),逐个 os.Setenv("LC_ALL", lang) 切换环境语言;
  2. 构造一个假 GUImApp.Gui.SetupFakeGui() 让按键绑定代码可以在无终端环境下运行;
  3. 收集绑定mApp.Gui.GetInitialKeybindings() 返回全部 Binding 结构体,其中 ViewName 决定所属分区(空值归为 globalproject/containers/services/images/volumes/networks/main 各归一节),Description 字段取自当前语言的 TranslationSet
  4. 按视图分组并格式化getBindingSectionstitleMap 把绑定挂到对应章节标题下(标题即 polish.go 中的 ProjectTitle="Projekt"、ContainersTitle="Kontenery" 等,这正是速查表中文档小节标题为波兰语的原因),formatSections 最终渲染成 # Lazydocker menu + 各 ## 小节 + <pre><kbd>...</kbd></pre> 块,并在文件头拼上自动生成声明;
  5. 落盘:每个语言写出一个 Keybindings_{{lang}}.md,输出目录由 GetKeybindingsDir() 固定为 <项目根>/docs/keybindings

check 子命令(validate.go)则把 docs/keybindings/ 现有文件与临时目录中重新生成的内容做全量比对,不一致时用 go-difflib 打印 unified diff 并以非零码退出——这是典型的 CI 一致性校验手段:一旦你改了按键绑定或翻译而忘了重新生成速查表,check 就会失败并提示运行 go run scripts/cheatsheet/main.go generate 后提交变更。

与国际化(i18n)体系的联动

波兰语文本并非来自 md 文件本身,而是来自 polish.gopolishSet()。整个语言选择链路是:

  1. i18n.goNewTranslationSetFromConfig 读取配置语言:若配置为 auto,用 jibber_jabber.DetectLanguage 从系统环境探测;否则与 GetTranslationSets() 中的语言码前缀匹配(如 pl_PL 命中 pl);
  2. NewTranslationSetenglishSet 为基底,用 mergo.Merge 把命中的语言集覆盖合并上去——因此波兰语集中未翻译的键会自动回退到英文。这也解释了 Keybindings_pl.md 中部分条目仍为英文(如 "filter list"、"up service"、"hide/show stopped containers"):这些键在 polishSet() 中没有对应翻译,合并后保留了英文默认值;
  3. 应用运行时依据语言确定 gui.Tr(当前 TranslationSet),按键绑定的 Description 字段与速查表文本同源,保证界面提示与文档一致。

语言配置本身可在 lazydocker 配置文件中指定(配置参考 docs/Config.md),例如设为 plauto;生成脚本则是直接通过 LC_ALL 环境变量模拟各语言环境。

实操:更新与校验速查表

在仓库根目录下:

# 重新生成全部 9 种语言的速查表(写入 docs/keybindings/)
go run scripts/cheatsheet/main.go generate

# 校验现有速查表是否与源码一致(不一致时打印 diff 并返回非零退出码)
go run scripts/cheatsheet/main.go check

两个典型场景:

  • 修改了按键绑定(如在 keybindings.go 中新增带 Description 的绑定):运行 generate 后 9 个语言文件会同步变化,需要一并提交;
  • 修改了翻译(如 polish.goViewLogs 的值):只有对应语言的 md 文件变化,check 会精确定位到该文件的 diff。

小结

Keybindings_pl.md 表面是一份波兰语按键速查表,实际是 lazydocker "源码即文档"工作流的一个切片:按键定义集中在 GetInitialKeybindings,文案来自 pkg/i18n 的语言集,cheatsheet 包 负责按语言循环渲染出 md,validate.go 负责保证三者永不漂移。理解这一机制后,无论要查阅哪个语言的按键、还是要为仓库贡献按键或翻译,都有了明确的操作路径。

登录后查看全文
热门项目推荐
相关项目推荐

项目优选

收起
kernelkernel
deepin linux kernel
C
33
18
ops-transformerops-transformer
本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。
C++
1.12 K
2.72 K
kernelkernel
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
528
588
ops-nnops-nn
本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。
C++
906
1.83 K
pytorchpytorch
作为 Ascend for PyTorch 社区的核心组件,TorchNPU 是昇腾专为 PyTorch 打造的深度学习适配插件,使 PyTorch 框架能够直接调用昇腾 NPU,为开发者提供昇腾 AI 处理器的超强算力。
Python
854
1.34 K
docsdocs
暂无描述
Markdown
891
5.78 K
jiuwenswarmjiuwenswarm
JiuwenSwarm 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。
Python
3.53 K
1.01 K
ops-mathops-math
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
1.34 K
1.45 K
cann-learning-hubcann-learning-hub
CANN 学习中心仓,支持在线互动运行、边学边练,提供教程、示例与优化方案,一站式助力昇腾开发者快速上手。
Jupyter Notebook
987
506
AscendNPU-IRAscendNPU-IR
AscendNPU-IR是基于MLIR(Multi-Level Intermediate Representation)构建的,面向昇腾亲和算子编译时使用的中间表示,提供昇腾完备表达能力,通过编译优化提升昇腾AI处理器计算效率,支持通过生态框架使能昇腾AI处理器与深度调优
C++
540
384