اذهب إلى المحتوى

السؤال

نشر (معدل)

السلام عليكم 

اريد ان اترجم المشروع الذي اعمل عليه و لكن هنالك مشكلة و هي ان الترجمة تتم فقط عند  صفحة ال login , اما في الصفحات داخل الموقع لا تتم الترجمة.

كما تعلمنا في فيديو الخاص بترجمة موقع ال instagram  قام المدرب باضافة input من نوع dropdown box حيث يدخل فيه options و من ثم يحفظ ما اختاره المستخدم من لغة داخل الدالة store 

اما في مشروعي لقد قمت بعمل dropdown list (unordered list)  و فيها خياران للغة فعند الضغط على احد اللغات لا يتغير لفة الموقع و عند الذهاب مثلا الى صفحة انشاء المشروع   يكون ال url في الاعلى هكذا http://127.0.0.1:8000/project/setlang/ar و يظهر خطأ 404 اي ان الصفحة غير موجودة  

هذا code ال route

 

Route::get('/', function () {
    return view('auth.login');
})->middleware('language');

Route::middleware(['auth:sanctum', 'verified', 'language'])->get('/home', function () {
    return view('home');
})->name('home');



// Route::get('/project', [ProjectController::class, 'index'])->name('index');
Route::resource('projects', ProjectController::class)->middleware('language');
Route::get('/project/create', [ProjectController::class, 'create'])->middleware('language');
Route::get('/project/{{project}}/edit', [ProjectController::class, 'edit'])->middleware('language');
Route::get('/users', [UserController::class, 'index'])->middleware('language');
Route::post('/users', [UserController::class, 'update'])->middleware('language');
Route::get('setlang/{language}', function ($lang) {
    if ($lang == "ar" || $lang == "en") {
        session(['language' => $lang]);
    } else {
        abort(404);
    }
    return redirect()->back();
});

 

و هذا كود ال navigation 

 <!-- Navigation Links -->

                <div class="hidden md:flex items-center space-x-1 ml-3 ">
                    <a href="/home" class="py-4 px-2 text-green-500 border-b-4 border-green-500 font-semibold ">{{__('Home')}}</a>
                    @if(Auth::user()->role == 1)
                    <a href="/users" class="py-4 px-2 text-gray-500 font-semibold hover:text-green-500 transition duration-300">{{__('Users')}}</a>
                    @endif
                    <div class="dropdown inline-block relative">
                        <button class=" text-gray-500 font-semibold py-2 px-4 rounded inline-flex items-center hover:text-green-500 transition duration-300"">
                            <span class=" mr-1 text-gray-500 font-semibold hover:text-green-500 transition duration-300">{{__('Languages')}}</span>
                            <svg class="fill-current h-4 w-4" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20">
                                <path d="M9.293 12.95l.707.707L15.657 8l-1.414-1.414L10 10.828 5.757 6.586 4.343 8z" />
                            </svg>
                        </button>
                        <ul class="dropdown-menu absolute hidden text-gray-700 pt-1">
                            <li class=""><a class=" bg-gray-200 hover:bg-gray-400 py-2 px-4 block whitespace-no-wrap" href="setlang/ar">{{__('Arabic')}}</a></li>
                            <li class=""><a class="bg-gray-200 hover:bg-gray-400 py-2 px-4 block whitespace-no-wrap" href="setlang/en">{{__('English')}}</a></li>

                        </ul>
                    </div>

                    <a href="" class="py-4 px-2 text-gray-500 font-semibold hover:text-green-500 transition duration-300">{{__('Contact Us')}}</a>
                </div>
            </div>

 و هذا كود ال middleware  الخاص باللغة

  public function handle(Request $request, Closure $next)
    {
        $lang = $request->session()->get('language', 'en');
        if (Auth::user() != null) {
            App::setLocale(Auth::user()->language);
            if (Auth::user()->language == "ar") {
                View::share('rtl', 'true');
            }
        } else if (isset($lang)) {
            App::setLocale($lang);
            if ($lang == "ar") {
                View::share('rtl', 'true');
            }
        }
        return $next($request);
    }
}

 

تم التعديل في بواسطة Wael Aljamal
توضيح السؤال

Recommended Posts

  • 0
نشر (معدل)

المشكلة في الروابط href في القائمة المنسدلة فهي روابط نسبية (تبدأ من الصفحة الحالية) وليست مطلقة (تبدأ من بداية العنوان)
فعندما تمرر "setlang/ar"مثلا سيقوم المتصفح عند الضغط على هذا الرابط باضافته لنهاية رابط الصفحة الحالية والذهاب اليها 
في حالتك كانت الصفحة هي projects الرابط الناتج سيكون "projects/setlang/ar" وهو عنوان صفحة غير موجودة في مشروعك (سبب الخطأ 404)

لجعل الرابط مطلق قم بإضافة "/" في بداية العنوان بالشكل التالي

<li class=""><a class=" bg-gray-200 hover:bg-gray-400 py-2 px-4 block whitespace-no-wrap" href="/setlang/ar">{{__('Arabic')}}</a></li>
<li class=""><a class="bg-gray-200 hover:bg-gray-400 py-2 px-4 block whitespace-no-wrap" href="/setlang/en">{{__('English')}}</a></li>


 

 

تم التعديل في بواسطة Hassan Hedr
  • 0
نشر (معدل)

