@intlayer/docs 7.0.1 → 7.0.2
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/en/next-i18next_vs_next-intl_vs_intlayer.md +4 -11
- package/dist/cjs/common.cjs +5 -1
- package/dist/cjs/common.cjs.map +1 -1
- package/dist/esm/common.mjs +5 -1
- package/dist/esm/common.mjs.map +1 -1
- package/dist/types/common.d.ts.map +1 -1
- package/docs/ar/intlayer_with_nextjs_15.md +10 -6
- package/docs/ar/intlayer_with_nextjs_16.md +11 -7
- package/docs/de/intlayer_with_nextjs_15.md +10 -6
- package/docs/de/intlayer_with_nextjs_16.md +11 -7
- package/docs/en/CI_CD.md +4 -0
- package/docs/en/configuration.md +29 -42
- package/docs/en/formatters.md +4 -0
- package/docs/en/how_works_intlayer.md +4 -0
- package/docs/en/index.md +1 -0
- package/docs/en/intlayer_CMS.md +6 -0
- package/docs/en/intlayer_cli.md +8 -0
- package/docs/en/intlayer_with_nextjs_14.md +14 -6
- package/docs/en/intlayer_with_nextjs_15.md +14 -6
- package/docs/en/intlayer_with_nextjs_16.md +15 -7
- package/docs/en/intlayer_with_nextjs_page_router.md +4 -0
- package/docs/en/intlayer_with_nuxt.md +4 -0
- package/docs/en/intlayer_with_react_native+expo.md +7 -0
- package/docs/en/intlayer_with_react_router_v7.md +4 -0
- package/docs/en/intlayer_with_tanstack.md +4 -0
- package/docs/en/intlayer_with_vite+preact.md +51 -26
- package/docs/en/intlayer_with_vite+react.md +4 -0
- package/docs/en/intlayer_with_vite+solid.md +4 -0
- package/docs/en/intlayer_with_vite+svelte.md +4 -0
- package/docs/en/intlayer_with_vite+vue.md +4 -0
- package/docs/en/introduction.md +1 -0
- package/docs/en/releases/v7.md +10 -12
- package/docs/en/roadmap.md +6 -0
- package/docs/en-GB/intlayer_with_nextjs_14.md +10 -6
- package/docs/en-GB/intlayer_with_nextjs_15.md +10 -6
- package/docs/en-GB/intlayer_with_nextjs_16.md +11 -7
- package/docs/es/intlayer_with_nextjs_14.md +11 -6
- package/docs/es/intlayer_with_nextjs_15.md +7 -4
- package/docs/es/intlayer_with_nextjs_16.md +11 -7
- package/docs/fr/intlayer_with_nextjs_15.md +10 -6
- package/docs/fr/intlayer_with_nextjs_16.md +12 -25
- package/docs/hi/intlayer_with_nextjs_15.md +10 -6
- package/docs/hi/intlayer_with_nextjs_16.md +11 -7
- package/docs/id/intlayer_with_nextjs_16.md +11 -7
- package/docs/it/intlayer_with_nextjs_15.md +10 -6
- package/docs/it/intlayer_with_nextjs_16.md +11 -7
- package/docs/ja/intlayer_with_nextjs_14.md +11 -6
- package/docs/ja/intlayer_with_nextjs_15.md +10 -6
- package/docs/ja/intlayer_with_nextjs_16.md +11 -7
- package/docs/ko/intlayer_with_nextjs_14.md +11 -6
- package/docs/ko/intlayer_with_nextjs_15.md +10 -6
- package/docs/ko/intlayer_with_nextjs_16.md +11 -7
- package/docs/pl/intlayer_with_nextjs_16.md +11 -7
- package/docs/pt/intlayer_with_nextjs_14.md +10 -7
- package/docs/pt/intlayer_with_nextjs_15.md +10 -6
- package/docs/pt/intlayer_with_nextjs_16.md +11 -7
- package/docs/ru/intlayer_with_nextjs_15.md +7 -4
- package/docs/ru/intlayer_with_nextjs_16.md +11 -7
- package/docs/tr/intlayer_with_nextjs_15.md +10 -6
- package/docs/tr/intlayer_with_nextjs_16.md +11 -7
- package/docs/vi/intlayer_with_nextjs_16.md +11 -7
- package/docs/zh/intlayer_with_nextjs_14.md +11 -6
- package/docs/zh/intlayer_with_nextjs_15.md +7 -4
- package/docs/zh/intlayer_with_nextjs_16.md +11 -7
- package/package.json +14 -14
- package/src/common.ts +7 -1
|
@@ -795,15 +795,17 @@ export const generateMetadata = async ({
|
|
|
795
795
|
* ```
|
|
796
796
|
*/
|
|
797
797
|
const multilingualUrls = getMultilingualUrls("/");
|
|
798
|
+
const localizedUrl =
|
|
799
|
+
multilingualUrls[locale as keyof typeof multilingualUrls];
|
|
798
800
|
|
|
799
801
|
return {
|
|
800
802
|
...metadata,
|
|
801
803
|
alternates: {
|
|
802
|
-
canonical:
|
|
804
|
+
canonical: localizedUrl,
|
|
803
805
|
languages: { ...multilingualUrls, "x-default": "/" },
|
|
804
806
|
},
|
|
805
807
|
openGraph: {
|
|
806
|
-
url:
|
|
808
|
+
url: localizedUrl,
|
|
807
809
|
},
|
|
808
810
|
};
|
|
809
811
|
};
|
|
@@ -835,15 +837,16 @@ export const generateMetadata = async ({ params }) => {
|
|
|
835
837
|
* ```
|
|
836
838
|
*/
|
|
837
839
|
const multilingualUrls = getMultilingualUrls("/");
|
|
840
|
+
const localizedUrl = multilingualUrls[locale];
|
|
838
841
|
|
|
839
842
|
return {
|
|
840
843
|
...metadata,
|
|
841
844
|
alternates: {
|
|
842
|
-
canonical:
|
|
845
|
+
canonical: localizedUrl,
|
|
843
846
|
languages: { ...multilingualUrls, "x-default": "/" },
|
|
844
847
|
},
|
|
845
848
|
openGraph: {
|
|
846
|
-
url:
|
|
849
|
+
url: localizedUrl,
|
|
847
850
|
},
|
|
848
851
|
};
|
|
849
852
|
};
|
|
@@ -875,15 +878,16 @@ const generateMetadata = async ({ params }) => {
|
|
|
875
878
|
* ```
|
|
876
879
|
*/
|
|
877
880
|
const multilingualUrls = getMultilingualUrls("/");
|
|
881
|
+
const localizedUrl = multilingualUrls[locale];
|
|
878
882
|
|
|
879
883
|
return {
|
|
880
884
|
...metadata,
|
|
881
885
|
alternates: {
|
|
882
|
-
canonical:
|
|
886
|
+
canonical: localizedUrl,
|
|
883
887
|
languages: { ...multilingualUrls, "x-default": "/" },
|
|
884
888
|
},
|
|
885
889
|
openGraph: {
|
|
886
|
-
url:
|
|
890
|
+
url: localizedUrl,
|
|
887
891
|
},
|
|
888
892
|
};
|
|
889
893
|
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2025-10-25
|
|
3
|
-
updatedAt: 2025-10-
|
|
3
|
+
updatedAt: 2025-10-26
|
|
4
4
|
title: How to translate your Next.js 16 app – i18n guide 2025
|
|
5
5
|
description: Discover how to make your Next.js 16 website multilingual. Follow the documentation to internationalise (i18n) and translate it.
|
|
6
6
|
keywords:
|
|
@@ -809,15 +809,17 @@ export const generateMetadata = async ({
|
|
|
809
809
|
* ```
|
|
810
810
|
*/
|
|
811
811
|
const multilingualUrls = getMultilingualUrls("/");
|
|
812
|
+
const localizedUrl =
|
|
813
|
+
multilingualUrls[locale as keyof typeof multilingualUrls];
|
|
812
814
|
|
|
813
815
|
return {
|
|
814
816
|
...metadata,
|
|
815
817
|
alternates: {
|
|
816
|
-
canonical:
|
|
818
|
+
canonical: localizedUrl,
|
|
817
819
|
languages: { ...multilingualUrls, "x-default": "/" },
|
|
818
820
|
},
|
|
819
821
|
openGraph: {
|
|
820
|
-
url:
|
|
822
|
+
url: localizedUrl,
|
|
821
823
|
},
|
|
822
824
|
};
|
|
823
825
|
};
|
|
@@ -849,15 +851,16 @@ export const generateMetadata = async ({ params }) => {
|
|
|
849
851
|
* ```
|
|
850
852
|
*/
|
|
851
853
|
const multilingualUrls = getMultilingualUrls("/");
|
|
854
|
+
const localizedUrl = multilingualUrls[locale];
|
|
852
855
|
|
|
853
856
|
return {
|
|
854
857
|
...metadata,
|
|
855
858
|
alternates: {
|
|
856
|
-
canonical:
|
|
859
|
+
canonical: localizedUrl,
|
|
857
860
|
languages: { ...multilingualUrls, "x-default": "/" },
|
|
858
861
|
},
|
|
859
862
|
openGraph: {
|
|
860
|
-
url:
|
|
863
|
+
url: localizedUrl,
|
|
861
864
|
},
|
|
862
865
|
};
|
|
863
866
|
};
|
|
@@ -889,15 +892,16 @@ const generateMetadata = async ({ params }) => {
|
|
|
889
892
|
* ```
|
|
890
893
|
*/
|
|
891
894
|
const multilingualUrls = getMultilingualUrls("/");
|
|
895
|
+
const localizedUrl = multilingualUrls[locale];
|
|
892
896
|
|
|
893
897
|
return {
|
|
894
898
|
...metadata,
|
|
895
899
|
alternates: {
|
|
896
|
-
canonical:
|
|
900
|
+
canonical: localizedUrl,
|
|
897
901
|
languages: { ...multilingualUrls, "x-default": "/" },
|
|
898
902
|
},
|
|
899
903
|
openGraph: {
|
|
900
|
-
url:
|
|
904
|
+
url: localizedUrl,
|
|
901
905
|
},
|
|
902
906
|
};
|
|
903
907
|
};
|
|
@@ -762,15 +762,17 @@ export const generateMetadata = ({
|
|
|
762
762
|
* ```
|
|
763
763
|
*/
|
|
764
764
|
const multilingualUrls = getMultilingualUrls("/");
|
|
765
|
+
const localizedUrl =
|
|
766
|
+
multilingualUrls[locale as keyof typeof multilingualUrls];
|
|
765
767
|
|
|
766
768
|
return {
|
|
767
769
|
...metadata,
|
|
768
770
|
alternates: {
|
|
769
|
-
canonical:
|
|
771
|
+
canonical: localizedUrl,
|
|
770
772
|
languages: { ...multilingualUrls, "x-default": "/" },
|
|
771
773
|
},
|
|
772
774
|
openGraph: {
|
|
773
|
-
url:
|
|
775
|
+
url: localizedUrl,
|
|
774
776
|
},
|
|
775
777
|
};
|
|
776
778
|
};
|
|
@@ -797,15 +799,17 @@ export const generateMetadata = ({ params: { locale } }) => {
|
|
|
797
799
|
* ```
|
|
798
800
|
*/
|
|
799
801
|
const multilingualUrls = getMultilingualUrls("/");
|
|
802
|
+
const localizedUrl =
|
|
803
|
+
multilingualUrls[locale];
|
|
800
804
|
|
|
801
805
|
return {
|
|
802
806
|
...metadata,
|
|
803
807
|
alternates: {
|
|
804
|
-
canonical:
|
|
808
|
+
canonical: localizedUrl,
|
|
805
809
|
languages: { ...multilingualUrls, "x-default": "/" },
|
|
806
810
|
},
|
|
807
811
|
openGraph: {
|
|
808
|
-
url:
|
|
812
|
+
url: localizedUrl,
|
|
809
813
|
},
|
|
810
814
|
};
|
|
811
815
|
};
|
|
@@ -835,15 +839,16 @@ const generateMetadata = ({ params: { locale } }) => {
|
|
|
835
839
|
* ```
|
|
836
840
|
*/
|
|
837
841
|
const multilingualUrls = getMultilingualUrls("/");
|
|
842
|
+
const localizedUrl = multilingualUrls[locale];
|
|
838
843
|
|
|
839
844
|
return {
|
|
840
845
|
...metadata,
|
|
841
846
|
alternates: {
|
|
842
|
-
canonical:
|
|
847
|
+
canonical: localizedUrl,
|
|
843
848
|
languages: { ...multilingualUrls, "x-default": "/" },
|
|
844
849
|
},
|
|
845
850
|
openGraph: {
|
|
846
|
-
url:
|
|
851
|
+
url: localizedUrl,
|
|
847
852
|
},
|
|
848
853
|
};
|
|
849
854
|
};
|
|
@@ -769,15 +769,17 @@ export const generateMetadata = async ({
|
|
|
769
769
|
* ```
|
|
770
770
|
*/
|
|
771
771
|
const multilingualUrls = getMultilingualUrls("/");
|
|
772
|
+
const localizedUrl =
|
|
773
|
+
multilingualUrls[locale as keyof typeof multilingualUrls];
|
|
772
774
|
|
|
773
775
|
return {
|
|
774
776
|
...metadata,
|
|
775
777
|
alternates: {
|
|
776
|
-
canonical:
|
|
778
|
+
canonical: localizedUrl,
|
|
777
779
|
languages: { ...multilingualUrls, "x-default": "/" },
|
|
778
780
|
},
|
|
779
781
|
openGraph: {
|
|
780
|
-
url:
|
|
782
|
+
url: localizedUrl,
|
|
781
783
|
},
|
|
782
784
|
};
|
|
783
785
|
};
|
|
@@ -848,15 +850,16 @@ const generateMetadata = async ({ params }) => {
|
|
|
848
850
|
* ```
|
|
849
851
|
*/
|
|
850
852
|
const multilingualUrls = getMultilingualUrls("/");
|
|
853
|
+
const localizedUrl = multilingualUrls[locale];
|
|
851
854
|
|
|
852
855
|
return {
|
|
853
856
|
...metadata,
|
|
854
857
|
alternates: {
|
|
855
|
-
canonical:
|
|
858
|
+
canonical: localizedUrl,
|
|
856
859
|
languages: { ...multilingualUrls, "x-default": "/" },
|
|
857
860
|
},
|
|
858
861
|
openGraph: {
|
|
859
|
-
url:
|
|
862
|
+
url: localizedUrl,
|
|
860
863
|
},
|
|
861
864
|
};
|
|
862
865
|
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2024-12-06
|
|
3
|
-
updatedAt: 2025-10-
|
|
3
|
+
updatedAt: 2025-10-26
|
|
4
4
|
title: Cómo traducir tu aplicación Next.js 16 – Guía i18n 2025
|
|
5
5
|
description: Descubre cómo hacer que tu sitio web Next.js 16 sea multilingüe. Sigue la documentación para internacionalizar (i18n) y traducirlo.
|
|
6
6
|
keywords:
|
|
@@ -836,15 +836,17 @@ export const generateMetadata = async ({
|
|
|
836
836
|
* ```
|
|
837
837
|
*/
|
|
838
838
|
const multilingualUrls = getMultilingualUrls("/");
|
|
839
|
+
const localizedUrl =
|
|
840
|
+
multilingualUrls[locale as keyof typeof multilingualUrls];
|
|
839
841
|
|
|
840
842
|
return {
|
|
841
843
|
...metadata,
|
|
842
844
|
alternates: {
|
|
843
|
-
canonical:
|
|
845
|
+
canonical: localizedUrl,
|
|
844
846
|
languages: { ...multilingualUrls, "x-default": "/" },
|
|
845
847
|
},
|
|
846
848
|
openGraph: {
|
|
847
|
-
url:
|
|
849
|
+
url: localizedUrl,
|
|
848
850
|
},
|
|
849
851
|
};
|
|
850
852
|
};
|
|
@@ -876,15 +878,16 @@ export const generateMetadata = async ({ params }) => {
|
|
|
876
878
|
* ```
|
|
877
879
|
*/
|
|
878
880
|
const multilingualUrls = getMultilingualUrls("/");
|
|
881
|
+
const localizedUrl = multilingualUrls[locale];
|
|
879
882
|
|
|
880
883
|
return {
|
|
881
884
|
...metadata,
|
|
882
885
|
alternates: {
|
|
883
|
-
canonical:
|
|
886
|
+
canonical: localizedUrl,
|
|
884
887
|
languages: { ...multilingualUrls, "x-default": "/" },
|
|
885
888
|
},
|
|
886
889
|
openGraph: {
|
|
887
|
-
url:
|
|
890
|
+
url: localizedUrl,
|
|
888
891
|
},
|
|
889
892
|
};
|
|
890
893
|
};
|
|
@@ -916,15 +919,16 @@ const generateMetadata = async ({ params }) => {
|
|
|
916
919
|
* ```
|
|
917
920
|
*/
|
|
918
921
|
const multilingualUrls = getMultilingualUrls("/");
|
|
922
|
+
const localizedUrl = multilingualUrls[locale];
|
|
919
923
|
|
|
920
924
|
return {
|
|
921
925
|
...metadata,
|
|
922
926
|
alternates: {
|
|
923
|
-
canonical:
|
|
927
|
+
canonical: localizedUrl,
|
|
924
928
|
languages: { ...multilingualUrls, "x-default": "/" },
|
|
925
929
|
},
|
|
926
930
|
openGraph: {
|
|
927
|
-
url:
|
|
931
|
+
url: localizedUrl,
|
|
928
932
|
},
|
|
929
933
|
};
|
|
930
934
|
};
|
|
@@ -815,15 +815,17 @@ export const generateMetadata = async ({
|
|
|
815
815
|
* ```
|
|
816
816
|
*/
|
|
817
817
|
const multilingualUrls = getMultilingualUrls("/");
|
|
818
|
+
const localizedUrl =
|
|
819
|
+
multilingualUrls[locale as keyof typeof multilingualUrls];
|
|
818
820
|
|
|
819
821
|
return {
|
|
820
822
|
...metadata,
|
|
821
823
|
alternates: {
|
|
822
|
-
canonical:
|
|
824
|
+
canonical: localizedUrl,
|
|
823
825
|
languages: { ...multilingualUrls, "x-default": "/" },
|
|
824
826
|
},
|
|
825
827
|
openGraph: {
|
|
826
|
-
url:
|
|
828
|
+
url: localizedUrl,
|
|
827
829
|
},
|
|
828
830
|
};
|
|
829
831
|
};
|
|
@@ -855,15 +857,16 @@ export const generateMetadata = async ({ params }) => {
|
|
|
855
857
|
* ```
|
|
856
858
|
*/
|
|
857
859
|
const multilingualUrls = getMultilingualUrls("/");
|
|
860
|
+
const localizedUrl = multilingualUrls[locale];
|
|
858
861
|
|
|
859
862
|
return {
|
|
860
863
|
...metadata,
|
|
861
864
|
alternates: {
|
|
862
|
-
canonical:
|
|
865
|
+
canonical: localizedUrl,
|
|
863
866
|
languages: { ...multilingualUrls, "x-default": "/" },
|
|
864
867
|
},
|
|
865
868
|
openGraph: {
|
|
866
|
-
url:
|
|
869
|
+
url: localizedUrl,
|
|
867
870
|
},
|
|
868
871
|
};
|
|
869
872
|
};
|
|
@@ -895,15 +898,16 @@ const generateMetadata = async ({ params }) => {
|
|
|
895
898
|
* ```
|
|
896
899
|
*/
|
|
897
900
|
const multilingualUrls = getMultilingualUrls("/");
|
|
901
|
+
const localizedUrl = multilingualUrls[locale];
|
|
898
902
|
|
|
899
903
|
return {
|
|
900
904
|
...metadata,
|
|
901
905
|
alternates: {
|
|
902
|
-
canonical:
|
|
906
|
+
canonical: localizedUrl,
|
|
903
907
|
languages: { ...multilingualUrls, "x-default": "/" },
|
|
904
908
|
},
|
|
905
909
|
openGraph: {
|
|
906
|
-
url:
|
|
910
|
+
url: localizedUrl,
|
|
907
911
|
},
|
|
908
912
|
};
|
|
909
913
|
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2024-12-06
|
|
3
|
-
updatedAt: 2025-10-
|
|
3
|
+
updatedAt: 2025-10-26
|
|
4
4
|
title: Comment traduire votre application Next.js 16 – guide i18n 2025
|
|
5
5
|
description: Découvrez comment rendre votre site Next.js 16 multilingue. Suivez la documentation pour internationaliser (i18n) et traduire votre site.
|
|
6
6
|
keywords:
|
|
@@ -306,23 +306,6 @@ module.exports = LocaleLayout;
|
|
|
306
306
|
|
|
307
307
|
> Le segment de chemin `[locale]` est utilisé pour définir la locale. Exemple : `/en-US/about` fera référence à `en-US` et `/fr/about` à `fr`.
|
|
308
308
|
|
|
309
|
-
const inter = Inter({ subsets: ["latin"] });
|
|
310
|
-
|
|
311
|
-
const LocaleLayout = async ({ children, params: { locale } }) => {
|
|
312
|
-
const { locale } = await params;
|
|
313
|
-
return (
|
|
314
|
-
<html lang={locale} dir={getHTMLTextDir(locale)}>
|
|
315
|
-
<body className={inter.className}>{children}</body>
|
|
316
|
-
</html>
|
|
317
|
-
);
|
|
318
|
-
};
|
|
319
|
-
|
|
320
|
-
module.exports = LocaleLayout;
|
|
321
|
-
|
|
322
|
-
````
|
|
323
|
-
|
|
324
|
-
> Le segment de chemin `[locale]` est utilisé pour définir la locale. Exemple : `/en-US/about` fera référence à `en-US` et `/fr/about` à `fr`.
|
|
325
|
-
|
|
326
309
|
> À ce stade, vous rencontrerez l'erreur : `Error: Missing <html> and <body> tags in the root layout.`. Cela est attendu car le fichier `/app/page.tsx` n'est plus utilisé et peut être supprimé. À la place, le segment de chemin `[locale]` activera la page `/app/[locale]/page.tsx`. Par conséquent, les pages seront accessibles via des chemins comme `/en`, `/fr`, `/es` dans votre navigateur. Pour définir la locale par défaut comme page racine, référez-vous à la configuration du `proxy` à l'étape 7.
|
|
327
310
|
|
|
328
311
|
Ensuite, implémentez la fonction `generateStaticParams` dans le Layout de votre application.
|
|
@@ -335,7 +318,7 @@ const LocaleLayout: NextLayoutIntlayer = async ({ children, params }) => {
|
|
|
335
318
|
};
|
|
336
319
|
|
|
337
320
|
export default LocaleLayout;
|
|
338
|
-
|
|
321
|
+
```
|
|
339
322
|
|
|
340
323
|
```jsx {1} fileName="src/app/[locale]/layout.mjx" codeFormat="esm"
|
|
341
324
|
export { generateStaticParams } from "next-intlayer"; // Ligne à insérer
|
|
@@ -842,15 +825,17 @@ export const generateMetadata = async ({
|
|
|
842
825
|
* ```
|
|
843
826
|
*/
|
|
844
827
|
const multilingualUrls = getMultilingualUrls("/");
|
|
828
|
+
const localizedUrl =
|
|
829
|
+
multilingualUrls[locale as keyof typeof multilingualUrls];
|
|
845
830
|
|
|
846
831
|
return {
|
|
847
832
|
...metadata,
|
|
848
833
|
alternates: {
|
|
849
|
-
canonical:
|
|
834
|
+
canonical: localizedUrl,
|
|
850
835
|
languages: { ...multilingualUrls, "x-default": "/" },
|
|
851
836
|
},
|
|
852
837
|
openGraph: {
|
|
853
|
-
url:
|
|
838
|
+
url: localizedUrl,
|
|
854
839
|
},
|
|
855
840
|
};
|
|
856
841
|
};
|
|
@@ -882,15 +867,16 @@ export const generateMetadata = async ({ params }) => {
|
|
|
882
867
|
* ```
|
|
883
868
|
*/
|
|
884
869
|
const multilingualUrls = getMultilingualUrls("/");
|
|
870
|
+
const localizedUrl = multilingualUrls[locale];
|
|
885
871
|
|
|
886
872
|
return {
|
|
887
873
|
...metadata,
|
|
888
874
|
alternates: {
|
|
889
|
-
canonical:
|
|
875
|
+
canonical: localizedUrl,
|
|
890
876
|
languages: { ...multilingualUrls, "x-default": "/" },
|
|
891
877
|
},
|
|
892
878
|
openGraph: {
|
|
893
|
-
url:
|
|
879
|
+
url: localizedUrl,
|
|
894
880
|
},
|
|
895
881
|
};
|
|
896
882
|
};
|
|
@@ -922,15 +908,16 @@ const generateMetadata = async ({ params }) => {
|
|
|
922
908
|
* ```
|
|
923
909
|
*/
|
|
924
910
|
const multilingualUrls = getMultilingualUrls("/");
|
|
911
|
+
const localizedUrl = multilingualUrls[locale];
|
|
925
912
|
|
|
926
913
|
return {
|
|
927
914
|
...metadata,
|
|
928
915
|
alternates: {
|
|
929
|
-
canonical:
|
|
916
|
+
canonical: localizedUrl,
|
|
930
917
|
languages: { ...multilingualUrls, "x-default": "/" },
|
|
931
918
|
},
|
|
932
919
|
openGraph: {
|
|
933
|
-
url:
|
|
920
|
+
url: localizedUrl,
|
|
934
921
|
},
|
|
935
922
|
};
|
|
936
923
|
};
|
|
@@ -773,15 +773,17 @@ export const generateMetadata = async ({
|
|
|
773
773
|
* ```
|
|
774
774
|
*/
|
|
775
775
|
const multilingualUrls = getMultilingualUrls("/");
|
|
776
|
+
const localizedUrl =
|
|
777
|
+
multilingualUrls[locale as keyof typeof multilingualUrls];
|
|
776
778
|
|
|
777
779
|
return {
|
|
778
780
|
...metadata,
|
|
779
781
|
alternates: {
|
|
780
|
-
canonical:
|
|
782
|
+
canonical: localizedUrl,
|
|
781
783
|
languages: { ...multilingualUrls, "x-default": "/" },
|
|
782
784
|
},
|
|
783
785
|
openGraph: {
|
|
784
|
-
url:
|
|
786
|
+
url: localizedUrl,
|
|
785
787
|
},
|
|
786
788
|
};
|
|
787
789
|
};
|
|
@@ -813,15 +815,16 @@ export const generateMetadata = async ({ params }) => {
|
|
|
813
815
|
* ```
|
|
814
816
|
*/
|
|
815
817
|
const multilingualUrls = getMultilingualUrls("/");
|
|
818
|
+
const localizedUrl = multilingualUrls[locale];
|
|
816
819
|
|
|
817
820
|
return {
|
|
818
821
|
...metadata,
|
|
819
822
|
alternates: {
|
|
820
|
-
canonical:
|
|
823
|
+
canonical: localizedUrl,
|
|
821
824
|
languages: { ...multilingualUrls, "x-default": "/" },
|
|
822
825
|
},
|
|
823
826
|
openGraph: {
|
|
824
|
-
url:
|
|
827
|
+
url: localizedUrl,
|
|
825
828
|
},
|
|
826
829
|
};
|
|
827
830
|
};
|
|
@@ -853,15 +856,16 @@ const generateMetadata = async ({ params }) => {
|
|
|
853
856
|
* ```
|
|
854
857
|
*/
|
|
855
858
|
const multilingualUrls = getMultilingualUrls("/");
|
|
859
|
+
const localizedUrl = multilingualUrls[locale];
|
|
856
860
|
|
|
857
861
|
return {
|
|
858
862
|
...metadata,
|
|
859
863
|
alternates: {
|
|
860
|
-
canonical:
|
|
864
|
+
canonical: localizedUrl,
|
|
861
865
|
languages: { ...multilingualUrls, "x-default": "/" },
|
|
862
866
|
},
|
|
863
867
|
openGraph: {
|
|
864
|
-
url:
|
|
868
|
+
url: localizedUrl,
|
|
865
869
|
},
|
|
866
870
|
};
|
|
867
871
|
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2025-10-25
|
|
3
|
-
updatedAt: 2025-10-
|
|
3
|
+
updatedAt: 2025-10-26
|
|
4
4
|
title: अपने Next.js 16 ऐप का अनुवाद कैसे करें – i18n गाइड 2025
|
|
5
5
|
description: जानें कि अपनी Next.js 16 वेबसाइट को बहुभाषी कैसे बनाएं। अंतरराष्ट्रीयकरण (i18n) और अनुवाद के लिए दस्तावेज़ का पालन करें।
|
|
6
6
|
keywords:
|
|
@@ -834,15 +834,17 @@ export const generateMetadata = async ({
|
|
|
834
834
|
* ```
|
|
835
835
|
*/
|
|
836
836
|
const multilingualUrls = getMultilingualUrls("/");
|
|
837
|
+
const localizedUrl =
|
|
838
|
+
multilingualUrls[locale as keyof typeof multilingualUrls];
|
|
837
839
|
|
|
838
840
|
return {
|
|
839
841
|
...metadata,
|
|
840
842
|
alternates: {
|
|
841
|
-
canonical:
|
|
843
|
+
canonical: localizedUrl,
|
|
842
844
|
languages: { ...multilingualUrls, "x-default": "/" },
|
|
843
845
|
},
|
|
844
846
|
openGraph: {
|
|
845
|
-
url:
|
|
847
|
+
url: localizedUrl,
|
|
846
848
|
},
|
|
847
849
|
};
|
|
848
850
|
};
|
|
@@ -874,15 +876,16 @@ export const generateMetadata = async ({ params }) => {
|
|
|
874
876
|
* ```
|
|
875
877
|
*/
|
|
876
878
|
const multilingualUrls = getMultilingualUrls("/");
|
|
879
|
+
const localizedUrl = multilingualUrls[locale];
|
|
877
880
|
|
|
878
881
|
return {
|
|
879
882
|
...metadata,
|
|
880
883
|
alternates: {
|
|
881
|
-
canonical:
|
|
884
|
+
canonical: localizedUrl,
|
|
882
885
|
languages: { ...multilingualUrls, "x-default": "/" },
|
|
883
886
|
},
|
|
884
887
|
openGraph: {
|
|
885
|
-
url:
|
|
888
|
+
url: localizedUrl,
|
|
886
889
|
},
|
|
887
890
|
};
|
|
888
891
|
};
|
|
@@ -914,15 +917,16 @@ const generateMetadata = async ({ params }) => {
|
|
|
914
917
|
* ```
|
|
915
918
|
*/
|
|
916
919
|
const multilingualUrls = getMultilingualUrls("/");
|
|
920
|
+
const localizedUrl = multilingualUrls[locale];
|
|
917
921
|
|
|
918
922
|
return {
|
|
919
923
|
...metadata,
|
|
920
924
|
alternates: {
|
|
921
|
-
canonical:
|
|
925
|
+
canonical: localizedUrl,
|
|
922
926
|
languages: { ...multilingualUrls, "x-default": "/" },
|
|
923
927
|
},
|
|
924
928
|
openGraph: {
|
|
925
|
-
url:
|
|
929
|
+
url: localizedUrl,
|
|
926
930
|
},
|
|
927
931
|
};
|
|
928
932
|
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2024-12-06
|
|
3
|
-
updatedAt: 2025-10-
|
|
3
|
+
updatedAt: 2025-10-26
|
|
4
4
|
title: Cara menerjemahkan aplikasi Next.js 16 Anda – panduan i18n 2025
|
|
5
5
|
description: Temukan cara membuat situs web Next.js 16 Anda menjadi multibahasa. Ikuti dokumentasi untuk melakukan internasionalisasi (i18n) dan menerjemahkannya.
|
|
6
6
|
keywords:
|
|
@@ -818,15 +818,17 @@ export const generateMetadata = async ({
|
|
|
818
818
|
* ```
|
|
819
819
|
*/
|
|
820
820
|
const multilingualUrls = getMultilingualUrls("/");
|
|
821
|
+
const localizedUrl =
|
|
822
|
+
multilingualUrls[locale as keyof typeof multilingualUrls];
|
|
821
823
|
|
|
822
824
|
return {
|
|
823
825
|
...metadata,
|
|
824
826
|
alternates: {
|
|
825
|
-
canonical:
|
|
827
|
+
canonical: localizedUrl,
|
|
826
828
|
languages: { ...multilingualUrls, "x-default": "/" },
|
|
827
829
|
},
|
|
828
830
|
openGraph: {
|
|
829
|
-
url:
|
|
831
|
+
url: localizedUrl,
|
|
830
832
|
},
|
|
831
833
|
};
|
|
832
834
|
};
|
|
@@ -858,15 +860,16 @@ export const generateMetadata = async ({ params }) => {
|
|
|
858
860
|
* ```
|
|
859
861
|
*/
|
|
860
862
|
const multilingualUrls = getMultilingualUrls("/");
|
|
863
|
+
const localizedUrl = multilingualUrls[locale];
|
|
861
864
|
|
|
862
865
|
return {
|
|
863
866
|
...metadata,
|
|
864
867
|
alternates: {
|
|
865
|
-
canonical:
|
|
868
|
+
canonical: localizedUrl,
|
|
866
869
|
languages: { ...multilingualUrls, "x-default": "/" },
|
|
867
870
|
},
|
|
868
871
|
openGraph: {
|
|
869
|
-
url:
|
|
872
|
+
url: localizedUrl,
|
|
870
873
|
},
|
|
871
874
|
};
|
|
872
875
|
};
|
|
@@ -898,15 +901,16 @@ const generateMetadata = async ({ params }) => {
|
|
|
898
901
|
* ```
|
|
899
902
|
*/
|
|
900
903
|
const multilingualUrls = getMultilingualUrls("/");
|
|
904
|
+
const localizedUrl = multilingualUrls[locale];
|
|
901
905
|
|
|
902
906
|
return {
|
|
903
907
|
...metadata,
|
|
904
908
|
alternates: {
|
|
905
|
-
canonical:
|
|
909
|
+
canonical: localizedUrl,
|
|
906
910
|
languages: { ...multilingualUrls, "x-default": "/" },
|
|
907
911
|
},
|
|
908
912
|
openGraph: {
|
|
909
|
-
url:
|
|
913
|
+
url: localizedUrl,
|
|
910
914
|
},
|
|
911
915
|
};
|
|
912
916
|
};
|
|
@@ -792,15 +792,17 @@ export const generateMetadata = async ({
|
|
|
792
792
|
* ```
|
|
793
793
|
*/
|
|
794
794
|
const multilingualUrls = getMultilingualUrls("/");
|
|
795
|
+
const localizedUrl =
|
|
796
|
+
multilingualUrls[locale as keyof typeof multilingualUrls];
|
|
795
797
|
|
|
796
798
|
return {
|
|
797
799
|
...metadata,
|
|
798
800
|
alternates: {
|
|
799
|
-
canonical:
|
|
801
|
+
canonical: localizedUrl,
|
|
800
802
|
languages: { ...multilingualUrls, "x-default": "/" },
|
|
801
803
|
},
|
|
802
804
|
openGraph: {
|
|
803
|
-
url:
|
|
805
|
+
url: localizedUrl,
|
|
804
806
|
},
|
|
805
807
|
};
|
|
806
808
|
};
|
|
@@ -832,15 +834,16 @@ export const generateMetadata = async ({ params }) => {
|
|
|
832
834
|
* ```
|
|
833
835
|
*/
|
|
834
836
|
const multilingualUrls = getMultilingualUrls("/");
|
|
837
|
+
const localizedUrl = multilingualUrls[locale];
|
|
835
838
|
|
|
836
839
|
return {
|
|
837
840
|
...metadata,
|
|
838
841
|
alternates: {
|
|
839
|
-
canonical:
|
|
842
|
+
canonical: localizedUrl,
|
|
840
843
|
languages: { ...multilingualUrls, "x-default": "/" },
|
|
841
844
|
},
|
|
842
845
|
openGraph: {
|
|
843
|
-
url:
|
|
846
|
+
url: localizedUrl,
|
|
844
847
|
},
|
|
845
848
|
};
|
|
846
849
|
};
|
|
@@ -872,15 +875,16 @@ const generateMetadata = async ({ params }) => {
|
|
|
872
875
|
* ```
|
|
873
876
|
*/
|
|
874
877
|
const multilingualUrls = getMultilingualUrls("/");
|
|
878
|
+
const localizedUrl = multilingualUrls[locale];
|
|
875
879
|
|
|
876
880
|
return {
|
|
877
881
|
...metadata,
|
|
878
882
|
alternates: {
|
|
879
|
-
canonical:
|
|
883
|
+
canonical: localizedUrl,
|
|
880
884
|
languages: { ...multilingualUrls, "x-default": "/" },
|
|
881
885
|
},
|
|
882
886
|
openGraph: {
|
|
883
|
-
url:
|
|
887
|
+
url: localizedUrl,
|
|
884
888
|
},
|
|
885
889
|
};
|
|
886
890
|
};
|