nextjs-i18n-مسیریابی-ترجمه-زبان-رندرینگ-استاتیک

Next.js امکان پشتیبانی از چند زبان را با مسیریابی بین‌المللی و بارگذاری محتوای ترجمه‌شده فراهم می‌کند. این مقاله نحوهٔ تشخیص locale از هدر مرورگر، ساخت مسیرهای پویا، بارگذاری دیکشنری‌های ترجمه، و تولید صفحات استاتیک برای زبان‌های مختلف را بررسی می‌کند.

InternationalizationLocaleTranslationgenerateStaticParams

~2 دقیقه مطالعه · آخرین به‌روزرسانی ۶ آبان ۱۴۰۴

تعریف اصطلاحات


  • Locale: شناسه‌ای برای زبان و تنظیمات منطقه‌ای کاربر
  • en-US: انگلیسی ایالات متحده
  • nl-NL: هلندی کشور هلند
  • nl: هلندی بدون منطقه خاص

مسیریابی بین‌المللی


برای انتخاب locale مناسب، می‌توان از هدر Accept-Language مرورگر استفاده کرد. با استفاده از کتابخانه‌های @formatjs/intl-localematcher و Negotiator می‌توان زبان ترجیحی کاربر را تشخیص داد:

let headers = { 'accept-language': 'en-US,en;q=0.5' }
let languages = new Negotiator({ headers }).languages()
let locales = ['en-US', 'nl-NL', 'nl']
let defaultLocale = 'en-US'

match(languages, locales, defaultLocale) // -> 'en-US'

ریدایرکت بر اساس locale


در فایل proxy.js می‌توان مسیر را بر اساس locale تنظیم کرد:

export function proxy(request) {
  const { pathname } = request.nextUrl
  const pathnameHasLocale = locales.some(
    (locale) => pathname.startsWith(`/${locale}/`) || pathname === `/${locale}`
  )

  if (pathnameHasLocale) return

  const locale = getLocale(request)
  request.nextUrl.pathname = `/${locale}${pathname}`
  return NextResponse.redirect(request.nextUrl)
}

ساختار پوشه‌ها در app/


برای پشتیبانی از زبان‌های مختلف، فایل‌های داخل پوشه app/ باید زیر مسیر app/[lang] قرار بگیرند. این باعث می‌شود پارامتر lang به صفحات و layoutها منتقل شود:

export default async function Page({ params }) {
  const { lang } = await params
  return ...
}

بارگذاری ترجمه‌ها


برای نمایش محتوای ترجمه‌شده، می‌توان از دیکشنری‌های جداگانه برای هر زبان استفاده کرد:

// dictionaries/en.json
{ "products": { "cart": "Add to Cart" } }

// dictionaries/nl.json
{ "products": { "cart": "Toevoegen aan Winkelwagen" } }

سپس تابع getDictionary را برای بارگذاری ترجمه‌ها تعریف می‌کنیم:

export const getDictionary = async (locale: 'en' | 'nl') =>
  dictionaries[locale]()

در صفحه:

const dict = await getDictionary(lang)
return <button>{dict.products.cart}</button>

رندرینگ استاتیک برای زبان‌ها


برای تولید صفحات استاتیک برای هر زبان، از generateStaticParams استفاده می‌کنیم:

export async function generateStaticParams() {
  return [{ lang: 'en-US' }, { lang: 'de' }]
}

در layout:

<html lang={(await params).lang}>
  <body>{children}</body>
</html>

جمع‌بندی


بین‌المللی‌سازی در Next.js با استفاده از مسیرهای پویا، بارگذاری ترجمه‌ها و رندرینگ استاتیک، تجربه‌ای چندزبانه و حرفه‌ای برای کاربران فراهم می‌کند. با ساختار مناسب پوشه‌ها و مدیریت locale، می‌توان اپلیکیشنی قابل توسعه و جهانی ساخت.


نوشته و پژوهش‌شده توسط دکتر شاهین صیامی

مقالات مرتبط

