add ed tetimonials

This commit is contained in:
Flatlogic Bot 2026-01-24 09:11:49 +00:00
parent da443cf388
commit 049e1849e1
12 changed files with 312 additions and 110 deletions

View File

@ -7,7 +7,11 @@ from django.utils.translation import gettext_lazy as _
from django.utils import timezone from django.utils import timezone
from django.utils.html import format_html from django.utils.html import format_html
import os import os
from .models import Profile, Truck, Shipment, Bid, Message, WhatsAppConfig, Country, City, TruckType, AppSetting, Banner, HomeSection, ContactMessage from .models import (
Profile, Truck, Shipment, Bid, Message, WhatsAppConfig,
Country, City, TruckType, AppSetting, Banner, HomeSection,
ContactMessage, Testimonial
)
from .whatsapp import send_whatsapp_message from .whatsapp import send_whatsapp_message
@admin.register(Country) @admin.register(Country)
@ -198,3 +202,17 @@ class ContactMessageAdmin(admin.ModelAdmin):
search_fields = ('subject', 'name', 'email', 'message') search_fields = ('subject', 'name', 'email', 'message')
readonly_fields = ('created_at',) readonly_fields = ('created_at',)
list_editable = ('is_read',) list_editable = ('is_read',)
@admin.register(Testimonial)
class TestimonialAdmin(admin.ModelAdmin):
list_display = ('name', 'rating', 'order', 'is_active', 'created_at')
list_editable = ('order', 'is_active')
search_fields = ('name', 'name_ar', 'content', 'content_ar', 'role', 'role_ar')
list_filter = ('rating', 'is_active')
readonly_fields = ('image_preview',)
def image_preview(self, obj):
if obj.image:
return format_html('<img src="{}" style="max-height: 100px; border-radius: 50%;"/>', obj.image.url)
return "-"
image_preview.short_description = _("Image Preview")

View File

@ -0,0 +1,35 @@
# Generated by Django 5.2.7 on 2026-01-24 09:09
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('core', '0023_contactmessage'),
]
operations = [
migrations.CreateModel(
name='Testimonial',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=100, verbose_name='Customer Name (EN)')),
('name_ar', models.CharField(blank=True, max_length=100, verbose_name='Customer Name (AR)')),
('role', models.CharField(blank=True, max_length=100, verbose_name='Customer Role (EN)')),
('role_ar', models.CharField(blank=True, max_length=100, verbose_name='Customer Role (AR)')),
('content', models.TextField(verbose_name='Testimony (EN)')),
('content_ar', models.TextField(blank=True, verbose_name='Testimony (AR)')),
('rating', models.PositiveIntegerField(default=5, verbose_name='Rating (1-5)')),
('image', models.ImageField(blank=True, null=True, upload_to='testimonials/', verbose_name='Customer Image')),
('is_active', models.BooleanField(default=True, verbose_name='Is Active')),
('order', models.PositiveIntegerField(default=0, verbose_name='Order')),
('created_at', models.DateTimeField(auto_now_add=True)),
],
options={
'verbose_name': 'Testimonial',
'verbose_name_plural': 'Testimonials',
'ordering': ['order', '-created_at'],
},
),
]

View File

@ -491,3 +491,42 @@ class ContactMessage(models.Model):
def __str__(self): def __str__(self):
return f"{self.subject} - {self.name}" return f"{self.subject} - {self.name}"
class Testimonial(models.Model):
name = models.CharField(_('Customer Name (EN)'), max_length=100)
name_ar = models.CharField(_('Customer Name (AR)'), max_length=100, blank=True)
role = models.CharField(_('Customer Role (EN)'), max_length=100, blank=True)
role_ar = models.CharField(_('Customer Role (AR)'), max_length=100, blank=True)
content = models.TextField(_('Testimony (EN)'))
content_ar = models.TextField(_('Testimony (AR)'), blank=True)
rating = models.PositiveIntegerField(_('Rating (1-5)'), default=5)
image = models.ImageField(_('Customer Image'), upload_to='testimonials/', blank=True, null=True)
is_active = models.BooleanField(_('Is Active'), default=True)
order = models.PositiveIntegerField(_('Order'), default=0)
created_at = models.DateTimeField(auto_now_add=True)
class Meta:
verbose_name = _('Testimonial')
verbose_name_plural = _('Testimonials')
ordering = ['order', '-created_at']
def __str__(self):
return self.name
@property
def display_name(self):
if get_language() == 'ar' and self.name_ar:
return self.name_ar
return self.name
@property
def display_role(self):
if get_language() == 'ar' and self.role_ar:
return self.role_ar
return self.role
@property
def display_content(self):
if get_language() == 'ar' and self.content_ar:
return self.content_ar
return self.content

View File

