Ecme logoEcme logo
داشبورد
    فروشگاه آنلاین
    پروژه
    بازاریابی
    تحلیل
مفاهیم
    هوش مصنوعی
      گفتگو
      تصویر
    پروژه‌ها
      تابلوی اسکرام
      فهرست
      جزئیات
      وظایف
      مسائل
    مشتریان
      فهرست
      ویرایش
      ایجاد
      جزئیات
    محصولات
      فهرست
      ویرایش
      ایجاد
    سفارش‌ها
      فهرست
      ویرایش
      ایجاد
      جزئیات
    حساب کاربری
      تنظیمات
      سابقه فعالیت
      نقش‌ها و دسترسی‌ها
      تعرفه‌ها
    مرکز راهنمایی
      مرکز پشتیبانی
      مقاله
      ویرایش مقاله
      مدیریت مقاله
    تقویم
    مدیریت فایل
    ایمیل
    گفتگو
اجزای رابط کاربری
    عمومی
      دکمه
      شبکه
      تایپوگرافی
      نمادها
    بازخورد
      هشدار
      پنجره گفتگو
      منوی کشویی
      نوار پیشرفت
      پیش‌نمایش
      نشانگر بارگذاری
      پیام موقت
    نمایش اطلاعات
      تصویر کاربر
      نشانک
      تقویم
      کارت‌ها
      جدول
      برچسب
      خط زمان
      راهنمای ابزار
    فرم‌ها
      کادر انتخاب
      انتخابگر تاریخ
      کنترل‌های فرم
      ورودی
      گروه ورودی
      دکمه رادیویی
      بخش
      انتخابگر
      کلید دوحالته
      ورودی زمان
      بارگذاری
    ناوبری
      منوی کشویی
      منو
      صفحه‌بندی
      گام‌ها
      زبانه‌ها
    نمودار
      نمودارها
      نقشه‌ها
احراز هویت
    ورود به سیستم
      ساده
      کناری
      دوبخشی
    ثبت‌نام
      ساده
      کناری
      دوبخشی
    بازیابی رمز عبور
      ساده
      کناری
      دوبخشی
    بازنشانی رمز عبور
      ساده
      کناری
      دوبخشی
    تایید رمز یکبار مصرف
      ساده
      کناری
      دوبخشی
سایر
    دسترسی غیرمجاز
    صفحه فرود
راهنما
    مستندات
    اجزای اشتراکی
    ابزارها
    تاریخچه تغییرات
حق نشر © 2026 Ecme تمامی حقوق محفوظ است.
شرایط و ضوابط | حریم خصوصی و سیاست
شروع کار
مقدمهنصبتل‌ویند سی‌اس‌اسسی‌اس‌اسشروع کنندهتایپ‌اسکریپتبه‌روزرسانی
توسعه
سرور توسعهمتغیرهای محیطیساختار پوشهمسیریابیایجاد صفحه جدیدیکپارچه‌سازی APIاحراز هویتمدیریت وضعیت
پیکربندی
پیکربندی اپچیدمان‌هاپیکربندی ناوبریتم‌سازیبین‌المللی‌سازیحالت تاریک/روشنجهتپیکربندی تم کلی
استقرار
ساخت تولید
دیگر
منابع و اعتبارات

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

ما استفاده می‌کنیم next-intl برای مدیریت بین‌المللی‌سازی (i18n). به طور پیش‌فرض، استارتر شامل تنظیمات i18n نمی‌شود، زیرا هر پروژه به این ویژگی نیاز ندارد. با این حال، ما دو تنظیم متفاوت ارائه می‌دهیم تا به هر دو سناریو پاسخ دهند: بدون مسیریابی i18n (پیش‌فرض) و با مسیریابی i18n.

ما i18n را به طور پیش‌فرض در ماژول ناوبری یکپارچه کرده‌ایم. اگر به i18n در اپلیکیشن خود نیاز دارید، ممکن است لازم باشد که فیلد activeNavTranslation در src/configs/app.config.ts را به true تغییر دهید.


// src/configs/app.config.ts
export const appConfig: AppConfig = {
    ...
    activeNavTranslation: true
}
بدون مسیریابی i18n

