Этапа 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).
Итог: После этого этапа приложение станет глобальным. Мы готовы приступать, когда дашь команду.
Комментарии
Отправить комментарий