diff --git a/core/__pycache__/forms.cpython-311.pyc b/core/__pycache__/forms.cpython-311.pyc index 024c109..4888ecb 100644 Binary files a/core/__pycache__/forms.cpython-311.pyc and b/core/__pycache__/forms.cpython-311.pyc differ diff --git a/core/__pycache__/models.cpython-311.pyc b/core/__pycache__/models.cpython-311.pyc index 20c32de..8c34d0d 100644 Binary files a/core/__pycache__/models.cpython-311.pyc and b/core/__pycache__/models.cpython-311.pyc differ diff --git a/core/__pycache__/urls.cpython-311.pyc b/core/__pycache__/urls.cpython-311.pyc index 93c31e0..6d08370 100644 Binary files a/core/__pycache__/urls.cpython-311.pyc and b/core/__pycache__/urls.cpython-311.pyc differ diff --git a/core/__pycache__/views.cpython-311.pyc b/core/__pycache__/views.cpython-311.pyc index d8f0834..98b01de 100644 Binary files a/core/__pycache__/views.cpython-311.pyc and b/core/__pycache__/views.cpython-311.pyc differ diff --git a/core/forms.py b/core/forms.py index 60f9f9e..e7183fe 100644 --- a/core/forms.py +++ b/core/forms.py @@ -222,11 +222,13 @@ class ProfileForm(forms.ModelForm): class Meta: model = Profile - fields = ['profile_picture', 'phone_number', 'country_code'] + fields = ['profile_picture', 'phone_number', 'country_code', 'email_verified', 'phone_verified'] widgets = { 'profile_picture': forms.FileInput(attrs={'class': 'form-control'}), 'phone_number': forms.TextInput(attrs={'class': 'form-control'}), 'country_code': forms.Select(attrs={'class': 'form-select'}), + 'email_verified': forms.HiddenInput(), + 'phone_verified': forms.HiddenInput(), } def __init__(self, *args, **kwargs): @@ -246,6 +248,15 @@ class ProfileForm(forms.ModelForm): self.fields['last_name'].initial = user.last_name self.fields['email'].initial = user.email + def clean(self): + cleaned_data = super().clean() + email_verified = cleaned_data.get('email_verified') + phone_verified = cleaned_data.get('phone_verified') + + if not email_verified and not phone_verified: + raise forms.ValidationError(_("At least one contact method (Email or Phone) must be verified.")) + return cleaned_data + def save(self, commit=True): profile = super().save(commit=False) user = profile.user diff --git a/core/migrations/0029_profile_email_verified_profile_phone_verified.py b/core/migrations/0029_profile_email_verified_profile_phone_verified.py new file mode 100644 index 0000000..09bf8f1 --- /dev/null +++ b/core/migrations/0029_profile_email_verified_profile_phone_verified.py @@ -0,0 +1,23 @@ +# Generated by Django 5.2.7 on 2026-01-25 03:08 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0028_profile_profile_picture'), + ] + + operations = [ + migrations.AddField( + model_name='profile', + name='email_verified', + field=models.BooleanField(default=False), + ), + migrations.AddField( + model_name='profile', + name='phone_verified', + field=models.BooleanField(default=False), + ), + ] diff --git a/core/migrations/__pycache__/0029_profile_email_verified_profile_phone_verified.cpython-311.pyc b/core/migrations/__pycache__/0029_profile_email_verified_profile_phone_verified.cpython-311.pyc new file mode 100644 index 0000000..fff0bc2 Binary files /dev/null and b/core/migrations/__pycache__/0029_profile_email_verified_profile_phone_verified.cpython-311.pyc differ diff --git a/core/models.py b/core/models.py index 340a79c..b0a1ca4 100644 --- a/core/models.py +++ b/core/models.py @@ -68,6 +68,8 @@ class Profile(models.Model): # New Profile Picture field profile_picture = models.ImageField(_('Profile Picture'), upload_to='profiles/', blank=True, null=True) + email_verified = models.BooleanField(default=False) + phone_verified = models.BooleanField(default=False) def is_expired(self): if self.subscription_plan == "NONE": diff --git a/core/templates/core/profile.html b/core/templates/core/profile.html index f0546a3..d71260f 100644 --- a/core/templates/core/profile.html +++ b/core/templates/core/profile.html @@ -25,8 +25,10 @@

{% trans "Edit Profile" %}

