مشکل در چند زبانه بودن سایت و روتهایی که زبان رو تو سگمنت اول ندارن

- 11 ماه پیش
توسط علی رحمانی آپدیت شد
علی رحمانی ( 46 تجربه )
11 ماه پیش

وقتی که چند زبانه میکنیم سایت رو میتونیم به صورت
http://127.0.0.1:8000/en/showContent/aboutUs
استفاده کنیم و سایت رو باز کنیم. ولی وقتی که این fa و یا en تو ابتدا نیست به مشکل میخوریم و خطای صفحه وجود ندارد رو میده. این روچطوری حلش کنیم؟ من هر کاری کردم نتونستم این رو اگه نیست به سگمنت اضافه کنم یا این خط ها کار نمیکنن

Route::get('{lang?}/showContent/aboutUs', array('as' => 'lang', 'uses' => 'HomeController@showAboutUsPage'))->where('lang', '.+');
بهترین پاسخ انتخاب شده توسط علی رحمانی
علی رحمانی
11 ماه پیش

خب حل شد

    protected $middleware = [
        \App\Http\Middleware\Language::class,
    ];

و

    public function handle($request, Closure $next)
    {
        $locale = $request->segment(1);

        if (!array_key_exists($locale, config('app.locales'))) {
            $segments = $request->segments();
            array_unshift($segments,config('app.fallback_locale'));
            return redirect(implode('/', $segments));
        }

        app()->setLocale($locale);

        return $next($request);
    }
حسام موسوی ( 91464 تجربه )
11 ماه پیش

خوب این روش درستی برای دو زبانه کردن نیست
شما میتونید از middleware ها برای ایجاد چنین سیستمی استفاده کنید در دوره ساخت یک وبسایت آموزشی فروشگاهی این موضوع رو کامل آموزش دادم
اگر ندارید میتونید در گوگل هم سرچ کنید
روش کار ساده است .
یعنی شما میتونید از طریق middleware ها بیاین نوع زبان رو مشخص و بصورت کلی set کنید و داخل url هم استفاده کنید
حالت پیش فرض هم میشه قرار داد بصورت کامل مثل کد زیر

public function handle($request, Closure $next)
    {
        $locale = $request->segment(1);
        if(! array_key_exists($locale , config('app.locales'))) {
            $segments = $request->segments();
            $segments[0] = config('app.fallback_locale');

            return redirect(implode('/', $segments));
        }

        app()->setLocale($locale);
        return $next($request);
    }
علی رحمانی ( 46 تجربه )
11 ماه پیش

سلام. خوب دقیقا دارم از همین روش استفاده میکنم ولی با این موردی که گفتم مشکل دارم. زمانی که زبان تو سگمنت اول نیست خطا میده میگه صفحه وجود نداره

شما زبان رو داخل web گذاشتید تو کرنل و فکر میکنم مشکل دقیقا همینه. با اینکه داخل web هم میزارم باز هم نمیتونه پیدا کنه

Route::group(['middleware' => 'web'], function () {
    Route::get('/showContent/faq', 'HomeController@showFaqPage');
    Route::get('/showContent/recruitment', 'HomeController@showRecruitmentPage');
    Route::get('/showContent/aboutUs', 'HomeController@showAboutUsPage');
    Route::get('/showContent/contactUs', 'HomeController@showContactUsPage');
});

این میدل وری که نوشتید ایراد داره مثلا تو /showContent/aboutUs اینجا هم جواب نمیده حتما باید سکمنت یکی باشه بتونه اضافه بکنه. تکی هم جواب نمیده که راه حلش اینه:

    public function handle($request, Closure $next)
    {
        $locale = $request->segment(1);

        if (!array_key_exists($locale, config('app.locales'))) {
            $segments = $request->segments();
            array_unshift($segments,config('app.fallback_locale'));
            return redirect(implode('/', $segments));
        }

        app()->setLocale($locale);

        return $next($request);
    }
علی رحمانی ( 46 تجربه )
11 ماه پیش

خب حل شد

    protected $middleware = [
        \App\Http\Middleware\Language::class,
    ];

و

    public function handle($request, Closure $next)
    {
        $locale = $request->segment(1);

        if (!array_key_exists($locale, config('app.locales'))) {
            $segments = $request->segments();
            array_unshift($segments,config('app.fallback_locale'));
            return redirect(implode('/', $segments));
        }

        app()->setLocale($locale);

        return $next($request);
    }
برای ارسال پاسخ باید وارد سایت شوید