Этап 1a: фундамент
- Next 16.4 и Payload 3.91 в одном приложении, PostgreSQL с UUID, TypeScript 6, ESLint 9, Prettier, Vitest - Payload: администраторы с ролями, multi-tenant по сайтам, локализация en/ru/de/fr/es, интерфейс админки ru/en, языки сайта (sites.locales) - Коллекции sites, domains, currencies, countries, locations, tags, tariffs, payment-systems (manual), media и начальные данные (pnpm seed) - Proxy: хост → домен, язык и валюта, внутренние маршруты по хосту; /admin и /api закрыты на доменах брендов - Токены и темы брендов, оболочки сайта и кабинета, переключатели языка, валюты и темы, заглушки страниц - /svc/health, юнит systemd veilix-dev.service - Документация: решения D-022…D-024, команды в CLAUDE.md Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
3400f58a5a
commit
7e331c2c9d
140 files changed
+15885
-43
No files matched your search
@@ -0,0 +1,29 @@
|
||||
import { hasLocale } from 'next-intl'
|
||||
import { getRequestConfig } from 'next-intl/server'
|
||||
|
||||
import { DEFAULT_LOCALE, type Locale, LOCALES } from './locales'
|
||||
|
||||
type Messages = { [key: string]: string | Messages }
|
||||
|
||||
const load = async (locale: Locale): Promise<Messages> =>
|
||||
(await import(`./messages/${locale}.json`)).default
|
||||
|
||||
/** Перевод накладывается на английские сообщения: непереведённый ключ показывается по-английски */
|
||||
const merge = (base: Messages, override: Messages): Messages => {
|
||||
const result: Messages = { ...base }
|
||||
for (const [key, value] of Object.entries(override)) {
|
||||
const current = result[key]
|
||||
result[key] =
|
||||
typeof value === 'object' && typeof current === 'object' ? merge(current, value) : value
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
/** Язык приходит из сегмента [locale] внутреннего маршрута (setRequestLocale в layout) */
|
||||
export default getRequestConfig(async ({ requestLocale }) => {
|
||||
const requested = await requestLocale
|
||||
const locale = hasLocale(LOCALES, requested) ? requested : DEFAULT_LOCALE
|
||||
const base = await load(DEFAULT_LOCALE)
|
||||
const messages = locale === DEFAULT_LOCALE ? base : merge(base, await load(locale))
|
||||
return { locale, messages }
|
||||
})
|
||||
Reference in new issue
Block a user