راهنمای کامل ساخت سایت چندزبانه با فریم‌ورک Laravel

نحوه ساخت سایت چندزبانه با Laravel

فهرست مطالب

نحوه ساخت سایت چندزبانه با Laravel

Laravel سایت چندزبانه امروزه یکی از نیازهای مهم پروژه‌های وب محسوب می‌شود. اگر قصد دارید وب‌سایتی با پشتیبانی از چند زبان راه‌اندازی کنید، انتخاب Laravel همراه با استراتژی درست می‌تواند سرعت توسعه، مدیریت محتوا و سئو را بهبود دهد. در این مقاله، از اصول تا پیاده‌سازی کامل سایت چندزبانه با آموزش لاراول در ارومیه را بررسی می‌کنیم.
برای مطالعات بیشتر به بخش آموزش برنامه نویسی در ارومیه مراجعه فرمائید.

فهرست مطالب

  • انتخاب روش چندزبانه در Laravel

  • پیکربندی اولیه Laravel برای چندزبانی

  • ساخت سیستم ترجمه (Localization)

  • مدیریت مسیرها (Routes) چندزبانه

  • Middleware برای تشخیص زبان

  • ذخیره‌سازی ترجمه‌ها (Database یا فایل)

  • نمایش محتوا به زبان کاربر

  • لینک داخلی و سئوی چندزبانه

  • نکات امنیتی و تجربه کاربری

  • تست، نگهداری و به‌روزرسانی

  • نتیجه‌گیری و دعوت به اقدام

انتخاب روش چندزبانه در Laravel

برای ساخت یک Laravel سایت چندزبانه، ابتدا باید تعیین کنید روش پیاده‌سازی چگونه باشد. سه رویکرد رایج عبارت‌اند از:

  • فایل زبان (lang files): ترجمه‌ها در فایل‌های resources/lang ذخیره می‌شوند.

  • پایگاه داده (DB): ترجمه‌ها در جدول یا جداول جداگانه ذخیره می‌شوند.

  • ترکیبی: بخش‌های ایستا در فایل‌ها، بخش‌های پویا در پایگاه داده.

هر روش مزایا و معایب خود را دارد. روش فایل ساده‌تر است اما برای تعداد زیاد زبان یا ترجمه پویا محدودیت دارد. روش پایگاه داده انعطاف بیشتری دارد اما پیچیدگی مدیریت را افزایش می‌دهد.

پیکربندی اولیه Laravel برای چندزبانی

فعال‌سازی Localization

ابتدا در فایل config/app.php زبان پیش‌فرض و لیست زبان‌های مجاز را تنظیم کنید:

'locale' => 'fa',
'fallback_locale' => 'en',

و در همان فایل یا بهتر در فایل جدید config مثلاً config/locales.php می‌توانید آرایه‌ای از زبان‌های پشتیبانی‌شده تعریف کنید:

return [
'available_locales' => ['fa', 'en', 'ar'],
];

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

Laravel به صورت پیش‌فرض از پوشه resources/lang/{locale} پشتیبانی می‌کند. شما می‌توانید فایل‌هایی مانند messages.php, auth.php و غیره قرار دهید:

// resources/lang/fa/messages.php
return [
'welcome' => 'خوش آمدید',
];

ساخت سیستم ترجمه (Localization)

سیستم ترجمه در Laravel از تابع‌های __() و trans() پشتیبانی می‌کند:

<h1>{{ __('messages.welcome') }}</h1>

همچنین اگر بخواهید در کنترلر یا کد PHP:

echo trans('messages.welcome');

در صورتی که ترجمه‌ای برای زبان جاری وجود نداشته باشد، Laravel از fallback_locale استفاده می‌کند.

مدیریت مسیرها (Routes) چندزبانه

برای سایت چندزبانه باید مسیرها شامل شناسه زبان شوند:

مثال:

Route::group(['prefix' => '{locale}'], function () {
Route::get('/', [HomeController::class, 'index'])->name('home');
// سایر مسیرها
});

در RouteServiceProvider می‌توانید یک شرط برای مقدار locale تعریف کنید:

Route::pattern('locale', 'fa|en|ar');

همچنین می‌توانید ریدایرکت پیش‌فرض بدون زبان به مسیر با زبان پیش‌فرض انجام دهید:

Route::get('/', function () {
return redirect(app()->getLocale());
});

Middleware برای تشخیص زبان

یک Middleware بسازید تا زبان کاربر را تنظیم کند:

php artisan make:middleware SetLocale

در کلاس SetLocale:

public function handle($request, Closure $next)
{
$locale = $request->route('locale');
if (! in_array($locale, config('locales.available_locales'))) {
$locale = config('app.fallback_locale');
}
app()->setLocale($locale);
return $next($request);
}

سپس در فایل app/Http/Kernel.php آن را ثبت کنید:

protected $middlewareGroups = [
'web' => [
// سایر middleware ها …
\App\Http\Middleware\SetLocale::class,
],
];

ذخیره‌سازی ترجمه‌ها (Database یا فایل)

روش فایل

مزایای آن ساده بودن و اشکال‌زدایی آسان است. برای هر زبان پوشه‌ای جداگانه و فایل‌هایی با کلید ترجمه دارید. برای ترجمه‌های پویا، می‌توانید فایلی با عنوان custom.php داشته باشید:

return [
'post_title_1' => 'عنوان مقاله یک',
];

روش پایگاه داده

برای ترجمه‌های پویا، ساختار جدول مانند:

id locale group key value

مثلاً:

Schema::create('translations', function (Blueprint $table) {
$table->id();
$table->string('locale');
$table->string('group');
$table->string('key');
$table->text('value');
});

سپس کلاس مدل Translation ایجاد کنید و تابعی بسازید مثل:

public static function translate($group, $key, $locale = null)
{
$locale = $locale ?: app()->getLocale();
$record = static::where('locale', $locale)
->where('group', $group)
->where('key', $key)
->first();
return $record ? $record->value : fallback_translation(...);
}

برای راحتی، می‌توانید یک «Service» بسازید که تابع ترجمه را در تمام پروژه جایگزین __() کند.

نمایش محتوا به زبان کاربر

در کنترلرها یا ویوها:

$post = Post::find($id);
$title = $post->getTranslation('title', app()->getLocale());
$content = $post->getTranslation('content', app()->getLocale());

اگر از پکیجی مانند spatie/laravel-translatable استفاده کنید، تابع getTranslation() فراهم می‌شود.

در Blade:

<h1>{{ $post->getTranslation('title', app()->getLocale()) }}</h1>
<p>{{ $post->getTranslation('content', app()->getLocale()) }}</p>

لینک داخلی و سئوی چندزبانه

برای لینک‌دهی مناسب و سئوی Laravel سایت چندزبانه:

  • همیشه لینک داخلی را با زبان جاری بسازید:

    route('home', ['locale' => app()->getLocale()]);
  • در Blade:

    <a href="{{ route('post.show', ['locale'=>app()->getLocale(), 'id'=>$post->id]) }}">
    {{ __('messages.read_more') }}
    </a>
  • استفاده از تگ‌های hreflang در <head> برای نمایش زبان‌های مختلف:

    <link rel="alternate" hreflang="fa" href="{{ url('fa') }}" />
    <link rel="alternate" hreflang="en" href="{{ url('en') }}" />
  • مطمئن شوید که هر نسخه زبان صفحه دارای URL منحصر به‌فرد باشد تا از محتوای تکراری جلوگیری شود.

  • در فایل robots.txt و sitemap نیز نسخه‌های زبان را درنظر بگیرید.

  • برای لینک خارجی به اسناد لاراول یا پکیج‌ها می‌توانید به سایت رسمی Laravel لینک دهید: (مثلاً https://laravel.com/docs/locale) و برای لینک داخلی به صفحات مرتبط مثل مقاله «مهاجرت در لاراول» یا «تنظیمات RouteServiceProvider» لینک دهید.

نکات امنیتی و تجربه کاربری

برای بهبود تخصص، اعتبار و اعتماد (E-E-A-T) در پروژه:

  • حتماً از HTTPS استفاده کنید و اطمینان دهید که ترجمه‌ها تزریق نشوند.

  • هنگام ذخیره ترجمه پویا در پایگاه داده، قبل از نمایش، خروجی را به درستی پاک‌سازی (sanitize) کنید.

  • برای کاربران گزینه تغییر زبان واضح در رابط کاربری قرار دهید.

  • اگر کاربر زبان را انتخاب کرد، بهتر است با کوکی یا سشن، تنظیم زبان او را حفظ کنید.

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

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

  • پس از پیاده‌سازی، تمام مسیرها را با زبان‌های مختلف تست کنید.

  • در واحد تست‌ها (Unit / Feature) زبان متفاوت را نیز در سناریوها لحاظ کنید.

  • در زمان افزودن زبان جدید، ترجمه‌های جدید را در فایل یا جدول اضافه کنید.

  • مستندات داخلی پروژه را شامل راهنمای افزودن زبان و ترجمه نگه دارید.

  • مرتب بررسی کنید که هیچ کلید ترجمه‌ای مفقود نشده باشد.

در این مقاله راه و چاه Laravel سایت چندزبانه را از پایه تا اجرا بررسی کردیم. اگر قصد دارید وب‌سایتی بین‌المللی بسازید یا سایت فعلی‌تان را به چند زبان تبدیل کنید، همین حالا شروع کنید!
اگر سوالی دارید یا نیاز به مشاوره دارید، خوشحال می‌شوم به شما کمک کنم — به مدرسه برنامه نویسی دودکانی اشاره کنید.