@ -223,6 +223,45 @@
</div> </div>
</section> </section>
{% if testimonials %}
<!-- Testimonials Section -->
<section class="py-5 bg-light">
<div class="container py-5">
<div class="text-center mb-5">
<h2 class="fw-bold">{% trans "What Our Customers Say" %}</h2>
<p class="text-muted">{% trans "Real stories from shippers and truck owners using MASAR." %}</p>
</div>
<div class="row g-4">
{% for testimonial in testimonials %}
<div class="col-md-4">
<div class="card h-100 border-0 shadow-sm p-4">
<div class="mb-3 text-warning">
{% for i in "12345" %}
<i class="fa-solid fa-star {% if forloop.counter > testimonial.rating %}text-muted{% endif %}"></i>
{% endfor %}
</div>
<p class="mb-4 font-italic">"{{ testimonial.display_content }}"</p>
<div class="d-flex align-items-center mt-auto">
{% if testimonial.image %}
<img src="{{ testimonial.image.url }}" alt="{{ testimonial.display_name }}" class="rounded-circle me-3" style="width: 50px; height: 50px; object-fit: cover;">
{% else %}
<div class="bg-primary text-white rounded-circle d-flex align-items-center justify-content-center me-3" style="width: 50px; height: 50px;">
<span class="fw-bold">{{ testimonial.display_name|slice:":1" }}</span>
</div>
{% endif %}
<div class="ms-2">
<h6 class="fw-bold mb-0">{{ testimonial.display_name }}</h6>
<small class="text-muted">{{ testimonial.display_role }}</small>
</div>
</div>
</div>
</div>
{% endfor %}
</div>
</div>
</section>
{% endif %}
<!-- Call to Action --> <!-- Call to Action -->
<section class="py-5"> <section class="py-5">
<div class="container"> <div class="container">
@ -234,4 +273,4 @@
</div> </div>
</section> </section>
{% endblock %} {% endblock %}

View File