-
+ {% csrf_token %} + {{ form.email_verified }} + {{ form.phone_verified }}
{% if profile.profile_picture %} @@ -58,7 +60,18 @@
- {{ form.email }} +
+ {{ form.email }} + +
{% if form.email.errors %}
{{ form.email.errors }}
{% endif %} @@ -74,7 +87,18 @@
- {{ form.phone_number }} +
+ {{ form.phone_number }} + +
{% if form.phone_number.errors %}
{{ form.phone_number.errors }}
{% endif %} @@ -95,7 +119,7 @@ {% trans "Back to Dashboard" %} -
@@ -134,4 +158,228 @@
+ + + + {% endblock %} + +{% block extra_js %} + +{% endblock %} \ No newline at end of file diff --git a/core/urls.py b/core/urls.py index 8beccbe..839422a 100644 --- a/core/urls.py +++ b/core/urls.py @@ -35,4 +35,6 @@ urlpatterns = [ path("admin/refund//", views.issue_refund, name="issue_refund"), path("admin/settings/", views.admin_app_settings, name="admin_app_settings"), path("api/chat/", views.chat_api, name="chat_api"), + path("profile/send-otp/", views.send_otp_profile, name="send_otp_profile"), + path("profile/verify-otp/", views.verify_otp_profile, name="verify_otp_profile"), ] \ No newline at end of file diff --git a/core/views.py b/core/views.py index 5b4f166..6c957c0 100644 --- a/core/views.py +++ b/core/views.py @@ -877,4 +877,65 @@ def chat_api(request): except Exception as e: logger.error(f"Chat API Error: {str(e)}") - return JsonResponse({'success': False, 'error': str(e)}) \ No newline at end of file + return JsonResponse({'success': False, 'error': str(e)}) +@login_required +@csrf_exempt +def send_otp_profile(request): + if request.method != 'POST': + return JsonResponse({'success': False, 'error': 'Method not allowed'}, status=405) + + try: + data = json.loads(request.body) + method = data.get('method') # 'email' or 'phone' + value = data.get('value') + + if method == 'email': + otp = OTPCode.generate_code(email=value) + if send_otp_email(value, otp.code): + return JsonResponse({'success': True}) + else: + return JsonResponse({'success': False, 'error': _('Failed to send email')}) + elif method == 'phone': + country_code = data.get('country_code', '966') + full_phone = f"{country_code}{value}" + otp = OTPCode.generate_code(phone_number=full_phone) + msg = _("Your verification code is: %(code)s") % {"code": otp.code} + if send_whatsapp_message(full_phone, msg): + return JsonResponse({'success': True}) + else: + return JsonResponse({'success': False, 'error': _('Failed to send WhatsApp message')}) + + return JsonResponse({'success': False, 'error': 'Invalid method'}) + except Exception as e: + return JsonResponse({'success': False, 'error': str(e)}) + +@login_required +@csrf_exempt +def verify_otp_profile(request): + if request.method != 'POST': + return JsonResponse({'success': False, 'error': 'Method not allowed'}, status=405) + + try: + data = json.loads(request.body) + method = data.get('method') + value = data.get('value') + code = data.get('code') + + if method == 'email': + otp_record = OTPCode.objects.filter(email=value, code=code, is_used=False).last() + elif method == 'phone': + country_code = data.get('country_code', '966') + full_phone = f"{country_code}{value}" + otp_record = OTPCode.objects.filter(phone_number=full_phone, code=code, is_used=False).last() + else: + return JsonResponse({'success': False, 'error': 'Invalid method'}) + + if otp_record and otp_record.is_valid(): + otp_record.is_used = True + otp_record.save() + return JsonResponse({'success': True}) + else: + return JsonResponse({'success': False, 'error': _('Invalid or expired code')}) + + except Exception as e: + return JsonResponse({'success': False, 'error': str(e)}) diff --git a/locale/ar/LC_MESSAGES/django.mo b/locale/ar/LC_MESSAGES/django.mo index 75f7c17..53b09cd 100644 Binary files a/locale/ar/LC_MESSAGES/django.mo and b/locale/ar/LC_MESSAGES/django.mo differ diff --git a/locale/ar/LC_MESSAGES/django.po b/locale/ar/LC_MESSAGES/django.po index cd68268..43d9e7e 100644 --- a/locale/ar/LC_MESSAGES/django.po +++ b/locale/ar/LC_MESSAGES/django.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-24 09:20+0000\n" +"POT-Creation-Date: 2026-01-25 03:08+0000\n" "PO-Revision-Date: 2026-01-23 10:45+0000\n" "Last-Translator: Gemini\n" "Language-Team: Arabic\n" @@ -10,7 +10,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" +"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " +"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" #: config/settings.py:198 msgid "English" @@ -115,7 +116,9 @@ msgstr "تم نشر الشحنة بنجاح!" #: core/admin.py:157 msgid "Failed to send test message. Check your API credentials and logs." -msgstr "فشل إرسال رسالة الاختبار. تحقق من بيانات اعتماد واجهة برمجة التطبيقات والسجلات." +msgstr "" +"فشل إرسال رسالة الاختبار. تحقق من بيانات اعتماد واجهة برمجة التطبيقات " +"والسجلات." #: core/admin.py:162 msgid "Send Test WhatsApp Message" @@ -155,114 +158,147 @@ msgstr "شهري" msgid "Annual" msgstr "سنوي" -#: core/forms.py:13 core/forms.py:167 +#: core/forms.py:13 core/forms.py:168 msgid "Subscription Plan" msgstr "خطة الاشتراك" -#: core/forms.py:14 +#: core/forms.py:14 core/forms.py:206 +msgid "WhatsApp" +msgstr "واتساب" + +#: core/forms.py:14 core/forms.py:206 core/models.py:520 +#: core/templates/core/contact.html:36 core/templates/core/profile.html:62 +msgid "Email" +msgstr "البريد الإلكتروني" + +#: core/forms.py:14 core/forms.py:209 +msgid "Receive verification code via" +msgstr "استلام رمز التحقق عبر" + +#: core/forms.py:15 msgid "I have read and agree to the Terms and Conditions and Privacy Policy" msgstr "لقد قرأت وأوافق على الشروط والأحكام وسياسة الخصوصية" -#: core/forms.py:38 core/forms.py:165 -#: core/templates/registration/register.html:109 +#: core/forms.py:39 core/forms.py:166 +#: core/templates/registration/register.html:131 msgid "Monthly Plan" msgstr "الخطة الشهرية" -#: core/forms.py:39 core/forms.py:165 -#: core/templates/registration/register.html:110 +#: core/forms.py:40 core/forms.py:166 +#: core/templates/registration/register.html:132 msgid "Annual Plan" msgstr "الخطة السنوية" -#: core/forms.py:52 +#: core/forms.py:53 msgid "This email is already in use." msgstr "هذا البريد الإلكتروني مستخدم بالفعل." -#: core/forms.py:60 +#: core/forms.py:61 msgid "This phone number is already in use." msgstr "رقم الهاتف هذا مستخدم بالفعل." -#: core/forms.py:69 +#: core/forms.py:70 msgid "The two email fields didn't match." msgstr "حقلا البريد الإلكتروني غير متطابقين." -#: core/forms.py:74 +#: core/forms.py:75 msgid "OTP Code" msgstr "رمز التحقق" -#: core/forms.py:104 core/forms.py:128 core/models.py:44 +#: core/forms.py:105 core/forms.py:129 core/models.py:44 #: core/templates/core/post_shipment.html:65 #: core/templates/core/truck_register.html:58 msgid "Truck Type" msgstr "نوع الشاحنة" -#: core/forms.py:147 +#: core/forms.py:148 msgid "You must have an approved truck to place a bid." msgstr "يجب أن يكون لديك شاحنة معتمدة لتقديم عرض." -#: core/forms.py:150 core/models.py:230 +#: core/forms.py:151 core/models.py:268 #: core/templates/core/post_shipment.html:53 msgid "Goods Description" msgstr "وصف البضائع" -#: core/forms.py:151 core/models.py:231 +#: core/forms.py:152 core/models.py:269 #: core/templates/core/post_shipment.html:60 msgid "Weight/Volume" msgstr "الوزن/الحجم" -#: core/forms.py:152 core/models.py:234 +#: core/forms.py:153 core/models.py:272 #: core/templates/core/shipment_detail.html:45 msgid "Required Truck Type" msgstr "نوع الشاحنة" -#: core/forms.py:159 core/models.py:244 +#: core/forms.py:160 core/models.py:282 #: core/templates/core/shipment_detail.html:55 msgid "Requested Delivery Date" msgstr "تاريخ التسليم المطلوب" -#: core/forms.py:160 core/models.py:275 +#: core/forms.py:161 core/models.py:313 #: core/templates/core/truck_owner_dashboard.html:73 msgid "Offer Amount" msgstr "قيمة العرض" -#: core/forms.py:161 core/models.py:276 +#: core/forms.py:162 core/models.py:314 msgid "Comments" msgstr "تعليقات" -#: core/forms.py:197 core/templates/core/contact.html:62 +#: core/forms.py:198 core/templates/core/contact.html:62 msgid "Your Name" msgstr "الإسم بالكامل" -#: core/forms.py:198 +#: core/forms.py:199 #, fuzzy #| msgid "Confirm Email" msgid "Your Email" msgstr "تأكيد البريد الإلكتروني" -#: core/forms.py:199 core/models.py:483 core/templates/core/contact.html:76 +#: core/forms.py:200 core/models.py:521 core/templates/core/contact.html:76 msgid "Subject" msgstr "الموضوع" -#: core/forms.py:200 +#: core/forms.py:201 #, fuzzy #| msgid "Message" msgid "Your Message" msgstr "الرسالة" +#: core/mail.py:12 +#, fuzzy +#| msgid "Your verification code for MASAR CARGO is: %(code)s" +msgid "Your verification code for MASAR CARGO" +msgstr "رمز التحقق الخاص بك لـ MASAR CARGO هو: %(code)s" + +#: core/mail.py:13 core/views.py:98 +#, python-format +msgid "Your verification code for MASAR CARGO is: %(code)s" +msgstr "رمز التحقق الخاص بك لـ MASAR CARGO هو: %(code)s" + +#: core/mail.py:29 +#, python-format +msgid "New contact message from %(name)s" +msgstr "" + #: core/management/commands/check_subscriptions.py:28 #, python-format -msgid "Hello %(user)s, your MASAR CARGO subscription (%(plan)s) will expire in %(days)s days on %(date)s. Please renew to avoid account suspension." +msgid "" +"Hello %(user)s, your MASAR CARGO subscription (%(plan)s) will expire in " +"%(days)s days on %(date)s. Please renew to avoid account suspension." msgstr "" #: core/management/commands/check_subscriptions.py:49 #, python-format -msgid "Hello %(user)s, your MASAR CARGO subscription has EXPIRED today. Your account is now suspended. Please contact support to renew." +msgid "" +"Hello %(user)s, your MASAR CARGO subscription has EXPIRED today. Your " +"account is now suspended. Please contact support to renew." msgstr "" #: core/models.py:16 msgid "Country Name" msgstr "اسم الدولة" -#: core/models.py:17 +#: core/models.py:17 core/templates/core/profile.html:82 msgid "Country Code" msgstr "رمز الدولة" @@ -318,441 +354,444 @@ msgstr "مدير النظام" msgid "None" msgstr "لا يوجد" -#: core/models.py:114 +#: core/models.py:70 core/templates/core/profile.html:109 +msgid "Profile Picture" +msgstr "صورة الملف الشخصي" + +#: core/models.py:152 msgid "Truck Type (New)" msgstr "نوع الشاحنة (بالإنجليزية)" -#: core/models.py:117 +#: core/models.py:155 msgid "Truck Type (EN)" msgstr "نوع الشاحنة (بالإنجليزية)" -#: core/models.py:118 +#: core/models.py:156 msgid "Model (EN)" msgstr "الموديل (بالإنجليزية)" -#: core/models.py:119 +#: core/models.py:157 msgid "Load Capacity (EN)" msgstr "الحمولة (بالإنجليزية)" -#: core/models.py:120 +#: core/models.py:158 msgid "Color (EN)" msgstr "اللون (بالإنجليزية)" -#: core/models.py:123 +#: core/models.py:161 msgid "Truck Type (AR)" msgstr "نوع الشاحنة" -#: core/models.py:124 core/templates/core/truck_register.html:89 +#: core/models.py:162 core/templates/core/truck_register.html:89 msgid "Model (AR)" msgstr "الموديل" -#: core/models.py:125 core/templates/core/truck_register.html:94 +#: core/models.py:163 core/templates/core/truck_register.html:94 msgid "Load Capacity (AR)" msgstr "الحمولة" -#: core/models.py:126 core/templates/core/truck_register.html:99 +#: core/models.py:164 core/templates/core/truck_register.html:99 msgid "Color (AR)" msgstr "اللون" -#: core/models.py:128 core/templates/core/admin_dashboard.html:222 +#: core/models.py:166 core/templates/core/admin_dashboard.html:222 #: core/templates/core/marketplace.html:48 #: core/templates/core/truck_register.html:110 msgid "Year" msgstr "السنة" -#: core/models.py:129 core/templates/core/admin_dashboard.html:94 +#: core/models.py:167 core/templates/core/admin_dashboard.html:94 #: core/templates/core/admin_dashboard.html:153 #: core/templates/core/admin_dashboard.html:226 #: core/templates/core/truck_register.html:115 msgid "Plate No" msgstr "رقم اللوحة" -#: core/models.py:130 core/templates/core/truck_register.html:120 +#: core/models.py:168 core/templates/core/truck_register.html:120 msgid "Registration Expiry Date" msgstr "تاريخ انتهاء الاستمارة" -#: core/models.py:133 core/templates/core/truck_register.html:132 +#: core/models.py:171 core/templates/core/truck_register.html:132 msgid "Truck Picture" msgstr "صورة الشاحنة" -#: core/models.py:134 core/templates/core/admin_dashboard.html:259 +#: core/models.py:172 core/templates/core/admin_dashboard.html:259 #: core/templates/core/truck_register.html:184 msgid "Registration (Front Face)" msgstr "واجهة استمارة السيارة" -#: core/models.py:135 core/templates/core/admin_dashboard.html:268 +#: core/models.py:173 core/templates/core/admin_dashboard.html:268 #: core/templates/core/truck_register.html:202 msgid "Registration (Back Face)" msgstr "خلفية استمارة السيارة" -#: core/models.py:136 core/templates/core/admin_dashboard.html:277 +#: core/models.py:174 core/templates/core/admin_dashboard.html:277 #: core/templates/core/truck_register.html:145 msgid "Driver License (Front Face)" msgstr "واجهة رخصة القيادة" -#: core/models.py:137 core/templates/core/admin_dashboard.html:286 +#: core/models.py:175 core/templates/core/admin_dashboard.html:286 #: core/templates/core/truck_register.html:163 msgid "Driver License (Back Face)" msgstr "خلفية رخصة القيادة" -#: core/models.py:139 +#: core/models.py:177 msgid "Is Approved" msgstr "معتمد" -#: core/models.py:224 +#: core/models.py:262 msgid "Open for Bids" msgstr "مفتوح للعروض" -#: core/models.py:225 +#: core/models.py:263 msgid "In Progress" msgstr "قيد التنفيذ" -#: core/models.py:226 core/models.py:446 +#: core/models.py:264 core/models.py:484 msgid "Completed" msgstr "مكتمل" -#: core/models.py:227 core/models.py:448 +#: core/models.py:265 core/models.py:486 msgid "Cancelled" msgstr "ملغي" -#: core/models.py:241 +#: core/models.py:279 msgid "Origin (Legacy)" msgstr "المصدر (قديم)" -#: core/models.py:242 +#: core/models.py:280 msgid "Destination (Legacy)" msgstr "الوجهة" -#: core/models.py:268 core/models.py:445 +#: core/models.py:306 core/models.py:483 #: core/templates/core/shipper_dashboard.html:98 #: core/templates/core/truck_owner_dashboard.html:90 #: core/templates/core/truck_owner_dashboard.html:156 msgid "Pending" msgstr "قيد الانتظار" -#: core/models.py:269 core/templates/core/shipper_dashboard.html:100 +#: core/models.py:307 core/templates/core/shipper_dashboard.html:100 #: core/templates/core/truck_owner_dashboard.html:92 msgid "Accepted" msgstr "مقبول" -#: core/models.py:270 core/templates/core/shipper_dashboard.html:102 +#: core/models.py:308 core/templates/core/shipper_dashboard.html:102 #: core/templates/core/truck_owner_dashboard.html:94 msgid "Rejected" msgstr "مرفوض" -#: core/models.py:294 +#: core/models.py:332 msgid "Wablas API Token" msgstr "رمز Wablas API" -#: core/models.py:295 +#: core/models.py:333 msgid "Wablas Secret Key" msgstr "مفتاح Wablas السري" -#: core/models.py:296 core/models.py:342 core/models.py:380 core/models.py:505 +#: core/models.py:334 core/models.py:380 core/models.py:418 core/models.py:543 msgid "Is Active" msgstr "نشط" -#: core/models.py:297 +#: core/models.py:335 msgid "Admin Notification Phone" msgstr "رقم هاتف إشعارات المسؤول" -#: core/models.py:297 -msgid "WhatsApp number to receive admin notifications (with country code, e.g., 96812345678)" -msgstr "رقم الواتساب لاستلام إشعارات المسؤول (مع رمز الدولة، مثال: 96812345678)" +#: core/models.py:335 +msgid "" +"WhatsApp number to receive admin notifications (with country code, e.g., " +"96812345678)" +msgstr "" +"رقم الواتساب لاستلام إشعارات المسؤول (مع رمز الدولة، مثال: 96812345678)" -#: core/models.py:300 core/models.py:301 core/models.py:304 +#: core/models.py:338 core/models.py:339 core/models.py:342 msgid "WhatsApp Configuration" msgstr "تكامل واتساب" -#: core/models.py:307 +#: core/models.py:345 msgid "App Name" msgstr "اسم التطبيق" -#: core/models.py:308 +#: core/models.py:346 msgid "Logo" msgstr "الشعار" -#: core/models.py:309 +#: core/models.py:347 msgid "Slogan" msgstr "الشعار اللفظي" -#: core/models.py:310 +#: core/models.py:348 msgid "Registration Number" msgstr "رقم السجل التجاري" -#: core/models.py:311 +#: core/models.py:349 msgid "Tax Number" msgstr "الرقم الضريبي" -#: core/models.py:312 +#: core/models.py:350 msgid "Contact Phone" msgstr "هاتف التواصل" -#: core/models.py:313 +#: core/models.py:351 msgid "Contact Email" msgstr "بريد التواصل" -#: core/models.py:314 +#: core/models.py:352 msgid "Contact Address" msgstr "عنوان التواصل" -#: core/models.py:315 core/templates/base.html:161 -#: core/templates/registration/register.html:67 core/views.py:484 +#: core/models.py:353 core/templates/base.html:180 +#: core/templates/registration/register.html:89 core/views.py:535 msgid "Terms of Service" msgstr "شروط الخدمة" -#: core/models.py:316 core/templates/base.html:160 -#: core/templates/registration/register.html:69 core/views.py:474 +#: core/models.py:354 core/templates/base.html:179 +#: core/templates/registration/register.html:91 core/views.py:525 msgid "Privacy Policy" msgstr "سياسة الخصوصية" -#: core/models.py:317 +#: core/models.py:355 msgid "Enable Subscription Fee" msgstr "تفعيل رسوم الاشتراك" -#: core/models.py:318 +#: core/models.py:356 msgid "Enable Thawani Payment" msgstr "تفعيل دفع ثواني" -#: core/models.py:321 +#: core/models.py:359 msgid "Shipper Monthly Fee" msgstr "رسوم الشاحن الشهرية" -#: core/models.py:322 +#: core/models.py:360 msgid "Shipper Annual Fee" msgstr "رسوم الشاحن السنوية" -#: core/models.py:325 +#: core/models.py:363 msgid "Truck Owner Monthly Fee" msgstr "رسوم صاحب الشاحنة الشهرية" -#: core/models.py:326 +#: core/models.py:364 msgid "Truck Owner Annual Fee" msgstr "رسوم صاحب الشاحنة السنوية" -#: core/models.py:329 +#: core/models.py:367 msgid "App Setting" msgstr "إعداد التطبيق" -#: core/models.py:330 +#: core/models.py:368 msgid "App Settings" msgstr "إعدادات التطبيق" -#: core/models.py:336 core/models.py:372 +#: core/models.py:374 core/models.py:410 msgid "Title (EN)" msgstr "العنوان (بالإنجليزية)" -#: core/models.py:337 core/models.py:373 +#: core/models.py:375 core/models.py:411 msgid "Title (AR)" msgstr "العنوان (بالعربية)" -#: core/models.py:338 core/models.py:374 +#: core/models.py:376 core/models.py:412 msgid "Subtitle (EN)" msgstr "العنوان الفرعي (بالإنجليزية)" -#: core/models.py:339 core/models.py:375 +#: core/models.py:377 core/models.py:413 msgid "Subtitle (AR)" msgstr "العنوان الفرعي (بالعربية)" -#: core/models.py:340 +#: core/models.py:378 msgid "Banner Image" msgstr "صورة البانر" -#: core/models.py:341 +#: core/models.py:379 msgid "Link URL" msgstr "رابط" -#: core/models.py:341 +#: core/models.py:379 msgid "Internal or external URL" msgstr "رابط داخلي أو خارجي" -#: core/models.py:343 core/models.py:379 core/models.py:506 +#: core/models.py:381 core/models.py:417 core/models.py:544 msgid "Order" msgstr "الترتيب" -#: core/models.py:347 +#: core/models.py:385 msgid "Banner" msgstr "بانر" -#: core/models.py:348 +#: core/models.py:386 msgid "Banners" msgstr "البانرات" -#: core/models.py:368 +#: core/models.py:406 msgid "Simple Text & Image" msgstr "نص بسيط وصورة" -#: core/models.py:369 +#: core/models.py:407 msgid "Features List" msgstr "قائمة المميزات" -#: core/models.py:370 +#: core/models.py:408 msgid "Call to Action" msgstr "دعوة لاتخاذ إجراء" -#: core/models.py:376 +#: core/models.py:414 msgid "Content (EN)" msgstr "المحتوى (بالإنجليزية)" -#: core/models.py:377 +#: core/models.py:415 msgid "Content (AR)" msgstr "المحتوى (بالعربية)" -#: core/models.py:378 +#: core/models.py:416 msgid "Image" msgstr "صورة" -#: core/models.py:385 +#: core/models.py:423 msgid "Home Section" msgstr "قسم في الصفحة الرئيسية" -#: core/models.py:386 +#: core/models.py:424 msgid "Home Sections" msgstr "أقسام الصفحة الرئيسية" -#: core/models.py:441 core/templates/core/financial_history.html:37 +#: core/models.py:479 core/templates/core/financial_history.html:37 msgid "Payment" msgstr "دفع" -#: core/models.py:442 core/templates/core/financial_history.html:39 +#: core/models.py:480 core/templates/core/financial_history.html:39 msgid "Refund" msgstr "استرداد" -#: core/models.py:447 +#: core/models.py:485 msgid "Failed" msgstr "فشل" -#: core/models.py:451 core/templates/core/admin_financials.html:30 +#: core/models.py:489 core/templates/core/admin_financials.html:30 #: core/templates/core/financial_history.html:24 #: core/templates/core/shipment_detail.html:73 #: core/templates/core/shipper_dashboard.html:76 msgid "Amount" msgstr "المبلغ" -#: core/models.py:454 core/templates/core/financial_history.html:22 +#: core/models.py:492 core/templates/core/financial_history.html:22 #: core/templates/core/receipt.html:48 #: core/templates/core/shipper_dashboard.html:134 msgid "Description" msgstr "الوصف" -#: core/models.py:455 core/templates/core/receipt.html:39 +#: core/models.py:493 core/templates/core/receipt.html:39 msgid "Payment Method" msgstr "طريقة الدفع" -#: core/models.py:456 +#: core/models.py:494 #, fuzzy #| msgid "Phone Number" msgid "Reference Number" msgstr "رقم الهاتف" -#: core/models.py:457 +#: core/models.py:495 #, fuzzy #| msgid "Registration Number" msgid "Receipt Number" msgstr "رقم السجل التجاري" -#: core/models.py:458 +#: core/models.py:496 msgid "Session ID" msgstr "معرف الجلسة" -#: core/models.py:459 +#: core/models.py:497 #, fuzzy #| msgid "Status" msgid "Payment Status" msgstr "الحالة" -#: core/models.py:465 +#: core/models.py:503 msgid "Transaction" msgstr "معاملة" -#: core/models.py:466 +#: core/models.py:504 #, fuzzy #| msgid "Actions" msgid "Transactions" msgstr "الإجراءات" -#: core/models.py:481 +#: core/models.py:519 #, fuzzy #| msgid "App Name" msgid "Name" msgstr "اسم التطبيق" -#: core/models.py:482 core/templates/core/contact.html:36 -msgid "Email" -msgstr "البريد الإلكتروني" - -#: core/models.py:484 core/templates/admin/core/whatsapp_test.html:28 +#: core/models.py:522 core/templates/admin/core/whatsapp_test.html:28 #: core/templates/core/contact.html:83 msgid "Message" msgstr "الرسالة" -#: core/models.py:489 +#: core/models.py:527 #, fuzzy #| msgid "Contact Address" msgid "Contact Message" msgstr "عنوان التواصل" -#: core/models.py:490 +#: core/models.py:528 #, fuzzy #| msgid "Contact Address" msgid "Contact Messages" msgstr "عنوان التواصل" -#: core/models.py:497 +#: core/models.py:535 #, fuzzy #| msgid "Name (EN)" msgid "Customer Name (EN)" msgstr "الموديل (بالإنجليزية)" -#: core/models.py:498 +#: core/models.py:536 #, fuzzy #| msgid "Name (AR)" msgid "Customer Name (AR)" msgstr "الموديل" -#: core/models.py:499 +#: core/models.py:537 msgid "Customer Role (EN)" msgstr "وظيفة العميل (EN)" -#: core/models.py:500 +#: core/models.py:538 msgid "Customer Role (AR)" msgstr "وظيفة العميل (AR)" -#: core/models.py:501 +#: core/models.py:539 #, fuzzy #| msgid "Details" msgid "Testimony (EN)" msgstr "التفاصيل" -#: core/models.py:502 +#: core/models.py:540 #, fuzzy #| msgid "Details" msgid "Testimony (AR)" msgstr "التفاصيل" -#: core/models.py:503 +#: core/models.py:541 msgid "Rating (1-5)" msgstr "التقييم (1-5)" -#: core/models.py:504 +#: core/models.py:542 #, fuzzy #| msgid "Banner Image" msgid "Customer Image" msgstr "صورة البانر" -#: core/models.py:510 +#: core/models.py:548 msgid "Testimonial" msgstr "شهادة عميل" -#: core/models.py:511 +#: core/models.py:549 msgid "Testimonials" msgstr "شهادات العملاء" -#: core/templates/admin/core/whatsapp_test.html:6 core/templates/base.html:57 +#: core/templates/admin/core/whatsapp_test.html:6 core/templates/base.html:61 #: core/templates/core/admin_dashboard.html:11 #: core/templates/core/article_detail.html:11 #: core/templates/core/marketplace.html:10 core/templates/core/place_bid.html:9 -#: core/templates/core/post_shipment.html:9 +#: core/templates/core/post_shipment.html:9 core/templates/core/profile.html:11 #: core/templates/core/shipment_detail.html:9 #: core/templates/core/shipper_dashboard.html:9 #: core/templates/core/truck_owner_dashboard.html:10 @@ -783,11 +822,11 @@ msgid "Send Message" msgstr "إرسال الرسالة" #: core/templates/admin/core/whatsapp_test.html:35 -#: core/templates/core/place_bid.html:147 +#: core/templates/core/place_bid.html:147 core/templates/core/profile.html:176 msgid "Cancel" msgstr "إلغاء" -#: core/templates/base.html:61 core/templates/core/marketplace.html:11 +#: core/templates/base.html:65 core/templates/core/marketplace.html:11 #: core/templates/core/place_bid.html:10 #: core/templates/core/post_shipment.html:10 #: core/templates/core/shipment_detail.html:10 @@ -797,54 +836,75 @@ msgstr "إلغاء" msgid "Dashboard" msgstr "لوحة التحكم" -#: core/templates/base.html:65 core/templates/core/marketplace.html:12 +#: core/templates/base.html:69 core/templates/core/marketplace.html:12 #: core/templates/core/place_bid.html:11 msgid "Marketplace" msgstr "السوق" -#: core/templates/base.html:70 core/templates/base.html:166 +#: core/templates/base.html:74 core/templates/base.html:185 msgid "Contact" msgstr "اتصال" -#: core/templates/base.html:105 +#: core/templates/base.html:114 core/templates/core/profile.html:4 +#: core/templates/core/profile.html:12 +msgid "My Profile" +msgstr "ملفي الشخصي" + +#: core/templates/base.html:120 msgid "Admin Panel" msgstr "لوحة التحكم" -#: core/templates/base.html:111 +#: core/templates/base.html:129 #: core/templates/core/subscription_expired.html:73 msgid "Logout" msgstr "تسجيل الخروج" -#: core/templates/base.html:118 core/templates/registration/login.html:16 -#: core/templates/registration/login.html:27 -#: core/templates/registration/register.html:96 +#: core/templates/base.html:137 core/templates/registration/login.html:16 +#: core/templates/registration/login.html:55 +#: core/templates/registration/register.html:118 msgid "Login" msgstr "تسجيل الدخول" -#: core/templates/base.html:121 core/templates/core/index.html:109 +#: core/templates/base.html:140 core/templates/core/index.html:267 msgid "Get Started" msgstr "ابدأ الآن" -#: core/templates/base.html:154 +#: core/templates/base.html:173 msgid "Empowering logistics with smart technology. Locally and abroad." msgstr "تمكين الخدمات اللوجستية بتقنيات ذكية. محلياً ودولياً." -#: core/templates/base.html:158 +#: core/templates/base.html:177 msgid "Quick Links" msgstr "روابط سريعة" -#: core/templates/base.html:162 +#: core/templates/base.html:181 msgid "Contact Us" msgstr "اتصل بنا" -#: core/templates/base.html:176 +#: core/templates/base.html:195 msgid "CR No:" msgstr "رقم السجل التجاري:" -#: core/templates/base.html:179 +#: core/templates/base.html:198 msgid "VAT No:" msgstr "الرقم الضريبي:" +#: core/templates/base.html:209 +msgid "Chat with MASAR AI" +msgstr "تحدث مع مسار الذكي" + +#: core/templates/base.html:220 +msgid "Hello! I am MASAR, your AI assistant. How can I help you today?" +msgstr "أهلاً بك! أنا مسار، مساعدك الذكي. كيف يمكنني مساعدتك اليوم؟" + +#: core/templates/base.html:224 +msgid "Type a message..." +msgstr "اكتب رسالة..." + +#: core/templates/base.html:231 +msgid "Talk to a Human" +msgstr "تحدث مع شخص حقيقي" + #: core/templates/core/admin_dashboard.html:4 #: core/templates/core/admin_dashboard.html:12 msgid "Admin Dashboard" @@ -1072,6 +1132,7 @@ msgid "User" msgstr "اسم المستخدم" #: core/templates/core/admin_financials.html:27 +#: core/templates/core/profile.html:137 msgid "Role" msgstr "الدور" @@ -1123,6 +1184,7 @@ msgstr "إصدار استرداد" #: core/templates/core/financial_history.html:9 #: core/templates/core/marketplace.html:23 #: core/templates/core/post_shipment.html:22 +#: core/templates/core/profile.html:120 #: core/templates/core/shipment_detail.html:22 #: core/templates/core/truck_register.html:29 msgid "Back to Dashboard" @@ -1175,8 +1237,12 @@ msgid "Get in Touch" msgstr "اتصل بنا" #: core/templates/core/contact.html:13 -msgid "Have questions about our services or need assistance? Fill out the form and our team will get back to you shortly." -msgstr "لديك أسئلة حول خدماتنا أو تحتاج إلى مساعدة؟ املأ النموذج وسيقوم فريقنا بالرد عليك قريباً." +msgid "" +"Have questions about our services or need assistance? Fill out the form and " +"our team will get back to you shortly." +msgstr "" +"لديك أسئلة حول خدماتنا أو تحتاج إلى مساعدة؟ املأ النموذج وسيقوم فريقنا بالرد " +"عليك قريباً." #: core/templates/core/contact.html:24 msgid "Phone" @@ -1207,131 +1273,143 @@ msgstr "إيصال" msgid "No transactions found." msgstr "لم يتم العثور على معاملات." -#: core/templates/core/index.html:24 core/templates/core/index.html:33 -#: core/templates/core/index.html:68 +#: core/templates/core/index.html:120 core/templates/core/index.html:128 +#: core/templates/core/index.html:226 msgid "Learn More" msgstr "تعلم المزيد" -#: core/templates/core/index.html:60 +#: core/templates/core/index.html:218 msgid "Smart Cargo Solutions" msgstr "حلول شحن ذكية" -#: core/templates/core/index.html:61 +#: core/templates/core/index.html:219 msgid "Locally & Abroad" msgstr "محلياً ودولياً" -#: core/templates/core/index.html:64 -msgid "The most reliable platform connecting shippers with truck owners across the region. Transparent, fast, and secure." -msgstr "المنصة الأكثر موثوقية لربط الشاحنين مع أسطول الشاحنات في جميع أنحاء المنطقة. شفافة، سريعة، وآمنة." +#: core/templates/core/index.html:222 +msgid "" +"The most reliable platform connecting shippers with truck owners across the " +"region. Transparent, fast, and secure." +msgstr "" +"المنصة الأكثر موثوقية لربط الشاحنين مع أسطول الشاحنات في جميع أنحاء المنطقة. " +"شفافة، سريعة، وآمنة." -#: core/templates/core/index.html:67 +#: core/templates/core/index.html:225 msgid "Start Shipping" msgstr "ابدأ الشحن" -#: core/templates/core/index.html:128 +#: core/templates/core/index.html:286 msgid "How would you like to use MASAR?" msgstr "كيف تود استخدام مسار؟" -#: core/templates/core/index.html:129 +#: core/templates/core/index.html:287 msgid "Choose your path to get started with our platform." msgstr "اختر مسارك للبدء مع منصتنا." -#: core/templates/core/index.html:138 +#: core/templates/core/index.html:296 msgid "I am a Shipper" msgstr "أنا شاحن" -#: core/templates/core/index.html:140 -msgid "I need to move goods locally or abroad. Post your shipment, receive offers from verified drivers, and track your cargo in real-time." -msgstr "أريد نقل بضائع محلياً أو دولياً. انشر شحنتك، واستقبل عروضاً من سائقين موثقين، وتتبع شحنتك في الوقت الفعلي." +#: core/templates/core/index.html:298 +msgid "" +"I need to move goods locally or abroad. Post your shipment, receive offers " +"from verified drivers, and track your cargo in real-time." +msgstr "" +"أريد نقل بضائع محلياً أو دولياً. انشر شحنتك، واستقبل عروضاً من سائقين موثقين، " +"وتتبع شحنتك في الوقت الفعلي." -#: core/templates/core/index.html:143 +#: core/templates/core/index.html:301 msgid "Post shipments easily" msgstr "انشر الشحنات بسهولة" -#: core/templates/core/index.html:144 +#: core/templates/core/index.html:302 msgid "Compare competitive bids" msgstr "قارن العروض التنافسية" -#: core/templates/core/index.html:145 +#: core/templates/core/index.html:303 msgid "Real-time tracking" msgstr "تتبع في الوقت الفعلي" -#: core/templates/core/index.html:147 +#: core/templates/core/index.html:305 #: core/templates/core/shipper_dashboard.html:114 msgid "Find a Truck" msgstr "ابحث عن شاحنة" -#: core/templates/core/index.html:156 +#: core/templates/core/index.html:314 msgid "I am a Truck Owner" msgstr "أنا صاحب شاحنة" -#: core/templates/core/index.html:158 -msgid "I have trucks and want to find cargo to transport. Register your fleet, bid on available jobs, and grow your business." -msgstr "لدي شاحنات وأريد العثور على بضائع لنقلها. سجل أسطولك، وقدم عروضك على الوظائف المتاحة، ونمِ عملك." +#: core/templates/core/index.html:316 +msgid "" +"I have trucks and want to find cargo to transport. Register your fleet, bid " +"on available jobs, and grow your business." +msgstr "" +"لدي شاحنات وأريد العثور على بضائع لنقلها. سجل أسطولك، وقدم عروضك على الوظائف " +"المتاحة، ونمِ عملك." -#: core/templates/core/index.html:161 +#: core/templates/core/index.html:319 msgid "Access daily cargo leads" msgstr "الوصول إلى فرص شحن يومية" -#: core/templates/core/index.html:162 +#: core/templates/core/index.html:320 msgid "Flexible bidding system" msgstr "نظام عروض مرن" -#: core/templates/core/index.html:163 +#: core/templates/core/index.html:321 msgid "Direct chat with shippers" msgstr "دردشة مباشرة مع الشاحنين" -#: core/templates/core/index.html:165 +#: core/templates/core/index.html:323 msgid "Register Your Truck" msgstr "سجل شاحنتك" -#: core/templates/core/index.html:177 +#: core/templates/core/index.html:335 msgid "Everything you need for seamless logistics" msgstr "كل ما تحتاجه للوجستيات سلسة" -#: core/templates/core/index.html:185 +#: core/templates/core/index.html:343 msgid "WhatsApp Integration" msgstr "تكامل واتساب" -#: core/templates/core/index.html:186 +#: core/templates/core/index.html:344 msgid "Receive instant updates and communicate easily via WhatsApp API." msgstr "استقبل تحديثات فورية وتواصل بسهولة عبر واجهة برمجة تطبيقات واتساب." -#: core/templates/core/index.html:196 +#: core/templates/core/index.html:354 msgid "Multilingual Support" msgstr "دعم متعدد اللغات" -#: core/templates/core/index.html:197 +#: core/templates/core/index.html:355 msgid "Fully accessible in both Arabic and English for all users." msgstr "متاح بالكامل باللغتين العربية والإنجليزية لجميع المستخدمين." -#: core/templates/core/index.html:207 +#: core/templates/core/index.html:365 msgid "Secure Documentation" msgstr "توثيق آمن" -#: core/templates/core/index.html:208 +#: core/templates/core/index.html:366 msgid "Digital verification of truck registration and driver licenses." msgstr "التحقق الرقمي من تسجيل الشاحنات ورخص القيادة." -#: core/templates/core/index.html:231 +#: core/templates/core/index.html:389 msgid "What Our Customers Say" msgstr "ماذا يقول عملاؤنا" -#: core/templates/core/index.html:232 +#: core/templates/core/index.html:390 #, fuzzy #| msgid "Join thousands of shippers and drivers on MASAR today." msgid "Real stories from shippers and truck owners using MASAR." msgstr "انضم إلى آلاف الشاحنين والسائقين على مسار اليوم." -#: core/templates/core/index.html:269 +#: core/templates/core/index.html:427 msgid "Ready to move your cargo?" msgstr "هل أنت مستعد لنقل شحنتك؟" -#: core/templates/core/index.html:270 +#: core/templates/core/index.html:428 msgid "Join thousands of shippers and drivers on MASAR today." msgstr "انضم إلى آلاف الشاحنين والسائقين على مسار اليوم." -#: core/templates/core/index.html:271 +#: core/templates/core/index.html:429 msgid "Join Now" msgstr "انضم الآن" @@ -1340,8 +1418,11 @@ msgid "Truck Marketplace" msgstr "سوق الشاحنات" #: core/templates/core/marketplace.html:28 -msgid "Browse available trucks and send your shipping offers directly to truck owners." -msgstr "تصفح الشاحنات المتاحة وأرسل عروض الشحن الخاصة بك مباشرة إلى أصحاب الشاحنات." +msgid "" +"Browse available trucks and send your shipping offers directly to truck " +"owners." +msgstr "" +"تصفح الشاحنات المتاحة وأرسل عروض الشحن الخاصة بك مباشرة إلى أصحاب الشاحنات." #: core/templates/core/marketplace.html:43 msgid "Available" @@ -1451,6 +1532,91 @@ msgstr "مدينة الوجهة" msgid "Post Shipment" msgstr "نشر الشحنة" +#: core/templates/core/profile.html:25 +msgid "Edit Profile" +msgstr "تعديل الملف الشخصي" + +#: core/templates/core/profile.html:41 +msgid "Update your profile picture" +msgstr "تحديث صورة الملف الشخصي" + +#: core/templates/core/profile.html:46 +msgid "First Name" +msgstr "الاسم الأول" + +#: core/templates/core/profile.html:53 +msgid "Last Name" +msgstr "اسم العائلة" + +#: core/templates/core/profile.html:68 core/templates/core/profile.html:95 +#: core/templates/core/profile.html:239 core/templates/core/profile.html:254 +#: core/templates/core/profile.html:267 core/templates/core/profile.html:373 +#: core/templates/core/profile.html:376 +msgid "Verified" +msgstr "تم التحقق" + +#: core/templates/core/profile.html:70 core/templates/core/profile.html:97 +#: core/templates/core/profile.html:177 core/templates/core/profile.html:233 +#: core/templates/core/profile.html:248 core/templates/core/profile.html:263 +#: core/templates/core/profile.html:295 core/templates/core/profile.html:333 +#: core/templates/core/profile.html:369 +#: core/templates/registration/verify_otp.html:45 +msgid "Verify" +msgstr "تحقق" + +#: core/templates/core/profile.html:89 +#: core/templates/registration/register.html:32 +msgid "Phone Number" +msgstr "رقم الهاتف" + +#: core/templates/core/profile.html:123 +msgid "Save Changes" +msgstr "حفظ التغييرات" + +#: core/templates/core/profile.html:132 +msgid "Account Information" +msgstr "معلومات الحساب" + +#: core/templates/core/profile.html:134 +#: core/templates/registration/login.html:20 +msgid "Username" +msgstr "اسم المستخدم" + +#: core/templates/core/profile.html:140 +#: core/templates/core/shipment_detail.html:136 +#: core/templates/core/truck_owner_dashboard.html:72 +msgid "Shipper" +msgstr "الشاحن" + +#: core/templates/core/profile.html:142 +#: core/templates/core/shipment_detail.html:146 +msgid "Truck Owner" +msgstr "صاحب الشاحنة" + +#: core/templates/core/profile.html:148 +#: core/templates/core/shipper_dashboard.html:50 +#: core/templates/core/truck_owner_dashboard.html:46 +#, fuzzy +#| msgid "Subscription Plan" +msgid "Subscription" +msgstr "خطة الاشتراك" + +#: core/templates/core/profile.html:152 +msgid "Expires on:" +msgstr "تنتهي في:" + +#: core/templates/core/profile.html:167 +msgid "Enter OTP" +msgstr "أدخل رمز التحقق" + +#: core/templates/core/profile.html:299 +msgid "A code was sent to" +msgstr "تم إرسال رمز إلى" + +#: core/templates/core/profile.html:337 +msgid "A code was sent to WhatsApp number" +msgstr "تم إرسال رمز إلى رقم الواتساب" + #: core/templates/core/receipt.html:18 msgid "Phone:" msgstr "الهاتف:" @@ -1478,7 +1644,9 @@ msgid "Note:" msgstr "ملاحظة:" #: core/templates/core/receipt.html:68 -msgid "This is an electronically generated receipt and does not require a physical signature." +msgid "" +"This is an electronically generated receipt and does not require a physical " +"signature." msgstr "" #: core/templates/core/receipt.html:72 @@ -1549,15 +1717,6 @@ msgstr "الشحنة قيد التنفيذ" msgid "Assigned Truck:" msgstr "الشاحنة المعينة:" -#: core/templates/core/shipment_detail.html:136 -#: core/templates/core/truck_owner_dashboard.html:72 -msgid "Shipper" -msgstr "الشاحن" - -#: core/templates/core/shipment_detail.html:146 -msgid "Truck Owner" -msgstr "صاحب الشاحنة" - #: core/templates/core/shipment_detail.html:162 msgid "WhatsApp Driver" msgstr "واتساب السائق" @@ -1595,13 +1754,6 @@ msgstr "تعليقات" msgid "View History" msgstr "عرض السجل" -#: core/templates/core/shipper_dashboard.html:50 -#: core/templates/core/truck_owner_dashboard.html:46 -#, fuzzy -#| msgid "Subscription Plan" -msgid "Subscription" -msgstr "خطة الاشتراك" - #: core/templates/core/shipper_dashboard.html:53 #: core/templates/core/truck_owner_dashboard.html:49 #, fuzzy @@ -1669,7 +1821,8 @@ msgstr "انتهى الاشتراك" #| msgid "Hello %(name)s, your subscription to MASAR CARGO has expired." msgid "" "\n" -" Hello %(name)s, your subscription to MASAR CARGO has expired.\n" +" Hello %(name)s, your subscription to MASAR CARGO has " +"expired.\n" " " msgstr "مرحباً %(name)s، لقد انتهى اشتراكك في مسار كارغو." @@ -1700,7 +1853,8 @@ msgid "Renew Now" msgstr "تجديد الآن" #: core/templates/core/subscription_expired.html:52 -msgid "Online payment is currently disabled. Please contact support for renewal." +msgid "" +"Online payment is currently disabled. Please contact support for renewal." msgstr "الدفع عبر الإنترنت معطل حالياً. يرجى الاتصال بالدعم للتجديد." #: core/templates/core/subscription_expired.html:61 @@ -1772,7 +1926,7 @@ msgstr "تحديث بيانات الشاحنة" msgid "Register a Truck" msgstr "تسجيل شاحنة" -#: core/templates/core/truck_register.html:47 core/views.py:89 +#: core/templates/core/truck_register.html:47 core/views.py:105 msgid "Please correct the errors below." msgstr "يرجى تصحيح الأخطاء أدناه." @@ -1799,7 +1953,9 @@ msgid "Documents & Photos" msgstr "المستندات والصور" #: core/templates/core/truck_register.html:128 -msgid "Photos will be automatically resized for better performance. PDF files are accepted for documents." +msgid "" +"Photos will be automatically resized for better performance. PDF files are " +"accepted for documents." msgstr "" #: core/templates/core/truck_register.html:151 @@ -1819,20 +1975,16 @@ msgstr "تحديث وإرسال للاعتماد" msgid "Submit Registration" msgstr "إرسال طلب التسجيل" -#: core/templates/registration/login.html:20 -msgid "Username" -msgstr "اسم المستخدم" - -#: core/templates/registration/login.html:24 +#: core/templates/registration/login.html:29 msgid "Password" msgstr "كلمة المرور" -#: core/templates/registration/login.html:30 +#: core/templates/registration/login.html:58 msgid "Don't have an account?" msgstr "ليس لديك حساب؟" -#: core/templates/registration/login.html:30 -#: core/templates/registration/register.html:93 +#: core/templates/registration/login.html:58 +#: core/templates/registration/register.html:115 msgid "Register" msgstr "تسجيل" @@ -1840,23 +1992,19 @@ msgstr "تسجيل" msgid "Create your account" msgstr "أنشئ حسابك" -#: core/templates/registration/register.html:32 -msgid "Phone Number" -msgstr "رقم الهاتف" - #: core/templates/registration/register.html:46 msgid "Select country and enter phone number." msgstr "اختر الدولة وأدخل رقم الهاتف." -#: core/templates/registration/register.html:66 +#: core/templates/registration/register.html:88 msgid "I have read and agree to the" msgstr "لقد قرأت وأوافق على" -#: core/templates/registration/register.html:68 +#: core/templates/registration/register.html:90 msgid "and" msgstr "و" -#: core/templates/registration/register.html:96 +#: core/templates/registration/register.html:118 msgid "Already have an account?" msgstr "لديك حساب بالفعل؟" @@ -1868,211 +2016,290 @@ msgstr "رجوع" msgid "Verify Your Account" msgstr "التحقق من حسابك" -#: core/templates/registration/verify_otp.html:18 -msgid "We have sent a verification code to your WhatsApp number. Please enter it below to complete your registration." -msgstr "لقد أرسلنا رمز تحقق إلى رقم واتساب الخاص بك. يرجى إدخاله أدناه لإكمال عملية التسجيل." +#: core/templates/registration/verify_otp.html:19 +msgid "" +"We have sent a verification code to your email address. Please enter it " +"below to complete your registration." +msgstr "" +"لقد أرسلنا رمز تحقق إلى بريدك الإلكتروني. يرجى إدخاله أدناه لإكمال عملية " +"التسجيل." -#: core/templates/registration/verify_otp.html:20 -msgid "We have sent a verification code to your WhatsApp number. Please enter it below to log in." -msgstr "لقد أرسلنا رمز تحقق إلى رقم واتساب الخاص بك. يرجى إدخاله أدناه لتسجيل الدخول." +#: core/templates/registration/verify_otp.html:21 +msgid "" +"We have sent a verification code to your email address. Please enter it " +"below to log in." +msgstr "" +"لقد أرسلنا رمز تحقق إلى بريدك الإلكتروني. يرجى إدخاله أدناه لتسجيل الدخول." -#: core/templates/registration/verify_otp.html:37 -msgid "Verify" -msgstr "تحقق" +#: core/templates/registration/verify_otp.html:25 +msgid "" +"We have sent a verification code to your WhatsApp number. Please enter it " +"below to complete your registration." +msgstr "" +"لقد أرسلنا رمز تحقق إلى رقم واتساب الخاص بك. يرجى إدخاله أدناه لإكمال عملية " +"التسجيل." -#: core/templates/registration/verify_otp.html:41 +#: core/templates/registration/verify_otp.html:27 +msgid "" +"We have sent a verification code to your WhatsApp number. Please enter it " +"below to log in." +msgstr "" +"لقد أرسلنا رمز تحقق إلى رقم واتساب الخاص بك. يرجى إدخاله أدناه لتسجيل الدخول." + +#: core/templates/registration/verify_otp.html:49 msgid "Didn't receive the code?" msgstr "لم تستلم الرمز؟" -#: core/templates/registration/verify_otp.html:41 +#: core/templates/registration/verify_otp.html:49 msgid "Try again" msgstr "حاول مرة أخرى" -#: core/views.py:82 -#, python-format -msgid "Your verification code for MASAR CARGO is: %(code)s" -msgstr "رمز التحقق الخاص بك لـ MASAR CARGO هو: %(code)s" +#: core/views.py:92 core/views.py:184 +msgid "A verification code has been sent to your email." +msgstr "تم إرسال رمز التحقق إلى بريدك الإلكتروني." -#: core/views.py:84 core/views.py:162 +#: core/views.py:95 core/views.py:187 +msgid "Failed to send verification code to your email." +msgstr "فشل إرسال رمز التحقق إلى بريدك الإلكتروني." + +#: core/views.py:100 core/views.py:197 msgid "A verification code has been sent to your WhatsApp." msgstr "تم إرسال رمز التحقق إلى واتساب الخاص بك." -#: core/views.py:87 +#: core/views.py:103 msgid "Failed to send verification code. Please check your phone number." msgstr "فشل إرسال رمز التحقق. يرجى التحقق من رقم هاتفك." -#: core/views.py:135 +#: core/views.py:157 msgid "Registration successful. Welcome!" msgstr "تم التسجيل بنجاح. مرحباً بك!" -#: core/views.py:138 core/views.py:199 +#: core/views.py:160 core/views.py:236 msgid "Invalid or expired verification code." msgstr "رمز تحقق غير صالح أو منتهي الصلاحية." -#: core/views.py:151 +#: core/views.py:180 +msgid "" +"Your account does not have an email address. Please use WhatsApp or contact " +"admin." +msgstr "" +"حسابك لا يحتوي على بريد إلكتروني. يرجى استخدام واتساب أو التواصل مع المسؤول." + +#: core/views.py:190 msgid "Your account does not have a phone number. Please contact admin." msgstr "حسابك لا يحتوي على رقم هاتف. يرجى الاتصال بالمسؤول." -#: core/views.py:160 +#: core/views.py:195 #, python-format msgid "Your login verification code for MASAR CARGO is: %(code)s" msgstr "رمز التحقق الخاص بك لتسجيل الدخول لـ MASAR CARGO هو: %(code)s" -#: core/views.py:167 +#: core/views.py:200 msgid "Failed to send verification code. Please check your connection." msgstr "فشل إرسال رمز التحقق. يرجى التحقق من اتصالك." -#: core/views.py:169 +#: core/views.py:202 msgid "Invalid username or password." msgstr "اسم المستخدم أو كلمة المرور غير صالحة." -#: core/views.py:196 +#: core/views.py:233 msgid "Logged in successfully!" msgstr "تم تسجيل الدخول بنجاح!" -#: core/views.py:271 -#, python-format -msgid "New Truck Registration: %(owner)s registered a truck with plate %(plate)s. Please review it in the admin dashboard." -msgstr "تسجيل شاحنة جديدة: قام %(owner)s بتسجيل شاحنة برقم لوحة %(plate)s. يرجى مراجعتها في لوحة تحكم المسؤول." +#: core/views.py:249 +#, fuzzy +#| msgid "Offer sent successfully!" +msgid "Profile updated successfully!" +msgstr "تم إرسال العرض بنجاح!" -#: core/views.py:276 +#: core/views.py:322 +#, python-format +msgid "" +"New Truck Registration: %(owner)s registered a truck with plate %(plate)s. " +"Please review it in the admin dashboard." +msgstr "" +"تسجيل شاحنة جديدة: قام %(owner)s بتسجيل شاحنة برقم لوحة %(plate)s. يرجى " +"مراجعتها في لوحة تحكم المسؤول." + +#: core/views.py:327 msgid "Truck registered successfully! It will be visible after admin approval." msgstr "تم تسجيل الشاحنة بنجاح! ستكون مرئية بعد اعتماد المسؤول." -#: core/views.py:279 +#: core/views.py:330 msgid "There was an error in your registration. Please check the form." msgstr "حدث خطأ في التسجيل. يرجى التحقق من النموذج." -#: core/views.py:299 +#: core/views.py:350 #, python-format -msgid "Truck Update: %(owner)s updated truck with plate %(plate)s. Please review it again in the admin dashboard." -msgstr "تحديث شاحنة: قام %(owner)s بتحديث بيانات الشاحنة ذات رقم لوحة %(plate)s. يرجى مراجعتها مرة أخرى في لوحة تحكم المسؤول." +msgid "" +"Truck Update: %(owner)s updated truck with plate %(plate)s. Please review it " +"again in the admin dashboard." +msgstr "" +"تحديث شاحنة: قام %(owner)s بتحديث بيانات الشاحنة ذات رقم لوحة %(plate)s. " +"يرجى مراجعتها مرة أخرى في لوحة تحكم المسؤول." -#: core/views.py:304 +#: core/views.py:355 msgid "Truck data updated successfully! It will be reviewed by admin again." msgstr "تم تحديث بيانات الشاحنة بنجاح! سيتم مراجعتها من قبل المسؤول مرة أخرى." -#: core/views.py:307 +#: core/views.py:358 msgid "There was an error updating your truck. Please check the form." msgstr "حدث خطأ أثناء تحديث شاحنتك. يرجى التحقق من النموذج." -#: core/views.py:324 +#: core/views.py:375 #, python-format -msgid "Your truck (%(plate)s) has been approved! You can now receive offers for shipments." +msgid "" +"Your truck (%(plate)s) has been approved! You can now receive offers for " +"shipments." msgstr "تمت الموافقة على شاحنتك (%(plate)s)! يمكنك الآن تلقي عروض للشحنات." -#: core/views.py:327 +#: core/views.py:378 msgid "Truck approved successfully!" msgstr "تم اعتماد الشاحنة بنجاح!" -#: core/views.py:338 +#: core/views.py:389 msgid "Truck has been suspended." msgstr "تم تعليق الشاحنة." -#: core/views.py:353 -msgid "Shipment posted successfully! It is now open for bids or you can browse trucks to send it as an offer." -msgstr "تم نشر الشحنة بنجاح! هي الآن مفتوحة للمزايدة أو يمكنك تصفح الشاحنات لإرسالها كعرض.تم نشر الشحنة بنجاح! هي الآن مفتوحة للعروض أو يمكنك تصفح الشاحنات لإرسالها كعرض." +#: core/views.py:404 +msgid "" +"Shipment posted successfully! It is now open for bids or you can browse " +"trucks to send it as an offer." +msgstr "" +"تم نشر الشحنة بنجاح! هي الآن مفتوحة للمزايدة أو يمكنك تصفح الشاحنات لإرسالها " +"كعرض.تم نشر الشحنة بنجاح! هي الآن مفتوحة للعروض أو يمكنك تصفح الشاحنات " +"لإرسالها كعرض." -#: core/views.py:357 +#: core/views.py:408 msgid "Please correct the errors in the form." msgstr "يرجى تصحيح الأخطاء في النموذج." -#: core/views.py:408 +#: core/views.py:459 #, python-format -msgid "New offer received for your truck (%(plate)s)! Route: %(origin)s to %(dest)s. Amount: %(amount)s" -msgstr "تم استلام عرض جديد لشاحنتك (%(plate)s)! المسار: %(origin)s إلى %(dest)s. المبلغ: %(amount)sتم استلام عرض جديد لشاحنتك (%(plate)s)! المسار: %(origin)s إلى %(dest)s. المبلغ: %(amount)s" +msgid "" +"New offer received for your truck (%(plate)s)! Route: %(origin)s to " +"%(dest)s. Amount: %(amount)s" +msgstr "" +"تم استلام عرض جديد لشاحنتك (%(plate)s)! المسار: %(origin)s إلى %(dest)s. " +"المبلغ: %(amount)sتم استلام عرض جديد لشاحنتك (%(plate)s)! المسار: %(origin)s " +"إلى %(dest)s. المبلغ: %(amount)s" -#: core/views.py:411 +#: core/views.py:462 msgid "Offer sent successfully!" msgstr "تم إرسال العرض بنجاح!" -#: core/views.py:415 +#: core/views.py:466 msgid "Error sending offer. Please check the form." msgstr "خطأ في إرسال العرض. يرجى التحقق من النموذج." -#: core/views.py:437 +#: core/views.py:488 msgid "You are not authorized to accept this offer." msgstr "أنت غير مخول لقبول هذا العرض." -#: core/views.py:452 +#: core/views.py:503 #, python-format -msgid "Your offer for truck %(plate)s (%(origin)s to %(dest)s) has been accepted!" +msgid "" +"Your offer for truck %(plate)s (%(origin)s to %(dest)s) has been accepted!" msgstr "تم قبول عرضك للشاحنة %(plate)s (%(origin)s إلى %(dest)s)!" -#: core/views.py:455 +#: core/views.py:506 msgid "Offer accepted! Shipment is now in progress." msgstr "تم قبول العرض! الشحنة قيد التنفيذ الآن." -#: core/views.py:467 +#: core/views.py:518 msgid "Offer rejected." msgstr "تم رفض العرض." -#: core/views.py:475 +#: core/views.py:526 msgid "Privacy policy is coming soon." msgstr "سياسة الخصوصية ستتوفر قريباً." -#: core/views.py:485 +#: core/views.py:536 msgid "Terms of service are soon." msgstr "شروط الخدمة ستتوفر قريباً." -#: core/views.py:532 +#: core/views.py:583 msgid "Online payment is currently disabled. Please contact support." msgstr "الدفع عبر الإنترنت معطل حالياً. يرجى الاتصال بالدعم." -#: core/views.py:581 +#: core/views.py:632 msgid "Failed to initiate payment. Please try again later." msgstr "فشل بدء الدفع. يرجى المحاولة مرة أخرى لاحقاً." -#: core/views.py:610 +#: core/views.py:661 #, fuzzy, python-format -#| msgid "Your subscription for MASAR CARGO has been successfully renewed! Your new expiry date is %(date)s. Thank you for using our service." -msgid "Your subscription for MASAR CARGO has been successfully renewed! Your new expiry date is %(date)s. You can view your receipt here: %(url)s" -msgstr "تم تجديد اشتراكك في مسار للشحن بنجاح! تاريخ انتهاء اشتراكك الجديد هو %(date)s. شكراً لاستخدامك خدمتنا." +#| msgid "" +#| "Your subscription for MASAR CARGO has been successfully renewed! Your new " +#| "expiry date is %(date)s. Thank you for using our service." +msgid "" +"Your subscription for MASAR CARGO has been successfully renewed! Your new " +"expiry date is %(date)s. You can view your receipt here: %(url)s" +msgstr "" +"تم تجديد اشتراكك في مسار للشحن بنجاح! تاريخ انتهاء اشتراكك الجديد هو " +"%(date)s. شكراً لاستخدامك خدمتنا." -#: core/views.py:620 +#: core/views.py:671 #, fuzzy #| msgid "Subscription Renewed - MASAR CARGO" msgid "Subscription Activated - MASAR CARGO" msgstr "تم تجديد الاشتراك - مسار للشحن" -#: core/views.py:650 +#: core/views.py:701 msgid "Payment successful! Your subscription is now active." msgstr "تم الدفع بنجاح! اشتراكك نشط الآن." -#: core/views.py:656 +#: core/views.py:707 #, python-format msgid "Payment was not successful. Status: %(status)s" msgstr "لم يكن الدفع ناجحاً. الحالة: %(status)s" -#: core/views.py:658 +#: core/views.py:709 msgid "Failed to verify payment status." msgstr "فشل التحقق من حالة الدفع." -#: core/views.py:664 +#: core/views.py:715 msgid "Payment was cancelled." msgstr "تم إلغاء الدفع." -#: core/views.py:728 +#: core/views.py:779 msgid "This is already a refund transaction." msgstr "هذا البريد الإلكتروني مستخدم بالفعل." -#: core/views.py:741 +#: core/views.py:792 #, python-format msgid "Refund issued successfully! Receipt: %(receipt)s" msgstr "تم إصدار الاسترداد بنجاح! الإيصال: %(receipt)s" -#: core/views.py:754 +#: core/views.py:805 msgid "Application settings updated successfully." msgstr "تم تحديث إعدادات التطبيق بنجاح." -#: core/views.py:767 +#: core/views.py:818 msgid "Your message has been sent successfully! We will get back to you soon." msgstr "تم إرسال رسالتك بنجاح! سنقوم بالرد عليك قريباً." -#: core/views.py:770 +#: core/views.py:821 msgid "There was an error in your form. Please check the fields below." msgstr "حدث خطأ أثناء تحديث شاحنتك. يرجى التحقق من النموذج." +#: core/views.py:897 +msgid "Failed to send email" +msgstr "فشل في إرسال البريد الإلكتروني" + +#: core/views.py:902 +#, fuzzy, python-format +#| msgid "Your verification code for MASAR CARGO is: %(code)s" +msgid "Your verification code is: %(code)s" +msgstr "رمز التحقق الخاص بك لـ MASAR CARGO هو: %(code)s" + +#: core/views.py:906 +msgid "Failed to send WhatsApp message" +msgstr "فشل في إرسال رسالة واتساب" + +#: core/views.py:938 +msgid "Invalid or expired code" +msgstr "رمز غير صحيح أو منتهي الصلاحية" + #~ msgid "التفاصيل باللغة العربية" #~ msgstr "التفاصيل باللغة العربية" @@ -2088,69 +2315,16 @@ msgstr "حدث خطأ أثناء تحديث شاحنتك. يرجى التحقق #~ msgid "Registered Trucks" #~ msgstr "الشاحنات المسجلة" -#~ msgid "To continue using our services, please renew your subscription. You can contact our support team for renewal details." -#~ msgstr "لمواصلة استخدام خدماتنا، يرجى تجديد اشتراكك. يمكنك الاتصال بفريق الدعم لدينا للحصول على تفاصيل التجديد." +#~ msgid "" +#~ "To continue using our services, please renew your subscription. You can " +#~ "contact our support team for renewal details." +#~ msgstr "" +#~ "لمواصلة استخدام خدماتنا، يرجى تجديد اشتراكك. يمكنك الاتصال بفريق الدعم " +#~ "لدينا للحصول على تفاصيل التجديد." #~ msgid "Contact for Renewal" #~ msgstr "الاتصال للتجديد" -msgid "Chat with MASAR AI" -msgstr "تحدث مع مسار الذكي" - -msgid "Hello! I am MASAR, your AI assistant. How can I help you today?" -msgstr "أهلاً بك! أنا مسار، مساعدك الذكي. كيف يمكنني مساعدتك اليوم؟" - -msgid "Type a message..." -msgstr "اكتب رسالة..." - -msgid "Talk to a Human" -msgstr "تحدث مع شخص حقيقي" - -msgid "Receive verification code via" -msgstr "استلام رمز التحقق عبر" - -msgid "WhatsApp" -msgstr "واتساب" - -msgid "A verification code has been sent to your email." -msgstr "تم إرسال رمز التحقق إلى بريدك الإلكتروني." - -msgid "Failed to send verification code to your email." -msgstr "فشل إرسال رمز التحقق إلى بريدك الإلكتروني." - -msgid "Your account does not have an email address. Please use WhatsApp or contact admin." -msgstr "حسابك لا يحتوي على بريد إلكتروني. يرجى استخدام واتساب أو التواصل مع المسؤول." - -msgid "We have sent a verification code to your email address. Please enter it below to complete your registration." -msgstr "لقد أرسلنا رمز تحقق إلى بريدك الإلكتروني. يرجى إدخاله أدناه لإكمال عملية التسجيل." - -msgid "We have sent a verification code to your email address. Please enter it below to log in." -msgstr "لقد أرسلنا رمز تحقق إلى بريدك الإلكتروني. يرجى إدخاله أدناه لتسجيل الدخول." - -msgid "My Profile" -msgstr "ملفي الشخصي" - -msgid "Edit Profile" -msgstr "تعديل الملف الشخصي" - -msgid "Update your profile picture" -msgstr "تحديث صورة الملف الشخصي" - -msgid "Profile Picture" -msgstr "صورة الملف الشخصي" - -msgid "Save Changes" -msgstr "حفظ التغييرات" - -msgid "Account Information" -msgstr "معلومات الحساب" - -msgid "Expires on:" -msgstr "تنتهي في:" - -msgid "First Name" -msgstr "الاسم الأول" - -msgid "Last Name" -msgstr "اسم العائلة" +msgid "At least one contact method (Email or Phone) must be verified." +msgstr "يجب التحقق من وسيلة اتصال واحدة على الأقل (البريد الإلكتروني أو الهاتف)."