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

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

زمان مطالعه

5 دقیقه

تعداد بازدید

2215

تعداد پرسش ها

8

افزودن به لیست علاقه مندی ها


برچسب ها :


اشتراک گذاری این مطلب
بهزاد میرزازاده
در مورد نویسنده : همیشه سخت تلاش کردم و به موفقیت های خیلی زیادی رسیدم اما دلیل نشد که متوقف بشم من برای هر روز برنامه دارم و به امید موفقیت های بزرگتر قدم بر میدارم همیشه سخت ترین مسئله ها، ساده ترین راه حل رو دارند پس بهانه جویی نباید روش کار ما برنامه نویسان باشه!!! ما می توانیم آینده را تعیین کنیم

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

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

زمان مطالعه

5 دقیقه

تعداد بازدید

2215

تعداد پرسش ها

8

افزودن به لیست علاقه مندی ها


برچسب ها :


اشتراک گذاری این مطلب

ایجاد سایت چند زبانه با لاراول یا laravel multi language ؟ با یک آموزش دیگر از فریم ورک قدرتمند لاراول در خدمت شما دوستان عزیز هستیم. در اغلب پروژه ها نیازمند پیاده سازی چند زبان مختلف برای پروژه خود داریم مثلا کارفرما درخواست زبان های فارسی، انگلیسی، عربی، آلمانی و ... را دارد که بدون مشکل و سریعا کل زبان سایت تغییر کند خوشبختانه در لاراول یک سری امکانات خوب وجود دارد برای تغییر زبان یا انتخاب زبان پیش فرض که به ما کمک می کند با کمی خلاقیت چند زبانه بودن سایت را به راحتی پیاده سازی کنیم این کار به دو روش می تواند انجام شود 

  • استفاده از پوشه lang در مسیر resource با آرایه های php
  • استفاده از پوشه lang در مسیر resource با آرایه های json

که ما میخواهیم از استاندارد خود لاراول (روش اول) استفاده کنیم روش دوم زیاد جالب و استاندارد نیست. برای این کار چند مرحله کار باید انجام شود

تنظیم زبان فارسی در لاراول بعنوان زبان پیش فرض

در مسیر اصلی پروژه فایل config/app.php را باز کنید و خطوط زیر را تغییر دهید

'locale' => 'fa', // زبان پیش فرض فارسی 
'fallback_locale' => 'en', //زبان دوم در صورت یافت نشدن زبان اول
'timezone' => 'Asia/Tehran', // منطقه زمانی برای ایران

 

ایجاد فایل های زبان های مختلف در لاراول

سپس از پوشه en در مسیر resource/lang یکی کپی با اسم fa ایجاد می کنیم و تمام فایل های داخل این پوشه را به فارسی ترجمه می کنیم خود لاراول پوشه fa را بعنوان زبان پیش فرض در نظر می گیرد چون در فایل config این تنظیمات را انجام دادیم. به صورت اتوماتیک نوشته های validation لاراول به زبان فارسی که ما درست کردیم ارجاع داده می شود.

شما می توانید فایل های بیشتری از روی یکی از فایل های موجود در پوشه fa درست کنید با اسم های متناسب با صفحه یا قسمت مورد نظر خود، به مثال ذیل توجه کنید فایلی با اسم container.php در مسیر یاد شده ایجاد کردیم

return [
   'System' => 'سیستم',
   'President' => 'مدیریت',
   'User' => 'کاربران',
   'text' => 'مطالب',
   'Calendar' => 'تقویم کاری',
  'Survey' => 'نظرسنجی ها',
   'Test' => 'آزمون ها',
];

 

برای استفاده از این ترجمه در هر جایی (blade , controller , model) می توانید به روش ذیل اقدام کنید

مثال در blade

{{ __('container.Calendar') }} 

مثال در داخل controller 

$title=__('container.Calendar');

 

تغییر زبان به صورت داینامیک در لاراول

با این کد شما می توانید زبان پیش فرض را تغییر دهید به یک زبان دیگر ، مثلا اگر زبان فارسی بود الان با کد زیر به انگلیسی تغییر می کند

App::setLocale('en');

و با کد ذیل نیز می توانیم زبان فعلی را تشخیص دهیم

App::getLocale();

