Структура локализации:
install/i18n/en.sh — английский словарь (дефолт, fallback)
install/i18n/ru.sh — русский словарь
install/lib-i18n.sh — лоадер + welcome banner
Поток:
1. install.sh source'ит lib-i18n.sh и зовёт i18n_load_default →
все строки на английском.
2. Если onboarding нужен — печатается welcome banner ASCII-рамка
на английском (язык ещё не выбран).
3. onboarding_pick_language — единственный двуязычный шаг
("Choose language / Выберите язык"). По выбору вызывает
i18n_load_lang ru|en — перегружает словарь.
4. Все последующие шаги (transport / provider / model / auth /
completion) идут на выбранном языке.
Fallback: если ru-словарь не имеет ключа — используется английское
значение (load_default вызывается до загрузки ru.sh, переменные
перезаписываются поверх).
lib-onboarding.sh переведён со смешанных hardcoded строк на
${STR_*} placeholders.
Тесты: bash -n всех 5 файлов чисто, i18n loader unit-тест показывает
EN/RU перегрузку, non-TTY smoke install --no-execute проходит.
47 lines
1.9 KiB
Bash
47 lines
1.9 KiB
Bash
# shellcheck shell=bash
|
||
# lib-i18n.sh — лоадер локализаций.
|
||
#
|
||
# Контракт:
|
||
# 1. На старте всегда source install/i18n/en.sh — экран приветствия
|
||
# показывается ДО выбора языка пользователем.
|
||
# 2. После onboarding_pick_language вызывается i18n_load_lang "$lang" —
|
||
# перегружает строки выбранного словаря.
|
||
# 3. Любая строка отсутствующая в словаре — fallback на en.sh уже в
|
||
# памяти (мы не unset'им переменные, ru перезаписывает поверх).
|
||
#
|
||
# Используется install.sh и install/lib-onboarding.sh.
|
||
|
||
# Корень i18n относительно LIB_DIR.
|
||
I18N_DIR="${LIB_DIR:-$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)}/i18n"
|
||
|
||
i18n_load_default() {
|
||
# shellcheck source=install/i18n/en.sh
|
||
source "$I18N_DIR/en.sh"
|
||
}
|
||
|
||
i18n_load_lang() {
|
||
local lang="$1"
|
||
case "$lang" in
|
||
en)
|
||
i18n_load_default
|
||
;;
|
||
ru)
|
||
i18n_load_default # base (fallback values)
|
||
# shellcheck source=install/i18n/ru.sh
|
||
[ -f "$I18N_DIR/ru.sh" ] && source "$I18N_DIR/ru.sh"
|
||
;;
|
||
*)
|
||
i18n_load_default
|
||
;;
|
||
esac
|
||
}
|
||
|
||
# Welcome banner. Всегда EN. Запускается из install.sh до мастера.
|
||
i18n_print_welcome() {
|
||
echo ""
|
||
echo " ╔═══════════════════════════════════════════════════════╗"
|
||
echo " ║ ${STR_WELCOME_TITLE} ║"
|
||
echo " ║ ${STR_WELCOME_TAGLINE} ║"
|
||
echo " ╚═══════════════════════════════════════════════════════╝"
|
||
echo ""
|
||
}
|