فرید فروزان
فرید فروزان
خواندن ۳ دقیقه·۶ سال پیش

وبسایت ، API و دیتابیس چند زبانه در لاراول (2)

لطفا اول قسمت قبل رو بخونید :

https://virgool.io/@faridfroozan/%D9%88%D8%A8%D8%B3%D8%A7%DB%8C%D8%AA-api-%D9%88-%D8%AF%DB%8C%D8%AA%D8%A7%D8%A8%DB%8C%D8%B3-%DA%86%D9%86%D8%AF-%D8%B2%D8%A8%D8%A7%D9%86%D9%87-%D8%AF%D8%B1-%D9%84%D8%A7%D8%B1%D8%A7%D9%88%D9%84-1-kfbbpjuihkmr
هدف ما اینه که بتونیم سایتی داشته باشیم که هم متن هایی که ما از سمت سرور میفرستیم چند زبانه باشه ( با کمک laravel localization ) و هم محتوایی که کاربر میفرسته به چند زبان مختلف باشه . مثلا موقعی که اسم محصول رو میخواد تعریف کنه بتونه فارسی و انگلیسی و آلمانی و ... رو هم وارد کنه .

خب شاید راه اولی که به ذهنتون برسه این باشه که یک تیبل دیکشنری داشته باشیم که به ازاء هر زبانی که میخوایم توی برنامه داشته باشیم کلمه های مختلف رو وارد کنیم . اما خب اگر سیستمتون بزرگ باشه و بخاطر هر اسم محصول ، شهر ، کشور ، توضیحات محصولات و ... بخواین به این table رجوع کنین باید فاتحه سرور رو خوند .

راه حل بعدی که ممکنه به ذهن برسه اضافه کردن column به تیبل هامون هست . مثلا name_persian و name_english و ... اما خب توی چند تا تیبل این کارو کنیم ؟ اگر بعدا یه زبان به برنامه اضافه شد چی ؟ ما شاید برناممون 70-80 ( چه بسا بیشتر ) جدول داشته باشه و 90 درصدشون نیاز به این چند زبانی داشته باشن . بعد اصن اومدیم و این کارو کردیم . موقع خوندن از دیتابیس وقتی میخواین داده هارو بگیرین چجوری get میکنین و اینکه بدونین کدوم ستون رو الان باید بخونین شاید یکمی سخت باشه ... .

آقا این همه حرف زدیم که این پکیج رو از جامعه ی با عشق و دوست داشتنی spatie معرفی کنیم .

https://github.com/spatie/laravel-translatable



آموزش چند زبانه کردن در لاراول - بخش دوم - ذخیره :

راه حل spatie به این صورته که توی همون ستون مثلا اسم محصول یا آدرس یا ... یه json ذخیره میکنید از معنی های اون کلمه در زبان های مختلف . مثلا این میتونه اسم خیابون ها باشه توی جدول آدرس ها :

به ستون name توجه کنید .
به ستون name توجه کنید .

وقتی که ستون name رو get میزنین خودش بر اساس locale برنامه که توی قسمت قبل اونو set کردیم همون ترجمه ای رو میده که لازم دارید . کلی هم متد خفن داره برای وقتایی که همه ی ترجمه های موجود رو میخواین یا ... . وقتی هم مثلا زبان برنامه روی آلمانی ست شده باشه و ترجمه ی آلمانی موجود نباشه ، خالی برنمیگردونه .. خودش زبان دیفالتی که توی config گفتین ( مثلا فارسی ) رو بر میگردونه و اینا همش قابل تنظیمه . حقش نیست حداقل یه star به این پکیج بدید ؟ خداوکیلی !

حالا چیکار کنیم ؟ پکیج رو نصب کنید و لذت ببرید :)

پیشنهاد من : یه تیبل درست کنید برای زبان هایی که برنامتون داره . توی محیط مدیریتتون هم یکار کنین بتونین زبان ها رو اضافه و کم کنید . بعد توی view وقتی که میخواین input هارو بسازید توی حلقه به ازاء هر زبانی که توی برنامتون هست یه input بزارید مثلا ( اسم محصول به فارسی ) ( اسم محصول به آلمانی )

حالا کافیه این مقادیر رو بصورت آرایه برای back-end بفرستید . توی back-end هم برای validation باید بگیم حتما ارایه طور باشه و اگر خواستین میتونین داخل هر آیتمشو هم validate کنین . موقع create کردن هم خیلی راحت همون دیتای valid شدتون رو بفرستید و اونم گیر نمیده اگر مطابق داکیومنت جلو رفته باشید .

مثلا اینو ببینید :

\App\Setting::create([ 'key' => 'address' , 'value' => [ 'fa' => 'پارک علم و فناوری ، مرکز رشد', 'en' => 'Science and technology park' ] ]);
خب . بازم در این زمینه کمکی اگر از دستم بربیاد انجام میدم . منتظر نظراتتون هستم .
برنامه نویسیچند زبانهلاراول
جامعه توسعه دهندگان لاراول در ایران، ما در اینجا سعی میکنیم توسعه دهندگان لاراول رو در کنار هم جمع کنیم و دانش مان را در اختیار هم دیگر قرار دهیم، تا بتوانیم دنیای بهتری رو بسازیم
شاید از این پست‌ها خوشتان بیاید