برای پیادهسازی قابلیت چندزبانه توی 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 اضافه میشه.
ایدهی اصلی پکیج هم دقیقاً همینه: چندزبانه بودن رو داخل خود فیلد مدیریت کنیم، نه با اضافه کردن ستون برای هر زبان.
نظر خود را بنویسید
نظرتان را درباره این سیگنال با دیگران به اشتراک بگذارید.
دیدگاه کاربران
هنوز دیدگاه یا پرسشی ایجاد نشده است :/
گزارش محتوا
حذف سیگنال
آیا از حذف این سیگنال مطمئن هستید؟
این عملیات غیرقابل بازگشت است.