Spacerr
  • Features
  • Pricing
  • FAQ
  • Docs
Get Access
Spacerr
  • Introduction
  • Features
  • Tech Stack
  • Setup
  • Configuration
  • Agents
  • Database
  • Jobs
  • Admin
  • Settings
  • Billing
  • Storage
  • Email
  • Support
  • Localization
  • SEO
  • Analytics
  • UI And Navigation
  • Deploying To Production
  • Testing And QA
  • Troubleshooting

Search documentation

Search documentation pages.

Documentation/Localization

Localization

Spacerr uses next-intl for localization. The app ships with English and German by default, and it is designed to be easy to extend with more languages when your product needs them.

What It Includes

The localization layer includes:

  • English as the default locale.
  • German as an included additional locale.
  • Clean default English routes without an /en prefix for optimal SEO.
  • Locale prefixed routes for non default languages.
  • Localized public pages.
  • Localized dashboard routes.
  • Localized legal pages.
  • Language switching.
  • Namespaced message files.
  • Locale aware route helpers.
  • Canonical URLs and language alternates for public pages.

Route Rules

English is the default locale and uses clean URLs.

txt
/pricing
/dashboard
/blog

German uses a locale prefix.

txt
/de/pricing
/de/dashboard
/de/blog

Do not create /en routes. If a URL does not include a locale segment, it is treated as English.

API routes are not localized. Keep all src/app/api/** routes stable and non localized.

Important Files

Localization files live under src/i18n.

txt
src/i18n
  en
  de
  locales.ts
  locale-routing.ts

Start with these files:

  • src/i18n/locales.ts for supported locale IDs and the default locale.
  • src/i18n/locale-routing.ts for locale aware routing behavior.
  • src/i18n/en/common.json for shared actions, labels, placeholders, states, and confirmations.
  • src/i18n/en/errors.json for shared error messages.
  • src/i18n/en/product.json for product and landing page copy.
  • src/i18n/en/seo.json for route metadata copy.
  • src/i18n/en/legal.json for legal page copy.
  • Feature files such as auth.json, billing.json, ai-chat.json, settings.json, library.json, blog.json, and contact.json for feature specific copy.

German files mirror the same structure under src/i18n/de.

Message Placement

Put copy in the file that owns the surface.

  • Reused actions and labels go in common.json.
  • Error messages go in errors.json.
  • Landing and pricing copy go in product.json.
  • SEO titles, descriptions, and keywords go in seo.json.
  • Legal copy goes in legal.json.
  • Feature specific UI copy goes in that feature message file.

If the same string appears in multiple places, move it to common.json instead of duplicating it.

Adding A Locale

To add another language:

  1. Add the locale ID to src/i18n/locales.ts.
  2. Add a matching message folder under src/i18n.
  3. Copy the English message file structure.
  4. Translate each message file.
  5. Confirm route helpers generate the new locale prefix.
  6. Check public pages, dashboard pages, legal pages, and blog pages in the new locale.

Keep the default English URLs non prefixed even after adding more locales.

Blog Localization

Blog posts store a locale on each post. The same slug can exist in different languages because the database keeps slug uniqueness scoped to each locale.

Use the same slug for translated versions when it makes sense. That gives search engines and users cleaner matching URLs across languages.

SEO Alternates

Public localized pages should expose language alternates and x-default.

typescript
alternates: {
  canonical,
  languages,
}

The default English canonical URL should stay non prefixed. x-default should also point to the clean English URL.

Checklist

When changing localization, verify:

  • English routes do not use /en.
  • Non default locales use their locale prefix.
  • The language switcher points to the matching route.
  • Legal pages render translated policy copy.
  • Blog lists and posts show the correct language.
  • Metadata includes the correct canonical URL and alternates.
  • New strings are in the right message namespace.
Support

Learn how contact forms, support email, AI support tickets, and escalation guardrails work.

Blog

Learn how the blog is structured in Spacerr.

On this page
What It IncludesRoute RulesImportant FilesMessage PlacementAdding A LocaleBlog LocalizationSEO AlternatesChecklist