• 0

ترجمة المشروع لا تتم بشكل كامل لارافل

السلام عليكم 

اريد ان اترجم المشروع الذي اعمل عليه و لكن هنالك مشكلة و هي ان الترجمة تتم فقط عند  صفحة ال 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
توضيح السؤال
1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 0

تأكد أن الحقل language موجود في مصفوفة الـ fillable داخل صف ال User كما يلي

class User extends Model
{
    protected $fillable = ['language', ...];
	...
}

 

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 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
1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 0

وضعت ال / لصبحت تظهر الصفحة و لكن لم تترجم 

ما هو الخطئ؟

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 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
1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 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

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

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

 

تمّ تعديل بواسطة Hassan Hedr
1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 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
1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 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");
    }

     

2 اشخاص أعجبوا بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 0

المشكلة في قاعدة البيانات لا تتغير اللغة فيها مع العلم ان ال request تاخذ ال language

Annotation 2021-08-18 194245.png

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 0
بتاريخ 1 دقيقة مضت قال Hassan Hedr:

تأكد أن الحقل language موجود في مصفوفة الـ fillable داخل صف ال User كما يلي


class User extends Model
{
    protected $fillable = ['language', ...];
	...
}

 

شكرا لك الحمدلله تمت البرمجة  بنجاح

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن