feat: localization service and frontend integration

- Add localization-service microservice (locale resolution, translations)
- Add frontend API routes /api/locale and /api/translations/[locale]
- Add LocalizationProvider and localization context
- Integrate localization into layout, EmptyChat, MessageInput components
- Update MICROSERVICES.md architecture docs
- Add localization-service to workspaces

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
home
2026-02-20 21:45:44 +03:00
parent 4269c8d99b
commit f4d945a2b5
21 changed files with 878 additions and 107 deletions

View File

@@ -256,11 +256,45 @@
---
### 3.10 Localization Service (реализован)
**Назначение:** Локализация на основе геопозиции. Определяет locale (язык) пользователя по данным из Geo Device Service.
**Расположение:** `apps/localization-service/`
**Зависимость:** Geo Device Service (вызывает `/api/context` для получения countryCode, client.language, Accept-Language).
**API:**
- `GET /api/locale` — resolve locale по IP/заголовкам (гео через geo-device-service)
- `POST /api/locale` — resolve locale с client data (screen, language, geo)
- `GET /api/translations/:locale` — переводы для UI
- `GET /api/locales` — список поддерживаемых локалей
**Данные (LocalizationContext):**
- **locale** — BCP 47 language code (ru, en, de, ...)
- **source** — geo | accept-language | client | fallback
**Приоритет определения locale:**
1. client.language (браузер navigator.language)
2. Accept-Language заголовок
3. countryCode из геопозиции
4. fallback: en
**Запуск:** `npm run dev:locale` или `PORT=4003 npm run start -w localization-service`
**Конфигурация:** `GEO_DEVICE_SERVICE_URL` — URL geo-device-service (по умолчанию http://localhost:4002)
**Интеграция:** Frontend вызывает `/api/locale`, `/api/translations/[locale]` (проксирует к сервису), клиент — `fetchLocaleWithClient()`, `fetchTranslations()` из `@/lib/localization`.
---
## 4. Матрица зависимостей
| Сервис | От кого получает вызовы | Кого вызывает |
|-------------|----------------------------------|----------------------------------|
| Gateway | Frontend | Chat, Storage, Uploads, Search |
| Сервис | От кого получает вызовы | Кого вызывает |
|----------------|----------------------------------|----------------------------------|
| Gateway | Frontend | Chat, Storage, Uploads, Search |
| Localization | Frontend | Geo Device Service |
| Geo Device | Frontend, Localization | — |
| Chat | Gateway | Research, LLM Proxy, Storage |
| Research | Chat | Search, Uploads, LLM Proxy |
| Search | Research, Chat (media) | SearXNG (внешний) |
@@ -285,7 +319,8 @@ gooseek/
│ ├── uploads-service/ # UploadManager, UploadStore
│ ├── storage-service/ # DB, config
│ ├── llm-proxy/ # Models registry, providers
│ ├── geo-device-service/ # Геопозиция, устройство, браузер
│ ├── geo-device-service/ # Геопозиция, устройство, браузер
│ ├── localization-service/ # Локализация (зависит от geo-device)
│ ├── shared-types/ # Общие типы, DTO
│ └── shared-utils/ # formatHistory, splitText, computeSimilarity
├── docker-compose.yaml