في ال middleware الخاص بالترجمة اذا كان المستخدم مسجل دخول فأنت تعين لغة التطبيق كما هي محفوظة في قاعدة البيانات للمستخدم (وتتجاهل بيانات الجلسة التي حددتها بالضغط على خيار اللغة)
يجب حفظ خيار اللغة الموجود في بيانات الجلسة في بيانات المستخدم الحالي أولا كما يلي

 public function handle(Request $request, Closure $next)
    {
        $lang = $request->session()->get('language', 'en');
        if (Auth::user() != null) {
			
            // حفظ خيار تغيير اللغة
            if(isset($lang)){
                Auth::user()->update(['language' => $lang]);
            }

            App::setLocale(Auth::user()->language);
            if (Auth::user()->language == "ar") {
                View::share('rtl', 'true');
            }
        } else if (isset($lang)) {
            App::setLocale($lang);
            if ($lang == "ar") {
                View::share('rtl', 'true');
            }
        }
        return $next($request);
    }
}

 

تم التعديل في بواسطة Hassan Hedr
  • 0
نشر
بتاريخ 1 ساعة قال Hassan Hedr:

في ال middleware الخاص بالترجمة اذا كان المستخدم مسجل دخول فأنت تعين لغة التطبيق كما هي محفوظة في قاعدة البيانات للمستخدم (وتتجاهل بيانات الجلسة التي حددتها بالضغط على خيار اللغة)
يجب حفظ خيار اللغة الموجود في بيانات الجلسة في بيانات المستخدم الحالي أولا كما يلي


 public function handle(Request $request, Closure $next)
    {
        $lang = $request->session()->get('language', 'en');
        if (Auth::user() != null) {
			
            // حفظ خيار تغيير اللغة
            if(isset($lang)){
                Auth::user()->update(['language' => $lang]);
            }

            App::setLocale(Auth::user()->language);
            if (Auth::user()->language == "ar") {
                View::share('rtl', 'true');
            }
        } else if (isset($lang)) {
            App::setLocale($lang);
            if ($lang == "ar") {
                View::share('rtl', 'true');
            }
        }
        return $next($request);
    }
}

 

لم تعمل الترجمة 

كما ان الدالة update يظهر تحتها خط احمر يقول لي انها غير معرفة

  • 0
نشر
بتاريخ 59 دقائق مضت قال Hassan Hedr:

جرب جلب المستخدم الحالي من قاعدة البيانات عبر المعرف للمستخدم المسجل الآن كالتالي


...
if(isset($lang)){
	User::find(Auth::id())->update(['language' => $lang]);
}
...

 

ما زال لم يعمل لا اعرف لماذا

  • 0
نشر (معدل)

تأكد أن ال middleware مسجل في نواة التطبيق وأن الطلبات تمر عبره، يمكنك وضع التالي (مؤقتًا) والتأكد أن بيانات الجلسة تحتوي على المتحول language بالقيمة الصحيحة

public function handle(Request $request, Closure $next){
	dd($request->session());
	...
}

 

تم التعديل في بواسطة Hassan Hedr
  • 0
نشر
بتاريخ 21 دقائق مضت قال Hassan Hedr:

تأكد أن ال middleware مسجل في نواة التطبيق وأن الطلبات تمر عبره، يمكنك وضع التالي (مؤقتًا) والتأكد أن بيانات الجلسة تحتوي على المتحول language بالقيمة الصحيحة


public function handle(Request $request, Closure $next){
	dd($request->session());
	...
}

 

Illuminate\Session\Store {#1366 ▼ #id: "VfQ0bCwcFLwDsYjX2F6vIjINP1oYdVHjjoriQ8Tn" #name: "company_session" #attributes: array:6 [▶] #handler: Illuminate\Session\DatabaseSessionHandler {#1359 ▶} #started: true }

ظهر هذا الكود

  • 0
نشر (معدل)
  • قم بفرد قيمة attributes بالضغط على السهم المجاور لكي تعاين بيانات الجلسة داخلها وتتاكد من وجود قيمة اللغة الصحيحة
  • بعد ذلك قم بإلغاء السطر السابق "(..)dd" وتأكد من قيامك بإعداد ملف الترجمات في الملف "resources/lang/ar.json" كالتالي
    {
      "Home": "الرئيسية",
      "Users": "المستخدمين",
      "Languages": "اللغات",
      "Arabic": "العربية",
      "English": "الانجليزية",
      "Contact Us": "تواصل معنا"
    }

     

تم التعديل في بواسطة Hassan Hedr
  • 0
نشر (معدل)
بتاريخ 12 ساعات قال Hassan Hedr:
  • قم بفرد قيمة attributes بالضغط على السهم المجاور لكي تعاين بيانات الجلسة داخلها وتتاكد من وجود قيمة اللغة الصحيحة
  • بعد ذلك قم بإلغاء السطر السابق "(..)dd" وتأكد من قيامك بإعداد ملف الترجمات في الملف "resources/lang/ar.json" كالتالي
    
    {
      "Home": "الرئيسية",
      "Users": "المستخدمين",
      "Languages": "اللغات",
      "Arabic": "العربية",
      "English": "الانجليزية",
      "Contact Us": "تواصل معنا"
    }

     

يأخذ الموقع اللغة لكن لا تتم الترجمة

شيء غريب عجيب

Annotation 2021-08-18 104417.png

تم التعديل في بواسطة Mohammad Kiblawi
تعديل
  • 0
نشر

عملك كمبرمج هو اكتشاف الغريب وفهمه وتصحيحه لا تيأس

  • هل تأكدت من انشاء ملف الترجمات "ar.json" في مكانه الصحيح "resources/lang/ar.json"؟
  • قم بالدخول لقاعدة البيانات والتأكد أن جدول "users" فيه حقل "language" وأن القيمة "ar" موجودة عند سطر المستخدم  
  • جرب مؤقتا تبديل شيفرة ال middleware الى التالي فقط للاختبار، يجب ان تتم الترجمة بشكل صحيح في حال ملفات الترجمة يتم تحميلها  
    public function handle(Request $request, Closure $next){
    	App::setLocale("ar");
    }

     

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...