لارافيل, Api / 2024-09-07

التعامل مع Api في لارافيل - الجزء السابع - أكثر من لغة في laravel api.

التعامل مع Api في لارافيل - الجزء السابع - أكثر من لغة في laravel api.

2024-09-07 وقت القراءه : 2 دقائق

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

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

 

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

إنشاء 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 مع كل رابط، وأن يحدد قيمته باللغة التي يحتاجها.


التعليقات
the coder
منذ 3 سنوات

what do you think if use a header? instead of request? i mean send \"x-localization\" :\"en\" for each request to to send as query, i think it is better than this . and from middleware we check it. then set Local, and please if i am wrong send me email

إضافة تعليق
Loading...