مسیریابی پیشرفته و هوک‌های عملکرد در Next.js — راهنمای توسعه‌دهنده برای App Router

Next.js مجموعه‌ای غنی از هوک‌های کلاینت و ابزارهای کش و ناوبری را در اختیار توسعه‌دهندگان قرار می‌دهد. از خواندن پارامترهای مسیر تا گزارش Web Vitals و مدیریت کش، این مقاله مهم‌ترین ابزارهای App Router را با مثال‌های کاربردی معرفی می‌کند.

ادامه

مدیریت احراز هویت و کش در Next.js — راهنمای توسعه‌دهنده برای امنیت و عملکرد پویا

Next.js با معرفی قابلیت‌های آزمایشی جدید، امکان کنترل دقیق‌تر دسترسی و کش داده‌ها را فراهم کرده است. تابع unauthorized برای مدیریت خطای 401 و هدایت کاربران به صفحه ورود، unstable_cache برای کش هوشمند عملیات سنگین، updateTag برای بازسازی آنی داده‌ها، و useLinkStatus برای نمایش وضعیت ناوبری استفاده می‌شوند. این مقاله نحوه استفاده از این ابزارها را با مثال‌های کاربردی و نکات مهم بررسی می‌کند.

ادامه

redirect و refresh در Next.js — ریدایرکت‌های هوشمند و تازه‌سازی مسیر در Server Actions

تابع redirect در Next.js برای هدایت کاربر به مسیر جدید استفاده می‌شود و بسته به نوع استفاده، پاسخ HTTP با وضعیت 307 یا 303 ارسال می‌کند. این تابع در Server Components، Client Components، Route Handlers و Server Actions قابل استفاده است. تابع refresh نیز برای تازه‌سازی مسیر کلاینت از درون Server Action استفاده می‌شود. این مقاله نحوه استفاده از هر دو تابع را با مثال‌های کاربردی و نکات مهم توضیح می‌دهد.

ادامه

Next.js با معرفی NextRequest و NextResponse، APIهای Request و Response مرورگر را گسترش داده و ابزارهای قدرتمندی برای مدیریت کوکی‌ها، هدرها، ریدایرکت‌ها، بازنویسی مسیرها و پاسخ‌های JSON فراهم کرده است. این مقاله نحوه استفاده از این ابزارها را با مثال‌های کاربردی و نکات امنیتی توضیح می‌دهد.

Next.js با معرفی NextRequest و NextResponse، APIهای Request و Response مرورگر را گسترش داده و ابزارهای قدرتمندی برای مدیریت کوکی‌ها، هدرها، ریدایرکت‌ها، بازنویسی مسیرها و پاسخ‌های JSON فراهم کرده است. این مقاله نحوه استفاده از این ابزارها را با مثال‌های کاربردی و نکات امنیتی توضیح می‌دهد.

ادامه

headers، ImageResponse، notFound و permanentRedirect در Next.js — مدیریت درخواست‌ها، تولید تصویر، خطا و ریدایرکت

Next.js ابزارهای قدرتمندی برای مدیریت درخواست‌ها و پاسخ‌ها در کامپوننت‌های سروری فراهم کرده است. تابع headers برای خواندن هدرهای HTTP ورودی، ImageResponse برای تولید تصاویر داینامیک، notFound برای نمایش صفحه خطای 404، و permanentRedirect برای ریدایرکت دائمی کاربران استفاده می‌شوند. این مقاله نحوه استفاده از هر یک را با مثال‌های کاربردی توضیح می‌دهد.

ادامه

راهنمای کامل استفاده از metadata و generateMetadata در Next.js

در نسخه‌های مدرن Next.js، مدیریت metadata صفحات بسیار قدرتمندتر و ساده‌تر شده است. metadata به‌صورت خودکار در تگ <head> صفحات تزریق می‌شود و نقش مهمی در SEO، اشتراک‌گذاری اجتماعی و تجربه کاربری دارد. این مقاله دو روش اصلی تعریف metadata را بررسی می‌کند: استفاده از آبجکت ثابت metadata و تابع داینامیک generateMetadata.

ادامه