SocialMateSocialMate
FeaturesPricingStudio StaxRoadmapBlog
❤️ GiveSign inGet started free →
Blog→studio-stax

How We Built Next.js i18n Without next-intl (And Why We Ditched the Plugin)

We tried next-intl with the Next.js plugin. Turbopack silently broke it. Here's the approach we took instead — direct JSON imports, a createT() helper, and TypeScript enforcement.

📅 May 17, 2026⏱ 1 min read

The Problem With next-intl + Turbopack

We wanted i18n for SocialMate's public landing pages. We reached for `next-intl` — the standard choice. Added `createNextIntlPlugin` to `next.config.ts` and got everything wired up.

Then Turbopack happened.

`createNextIntlPlugin` injects a webpack alias that Turbopack silently ignores. At runtime: "Couldn't find next-intl config file." Not an obvious error. Not easy to debug.

The Fix: Direct JSON Imports

We removed the plugin entirely and rewrote the localized landing page with direct JSON imports:

```typescript

import enMessages from '@/messages/en.json'

import esMessages from '@/messages/es.json'

// ... other locales

const MESSAGES: Record<string, typeof enMessages> = { en, es, de, fr, pt, ru, zh }

function createT(locale: string) {

const messages = MESSAGES[locale] ?? MESSAGES['en']

return (key: string) => key.split('.').reduce((o, k) => o?.[k], messages) ?? key

}

```

TypeScript as the Enforcement Layer

The `Record<string, typeof enMessages>` type constraint means every locale file must match the shape of `en.json`. Add a key to English and forget to add it to `zh.json`? TypeScript build error. Caught before Vercel deploy.

The Full-App i18n Rule

For the app interior (Dashboard, Compose, etc.), we use a React context: `I18nContext` with `useI18n()` and `t()`. Each namespace (e.g. `app_dashboard`, `app_queue`) is a flat object under the locale JSON.

Rule: any new key added to `en.json` must be added to all 6 other locale files in the same commit.

Lesson

Next.js 15 + Turbopack + third-party plugins = verify every assumption. When the plugin breaks silently, ditch the plugin and own the implementation.

[SocialMate is open to creators in 7 languages at socialmate.studio](https://socialmate.studio)

Try SocialMate free

Schedule to 7 platforms, get 15+ AI tools, and grow your audience — all for free. No credit card required.

Create free account →

7 platforms · 15+ AI tools · Free forever

Comparing tools?

vs Hootsuitevs Buffervs Latervs Sendiblevs Metricoolvs Publervs Planablevs Sprout Socialvs SocialPilotvs Loomlyvs CoSchedulevs MeetEdgarvs Iconosquarevs Tailwindvs Crowdfirevs Pallyyvs Agorapulsevs Sprinklrvs SocialBeevs ContentStudiovs Missinglettrvs Post Plannervs RecurPostvs Nuelinkvs Fedicavs StatusbrewSee all comparisons →

More from the blog

Why We Built SocialMate: The Full Story

Mar 1, 2026 · 4 min read

→

The Best Free Social Media Scheduler in 2026 (No Credit Card)

Feb 20, 2026 · 5 min read

→

How to Use AI to Write Better Social Media Captions

Feb 10, 2026 · 3 min read

→
View all posts →

❤️ 2% of every SocialMate subscription goes to SM-Give — our charity initiative. Learn about SM-Give →

SocialMateSocialMateby Gilgamesh Enterprise LLC

Product

  • Features
  • Pricing
  • Roadmap
  • Clips Studio
  • SOMA
  • Enki
  • Monetize

Solutions

  • For Streamers
  • For Agencies
  • For Small Business
  • Studio Stax

Company

  • Our Story
  • Blog
  • Merch
  • Affiliates
  • Referral
  • Gil's Guide

Legal

  • Privacy
  • Terms
  • Wall of Love
  • ❤️ SM-Give

© 2026 SocialMate · All rights reserved