KeiSeiKit-1.0/install/lib-i18n.sh
Parfii-bot 528681d3dc feat(i18n): расширил язык-набор с 2 до 16
Новые словари:
  uk    Українська
  de    Deutsch
  fr    Français
  es    Español
  pt    Português
  it    Italiano
  tr    Türkçe
  ar    العربية
  hi    हिन्दी
  zh    简体中文
  ja    日本語
  ko    한국어
  id    Bahasa Indonesia
  vi    Tiếng Việt

Каждый файл — 17 STR_* ключей (тот же контракт что en.sh + ru.sh).
lib-i18n.sh::i18n_available_languages — единый список (en + 15)
для меню выбора в мастере. i18n_load_lang упрощён: всегда грузит
английский как fallback, потом поверх — словарь языка (отсутствующий
ключ остаётся английским).

onboarding_pick_language теперь генерирует whiptail/bash select из
i18n_available_languages динамически — добавление нового языка =
один файл `install/i18n/<код>.sh` + одна строка в available_languages,
дальше всё подхватится автоматически.

Перевод формальный, без излишеств. Welcome баннер всегда EN (юзер
ещё не выбрал на момент показа).

Проверено: bash -n всех 16 словарей чисто, roundtrip всех языков
работает (i18n_load_lang en/ru/uk/de/fr/es/pt/it/tr/ar/hi/zh/ja/ko/id/vi
выдают локализованные STR_DONE_TITLE + STR_TR_DIRECT_API), non-TTY
smoke install --no-execute проходит.
2026-05-17 16:51:44 +08:00

65 lines
2.5 KiB
Bash
Raw Permalink 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"
# Сначала всегда грузим английский — это база fallback.
i18n_load_default
# Если выбран не-английский — поверх кладём словарь языка.
# Любой STR_*, отсутствующий в файле, остаётся с английским значением.
if [ "$lang" != "en" ] && [ -f "$I18N_DIR/${lang}.sh" ]; then
# shellcheck disable=SC1090
source "$I18N_DIR/${lang}.sh"
fi
}
# Список доступных языков — для onboarding_pick_language.
# Формат: <code>\t<display_name>
i18n_available_languages() {
cat <<'EOF'
en English
ru Русский
uk Українська
de Deutsch
fr Français
es Español
pt Português
it Italiano
tr Türkçe
ar العربية
hi हिन्दी
zh 简体中文
ja 日本語
ko 한국어
id Bahasa Indonesia
vi Tiếng Việt
EOF
}
# Welcome banner. Всегда EN. Запускается из install.sh до мастера.
i18n_print_welcome() {
echo ""
echo " ╔═══════════════════════════════════════════════════════╗"
echo "${STR_WELCOME_TITLE}"
echo "${STR_WELCOME_TAGLINE}"
echo " ╚═══════════════════════════════════════════════════════╝"
echo ""
}