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

قراره در مورد چندزبانه کردن یک وبسایت و api پروژه ی تحت لاراول صحبت کنیم . شامل ترجمه ی جمله های خود وبسایت ما هست . مثلا پیغام ( تغییرات ذخیره شد ) یا ( Changes saved ) و همچنین دیتابیس چند زبانه برای آمادگی دریافت محتوای چند زبانه از کاربر . مثلا توی فروشگاه اینترنتی مدیر بتونه محصول رو به 3-4 زبان وارد سیستم کنه ( و بعدا حتی یه زبان دیگه هم بهش اضافه کنه )

  • چند زبانه یعنی حتی بیشتر از فارسی و انگلیسی ...
  • بصورت داینامیک وسط پروژه بتونیم یک زبان به برنامه اضافه کنیم
  • چیزی مثل تیبل دیکشنری داخل دیتابیس نمیسازیم و کارای عجیب و پیچیده و سنگین نمیکنیم
  • ستون های مختلف هم قرار نیست بسازیم برای نگه داشتن معانی کلمات در زبان های مختلف

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

اول از همه لازمه که Route هاتون رو آماده ی پذیرش Language بکنین . که کاربر یجوری بتونه به شما بفهمونه که میخواد با چه زبانی با شما صحبت کنه . آموزش رو برحسب ایجاد api جلو میبریم 90 درصد موارد web رو هم شامل میشه . خب اول از همه توی api.php یه گروه بسازید و اجازه بدید زبان رو بصورت پارامتر برای شما ارسال کنن . مثلا در این کد {lang?} رو ببینید

Route::prefix('{lang?}')->group(function () {
    Route::get('awake', 'ApiController@awake');
});

از اون طرف توی construct فایل App\Http\Controllers که کنترلر هاتون ازش ارث بری میکنن کد زیر رو بنویسید تا پارامتری که کاربر توی Route برای شما ارسال کرده به عنوان زبان اصلی برنامه انتخاب بشه ( بجز این ، راه های دیگه ای هم تا اینجای کار توی اینترنت هست اگر سرچ کنید )

public function __construct(Request $request)
{
    \App::setLocale($request->route('lang'));
}

حالا مثلا اگر بخوایم به کاربر یه سری جمله نشون بدیم میدونیم با چه زبانی باید باهاش صجبت کنیم .

کلمات ، جمله ها و هشدار های آماده و از قبل تعریف شده . توی فولدر resource/lang پوشه های مختلف هست به اسم خلاصه ی زبان ها . مثلا fa , en , ... فولدر fa رو باز کنید و فایل messages.php رو بسازید یا باز کنید . یه سری جمله و هشدار مثل من آماده کنید

https://gist.github.com/faridfr/4d7169923788652cf0c43a9e804bd9ab


حالا این وسط به time_activationcode هم نگاه کنید و ببینید که میشه برای ترجمه ها مقدار هم فرستاد و حرفه ای ترشون کرد . اگر لبخند رو لبتونه روی این لینک کلیک کنید تا بیشتر در موردش بدونید .

خب حالا واسه اینکه تا اینجای کار رو تست کنیم مثلا بریم توی همون ApiController که بالاتر توی Route صداش زدیم . متد awake رو اینطور بنویسید :

public function awake()
{
    return __('messages.im_awake');
}

حالا یبار سایتتون رو با پیشوند fa و یبار هم با پیشوند en بیارید بالا .

مثلا یبار XXX.com/api/fa/awake یبار هم XXX.com/api/en/awake

برای اینکه بتونید داخل فایل message.php توی فولدر en ترجمه های انگلیسی هم بزارید گذاشتمشون اینجا :

https://gist.github.com/faridfr/2592316faca3a16da4f4ac3ab10dfa7d




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

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

ادامه ی این مطلب رو اینجا بخونید :

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-2-rskeduu0z6c9