Merge chinese-language
This commit is contained in:
138 files changed
+1986
-558
No files matched your search
@@ -10,6 +10,11 @@ import sys
|
||||
import configure as setup
|
||||
|
||||
|
||||
def text(english, *args):
|
||||
"""English with %1.. filled, in the session's language, from the shell's table."""
|
||||
return subprocess.run(["omarchy-text", english, *map(str, args)], capture_output=True, text=True, check=True).stdout.rstrip("\n")
|
||||
|
||||
|
||||
def keyboard_catalog():
|
||||
# Read the same choices as the ISO and first-boot form, then convert console
|
||||
# keymaps through systemd's mapping, just as localectl does during install.
|
||||
@@ -64,7 +69,7 @@ def choose(title, catalog, selected, kind, overrides=None):
|
||||
if result.returncode == 1:
|
||||
return None
|
||||
if result.returncode:
|
||||
raise RuntimeError(result.stderr.strip() or "The selection menu could not open")
|
||||
raise RuntimeError(result.stderr.strip() or text("The selection menu could not open"))
|
||||
|
||||
|
||||
def input_catalog(items):
|
||||
@@ -78,7 +83,7 @@ def input_catalog(items):
|
||||
|
||||
def input_items(items, selected, overrides=None):
|
||||
if not any(item[0].startswith("keyboard-") for item in items):
|
||||
raise RuntimeError("The current input group has no keyboard input")
|
||||
raise RuntimeError(text("The current input group has no keyboard input"))
|
||||
# Retained entries keep their switching order; new engines follow them.
|
||||
kept = [item for item in items if item[0].startswith("keyboard-") or item[0] in selected]
|
||||
current = dict(items)
|
||||
@@ -93,7 +98,7 @@ def set_inputs(group, layout, before, after):
|
||||
setup.run(["fcitx5-remote", "-c"])
|
||||
setup.live_set(group, layout, after)
|
||||
if setup.live_group() != (group, layout, after):
|
||||
raise RuntimeError("Fcitx did not retain the input selection")
|
||||
raise RuntimeError(text("Fcitx did not retain the input selection"))
|
||||
except BaseException:
|
||||
setup.live_set(group, layout, before)
|
||||
raise
|
||||
@@ -103,7 +108,7 @@ def configure_inputs():
|
||||
group, layout, items = setup.live_group()
|
||||
catalog, available = input_catalog(items)
|
||||
current = [name for name, override in items if not name.startswith("keyboard-")]
|
||||
choose("Input Methods", catalog, current, "input", dict(items))
|
||||
choose(text("Input Methods"), catalog, current, "input", dict(items))
|
||||
|
||||
|
||||
def load_engines(names, catalog):
|
||||
@@ -112,7 +117,7 @@ def load_engines(names, catalog):
|
||||
if subprocess.run(["omarchy-pkg-present", package], capture_output=True).returncode]
|
||||
if absent or any(name not in setup.PRESETS for name in names):
|
||||
labels = ", ".join(catalog.get(name, name) for name in names)
|
||||
raise RuntimeError(f"Install {' '.join(absent) or 'its engine'} to use {labels}")
|
||||
raise RuntimeError(text("Install %1 to use %2", " ".join(absent) or text("its engine"), labels))
|
||||
# Fcitx discovers engines only at startup, so one installed while it was
|
||||
# running (by an update, say) needs a restart before it can be selected.
|
||||
setup.run(["omarchy-restart-xcompose"])
|
||||
@@ -149,7 +154,7 @@ def add_input(method):
|
||||
|
||||
def keyboard_values(selected):
|
||||
if not selected:
|
||||
raise ValueError("Select at least one keyboard layout")
|
||||
raise ValueError(text("Select at least one keyboard layout"))
|
||||
parts = [value.split(":", 1) for value in selected]
|
||||
# Preserve the installer's Latin-leading rule for desktop keybindings.
|
||||
if parts[0][0] in setup.NON_LATIN:
|
||||
@@ -176,19 +181,19 @@ def save_keyboard(selected):
|
||||
expected = [layout + (":" + variant if variant else "")
|
||||
for layout, variant in zip(layouts.split(","), variants.split(","))]
|
||||
if keyboard_selection() != expected:
|
||||
raise RuntimeError("Your personal keyboard layout override takes precedence over this selection")
|
||||
raise RuntimeError(text("Your personal keyboard layout override takes precedence over this selection"))
|
||||
first_layout = layouts.split(",")[0]
|
||||
first_variant = variants.split(",")[0]
|
||||
group_layout = first_layout + ("-" + first_variant if first_variant else "")
|
||||
primary = next((item[0] for item in before if item[0].startswith("keyboard-")), None)
|
||||
if primary is None:
|
||||
raise RuntimeError("The current input group has no keyboard input")
|
||||
raise RuntimeError(text("The current input group has no keyboard input"))
|
||||
keyboard = "keyboard-" + group_layout
|
||||
after = [[keyboard, ""]] + [item for item in before if item[0] not in (primary, keyboard)]
|
||||
group_changed = True
|
||||
setup.live_set(group, group_layout, after)
|
||||
if setup.live_group() != (group, group_layout, after):
|
||||
raise RuntimeError("Fcitx did not retain the keyboard selection")
|
||||
raise RuntimeError(text("Fcitx did not retain the keyboard selection"))
|
||||
except BaseException:
|
||||
if original is None:
|
||||
path.resolve().unlink(missing_ok=True)
|
||||
@@ -205,7 +210,7 @@ def save_keyboard(selected):
|
||||
def configure_keyboard():
|
||||
current = keyboard_selection()
|
||||
catalog = keyboard_catalog()
|
||||
choose("Keyboard Layouts", catalog, current, "keyboard")
|
||||
choose(text("Keyboard Layouts"), catalog, current, "keyboard")
|
||||
|
||||
|
||||
def apply_selection(kind, context, values):
|
||||
@@ -213,7 +218,7 @@ def apply_selection(kind, context, values):
|
||||
rows = picker_rows(catalog, [])
|
||||
valid = {row[1:]: key for key, row in rows.items()}
|
||||
if not isinstance(values, list) or any(not isinstance(value, str) or value not in valid for value in values):
|
||||
raise ValueError("The menu returned an invalid selection")
|
||||
raise ValueError(text("The menu returned an invalid selection"))
|
||||
selected = list(dict.fromkeys(valid[value] for value in values))
|
||||
if kind == "input":
|
||||
save_inputs(selected, context.get("overrides"))
|
||||
@@ -228,13 +233,13 @@ def main():
|
||||
try:
|
||||
add_input(sys.argv[2])
|
||||
except (OSError, ValueError, RuntimeError, subprocess.CalledProcessError) as error:
|
||||
raise SystemExit(f"Input method could not be added: {error}")
|
||||
raise SystemExit(text("Input method could not be added: %1", error))
|
||||
return
|
||||
applying = len(sys.argv) == 5 and sys.argv[1] == "apply"
|
||||
kind = sys.argv[2] if applying else sys.argv[1] if len(sys.argv) == 2 else ""
|
||||
if kind not in ("input", "keyboard"):
|
||||
raise ValueError("Choose keyboard or input setup")
|
||||
title = "Input methods" if kind == "input" else "Keyboard layouts"
|
||||
title = text("Input methods could not be updated") if kind == "input" else text("Keyboard layouts could not be updated")
|
||||
try:
|
||||
if applying:
|
||||
apply_selection(kind, json.loads(sys.argv[3]), json.loads(sys.argv[4]))
|
||||
@@ -243,7 +248,7 @@ def main():
|
||||
else:
|
||||
configure_keyboard()
|
||||
except (OSError, ValueError, RuntimeError, subprocess.CalledProcessError) as error:
|
||||
subprocess.run(["omarchy-notification-send", title + " could not be updated", str(error)], check=True)
|
||||
subprocess.run(["omarchy-notification-send", title, str(error)], check=True)
|
||||
raise SystemExit(1)
|
||||
|
||||
|
||||
|
||||
@@ -212,6 +212,9 @@
|
||||
"setup.default.editor.helix": {"icon":"","label":"Helix","checked":"[[ \"$(omarchy-default-editor)\" == \"helix\" ]]","action":"omarchy-default-editor helix"},
|
||||
"setup.default.editor.vim": {"icon":"","label":"Vim","checked":"[[ \"$(omarchy-default-editor)\" == \"vim\" ]]","action":"omarchy-default-editor vim"},
|
||||
"setup.default.editor.emacs": {"icon":" ","label":"Emacs","checked":"[[ \"$(omarchy-default-editor)\" == \"emacs\" ]]","action":"omarchy-default-editor emacs"},
|
||||
"setup.language": {"icon":"","label":"Language"},
|
||||
"setup.language.en": {"icon":"","label":"English","checked":"[[ \"$(omarchy-language)\" == \"en_US.UTF-8\" ]]","action":"omarchy-launch-floating-terminal-with-presentation 'omarchy-language en'"},
|
||||
"setup.language.zh": {"icon":"","label":"简体中文","checked":"[[ \"$(omarchy-language)\" == \"zh_CN.UTF-8\" ]]","action":"omarchy-launch-floating-terminal-with-presentation 'omarchy-language zh'"},
|
||||
"setup.plugin": {"icon":"","label":"Plugins","aliases":["plugin","plugins"]},
|
||||
"setup.plugin.enable": {"icon":"","label":"Enable Plugin","action":"omarchy-menu-plugin enable"},
|
||||
"setup.plugin.disable": {"icon":"","label":"Disable Plugin","action":"omarchy-menu-plugin disable"},
|
||||
|
||||
@@ -0,0 +1,192 @@
|
||||
// Chinese menu labels, overlaid on omarchy-menu.jsonc when LANG is zh_CN.
|
||||
{
|
||||
"apps": {"label":"应用"},
|
||||
"learn": {"label":"学习"},
|
||||
"trigger": {"label":"触发"},
|
||||
"style": {"label":"风格"},
|
||||
"setup": {"label":"设置"},
|
||||
"install": {"label":"安装"},
|
||||
"remove": {"label":"移除"},
|
||||
"update": {"label":"更新"},
|
||||
"about": {"label":"关于"},
|
||||
"system": {"label":"系统"},
|
||||
"system.screensaver": {"label":"屏保"},
|
||||
"system.lock": {"label":"锁屏"},
|
||||
"system.suspend": {"label":"睡眠"},
|
||||
"system.hibernate": {"label":"休眠"},
|
||||
"system.logout": {"label":"注销"},
|
||||
"system.reboot": {"label":"重启"},
|
||||
"system.shutdown": {"label":"关机"},
|
||||
"learn.keybindings": {"label":"快捷键"},
|
||||
"learn.omarchy": {"label":"Omarchy 手册"},
|
||||
"learn.community": {"label":"社区"},
|
||||
"trigger.emoji": {"label":"表情"},
|
||||
"trigger.reminder": {"label":"提醒"},
|
||||
"trigger.capture": {"label":"截取"},
|
||||
"trigger.capture.screenshot": {"label":"截图"},
|
||||
"trigger.capture.screenrecord.stop": {"label":"停止录屏"},
|
||||
"trigger.capture.screenrecord": {"label":"录屏"},
|
||||
"trigger.capture.text": {"label":"OCR 取字"},
|
||||
"trigger.capture.qr": {"label":"二维码"},
|
||||
"trigger.capture.color": {"label":"取色"},
|
||||
"trigger.capture.screenrecord.no-audio": {"label":"无音频"},
|
||||
"trigger.capture.screenrecord.desktop-audio": {"label":"含桌面音频"},
|
||||
"trigger.capture.screenrecord.microphone": {"label":"含桌面与麦克风音频"},
|
||||
"trigger.capture.screenrecord.webcam": {"label":"含桌面、麦克风与摄像头"},
|
||||
"trigger.transcode": {"label":"转码"},
|
||||
"trigger.share": {"label":"分享"},
|
||||
"trigger.toggle": {"label":"开关"},
|
||||
"trigger.hardware": {"label":"硬件"},
|
||||
"trigger.tests": {"label":"测速"},
|
||||
"trigger.hardware.laptop-display": {"label":"笔记本屏幕"},
|
||||
"trigger.hardware.mirror-display": {"label":"镜像显示"},
|
||||
"trigger.hardware.hybrid-gpu": {"label":"混合显卡"},
|
||||
"trigger.hardware.touchpad": {"label":"触控板"},
|
||||
"trigger.hardware.touchpad-haptics": {"label":"触控板振动"},
|
||||
"trigger.hardware.touchpad-haptics.low": {"label":"低"},
|
||||
"trigger.hardware.touchpad-haptics.mid": {"label":"中"},
|
||||
"trigger.hardware.touchpad-haptics.high": {"label":"高"},
|
||||
"trigger.hardware.touchscreen": {"label":"触摸屏"},
|
||||
"trigger.reminder.set": {"label":"设一个提醒"},
|
||||
"trigger.reminder.show": {"label":"查看全部"},
|
||||
"trigger.reminder.clear": {"label":"清除全部"},
|
||||
"trigger.share.clipboard": {"label":"剪贴板"},
|
||||
"trigger.share.file": {"label":"文件"},
|
||||
"trigger.share.folder": {"label":"文件夹"},
|
||||
"trigger.share.receive": {"label":"接收"},
|
||||
"trigger.toggle.idle-lock": {"label":"保持唤醒"},
|
||||
"trigger.toggle.notifications": {"label":"通知"},
|
||||
"trigger.toggle.crash-capture": {"label":"崩溃捕获"},
|
||||
"trigger.toggle.screensaver": {"label":"屏保"},
|
||||
"trigger.toggle.nightlight": {"label":"夜间模式"},
|
||||
"trigger.tests.network-speedtest": {"label":"网络测速"},
|
||||
"trigger.tests.disk-speedtest": {"label":"磁盘测速"},
|
||||
"style.theme": {"label":"主题"},
|
||||
"style.background": {"label":"壁纸"},
|
||||
"style.unlock": {"label":"解锁画面"},
|
||||
"style.font": {"label":"字体"},
|
||||
"style.screensaver": {"label":"屏保"},
|
||||
"style.about": {"label":"关于"},
|
||||
"style.about.text": {"label":"编辑文字"},
|
||||
"style.about.image": {"label":"取自图片"},
|
||||
"style.about.default": {"label":"恢复默认"},
|
||||
"style.screensaver.text": {"label":"编辑文字"},
|
||||
"style.screensaver.image": {"label":"取自图片"},
|
||||
"style.screensaver.default": {"label":"恢复默认"},
|
||||
"setup.monitors": {"label":"显示器"},
|
||||
"setup.keybindings": {"label":"快捷键"},
|
||||
"setup.input": {"label":"输入设备"},
|
||||
"setup.language": {"label":"语言"},
|
||||
"setup.network": {"label":"网络"},
|
||||
"setup.network.dns.custom": {"label":"自定义"},
|
||||
"setup.network.qr": {"label":"二维码"},
|
||||
"setup.default": {"label":"默认程序"},
|
||||
"setup.default.agent": {"title":"默认 Agent"},
|
||||
"setup.default.dictation": {"label":"语音听写","title":"默认语音听写"},
|
||||
"setup.default.browser": {"label":"浏览器","title":"默认浏览器"},
|
||||
"setup.default.terminal": {"label":"终端","title":"默认终端"},
|
||||
"setup.default.editor": {"label":"编辑器","title":"默认编辑器"},
|
||||
"setup.plugin": {"label":"插件"},
|
||||
"setup.plugin.enable": {"label":"启用插件"},
|
||||
"setup.plugin.disable": {"label":"停用插件"},
|
||||
"setup.plugin.add": {"label":"添加插件"},
|
||||
"setup.plugin.clone": {"label":"克隆插件"},
|
||||
"setup.plugin.remove": {"label":"移除插件"},
|
||||
"setup.security": {"label":"安全"},
|
||||
"setup.config": {"label":"配置"},
|
||||
"setup.security.fingerprint": {"label":"指纹"},
|
||||
"setup.security.passwordless-sudo": {"label":"免密 sudo"},
|
||||
"setup.security.sudoless-docker": {"label":"免 sudo Docker"},
|
||||
"setup.direct-boot": {"label":"直接启动"},
|
||||
"setup.reset": {"label":"恢复出厂设置"},
|
||||
"install.package": {"label":"软件包"},
|
||||
"install.service": {"label":"服务"},
|
||||
"install.development": {"label":"开发环境"},
|
||||
"install.editor": {"label":"编辑器"},
|
||||
"install.style": {"label":"风格"},
|
||||
"install.style.theme": {"label":"主题"},
|
||||
"install.style.background": {"label":"壁纸"},
|
||||
"install.style.font": {"label":"字体"},
|
||||
"install.gaming": {"label":"游戏"},
|
||||
"install.browser": {"label":"浏览器"},
|
||||
"install.webapp": {"label":"网页应用"},
|
||||
"install.terminal": {"label":"终端"},
|
||||
"install.preinstalls": {"label":"预装应用"},
|
||||
"install.service.chromium-account": {"label":"Chromium 账号"},
|
||||
"install.gaming.xbox-cloud": {"label":"Xbox 云游戏"},
|
||||
"install.gaming.xbox-controllers": {"label":"Xbox 手柄"},
|
||||
"install.gaming.retro-launcher": {"label":"RetroArch 启动器"},
|
||||
"install.development.docker-dbs": {"label":"Docker 数据库"},
|
||||
"remove.package": {"label":"软件包"},
|
||||
"remove.ai": {"title":"移除"},
|
||||
"remove.service": {"label":"服务","title":"移除"},
|
||||
"remove.development": {"label":"开发环境","title":"移除"},
|
||||
"remove.theme": {"label":"主题"},
|
||||
"remove.gaming": {"label":"游戏","title":"移除"},
|
||||
"remove.browser": {"label":"浏览器","title":"移除"},
|
||||
"remove.webapp": {"label":"网页应用"},
|
||||
"remove.preinstalls": {"label":"预装应用"},
|
||||
"remove.security": {"label":"安全","title":"移除"},
|
||||
"remove.security.fingerprint": {"label":"指纹"},
|
||||
"remove.security.sudoless-docker": {"label":"免 sudo Docker"},
|
||||
"remove.dictation": {"label":"语音听写"},
|
||||
"remove.gaming.xbox-cloud": {"label":"Xbox 云游戏"},
|
||||
"remove.gaming.xbox-controllers": {"label":"Xbox 手柄 ()"},
|
||||
"remove.development.javascript": {"title":"移除"},
|
||||
"remove.development.php": {"title":"移除"},
|
||||
"remove.development.elixir": {"title":"移除"},
|
||||
"update.channel": {"label":"通道"},
|
||||
"update.config": {"label":"配置","title":"重置为默认"},
|
||||
"update.themes": {"label":"附加主题"},
|
||||
"update.process": {"label":"进程","title":"重启"},
|
||||
"update.hardware": {"label":"硬件","title":"重启"},
|
||||
"update.firmware": {"label":"固件"},
|
||||
"update.password": {"label":"密码"},
|
||||
"update.timezone": {"label":"时区"},
|
||||
"update.time": {"label":"时间"},
|
||||
"update.hardware.audio": {"label":"音频"},
|
||||
"update.hardware.bluetooth": {"label":"蓝牙"},
|
||||
"update.hardware.trackpad": {"label":"触控板"},
|
||||
"update.password.drive": {"label":"磁盘加密"},
|
||||
"update.password.user": {"label":"用户"},
|
||||
"update.channel.stable": {"label":"稳定版"},
|
||||
"update.channel.rc": {"label":"候选版"},
|
||||
"update.channel.edge": {"label":"尝鲜版"},
|
||||
"update.channel.dev": {"label":"开发版"},
|
||||
"trigger.appearance": {"label":"外观"},
|
||||
"trigger.appearance.animations": {"label":"动画"},
|
||||
"trigger.appearance.one-window-ratio": {"label":"单窗口比例"},
|
||||
"trigger.appearance.theme-sync": {"label":"Herdr 主题同步"},
|
||||
"trigger.appearance.top-bar": {"label":"菜单栏"},
|
||||
"trigger.appearance.top-bar.show": {"label":"显示菜单栏"},
|
||||
"trigger.appearance.top-bar.hide": {"label":"隐藏菜单栏"},
|
||||
"trigger.appearance.top-bar.position": {"label":"菜单栏位置"},
|
||||
"trigger.appearance.top-bar.position.top": {"label":"顶部"},
|
||||
"trigger.appearance.top-bar.position.bottom": {"label":"底部"},
|
||||
"trigger.appearance.top-bar.position.left": {"label":"左侧"},
|
||||
"trigger.appearance.top-bar.position.right": {"label":"右侧"},
|
||||
"trigger.appearance.top-bar.background": {"label":"菜单栏背景"},
|
||||
"trigger.appearance.top-bar.background.opaque": {"label":"不透明"},
|
||||
"trigger.appearance.top-bar.background.glassy": {"label":"毛玻璃"},
|
||||
"trigger.appearance.top-bar.background.clear": {"label":"全透明"},
|
||||
"trigger.appearance.top-bar.indicators": {"label":"菜单栏指示"},
|
||||
"trigger.appearance.top-bar.indicators.battery-percentage": {"label":"电量百分比"},
|
||||
"trigger.appearance.top-bar.indicators.clock": {"label":"时钟"},
|
||||
"trigger.appearance.window-corners": {"label":"窗口圆角"},
|
||||
"trigger.appearance.window-corners.theme": {"label":"跟随主题"},
|
||||
"trigger.appearance.window-corners.rounded": {"label":"圆角"},
|
||||
"trigger.appearance.window-corners.sharp": {"label":"直角"},
|
||||
"trigger.appearance.window-gaps": {"label":"窗口间距"},
|
||||
"trigger.appearance.window-transparency": {"label":"窗口透明度"},
|
||||
"trigger.appearance.window-transparency.opaque": {"label":"不透明"},
|
||||
"trigger.appearance.window-transparency.glassy": {"label":"毛玻璃"},
|
||||
"trigger.appearance.window-transparency.transparent": {"label":"透明"},
|
||||
"trigger.appearance.workspace-layout": {"label":"工作区布局","title":"默认工作区布局"},
|
||||
"trigger.appearance.workspace-layout.dwindle": {"label":"平铺"},
|
||||
"trigger.appearance.workspace-layout.scrolling": {"label":"滚动"},
|
||||
"trigger.appearance.workspace-layout.floating": {"label":"浮动"},
|
||||
"trigger.clipboard-history": {"label":"剪贴板历史"},
|
||||
"setup.typing": {"label":"输入"},
|
||||
"setup.typing.keyboard": {"label":"键盘布局"},
|
||||
"setup.typing.input": {"label":"输入法"},
|
||||
}
|
||||
Reference in new issue
Block a user