Lernen Sie, wie Sie eine nahtlose Internationalisierung (i18n) in Ihren Next.js-Anwendungen implementieren, um ein globales Publikum zu erreichen. Behandelt Routing, Inhaltsübersetzung und Best Practices.
Next.js-Internationalisierung: Mehrsprachige Apps für ein globales Publikum erstellen
In der heutigen vernetzten Welt ist die Entwicklung von Anwendungen, die sich an ein globales Publikum richten, kein Luxus mehr – es ist eine Notwendigkeit. Next.js, ein leistungsstarkes React-Framework, bietet robuste Funktionen zur Implementierung von Internationalisierung (i18n), mit denen Sie mehrsprachige Anwendungen erstellen können, die Benutzern weltweit ein lokalisiertes Erlebnis bieten. Dieser umfassende Leitfaden führt Sie durch die wesentlichen Konzepte, Techniken und Best Practices für die Erstellung internationalisierter Next.js-Anwendungen.
Internationalisierung und Lokalisierung verstehen
Bevor wir uns mit den Besonderheiten von Next.js i18n befassen, wollen wir die Schlüsselbegriffe klären:
- Internationalisierung (i18n): Der Prozess des Entwerfens und Entwickelns einer Anwendung, sodass sie leicht an verschiedene Sprachen und Regionen angepasst werden kann, ohne dass technische Änderungen erforderlich sind. Dies beinhaltet die Abstraktion von Text, Formatierungen und anderen standortspezifischen Elementen.
- Lokalisierung (l10n): Der Prozess der Anpassung einer Anwendung an eine bestimmte Sprache und Region. Dies umfasst die Übersetzung von Text, die Anpassung von Datums- und Zeitformaten, Währungssymbolen und mehr.
Im Wesentlichen bereitet i18n Ihre Anwendung auf die Lokalisierung vor. Indem Sie sprachabhängige Elemente vom Kerncode trennen, erleichtern Sie die Lokalisierung der Anwendung für verschiedene Märkte.
Warum Internationalisierung in Next.js implementieren?
Die Implementierung von i18n in Ihrer Next.js-Anwendung bietet zahlreiche Vorteile:
- Erweiterte Reichweite: Erreichen Sie ein breiteres Publikum, indem Sie Inhalte in deren bevorzugter Sprache bereitstellen.
- Verbesserte Benutzererfahrung: Bieten Sie eine persönlichere und ansprechendere Erfahrung für Benutzer in verschiedenen Regionen.
- Verbesserte SEO: Verbessern Sie die Suchmaschinenoptimierung (SEO), indem Sie lokalisierte Inhalte bereitstellen, die auf bestimmte geografische Regionen abzielen.
- Gesteigerte Konversionen: Steigern Sie die Konversionen, indem Sie Informationen in der Muttersprache des Benutzers präsentieren und so Vertrauen und Verständnis fördern.
- Globale Markenpräsenz: Etablieren Sie eine stärkere globale Markenpräsenz, indem Sie Ihr Engagement für Inklusivität und die Berücksichtigung unterschiedlicher Zielgruppen demonstrieren.
Next.js i18n-Funktionen und Konfiguration
Next.js bietet integrierte Unterstützung für i18n durch seine Routing- und Content-Management-Funktionen. Im Folgenden finden Sie eine Aufschlüsselung der wichtigen Funktionen:
1. Konfiguration von i18n in next.config.js
Die Kernkonfiguration für i18n befindet sich in der Datei next.config.js
. Hier ist ein Beispiel:
/** @type {import('next').NextConfig} */
const nextConfig = {
i18n: {
locales: ['en', 'es', 'fr'], // Ein Array der unterstützten Locales (Sprachcodes)
defaultLocale: 'en', // Das zu verwendende Standard-Locale
localeDetection: true, // Automatische Locale-Erkennung basierend auf den Browsereinstellungen aktivieren/deaktivieren (optional)
// domains: [
// {
// domain: 'example.com',
// defaultLocale: 'en',
// },
// {
// domain: 'example.es',
// defaultLocale: 'es',
// },
// ],
},
}
module.exports = nextConfig;
Erklärung:
locales
: Ein Array, das die Sprachcodes (z. B.'en'
für Englisch,'es'
für Spanisch,'fr'
für Französisch) der von Ihrer Anwendung unterstützten Sprachen enthält. Achten Sie darauf, die ISO 639-1-Sprachcodes für die Konsistenz zu befolgen.defaultLocale
: Die Standardsprache, die Ihre Anwendung verwenden wird. Dies ist die Sprache, die angezeigt wird, wenn keine andere Sprache in der URL angegeben oder aus den Browsereinstellungen des Benutzers erkannt wird. Wählen Sie eine Sprache, die für Ihre primäre Zielgruppe repräsentativ ist.localeDetection
: Ein boolescher Wert, der steuert, ob Next.js automatisch die bevorzugte Sprache des Benutzers basierend auf seinen Browsereinstellungen erkennt. Wenn auftrue
gesetzt, versucht Next.js, den Benutzer zur entsprechenden Sprachversion Ihrer Website umzuleiten.domains
(optional): Ein Array, mit dem Sie Locales bestimmten Domains zuordnen können. Dies ist nützlich, wenn Sie separate Domains für verschiedene Sprachen haben (z. B.example.com
für Englisch,example.es
für Spanisch).
2. Routing mit Locale-Präfixen
Next.js versieht Routen automatisch mit dem Locale-Präfix. Wenn Sie beispielsweise eine Seite unter /about
haben und das Locale 'es' (Spanisch) ist, wird die URL zu /es/about
. Dies ermöglicht verschiedene Sprachversionen von Seiten und befähigt Suchmaschinen, Inhalte für jedes Locale zu indizieren. Das Framework übernimmt die Weiterleitung und das Routing für Sie.
3. Verwendung des useRouter
-Hooks
Der useRouter
-Hook aus next/router
bietet Zugriff auf das aktuelle Locale und andere Routing-Informationen.
import { useRouter } from 'next/router';
function MyComponent() {
const router = useRouter();
const { locale, locales, defaultLocale } = router;
return (
Aktuelles Locale: {locale}
Verfügbare Locales: {locales.join(', ')}
Standard-Locale: {defaultLocale}
);
}
export default MyComponent;
Das router
-Objekt bietet die folgenden Schlüsseleigenschaften:
locale
: Das aktuell ausgewählte Locale (z. B. 'en', 'es', 'fr').locales
: Ein Array aller innext.config.js
definierten unterstützten Locales.defaultLocale
: Das innext.config.js
festgelegte Standard-Locale.asPath
: Der im Browser angezeigte Pfad, einschließlich des Locale-Präfixes (z. B./es/about
).pathname
: Der Pfad ohne das Locale-Präfix (z. B./about
).
Strategien zur Inhaltsübersetzung
Sobald Sie Ihre Next.js-Anwendung für i18n konfiguriert haben, müssen Sie Strategien zur Übersetzung Ihrer Inhalte implementieren. Hier sind einige beliebte Ansätze:
1. Verwendung eines dedizierten Übersetzungsmanagementsystems (TMS)
Für große Projekte mit vielen Sprachen wird ein TMS dringend empfohlen. Beliebte Optionen sind:
- Phrase: Ein cloudbasiertes TMS mit Integrationen für verschiedene Plattformen, einschließlich Next.js. Bietet kollaborative Funktionen und automatisierte Workflows.
- Localize: Ein weiteres cloudbasiertes TMS, das eine breite Palette von Dateiformaten unterstützt und Funktionen zur Übersetzungsverwaltung bietet.
- Crowdin: Ein leistungsstarkes TMS, das in der Open-Source-Community sehr beliebt ist und sich gut in Next.js integrieren lässt, sodass Teams Inhalte effizient übersetzen können.
Vorteile:
- Zentralisiertes Übersetzungsmanagement.
- Kollaborationsfunktionen für Übersetzer.
- Automatisierung von Übersetzungsworkflows.
- Integration in Ihren Entwicklungsworkflow.
2. Erstellen von JSON-Übersetzungsdateien
Für kleinere Projekte ist die Verwendung von JSON-Dateien zur Speicherung von Übersetzungen eine einfache und effektive Methode.
Beispiel-Verzeichnisstruktur:
/src
├── locales
│ ├── en.json
│ └── es.json
├── components
│ └── MyComponent.js
└── pages
└── index.js
Beispiel en.json
:
{
"greeting": "Hello, world!",
"welcomeMessage": "Welcome to our website."
}
Beispiel es.json
:
{
"greeting": "¡Hola, mundo!",
"welcomeMessage": "Bienvenido a nuestro sitio web."
}
Beispiel MyComponent.js
:
import { useRouter } from 'next/router';
import en from '../locales/en.json';
import es from '../locales/es.json';
function MyComponent() {
const { locale } = useRouter();
const t = locale === 'es' ? es : en;
return (
{t.greeting}
{t.welcomeMessage}
);
}
export default MyComponent;
Dieser Ansatz bietet Flexibilität und ist für kleinere Projekte unkompliziert. Er ist im Allgemeinen leicht zu aktualisieren und zu pflegen.
3. Verwendung einer Übersetzungsbibliothek
Mehrere JavaScript-Bibliotheken optimieren die Inhaltsübersetzung innerhalb Ihrer React-Komponenten.
next-i18next
: Eine beliebte Bibliothek, die speziell für Next.js entwickelt wurde. Sie integriert sich gut in das Framework und bietet Funktionen wie serverseitiges Rendern (SSR) und clientseitige Übersetzung.react-i18next
: Eine allgemeine i18n-Bibliothek für React. Sie können sie in Ihren Next.js-Anwendungen verwenden, obwohl sie im Vergleich zunext-i18next
möglicherweise mehr Konfiguration erfordert.
Beispiel mit next-i18next
(Installation: npm install next-i18next i18next react-i18next
):
Erstellen Sie eine i18n-Konfigurationsdatei (z. B. i18n.js
in Ihrem Stammverzeichnis):
// i18n.js
import { createServerSideHelpers } from 'next-i18next'
import { i18n } from './next-i18next.config'
export function initI18next(req, res, namespaces = ['common']) {
const helpers = createServerSideHelpers(
req,
res,
i18n,
namespaces
)
return helpers
}
export { appWithTranslation } from 'next-i18next'
export { i18n }
Erstellen Sie Ihre Next.js-Konfiguration für next-i18next.
// next-i18next.config.js
const { i18n } = require('./next-i18next.config');
/** @type {import('next').NextConfig} */
const nextConfig = {
reactStrictMode: true,
i18n: {
defaultLocale: 'en',
locales: ['en', 'es', 'fr'],
},
// other configuration
}
module.exports = nextConfig
Fügen Sie die Konfiguration und den Übersetzungsimport zu Ihrer _app.js
hinzu:
import { appWithTranslation } from 'next-i18next';
import '../styles/globals.css';
function MyApp({ Component, pageProps }) {
return ;
}
export default appWithTranslation(MyApp);
Erstellen Sie einen Ordner und füllen Sie ihn mit den Locales für Ihre Übersetzungen.
/public
└── locales
├── en
│ └── common.json
├── es
│ └── common.json
└── fr
└── common.json
Beispiel en/common.json:
{
"greeting": "Hello, world!",
"welcomeMessage": "Welcome to our website."
}
Verwendung der Übersetzung in einer Komponente:
import { useTranslation } from 'next-i18next';
function MyComponent() {
const { t } = useTranslation('common');
return (
{t('greeting')}
{t('welcomeMessage')}
);
}
export default MyComponent;
Dieses Beispiel verwendet den useTranslation
-Hook, um Übersetzungen basierend auf dem aktuellen Locale abzurufen.
Umgang mit dynamischen Routen und statischer Seitengenerierung (SSG)
Die Internationalisierung wird komplexer, wenn es um dynamische Routen (z. B. Blogbeiträge, Produktseiten) und statische Seitengenerierung (SSG) geht.
1. Dynamische Routen (z. B. /blog/[slug])
Für dynamische Routen müssen Sie zur Build-Zeit mit getStaticPaths
die korrekten Pfade für jedes Locale generieren. Diese Funktion gibt ein Array von Pfaden zurück, die Next.js vorab rendern soll.
export async function getStaticPaths() {
const paths = [];
const locales = ['en', 'es', 'fr'];
const posts = await fetchPosts(); // Blogbeitragsdaten abrufen
posts.forEach(post => {
locales.forEach(locale => {
paths.push({
params: {
slug: post.slug,
},
locale,
});
});
});
return {
paths,
fallback: false, // oder 'blocking', wenn Sie einen Ladezustand anzeigen möchten
};
}
export async function getStaticProps({ params, locale }) {
const post = await getPostBySlug(params.slug, locale);
return {
props: {
post,
},
};
}
Erklärung:
getStaticPaths
: Diese Funktion iteriert durch Ihre Blogbeiträge und generiert einen Pfad für jeden Beitrag und jedes Locale. Dasparams
-Objekt enthält die Routenparameter (z. B. den Slug des Blogbeitrags).locale
: Dieser Parameter gibt das aktuelle Locale an, sodass Sie den übersetzten Inhalt für das spezifische Locale abrufen können.fallback
: Legt fest, wie Next.js mit Pfaden umgeht, die nicht ingetStaticPaths
definiert sind.fallback: false
generiert 404-Seiten für undefinierte Pfade.fallback: 'blocking'
rendert Seiten bei Bedarf vor.
2. Statische Seitengenerierung (SSG) mit getStaticProps
In getStaticProps
können Sie übersetzte Inhalte basierend auf dem locale
-Parameter abrufen.
export async function getStaticProps({ params, locale }) {
// Inhalt basierend auf Locale und Parametern abrufen
const { post } = await getPostBySlug(params.slug, locale);
return {
props: {
post,
},
};
}
Die Funktion getPostBySlug
sollte den übersetzten Inhalt für den gegebenen Slug und das Locale abrufen, der aus Ihren Übersetzungsdateien, einer Datenbank oder einem CMS stammen könnte.
3. Serverseitiges Rendern (SSR) mit getServerSideProps
Für Inhalte, die zur Anfragezeit abgerufen werden müssen, verwenden Sie getServerSideProps
. Dies ist nützlich, wenn sich der Inhalt häufig ändert oder für jeden Benutzer personalisiert ist.
export async function getServerSideProps({ params, locale, req, res }) {
// Daten basierend auf Locale und Parametern abrufen (z. B. aus einer Datenbank)
const data = await fetchData(params.slug, locale);
return {
props: {
data,
},
};
}
Best Practices für die Next.js-Internationalisierung
Die Befolgung dieser Best Practices wird Ihnen helfen, robuste, wartbare und benutzerfreundliche mehrsprachige Anwendungen zu erstellen:
- Frühzeitig planen: Berücksichtigen Sie die Internationalisierung von Beginn Ihres Projekts an. Es ist viel einfacher, sie von vornherein zu implementieren, als sie später nachzurüsten.
- Inhalt vom Code trennen: Speichern Sie alle übersetzbaren Texte in separaten Dateien (z. B. JSON-Dateien oder einem TMS) und vermeiden Sie das Hardcoding von Text direkt in Ihren Komponenten.
- Ein Übersetzungsmanagementsystem (TMS) verwenden: Für größere Projekte kann ein TMS den Übersetzungsprozess rationalisieren und die Zusammenarbeit verbessern.
- Gründlich testen: Testen Sie Ihre Anwendung in allen unterstützten Sprachen, um genaue Übersetzungen, korrekte Formatierungen und eine ordnungsgemäße Darstellung auf verschiedenen Browsern und Geräten sicherzustellen. Testen Sie auf echten Geräten, nicht nur auf Emulatoren.
- Rechts-nach-Links-Sprachen (RTL) berücksichtigen: Wenn Sie Sprachen wie Arabisch oder Hebräisch unterstützen, stellen Sie sicher, dass Ihr Design und Layout die Rechts-nach-Links-Textrichtung berücksichtigen. Next.js handhabt dies nicht automatisch, daher sind CSS oder andere Lösungen erforderlich.
- Datums- und Zeitformatierung handhaben: Verwenden Sie Bibliotheken oder integrierte Funktionen, um Daten und Zeiten entsprechend dem Locale des Benutzers zu formatieren. Moment.js und date-fns sind zwei beliebte Bibliotheken, die dabei hilfreich sind.
- Zahlen- und Währungsformatierung verwalten: Formatieren Sie Zahlen und Währungssymbole entsprechend dem Locale des Benutzers.
- SEO optimieren: Verwenden Sie sprachspezifische Meta-Tags (
hreflang
), um Suchmaschinen bei der korrekten Indexierung Ihrer Inhalte zu unterstützen. Fügen Sie Sprachcodes in Ihre URLs ein. - Benutzererfahrung priorisieren: Bieten Sie den Benutzern eine klare und intuitive Möglichkeit, zwischen den Sprachen zu wechseln. Erwägen Sie, eine automatische Spracherkennung basierend auf den Browsereinstellungen anzubieten.
- Auf dem Laufenden bleiben: Halten Sie Ihre Next.js-Version und i18n-Bibliotheken auf dem neuesten Stand, um von den neuesten Funktionen und Sicherheitspatches zu profitieren.
- Barrierefreiheit (a11y) berücksichtigen: Stellen Sie sicher, dass Ihre übersetzten Inhalte für Benutzer mit Behinderungen zugänglich sind. Stellen Sie Alternativtexte für Bilder bereit und verwenden Sie geeignete ARIA-Attribute. Verwenden Sie Screenreader zum Testen.
SEO-Überlegungen für internationalisierte Websites
Die Optimierung Ihrer internationalisierten Website für Suchmaschinen ist entscheidend, um organischen Traffic aus der ganzen Welt zu generieren. Hier sind einige wichtige SEO-Best-Practices:
hreflang
-Tags: Implementieren Siehreflang
-Tags im<head>
Ihres HTML, um Suchmaschinen über die sprachlichen und regionalen Varianten Ihres Inhalts zu informieren. Dies ist entscheidend für SEO. Zum Beispiel:<link rel="alternate" hreflang="en" href="https://example.com/en/" />
und<link rel="alternate" hreflang="es" href="https://example.com/es/" />
- Sprachspezifische URLs: Verwenden Sie Sprachcodes in Ihren URLs (z. B.
/en/about
,/es/acerca-de
). Dies zeigt sowohl den Benutzern als auch den Suchmaschinen die Sprache des Inhalts deutlich an. - Lokalisierte Inhalte: Übersetzen Sie Ihre Inhalte korrekt und natürlich. Maschinelle Übersetzungen sollten von einem Muttersprachler überprüft werden.
- Lokalisierte Meta-Beschreibungen und Titel: Schreiben Sie einzigartige und überzeugende Meta-Beschreibungen und Titel für jede Sprache, um die Klickraten in den Suchergebnissen zu verbessern.
- XML-Sitemaps: Erstellen und übermitteln Sie XML-Sitemaps, die alle Sprachvarianten Ihrer Seiten enthalten.
- Interne Verlinkung: Verwenden Sie geeignete interne Links zwischen den Sprachversionen Ihrer Inhalte.
- Länderspezifische Keyword-Recherche: Führen Sie eine Keyword-Recherche in jeder Sprache durch, um die Begriffe zu identifizieren, nach denen Benutzer in jeder Region suchen.
Beispiel: Erstellung eines einfachen mehrsprachigen Blogs
Lassen Sie uns ein vereinfachtes Beispiel eines mehrsprachigen Blogs mit Next.js erstellen. Dies wird eine konkretere Veranschaulichung der oben diskutierten Konzepte bieten.
1. Projekteinrichtung
Erstellen Sie ein neues Next.js-Projekt:
npx create-next-app my-multi-lang-blog
cd my-multi-lang-blog
2. i18n konfigurieren (next.config.js
)
/** @type {import('next').NextConfig} */
const nextConfig = {
reactStrictMode: true,
i18n: {
locales: ['en', 'es', 'fr'],
defaultLocale: 'en',
},
}
module.exports = nextConfig
3. Übersetzungsdateien erstellen
Erstellen Sie einen locales
-Ordner im Stammverzeichnis und fügen Sie die folgenden JSON-Dateien hinzu:
locales/en.json
:
{
"title": "Welcome to My Blog",
"postTitle": "My First Post",
"postContent": "This is the content of my first blog post."
}
locales/es.json
:
{
"title": "Bienvenido a mi Blog",
"postTitle": "Mi Primer Post",
"postContent": "Este es el contenido de mi primer publicación de blog."
}
locales/fr.json
:
{
"title": "Bienvenue sur Mon Blog",
"postTitle": "Mon Premier Article",
"postContent": "Ceci est le contenu de mon premier article de blog."
}
4. Die Blog-Beitrag-Komponente erstellen (z. B. components/BlogPost.js
)
import { useRouter } from 'next/router';
import en from '../locales/en.json';
import es from '../locales/es.json';
import fr from '../locales/fr.json';
function BlogPost() {
const router = useRouter();
const { locale } = router;
let translations;
switch (locale) {
case 'es':
translations = es;
break;
case 'fr':
translations = fr;
break;
default:
translations = en;
}
return (
{translations.postTitle}
{translations.postContent}
);
}
export default BlogPost;
5. Die Index-Seite erstellen (pages/index.js
)
import { useRouter } from 'next/router';
import BlogPost from '../components/BlogPost';
import en from '../locales/en.json';
import es from '../locales/es.json';
import fr from '../locales/fr.json';
function HomePage() {
const router = useRouter();
const { locale, locales } = router;
let translations;
switch (locale) {
case 'es':
translations = es;
break;
case 'fr':
translations = fr;
break;
default:
translations = en;
}
return (
);
}
export default HomePage;
Dieses vereinfachte Beispiel zeigt die grundlegenden Prinzipien der Next.js-Internationalisierung. Sie können dieses grundlegende Framework erweitern, um komplexere Funktionen wie dynamische Routen und die Integration mit Übersetzungsmanagementsystemen einzubeziehen. Erwägen Sie, die obigen Links mit der Link
-Komponente zu verbessern und das entsprechende locale
-Attribut hinzuzufügen.
6. Die Anwendung ausführen
Führen Sie die Anwendung aus mit:
npm run dev
Jetzt können Sie auf Ihren Blog unter http://localhost:3000
(Englisch), http://localhost:3000/es
(Spanisch) und http://localhost:3000/fr
(Französisch) zugreifen. Sie sollten sehen, wie der Titel und der Inhalt des Blogbeitrags je nach ausgewähltem Locale übersetzt werden.
Fazit
Next.js bietet ein umfassendes Set an Funktionen zur Implementierung der Internationalisierung in Ihren Webanwendungen. Indem Sie die in diesem Leitfaden beschriebenen Prinzipien und Techniken befolgen, können Sie mehrsprachige Anwendungen erstellen, die Benutzern auf der ganzen Welt lokalisierte Erlebnisse bieten. Denken Sie daran, Ihre i18n-Strategie frühzeitig zu planen, die richtige Übersetzungsmethode für Ihre Bedürfnisse zu wählen und die Benutzererfahrung zu priorisieren. Mit sorgfältiger Planung und Ausführung können Sie Anwendungen erstellen, die bei einem globalen Publikum Anklang finden und neue Wachstumschancen erschließen. Kontinuierliches Lernen und das Verfolgen der neuesten Versionen und Best Practices stellen sicher, dass Sie Ihre Werkzeuge und Technologien effektiv einsetzen.
Mit dem technologischen Fortschritt ist zu erwarten, dass fortschrittlichere i18n-Funktionen aufkommen werden. Die Fähigkeit, Benutzer über verschiedene Kulturen und Sprachgruppen hinweg zu erreichen, wird für Anwendungsentwickler weltweit eine zentrale Priorität bleiben. Daher ist die Beherrschung der Grundlagen von i18n eine wertvolle Fähigkeit, die Ihren Wert in der heutigen globalen Entwicklungslandschaft steigern wird.