اگر بخواهیم این قسمت را به صورت اتوماتیک توسط انتخاب کاربر سایت تغییر دهیم مراحل ذیل را انجام می دهیم

  • ساخت یک کنترلر با نام دلخواه (اینجا من LangController انتخاب کردم) و دوتا تابع به اسم en برای ست کردن زبان انگلیسی و fa برای زبان فارسی ساختم
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\App;
class LangController extends Controller {
  public function en(){ // زبان انگلیسی
  App::setLocale('en');       
  return redirect()->back();
  }     
  public function fa(){  //زبان فارسی    
  App::setLocale('fa');
  return redirect()->back();
  }
}

 

  • ایجاد مسیر برای تغییر زبان Route در فایل web.php
Route::get('en','LangController@en')->name('en');    
Route::get('fa','LangController@fa')->name('fa');

 

این ساده ترین روش ممکن بود برای ساخت یک سایت چند زبانه با لاراول ولی چند نکته رو باید مد نظر قرار بدید که احتمالا هر سایتی شاید در دیتابیس در جدول مورد نظرشون امکان پست گذاری برای زبان های مختلف رو داشته باشند مثلا یک فیلد language داشته باشد که برابر با fa یا en باشد در هر کنترلری شما با کد ذیل می توانید مشخص کنید که زبان فعلی کدام است و کوئری خودتون رو براساس همین مقدار از دیتابیس واکشی کنید.

$lang=App::getLocale();
$query=Post::where('language',$lang)->get();

 

به همین راحتی می تونید یک سایت چند زبانه حرفه ای با لاراول درست کنید!!! لطفا سوالات خودتون رو در بخش پرسش و پاسخ بپرسید و این مطلب را با دیگران به اشتراک بگذارید.

بهزاد میرزازاده
در مورد نویسنده : همیشه سخت تلاش کردم و به موفقیت های خیلی زیادی رسیدم اما دلیل نشد که متوقف بشم من برای هر روز برنامه دارم و به امید موفقیت های بزرگتر قدم بر میدارم همیشه سخت ترین مسئله ها، ساده ترین راه حل رو دارند پس بهانه جویی نباید روش کار ما برنامه نویسان باشه!!! ما می توانیم آینده را تعیین کنیم


نظرات
8
کاربر بهزاد
2 ماه پیش

سلامت باشید جناب نورانی خوشحالیم که این پست کمکتون کرده

کاربر بهزاد
2 ماه پیش

بهترین راه حل اینه که جداول جدا باشه برای هر زبانی و اگر دیتایی برای زبان مورد نظر وجود داشت ذخیره بشه اگر جدا باشه خوندن اطلاعات هم راحته و برای زبان مورد نظر انتخابی فقط آخرین جدول مقصد فراخونی میشه و مشکل سنگینی کوئری نخواهید داشت اما بحث اینکه دیتای زیادی قراره ذخیره بشه یک امر طبیعی هست و مشکلی نداره اصلا دیتابیس برای ذخیره اطلاعاته دوست عزیز

کاربر دانیال نورانی
2 ماه پیش

با سلام خیلی خیلی ساده و روان توضیح دادین خیلی ممنونم استفاده کردیم :)

کاربر حسین
2 ماه پیش

فرض مثال اگر ما در سایت مون دسته بندی با عناوین فارسی و انگلیسی داریم یعنی هر رکورد ما دارای یک فیلد عنوان فارسی دسته بندی و یک فیلد با عنوان انگلیسی دسته بندی هست. در این حالت چطور باید هر عنوان مربوط به زبان خودشو هم بخونیم و هم نمایشش بدیم.برای این حالت باید چیکار کرد؟ fa_title en_title به چه صورتی باید برای هرزبان کوئری دیتابیسو بزنیم و چطوری برای هر زبان در بلید مقدر مربوطه رو نشون بدیم؟

کاربر حسین
2 ماه پیش

سلام مرسی از شما. خواستم بپرسم اگر ما مثلا برای پست هامون امکان ثبت پست به چندین زبانو در سایتمون ایجاد کنیم آیا اینطوری دیتا بیس ما به شدت سنگین نمیشه ؟ آیا را حل بهتری وجود نداره که ما برای هر پست به تعداد زبان سایت پست نزاریم؟

کاربر behzadamin
1 سال پیش

سلام خدمت شما دوست عزیز

بله شما می تونید هر چنتا زبان خواستید اضافه کنید با همین روشی که توضیح دادیم

کاربر synfatyma
1 سال پیش

اگر چند زبانه بخوایم بکنیم چی؟

میشه با این روش؟

من تازه کارم برا همین می پرسم

 

کاربر synfatyma
1 سال پیش

ممنون از شما