Newsletter
Join the Community
Subscribe to our newsletter for the latest news and updates
A Next.js, i18n and Tailwind CSS blogging starter template with multi-language support, MDX, and modern features.
Tailwind Nextjs Starter Blog I18n is a multilingual blogging starter template built on the Next.js App Router and Tailwind CSS, adding complete internationalization to the popular tailwind-nextjs-starter-blog by Timlrx. It uses i18next, react-i18next, i18next-browser-languagedetector, and i18next-resources-to-backend to translate the UI, metadata, posts, tags, authors, and projects. The template takes MDX blog posts as input and outputs a fully localized blog with server-rendered pages, automatic tag pagination, and per-language search. The repository is maintained by PxlSyl and is currently a work in progress, with the author noting that complex server logic for pagination and tags has moved to client-side Zustand components, that sitemap.xml and robots.txt are handled, and that RSS generation still needs fixing.
Tailwind Nextjs Starter Blog I18n is a multilingual blogging starter template that adds complete internationalization to the popular tailwind-nextjs-starter-blog by Timlrx. It runs on the Next.js App Router with Tailwind CSS for styling and uses i18next, react-i18next, i18next-browser-languagedetector, and i18next-resources-to-backend for translations. The template takes MDX blog posts as input and produces a fully localized blog with server-rendered pages, automatic tag pagination, and translated metadata. The repository is maintained by PxlSyl and is currently a work in progress, with known limitations around RSS generation and mobile performance.
locales.js, with a default language and fallback; all UI strings, metadata, authors, posts, tags, and projects have per-language folders or JSON files.app/[locale], the official Next.js recommended i18n pattern, with a custom middleware.ts that rewrites and redirects URLs so the default locale is not prefixed.WebsiteEmbed component for embedding GitHub demo templates, an audio player powered by react-h5-audio-player for podcasts or music, and an automatic sidebar table of contents via a sidetoc component.siteMetadata.js by setting multiauthors to false.featured: true are pinned to a home-page section (maximum two), and each tag automatically generates its own pagination when more than five posts share that tag.iswaline to true in siteMetadata.js.components/formspree/index.tsx.data/blog/en/code-sample.mdx and data/blog/fr/code-sample.mdx; the template handles slugs and tags per language.[locale] dynamic segments, middleware rewrites, and server/client translation functions.WebsiteEmbed component, and link to your project's source.The template organizes translations in app/[locale]/i18n, with client.ts and server.ts exporting hooks for client components and async functions for server components. Blog posts are stored under data/blog/<language>/, and the Contentlayer config defines a required language field for each post and author. A custom middleware.ts checks incoming paths: if the default locale is in the URL it redirects to the unprefixed path, and if a locale is missing it rewrites the request to the default locale. Tag counts are generated into tag-data.json for each locale at build time.
The repository is a public GitHub project and does not state a commercial license; the author encourages stars and freelance offers but does not mention paid tiers. As with the original template, it is intended as an open starter for personal and commercial blogs.
Instead of the next-translate library used in the earlier V.1 i18n fork, this template uses i18next, react-i18next, i18next-browser-languagedetector, and i18next-resources-to-backend. Translations are stored as per-page JSON files in locales/<lang>/, with a common.json namespace as default.
No. The search bar relies on the kbar library, and Algolia support is not planned. If you need Algolia, you would have to implement it yourself instead of using the included kbar integration.
Yes. Add the language to locales.js, create the corresponding JSON files in each locale folder, and update the tag-count generation logic in contentlayer.config.ts to handle more than two languages. The README notes that the current tag-generation code only supports the default and second language by default.
The repository is a work in progress: RSS generation (rss.mjs) still needs a fix, the Framer Motion page transition was removed due to mobile performance concerns, and the author warns that updating dependencies may break the application because some libraries need fixes.
