Skip to content

MarkMelior/simple-app

Repository files navigation

Реализованный функционал

Интернационализация (i18n)

Реализован i18n без использования сторонних библиотек

Файлы:

  • middleware.ts - основной функционал работы i18n
  • getLang() - возвращает выбранный язык en | ru
  • useLang() - как getLang(), только для клиентского компонента
  • getDictionary() - возвращает объект с переводами ключ-значение
  • useDictionary() - как getDictionary(), только для клиентского компонента
  • type Dictionary
  • /dictionary - директория с json файлами переводов
  • Link - компонент Link для i18n

Особенности:

Все компоненты 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

MDX синхронизирован с i18n

Реализация MDX:

Вывод mdx страниц и метаданных происходит за счёт преобразования его через gray-matter. Рендер mdx через MDXRemote next-mdx-remote/rsc для серверного рендеринга (смотреть MDXRemote)


Архитектура проекта

Проект написан в соответствии с архитектурной методологией Feature-Sliced Design и AppRouter (Next.js).

  • shared - функциональность многократного использования;
  • entity - бизнес сущности;
  • features - повторно используемые реализации целых функций продукта;
  • widgets - большие автономные блоки функциональности или пользовательского интерфейса;
  • app - все, что обеспечивает работу приложения.