این تنظیم برای سادگی طراحی شده است، که به شما اجازه می‌دهد ترجمه‌ها را بدون دخالت ساختار URL‌ها مدیریت کنید، که در دمو ما پیاده‌سازی شده است.

  1. فایل‌های ترجمه خود را به پوشه messages در دایرکتوری ریشه اضافه کنید:

    messages/
    ├── en.json
    ├── es.json
    └── fr.json
    

    این ساده‌ترین مثال برای اضافه کردن کلید ترجمه به فایل‌های JSON است

    // messages/en.json
    {
        "title": "Home",
    }
    // messages/es.json
    {
        "title": "Inicio",
    }
  2. اپلیکیشن خود را با LocaleProvider در src/app/layout.tsx و پراپ‌های لازم را تزریق کنید

    // src/app/layout.tsx
    ...
    import LocaleProvider from "@/components/template/LocaleProvider";
    import { getLocale, getMessages } from "next-intl/server";
    
    export default async function RootLayout({
        children,
    }: Readonly<{
        children: ReactNode;
    }>) {
    
        const locale = await getLocale();
    
        const messages = await getMessages();
    
        ...                          
    
        return (
            <html suppressHydrationWarning>
                <body suppressHydrationWarning>
                    <LocaleProvider locale={locale} messages={messages}>
                        <ThemeProvider locale={locale} theme={theme}>
                            ...other components
                            {children}
                        </ThemeProvider>
                    </LocaleProvider>  
                </body>
            </html>
        );
    }
  3. اکنون می‌توانید در کامپوننت‌های صفحه خود یا هر جای دیگری از hook useTranslation استفاده کنید

    import {useTranslations} from 'next-intl';
     
    export default function HomePage() {
        const t = useTranslations();
        return <h1>{t('title')}</h1>;
    }
با مسیریابی i18n

Next Intl یک تنظیم مسیریابی i18n فراهم می‌کند، که از مسیرهای منحصر به فرد برای هر زبان که اپلیکیشن شما از آن پشتیبانی می‌کند استفاده می‌کند، این تنظیم می‌تواند در صورتی که به مسیریابی مبتنی بر پیشوند (مثلاً /en/about) یا مسیریابی مبتنی بر دامنه (مثلاً en.example.com) نیاز داشته باشید مفید باشد.

تنظیم مسیریابی i18n در یک اپلیکیشن Next.js نسبت به تنظیم بالا نیاز به تلاش بیشتری دارد. این تنظیم شامل تغییرات در ساختار پروژه و پیکربندی‌های اضافی است.

اگر قصد دارید مسیریابی i18n را پیاده‌سازی کنید، به مستندات رسمی next-intl برای راهنمای جامع مراجعه کنید: تنظیم مسیریابی اپلیکیشن با مسیریابی i18n

تغییر زبان

اگر نیاز به تغییر زبان به صورت پویا (بدون مسیریابی i18n) دارید، می‌توانید از شی i18n که توسط hook useTranslation فراهم می‌شود برای تغییر زبان فعلی استفاده کنید.

'use client'
                
import { setLocale } from '@/server/actions/locale'

const Component = () => {

    const handleUpdateLocale = async (locale: string) => {
        await setLocale(locale)
    }

    return (
        <button onClick={() => handleUpdateLocale('fr')}>تغییر زبان</button>
    )
}

export default Component
تنظیم زبان پیش‌فرض

برای تنظیم زبان پیش‌فرض، ممکن است لازم باشد که به src/configs/app.config.ts مراجعه کنید و مقدار فیلد locale را تغییر دهید.

export const appConfig: AppConfig = {
    ...
    locale: 'fr'
}
اضافه کردن لوکال جدید

برای پشتیبانی از زبان جدید در اپلیکیشن خود، یک فایل JSON جدید برای لوکال داخل پوشه messages ایجاد کنید. برای مثال، برای اضافه کردن ترجمه‌های فرانسوی، یک فایل به نام messages/fr.json ایجاد کنید:

// messages/fr.json
{
    "HomePage": {
        "title": "Bonjour le monde!",
        "about": "Aller à la page à propos"
    }
}

مقدار لوکال جدید را در src/i18n/dateLocales.ts ثبت کنید.

export const dateLocales: {
    [key: string]: () => Promise<ILocale>
} = {
    ...
    fr: () => import('dayjs/locale/fr'),
}

برای مسیریابی i18n، ممکن است لازم باشد که مقدار لوکال جدید را به پیکربندی مسیریابی و میانی‌افزار اضافه کنید.