Amir Alsaeed نشر 26 فبراير 2021 أرسل تقرير مشاركة نشر 26 فبراير 2021 ثمت بإنشاء middleware التالي للتحكم بلغات الموقع: public function handle($request, Closure $next) { if(Session::has('locale')) { $locale = Session::get('locale',Config::set('app.locale')); } else { $locale = "ar"; } App::setLocale($locale); return $next($request); } والمتحكم الذي يقوم بتغيير اللغة: public function changeLang(Request $request,$lang) { if (!empty($request)) { Session::put('locale',$lang); } else { Session::set('locale',$lang); } return back(); } والمسار لذلك: Route::get('/{lang}','LanguageController@changeLang'); ولكن عند توجيه المسارات إلى لغة معيّنة لا يتم تغيير الغة. وأيضاً ماهي الطريقة لتغيير إلى أكثر من لغة من جهة المستخدم؟ اقتباس رابط هذا التعليق شارك على الشبكات الإجتماعية More sharing options...
1 Sam Ahw نشر 26 فبراير 2021 أرسل تقرير مشاركة نشر 26 فبراير 2021 يجب أولاً أن تقوم بتغيير الكود الموجود في المتحكم لاستخدام لغة افتراضية في حال الفشل، كالتالي: public function handle($request, Closure $next) { if (Session::has('locale')) { App::setLocale(Session::get('locale')); } else { //تقوم لارافيل تلقائياً باستعادة اللغة الافتراضية الموجودة App::setLocale(Config::get('app.fallback_locale')); } return $next($request); } ثم تأكد من إضافة middleware في Kernal.php: \App\Http\Middleware\Language::class, وأخيراً ضمن المتحكم الخاص باللغة: public function index($locale) { session(['locale' => $locale]); App::setLocale($locale); return Redirect::back(); } وأيضاً يتم تعريف اللغة الافتراضية للتطبيق ضمن ملف .env : APP_LOCALE=en ويتم الدلالة عليها في ملف config/app.php كالتالي: 'locale' => env('APP_LOCALE', 'en'), أما للتغيير إلى أكثر من لغة فيمكن إنشاء قائمة باللغات بحيث عندما يتم الضغط على خيار لغة معيّنة يتم التوجيه إلى مسارات هذه اللغة: <ul class="dropdown-menu" role="menu"> <li>{!! link_to('lang/en', trans('menus.language-picker.langs.en')) !!}</li> <li>{!! link_to('lang/es', trans('menus.language-picker.langs.es')) !!}</li> <li>{!! link_to('lang/fr-FR', trans('menus.language-picker.langs.fr-FR')) !!}</li> <li>{!! link_to('lang/it', trans('menus.language-picker.langs.it')) !!}</li> <li>{!! link_to('lang/pt-BR', trans('menus.language-picker.langs.pt-BR')) !!}</li> <li>{!! link_to('lang/ru', trans('menus.language-picker.langs.ru')) !!}</li> <li>{!! link_to('lang/sv', trans('menus.language-picker.langs.sv')) !!}</li> </ul> ويكون المسار لذلك كالتالي: get('lang/{lang}', 'LanguageController@changeLang'); 1 اقتباس رابط هذا التعليق شارك على الشبكات الإجتماعية More sharing options...
0 بلال زيادة نشر 27 فبراير 2021 أرسل تقرير مشاركة نشر 27 فبراير 2021 تأكد من إضافة middleware إلى ملف Kernel.php في المسار التالي app\Http في مصفوفة middlewareGroups كالتالي: protected $middlewareGroups = [ 'web' => [ \App\Http\Middleware\EncryptCookies::class, \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, \Illuminate\Session\Middleware\StartSession::class, // \Illuminate\Session\Middleware\AuthenticateSession::class, \Illuminate\View\Middleware\ShareErrorsFromSession::class, \App\Http\Middleware\VerifyCsrfToken::class, \Illuminate\Routing\Middleware\SubstituteBindings::class, \App\Http\Middleware\Language::class, ], 'api' => [ 'throttle:60,1', \Illuminate\Routing\Middleware\SubstituteBindings::class, ], ]; لقد قمنا بإضافة التالي إلى المصفوفة \App\Http\Middleware\Language::class, ويمكنك استدعاء كل لغة مثل <a href="{{ route('changeLang') }}?lang=en" style="cursor: pointer; cursor: hand;">En</a> <a href="{{ route('changeLang') }}?lang=ar" style="cursor: pointer; cursor: hand;">AR</a> اقتباس رابط هذا التعليق شارك على الشبكات الإجتماعية More sharing options...
0 سمير عبود نشر 27 فبراير 2021 أرسل تقرير مشاركة نشر 27 فبراير 2021 يُمكن أيضاً إستخدام حزمة Laravel Localization التي تُوفر العديد من الميزات فيما يخص موضوع localization تثبيت الحزمة: composer require mcamara/laravel-localization إستدعاء ملف إعدادات الحزمة ضمن ملفات المشروع: php artisan vendor:publish --provider="Mcamara\LaravelLocalization\LaravelLocalizationServiceProvider" سيتم إنشاء ملف config/laravellocalization.php الذي من خلاله يُمكنك تحديد اللغات التي سيدعمها المشروع بالإضافة إلى بعض الإعدادات الأخرى. إضافة ال middlewares الخاصة بالحزمة ضمن ملف app/Http/Kernel.php: <?php namespace App\Http; use Illuminate\Foundation\Http\Kernel as HttpKernel; class Kernel extends HttpKernel { /** * The application's route middleware. * * @var array */ protected $routeMiddleware = [ /**** OTHER MIDDLEWARE ****/ 'localize' => \Mcamara\LaravelLocalization\Middleware\LaravelLocalizationRoutes::class, 'localizationRedirect' => \Mcamara\LaravelLocalization\Middleware\LaravelLocalizationRedirectFilter::class, 'localeSessionRedirect' => \Mcamara\LaravelLocalization\Middleware\LocaleSessionRedirect::class, 'localeCookieRedirect' => \Mcamara\LaravelLocalization\Middleware\LocaleCookieRedirect::class, 'localeViewPath' => \Mcamara\LaravelLocalization\Middleware\LaravelLocalizationViewPath::class ]; } بعد ذلك يُمكنك إستخدام الحزمة: في المسارات: // routes/web.php Route::group(['prefix' => LaravelLocalization::setLocale()], function() { /** المسارات التي تعتمد على عدة لغات **/ }); /** المسارات الأخرى **/ أما في العرض: <ul> @foreach(LaravelLocalization::getSupportedLocales() as $localeCode => $properties) <li> <a rel="alternate" hreflang="{{ $localeCode }}" href="{{ LaravelLocalization::getLocalizedURL($localeCode, null, [], true) }}"> {{ $properties['native'] }} </a> </li> @endforeach </ul> لمعلومات أكثر يُمكنك تصفح توثيق الحزمة. اقتباس رابط هذا التعليق شارك على الشبكات الإجتماعية More sharing options...
السؤال
Amir Alsaeed
ثمت بإنشاء middleware التالي للتحكم بلغات الموقع:
public function handle($request, Closure $next) { if(Session::has('locale')) { $locale = Session::get('locale',Config::set('app.locale')); } else { $locale = "ar"; } App::setLocale($locale); return $next($request); }
والمتحكم الذي يقوم بتغيير اللغة:
public function changeLang(Request $request,$lang) { if (!empty($request)) { Session::put('locale',$lang); } else { Session::set('locale',$lang); } return back(); }
والمسار لذلك:
Route::get('/{lang}','LanguageController@changeLang');
ولكن عند توجيه المسارات إلى لغة معيّنة لا يتم تغيير الغة. وأيضاً ماهي الطريقة لتغيير إلى أكثر من لغة من جهة المستخدم؟
رابط هذا التعليق
شارك على الشبكات الإجتماعية
3 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.