@intlayer/docs 5.7.8 → 5.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/blog/ar/intlayer_with_next-i18next.md +5 -6
- package/blog/ar/intlayer_with_next-intl.md +3 -4
- package/blog/ar/intlayer_with_react-i18next.md +1 -1
- package/blog/ar/intlayer_with_react-intl.md +1 -1
- package/blog/ar/next-i18next_vs_next-intl_vs_intlayer.md +96 -219
- package/blog/ar/react-i18next_vs_react-intl_vs_intlayer.md +88 -129
- package/blog/ar/vue-i18n_vs_intlayer.md +268 -0
- package/blog/de/intlayer_with_next-i18next.md +5 -6
- package/blog/de/intlayer_with_react-intl.md +1 -1
- package/blog/de/next-i18next_vs_next-intl_vs_intlayer.md +93 -216
- package/blog/de/react-i18next_vs_react-intl_vs_intlayer.md +87 -128
- package/blog/de/vue-i18n_vs_intlayer.md +268 -0
- package/blog/en/intlayer_with_next-i18next.md +5 -6
- package/blog/en/intlayer_with_next-intl.md +3 -4
- package/blog/en/intlayer_with_react-i18next.md +1 -1
- package/blog/en/intlayer_with_react-intl.md +1 -1
- package/blog/en/next-i18next_vs_next-intl_vs_intlayer.md +89 -220
- package/blog/en/react-i18next_vs_react-intl_vs_intlayer.md +85 -123
- package/blog/en/vue-i18n_vs_intlayer.md +268 -0
- package/blog/en-GB/intlayer_with_next-i18next.md +5 -6
- package/blog/en-GB/intlayer_with_next-intl.md +3 -4
- package/blog/en-GB/intlayer_with_react-i18next.md +1 -1
- package/blog/en-GB/intlayer_with_react-intl.md +1 -1
- package/blog/en-GB/next-i18next_vs_next-intl_vs_intlayer.md +85 -218
- package/blog/en-GB/react-i18next_vs_react-intl_vs_intlayer.md +80 -130
- package/blog/en-GB/vue-i18n_vs_intlayer.md +258 -0
- package/blog/es/intlayer_with_next-i18next.md +5 -6
- package/blog/es/intlayer_with_next-intl.md +3 -4
- package/blog/es/intlayer_with_react-i18next.md +1 -1
- package/blog/es/intlayer_with_react-intl.md +1 -1
- package/blog/es/next-i18next_vs_next-intl_vs_intlayer.md +93 -216
- package/blog/es/react-i18next_vs_react-intl_vs_intlayer.md +87 -128
- package/blog/es/vue-i18n_vs_intlayer.md +268 -0
- package/blog/fr/intlayer_with_next-i18next.md +5 -6
- package/blog/fr/intlayer_with_next-intl.md +3 -4
- package/blog/fr/intlayer_with_react-i18next.md +1 -1
- package/blog/fr/intlayer_with_react-intl.md +1 -1
- package/blog/fr/next-i18next_vs_next-intl_vs_intlayer.md +91 -214
- package/blog/fr/react-i18next_vs_react-intl_vs_intlayer.md +86 -127
- package/blog/fr/vue-i18n_vs_intlayer.md +269 -0
- package/blog/hi/intlayer_with_next-i18next.md +5 -6
- package/blog/hi/intlayer_with_next-intl.md +3 -4
- package/blog/hi/intlayer_with_react-i18next.md +1 -1
- package/blog/hi/intlayer_with_react-intl.md +1 -1
- package/blog/hi/next-i18next_vs_next-intl_vs_intlayer.md +97 -220
- package/blog/hi/react-i18next_vs_react-intl_vs_intlayer.md +89 -130
- package/blog/hi/vue-i18n_vs_intlayer.md +268 -0
- package/blog/it/intlayer_with_next-i18next.md +5 -6
- package/blog/it/intlayer_with_next-intl.md +3 -4
- package/blog/it/intlayer_with_react-i18next.md +1 -1
- package/blog/it/intlayer_with_react-intl.md +1 -1
- package/blog/it/next-i18next_vs_next-intl_vs_intlayer.md +91 -214
- package/blog/it/react-i18next_vs_react-intl_vs_intlayer.md +86 -127
- package/blog/it/vue-i18n_vs_intlayer.md +268 -0
- package/blog/ja/intlayer_with_next-i18next.md +5 -6
- package/blog/ja/intlayer_with_next-intl.md +3 -4
- package/blog/ja/intlayer_with_react-intl.md +1 -1
- package/blog/ja/next-i18next_vs_next-intl_vs_intlayer.md +93 -216
- package/blog/ja/react-i18next_vs_react-intl_vs_intlayer.md +87 -128
- package/blog/ja/vue-i18n_vs_intlayer.md +268 -0
- package/blog/ko/intlayer_with_next-i18next.md +5 -6
- package/blog/ko/intlayer_with_next-intl.md +3 -4
- package/blog/ko/intlayer_with_react-intl.md +1 -1
- package/blog/ko/next-i18next_vs_next-intl_vs_intlayer.md +95 -217
- package/blog/ko/react-i18next_vs_react-intl_vs_intlayer.md +89 -130
- package/blog/ko/vue-i18n_vs_intlayer.md +268 -0
- package/blog/pt/intlayer_with_next-i18next.md +5 -6
- package/blog/pt/intlayer_with_next-intl.md +3 -4
- package/blog/pt/intlayer_with_react-intl.md +1 -1
- package/blog/pt/next-i18next_vs_next-intl_vs_intlayer.md +93 -216
- package/blog/pt/react-i18next_vs_react-intl_vs_intlayer.md +87 -128
- package/blog/pt/vue-i18n_vs_intlayer.md +268 -0
- package/blog/ru/intlayer_with_next-i18next.md +5 -6
- package/blog/ru/intlayer_with_next-intl.md +3 -4
- package/blog/ru/intlayer_with_react-i18next.md +1 -1
- package/blog/ru/intlayer_with_react-intl.md +1 -1
- package/blog/ru/next-i18next_vs_next-intl_vs_intlayer.md +94 -217
- package/blog/ru/react-i18next_vs_react-intl_vs_intlayer.md +87 -128
- package/blog/ru/vue-i18n_vs_intlayer.md +268 -0
- package/blog/zh/intlayer_with_next-i18next.md +5 -6
- package/blog/zh/intlayer_with_next-intl.md +3 -4
- package/blog/zh/intlayer_with_react-i18next.md +1 -1
- package/blog/zh/intlayer_with_react-intl.md +1 -1
- package/blog/zh/next-i18next_vs_next-intl_vs_intlayer.md +93 -216
- package/blog/zh/react-i18next_vs_react-intl_vs_intlayer.md +87 -128
- package/blog/zh/vue-i18n_vs_intlayer.md +269 -0
- package/dist/cjs/generated/blog.entry.cjs +41 -0
- package/dist/cjs/generated/blog.entry.cjs.map +1 -1
- package/dist/cjs/generated/docs.entry.cjs +41 -0
- package/dist/cjs/generated/docs.entry.cjs.map +1 -1
- package/dist/esm/generated/blog.entry.mjs +41 -0
- package/dist/esm/generated/blog.entry.mjs.map +1 -1
- package/dist/esm/generated/docs.entry.mjs +41 -0
- package/dist/esm/generated/docs.entry.mjs.map +1 -1
- package/dist/types/generated/blog.entry.d.ts +1 -0
- package/dist/types/generated/blog.entry.d.ts.map +1 -1
- package/dist/types/generated/docs.entry.d.ts +1 -0
- package/dist/types/generated/docs.entry.d.ts.map +1 -1
- package/docs/ar/formatters.md +625 -0
- package/docs/ar/how_works_intlayer.md +2 -4
- package/docs/ar/interest_of_intlayer.md +159 -49
- package/docs/ar/intlayer_CMS.md +2 -3
- package/docs/ar/intlayer_visual_editor.md +2 -3
- package/docs/ar/intlayer_with_tanstack.md +1 -1
- package/docs/ar/introduction.md +7 -7
- package/docs/ar/packages/intlayer/index.md +3 -3
- package/docs/ar/packages/next-intlayer/index.md +3 -3
- package/docs/de/formatters.md +649 -0
- package/docs/de/interest_of_intlayer.md +161 -47
- package/docs/de/introduction.md +5 -5
- package/docs/de/packages/intlayer/index.md +3 -3
- package/docs/de/packages/next-intlayer/index.md +3 -3
- package/docs/de/packages/react-intlayer/index.md +3 -3
- package/docs/en/dictionary/enumeration.md +2 -2
- package/docs/en/dictionary/function_fetching.md +2 -2
- package/docs/en/dictionary/get_started.md +2 -2
- package/docs/en/dictionary/translation.md +2 -2
- package/docs/en/formatters.md +618 -0
- package/docs/en/how_works_intlayer.md +2 -4
- package/docs/en/interest_of_intlayer.md +170 -46
- package/docs/en/intlayer_CMS.md +2 -3
- package/docs/en/intlayer_visual_editor.md +2 -3
- package/docs/en/intlayer_with_create_react_app.md +2 -2
- package/docs/en/intlayer_with_express.md +2 -2
- package/docs/en/intlayer_with_tanstack.md +1 -1
- package/docs/en/introduction.md +7 -7
- package/docs/en/packages/express-intlayer/index.md +2 -2
- package/docs/en/packages/intlayer/getConfiguration.md +2 -3
- package/docs/en/packages/intlayer/getEnumeration.md +2 -7
- package/docs/en/packages/intlayer/getHTMLTextDir.md +2 -4
- package/docs/en/packages/intlayer/getLocaleLang.md +2 -4
- package/docs/en/packages/intlayer/getLocaleName.md +2 -3
- package/docs/en/packages/intlayer/getLocalizedUrl.md +2 -8
- package/docs/en/packages/intlayer/getMultilingualUrls.md +2 -7
- package/docs/en/packages/intlayer/getPathWithoutLocale.md +2 -3
- package/docs/en/packages/intlayer/getTranslation.md +2 -4
- package/docs/en/packages/intlayer/index.md +5 -5
- package/docs/en/packages/next-intlayer/index.md +5 -5
- package/docs/en/packages/next-intlayer/t.md +2 -2
- package/docs/en/packages/next-intlayer/useDictionary.md +2 -2
- package/docs/en/packages/next-intlayer/useIntlayer.md +2 -2
- package/docs/en/packages/next-intlayer/useLocale.md +2 -2
- package/docs/en/packages/react-intlayer/index.md +5 -5
- package/docs/en/packages/react-intlayer/t.md +2 -2
- package/docs/en/packages/react-intlayer/useI18n.md +2 -2
- package/docs/en/packages/react-intlayer/useIntlayer.md +2 -2
- package/docs/en/packages/react-intlayer/useLocale.md +2 -2
- package/docs/en/packages/react-scripts-intlayer/index.md +2 -2
- package/docs/en/packages/solid-intlayer/index.md +2 -2
- package/docs/en/packages/vite-intlayer/index.md +2 -2
- package/docs/en-GB/formatters.md +625 -0
- package/docs/en-GB/how_works_intlayer.md +2 -4
- package/docs/en-GB/interest_of_intlayer.md +157 -53
- package/docs/en-GB/intlayer_with_tanstack.md +1 -1
- package/docs/en-GB/introduction.md +2 -2
- package/docs/en-GB/packages/intlayer/index.md +3 -3
- package/docs/en-GB/packages/next-intlayer/index.md +3 -3
- package/docs/en-GB/packages/react-intlayer/index.md +3 -3
- package/docs/es/formatters.md +649 -0
- package/docs/es/how_works_intlayer.md +2 -4
- package/docs/es/interest_of_intlayer.md +156 -47
- package/docs/es/intlayer_with_tanstack.md +1 -1
- package/docs/es/introduction.md +5 -5
- package/docs/es/packages/intlayer/index.md +3 -3
- package/docs/es/packages/next-intlayer/index.md +3 -3
- package/docs/fr/formatters.md +649 -0
- package/docs/fr/how_works_intlayer.md +2 -4
- package/docs/fr/interest_of_intlayer.md +157 -46
- package/docs/fr/intlayer_with_tanstack.md +1 -1
- package/docs/fr/introduction.md +5 -5
- package/docs/fr/packages/intlayer/index.md +3 -3
- package/docs/fr/packages/next-intlayer/index.md +3 -3
- package/docs/fr/packages/react-intlayer/index.md +3 -3
- package/docs/hi/formatters.md +630 -0
- package/docs/hi/how_works_intlayer.md +2 -4
- package/docs/hi/interest_of_intlayer.md +155 -42
- package/docs/hi/intlayer_with_tanstack.md +1 -1
- package/docs/hi/introduction.md +5 -5
- package/docs/hi/packages/intlayer/index.md +3 -3
- package/docs/hi/packages/next-intlayer/index.md +3 -3
- package/docs/hi/packages/react-intlayer/index.md +3 -3
- package/docs/it/formatters.md +647 -0
- package/docs/it/how_works_intlayer.md +2 -4
- package/docs/it/interest_of_intlayer.md +157 -46
- package/docs/it/intlayer_with_tanstack.md +1 -1
- package/docs/it/introduction.md +5 -5
- package/docs/it/packages/intlayer/index.md +3 -3
- package/docs/it/packages/next-intlayer/index.md +3 -3
- package/docs/it/packages/react-intlayer/index.md +3 -3
- package/docs/ja/formatters.md +649 -0
- package/docs/ja/how_works_intlayer.md +2 -4
- package/docs/ja/interest_of_intlayer.md +154 -48
- package/docs/ja/intlayer_with_tanstack.md +1 -1
- package/docs/ja/introduction.md +5 -5
- package/docs/ja/packages/intlayer/index.md +3 -3
- package/docs/ja/packages/next-intlayer/index.md +3 -3
- package/docs/ja/packages/react-intlayer/index.md +3 -3
- package/docs/ko/formatters.md +649 -0
- package/docs/ko/how_works_intlayer.md +2 -4
- package/docs/ko/interest_of_intlayer.md +157 -48
- package/docs/ko/intlayer_with_tanstack.md +1 -1
- package/docs/ko/introduction.md +5 -5
- package/docs/ko/packages/intlayer/index.md +3 -3
- package/docs/ko/packages/next-intlayer/index.md +3 -3
- package/docs/ko/packages/react-intlayer/index.md +3 -3
- package/docs/pt/formatters.md +625 -0
- package/docs/pt/how_works_intlayer.md +2 -4
- package/docs/pt/interest_of_intlayer.md +162 -47
- package/docs/pt/intlayer_with_tanstack.md +1 -1
- package/docs/pt/introduction.md +5 -5
- package/docs/pt/packages/intlayer/index.md +3 -3
- package/docs/pt/packages/next-intlayer/index.md +3 -3
- package/docs/pt/packages/react-intlayer/index.md +3 -3
- package/docs/ru/autoFill.md +2 -2
- package/docs/ru/configuration.md +1 -40
- package/docs/ru/formatters.md +649 -0
- package/docs/ru/how_works_intlayer.md +5 -7
- package/docs/ru/index.md +1 -1
- package/docs/ru/interest_of_intlayer.md +165 -50
- package/docs/ru/intlayer_CMS.md +7 -8
- package/docs/ru/intlayer_cli.md +4 -7
- package/docs/ru/intlayer_visual_editor.md +5 -6
- package/docs/ru/intlayer_with_angular.md +1 -1
- package/docs/ru/intlayer_with_create_react_app.md +5 -5
- package/docs/ru/intlayer_with_lynx+react.md +1 -1
- package/docs/ru/intlayer_with_nextjs_15.md +3 -3
- package/docs/ru/intlayer_with_nextjs_page_router.md +2 -2
- package/docs/ru/intlayer_with_nuxt.md +1 -1
- package/docs/ru/intlayer_with_react_native+expo.md +2 -2
- package/docs/ru/intlayer_with_tanstack.md +3 -3
- package/docs/ru/intlayer_with_vite+preact.md +3 -3
- package/docs/ru/intlayer_with_vite+react.md +3 -3
- package/docs/ru/intlayer_with_vite+solid.md +1 -1
- package/docs/ru/intlayer_with_vite+svelte.md +1 -1
- package/docs/ru/intlayer_with_vite+vue.md +2 -2
- package/docs/ru/introduction.md +8 -8
- package/docs/ru/locale_mapper.md +1 -1
- package/docs/ru/packages/@intlayer/api/index.md +2 -2
- package/docs/ru/packages/@intlayer/chokidar/index.md +1 -1
- package/docs/ru/packages/@intlayer/cli/index.md +2 -2
- package/docs/ru/packages/@intlayer/config/index.md +2 -2
- package/docs/ru/packages/@intlayer/core/index.md +2 -2
- package/docs/ru/packages/@intlayer/design-system/index.md +2 -2
- package/docs/ru/packages/@intlayer/dictionary-entry/index.md +2 -2
- package/docs/ru/packages/@intlayer/editor/index.md +1 -1
- package/docs/ru/packages/@intlayer/editor-react/index.md +1 -1
- package/docs/ru/packages/@intlayer/webpack/index.md +1 -1
- package/docs/ru/packages/angular-intlayer/index.md +1 -1
- package/docs/ru/packages/express-intlayer/index.md +3 -3
- package/docs/ru/packages/express-intlayer/t.md +1 -1
- package/docs/ru/packages/intlayer/getEnumeration.md +3 -8
- package/docs/ru/packages/intlayer/getTranslation.md +3 -5
- package/docs/ru/packages/intlayer/getTranslationContent.md +1 -3
- package/docs/ru/packages/intlayer/index.md +6 -6
- package/docs/ru/packages/intlayer-cli/index.md +1 -1
- package/docs/ru/packages/intlayer-editor/index.md +2 -2
- package/docs/ru/packages/lynx-intlayer/index.md +1 -1
- package/docs/ru/packages/next-intlayer/index.md +7 -7
- package/docs/ru/packages/next-intlayer/t.md +4 -4
- package/docs/ru/packages/next-intlayer/useLocale.md +3 -3
- package/docs/ru/packages/nuxt-intlayer/index.md +1 -1
- package/docs/ru/packages/preact-intlayer/index.md +1 -1
- package/docs/ru/packages/react-intlayer/index.md +7 -7
- package/docs/ru/packages/react-intlayer/t.md +4 -4
- package/docs/ru/packages/react-native-intlayer/index.md +1 -1
- package/docs/ru/packages/react-scripts-intlayer/index.md +3 -3
- package/docs/ru/packages/solid-intlayer/index.md +3 -3
- package/docs/ru/packages/svelte-intlayer/index.md +1 -1
- package/docs/ru/packages/vite-intlayer/index.md +3 -3
- package/docs/ru/packages/vue-intlayer/index.md +1 -1
- package/docs/ru/per_locale_file.md +1 -1
- package/docs/ru/roadmap.md +3 -5
- package/docs/ru/vs_code_extension.md +1 -1
- package/docs/zh/formatters.md +647 -0
- package/docs/zh/how_works_intlayer.md +2 -4
- package/docs/zh/interest_of_intlayer.md +155 -48
- package/docs/zh/intlayer_with_tanstack.md +1 -1
- package/docs/zh/introduction.md +5 -5
- package/docs/zh/packages/intlayer/index.md +3 -3
- package/docs/zh/packages/next-intlayer/index.md +3 -3
- package/docs/zh/packages/react-intlayer/index.md +3 -3
- package/frequent_questions/ar/domain_routing.md +1 -1
- package/frequent_questions/en/domain_routing.md +1 -1
- package/frequent_questions/en-GB/domain_routing.md +1 -1
- package/frequent_questions/es/domain_routing.md +1 -1
- package/frequent_questions/fr/domain_routing.md +1 -1
- package/frequent_questions/hi/domain_routing.md +1 -1
- package/frequent_questions/it/domain_routing.md +1 -1
- package/frequent_questions/ko/domain_routing.md +1 -1
- package/frequent_questions/pt/domain_routing.md +1 -1
- package/frequent_questions/ru/domain_routing.md +1 -1
- package/frequent_questions/ru/get_locale_cookie.md +4 -4
- package/frequent_questions/ru/static_rendering.md +1 -2
- package/frequent_questions/zh/domain_routing.md +1 -1
- package/package.json +11 -11
- package/src/generated/blog.entry.ts +41 -0
- package/src/generated/docs.entry.ts +41 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
|
-
createdAt:
|
|
3
|
-
updatedAt: 2025-
|
|
2
|
+
createdAt: 2025-08-23
|
|
3
|
+
updatedAt: 2025-08-23
|
|
4
4
|
title: Intlayer und next-i18next
|
|
5
5
|
description: Integrieren Sie Intlayer mit next-i18next für eine Next.js-App
|
|
6
6
|
keywords:
|
|
@@ -24,7 +24,6 @@ Sowohl next-i18next als auch Intlayer sind Open-Source-Internationalisierungs- (
|
|
|
24
24
|
Beide Lösungen umfassen drei Hauptkonzepte:
|
|
25
25
|
|
|
26
26
|
1. **Inhaltsdeklaration**: Die Methode zur Definition des übersetzbaren Inhalts Ihrer Anwendung.
|
|
27
|
-
|
|
28
27
|
- Im Falle von `i18next` als `resource` bezeichnet, ist die Inhaltsdeklaration ein strukturiertes JSON-Objekt, das Schlüssel-Wert-Paare für Übersetzungen in einer oder mehreren Sprachen enthält. Siehe [i18next-Dokumentation](https://www.i18next.com/translation-function/essentials) für weitere Informationen.
|
|
29
28
|
- Im Falle von `Intlayer` als `content declaration file` bezeichnet, kann die Inhaltsdeklaration eine JSON-, JS- oder TS-Datei sein, die die strukturierten Daten exportiert. Siehe [Intlayer-Dokumentation](https://intlayer.org/fr/doc/concept/content) für weitere Informationen.
|
|
30
29
|
|
|
@@ -213,8 +212,8 @@ const content = {
|
|
|
213
212
|
content: {
|
|
214
213
|
myTranslatedContent: t({
|
|
215
214
|
en: "Hello World",
|
|
216
|
-
fr: "Bonjour le monde",
|
|
217
215
|
es: "Hola Mundo",
|
|
216
|
+
fr: "Bonjour le monde",
|
|
218
217
|
}),
|
|
219
218
|
},
|
|
220
219
|
} satisfies Dictionary;
|
|
@@ -231,8 +230,8 @@ const content = {
|
|
|
231
230
|
content: {
|
|
232
231
|
myTranslatedContent: t({
|
|
233
232
|
en: "Hello World",
|
|
234
|
-
fr: "Bonjour le monde",
|
|
235
233
|
es: "Hola Mundo",
|
|
234
|
+
fr: "Bonjour le monde",
|
|
236
235
|
}),
|
|
237
236
|
},
|
|
238
237
|
};
|
|
@@ -246,8 +245,8 @@ module.exports = {
|
|
|
246
245
|
content: {
|
|
247
246
|
myTranslatedContent: t({
|
|
248
247
|
en: "Hello World",
|
|
249
|
-
fr: "Bonjour le monde",
|
|
250
248
|
es: "Hola Mundo",
|
|
249
|
+
fr: "Bonjour le monde",
|
|
251
250
|
}),
|
|
252
251
|
},
|
|
253
252
|
};
|
|
@@ -118,8 +118,8 @@ const content = {
|
|
|
118
118
|
// Jeder Aufruf von t() erklärt ein übersetzbares Feld
|
|
119
119
|
helloWorld: t({
|
|
120
120
|
en: "Hello World",
|
|
121
|
-
fr: "Bonjour le monde",
|
|
122
121
|
es: "Hola Mundo",
|
|
122
|
+
fr: "Bonjour le monde",
|
|
123
123
|
}),
|
|
124
124
|
description: t({
|
|
125
125
|
en: "This is a description",
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
---
|
|
2
|
-
createdAt:
|
|
3
|
-
updatedAt: 2025-
|
|
2
|
+
createdAt: 2025-08-23
|
|
3
|
+
updatedAt: 2025-08-23
|
|
4
4
|
title: next-i18next vs next-intl vs Intlayer
|
|
5
|
-
description:
|
|
5
|
+
description: Vergleich von next-i18next mit next-intl und Intlayer für die Internationalisierung (i18n) einer Next.js-App
|
|
6
6
|
keywords:
|
|
7
7
|
- next-intl
|
|
8
8
|
- next-i18next
|
|
9
9
|
- Intlayer
|
|
10
10
|
- Internationalisierung
|
|
11
|
-
-
|
|
11
|
+
- Blog
|
|
12
12
|
- Next.js
|
|
13
13
|
- JavaScript
|
|
14
14
|
- React
|
|
@@ -17,269 +17,146 @@ slugs:
|
|
|
17
17
|
- next-i18next-vs-next-intl-vs-intlayer
|
|
18
18
|
---
|
|
19
19
|
|
|
20
|
-
# next-i18next VS next-intl VS
|
|
20
|
+
# next-i18next VS next-intl VS intlayer | Next.js Internationalisierung (i18n)
|
|
21
21
|
|
|
22
|
-
|
|
22
|
+
Dieser Leitfaden vergleicht drei weit verbreitete i18n-Optionen für **Next.js**: **next-intl**, **next-i18next** und **Intlayer**.
|
|
23
|
+
Wir konzentrieren uns auf den **Next.js 13+ App Router** (mit **React Server Components**) und bewerten:
|
|
23
24
|
|
|
24
|
-
|
|
25
|
+
1. **Architektur & Inhaltsorganisation**
|
|
26
|
+
2. **TypeScript & Sicherheit**
|
|
27
|
+
3. **Umgang mit fehlenden Übersetzungen**
|
|
28
|
+
4. **Routing & Middleware**
|
|
29
|
+
5. **Leistung & Ladeverhalten**
|
|
30
|
+
6. **Entwicklererfahrung (DX), Werkzeuge & Wartung**
|
|
31
|
+
7. **SEO & Skalierbarkeit bei großen Projekten**
|
|
25
32
|
|
|
26
|
-
|
|
27
|
-
2. **TypeScript-Unterstützung**
|
|
28
|
-
3. **Verwaltung fehlender Übersetzungen**
|
|
29
|
-
4. **Unterstützung von Serverkomponenten**
|
|
30
|
-
5. **Erweiterte Routing- & Middleware-Funktionen** für Next.js
|
|
31
|
-
6. **Einfachheit der Einrichtung**
|
|
32
|
-
|
|
33
|
-
Der Leitfaden bietet auch einen **gründlichen Einblick in Intlayer**, der zeigt, warum es eine starke Wahl sein kann – insbesondere für Next.js 13+, einschließlich **App Router** und **Serverkomponenten**.
|
|
33
|
+
> **Kurzfassung**: Alle drei können eine Next.js-App lokalisieren. Wenn Sie **komponentenbezogenen Inhalt**, **strenge TypeScript-Typen**, **Build-Zeit-Prüfungen fehlender Schlüssel**, **tree-shakbare Wörterbücher** und **erstklassige App Router- und SEO-Hilfen** wünschen, ist **Intlayer** die vollständigste und modernste Wahl.
|
|
34
34
|
|
|
35
35
|
---
|
|
36
36
|
|
|
37
|
-
##
|
|
38
|
-
|
|
39
|
-
### 1. next-intl
|
|
37
|
+
## Übergeordnete Positionierung
|
|
40
38
|
|
|
41
|
-
**
|
|
39
|
+
- **next-intl** - Leichtgewichtiges, unkompliziertes Nachrichtenformat mit solider Next.js-Unterstützung. Zentralisierte Kataloge sind üblich; die Entwicklererfahrung ist einfach, aber Sicherheit und großflächige Wartung liegen größtenteils in Ihrer Verantwortung.
|
|
40
|
+
- **next-i18next** - i18next im Next.js-Gewand. Ausgereiftes Ökosystem und Funktionen über Plugins (z. B. ICU), aber die Konfiguration kann umfangreich sein und Kataloge neigen dazu, mit wachsendem Projektumfang zentralisiert zu werden.
|
|
41
|
+
- **Intlayer** - Komponentenorientiertes Inhaltsmodell für Next.js, **strenge TS-Typisierung**, **Build-Zeit-Prüfungen**, **Tree-Shaking**, **eingebaute Middleware- und SEO-Hilfen**, optionaler **Visueller Editor/CMS** und **KI-unterstützte Übersetzungen**.
|
|
42
42
|
|
|
43
|
-
|
|
44
|
-
- **TypeScript-Unterstützung**: Grundlegende TypeScript-Integration. Einige Typdefinitionen existieren, sind jedoch nicht stark auf die automatische Generierung von TypeScript-Definitionen aus Ihren Übersetzungsdateien fokussiert.
|
|
45
|
-
- **Fehlende Übersetzungen**: Grundmechanismus für Rückfalle. Fällt standardmäßig auf einen Schlüssel oder eine Standard-Lokalisierungszeichenfolge zurück. Keine robuste Out-of-the-Box-Tooling für erweiterte Überprüfungen fehlender Übersetzungen.
|
|
46
|
-
- **Unterstützung von Serverkomponenten**: Funktioniert allgemein mit Next.js 13+, jedoch ist das Muster weniger spezialisiert auf tiefe serverseitige Nutzung (z. B. Serverkomponenten mit komplexem dynamischen Routing).
|
|
47
|
-
- **Routing & Middleware**: Middleware-Unterstützung ist möglich, aber begrenzt. Vertraut typischerweise auf Next.js `Middleware` zur Lokalisierungserkennung oder manuelle Konfiguration zur Umgestaltung von Lokalisierungspfaden.
|
|
48
|
-
- **Einrichtungs Einfachheit**: Sehr unkompliziert. Es ist minimaler Boilerplate erforderlich.
|
|
43
|
+
---
|
|
49
44
|
|
|
50
|
-
|
|
45
|
+
## Vergleich der Funktionen im Überblick (Fokus auf Next.js)
|
|
46
|
+
|
|
47
|
+
| Funktion | `next-intlayer` (Intlayer) | `next-intl` | `next-i18next` |
|
|
48
|
+
| -------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- |
|
|
49
|
+
| **Übersetzungen in der Nähe der Komponenten** | ✅ Ja, Inhalt ist mit jeder Komponente zusammengefasst | ❌ Nein | ❌ Nein |
|
|
50
|
+
| **TypeScript-Integration** | ✅ Fortgeschritten, automatisch generierte strenge Typen | ✅ Gut | ⚠️ Grundlegend |
|
|
51
|
+
| **Fehlende Übersetzungserkennung** | ✅ TypeScript-Fehlerhervorhebung und Fehler-/Warnmeldung zur Build-Zeit | ⚠️ Laufzeit-Fallback | ⚠️ Laufzeit-Fallback |
|
|
52
|
+
| **Reicher Inhalt (JSX/Markdown/Komponenten)** | ✅ Direkte Unterstützung | ❌ Nicht für komplexe Knoten ausgelegt | ⚠️ Eingeschränkt |
|
|
53
|
+
| **KI-gestützte Übersetzung** | ✅ Ja, unterstützt mehrere KI-Anbieter. Nutzbar mit eigenen API-Schlüsseln. Berücksichtigt den Kontext Ihrer Anwendung und den Umfang des Inhalts | ❌ Nein | ❌ Nein |
|
|
54
|
+
| **Visueller Editor** | ✅ Ja, lokaler visueller Editor + optionales CMS; kann Codebasis-Inhalte auslagern; einbettbar | ❌ Nein / verfügbar über externe Lokalisierungsplattformen | ❌ Nein / verfügbar über externe Lokalisierungsplattformen |
|
|
55
|
+
| **Lokalisierte Routenführung** | ✅ Ja, unterstützt lokalisierte Pfade direkt (funktioniert mit Next.js & Vite) | ✅ Integriert, App Router unterstützt `[locale]` Segment | ✅ Integriert |
|
|
56
|
+
| **Dynamische Routen-Generierung** | ✅ Ja | ✅ Ja | ✅ Ja |
|
|
57
|
+
| **Pluralisierung** | ✅ Aufzählungsbasierte Muster | ✅ Gut | ✅ Gut |
|
|
58
|
+
| **Formatierung (Daten, Zahlen, Währungen)** | ✅ Optimierte Formatierer (Intl im Hintergrund) | ✅ Gut (Intl-Hilfsmittel) | ✅ Gut (Intl-Hilfsmittel) |
|
|
59
|
+
| **Inhaltsformat** | ✅ .tsx, .ts, .js, .json, .md, .txt, (.yaml in Arbeit) | ✅ .json, .js, .ts | ⚠️ .json |
|
|
60
|
+
| **ICU-Unterstützung** | ⚠️ In Arbeit | ✅ Ja | ⚠️ Über Plugin (`i18next-icu`) |
|
|
61
|
+
| **SEO-Helfer (hreflang, Sitemap)** | ✅ Eingebaute Werkzeuge: Helfer für Sitemap, robots.txt, Metadaten | ✅ Gut | ✅ Gut |
|
|
62
|
+
| **Ökosystem / Community** | ⚠️ Kleinere, aber schnell wachsende und reaktive Community | ✅ Mittelgroß, Next.js-fokussiert | ✅ Mittelgroß, Next.js-fokussiert |
|
|
63
|
+
| **Server-seitiges Rendering & Server-Komponenten** | ✅ Ja, optimiert für SSR / React Server-Komponenten | ⚠️ Unterstützt auf Seitenebene, aber t-Funktionen müssen im Komponentenbaum für untergeordnete Server-Komponenten übergeben werden | ⚠️ Unterstützt auf Seitenebene, aber t-Funktionen müssen im Komponentenbaum für untergeordnete Server-Komponenten übergeben werden |
|
|
64
|
+
| **Tree-shaking (nur genutzte Inhalte laden)** | ✅ Ja, pro Komponente zur Build-Zeit über Babel/SWC-Plugins | ⚠️ Teilweise | ⚠️ Teilweise |
|
|
65
|
+
| **Lazy Loading** | ✅ Ja, pro Locale / pro Wörterbuch | ✅ Ja (pro Route/pro Locale), benötigt Namespace-Verwaltung | ✅ Ja (pro Route/pro Locale), benötigt Namespace-Verwaltung |
|
|
66
|
+
| **Bereinigung ungenutzter Inhalte** | ✅ Ja, pro Wörterbuch zur Build-Zeit | ❌ Nein, kann manuell mit Namespace-Verwaltung gehandhabt werden | ❌ Nein, kann manuell mit Namespace-Verwaltung gehandhabt werden |
|
|
67
|
+
| **Management großer Projekte** | ✅ Fördert Modularität, geeignet für Design-Systeme | ✅ Modular mit Setup | ✅ Modular mit Setup |
|
|
51
68
|
|
|
52
69
|
---
|
|
53
70
|
|
|
54
|
-
|
|
71
|
+
## Tiefgehender Vergleich
|
|
55
72
|
|
|
56
|
-
|
|
73
|
+
### 1) Architektur & Skalierbarkeit
|
|
57
74
|
|
|
58
|
-
- **
|
|
59
|
-
- **
|
|
60
|
-
- **Fehlende Übersetzungen**: i18next bietet Interpolationen/Rückfalle. Das Erkennen fehlender Übersetzungen erfordert jedoch typischerweise zusätzliche Einrichtung oder Drittanbieter-Plugins.
|
|
61
|
-
- **Unterstützung von Serverkomponenten**: Grundlegende Nutzung mit Next.js 13 ist dokumentiert, aber die erweiterte Nutzung (z. B. tiefe Integration mit Serverkomponenten, dynamische Routen-Generierung) kann umständlich sein.
|
|
62
|
-
- **Routing & Middleware**: Vertraut stark auf Next.js `Middleware` und Umleitungen für Locale-Subpfade. Für komplexere Setups müssen Sie möglicherweise in erweiterte i18next-Konfiguration eintauchen.
|
|
63
|
-
- **Einrichtungs-Komplexität**: Vertrauter Ansatz für diejenigen, die an i18next gewöhnt sind. Es kann jedoch beim Bedarf an erweiterten i18n-Funktionen (Namensräume, mehrere Rückfall-Lokalisierungen usw.) aufwendiger werden.
|
|
75
|
+
- **next-intl / next-i18next**: Standardmäßig **zentralisierte Kataloge** pro Locale (plus **Namespaces** in i18next). Funktioniert anfangs gut, wird aber oft zu einer großen gemeinsamen Oberfläche mit zunehmender Kopplung und Schlüsseländerungen.
|
|
76
|
+
- **Intlayer**: Fördert **pro Komponente** (oder pro Funktion) **lokalisierte Wörterbücher**, die **direkt am Code** liegen, den sie bedienen. Dies reduziert die kognitive Belastung, erleichtert die Duplizierung/Migration von UI-Elementen und verringert Konflikte zwischen Teams. Unbenutzte Inhalte sind so leichter zu erkennen und zu entfernen.
|
|
64
77
|
|
|
65
|
-
**
|
|
78
|
+
**Warum das wichtig ist:** In großen Codebasen oder Design-System-Setups skaliert **modularer Inhalt** besser als monolithische Kataloge.
|
|
66
79
|
|
|
67
80
|
---
|
|
68
81
|
|
|
69
|
-
###
|
|
70
|
-
|
|
71
|
-
**Hauptfokus**: Eine moderne, Open-Source-i18n-Bibliothek, die speziell auf Next.js **App Router** (12, 13, 14 und 15) mit integrierter Unterstützung für **Serverkomponenten** und **Turbopack** abgestimmt ist.
|
|
82
|
+
### 2) TypeScript & Sicherheit
|
|
72
83
|
|
|
73
|
-
|
|
84
|
+
- **next-intl**: Solide TypeScript-Unterstützung, aber **Schlüssel sind standardmäßig nicht strikt typisiert**; Sicherheitsmuster müssen manuell gepflegt werden.
|
|
85
|
+
- **next-i18next**: Basis-Typen für Hooks; **strikte Schlüsseltypisierung erfordert zusätzliche Tools/Konfiguration**.
|
|
86
|
+
- **Intlayer**: **Erzeugt strenge Typen** aus Ihren Inhalten. **IDE-Autovervollständigung** und **Kompilierzeitfehler** erkennen Tippfehler und fehlende Schlüssel vor der Bereitstellung.
|
|
74
87
|
|
|
75
|
-
|
|
88
|
+
**Warum das wichtig ist:** Starke Typisierung verschiebt Fehler **nach links** (CI/Build) statt **nach rechts** (Laufzeit).
|
|
76
89
|
|
|
77
|
-
|
|
78
|
-
- Dies macht Ihren Code **modularer und wartbarer**, besonders in großen Codebasen.
|
|
79
|
-
|
|
80
|
-
2. **TypeScript-Unterstützung**
|
|
81
|
-
|
|
82
|
-
- **Automatisch generierte Typdefinitionen**: In dem Moment, in dem Sie Ihren Inhalt definieren, generiert Intlayer Typen, die Autocomplete ermöglichen und Übersetzungsfehler abfangen.
|
|
83
|
-
- Minimiert Laufzeitfehler wie fehlende Schlüssel und bietet fortschrittliche **Autocomplete** direkt in Ihrer IDE.
|
|
84
|
-
|
|
85
|
-
3. **Verwaltung fehlender Übersetzungen**
|
|
90
|
+
---
|
|
86
91
|
|
|
87
|
-
|
|
88
|
-
- Dies stellt sicher, dass Sie nie versehentlich mit fehlendem Text in Ihren Sprachen versenden.
|
|
92
|
+
### 3) Umgang mit fehlenden Übersetzungen
|
|
89
93
|
|
|
90
|
-
|
|
94
|
+
- **next-intl / next-i18next**: Verlassen sich auf **Laufzeit-Fallbacks** (z.B. Anzeige des Schlüssels oder der Standardsprache). Der Build schlägt nicht fehl.
|
|
95
|
+
- **Intlayer**: **Erkennung zur Build-Zeit** mit **Warnungen/Fehlern** bei fehlenden Sprachen oder Schlüsseln.
|
|
91
96
|
|
|
92
|
-
|
|
93
|
-
- Bietet spezialisierte Anbieter (`IntlayerServerProvider`, `IntlayerClientProvider`), um **Serverkontexte zu isolieren** (entscheidend bei der Arbeit mit Next.js 13+).
|
|
97
|
+
**Warum das wichtig ist:** Das Erkennen von Lücken während des Builds verhindert „mysteriöse Strings“ in der Produktion und entspricht strengen Release-Richtlinien.
|
|
94
98
|
|
|
95
|
-
|
|
99
|
+
---
|
|
96
100
|
|
|
97
|
-
|
|
98
|
-
- Handhabt dynamisch lokalisierte Pfade (z. B. `/en-US/about` vs. `/fr/about`) mit minimaler Konfiguration.
|
|
99
|
-
- Bietet Hilfsmethoden wie `getMultilingualUrls` zur Generierung alternativer Sprachlinks (großartig für **SEO**).
|
|
101
|
+
### 4) Routing, Middleware & URL-Strategie
|
|
100
102
|
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
- Ein Wrapper-Plugin `withIntlayer(nextConfig)`, das **alle Umgebungsvariablen und Beobachter für Ihren Inhalt injiziert**.
|
|
104
|
-
- **Keine großen Rückfallkonfigurationen** – das System ist darauf ausgelegt, „einfach zu funktionieren“ mit minimalem Widerstand.
|
|
103
|
+
- Alle drei arbeiten mit **Next.js lokalisiertem Routing** im App Router.
|
|
104
|
+
- **Intlayer** geht noch weiter mit **i18n-Middleware** (Locale-Erkennung über Header/Cookies) und **Hilfsfunktionen**, um lokalisierte URLs und `<link rel="alternate" hreflang="…">`-Tags zu generieren.
|
|
105
105
|
|
|
106
|
-
|
|
106
|
+
**Warum das wichtig ist:** Weniger individuelle Verbindungs-Schichten; **konsistente Benutzererfahrung** und **sauberes SEO** über alle Sprachen hinweg.
|
|
107
107
|
|
|
108
108
|
---
|
|
109
109
|
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
| **Feature** | **next-intl** | **next-i18next** | **Intlayer** |
|
|
113
|
-
| --------------------------------------------- | --------------------------------------------------- | ---------------------------------------------------------- | ------------------------------------------------------------ |
|
|
114
|
-
| **Übersetzungen nahe bei Komponenten halten** | Teilweise – typischerweise ein Lokalisierungsordner | Nicht standardmäßig – oft `public/locales` | **Ja – empfohlen & einfach** |
|
|
115
|
-
| **TypeScript automatisch generiert** | Grundlegende TS-Definitionen | Grundlegende TS-Unterstützung | **Ja – fortgeschritten out-of-the-box** |
|
|
116
|
-
| **Erkennung fehlender Übersetzungen** | Vorwiegend Rückfallzeichenfolgen | Vorwiegend Rückfallzeichenfolgen | **Ja – Checks zur Buildzeit** |
|
|
117
|
-
| **Unterstützung von Serverkomponenten** | Funktioniert, aber nicht spezialisiert | Unterstützt, kann jedoch umständlich sein | **Vollständige Unterstützung mit spezialisierten Anbietern** |
|
|
118
|
-
| **Routing & Middleware** | Manuell in Next-Middleware integriert | Bereitgestellt über Umleitungs-Konfiguration | **Dediziertes i18n-Middleware + erweiterte Hooks** |
|
|
119
|
-
| **Einrichtungs-Komplexität** | Einfach, minimale Konfiguration | Traditionell, kann für erweiterte Nutzung umständlich sein | **Eine Konfigurationsdatei & Plugin** |
|
|
120
|
-
|
|
121
|
-
---
|
|
110
|
+
### 5) Ausrichtung auf Server-Komponenten (RSC)
|
|
122
111
|
|
|
123
|
-
|
|
112
|
+
- **Alle** unterstützen Next.js 13+.
|
|
113
|
+
- **Intlayer** glättet die **Server/Client-Grenze** mit einer konsistenten API und Providern, die für RSC entwickelt wurden, sodass Sie Formatierer oder t-Funktionen nicht durch Komponentenbäume schleusen müssen.
|
|
124
114
|
|
|
125
|
-
|
|
115
|
+
**Warum das wichtig ist:** Klareres mentales Modell und weniger Randfälle in hybriden Bäumen.
|
|
126
116
|
|
|
127
|
-
|
|
117
|
+
---
|
|
128
118
|
|
|
129
|
-
|
|
119
|
+
### 6) Leistung & Ladeverhalten
|
|
130
120
|
|
|
131
|
-
|
|
121
|
+
- **next-intl / next-i18next**: Teilweise Kontrolle über **Namespaces** und **Routen-spezifische Aufteilungen**; Risiko, ungenutzte Strings mitzuliefern, wenn die Disziplin nachlässt.
|
|
122
|
+
- **Intlayer**: **Tree-Shaking** beim Build und **Lazy-Loading pro Wörterbuch/Locale**. Unbenutzter Inhalt wird nicht ausgeliefert.
|
|
132
123
|
|
|
133
|
-
|
|
124
|
+
**Warum das wichtig ist:** Kleinere Bundles und schnellerer Start, besonders bei mehrsprachigen Websites.
|
|
134
125
|
|
|
135
|
-
|
|
126
|
+
---
|
|
136
127
|
|
|
137
|
-
|
|
128
|
+
### 7) DX, Tools & Wartung
|
|
138
129
|
|
|
139
|
-
|
|
130
|
+
- **next-intl / next-i18next**: In der Regel binden Sie externe Plattformen für Übersetzungen und redaktionelle Workflows ein.
|
|
131
|
+
- **Intlayer**: Bietet einen **kostenlosen Visual Editor** und ein **optionales CMS** (Git-freundlich oder extern). Außerdem eine **VSCode-Erweiterung** für die Inhaltserstellung und **KI-unterstützte Übersetzungen** mit Ihren eigenen Provider-Schlüsseln.
|
|
140
132
|
|
|
141
|
-
|
|
142
|
-
- Eine standardisierte `intlayerMiddleware` erfordert keine tiefen benutzerdefinierten Umleitungen.
|
|
133
|
+
**Warum es wichtig ist:** Senkt die Betriebskosten und verkürzt die Schleife zwischen Entwicklern und Inhaltserstellern.
|
|
143
134
|
|
|
144
|
-
|
|
135
|
+
---
|
|
145
136
|
|
|
146
|
-
|
|
147
|
-
- Klare, unkomplizierte Nutzung sowohl für **Server-** als auch **Clientkomponenten** über `IntlayerServerProvider` und `IntlayerClientProvider`.
|
|
137
|
+
## Wann welche Lösung wählen?
|
|
148
138
|
|
|
149
|
-
|
|
150
|
-
|
|
139
|
+
- **Wählen Sie next-intl**, wenn Sie eine **minimale** Lösung wünschen, mit zentralisierten Katalogen vertraut sind und Ihre App **klein bis mittelgroß** ist.
|
|
140
|
+
- **Wählen Sie next-i18next**, wenn Sie das **Plugin-Ökosystem von i18next** benötigen (z. B. erweiterte ICU-Regeln über Plugins) und Ihr Team i18next bereits kennt, wobei Sie **mehr Konfiguration** für Flexibilität akzeptieren.
|
|
141
|
+
- **Wählen Sie Intlayer**, wenn Sie **komponentenbezogenen Inhalt**, **striktes TypeScript**, **Build-Zeit-Garantien**, **Tree-Shaking** und **umfangreiche Routing/SEO/Editor-Tools** schätzen – insbesondere für den **Next.js App Router** und **große, modulare Codebasen**.
|
|
151
142
|
|
|
152
143
|
---
|
|
153
144
|
|
|
154
|
-
##
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
1. **Installieren & Konfigurieren**
|
|
162
|
-
|
|
163
|
-
```bash
|
|
164
|
-
npm install intlayer next-intlayer
|
|
165
|
-
```
|
|
166
|
-
|
|
167
|
-
```ts
|
|
168
|
-
// intlayer.config.ts
|
|
169
|
-
import { Locales, type IntlayerConfig } from "intlayer";
|
|
170
|
-
|
|
171
|
-
const config: IntlayerConfig = {
|
|
172
|
-
internationalization: {
|
|
173
|
-
locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
|
|
174
|
-
defaultLocale: Locales.ENGLISH,
|
|
175
|
-
},
|
|
176
|
-
};
|
|
177
|
-
export default config;
|
|
178
|
-
```
|
|
179
|
-
|
|
180
|
-
2. **Das Plugin verwenden**
|
|
181
|
-
|
|
182
|
-
```ts
|
|
183
|
-
// next.config.mjs
|
|
184
|
-
import { withIntlayer } from "next-intlayer/server";
|
|
185
|
-
|
|
186
|
-
/** @type {import('next').NextConfig} */
|
|
187
|
-
const nextConfig = {};
|
|
188
|
-
|
|
189
|
-
export default withIntlayer(nextConfig);
|
|
190
|
-
```
|
|
191
|
-
|
|
192
|
-
3. **Middleware hinzufügen**
|
|
193
|
-
|
|
194
|
-
```ts
|
|
195
|
-
// src/middleware.ts
|
|
196
|
-
export { intlayerMiddleware as middleware } from "next-intlayer/middleware";
|
|
197
|
-
|
|
198
|
-
export const config = {
|
|
199
|
-
matcher:
|
|
200
|
-
"/((?!api|static|assets|robots|sitemap|sw|service-worker|manifest|.*\\..*|_next).*)",
|
|
201
|
-
};
|
|
202
|
-
```
|
|
203
|
-
|
|
204
|
-
4. **Einen lokalisierten Layout erstellen**
|
|
205
|
-
|
|
206
|
-
```tsx
|
|
207
|
-
// src/app/[locale]/layout.tsx
|
|
208
|
-
import { getHTMLTextDir } from "intlayer";
|
|
209
|
-
import { NextLayoutIntlayer } from "next-intlayer";
|
|
210
|
-
|
|
211
|
-
const LocaleLayout: NextLayoutIntlayer = async ({ children, params }) => {
|
|
212
|
-
const { locale } = params;
|
|
213
|
-
return (
|
|
214
|
-
<html lang={locale} dir={getHTMLTextDir(locale)}>
|
|
215
|
-
<body>{children}</body>
|
|
216
|
-
</html>
|
|
217
|
-
);
|
|
218
|
-
};
|
|
219
|
-
|
|
220
|
-
export { generateStaticParams } from "next-intlayer";
|
|
221
|
-
export default LocaleLayout;
|
|
222
|
-
```
|
|
223
|
-
|
|
224
|
-
5. **Inhalt deklarieren & verwenden**
|
|
225
|
-
|
|
226
|
-
```tsx
|
|
227
|
-
// src/app/[locale]/page.content.ts
|
|
228
|
-
import { t } from "intlayer";
|
|
229
|
-
|
|
230
|
-
export default {
|
|
231
|
-
key: "page",
|
|
232
|
-
content: {
|
|
233
|
-
getStarted: {
|
|
234
|
-
main: t({
|
|
235
|
-
en: "Get started by editing",
|
|
236
|
-
fr: "Commencez par éditer",
|
|
237
|
-
es: "Comience por editar",
|
|
238
|
-
}),
|
|
239
|
-
pageLink: "src/app/page.tsx",
|
|
240
|
-
},
|
|
241
|
-
},
|
|
242
|
-
};
|
|
243
|
-
```
|
|
244
|
-
|
|
245
|
-
```tsx
|
|
246
|
-
// src/app/[locale]/page.tsx
|
|
247
|
-
import { IntlayerServerProvider } from "next-intlayer/server";
|
|
248
|
-
import { IntlayerClientProvider, useIntlayer } from "next-intlayer";
|
|
249
|
-
|
|
250
|
-
const PageContent = () => {
|
|
251
|
-
const { content } = useIntlayer("page");
|
|
252
|
-
return (
|
|
253
|
-
<>
|
|
254
|
-
<p>{content.getStarted.main}</p>
|
|
255
|
-
<code>{content.getStarted.pageLink}</code>
|
|
256
|
-
</>
|
|
257
|
-
);
|
|
258
|
-
};
|
|
259
|
-
|
|
260
|
-
export default function Page({ params }) {
|
|
261
|
-
return (
|
|
262
|
-
<IntlayerServerProvider locale={params.locale}>
|
|
263
|
-
<IntlayerClientProvider locale={params.locale}>
|
|
264
|
-
<PageContent />
|
|
265
|
-
</IntlayerClientProvider>
|
|
266
|
-
</IntlayerServerProvider>
|
|
267
|
-
);
|
|
268
|
-
}
|
|
269
|
-
```
|
|
270
|
-
|
|
271
|
-
</details>
|
|
145
|
+
## Praktische Migrationshinweise (next-intl / next-i18next → Intlayer)
|
|
146
|
+
|
|
147
|
+
- **Pro Funktion starten**: Verschieben Sie eine Route oder Komponente nach der anderen zu **lokalen Wörterbüchern**.
|
|
148
|
+
- **Alte Kataloge parallel behalten**: Überbrücken Sie während der Migration; vermeiden Sie einen Big Bang.
|
|
149
|
+
- **Strenge Prüfungen aktivieren**: Lassen Sie Lücken frühzeitig durch Build-Zeit-Erkennung sichtbar werden.
|
|
150
|
+
- **Middleware & Helfer übernehmen**: Standardisieren Sie die Lokalerkennung und SEO-Tags auf der gesamten Website.
|
|
151
|
+
- **Bundles messen**: Erwarten Sie **Reduzierungen der Bundle-Größe**, da ungenutzte Inhalte entfernt werden.
|
|
272
152
|
|
|
273
153
|
---
|
|
274
154
|
|
|
275
155
|
## Fazit
|
|
276
156
|
|
|
277
|
-
|
|
157
|
+
Alle drei Bibliotheken sind bei der Kernlokalisierung erfolgreich. Der Unterschied liegt darin, **wie viel Arbeit Sie investieren müssen**, um eine robuste, skalierbare Einrichtung in **modernem Next.js** zu erreichen:
|
|
278
158
|
|
|
279
|
-
- **
|
|
280
|
-
-
|
|
281
|
-
- **Leistungsstarke TypeScript**-Auto-Generierung für sichereren Code bietet
|
|
282
|
-
- **Fehlende Übersetzungen** zur Buildzeit behandelt
|
|
283
|
-
- Einen **vereinfachten, einzigen Konfigurationsansatz** mit erweitertem Routing & Middleware bereitstellt
|
|
159
|
+
- Mit **Intlayer** sind **modularer Inhalt**, **striktes TypeScript**, **Build-Zeit-Sicherheit**, **tree-shaken Bundles** sowie **erstklassiger App Router und SEO-Tools** **Standard**, keine lästige Pflicht.
|
|
160
|
+
- Wenn Ihr Team **Wartbarkeit und Geschwindigkeit** in einer mehrsprachigen, komponentenbasierten Anwendung schätzt, bietet Intlayer heute die **vollständigste** Erfahrung.
|
|
284
161
|
|
|
285
|
-
|
|
162
|
+
Siehe das Dokument ['Warum Intlayer?'](https://intlayer.org/doc/why) für weitere Details.
|