یه برنامه نویس معمولی لینوکس کار
ایجاد یک سایت دو زبانه در لاراول

خوب موضوع خیلی گنگ و نا آشنا نیست . برای همین سریع میریم سر اصل مطلب .
لاراول کنار همه خوبیاش ، دو زبانه کردن و ایجاد Locale رو هم به ما داده . کارمون رو راحت میکنه .
من هرچی که اینجا میگم داخل داکیومنت لاراول 5.7 هست و چیزی فراتر از اون نیست . فقط مراحل رو کنار هم چیدیم .
ما برای اینکه یک سایت دو زبانه داشته باشیم نیاز به چند مورد داریم :
1- به چه شکل دو زبان ترجمه بسازم؟
2- استایل برای زبان های rtl تغییر کنه
3- متن ها برای هر زبان تغییر کنه
این سه مورد رو با هم میریم جلو .
1- به چه شکل فایل ترجمه بسازیم ؟
من اول میخوام بگم چجوری می دوتا فایل ترجمه داشته باشیم؟
این کاری که انجام میدیم static هست و از دیتابیس نمیخونه . برای اون دسته از داده هایی که به صورت static تعریف میشن کاربرد داره . مرحله آخر متن هامون رو هم میتونیم dynamic کنیم .
خوب برای اینکه بتونیم فایل ترجمه بسازیم که راحت قابل ویرایش باشه باید کلید های یکسان داشته باشیم و اون کلید رو داخل blade صدا کنیم و زمانی که زبان تغییر کنه ، لاراول خودش میره و زبان مورد نظر رو دریافت میکنه .
برای این کار داخل resources به پوشه lang برید . دوتا فایل ایجاد کنید . یکی به اسم fa.json و یکی en.json . من ساختار جی سون رو ترجیح میدم به ساختار آرایه درphp . ویرایشش راحتتره برای کسی که بعدا میخواد کار ترجمه انجام بده .
حالا داخل fa.json میام به این شکل مینویسم . :
{
"contact_us":"تماس با ما",
"helloworld":"سلام دنیا"
}و داخل e.json هم میام به شکل زیر مینویسم :
{
"contact_us":"contact us",
"helloworld":"Hello world , hello every body"
}خوب من دوتا فایل دارم که کلید ها عین هم، اما سمت چپ، مقادیر با هم فرق دارن و مرتبط با زبان خودشونن .
حالا میرم به فایل blade پروژه . فرض کنیم فایل welcome.blade.php یا هر فایل دیگه که میخوام اونجا نمایش بدم .
@extends('layouts.app')
@section('content')
<div id="ContactUs">
{{__('contact_us')}}
</div>
<div id="hello">
{{__('helloworld')}}
</div>
@endsection خوب دیدید که داخل blade به چه شکلی مقادیر اومد . با قرار دادن {{__('key')}}. به جای key ، کلید اون ترجمه رو داخل فایلش رو میزارم . مثلا contact_us با helloworld .
حالا داخل کنترلر میرم و بهش میگم که از کدوم فایل استفاده کنه .
public function index(){
App::setLocale('fa');
return view('welcome');
}خوب ما اینجا گفتیم که روی fa بزار زبان سایت رو . میتونه داینامیک باشه .
2- تغییر css در زبان های rtl :
خوب معلومه که یک سایت انگلیسی باید چپ چین و یک سایت فارسی باید راست چین باشه .
برای این کار ما میدونیم که اگر fa باشه ، باید rtl باشه و در غیر این صورت ltr. خوب این کار رو میکنیم :
$locale = App::getLocale();if ($locale=='fa')) { //so we have to write rtl css link }3-متن ها برای هر زبان تغییر کنه :
برای این کار باید داخل جدول پست دوتا ستون بزاریم و فارسی و انگلیسی رو معرفی کنیم .
این کار برای دوتا زبانه معلومه . برای زبان های بی نهایت و نا معلوم بهتره که یک جدول language_post ایجاد کنید و داخل اون بگید که هر پست به زبان خودش چی میشه مقدارش .
خوب حالا باید migration بسازیم :
php artisan make:migration CreatePostTable<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreatePostTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('posts', function (Blueprint $table) {
$table->increments('id');
$table->string('title_en');
$table->string('title_fa');
$table->string('message_en');
$table->string('message_fa');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('posts');
}
}php artisan migrateحالا موقع ذخیره سازی میگیم که داخل کدوم ستون ها باید ذخیره سازی انجام بشه . این خیلی مهم نیست .
اصل داستان موقع دریافت از دیتابیسه.
برای دریافت از دیتابیس، یک راه ساده هست که میگم .
اما راه های بهتری هم هستن . من میخوام فقط موضوع باز بشه . راه بهتر با خودتون :
public function index(){
$locale = App::getLocale();
$titleColumn=$locale=='fa'?'title_fa':'title_en';
$messageColumn=$locale=='fa'?'message_fa':'message_en';
$selectPost=$this->posts->select(['id',$titleColumn,'$messageCloumn])->get();
return view('welcome',['posts'=>$selectPost]);
}این ساده ترین راهه . اما بهترین نیست .
مطلبی دیگر از این انتشارات
ایجاد اکسترافیلد در لاراول
مطلبی دیگر از این انتشارات
سومین دورهمی بزرگ لاراول (مجازی)
مطلبی دیگر از این انتشارات
ساخت پنل ادمین با لاراول به سریع ترین روش ممکن