KeiSeiKit-1.0/install/lib-i18n.sh
Parfii-bot 0f7e0f45e3 feat(install): i18n модуль + welcome banner
Структура локализации:
  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 проходит.
2026-05-17 15:35:10 +08:00

47 lines
1.9 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 ""
}