Этапа 1: Мультиязычность (Project Babel).

 

Этапа 1: Мультиязычность (Project Babel). Мы внедрим его аккуратно, не ломая текущую логику, создав слой абстракции для текстов.

План внедрения (Этап 1)

1. Слой данных: Создание словарей (locales.ts)

Мы уберем жестко прописанный текст из кода. Вместо строк 'Сформировать открытку' мы будем использовать ключи 'ui.button_generate'.

  • Действие: Создаем структуру данных TranslationMap.

  • Состав:

    • ru: Текущие тексты.

    • en: Английский (международный).

    • es / de: Задел на будущее.

  • Что переводим: Заголовки, кнопки, описания стилей, сообщения об ошибках, уведомления (Toast).

2. Слой состояния: LanguageContext

Создаем "нервную систему" для языка.

  • Действие: Внедряем React Context, который хранит текущий язык (currentLang) и функцию перевода (t(key)).

  • Логика:

    • При запуске проверяем localStorage. Если там пусто — берем язык браузера (navigator.language).

    • Если язык браузера не поддерживается — ставим en по умолчанию.

3. Адаптация констант (constants.tsx)

Сейчас стили (Поэт, Бро) и визуальные стили (Киберпанк, Гравюра) имеют жесткие названия.

  • Изменение: Превращаем поля name и description в объектах AI_PERSONAS и VISUAL_STYLES из строк в ключи перевода или объекты {ru: "...", en: "..."}.

  • UI: В интерфейсе рендерим название в зависимости от выбранного языка.

4. Модификация Ядра ИИ (geminiService.ts) — Критически важно

Gemini должна знать, на каком языке писать, независимо от того, на каком языке интерфейс.

  • Новый параметр: В функцию generateGreetingText добавляем аргумент outputLanguage.

  • Промпт-инжиниринг:

    • Текущий: "Напиши поздравление..." (Русский).

    • Новый: "You are a greeting expert. Generate a text in ${outputLanguage} language... Context provided by user: ..."

    • Мы переведем системную инструкцию на английский (так Gemini работает точнее), а целевой язык вынесем в переменную.

5. Интерфейс настроек (App.tsx)

  • Добавление контрола: В модальное окно настроек (где токен) добавляем выпадающий список с флагами стран.

  • Выбор языка открытки: В панели генератора (где выбор стиля) добавляем отдельный переключатель: "Язык текста открытки". По умолчанию он равен языку интерфейса, но его можно изменить (например, интерфейс русский -> открытка на испанском).

6. Локализация дат и форматов

  • Заменяем все вызовы .toLocaleDateString('ru-RU') на динамический .toLocaleDateString(currentLang).


Итог: После этого этапа приложение станет глобальным. Мы готовы приступать, когда дашь команду.

Комментарии

Популярные сообщения из этого блога

Технический Аудит: Aegis-Stream Control Panel (v1.3.36).