Реализован i18n без использования сторонних библиотек
en | ru
getLang()
, только для клиентского компонентаключ-значение
getDictionary()
, только для клиентского компонентаВсе компоненты Link
экспортируем из @/shared/config/i18n
!
Не нужно прокидывать props в каждый компонент, где используется перевод:
- export const Navbar = ({ dict }: { dict: Dictionary['ui'] }) => {...}
+ export const Navbar = async () => {
+ const dictionary = await getDictionary();
Не нужно передавать язык в getDictionary(lang)
, как это реализовано в документации Next.js:
- getDictionary(lang)
+ getDictionary()
Просто используем в любом серверном компоненте const dict = await getDictionary();
, прокидываем в клиентский компонент как props { dict }: { dict: Dictionary['ui'] }
или используем useDictionary()
MDX синхронизирован с i18n
app/[lang]/projects/[category]/[name]/page.tsx
- layout для mdx файлов проектов;app/[lang]/projects/[category]/page.tsx
- страница отображения проектов из категории;Вывод mdx страниц и метаданных происходит за счёт преобразования его через gray-matter. Рендер mdx через MDXRemote next-mdx-remote/rsc
для серверного рендеринга (смотреть MDXRemote)
Проект написан в соответствии с архитектурной методологией Feature-Sliced Design и AppRouter (Next.js).