ΠΡΡ ΠΎΠ΄Π½Π°Ρ ΡΡΠ°ΡΡΡ: https://aralroca.com/blog/i18n-translations-nextjs-13-app-dir
Π ΡΡΠΎΠΌ ΠΏΠΎΡΡΠ΅ Ρ ΠΎΠ±ΡΡΡΠ½Ρ, ΠΊΠ°ΠΊ Π»Π΅Π³ΠΊΠΎ Π·Π°Π³ΡΡΠΆΠ°ΡΡ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Ρ Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ°Ρ
Π² app
ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅ Next.js 13, Π½ΠΎΠ²ΠΎΠΉ ΠΏΠ°ΡΠ°Π΄ΠΈΠ³ΠΌΡ Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π²Π°ΡΠΈΠΌΠΈ ΡΡΡΠ°Π½ΠΈΡΠ°ΠΌΠΈ. ΡΡΠΎ ΠΏΡΠΈ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠΌ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ Π³ΠΎΠ»ΠΎΠ²Π½ΠΎΠΉ Π±ΠΎΠ»ΠΈ.
ΠΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ ΠΌΡ Π½Π°ΡΠ½Π΅ΠΌβ¦ ΠΠ΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°
ΠΠΎ-ΠΏΠ΅ΡΠ²ΡΡ , ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΠ΅ ΠΌΠ½Π΅ ΡΠ°ΡΡΠΊΠ°Π·Π°ΡΡ Π²Π°ΠΌ ΠΎ Next-translate. ΠΡΠΎ ΠΎΠ΄Π½Π° ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠΈΡΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ Π΄Π»Ρ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΎΠ² Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ°Ρ Next.js (ΠΎΠΊΠΎΠ»ΠΎ 70Β 000 Π·Π°Π³ΡΡΠ·ΠΎΠΊ Π² Π½Π΅Π΄Π΅Π»Ρ). Next.js 9.
ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Ρ Ρ ΡΠ°Π½ΡΡΡΡ Π² locales/{lang}/{namespace}.json:
. βββ en β βββ common.json β βββ home.json βββ es βββ common.json βββ home.json
*ΠΠ΄Π½Π°ΠΊΠΎ ΠΈΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π³ΡΡΠ·ΠΈΡΡ ΠΈΠ· CDN ΠΈΠ»ΠΈ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠΎΠ²Π°ΡΡ Ρ ΠΎΠ½Π»Π°ΠΉΠ½-ΠΏΠ»Π°ΡΡΠΎΡΠΌΠΎΠΉ ΠΈΠ½ΡΠ΅ΡΠ½Π°ΡΠΈΠΎΠ½Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ, ΡΠ°ΠΊΠΎΠΉ ΠΊΠ°ΠΊ Π»ΠΎΠΊΠ°Π»ΠΈΠ·Π°ΡΠΈΡ.
π¦ ΠΠ΄Π½Π° ΠΈΠ· ΡΠ΅Π»Π΅ΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ β Π±ΡΡΡ ΠΏΡΠΎΡΡΠΎΠΉ Π² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠΉ Π½Π°ΡΡΡΠΎΠΉΠΊΠΎΠΉ Π² ΡΠ°ΠΉΠ»Π΅ i18n.js
Π²Ρ ΡΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠΈ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Ρ Π½Π° ΡΠ²ΠΎΠΈΡ
ΡΡΡΠ°Π½ΠΈΡΠ°Ρ
ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°Ρ
:
import useTranslation from 'next-translate/useTranslation' export default function Example() { const { t, lang } = useTranslation('common') return <h1>{t('example')}</h1> }
π ΠΡΠ΅ ΠΎΠ΄Π½Π° ΡΠ΅Π»Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ β ΠΈΠΌΠ΅ΡΡ Π²ΡΠ΅ ΠΎΡΠ½ΠΎΠ²Ρ i18n: ΠΈΠ½ΡΠ΅ΡΠΏΠΎΠ»ΡΡΠΈΡ, ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ, ΡΡΠ΅Π΄ΡΡΠ²Π° ΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Ρ Ρ HTML-ΡΠ΅Π³Π°ΠΌΠΈ ΠΈ Ρ.Β Π΄.
π¦ Π Π΅ΡΠ΅ ΠΎΠ΄Π½Π° ΡΠ΅Π»Ρ β Π±ΡΡΡ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΡΠ΅. Π Π²Π΅ΡΡΠΈΠΈ 1.0 ΠΌΡ Π·Π°ΡΡΠ°Π²ΠΈΠ»ΠΈ Π΅Π³ΠΎ Π·Π°Π½ΠΈΠΌΠ°ΡΡ ~1 ΠΠ, Π½ΠΎ Π² Π²Π΅ΡΡΠΈΠΈ 2.0 Π±ΡΠ»ΠΎ Π΅ΡΠ΅ Π±ΠΎΠ»ΡΡΠ΅ ΡΠ»ΡΡΡΠ΅Π½ΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΡ ΡΠ²ΠΈΠ΄ΠΈΠΌ Π² ΡΡΠΎΠΌ ΠΏΠΎΡΡΠ΅.
Π― Π½Π΅ Π±ΡΠ΄Ρ Π²Π΄Π°Π²Π°ΡΡΡΡ Π² ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°. Π― ΠΏΡΠΈΠ³Π»Π°ΡΠ°Ρ Π²Π°Ρ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡΡΡΡ Ρ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠ΅ΠΉ, Π΅ΡΠ»ΠΈ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ.
Π’Π΅ΠΏΠ΅ΡΡ, ΠΊΠΎΠ³Π΄Π° Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΠ» Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ, Π΄Π°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ, ΠΏΠΎ-ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ Π»ΠΈ ΠΎΠ½Π° ΠΏΡΠΎΡΡΠ° Π² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ, Π»Π΅Π³ΠΊΠΎΠ²Π΅ΡΠ½Π° ΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π»ΠΈ Π²ΡΠ΅ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ i18n Π² Π½ΠΎΠ²ΠΎΠΉ ΠΏΠ°ΡΠ°Π΄ΠΈΠ³ΠΌΠ΅, ΠΊΠΎΡΠΎΡΡΡ Next.js 13 ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΠ» Π² ΠΊΠΎΠ½ΡΠ΅ 2022 Π³ΠΎΠ΄Π°: ΠΊΠ°ΡΠ°Π»ΠΎΠ³ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡβ¦
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ?
Π ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π² Next.js 13 (Π±Π΅ΡΠ°-Π²Π΅ΡΡΠΈΡ) ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π° ββΠ½ΠΎΠ²Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° ΠΌΠ°ΡΡΡΡΡΠΈΠ·Π°ΡΠΈΠΈ ΠΈ Π²ΡΠ±ΠΎΡΠΊΠΈ Π΄Π°Π½Π½ΡΡ , ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΌΠ°ΠΊΠ΅ΡΡ, Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΠ΅ ΠΌΠ°ΡΡΡΡΡΡ ΠΈ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΠ΅ΡΠ²Π΅ΡΠ½ΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ React 18.
Π‘Π΅ΡΠ²Π΅ΡΠ½ΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ β ΡΡΠΎ Π½ΠΎΠ²ΡΠΉ ΡΠΈΠΏ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² React, ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠ΅ ΠΈ ΡΠΎΠ»ΡΠΊΠΎ Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠ΅. ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΎΠ½ΠΈ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΡ, ΡΡΠΎ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠΌΡ ΡΠΎΠΊΡΠ°ΡΠ΅Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΌΠ° ΠΊΠΎΠ΄Π°, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ Π΄Π»Ρ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ Π² Π±ΡΠ°ΡΠ·Π΅Ρ. Π’Π°ΠΊΠΎΠ΅ ΡΠΎΠΊΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΌΠ° ΠΊΠΎΠ΄Π° ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ²ΡΡΠΈΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ React, ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ ΡΠ΅Ρ , ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ Π±ΠΎΠ»ΡΡΠΈΠΌΠΈ ΠΎΠ±ΡΠ΅ΠΌΠ°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ .
ΠΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ ΠΎΠ½ΠΈ Π·Π°Π΄ΡΠΌΡΠ²Π°Π»ΠΈΡΡ ΠΊΠ°ΠΊ ΡΠΏΠΎΡΠΎΠ± ΡΠ΅ΡΠΈΡΡ "ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π²ΠΎΠ΄ΠΎΠΏΠ°Π΄Π°" Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ React. ΠΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ, ΠΊΠΎΠ³Π΄Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ React ΡΡΠ΅Π±ΡΡΡΡΡ Π΄Π°Π½Π½ΡΠ΅ Ρ ΡΠ΅ΡΠ²Π΅ΡΠ°, Π½ΠΎ ΡΡΠΈ Π΄Π°Π½Π½ΡΠ΅ ΠΏΠΎΠΊΠ° Π½Π΅Π΄ΠΎΡΡΡΠΏΠ½Ρ. ΠΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ Β«Π²ΠΎΠ΄ΠΎΠΏΠ°Π΄ΡΒ» ΡΠ΅ΡΠ΅Π²ΡΡ Π·Π°ΠΏΡΠΎΡΠΎΠ², ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ Π½ΡΠΆΠ½ΡΡ Π΅ΠΌΡ Π΄Π°Π½Π½ΡΡ , ΠΏΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ ΠΎΠ½ ΡΠΌΠΎΠΆΠ΅Ρ ΠΈΡ ΠΎΡΠΎΠ±ΡΠ°Π·ΠΈΡΡ, ΡΡΠΎ Π²ΡΠ·ΡΠ²Π°Π΅Ρ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ Π·Π°Π΄Π΅ΡΠΆΠΊΠΈ ΠΏΡΠΈ ΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ΅ ΠΈ Π²Π»ΠΈΡΠ΅Ρ Π½Π° Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ. .
ΠΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΡΠ΅ΡΠ²Π΅ΡΡ ΠΈΠ·Π²Π»Π΅ΠΊΠ°ΡΡ Π²ΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ Π·Π° ΠΎΠ΄ΠΈΠ½ ΡΠ°Π·, Π²ΠΌΠ΅ΡΡΠΎ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡΡ ΠΊ ΠΊΠ»ΠΈΠ΅Π½ΡΡ ΡΡΠ΄Π° ΠΈ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ. ΠΡΠΎ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠΌΡ ΡΠ»ΡΡΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ React.
ΠΠ½ΠΈ ΡΠ°ΠΊΠΆΠ΅ ΡΠΎΠΊΡΠ°ΡΠ°ΡΡ ΠΎΠ±ΡΠ΅ΠΌ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡΠΏΡΠ°Π²ΠΈΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΡ, ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠΊΡΠ°ΡΠΈΡΡ Π²ΡΠ΅ΠΌΡ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ React. ΠΠ½ΠΈ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡΡ ΡΠ»ΡΡΡΠΈΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΠΎΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡΡ ΡΠΏΡΠΎΡΡΠΈΡΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π²ΡΠ±ΠΎΡΠΊΠΎΠΉ Π΄Π°Π½Π½ΡΡ Π² Π±ΠΎΠ»ΡΡΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ .
ΠΠ΄Π½Π°ΠΊΠΎ Π΅ΡΠ»ΠΈ Π² Π²Π°ΡΠ΅ΠΌ ΠΊΠΎΠ΄Π΅ Π΅ΡΡΡ ΡΠ°ΡΡΠΈ, ΡΡΠ΅Π±ΡΡΡΠΈΠ΅ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΎΠ·Π΄Π°ΡΡ ΠΎΡΡΡΠΎΠ²ΠΊΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ², Π³Π΄Π΅ ΡΡΡΠ°Π½ΠΈΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ ΠΊΠΈΠ»ΠΎΠ±Π°ΠΉΡΡ JavaScript, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π½Π° ΡΡΠΈΡ ΡΡΠ°ΡΡΠΊΠ°Ρ . ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΌΠ΅Π½ΡΡΠ΅ JavaScript Π²ΡΠ΅Π³Π΄Π° Π»ΡΡΡΠ΅, ΡΡΠΎΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΠΈΠ΄Π΅Π°Π»Π΅Π½.
ΠΠ΄Π½Π° ΠΈΠ· ΠΏΡΠΎΠ±Π»Π΅ΠΌ, ΡΠ²ΡΠ·Π°Π½Π½ΡΡ Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠ°ΡΠ°Π΄ΠΈΠ³ΠΌΡ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠ΅ΡΠ²Π΅ΡΠ½ΡΠΌΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°ΠΌΠΈ ΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΠΌΠΈ ΠΎΡΡΡΠΎΠ²Π°ΠΌΠΈ, Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΎΠ½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΡΡΡ ΠΏΠΎ-ΡΠ°Π·Π½ΠΎΠΌΡ ΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ ΡΠΎΠ±ΠΎΠΉ Π΄Π²Π° ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΠΌΠΈΡΠ°. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΠ΅Π»Ρ ΡΠΎΡΡΠΎΠΈΡ Π² ΡΠΎΠΌ, ΡΡΠΎΠ±Ρ Π½Π°ΠΉΡΠΈ ΡΠΏΠΎΡΠΎΠ± ΡΠ΄Π΅Π»Π°ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ±ΠΎΠΈΡ ΠΏΡΠΎΡΡΡΠΌ ΠΈ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΡΠΌ Π½Π°ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ.
ΠΠΎΠ»ΠΎΠ²Π½ΡΠ΅ Π±ΠΎΠ»ΠΈ ΡΠ΅ΡΠ²Π΅ΡΠ½ΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ²
ΠΡΠ»ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΈ Ρ ΡΠ΅ΡΠ²Π΅ΡΠ½ΡΠΌΠΈ, ΠΈ Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΠΌΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°ΠΌΠΈ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ, ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ ΡΡΠΎΠ»ΠΊΠ½ΡΡΡΡΡ Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ Ρ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ ΠΈ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠΈΠΈ ΠΌΠ΅ΠΆΠ΄Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°ΠΌΠΈ. Π΄Π²Π° ΡΠΈΠΏΠ° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ².
ΠΠ΄Π½ΠΎΠΉ ΠΈΠ· ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡΡ ΠΌΠ΅ΠΆΠ΄Ρ Π΄Π°Π½Π½ΡΠΌΠΈ, ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΠΌΡΠΌΠΈ Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠ΅ ΠΈ Π½Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠ΅. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ ΡΠ΅ΡΠ²Π΅ΡΠ½Π°Ρ ΡΡΡΠ°Π½ΠΈΡΠ° Π·Π°Π³ΡΡΠΆΠ°Π΅Ρ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Π° ΠΈ Π²ΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΡΡΡΠ°Π½ΠΈΡΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠΈ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Ρ, ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΠΎΡΡΡΠΎΠ²Π½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° ΡΠ°ΠΊΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΈΠΌΠ΅ΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΠ΅ΠΌ ΠΆΠ΅ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Π°ΠΌ Π±Π΅Π· ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈΡ ΠΎΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°, ΡΡΠΎ ΡΡΠ΅Π±ΡΠ΅Ρ >ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠΈΡ Π·Π°ΠΏΡΠΎΡΠΎΠ² Π΄Π°Π½Π½ΡΡ , ΡΡΠΎΠ±Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ Π½Π΅Π½ΡΠΆΠ½ΡΡ ΠΏΠΎΠ²ΡΠΎΡΠ΅Π½ΠΈΠΉ ΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ Π²ΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°Π½ΠΈΠ΅ Π·Π°Π΄Π΅ΡΠΆΠΊΠΈ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΡΠ°ΠΉΡΠ° ΠΈ ΡΠΌΠ΅Π½ΡΡΠΈΡΡ Π½Π΅Π½ΡΠΆΠ½ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠΎΠΏΡΡΠΊΠ½ΠΎΠΉ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΠΈ.
ΠΠ°ΠΊΠΎΠ½Π΅Ρ, ΠΌΠΎΠ³ΡΡ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Ρ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠ΅ΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠ΅ΡΠ²Π΅ΡΠ½ΡΠΌΠΈ ΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΠΌΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°ΠΌΠΈ. ΠΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΡΡΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ Ρ ΠΎΡΠΎΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π»ΠΈ Π²ΠΌΠ΅ΡΡΠ΅, ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ. ΠΡΠ°ΠΊ, Π΄Π°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ, ΠΊΠ°ΠΊ ΠΌΡ ΡΠΏΡΠ°Π²ΠΈΠ»ΠΈΡΡ Ρ ΡΡΠΈΠΌΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ Π² Next-translate.
ΠΠ°Π³ΡΡΠΆΠ°ΡΡ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Ρ Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Next.js 13
Π Next-translate 2.0 ΠΌΡ ΠΈΠ·ΠΎ Π²ΡΠ΅Ρ
ΡΠΈΠ» ΠΏΡΡΠ°Π»ΠΈΡΡ ΡΠ΅ΡΠΈΡΡ ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, ΡΡΠΎΠ±Ρ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ ΡΠ΄ΠΎΠ±Π½ΡΠΌ Π΄Π»Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ. Π ΠΊΠΎΠ½ΡΠ΅ ΠΊΠΎΠ½ΡΠΎΠ², ΠΌΡ Π΄ΠΎΡΡΠΈΠ³Π»ΠΈ ΡΡΠΎΠΉ ΡΠ΅Π»ΠΈ, ΠΈ Π² Π²Π°ΡΠ΅ΠΌ i18n.js
Π½Π΅Ρ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ Π² Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ Π½Π°ΡΡΡΠΎΠΉΠΊΠ΅. π
ΠΡΠΎΡΡΠΎ ΠΈΠΌΠ΅ΠΉΡΠ΅ Π² Π²ΠΈΠ΄Ρ, π§ ΡΡΠΎ ΡΡΡΠ°Π½ΠΈΡΡ, ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ, ΡΠ΅ΠΏΠ΅ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π΄Π»Ρ ΡΡΡΠ°Π½ΠΈΡ Π² >ΠΊΠ°ΡΠ°Π»ΠΎΠ³ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ:
// i18n.js module.exports = { locales: ['en', 'ca', 'es'], defaultLocale: 'en', pages: { '*': ['common'], '/': ['home'], // app/page.tsx '/checkout': ['checkout'], // app/checkout/page.tsx }, }
ΠΡΠΎ Π²ΡΠ΅, ΡΡΠΎ Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ! π
ΠΠ°Ρ ΠΏΠ»Π°Π³ΠΈΠ½, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΆΠ΅ ΠΏΡΠΈΡΡΡΡΡΠ²ΠΎΠ²Π°Π» Π² Next-translate 1.0, ΡΠ΅ΠΏΠ΅ΡΡ Π² Next-translate 2.0 ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ Π·Π°Π³ΡΡΠ·ΠΊΡ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΎΠ² ΠΊΠ°ΠΊ Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠ½ΡΡ , ΡΠ°ΠΊ ΠΈ Π½Π° ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΡ ΡΡΡΠ°Π½ΠΈΡΠ°Ρ , Π° ΡΠ°ΠΊΠΆΠ΅ ΠΎΡΡΡΠΎΠ²ΠΊΠΎΠ² ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠ½ΠΎΠΉ ΡΡΡΠ°Π½ΠΈΡΠ΅. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΌΡ ΡΠΌΠ΅Π½ΡΡΠΈΠ»ΠΈ ΡΠ°Π·ΠΌΠ΅Ρ Π½Π°ΡΠ΅ΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Ρ 1,8Β ΠΠ Π΄ΠΎ 498Β Π (ΡΠΌΠ΅Π½ΡΡΠ΅Π½ΠΈΠ΅ + gzip).
ΠΠΎ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΡΡΡΠ°Π½ΠΈΡΡ Π²ΡΠ΅Π³Π΄Π° ΠΈΠΌΠ΅Π»ΠΈ 1,8 ΠΠ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΎΠ² Π² ΠΏΠ°ΠΊΠ΅ΡΠ΅, Π½ΠΎ ΡΠ΅ΠΏΠ΅ΡΡ:
- ΠΡΠ»ΠΈ Ρ Π²Π°Ρ Π΅ΡΡΡ Π²ΡΠ΅ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Ρ Π² ΡΠ΅ΡΠ²Π΅ΡΠ½ΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°Ρ : 0kb π₯³
- ΠΡΠ»ΠΈ Π²Π°ΠΌ Π½ΡΠΆΠ½Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΠΎΡΡΡΠΎΠ²Π°, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠ΅Π½ΡΡΡ ΡΠ΅ΠΊΡΡ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ: 498B π
Π§ΡΠΎΠ±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠΈ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Ρ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ Ρ ΡΠΊ useTranslation ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Trans:
π Π‘ΡΡΠ°Π½ΠΈΡΠ° ΡΠ΅ΡΠ²Π΅ΡΠ° (+0kb): app/page.js
:
import useTranslation from 'next-translate/useTranslation' export default function HomePage() { const { t, lang } = useTranslation('home') return <h1>{t('title')}</h1> }
Π Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΡ ΠΈΠΌΠ΅Π΅ΠΌ Π΄Π΅Π»ΠΎ ΡΠΎ ΡΡΡΠ°Π½ΠΈΡΠ΅ΠΉ ΡΠ΅ΡΠ²Π΅ΡΠ°, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΡΡΠ°Π½ΠΈΡΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΠ²Π»ΡΡΡΡΡ ΡΠ΅ΡΠ²Π΅ΡΠ½ΡΠΌΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°ΠΌΠΈ. ΠΠΎΠ΄ ΠΊΠ°ΠΏΠΎΡΠΎΠΌ next-translate-plugin
Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ Π·Π°Π³ΡΡΠΆΠ°Π΅Ρ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Ρ Π½Π°ΠΏΡΡΠΌΡΡ, Π±Π΅Π· ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π»ΠΎΠ²ΡΡΠ΅ΠΊ useEffect
ΠΈΠ»ΠΈ context
. ΠΠ½ ΡΠ°ΠΊΠΆΠ΅ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΡΠ·ΡΠΊ ΠΈ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ Π² HTML, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡ Π΄ΡΡΠ³ΠΈΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°ΠΌ, ΡΠ°ΠΊΠΈΠΌ ΠΊΠ°ΠΊ ΠΎΡΡΡΠΎΠ²ΠΊΠΈ Π½Π° ΡΡΠΎΡΠΎΠ½Π΅ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°, ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠ΄Π½ΠΈ ΠΈ ΡΠ΅ ΠΆΠ΅ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Ρ. Π·Π°Π³ΡΡΠΆΠ°Π΅ΡΡΡ Π΄Π»Ρ ΡΡΡΠ°Π½ΠΈΡΡ.
ποΈ Π‘ΡΡΠ°Π½ΠΈΡΠ° ΠΊΠ»ΠΈΠ΅Π½ΡΠ° (+498B): app/checkout/page.js
"use client" import useTranslation from 'next-translate/useTranslation' export default function CheckoutPage() { const { t, lang } = useTranslation('checkout') return <h1>{t('title')}</h1> }
ΠΠ»Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΡ
ΡΡΡΠ°Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ ΡΠ²Π»ΡΡΡΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΌΠΈ Π² Next.js, Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ ΠΎΠ½ΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΠ΅, Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΡΠΎΠΊΠΈ "use client"
, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ²Π»ΡΠ΅ΡΡΡ Π½ΠΎΠ²ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅ app
Next.js. 13. ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, Π΅ΡΠ»ΠΈ ΡΡΠ° ΡΡΡΠΎΠΊΠ° ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ, ΡΡΡΠ°Π½ΠΈΡΠ° ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ΅ΡΠ²Π΅ΡΠ½ΠΎΠΉ. ΠΠΎΠ΄ ΠΊΠ°ΠΏΠΎΡΠΎΠΌ next-translate-plugin
Π·Π°Π³ΡΡΠΆΠ°Π΅Ρ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Ρ Π΄Π»Ρ ΡΡΠΈΡ
ΡΡΡΠ°Π½ΠΈΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Ρ
ΡΠΊΠ° useEffect
. Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π½Π΅Ρ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΡΡΠΎ-Π»ΠΈΠ±ΠΎ Π² HTML, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π²ΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΡΠΆΠ΅ Π±ΡΠ΄ΡΡ ΠΈΠΌΠ΅ΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Π°ΠΌ. ΡΠΈΠ»ΡΠ½ΡΠΉ> Π±Π΅Π· Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΡΠ²Π»Π°ΠΆΠ½Π΅Π½ΠΈΡ.
ποΈ ΠΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ (+498B): components/ClientIsland
"use client" import useTranslation from 'next-translate/useTranslation' export default function ClientIsland() { const { t, lang } = useTranslation('common') return <h1>{t('island')}</h1> }
Π’Π° ΠΆΠ΅ Π»ΠΎΠ³ΠΈΠΊΠ° ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌΠ° ΠΈ ΠΊ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°ΠΌ: Π΅ΡΠ»ΠΈ Ρ Π½ΠΈΡ
Π½Π΅Ρ ΡΡΡΠΎΠΊΠΈ "use client"
, ΠΎΠ½ΠΈ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΠ²Π»ΡΡΡΡΡ ΡΠ΅ΡΠ²Π΅ΡΠ½ΡΠΌΠΈ, Π½ΠΎ Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΈ Π²ΠΊΠ»ΡΡΠ°ΡΡ Π΅Π΅, ΠΎΠ½ΠΈ ΡΡΠ°Π½ΠΎΠ²ΡΡΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΠΌΠΈ ΠΎΡΡΡΠΎΠ²Π°ΠΌΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ΅ ΡΠ΅ΡΠ²Π΅ΡΠ°. .
Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ next-translate-plugin
ΠΏΡΠΎΠ²Π΅ΡΠΈΡ, Π½ΡΠΆΠ½Π° Π»ΠΈ Π³ΠΈΠ΄ΡΠ°ΡΠ°ΡΠΈΡ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΡΠΎ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Ρ ΡΠΆΠ΅ Π΄ΠΎΡΡΡΠΏΠ½Ρ, Π΅ΡΠ»ΠΈ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠ°Ρ ΡΡΡΠ°Π½ΠΈΡΠ° ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΡΠ°ΠΊΠΆΠ΅ Π±ΡΠ»ΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠΌ.
π Π‘Π΅ΡΠ²Π΅ΡΠ½ΡΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ (+0kb): components/ServerSea
import useTranslation from 'next-translate/useTranslation' export default function ServerSea() { const { t, lang } = useTranslation('common') return <h1>{t('sea')}</h1> }
ΠΠ»Ρ ΡΠ΅ΡΠ²Π΅ΡΠ½ΡΡ
ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² ΠΏΠ»Π°Π³ΠΈΠ½ Π½Π΅ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΈΡ
ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠΉ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Ρ ΡΠΆΠ΅ Π·Π°Π³ΡΡΠΆΠ΅Π½Ρ Π½Π° ΡΡΠΎΠ²Π½Π΅ ΡΡΡΠ°Π½ΠΈΡΡ, Π° ΠΏΡΡΠΌΠΎΠΉ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Π°ΠΌ Π΄ΠΎΡΡΡΠΏΠ΅Π½ ΡΠ΅ΡΠ΅Π· Ρ
ΡΠΊ useTranslation
.
πποΈποΈ Π‘ΡΡΠ°Π½ΠΈΡΠ° ΡΠ΅ΡΠ²Π΅ΡΠ° Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΠΌΠΈ ΠΎΡΡΡΠΎΠ²Π°ΠΌΠΈ (+498B): app/page.js
import ServerSea from '@components/ServerSea' // this part 0kb import ClientIsland from '@components/ClientIsland' import AnotherClientIsland from '@components/AnotherClientIsland' export default function HomePage() { return ( <> <ServerSea /> <ClientIsland /> <AnotherClientIsland /> </> }
ΠΠ΄Π½Π°ΠΊΠΎ Π΅ΡΠ»ΠΈ ΠΈΠΌΠ΅Π΅ΡΡΡ ΡΠ΅ΡΠ²Π΅ΡΠ½Π°Ρ ΡΡΡΠ°Π½ΠΈΡΠ° Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΠΌΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°ΠΌΠΈ, ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π³ΠΈΠ΄ΡΠ°ΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠΎ, ΡΡΠΎ Π±ΡΠ»ΠΎ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½ΠΎ Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠ½ΠΎΠΉ ΡΡΡΠ°Π½ΠΈΡΠ΅, ΠΈ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΏΠΎΠ²ΡΠΎΡΠ½ΡΡ Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡ.
ΠΠ°ΡΡΡΡΡΠΈΠ·Π°ΡΠΈΡ i18n Ρ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΎΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ
Next.js 10 ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΠ» ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ ΠΌΠ°ΡΡΡΡΡΠΈΠ·Π°ΡΠΈΠΈ i18n, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΡΡ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡ ΡΡΡΠ°Π½ΠΈΡΡ ΠΏΡΡΠ΅ΠΌ ΠΏΠ΅ΡΠ΅Ρ
ΠΎΠ΄Π° ΠΊ /es/page-name
, Π³Π΄Π΅ Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΡΡΠ°Π½ΠΈΡΠ΅ pages/page-name.js
ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ»ΡΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Ρ
ΡΠΊΠ° useRouter
Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ locale
.
ΠΠ΄Π½Π°ΠΊΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΡΡΠ°Π½ΠΈΡΡ Π±ΡΠ»ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½Ρ ΠΈΠ· ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° pages
Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΡΡΠ° ΠΌΠ°ΡΡΡΡΡΠΈΠ·Π°ΡΠΈΡ i18n Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ.
Π Next-translate ΠΌΡ ΡΠ΅ΡΠΈΠ»ΠΈ Π½Π΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²ΡΠ²Π°ΡΡ ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΌΡ ΡΡΡΠ΅ΠΌΠΈΠΌΡΡ Π±ΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΎΠΉ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Π° ΡΡΡΠ°Π½ΠΈΡ, Π° Π½Π΅ Π΄Π»Ρ ΠΈΡ
ΠΌΠ°ΡΡΡΡΡΠΈΠ·Π°ΡΠΈΠΈ. ΠΡ Π½Π°Π΄Π΅Π΅ΠΌΡΡ, ΡΡΠΎ Π² Π±ΡΠ΄ΡΡΠ΅ΠΌ ΡΡΠ° ΡΡΠ½ΠΊΡΠΈΡ Π±ΡΠ΄Π΅Ρ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅ app
, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½Π° Π²ΡΠ΅ Π΅ΡΠ΅ Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ Π² ΡΡΠ°Π΄ΠΈΠΈ Π±Π΅ΡΠ°-ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π΅ΡΠ΅ Π½ΡΠΆΠ΄Π°ΡΡΡΡ Π² ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ΅.
ΠΠ΄Π½Π°ΠΊΠΎ Π²ΡΡ Π΄ΠΎΡΡΡΠΏΠ½Π°Ρ Π² Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΡΠ²ΡΠ·Π°Π½Π° Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ lang
. Π’ΠΎ Π΅ΡΡΡ /es/page-name?lang=es
ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅Ρ ΡΡΡΠ°Π½ΠΈΡΡ app/page-name/page.js
, Π³Π΄Π΅ Ρ Π½Π°Ρ Π΅ΡΡΡ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠΉ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ lang
, ΠΈ Π²Π°ΠΌ Π½Π΅ Π½ΡΠΆΠ½ΠΎ Π΄Π΅Π»Π°ΡΡ ΡΡΠΎ-Π»ΠΈΠ±ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅, ΠΊΡΠΎΠΌΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Ρ
ΡΠΊΠ° useTranslation
Π΄Π»Ρ ΠΏΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΡ Π²Π°ΡΠΈ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Ρ.
Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π΅ΡΠ»ΠΈ Π²Ρ Ρ
ΠΎΡΠΈΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ·ΡΠΊ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠΎΠ΄ΠΏΡΡΠΈ /es/page-name
Π±Π΅Π· ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΠΎΠ΅ ΠΠ, ΡΡΠΎΠ±Ρ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ lang
ΠΈ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΠΈΡΡ:
// middleware.ts import { NextResponse } from 'next/server' import type { NextRequest } from 'next/server' import i18n from './i18n' // /es/page-name -> rewrites to -> /es/page-name?lang=es export function middleware(request: NextRequest) { const locale = request.nextUrl.locale || i18n.defaultLocale request.nextUrl.searchParams.set('lang', locale) return NextResponse.rewrite(request.nextUrl) }
ΠΠ΄Π΅ΡΡ, Π² ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΠΎΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠΌ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΠΈ, ΠΌΡ Π½Π΅ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ Π»ΠΎΠΊΠ°Π»Ρ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠΎΠ΄ΠΏΡΡΠΈ, Π° ΡΡΡΡΠ°Π½ΡΠ΅ΠΌ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ Π²ΡΡΡΠ½ΡΡ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ lang
. ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΠΉ ΠΏΡΡΡ Π²ΡΠ΅ Π΅ΡΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ, Π½ΠΎ Π²Ρ Π½Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ useRouter
ΠΈΠ· next/router
Π΄Π»Ρ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ locale
Π²Π½ΡΡΡΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° app
. ΠΠΎΡΡΠΎΠΌΡ Π½Π°ΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΠΏΠΎ-ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ Π½ΡΠΆΠ΅Π½, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΠΌΡ ΡΠΊΡΠΎΠ΅ΠΌ Π΅Π³ΠΎ ΠΈΠ· ΠΏΠΎΠ»Ρ Π·ΡΠ΅Π½ΠΈΡ.
Π Π΄Π»Ρ Π½Π°Π²ΠΈΠ³Π°ΡΠΈΠΈ:
<Link href={`/?lang=${locale}`} as={`/${locale}`}>{locale}</Link>
ΠΡΠ»ΠΈ Π²Π°ΠΌ Π½ΡΠΆΠ½Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΌΠ°ΡΡΡΡΡΠΈΠ·Π°ΡΠΈΠΈ i18n, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π»ΠΎΠΊΠ°Π»ΠΈ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΠ°Π³ΠΈ ΠΈΠ· Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Next.js:
ΠΠ°ΡΡΡΡΡΡ Π½Π° ΡΠ°Π·Π½ΡΡ ΡΠ·ΡΠΊΠ°Ρ
ΠΠ΅ΠΌΠΎ
Π Π·Π°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅, Π΅ΡΠ»ΠΈ Π²Ρ Ρ
ΠΎΡΠΈΡΠ΅ ΠΏΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°ΡΡ ΠΏΡΠΈΠΌΠ΅Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠ΅Π³ΠΎ Next.js Ρ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΎΠΌ app
ΠΈ Next-translate, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²Π·Π³Π»ΡΠ½ΡΡΡ Π½Π° ΡΡΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ:
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
Π ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅ ΠΎΠ±ΡΡΠΆΠ΄Π°Π΅ΡΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΠ°ΡΠ°Π΄ΠΈΠ³ΠΌΡ Next.js 13 Π² ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠΈ ΡΡΡΠ°Π½ΠΈΡΠ°ΠΌΠΈ, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ Π½ΠΎΠ²ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ ΠΌΠ°ΡΡΡΡΡΠΈΠ·Π°ΡΠΈΠΈ ΠΈ Π²ΡΠ±ΠΎΡΠΊΠΈ Π΄Π°Π½Π½ΡΡ , ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ ΠΌΠ°ΠΊΠ΅ΡΡ, Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΠ΅ ΠΌΠ°ΡΡΡΡΡΡ ΠΈ ΡΠ΅ΡΠ²Π΅ΡΠ½ΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ. Π‘Π΅ΡΠ²Π΅ΡΠ½ΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ β ΡΡΠΎ Π½ΠΎΠ²ΡΠΉ ΡΠΈΠΏ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° React, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠ΅, ΡΡΠΎ ΡΠΌΠ΅Π½ΡΡΠ°Π΅Ρ ΠΎΠ±ΡΠ΅ΠΌ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡΠΏΡΠ°Π²ΠΈΡΡ Π² Π±ΡΠ°ΡΠ·Π΅Ρ, ΠΈ ΠΏΠΎΠ²ΡΡΠ°Π΅Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ React.
Π ΡΡΠ°ΡΡΠ΅ ΡΠ°ΠΊΠΆΠ΅ ΠΎΠ±ΡΡΠΆΠ΄Π°Π΅ΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Next-translate, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠΈΡΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ Π΄Π»Ρ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΎΠ² Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ°Ρ Next.js. ΠΠ½ ΡΡΡΠ΅ΠΌΠΈΡΡΡ Π±ΡΡΡ ΠΏΡΠΎΡΡΡΠΌ Π² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ, ΠΈΠΌΠ΅ΡΡ Π²ΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΠ΅ Π΄Π»Ρ i18n ΠΈ Π±ΡΡΡ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ Π»Π΅Π³ΠΊΠΈΠΌ. Π ΡΡΠ°ΡΡΠ΅ ΠΎΡΠ΅Π½ΠΈΠ²Π°Π΅ΡΡΡ, ΠΎΡΡΠ°Π΅ΡΡΡ Π»ΠΈ Next-translate ΠΏΡΠΎΡΡΡΠΌ Π² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ, Π»Π΅Π³ΠΊΠΈΠΌ ΠΈ ΠΈΠΌΠ΅Π΅Ρ Π»ΠΈ ΠΎΠ½ Π²ΡΠ΅ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ i18n Π² Π½ΠΎΠ²ΠΎΠΉ ΠΏΠ°ΡΠ°Π΄ΠΈΠ³ΠΌΠ΅ Next.js 13, ΠΈ ΠΎΠ±ΡΡΡΠ½ΡΠ΅Ρ ΠΊΠ°ΠΊ ΠΈΠΌ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ.
Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΠΈ
- Π Π΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ Next-translate: https://github.com/aralroca/next-translate
- Π Π΅Π»ΠΈΠ· Next-translate 2.0: https://github.com/aralroca/next-translate/releases/tag/2.0.0
- Π Π΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ Next-translate-plugin: https://github.com/aralroca/next-translate-plugin
- ΠΠΎΠΊΡΠΌΠ΅Π½Ρ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Next.js: https://beta.nextjs.org/docs/guides/internationalization
- ΠΠΎΠΊΡΠΌΠ΅Π½Ρ ΠΎ ΠΌΠ°ΡΡΡΡΡΠΈΠ·Π°ΡΠΈΠΈ Next.js i18n (ΠΏΠ΅ΡΠ΅Π΄ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΎΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ): https://nextjs.org/docs/advanced-features/i18n-routing
- Π‘ΡΠ°ΡΡΡ Deno ΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΡ ΠΎΡΡΡΠΎΠ²Π°Ρ : https://deno.com/blog/the-future-and-past-is-server-side-rendering
- ΠΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΡΠ΅ΡΠ²Π΅ΡΠ° React: https://reactjs.org/blog/2020/12/21/data-fetching-with-react-server-components.html
- ΠΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ React 18: https://reactjs.org/blog/2022/03/29/react-v18.html