یکسری زبانه بودن برنامههای اینترنت
یکسری زبانه بودن برنامههای اینترنت
یکسری زبانه بودن تارنما یعنی پیادهسازی امکانی که استفاده کننده بتواند سایت فروشگاهی بر پایه ی لهجه کشوری که در آن معاش مینماید یا این که لهجه مادری خویش از سرویس ها اینترنت نرم افزار یا این که سایت ما به کارگیری نماید و این آیتم اهمیت بسیار بالایی دارااست.
وبسایتهای تعدادیزبانه در دنیای امروز یوزرها و مشتریان بیشتری از تارنماهای تکزبانه خواهند داشت و پیاده سازی این خصوصیت قادر است یک امکان مهم برای تارنما به شمار آید و بخش اعظمی از افرادی که به شما پیشنهاد ساخت اینترنت نرم افزار و وبسایت می دهند از شما میخواهند این گزینه را پیاده سازی نمائید.
تکنیکهای متعددی برای پیاده سازی امکان یک سری زبانه موجود است که هرمورد مزایا و معایب یگانه خویش را داراهستند و ما دراین فراگیری همت می کنیم یکیاز شایسته ترین شیوههای مو جود را برای قاب ورک Laravel و اینترنت نرم افزار هایی که با آن ساخته میشود پیاده سازی کنیم.
یک کدام از تجهیزات جذاب و سهل و آسان در کادر ورک لاراول استعمال از سرویس ها ترجمه برای پیاده سازی تارنماهای چندین زبانه است. این بخش به شما تحت عنوان بسط دهنده این قابلیت را میدهد که به تعداد دلخواه، هر زبانی را که می خواهید به سایت خویش بیشتر فرمائید.
قابلیت و امکان به کار گیری ترجمهها در API گوشی
یک کدام از قابلیت و امکانهای خوب لاراول قابلیت ادغام این بخش یکسری زبانه با بخشهای دیگر تارنما برای ارائه به طور API گوشی میباشد که به راحتی قابل به کار گیری میباشد.
طراحی وب سایت چندین زبانه با کادر ورک لاراول
به عبارتیطور که گفتیم، برای پیادهسازی یک وب سایت چندزبانه شیوه های مختلفی موجود است که با دقت به دسته وب سایت می توانیم یک رویکرد را تعیین کنیم. ولی راهی که دراین فراگیری به آن می پردازیم یک رویه معمولی، کاربردی و در عین درحال حاضر انعطافپذیر میباشد که بهطور معمول برای تمام وبسایتها قابل انجام و تماما مطلوب میباشد.
نخست در فولدر برنامه لاراول و نصیب config یک فولدر PHP با اسم translation یا این که نامی دلخواه تولید میکنیم. یک نکتهی مهم در امر پوشههایی که در فولدر config میسازیم این میباشد که تمام این پوشهها بایستی یک آرایه را مانند ذیل برگرداند.
درحال حاضر می خواهیم یک آرایه که گویشهای وبسایت مارا معین مینماید بهصورت تحت برگردانیم.
[
\"fa\"=>\"Persian\",
\"ar\"=>\"Arabic\",
\"en\"=>\"English\"
]
];
درصورتیکه به url وبسایتهای یکسریزبانه دقت کرده باشید، بهطور نمونه، وقتی که بخواهید مطالب یک سایتی که امکان Multi-Language داراست، به لهجه انگلیسی اکران داده شود، کافیست در صدر یا این که پایان url وبسایت keyword یا این که واژه و کلمه کلیدی en را قرار دهید.
ما در کد بالا en را برابر با English یا این که به عبارتی لهجه انگلیسی قرار دادیم. اما دقت فرمائید که هنوز بر روی این لهجهها هیچ دستوری پیاده سازی نشده میباشد و پیروی فراگیری ساخت وب سایت تعدادی زبانه با قاب ورک لاراول ، بدین عمل خواهیم پرداخت.
اکنون فرض فرمایید که یک Blade برای تولید یک Post در کاغذی وبسایتمان داریم و به صورت نمونه این Blade که نامش create.blade.php میباشد در داخل Contorller ما PostsController را مانند تحت برگردانده یا این که return میگردد.
درحال حاضر فرض فرمایید که می خواهید همین Controller که به return، create.blade.php می شود، کاغذی متبوع ما یعنی به عبارتی create.blade را Multilanguage یا این که چندزبانه نماید. برای اینفعالیت مانند امر پایین کار می کنیم.
امر بالا از فولدری config و فولدر translation آرایهی languages را گرفته و در متغیر languages$ قرار دادیم. آنگاه آن را بوسیله تابع compact به create.blade ارسال کردیم. هم اکنون در create.blade میتوانیم آن را فراخوانی کنیم.
ما در کد ذیل قسمتی از create.blade، که مرتبط با tabها میباشد را بهطور نمونه آوردهایم و شما کافی میباشد با پیادهسازی قابلیت و امکان Multilanguage آشنا گردید تا بتوانید این امکان را در کدهای خویش آنسیرتکامل که می خواهید پیادهسازی نمایید.
Persian
Arabic
English
در کد بالا می بایست languages$ را فراخوانی کنیم و تغییرات تحت را بر روی Blade اعمال کنیم. اعتنا فرمائید که languages$ یک آرایه میباشد و همینطور ما گویش فارسی را بهچهره پیشفرض برای تارنمامان active گذاشتیم.
@foreach($languages as $lang_code => $lang_title)
first) active @endif\">{{ $lang_title }}
@endforeach
با به کار گیری از امر بالا کدمان را از موقعیت دستی وارد کردن در میاوریم و با به کارگیری از رینگ foreach آن را هوشمند و Dynamic می کنیم. همچنین برای اینکه بگوییم اولین loop از foreach که به عبارتی لهجه فارسی میباشد بهرخ active دربیاید از فرمان if@ مانند بالا استعمال میکنیم.
ما از منطق کد بالا میتوانیم در تمام برنامهها به کار گیری کنیم، یعنی مانند دستوراتی که در ابتدا نوشتهایم، در هر کجا از کدمان که بخواهیم از موقعیت Multi-Language استعمال کنیم، میتوانیم با به کار گیری از رینگ foreach@ آن را Dynamic کنیم.
هم اکنون فرض فرمائید که می خواهیم در ورقهی تارنمامان یک Post تولید کنیم، پس به عبارتیطور که گفتیم و مانند مکانیسم قبل برای پیاده سازی وبسایت Multilanguage از کد پایین به کارگیری می کنیم.
{{ csrf_field() }}
@foreach($languages as $lang_code => $lang_title)
first) show active @endif\" id=\"{{ strtolower($lang_title) }}\" role=\"tabpanel\">
Post Title
Post Content
@endforeach
Save Post
تا بهحالا ما Tab و Content تشکیل پست وبسایت را صرفا از حیث کد Dynamic کردیم و درپیی یادگرفتن طراحی وب سایت یکسری زبانه با قاب ورک لاراول ، می بایست از نگاه منطقی و نوشتاری آن را Dynamic کنیم.
اکنون فرض فرمایید که یک Route برای PostsController و تابع Store مانند پایین داریم.
به عبارتیطور که گفتیم یک Route برای PostsController و تابع Store ساختیم و اکنون بایستی این تابع را در PostsController ساخت کنیم. بعداز ساخت تابع Store، دستورها پایین را در آن وارد می کنیم.
all();
$languages=config(\"translation.languages\");
$translation= [];
foreach($languages as $lang_code => $lang_title){
if ($this->checkTranslation($lang_code,$params))
{
$translation[]=[
\"title\" => $params[\"post_title_\".$lang_code],
\"content\" => $params[\"post_content_\".$lang_code]
];
}
}
}
private function checkTranslation($lang_code,$params){
return isset($params[\"post_title_\".$lang_code]) && !empty($params[\"post_title_\".$lang_code]) &&
isset($params[\"post_content_\".$lang_code]) && !empty($params[\"post_content_\".$lang_code]);
}
}
ما در بالا تمام درخواستهای ارسال گردیده را در درون متغیر params$ ذخیره میکنیم. بعد از آن مانند تابع create تمام languageهای مو جود در فولدر translation در فولدر config را می گیریم و در languages$ ذخیره میکنیم. هم اکنون یک آرایهی خالی یا این که تهی به اسم translation$ تولید میکنیم تا در رینگی foreach از آن به کار گیری کنیم.
در رینگی foreach تمام languagesها را گرفته و به وسیله تابع checkTranslation که در Class تمجید کردیم و برای نظارت کردن Set شدن و خالی نبودن Fieldهای content و title بود، باز بینی میکنیم. دراینحالت در صورتی بازبینی ما صحیح بود در آرایه translation$، داده های title و content را قرار می دهیم. اکنون برای ذخیرهسازی آنان می بایست یک Model تولید کنیم، پس به تولید یک Model و پیادهسازی آن می پردازیم.
$ php artisan make:model Post -m
$ php artisan make:model Translation -m
بوسیله امر بالا دو model با اسمهای Post و Translation و migration مربوط به آنها، تولید میکنیم.
درحال حاضر در Post, migration یک جدول میسازیم. برای اینفعالیت به Post, migration میرویم و دستورها پایین را وارد می کنیم.
increments(\"id\");
$table->integer(\"user_id\");
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists(\"posts\");
}
}
آن گاه برای Translate کردن به migration و Translate می رویم و در آن امرها پایین را وارد میکنیم.
increments(\"id\");
$table->integer(\"post_id\");
$table->string(\"lang\",10);
$table->string(\"title\",100);
$table->text(\"content\");
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists(\"translations\");
}
}
هم اکنون که کدنویسی migrationها به پایان رسید آن ها را به وسیله فرمان تحت اجرا می کنیم.
$ php artisan migrate
حال Model هایی که ساختیم را Setup میکنیم.
برای Post:
به عبارتیطور که احتمالا میدانید، Post و Translation با هم رابطه دارا هستند. برای اینعمل می بایست از Post به Translation و بالعکس یک ارتباط تولید کنیم.
برای ساخت رابطه از Post به Translation:
hasMany(Translation::class,\"post_id\");
}
}
برای ساخت رابطه از Translation به Post:
belongsTo(Post::class,\"post_id\");
}
}
هم اکنون به PostsController برمیگردیم و برای ذخیرهسازی دادهها، نخست آنها را در Database بوسیله Model تولید می کنیم.
all();
$newpost = Post::create([
\"user_id\" => 1
]);
if ($newpost) {
$languages=config(\"translation.languages\");
$translation= [];
foreach ($languages as $lang_code => $lang_title) {
if ($this->checkTranslation($lang_code, $params)) {
$translation[] = [
\"lang\" => $lang_code,
\"title\" => $params[\"post_title_\" . $lang_code],
\"content\" => $params[\"post_content_\" . $lang_code]
];
}
}
$newpost->translations()->createMany($translation);
return back();
}
}
private function checkTranslation($lang_code,$params){
return isset($params[\"post_title_\".$lang_code]) && !empty($params[\"post_title_\".$lang_code]) &&
isset($params[\"post_content_\".$lang_code]) && !empty($params[\"post_content_\".$lang_code]);
}
}
ما در دستورها بالا از روش relation در بین Post و Translation، پس از تولید یک Translation ,Post مرتبط با آن را در Database و جدول Translation ساخت میکنیم.
اکنون بهطور نمونه برای Post، یک توشه به لهجه عربی، یک توشه فارسی و توشه دیگر متنی انگلیسی وارد می کنیم، بعد Post کرده تا بوسیله تابع Store در PostsController در Database ذخیره شود.