التدويل (i18n) هو عملية تصميم تطبيق ليكون قابلاً للتكيف بسهولة مع اللغات والمناطق المختلفة دون تغييرات هندسية. ستتعلم في هذه المقالة كيفية إعداد i18n في تطبيق Next.js وإنشاء محوّل لغة للتبديل بين اللغتين الإنجليزية والإسبانية باستخدام next-intl.
أولاً، تحتاج إلى تثبيت مكتبة next-intl، التي تسهل إدارة التدويل في Next.js. قم بتشغيل الأمر التالي في جهازك الطرفي:
npm install next-intl
سيكون هيكل المشروع على النحو التالي:
├── messages │ ├── en.json │ └── es.json ├── next.config.mjs └── src ├── i18n.ts ├── middleware.ts └── app └── [locale] ├── layout.tsx └── page.tsx
قم بإنشاء دليل الرسائل في جذر مشروعك. داخل هذا الدليل، أضف ملفات JSON لكل لغة تريد دعمها.
{ "greeting": "Hello Codú", "farewell": "Goodbye Codú" }
{ "greeting": "Hola Codú", "farewell": "Adiós Codú" }
تحتوي هذه الملفات على ترجمات العبارات التي سيستخدمها تطبيقك.
قم بتكوين Next.js لدعم التدويل في next.config.mjs.
import { getRequestConfig } from 'next-intl/server'; // List of supported languages const locales = ['en', 'es']; export default getRequestConfig(async ({ locale }) => { // Validate that the incoming `locale` parameter is valid if (!locales.includes(locale)) { return { notFound: true }; } return { messages: (await import(`./messages/${locale}.json`)).default }; });
يقوم هذا الملف بتكوين Next.js لتحميل رسائل الترجمة الصحيحة بناءً على اللغة المطلوبة.
إنشاء برامج وسيطة للتعامل مع إعادة التوجيه وتعيين اللغة الافتراضية.
import createMiddleware from 'next-intl/middleware'; export default createMiddleware({ // List of all supported languages locales: ['en', 'es'], // Default language defaultLocale: 'en' }); export const config = { // Only match internationalised pathnames matcher: ['/', '/(en|es)/:path*'] };
تتولى هذه البرامج الوسيطة إعادة التوجيه إلى اللغة الافتراضية إذا لم يتم تحديد أي منها.
إنشاء ملف تكوين لإدارة إعدادات التدويل.
import { notFound } from 'next/navigation'; import { getRequestConfig } from 'next-intl/server'; const locales = ['en', 'es']; export default getRequestConfig(async ({ locale }) => { if (!locales.includes(locale as any)) notFound(); return { messages: (await import(`../messages/${locale}.json`)).default }; });
يقوم هذا الملف بالتحقق من صحة اللغات وتحميل الرسائل المقابلة.
قم بتكوين التخطيط والصفحة الرئيسية لدعم التدويل.
import { useLocale } from 'next-intl'; import { ReactNode } from 'react'; export default function Layout({ children }: { children: ReactNode }) { const locale = useLocale(); return ( {children} ); }
import { useTranslations } from 'next-intl'; export default function Page() { const t = useTranslations(); return (); }{t('greeting')}
{t('farewell')}
تقوم هذه الملفات بتكوين التخطيط والصفحة الرئيسية لاستخدام الترجمات.
أخيرًا، قم بإنشاء محول لغة للتبديل بين الإنجليزية والإسبانية.
'use client'; import { useLocale } from 'next-intl'; import { useRouter } from 'next/navigation'; import { ChangeEvent, useTransition } from 'react'; export default function LocalSwitcher() { const [isPending, startTransition] = useTransition(); const router = useRouter(); const localActive = useLocale(); const onSelectChange = (e: ChangeEvent) => { const nextLocale = e.target.value; startTransition(() => { router.replace(`/${nextLocale}`); }); }; return ( ); }
يسمح هذا المكون للمستخدمين بتغيير لغة الواجهة.
باستخدام هذه الخطوات، تكون قد نجحت في إعداد التدويل في تطبيق Next.js الخاص بك وإنشاء محوّل لغة للتبديل بين اللغتين الإنجليزية والإسبانية. سيسمح هذا لتطبيقك بدعم لغات متعددة وتوفير تجربة مستخدم محلية.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3