معظم التطبيقات والمواقع تحتوي هذه الأيام على أكثر من لغة للتطبيق أو الموقع، على سبيل المثال في تطبيقات الهواتف التي تحتوي على أكثر من لغة يحتاج المستخدم للحصول على بيانات حسب اللغة التي قام باختيارها.

هنا لن أتكلم عن كيفية إعدادات لارافيل كي يكون بأكثر من لغة، بل سيتم الحديث فقط عن كيفية إعداد لارافيل كي تتعامل مع اللغة المرسلة من التطبيق أو الموقع.

خطوات إعداد لارافيل للتعامل مع أكثر من لغة؟

إنشاء middleware 

إنشاء middlware باسم CheckLang مثلا

php artisan make:middleware CheckLangMiddleware 
class CheckLangMiddleware
{
    public function handle($request, Closure $next){
        return $next($request);
    }
}

إعداد منطق العمل

class CheckLangMiddleware
{
    public function handle($request, Closure $next){
        app()->setLocale('ar');
        if(isset($request->lang) && $request->lang == 'en'){
            app()->setLocale('en');
        }
        return $next($request);
    }
}

بمعنا أنه يجب إرسال باراميتر جديد مع الروابط باسم lang ويجب تحديد قيمته حسب اللغة، ولو لم يتم إرسال اللغة في الرابط  أو كانت قيمته ar فإن اللغة بالوضع الإفتراضي ستكون اللغة العربية حيث قمنا بتعريف ذلك من خلال app()->setLocale(‘ar’) أما إذا تم إرسالها وكانت $request->lang==’en’ فإن يجب جلب البيانات باللغة الإنجليزية.

تسجيل middlware 

في ملف app/http/kernel.php بداخل المصفوفة routeMiddleware

'checkLang' => \App\Http\Middleware\CheckLangMiddleware::class,

 

تطبيق middleware على route

Route::group(['middleware'=>['checkLang']],function() {
    Route::apiResource('brands', BrandController::class);
});

 

أعدادات Controller

جلب البيانات حسب اللغة

بداخل الكونترولر في الدوال يمكن إستخدام app()->getLocale لجلب البيانات حسب اللغة التي تم تعيينها في middleware أعلاه، وذلك حسب البارميتر lang في الرابط المرسل.

public function index(){
    return ShowBrandResource::collection(Brand::select(
        'id',
        'name_' . app()->getLocale() . ' as name',
    )->get());
}

روابط frond end أو التطبيقات

لو كان الرابط المرسل 

http://www.test.test/api/v1/brands
http://www.test.test/api/v1/brands?lang=ar

فإنه سوف يتم عرض البيانات باللغة العربيه 

أما إذا كان 

http://www.test.test/api/v1/brands?lang=en

فإنه سيتم عرض اللغة الإنجليزية.

 حيث إنه يجب إخبار مبرمج front-end أو تطبيق الهواتف بإرسال المتغير lang مع كل رابط، وأن يحدد قيمته باللغة التي يحتاجها.