- Добавлена документация SLM-архитектуры, базовых правил и прикладных разделов - Добавлены разделы: стили, SVG-спрайты, шаблоны генерации, PostCSS, REST, Realtime - Удалены устаревшие файлы (спрайты, скрипты, стили из app/)
3.0 KiB
3.0 KiB
title, description
| title | description |
|---|---|
| Локализация | Как организовать локализацию как infrastructure-модуль. |
Локализация
Как организовать локализацию как infrastructure-модуль.
Назначение
Локализация — инфраструктурная подсистема приложения. Она отвечает за текущую локаль, словари, форматирование переводов и API для компонентов.
Код локализации живёт в src/infrastructure/i18n/. Компоненты и модули не читают словари напрямую — они используют публичный API infrastructure-модуля.
Структура
src/infrastructure/i18n/
├── config/
│ └── i18n.config.ts
├── dictionaries/
│ ├── ru.ts
│ └── en.ts
├── hooks/
│ └── use-translation.hook.ts
├── providers/
│ └── i18n-provider.tsx
├── types/
│ └── i18n.type.ts
└── index.ts
Набор сегментов может отличаться, но публичная точка входа остаётся одна — infrastructure/i18n.
Подключение
app/ только подключает готовый провайдер локализации. Реализация провайдера, словари и конфиг остаются в infrastructure/i18n/.
// src/app/layout.tsx
import type { ReactNode } from 'react'
import { I18nProvider } from 'infrastructure/i18n'
type RootLayoutProps = {
children: ReactNode
}
export default function RootLayout({ children }: RootLayoutProps) {
return (
<html lang="ru">
<body>
<I18nProvider locale="ru">{children}</I18nProvider>
</body>
</html>
)
}
Использование
Компоненты получают переводы через готовый API модуля локализации:
import { useTranslation } from 'infrastructure/i18n'
export const ProfileTitle = () => {
const { t } = useTranslation()
return <h1>{t('profile.title')}</h1>
}
Правила
- Локализация живёт в
infrastructure/i18n/. app/только подключает готовый provider и передаёт locale.- Словари не импортируются напрямую в компоненты, screens или business-модули.
- Ключи переводов не собираются динамически из строк, если это ломает типизацию и поиск.
- Тексты интерфейса не хардкодятся в переиспользуемых компонентах, если они должны переводиться.
- Форматирование дат, чисел и валют должно проходить через API локализации или отдельные утилиты infrastructure-модуля.