@ -5,7 +5,10 @@ from django.contrib.auth.decorators import login_required
from django.contrib.auth import login, authenticate, logout from django.contrib.auth import login, authenticate, logout
from django.utils import timezone from django.utils import timezone
from django.urls import reverse from django.urls import reverse
from .models import Profile, Truck, Shipment, Bid, Message, OTPCode, Country, City, AppSetting, Banner, HomeSection, Transaction, ContactMessage from .models import (
Profile, Truck, Shipment, Bid, Message, OTPCode, Country, City,
AppSetting, Banner, HomeSection, Transaction, ContactMessage, Testimonial
)
from .forms import ( from .forms import (
TruckForm, ShipmentForm, BidForm, UserRegistrationForm, TruckForm, ShipmentForm, BidForm, UserRegistrationForm,
OTPVerifyForm, ShipperOfferForm, RenewSubscriptionForm, AppSettingForm, OTPVerifyForm, ShipperOfferForm, RenewSubscriptionForm, AppSettingForm,
@ -32,10 +35,12 @@ def home(request):
"""Render the landing screen for MASAR CARGO.""" """Render the landing screen for MASAR CARGO."""
banners = Banner.objects.filter(is_active=True) banners = Banner.objects.filter(is_active=True)
home_sections = HomeSection.objects.filter(is_active=True).order_by('order') home_sections = HomeSection.objects.filter(is_active=True).order_by('order')
testimonials = Testimonial.objects.filter(is_active=True).order_by('order')
context = { context = {
"deployment_timestamp": timezone.now().timestamp(), "deployment_timestamp": timezone.now().timestamp(),
"banners": banners, "banners": banners,
"home_sections": home_sections, "home_sections": home_sections,
"testimonials": testimonials,
} }
return render(request, "core/index.html", context) return render(request, "core/index.html", context)
@ -755,4 +760,4 @@ def contact(request):
return render(request, 'core/contact.html', { return render(request, 'core/contact.html', {
'form': form, 'form': form,
'app_settings': app_settings 'app_settings': app_settings
}) })

Binary file not shown.

View File

@ -2,7 +2,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-01-24 08:46+0000\n" "POT-Creation-Date: 2026-01-24 09:10+0000\n"
"PO-Revision-Date: 2026-01-23 10:45+0000\n" "PO-Revision-Date: 2026-01-23 10:45+0000\n"
"Last-Translator: Gemini\n" "Last-Translator: Gemini\n"
"Language-Team: Arabic\n" "Language-Team: Arabic\n"
@ -21,123 +21,131 @@ msgstr "الإنجليزية"
msgid "Arabic" msgid "Arabic"
msgstr "العربية" msgstr "العربية"
#: core/admin.py:37 #: core/admin.py:41
msgid "No Plan" msgid "No Plan"
msgstr "بدون خطة" msgstr "بدون خطة"
#: core/admin.py:40 #: core/admin.py:44
msgid "Expired" msgid "Expired"
msgstr "منتهي" msgstr "منتهي"
#: core/admin.py:47 #: core/admin.py:51
#, fuzzy #, fuzzy
#| msgid "Expired" #| msgid "Expired"
msgid "No Expiry" msgid "No Expiry"
msgstr "منتهي" msgstr "منتهي"
#: core/admin.py:51 #: core/admin.py:55
msgid "Expiring soon" msgid "Expiring soon"
msgstr "تنتهي قريبا" msgstr "تنتهي قريبا"
#: core/admin.py:51 #: core/admin.py:55
msgid "days" msgid "days"
msgstr "أيام" msgstr "أيام"
#: core/admin.py:53 core/templates/core/shipper_dashboard.html:52 #: core/admin.py:57 core/templates/core/shipper_dashboard.html:52
#: core/templates/core/truck_owner_dashboard.html:48 #: core/templates/core/truck_owner_dashboard.html:48
msgid "Active" msgid "Active"
msgstr "نشط" msgstr "نشط"
#: core/admin.py:55 core/admin.py:170 #: core/admin.py:59 core/admin.py:174
msgid "Subscription Status" msgid "Subscription Status"
msgstr "حالة الاشتراك" msgstr "حالة الاشتراك"
#: core/admin.py:68 #: core/admin.py:72
#, fuzzy #, fuzzy
#| msgid "Truck Picture" #| msgid "Truck Picture"
msgid "Truck Picture Preview" msgid "Truck Picture Preview"
msgstr "صورة الشاحنة" msgstr "صورة الشاحنة"
#: core/admin.py:78 #: core/admin.py:82
msgid "View PDF Document" msgid "View PDF Document"
msgstr "عرض مستند PDF" msgstr "عرض مستند PDF"
#: core/admin.py:79 #: core/admin.py:83
#, fuzzy #, fuzzy
#| msgid "View Details" #| msgid "View Details"
msgid "View File" msgid "View File"
msgstr "عرض التفاصيل" msgstr "عرض التفاصيل"
#: core/admin.py:83 #: core/admin.py:87
#, fuzzy #, fuzzy
#| msgid "Registration (Front Face)" #| msgid "Registration (Front Face)"
msgid "Registration Front Preview" msgid "Registration Front Preview"
msgstr "واجهة استمارة السيارة" msgstr "واجهة استمارة السيارة"
#: core/admin.py:87 #: core/admin.py:91
#, fuzzy #, fuzzy
#| msgid "Registration (Back Face)" #| msgid "Registration (Back Face)"
msgid "Registration Back Preview" msgid "Registration Back Preview"
msgstr "خلفية استمارة السيارة" msgstr "خلفية استمارة السيارة"
#: core/admin.py:91 #: core/admin.py:95
#, fuzzy #, fuzzy
#| msgid "Driver License (Front Face)" #| msgid "Driver License (Front Face)"
msgid "Driver License Front Preview" msgid "Driver License Front Preview"
msgstr "واجهة رخصة القيادة" msgstr "واجهة رخصة القيادة"
#: core/admin.py:95 #: core/admin.py:99
#, fuzzy #, fuzzy
#| msgid "Driver License (Back Face)" #| msgid "Driver License (Back Face)"
msgid "Driver License Back Preview" msgid "Driver License Back Preview"
msgstr "خلفية رخصة القيادة" msgstr "خلفية رخصة القيادة"
#: core/admin.py:99 #: core/admin.py:103
#, fuzzy #, fuzzy
#| msgid "Details" #| msgid "Details"
msgid "Details (EN)" msgid "Details (EN)"
msgstr "التفاصيل" msgstr "التفاصيل"
#: core/admin.py:100 #: core/admin.py:104
#, fuzzy #, fuzzy
#| msgid "Details" #| msgid "Details"
msgid "Details (AR)" msgid "Details (AR)"
msgstr "التفاصيل" msgstr "التفاصيل"
#: core/admin.py:101 #: core/admin.py:105
#, fuzzy #, fuzzy
#| msgid "Secure Documentation" #| msgid "Secure Documentation"
msgid "Pictures & Documents" msgid "Pictures & Documents"
msgstr "توثيق آمن" msgstr "توثيق آمن"
#: core/admin.py:151 #: core/admin.py:155
msgid "Test message sent successfully!" msgid "Test message sent successfully!"
msgstr "تم نشر الشحنة بنجاح!" msgstr "تم نشر الشحنة بنجاح!"
#: core/admin.py:153 #: core/admin.py:157
msgid "Failed to send test message. Check your API credentials and logs." msgid "Failed to send test message. Check your API credentials and logs."
msgstr "فشل إرسال رسالة الاختبار. تحقق من بيانات اعتماد واجهة برمجة التطبيقات والسجلات." msgstr ""
"فشل إرسال رسالة الاختبار. تحقق من بيانات اعتماد واجهة برمجة التطبيقات "
"والسجلات."
#: core/admin.py:158 #: core/admin.py:162
msgid "Send Test WhatsApp Message" msgid "Send Test WhatsApp Message"
msgstr "إرسال رسالة واتساب تجريبية" msgstr "إرسال رسالة واتساب تجريبية"
#: core/admin.py:168 core/templates/core/shipment_detail.html:134 #: core/admin.py:172 core/templates/core/shipment_detail.html:134
msgid "Contact Information" msgid "Contact Information"
msgstr "معلومات الاتصال" msgstr "معلومات الاتصال"
#: core/admin.py:169 #: core/admin.py:173
msgid "Legal" msgid "Legal"
msgstr "قانوني" msgstr "قانوني"
#: core/admin.py:171 #: core/admin.py:175
msgid "Shipper Subscription Fees" msgid "Shipper Subscription Fees"
msgstr "رسوم اشتراك الشاحن" msgstr "رسوم اشتراك الشاحن"
#: core/admin.py:172 #: core/admin.py:176
msgid "Truck Owner Subscription Fees" msgid "Truck Owner Subscription Fees"
msgstr "رسوم اشتراك صاحب الشاحنة" msgstr "رسوم اشتراك صاحب الشاحنة"
#: core/admin.py:218
#, fuzzy
#| msgid "No image provided"
msgid "Image Preview"
msgstr "لم يتم توفير صورة"
#: core/forms.py:9 #: core/forms.py:9
msgid "Confirm Email" msgid "Confirm Email"
msgstr "تأكيد البريد الإلكتروني" msgstr "تأكيد البريد الإلكتروني"
@ -224,7 +232,6 @@ msgid "Comments"
msgstr "تعليقات" msgstr "تعليقات"
#: core/forms.py:197 core/templates/core/contact.html:62 #: core/forms.py:197 core/templates/core/contact.html:62
#| msgid "Country Name"
msgid "Your Name" msgid "Your Name"
msgstr "اسم الدولة" msgstr "اسم الدولة"
@ -235,7 +242,6 @@ msgid "Your Email"
msgstr "تأكيد البريد الإلكتروني" msgstr "تأكيد البريد الإلكتروني"
#: core/forms.py:199 core/models.py:482 core/templates/core/contact.html:76 #: core/forms.py:199 core/models.py:482 core/templates/core/contact.html:76
#| msgid "Reject"
msgid "Subject" msgid "Subject"
msgstr "رفض" msgstr "رفض"
@ -343,15 +349,15 @@ msgstr "اللون (بالإنجليزية)"
msgid "Truck Type (AR)" msgid "Truck Type (AR)"
msgstr "نوع الشاحنة" msgstr "نوع الشاحنة"
#: core/models.py:124 #: core/models.py:124 core/templates/core/truck_register.html:89
msgid "Model (AR)" msgid "Model (AR)"
msgstr "الموديل" msgstr "الموديل"
#: core/models.py:125 #: core/models.py:125 core/templates/core/truck_register.html:94
msgid "Load Capacity (AR)" msgid "Load Capacity (AR)"
msgstr "الحمولة" msgstr "الحمولة"
#: core/models.py:126 #: core/models.py:126 core/templates/core/truck_register.html:99
msgid "Color (AR)" msgid "Color (AR)"
msgstr "اللون" msgstr "اللون"
@ -449,7 +455,7 @@ msgstr "رمز Wablas API"
msgid "Wablas Secret Key" msgid "Wablas Secret Key"
msgstr "مفتاح Wablas السري" msgstr "مفتاح Wablas السري"
#: core/models.py:296 core/models.py:341 core/models.py:379 #: core/models.py:296 core/models.py:341 core/models.py:379 core/models.py:504
msgid "Is Active" msgid "Is Active"
msgstr "نشط" msgstr "نشط"
@ -490,12 +496,12 @@ msgid "Contact Address"
msgstr "عنوان التواصل" msgstr "عنوان التواصل"
#: core/models.py:314 core/templates/base.html:161 #: core/models.py:314 core/templates/base.html:161
#: core/templates/registration/register.html:67 core/views.py:461 #: core/templates/registration/register.html:67 core/views.py:466
msgid "Terms of Service" msgid "Terms of Service"
msgstr "شروط الخدمة" msgstr "شروط الخدمة"
#: core/models.py:315 core/templates/base.html:160 #: core/models.py:315 core/templates/base.html:160
#: core/templates/registration/register.html:69 core/views.py:451 #: core/templates/registration/register.html:69 core/views.py:456
msgid "Privacy Policy" msgid "Privacy Policy"
msgstr "سياسة الخصوصية" msgstr "سياسة الخصوصية"
@ -559,7 +565,7 @@ msgstr "رابط"
msgid "Internal or external URL" msgid "Internal or external URL"
msgstr "رابط داخلي أو خارجي" msgstr "رابط داخلي أو خارجي"
#: core/models.py:342 core/models.py:378 #: core/models.py:342 core/models.py:378 core/models.py:505
msgid "Order" msgid "Order"
msgstr "الترتيب" msgstr "الترتيب"
@ -691,6 +697,56 @@ msgstr "عنوان التواصل"
msgid "Contact Messages" msgid "Contact Messages"
msgstr "عنوان التواصل" msgstr "عنوان التواصل"
#: core/models.py:496
#, fuzzy
#| msgid "Name (EN)"
msgid "Customer Name (EN)"
msgstr "الموديل (بالإنجليزية)"
#: core/models.py:497
#, fuzzy
#| msgid "Name (AR)"
msgid "Customer Name (AR)"
msgstr "الموديل"
#: core/models.py:498
msgid "Customer Role (EN)"
msgstr "وظيفة العميل (EN)"
#: core/models.py:499
msgid "Customer Role (AR)"
msgstr "وظيفة العميل (AR)"
#: core/models.py:500
#, fuzzy
#| msgid "Details"
msgid "Testimony (EN)"
msgstr "التفاصيل"
#: core/models.py:501
#, fuzzy
#| msgid "Details"
msgid "Testimony (AR)"
msgstr "التفاصيل"
#: core/models.py:502
msgid "Rating (1-5)"
msgstr "التقييم (1-5)"
#: core/models.py:503
#, fuzzy
#| msgid "Banner Image"
msgid "Customer Image"
msgstr "صورة البانر"
#: core/models.py:509
msgid "Testimonial"
msgstr "شهادة عميل"
#: core/models.py:510
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:57
#: core/templates/core/admin_dashboard.html:11 #: core/templates/core/admin_dashboard.html:11
#: core/templates/core/article_detail.html:11 #: core/templates/core/article_detail.html:11
@ -1121,24 +1177,23 @@ msgstr "اتصل بنا"
msgid "" msgid ""
"Have questions about our services or need assistance? Fill out the form and " "Have questions about our services or need assistance? Fill out the form and "
"our team will get back to you shortly." "our team will get back to you shortly."
msgstr "لديك أسئلة حول خدماتنا أو تحتاج إلى مساعدة؟ املأ النموذج وسيقوم فريقنا بالرد عليك قريباً." msgstr ""
"لديك أسئلة حول خدماتنا أو تحتاج إلى مساعدة؟ املأ النموذج وسيقوم فريقنا بالرد "
"عليك قريباً."
#: core/templates/core/contact.html:24 #: core/templates/core/contact.html:24
msgid "Phone" msgid "Phone"
msgstr "الهاتف" msgstr "الهاتف"
#: core/templates/core/contact.html:48 #: core/templates/core/contact.html:48
#| msgid "Contact Address"
msgid "Address" msgid "Address"
msgstr "عنوان التواصل" msgstr "عنوان التواصل"
#: core/templates/core/contact.html:57 #: core/templates/core/contact.html:57
#| msgid "Send Message"
msgid "Send us a Message" msgid "Send us a Message"
msgstr "إرسال الرسالة" msgstr "إرسال الرسالة"
#: core/templates/core/contact.html:69 #: core/templates/core/contact.html:69
#| msgid "Contact Address"
msgid "Email Address" msgid "Email Address"
msgstr "عنوان التواصل" msgstr "عنوان التواصل"
@ -1273,15 +1328,25 @@ msgstr "توثيق آمن"
msgid "Digital verification of truck registration and driver licenses." msgid "Digital verification of truck registration and driver licenses."
msgstr "التحقق الرقمي من تسجيل الشاحنات ورخص القيادة." msgstr "التحقق الرقمي من تسجيل الشاحنات ورخص القيادة."
#: core/templates/core/index.html:230 #: core/templates/core/index.html:231
msgid "What Our Customers Say"
msgstr "ماذا يقول عملاؤنا"
#: core/templates/core/index.html:232
#, 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
msgid "Ready to move your cargo?" msgid "Ready to move your cargo?"
msgstr "هل أنت مستعد لنقل شحنتك؟" msgstr "هل أنت مستعد لنقل شحنتك؟"
#: core/templates/core/index.html:231 #: core/templates/core/index.html:270
msgid "Join thousands of shippers and drivers on MASAR today." msgid "Join thousands of shippers and drivers on MASAR today."
msgstr "انضم إلى آلاف الشاحنين والسائقين على مسار اليوم." msgstr "انضم إلى آلاف الشاحنين والسائقين على مسار اليوم."
#: core/templates/core/index.html:232 #: core/templates/core/index.html:271
msgid "Join Now" msgid "Join Now"
msgstr "انضم الآن" msgstr "انضم الآن"
@ -1729,7 +1794,7 @@ msgstr "تحديث بيانات الشاحنة"
msgid "Register a Truck" msgid "Register a Truck"
msgstr "تسجيل شاحنة" msgstr "تسجيل شاحنة"
#: core/templates/core/truck_register.html:47 core/views.py:84 #: core/templates/core/truck_register.html:47 core/views.py:89
msgid "Please correct the errors below." msgid "Please correct the errors below."
msgstr "يرجى تصحيح الأخطاء أدناه." msgstr "يرجى تصحيح الأخطاء أدناه."
@ -1746,20 +1811,10 @@ msgid "Load Capacity"
msgstr "الحمولة" msgstr "الحمولة"
#: core/templates/core/truck_register.html:87 #: core/templates/core/truck_register.html:87
msgid "التفاصيل باللغة العربية" #, fuzzy
msgstr "التفاصيل باللغة العربية" #| msgid "Truck Details"
msgid "Arabic Details"
#: core/templates/core/truck_register.html:89 msgstr "تفاصيل الشاحنة"
msgid "الموديل"
msgstr "الموديل"
#: core/templates/core/truck_register.html:94
msgid "الحمولة"
msgstr "الحمولة"
#: core/templates/core/truck_register.html:99
msgid "اللون"
msgstr "اللون"
#: core/templates/core/truck_register.html:127 #: core/templates/core/truck_register.html:127
msgid "Documents & Photos" msgid "Documents & Photos"
@ -1864,144 +1919,145 @@ msgstr "لم تستلم الرمز؟"
msgid "Try again" msgid "Try again"
msgstr "حاول مرة أخرى" msgstr "حاول مرة أخرى"
#: core/views.py:77 #: core/views.py:82
#, python-format #, python-format
msgid "Your verification code for MASAR CARGO is: %(code)s" msgid "Your verification code for MASAR CARGO is: %(code)s"
msgstr "رمز التحقق الخاص بك لـ MASAR CARGO هو: %(code)s" msgstr "رمز التحقق الخاص بك لـ MASAR CARGO هو: %(code)s"
#: core/views.py:79 core/views.py:157 #: core/views.py:84 core/views.py:162
msgid "A verification code has been sent to your WhatsApp." msgid "A verification code has been sent to your WhatsApp."
msgstr "تم إرسال رمز التحقق إلى واتساب الخاص بك." msgstr "تم إرسال رمز التحقق إلى واتساب الخاص بك."
#: core/views.py:82 #: core/views.py:87
msgid "Failed to send verification code. Please check your phone number." msgid "Failed to send verification code. Please check your phone number."
msgstr "فشل إرسال رمز التحقق. يرجى التحقق من رقم هاتفك." msgstr "فشل إرسال رمز التحقق. يرجى التحقق من رقم هاتفك."
#: core/views.py:130 #: core/views.py:135
msgid "Registration successful. Welcome!" msgid "Registration successful. Welcome!"
msgstr "تم التسجيل بنجاح. مرحباً بك!" msgstr "تم التسجيل بنجاح. مرحباً بك!"
#: core/views.py:133 core/views.py:194 #: core/views.py:138 core/views.py:199
msgid "Invalid or expired verification code." msgid "Invalid or expired verification code."
msgstr "رمز تحقق غير صالح أو منتهي الصلاحية." msgstr "رمز تحقق غير صالح أو منتهي الصلاحية."
#: core/views.py:146 #: core/views.py:151
msgid "Your account does not have a phone number. Please contact admin." msgid "Your account does not have a phone number. Please contact admin."
msgstr "حسابك لا يحتوي على رقم هاتف. يرجى الاتصال بالمسؤول." msgstr "حسابك لا يحتوي على رقم هاتف. يرجى الاتصال بالمسؤول."
#: core/views.py:155 #: core/views.py:160
#, python-format #, python-format
msgid "Your login verification code for MASAR CARGO is: %(code)s" msgid "Your login verification code for MASAR CARGO is: %(code)s"
msgstr "رمز التحقق الخاص بك لتسجيل الدخول لـ MASAR CARGO هو: %(code)s" msgstr "رمز التحقق الخاص بك لتسجيل الدخول لـ MASAR CARGO هو: %(code)s"
#: core/views.py:162 #: core/views.py:167
msgid "Failed to send verification code. Please check your connection." msgid "Failed to send verification code. Please check your connection."
msgstr "فشل إرسال رمز التحقق. يرجى التحقق من اتصالك." msgstr "فشل إرسال رمز التحقق. يرجى التحقق من اتصالك."
#: core/views.py:164 #: core/views.py:169
msgid "Invalid username or password." msgid "Invalid username or password."
msgstr "اسم المستخدم أو كلمة المرور غير صالحة." msgstr "اسم المستخدم أو كلمة المرور غير صالحة."
#: core/views.py:191 #: core/views.py:196
msgid "Logged in successfully!" msgid "Logged in successfully!"
msgstr "تم تسجيل الدخول بنجاح!" msgstr "تم تسجيل الدخول بنجاح!"
#: core/views.py:262 #: core/views.py:267
msgid "Truck registered successfully! It will be visible after admin approval." msgid "Truck registered successfully! It will be visible after admin approval."
msgstr "تم تسجيل الشاحنة بنجاح! ستكون مرئية بعد اعتماد المسؤول." msgstr "تم تسجيل الشاحنة بنجاح! ستكون مرئية بعد اعتماد المسؤول."
#: core/views.py:265 #: core/views.py:270
msgid "There was an error in your registration. Please check the form." msgid "There was an error in your registration. Please check the form."
msgstr "حدث خطأ في التسجيل. يرجى التحقق من النموذج." msgstr "حدث خطأ في التسجيل. يرجى التحقق من النموذج."
#: core/views.py:281 #: core/views.py:286
msgid "Truck data updated successfully! It will be reviewed by admin again." msgid "Truck data updated successfully! It will be reviewed by admin again."
msgstr "تم تحديث بيانات الشاحنة بنجاح! سيتم مراجعتها من قبل المسؤول مرة أخرى." msgstr "تم تحديث بيانات الشاحنة بنجاح! سيتم مراجعتها من قبل المسؤول مرة أخرى."
#: core/views.py:284 #: core/views.py:289
msgid "There was an error updating your truck. Please check the form." msgid "There was an error updating your truck. Please check the form."
msgstr "حدث خطأ أثناء تحديث شاحنتك. يرجى التحقق من النموذج." msgstr "حدث خطأ أثناء تحديث شاحنتك. يرجى التحقق من النموذج."
#: core/views.py:301 #: core/views.py:306
#, python-format #, python-format
msgid "" msgid ""
"Your truck (%(plate)s) has been approved! You can now receive offers for " "Your truck (%(plate)s) has been approved! You can now receive offers for "
"shipments." "shipments."
msgstr "تمت الموافقة على شاحنتك (%(plate)s)! يمكنك الآن تلقي عروض للشحنات." msgstr "تمت الموافقة على شاحنتك (%(plate)s)! يمكنك الآن تلقي عروض للشحنات."
#: core/views.py:304 #: core/views.py:309
msgid "Truck approved successfully!" msgid "Truck approved successfully!"
msgstr "تم اعتماد الشاحنة بنجاح!" msgstr "تم اعتماد الشاحنة بنجاح!"
#: core/views.py:315 #: core/views.py:320
msgid "Truck has been suspended." msgid "Truck has been suspended."
msgstr "تم تعليق الشاحنة." msgstr "تم تعليق الشاحنة."
#: core/views.py:330 #: core/views.py:335
msgid "" msgid ""
"Shipment posted successfully! It is now open for bids or you can browse " "Shipment posted successfully! It is now open for bids or you can browse "
"trucks to send it as an offer." "trucks to send it as an offer."
msgstr "تم نشر الشحنة بنجاح! هي الآن مفتوحة للمزايدة أو يمكنك تصفح الشاحنات لإرسالها كعرض." msgstr ""
"تم نشر الشحنة بنجاح! هي الآن مفتوحة للعروض أو يمكنك تصفح الشاحنات لإرسالها " "تم نشر الشحنة بنجاح! هي الآن مفتوحة للمزايدة أو يمكنك تصفح الشاحنات لإرسالها "
"كعرض." "كعرض.تم نشر الشحنة بنجاح! هي الآن مفتوحة للعروض أو يمكنك تصفح الشاحنات "
"لإرسالها كعرض."
#: core/views.py:334 #: core/views.py:339
msgid "Please correct the errors in the form." msgid "Please correct the errors in the form."
msgstr "يرجى تصحيح الأخطاء في النموذج." msgstr "يرجى تصحيح الأخطاء في النموذج."
#: core/views.py:385 #: core/views.py:390
#, python-format #, python-format
msgid "" msgid ""
"New offer received for your truck (%(plate)s)! Route: %(origin)s to " "New offer received for your truck (%(plate)s)! Route: %(origin)s to "
"%(dest)s. Amount: %(amount)s" "%(dest)s. Amount: %(amount)s"
msgstr "تم استلام عرض جديد لشاحنتك (%(plate)s)! المسار: %(origin)s إلى %(dest)s. المبلغ: %(amount)s" msgstr ""
"تم استلام عرض جديد لشاحنتك (%(plate)s)! المسار: %(origin)s إلى %(dest)s. " "تم استلام عرض جديد لشاحنتك (%(plate)s)! المسار: %(origin)s إلى %(dest)s. "
"المبلغ: %(amount)s" "المبلغ: %(amount)sتم استلام عرض جديد لشاحنتك (%(plate)s)! المسار: %(origin)s "
"إلى %(dest)s. المبلغ: %(amount)s"
#: core/views.py:388 #: core/views.py:393
msgid "Offer sent successfully!" msgid "Offer sent successfully!"
msgstr "تم إرسال العرض بنجاح!" msgstr "تم إرسال العرض بنجاح!"
#: core/views.py:392 #: core/views.py:397
msgid "Error sending offer. Please check the form." msgid "Error sending offer. Please check the form."
msgstr "خطأ في إرسال العرض. يرجى التحقق من النموذج." msgstr "خطأ في إرسال العرض. يرجى التحقق من النموذج."
#: core/views.py:414 #: core/views.py:419
msgid "You are not authorized to accept this offer." msgid "You are not authorized to accept this offer."
msgstr "أنت غير مخول لقبول هذا العرض." msgstr "أنت غير مخول لقبول هذا العرض."
#: core/views.py:429 #: core/views.py:434
#, python-format #, python-format
msgid "" msgid ""
"Your offer for truck %(plate)s (%(origin)s to %(dest)s) has been accepted!" "Your offer for truck %(plate)s (%(origin)s to %(dest)s) has been accepted!"
msgstr "تم قبول عرضك للشاحنة %(plate)s (%(origin)s إلى %(dest)s)!" msgstr "تم قبول عرضك للشاحنة %(plate)s (%(origin)s إلى %(dest)s)!"
#: core/views.py:432 #: core/views.py:437
msgid "Offer accepted! Shipment is now in progress." msgid "Offer accepted! Shipment is now in progress."
msgstr "تم قبول العرض! الشحنة قيد التنفيذ الآن." msgstr "تم قبول العرض! الشحنة قيد التنفيذ الآن."
#: core/views.py:444 #: core/views.py:449
msgid "Offer rejected." msgid "Offer rejected."
msgstr "تم رفض العرض." msgstr "تم رفض العرض."
#: core/views.py:452 #: core/views.py:457
msgid "Privacy policy is coming soon." msgid "Privacy policy is coming soon."
msgstr "سياسة الخصوصية ستتوفر قريباً." msgstr "سياسة الخصوصية ستتوفر قريباً."
#: core/views.py:462 #: core/views.py:467
#| msgid "Terms of service are coming soon."
msgid "Terms of service are soon." msgid "Terms of service are soon."
msgstr "شروط الخدمة ستتوفر قريباً." msgstr "شروط الخدمة ستتوفر قريباً."
#: core/views.py:509 #: core/views.py:514
msgid "Online payment is currently disabled. Please contact support." msgid "Online payment is currently disabled. Please contact support."
msgstr "الدفع عبر الإنترنت معطل حالياً. يرجى الاتصال بالدعم." msgstr "الدفع عبر الإنترنت معطل حالياً. يرجى الاتصال بالدعم."
#: core/views.py:558 #: core/views.py:563
msgid "Failed to initiate payment. Please try again later." msgid "Failed to initiate payment. Please try again later."
msgstr "فشل بدء الدفع. يرجى المحاولة مرة أخرى لاحقاً." msgstr "فشل بدء الدفع. يرجى المحاولة مرة أخرى لاحقاً."
#: core/views.py:587 #: core/views.py:592
#, fuzzy, python-format #, fuzzy, python-format
#| msgid "" #| msgid ""
#| "Your subscription for MASAR CARGO has been successfully renewed! Your new " #| "Your subscription for MASAR CARGO has been successfully renewed! Your new "
@ -2013,52 +2069,62 @@ msgstr ""
"تم تجديد اشتراكك في مسار للشحن بنجاح! تاريخ انتهاء اشتراكك الجديد هو " "تم تجديد اشتراكك في مسار للشحن بنجاح! تاريخ انتهاء اشتراكك الجديد هو "
"%(date)s. شكراً لاستخدامك خدمتنا." "%(date)s. شكراً لاستخدامك خدمتنا."
#: core/views.py:597 #: core/views.py:602
#, fuzzy #, fuzzy
#| msgid "Subscription Renewed - MASAR CARGO" #| msgid "Subscription Renewed - MASAR CARGO"
msgid "Subscription Activated - MASAR CARGO" msgid "Subscription Activated - MASAR CARGO"
msgstr "تم تجديد الاشتراك - مسار للشحن" msgstr "تم تجديد الاشتراك - مسار للشحن"
#: core/views.py:627 #: core/views.py:632
msgid "Payment successful! Your subscription is now active." msgid "Payment successful! Your subscription is now active."
msgstr "تم الدفع بنجاح! اشتراكك نشط الآن." msgstr "تم الدفع بنجاح! اشتراكك نشط الآن."
#: core/views.py:633 #: core/views.py:638
#, python-format #, python-format
msgid "Payment was not successful. Status: %(status)s" msgid "Payment was not successful. Status: %(status)s"
msgstr "لم يكن الدفع ناجحاً. الحالة: %(status)s" msgstr "لم يكن الدفع ناجحاً. الحالة: %(status)s"
#: core/views.py:635 #: core/views.py:640
msgid "Failed to verify payment status." msgid "Failed to verify payment status."
msgstr "فشل التحقق من حالة الدفع." msgstr "فشل التحقق من حالة الدفع."
#: core/views.py:641 #: core/views.py:646
msgid "Payment was cancelled." msgid "Payment was cancelled."
msgstr "تم إلغاء الدفع." msgstr "تم إلغاء الدفع."
#: core/views.py:705 #: core/views.py:710
#| msgid "This email is already in use."
msgid "This is already a refund transaction." msgid "This is already a refund transaction."
msgstr "هذا البريد الإلكتروني مستخدم بالفعل." msgstr "هذا البريد الإلكتروني مستخدم بالفعل."
#: core/views.py:718 #: core/views.py:723
#, python-format #, python-format
msgid "Refund issued successfully! Receipt: %(receipt)s" msgid "Refund issued successfully! Receipt: %(receipt)s"
msgstr "تم إصدار الاسترداد بنجاح! الإيصال: %(receipt)s" msgstr "تم إصدار الاسترداد بنجاح! الإيصال: %(receipt)s"
#: core/views.py:731 #: core/views.py:736
msgid "Application settings updated successfully." msgid "Application settings updated successfully."
msgstr "تم تحديث إعدادات التطبيق بنجاح." msgstr "تم تحديث إعدادات التطبيق بنجاح."
#: core/views.py:744 #: core/views.py:749
msgid "Your message has been sent successfully! We will get back to you soon." msgid "Your message has been sent successfully! We will get back to you soon."
msgstr "تم إرسال رسالتك بنجاح! سنقوم بالرد عليك قريباً." msgstr "تم إرسال رسالتك بنجاح! سنقوم بالرد عليك قريباً."
#: core/views.py:747 #: core/views.py:752
#| msgid "There was an error updating your truck. Please check the form."
msgid "There was an error in your form. Please check the fields below." msgid "There was an error in your form. Please check the fields below."
msgstr "حدث خطأ أثناء تحديث شاحنتك. يرجى التحقق من النموذج." msgstr "حدث خطأ أثناء تحديث شاحنتك. يرجى التحقق من النموذج."
#~ msgid "التفاصيل باللغة العربية"
#~ msgstr "التفاصيل باللغة العربية"
#~ msgid "الموديل"
#~ msgstr "الموديل"
#~ msgid "الحمولة"
#~ msgstr "الحمولة"
#~ msgid "اللون"
#~ msgstr "اللون"
#~ msgid "Registered Trucks" #~ msgid "Registered Trucks"
#~ msgstr "الشاحنات المسجلة" #~ msgstr "الشاحنات المسجلة"