Sie kennen Next.js, richtig? - Wenn nicht, hören Sie auf, diesen Artikel zu lesen und machen Sie etwas anderes.
Wenn Next.js 13 mit app directory verwendet wir, sich diesen Blogbeitrag an anschauen.
Next.js ist grossartig! Es bietet Ihnen die beste Entwicklererfahrung mit allen Funktionen, die Sie benötigen ...
Inhaltsverzeichnis
- ABER, Sie haben vielleicht schon davon gehört
- Also was können wir jetzt tun?
- Das Rezept
- Das Ergebnis
- Der freiwillige Teil
- 🎉🥳 Herzliche Glückwünsche 🎊🎁
ABER, Sie haben vielleicht schon davon gehört:
Error: i18n support is not compatible with next export. See here for more info on deploying: https://nextjs.org/docs/deployment
Dies passiert, wenn Sie die Funktion internationalisiertes Routing verwenden und versuchen, einen statischen HTML-Export, indem Sie next export
ausführen.
Nun, diese Funktion erfordert einen Node.js-Server oder eine dynamische Logik, die während des Build-Prozesses nicht berechnet werden kann, deshalb ist sie nicht unterstützt.
Dies ist beispielsweise der Fall, wenn Sie next-i18next verwenden.
Also was können wir jetzt tun?
Eine naheliegende Option ist, auf den statischen HTML-Export zu verzichten und als Deployment-Umgebung einen Node.js-Server oder Vercel zu verwenden.
Aber manchmal ist es aufgrund von Unternehmens- oder Architekturrichtlinien zwingend erforderlich, einen statischen Webserver zu verwenden.
Ok dann auf i18n verzichten? - Nicht wirklich, wenn wir hier sind, scheint es eine Voraussetzung zu sein.
Also ohne Next.js? - Dies bedeutet jedoch normalerweise, das gesamte Projekt neu zu schreiben.
Das Ausführen von next export
, wenn i18n nicht verwendet wird, scheint zu funktionieren.
Was ist, wenn wir nicht versuchen, die Funktion internationalisiertes Routing zu verwenden und das i18n-Routing selbst durchführen?
Das Rezept
Um dieses Rezept zu "kochen", benötigen Sie folgende Zutaten:
- Verwenden Sie die Funktion dynamische Routensegmente.
- Bereitschaft, die Struktur Ihrer Projektdateien zu ändern
- Bereitschaft, ein bisschen Code anzupassen
- eine Logik, um die Benutzersprache zu erkennen und entsprechend umzuleiten
Klingt machbar. Lasst uns beginnen!
1. Entfernen Sie die i18n-Optionen aus next.config.js
.
1 | - const { i18n } = require('./next-i18next.config') |
2. Erstellen Sie einen Ordner [locale]
in Ihrem Seitenverzeichnis.
a) Verschieben Sie alle Ihre Seitendateien in diesen Ordner (nicht _app.js
oder _document.js
etc..).
b) Passen Sie ggf. Ihre Importe an.
3. Erstellen Sie eine getStatic.js
-Datei und platzieren Sie sie zum Beispiel in einem lib
-Verzeichnis.
1 | import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; |
4. Verwenden Sie getStaticPaths
und makeStaticProps
auf Ihren Seiten wie folgt:
1 | import { useTranslation } from 'next-i18next' |
5. Installieren Sie next-language-detector.
npm i next-language-detector
6. Erstellen Sie eine languageDetector.js
-Datei und legen Sie sie zum Beispiel im lib
-Verzeichnis ab.
1 | import languageDetector from 'next-language-detector' |
7. Erstellen Sie eine redirect.js
-Datei und legen Sie diese zum Beispiel im lib
-Verzeichnis ab.
1 | import { useEffect } from 'react' |
8. Erstellen Sie für jede Ihrer Seitendateien in Ihrem [locale]
-Verzeichnis, insbesondere aber für die index.js
-Datei, eine gleichnamige Datei mit diesem Inhalt:
1 | import { Redirect } from '../lib/redirect' |
9. Erstellen Sie eine Link.js
-Komponente und platzieren Sie diese beispielsweise im Verzeichnis components
.
1 | import React from 'react' |
10. Ersetzen Sie alle next/link
Link
-Importe durch den entsprechenden ../components/Link
Link
-Import:
1 | - import Link from 'next/link' |
11. Fügen Sie Ihre _document.js
-Datei hinzu oder ändern Sie sie, um das richtige html-Attribut lang
festzulegen:
1 | import Document, { Html, Head, Main, NextScript } from 'next/document' |
12. Falls Sie einen Sprachumschalter haben, erstellen oder passen Sie ihn an:
1 | // components/LanguageSwitchLink.js |
1 | // components/Footer.js |
Das Ergebnis
Wenn Sie jetzt Ihr Projekt starten (next dev
), sollten Sie mehr oder weniger das gleiche Verhalten wie zuvor sehen.
Was ist also der Vorteil?
Versuchen Sie: next build && next export
Sie sollten am Ende so etwas sehen:
1 | ● (SSG) automatically generated as static HTML + JSON (uses getStaticProps) |
Juhuu, kein i18n support is not compatible with next export
Fehler mehr!!!
Herzliche Glückwünsche! Jetzt können Sie den Inhalt Ihres out
-Verzeichnisses auf jedem statischen Webserver "verteilen".
🧑💻 Der komplette Code kann hier gefunden werden.
Der freiwillige Teil
Verbinden Sie sich mit einem grossartigen Übersetzungsmanagementsystem und verwalten Sie Ihre Übersetzungen außerhalb Ihres Codes.
Lassen Sie uns die Übersetzungsdateien mit locize synchronisieren. Dies kann bei Bedarf oder auf dem CI-Server oder vor der Bereitstellung der App erfolgen.
Was zu tun ist, um diesen Schritt zu erreichen:
- in locize: Anmeldung unter https://locize.app/register und login
- in locize: ein neues Projekt erstellen
- in locize: Fügen Sie alle Ihre zusätzlichen Sprachen hinzu (dies kann auch über die API erfolgen)
- installiere das locize-cli (
npm i locize-cli
)
Benutzen Sie die locize-cli
Verwenden Sie den Befehl locize sync
, um Ihr lokales Repository (public/locales
) mit dem zu synchronisieren, was auf locize veröffentlicht wurde.
Alternativ können Sie auch den Befehl locize download
verwenden, um die veröffentlichten locize-Übersetzungen immer in Ihr lokales Repository (public/locales
) herunterzuladen, bevor Sie Ihre App bündeln.
🎉🥳 Herzliche Glückwünsche 🎊🎁
Ich hoffe, Sie haben ein paar neue Dinge über die Generierung statischer Websites (SSG), Next.js, next-i18next, i18next und moderne Lokalisierungsworkflows.
Wenn Sie also Ihr i18n-Thema auf die nächste Ebene bringen möchten, lohnt es sich, die Übersetzungs-Management Platform - locize auszuprobieren.
Die Gründer von locize sind auch die Schöpfer von i18next. Mit der Nutzung von locize unterstützen Sie also direkt die Zukunft von i18next.
👍
Suchen Sie nach einem optimierten Next.js-Übersetzungs-Setup?
Hier finden Sie einen Blogbeitrag zur optimalen Verwendung von next-i18next mit clientseitigem Übersetzungsdownload und SEO-Optimierung.