علی رحمانی
6 سال پیش توسط علی رحمانی مطرح شد
3 پاسخ

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

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

Route::get('{lang?}/showContent/aboutUs', array('as' => 'lang', 'uses' => 'HomeController@showAboutUsPage'))->where('lang', '.+');

ثبت پرسش جدید
علی رحمانی
@pishguy 6 سال پیش مطرح شد
1

خب حل شد

    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);
    }

حسام موسوی
تخصص : طراح و برنامه نویس
@hesammousavi 6 سال پیش مطرح شد
0

خوب این روش درستی برای دو زبانه کردن نیست
شما میتونید از 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);
    }

علی رحمانی
@pishguy 6 سال پیش آپدیت شد
0

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

شما زبان رو داخل 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);
    }

علی رحمانی
@pishguy 6 سال پیش مطرح شد
1

خب حل شد

    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);
    }

برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام