Give the setup form Chinese text for the ISO's China installs

This commit is contained in:
ZacharyZhang-NY committed 2026-10-06 18:29:20 -04:00
1 parent bf08fedf8e
commit b268838479
2 files changed
+85 -19

No files matched your search

+60 -19
View File
@@ -81,6 +81,40 @@ OMARCHY_RESERVED_USERNAMES='^(root|bin|daemon|mail|ftp|http|nobody|dbus|systemd-
OMARCHY_HOSTNAME_PATTERN='^[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?$'
OMARCHY_HOSTNAME_DEFAULT='omarchy'
# OMARCHY_INSTALL_LANG=zh, set by the ISO for China in a console that draws CJK,
# swaps each English text below for its OMARCHY_ZH entry. printf formats %s.
declare -gA OMARCHY_ZH=(
["Select keyboard layout"]="选择键盘布局"
["Alphanumeric without spaces (like dhh)"]="字母和数字,不含空格(如 dhh)"
["Username> "]="用户名> "
["Username is reserved for system"]="这个用户名由系统保留"
["That username already exists on this machine"]="本机已有这个用户名"
["Username must be alphanumeric with no spaces"]="用户名只能用字母和数字,不含空格"
["Used for user + root, and disk encryption when enabled"]="用于用户和 root,开启加密时也用于解锁磁盘"
["Password> "]="密码> "
["Must match the password you just typed"]="与刚才输入的密码一致"
["Confirm> "]="确认密码> "
["Your password can't be blank!"]="密码不能为空"
["Passwords didn't match!"]="两次输入的密码不一致"
["Used for git authentication (hit return to skip)"]="用于 git 身份(回车跳过)"
["Full name> "]="姓名> "
["Email address> "]="邮箱> "
["Letters, digits, and dashes (or return for 'omarchy')"]="字母、数字和连字符(回车用 omarchy)"
["Hostname> "]="主机名> "
["Hostname must be 1-63 letters, digits, or dashes, and cannot start or end with a dash"]="主机名为 1-63 个字母、数字或连字符,首尾不能是连字符"
["Timezone"]="时区"
)
omarchy_text() {
local text=$1
shift
if [[ ${OMARCHY_INSTALL_LANG:-} == "zh" && -n ${OMARCHY_ZH[$text]:-} ]]; then
text=${OMARCHY_ZH[$text]}
fi
# shellcheck disable=SC2059
printf -- "$text" "$@"
}
# Installer targets are empty, so any account is fair game; first-boot setup
# overrides this because its machine already has users.
omarchy_username_taken() { return 1; }
@@ -89,19 +123,26 @@ omarchy_username_taken() { return 1; }
# by `status=$?`: one caller runs under `set -e`, where a cancelled prompt is a
# failing assignment that would kill the script before the status is read.
# China lists the .cn package mirrors first and sets up Chinese input.
# China lists the .cn package mirrors first and sets up Chinese input. The
# Chinese name shows only where the console can draw it.
omarchy_prompt_region() {
local choice status
choice=$(printf '%s\n' Global China | gum choose --selected "${region^}" --header "Select region") && status=0 || status=$?
local china="China" header="Select region" selected=Global choice status
if [[ -n ${OMARCHY_CJK_CONSOLE:-} ]]; then
china="China 中国"
header="Select region · 选择区域"
fi
[[ $region == "china" ]] && selected=$china
choice=$(printf '%s\n' Global "$china" | gum choose --selected "$selected" --header "$header") && status=0 || status=$?
((status == 0)) || return $status
region=${choice,,}
region=${choice%% *}
region=${region,,}
}
omarchy_prompt_keyboard() {
local choice status
choice=$(printf '%s\n' "$OMARCHY_KEYBOARD_LAYOUTS" | cut -d'|' -f1 |
gum choose --height 10 --selected "English (US)" --header "Select keyboard layout") && status=0 || status=$?
gum choose --height 10 --selected "English (US)" --header "$(omarchy_text "Select keyboard layout")") && status=0 || status=$?
((status == 0)) || return $status
keyboard_label="$choice"
@@ -111,19 +152,19 @@ omarchy_prompt_keyboard() {
omarchy_prompt_username() {
local status
while true; do
username=$(gum input --placeholder "Alphanumeric without spaces (like dhh)" --prompt.foreground="#845DF9" --prompt "Username> ") && status=0 || status=$?
username=$(gum input --placeholder "$(omarchy_text "Alphanumeric without spaces (like dhh)")" --prompt.foreground="#845DF9" --prompt "$(omarchy_text "Username> ")") && status=0 || status=$?
((status == 0)) || return $status
if [[ "$username" =~ $OMARCHY_USERNAME_PATTERN ]]; then
if [[ "$username" =~ $OMARCHY_RESERVED_USERNAMES ]]; then
notice "Username is reserved for system" 1
notice "$(omarchy_text "Username is reserved for system")" 1
elif omarchy_username_taken "$username"; then
notice "That username already exists on this machine" 1
notice "$(omarchy_text "That username already exists on this machine")" 1
else
return 0
fi
else
notice "Username must be alphanumeric with no spaces" 1
notice "$(omarchy_text "Username must be alphanumeric with no spaces")" 1
fi
done
}
@@ -131,17 +172,17 @@ omarchy_prompt_username() {
omarchy_prompt_password() {
local status
while true; do
password=$(gum input --placeholder "Used for user + root, and disk encryption when enabled" --prompt.foreground="#845DF9" --password --prompt "Password> ") && status=0 || status=$?
password=$(gum input --placeholder "$(omarchy_text "Used for user + root, and disk encryption when enabled")" --prompt.foreground="#845DF9" --password --prompt "$(omarchy_text "Password> ")") && status=0 || status=$?
((status == 0)) || return $status
password_confirmation=$(gum input --placeholder "Must match the password you just typed" --prompt.foreground="#845DF9" --password --prompt "Confirm> ") && status=0 || status=$?
password_confirmation=$(gum input --placeholder "$(omarchy_text "Must match the password you just typed")" --prompt.foreground="#845DF9" --password --prompt "$(omarchy_text "Confirm> ")") && status=0 || status=$?
((status == 0)) || return $status
if [[ -n "$password" && "$password" == "$password_confirmation" ]]; then
return 0
elif [[ -z "$password" ]]; then
notice "Your password can't be blank!" 1
notice "$(omarchy_text "Your password can't be blank!")" 1
else
notice "Passwords didn't match!" 1
notice "$(omarchy_text "Passwords didn't match!")" 1
fi
done
}
@@ -150,16 +191,16 @@ omarchy_prompt_password() {
# only Esc/Ctrl+C end the prompt early.
omarchy_prompt_identity() {
local status
full_name=$(gum input --placeholder "Used for git authentication (hit return to skip)" --prompt.foreground="#845DF9" --prompt "Full name> ") && status=0 || status=$?
full_name=$(gum input --placeholder "$(omarchy_text "Used for git authentication (hit return to skip)")" --prompt.foreground="#845DF9" --prompt "$(omarchy_text "Full name> ")") && status=0 || status=$?
((status == 0)) || return $status
email_address=$(gum input --placeholder "Used for git authentication (hit return to skip)" --prompt.foreground="#845DF9" --prompt "Email address> ") && status=0 || status=$?
email_address=$(gum input --placeholder "$(omarchy_text "Used for git authentication (hit return to skip)")" --prompt.foreground="#845DF9" --prompt "$(omarchy_text "Email address> ")") && status=0 || status=$?
return $status
}
omarchy_prompt_hostname() {
local status
while true; do
hostname=$(gum input --placeholder "Letters, digits, and dashes (or return for 'omarchy')" --prompt.foreground="#845DF9" --prompt "Hostname> ") && status=0 || status=$?
hostname=$(gum input --placeholder "$(omarchy_text "Letters, digits, and dashes (or return for 'omarchy')")" --prompt.foreground="#845DF9" --prompt "$(omarchy_text "Hostname> ")") && status=0 || status=$?
((status == 0)) || return $status
if [[ -z $hostname ]]; then
@@ -168,7 +209,7 @@ omarchy_prompt_hostname() {
elif [[ "$hostname" =~ $OMARCHY_HOSTNAME_PATTERN ]]; then
return 0
else
notice "Hostname must be 1-63 letters, digits, or dashes, and cannot start or end with a dash" 1
notice "$(omarchy_text "Hostname must be 1-63 letters, digits, or dashes, and cannot start or end with a dash")" 1
fi
done
}
@@ -180,9 +221,9 @@ omarchy_prompt_timezone() {
guess=$(tzupdate -p 2>/dev/null) || guess=""
if [[ -n $guess ]]; then
timezone=$(timedatectl list-timezones | gum choose --height 10 --selected "$guess" --header "Timezone") && status=0 || status=$?
timezone=$(timedatectl list-timezones | gum choose --height 10 --selected "$guess" --header "$(omarchy_text "Timezone")") && status=0 || status=$?
else
timezone=$(timedatectl list-timezones | gum filter --height 10 --header "Timezone") && status=0 || status=$?
timezone=$(timedatectl list-timezones | gum filter --height 10 --header "$(omarchy_text "Timezone")") && status=0 || status=$?
fi
((status == 0)) || return $status
+25
View File
@@ -147,6 +147,16 @@ assert_status "$OMARCHY_FORM_SIGNAL" "region prompt reports Ctrl+C as the caller
assert_returned "region prompt survives Ctrl+C under set -e"
pass "region prompt propagates Esc and Ctrl+C without dying under set -e"
OMARCHY_CJK_CONSOLE=1 run_prompt omarchy_prompt_region "0:China 中国"
assert_status 0 "region prompt succeeds in a CJK console"
[[ $(field region) == "china" ]] || fail "region prompt stores China 中国 as china"
[[ $(<"$tmp_dir/stdin.1") == $'Global\nChina 中国' ]] || fail "a CJK console offers the Chinese name"
grep -qxF -- 'choose --selected Global --header Select region · 选择区域' "$GUM_ARGS" || fail "a CJK console asks in both languages"
OMARCHY_CJK_CONSOLE=1 REGION=china run_prompt omarchy_prompt_region "0:Global"
[[ $(field region) == "global" ]] || fail "region prompt stores Global as global in a CJK console"
grep -qxF -- 'choose --selected China 中国 --header Select region · 选择区域' "$GUM_ARGS" || fail "a CJK console preselects China by its shown name"
pass "a CJK console names China in Chinese and maps it back to china"
# Keyboard
run_prompt omarchy_prompt_keyboard "0:German"
@@ -233,6 +243,21 @@ assert_status "$OMARCHY_FORM_BACK" "hostname prompt reports Esc as back"
assert_returned "hostname prompt survives Esc under set -e"
pass "hostname prompt propagates Esc without dying under set -e"
# Chinese text
OMARCHY_INSTALL_LANG=zh run_prompt omarchy_prompt_username "0:Bad Name" "0:dhh"
assert_status 0 "username prompt succeeds in Chinese"
grep -qF -- '--prompt 用户名> ' "$GUM_ARGS" || fail "OMARCHY_INSTALL_LANG=zh asks for the username in Chinese"
assert_notices "OMARCHY_INSTALL_LANG=zh explains a bad username in Chinese" "用户名只能用字母和数字,不含空格"
run_prompt omarchy_prompt_username "0:dhh"
grep -qF -- '--prompt Username> ' "$GUM_ARGS" || fail "the form stays English without OMARCHY_INSTALL_LANG"
mapfile -t texts < <(grep -o 'omarchy_text "[^"]*"' "$ROOT/install/provisioning/setup-form.sh" | sed 's/^omarchy_text "//; s/"$//')
((${#texts[@]} > 15)) || fail "the form routes its text through omarchy_text"
for text in "${texts[@]}"; do
[[ -n ${OMARCHY_ZH[$text]:-} ]] || fail "every form text has a Chinese entry" "missing: $text"
done
pass "OMARCHY_INSTALL_LANG=zh puts every form text in Chinese"
# Timezone
TZ_GUESS=Europe/Copenhagen run_prompt omarchy_prompt_timezone "0:Europe/Copenhagen"