سیگنال بلاگ
کاربران فعال
bahramirad bahramirad
ج.بهرامی‌راد 4 هفته پیش

برای پیاده‌سازی قابلیت چندزبانه توی Laravel می‌تونیم از پکیج laravel-translatable از Spatie استفاده کنیم.

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

اول پکیج رو نصب می‌کنیم:

composer require spatie/laravel-translatable

مثلاً فرض کنیم مدل Product داریم و می‌خوایم name و description چندزبانه باشن. توی migration، این فیلدها رو به‌صورت json تعریف می‌کنیم:

$table->json('name');
$table->json('description');

بعد توی مدل مشخص می‌کنیم که این فیلدها قابل ترجمه هستن:

use Spatie\Translatable\HasTranslations;

class Product extends Model
{
    use HasTranslations;

    public array $translatable = [
        'name',
        'description',
    ];
}

حالا مقدار name می‌تونه چیزی شبیه این باشه:

{
    "fa": "محصول جدید",
    "en": "New product"
}

و می‌تونیم ترجمه‌ها رو با خود مدل مدیریت کنیم:

$product->setTranslation('name', 'fa', 'محصول جدید');
$product->setTranslation('name', 'en', 'New product');

$product->save();

اینجوری اضافه شدن زبان جدید هم به تغییر ساختار جدول نیاز نداره؛ فقط ترجمه‌ی زبان جدید به همون JSON اضافه می‌شه.

ایده‌ی اصلی پکیج هم دقیقاً همینه: چندزبانه بودن رو داخل خود فیلد مدیریت کنیم، نه با اضافه کردن ستون برای هر زبان.

🔗 مشاهده در GitHub

نظر خود را بنویسید

نظرتان را درباره این سیگنال با دیگران به اشتراک بگذارید.

وارد شوید

برای ارسال نظر ابتدا وارد سایت شوید

ورود یا ثبت نام

دیدگاه کاربران

هنوز دیدگاه یا پرسشی ایجاد نشده است :/

گزارش محتوا

حذف سیگنال

آیا از حذف این سیگنال مطمئن هستید؟
این عملیات غیرقابل بازگشت است.

اشتراک‌گذاری