add ed tetimonials
This commit is contained in:
parent
da443cf388
commit
049e1849e1
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -7,7 +7,11 @@ from django.utils.translation import gettext_lazy as _
|
||||
from django.utils import timezone
|
||||
from django.utils.html import format_html
|
||||
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
|
||||
|
||||
@admin.register(Country)
|
||||
@ -198,3 +202,17 @@ class ContactMessageAdmin(admin.ModelAdmin):
|
||||
search_fields = ('subject', 'name', 'email', 'message')
|
||||
readonly_fields = ('created_at',)
|
||||
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")
|
||||
Binary file not shown.
35
core/migrations/0024_testimonial.py
Normal file
35
core/migrations/0024_testimonial.py
Normal 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'],
|
||||
},
|
||||
),
|
||||
]
|
||||
BIN
core/migrations/__pycache__/0024_testimonial.cpython-311.pyc
Normal file
BIN
core/migrations/__pycache__/0024_testimonial.cpython-311.pyc
Normal file
Binary file not shown.
@ -491,3 +491,42 @@ class ContactMessage(models.Model):
|
||||
|
||||
def __str__(self):
|
||||
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
|
||||
@ -223,6 +223,45 @@
|
||||
</div>
|
||||
</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 -->
|
||||
<section class="py-5">
|
||||
<div class="container">
|
||||
@ -234,4 +273,4 @@
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{% endblock %}
|
||||
{% endblock %}
|
||||
|
||||
@ -5,7 +5,10 @@ from django.contrib.auth.decorators import login_required
|
||||
from django.contrib.auth import login, authenticate, logout
|
||||
from django.utils import timezone
|
||||
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 (
|
||||
TruckForm, ShipmentForm, BidForm, UserRegistrationForm,
|
||||
OTPVerifyForm, ShipperOfferForm, RenewSubscriptionForm, AppSettingForm,
|
||||
@ -32,10 +35,12 @@ def home(request):
|
||||
"""Render the landing screen for MASAR CARGO."""
|
||||
banners = Banner.objects.filter(is_active=True)
|
||||
home_sections = HomeSection.objects.filter(is_active=True).order_by('order')
|
||||
testimonials = Testimonial.objects.filter(is_active=True).order_by('order')
|
||||
context = {
|
||||
"deployment_timestamp": timezone.now().timestamp(),
|
||||
"banners": banners,
|
||||
"home_sections": home_sections,
|
||||
"testimonials": testimonials,
|
||||
}
|
||||
return render(request, "core/index.html", context)
|
||||
|
||||
@ -755,4 +760,4 @@ def contact(request):
|
||||
return render(request, 'core/contact.html', {
|
||||
'form': form,
|
||||
'app_settings': app_settings
|
||||
})
|
||||
})
|
||||
Binary file not shown.
@ -2,7 +2,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\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"
|
||||
"Last-Translator: Gemini\n"
|
||||
"Language-Team: Arabic\n"
|
||||
@ -21,123 +21,131 @@ msgstr "الإنجليزية"
|
||||
msgid "Arabic"
|
||||
msgstr "العربية"
|
||||
|
||||
#: core/admin.py:37
|
||||
#: core/admin.py:41
|
||||
msgid "No Plan"
|
||||
msgstr "بدون خطة"
|
||||
|
||||
#: core/admin.py:40
|
||||
#: core/admin.py:44
|
||||
msgid "Expired"
|
||||
msgstr "منتهي"
|
||||
|
||||
#: core/admin.py:47
|
||||
#: core/admin.py:51
|
||||
#, fuzzy
|
||||
#| msgid "Expired"
|
||||
msgid "No Expiry"
|
||||
msgstr "منتهي"
|
||||
|
||||
#: core/admin.py:51
|
||||
#: core/admin.py:55
|
||||
msgid "Expiring soon"
|
||||
msgstr "تنتهي قريبا"
|
||||
|
||||
#: core/admin.py:51
|
||||
#: core/admin.py:55
|
||||
msgid "days"
|
||||
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
|
||||
msgid "Active"
|
||||
msgstr "نشط"
|
||||
|
||||
#: core/admin.py:55 core/admin.py:170
|
||||
#: core/admin.py:59 core/admin.py:174
|
||||
msgid "Subscription Status"
|
||||
msgstr "حالة الاشتراك"
|
||||
|
||||
#: core/admin.py:68
|
||||
#: core/admin.py:72
|
||||
#, fuzzy
|
||||
#| msgid "Truck Picture"
|
||||
msgid "Truck Picture Preview"
|
||||
msgstr "صورة الشاحنة"
|
||||
|
||||
#: core/admin.py:78
|
||||
#: core/admin.py:82
|
||||
msgid "View PDF Document"
|
||||
msgstr "عرض مستند PDF"
|
||||
|
||||
#: core/admin.py:79
|
||||
#: core/admin.py:83
|
||||
#, fuzzy
|
||||
#| msgid "View Details"
|
||||
msgid "View File"
|
||||
msgstr "عرض التفاصيل"
|
||||
|
||||
#: core/admin.py:83
|
||||
#: core/admin.py:87
|
||||
#, fuzzy
|
||||
#| msgid "Registration (Front Face)"
|
||||
msgid "Registration Front Preview"
|
||||
msgstr "واجهة استمارة السيارة"
|
||||
|
||||
#: core/admin.py:87
|
||||
#: core/admin.py:91
|
||||
#, fuzzy
|
||||
#| msgid "Registration (Back Face)"
|
||||
msgid "Registration Back Preview"
|
||||
msgstr "خلفية استمارة السيارة"
|
||||
|
||||
#: core/admin.py:91
|
||||
#: core/admin.py:95
|
||||
#, fuzzy
|
||||
#| msgid "Driver License (Front Face)"
|
||||
msgid "Driver License Front Preview"
|
||||
msgstr "واجهة رخصة القيادة"
|
||||
|
||||
#: core/admin.py:95
|
||||
#: core/admin.py:99
|
||||
#, fuzzy
|
||||
#| msgid "Driver License (Back Face)"
|
||||
msgid "Driver License Back Preview"
|
||||
msgstr "خلفية رخصة القيادة"
|
||||
|
||||
#: core/admin.py:99
|
||||
#: core/admin.py:103
|
||||
#, fuzzy
|
||||
#| msgid "Details"
|
||||
msgid "Details (EN)"
|
||||
msgstr "التفاصيل"
|
||||
|
||||
#: core/admin.py:100
|
||||
#: core/admin.py:104
|
||||
#, fuzzy
|
||||
#| msgid "Details"
|
||||
msgid "Details (AR)"
|
||||
msgstr "التفاصيل"
|
||||
|
||||
#: core/admin.py:101
|
||||
#: core/admin.py:105
|
||||
#, fuzzy
|
||||
#| msgid "Secure Documentation"
|
||||
msgid "Pictures & Documents"
|
||||
msgstr "توثيق آمن"
|
||||
|
||||
#: core/admin.py:151
|
||||
#: core/admin.py:155
|
||||
msgid "Test message sent successfully!"
|
||||
msgstr "تم نشر الشحنة بنجاح!"
|
||||
|
||||
#: core/admin.py:153
|
||||
#: core/admin.py:157
|
||||
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"
|
||||
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"
|
||||
msgstr "معلومات الاتصال"
|
||||
|
||||
#: core/admin.py:169
|
||||
#: core/admin.py:173
|
||||
msgid "Legal"
|
||||
msgstr "قانوني"
|
||||
|
||||
#: core/admin.py:171
|
||||
#: core/admin.py:175
|
||||
msgid "Shipper Subscription Fees"
|
||||
msgstr "رسوم اشتراك الشاحن"
|
||||
|
||||
#: core/admin.py:172
|
||||
#: core/admin.py:176
|
||||
msgid "Truck Owner Subscription Fees"
|
||||
msgstr "رسوم اشتراك صاحب الشاحنة"
|
||||
|
||||
#: core/admin.py:218
|
||||
#, fuzzy
|
||||
#| msgid "No image provided"
|
||||
msgid "Image Preview"
|
||||
msgstr "لم يتم توفير صورة"
|
||||
|
||||
#: core/forms.py:9
|
||||
msgid "Confirm Email"
|
||||
msgstr "تأكيد البريد الإلكتروني"
|
||||
@ -224,7 +232,6 @@ msgid "Comments"
|
||||
msgstr "تعليقات"
|
||||
|
||||
#: core/forms.py:197 core/templates/core/contact.html:62
|
||||
#| msgid "Country Name"
|
||||
msgid "Your Name"
|
||||
msgstr "اسم الدولة"
|
||||
|
||||
@ -235,7 +242,6 @@ msgid "Your Email"
|
||||
msgstr "تأكيد البريد الإلكتروني"
|
||||
|
||||
#: core/forms.py:199 core/models.py:482 core/templates/core/contact.html:76
|
||||
#| msgid "Reject"
|
||||
msgid "Subject"
|
||||
msgstr "رفض"
|
||||
|
||||
@ -343,15 +349,15 @@ msgstr "اللون (بالإنجليزية)"
|
||||
msgid "Truck Type (AR)"
|
||||
msgstr "نوع الشاحنة"
|
||||
|
||||
#: core/models.py:124
|
||||
#: core/models.py:124 core/templates/core/truck_register.html:89
|
||||
msgid "Model (AR)"
|
||||
msgstr "الموديل"
|
||||
|
||||
#: core/models.py:125
|
||||
#: core/models.py:125 core/templates/core/truck_register.html:94
|
||||
msgid "Load Capacity (AR)"
|
||||
msgstr "الحمولة"
|
||||
|
||||
#: core/models.py:126
|
||||
#: core/models.py:126 core/templates/core/truck_register.html:99
|
||||
msgid "Color (AR)"
|
||||
msgstr "اللون"
|
||||
|
||||
@ -449,7 +455,7 @@ msgstr "رمز Wablas API"
|
||||
msgid "Wablas Secret Key"
|
||||
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"
|
||||
msgstr "نشط"
|
||||
|
||||
@ -490,12 +496,12 @@ msgid "Contact Address"
|
||||
msgstr "عنوان التواصل"
|
||||
|
||||
#: 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"
|
||||
msgstr "شروط الخدمة"
|
||||
|
||||
#: 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"
|
||||
msgstr "سياسة الخصوصية"
|
||||
|
||||
@ -559,7 +565,7 @@ msgstr "رابط"
|
||||
msgid "Internal or external URL"
|
||||
msgstr "رابط داخلي أو خارجي"
|
||||
|
||||
#: core/models.py:342 core/models.py:378
|
||||
#: core/models.py:342 core/models.py:378 core/models.py:505
|
||||
msgid "Order"
|
||||
msgstr "الترتيب"
|
||||
|
||||
@ -691,6 +697,56 @@ msgstr "عنوان التواصل"
|
||||
msgid "Contact Messages"
|
||||
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/core/admin_dashboard.html:11
|
||||
#: core/templates/core/article_detail.html:11
|
||||
@ -1121,24 +1177,23 @@ msgstr "اتصل بنا"
|
||||
msgid ""
|
||||
"Have questions about our services or need assistance? Fill out the form and "
|
||||
"our team will get back to you shortly."
|
||||
msgstr "لديك أسئلة حول خدماتنا أو تحتاج إلى مساعدة؟ املأ النموذج وسيقوم فريقنا بالرد عليك قريباً."
|
||||
msgstr ""
|
||||
"لديك أسئلة حول خدماتنا أو تحتاج إلى مساعدة؟ املأ النموذج وسيقوم فريقنا بالرد "
|
||||
"عليك قريباً."
|
||||
|
||||
#: core/templates/core/contact.html:24
|
||||
msgid "Phone"
|
||||
msgstr "الهاتف"
|
||||
|
||||
#: core/templates/core/contact.html:48
|
||||
#| msgid "Contact Address"
|
||||
msgid "Address"
|
||||
msgstr "عنوان التواصل"
|
||||
|
||||
#: core/templates/core/contact.html:57
|
||||
#| msgid "Send Message"
|
||||
msgid "Send us a Message"
|
||||
msgstr "إرسال الرسالة"
|
||||
|
||||
#: core/templates/core/contact.html:69
|
||||
#| msgid "Contact Address"
|
||||
msgid "Email Address"
|
||||
msgstr "عنوان التواصل"
|
||||
|
||||
@ -1273,15 +1328,25 @@ msgstr "توثيق آمن"
|
||||
msgid "Digital verification of truck registration and driver licenses."
|
||||
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?"
|
||||
msgstr "هل أنت مستعد لنقل شحنتك؟"
|
||||
|
||||
#: core/templates/core/index.html:231
|
||||
#: core/templates/core/index.html:270
|
||||
msgid "Join thousands of shippers and drivers on MASAR today."
|
||||
msgstr "انضم إلى آلاف الشاحنين والسائقين على مسار اليوم."
|
||||
|
||||
#: core/templates/core/index.html:232
|
||||
#: core/templates/core/index.html:271
|
||||
msgid "Join Now"
|
||||
msgstr "انضم الآن"
|
||||
|
||||
@ -1729,7 +1794,7 @@ msgstr "تحديث بيانات الشاحنة"
|
||||
msgid "Register a Truck"
|
||||
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."
|
||||
msgstr "يرجى تصحيح الأخطاء أدناه."
|
||||
|
||||
@ -1746,20 +1811,10 @@ msgid "Load Capacity"
|
||||
msgstr "الحمولة"
|
||||
|
||||
#: core/templates/core/truck_register.html:87
|
||||
msgid "التفاصيل باللغة العربية"
|
||||
msgstr "التفاصيل باللغة العربية"
|
||||
|
||||
#: core/templates/core/truck_register.html:89
|
||||
msgid "الموديل"
|
||||
msgstr "الموديل"
|
||||
|
||||
#: core/templates/core/truck_register.html:94
|
||||
msgid "الحمولة"
|
||||
msgstr "الحمولة"
|
||||
|
||||
#: core/templates/core/truck_register.html:99
|
||||
msgid "اللون"
|
||||
msgstr "اللون"
|
||||
#, fuzzy
|
||||
#| msgid "Truck Details"
|
||||
msgid "Arabic Details"
|
||||
msgstr "تفاصيل الشاحنة"
|
||||
|
||||
#: core/templates/core/truck_register.html:127
|
||||
msgid "Documents & Photos"
|
||||
@ -1864,144 +1919,145 @@ msgstr "لم تستلم الرمز؟"
|
||||
msgid "Try again"
|
||||
msgstr "حاول مرة أخرى"
|
||||
|
||||
#: core/views.py:77
|
||||
#: core/views.py:82
|
||||
#, python-format
|
||||
msgid "Your verification code for MASAR CARGO is: %(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."
|
||||
msgstr "تم إرسال رمز التحقق إلى واتساب الخاص بك."
|
||||
|
||||
#: core/views.py:82
|
||||
#: core/views.py:87
|
||||
msgid "Failed to send verification code. Please check your phone number."
|
||||
msgstr "فشل إرسال رمز التحقق. يرجى التحقق من رقم هاتفك."
|
||||
|
||||
#: core/views.py:130
|
||||
#: core/views.py:135
|
||||
msgid "Registration successful. Welcome!"
|
||||
msgstr "تم التسجيل بنجاح. مرحباً بك!"
|
||||
|
||||
#: core/views.py:133 core/views.py:194
|
||||
#: core/views.py:138 core/views.py:199
|
||||
msgid "Invalid or expired verification code."
|
||||
msgstr "رمز تحقق غير صالح أو منتهي الصلاحية."
|
||||
|
||||
#: core/views.py:146
|
||||
#: core/views.py:151
|
||||
msgid "Your account does not have a phone number. Please contact admin."
|
||||
msgstr "حسابك لا يحتوي على رقم هاتف. يرجى الاتصال بالمسؤول."
|
||||
|
||||
#: core/views.py:155
|
||||
#: core/views.py:160
|
||||
#, python-format
|
||||
msgid "Your login verification code for MASAR CARGO is: %(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."
|
||||
msgstr "فشل إرسال رمز التحقق. يرجى التحقق من اتصالك."
|
||||
|
||||
#: core/views.py:164
|
||||
#: core/views.py:169
|
||||
msgid "Invalid username or password."
|
||||
msgstr "اسم المستخدم أو كلمة المرور غير صالحة."
|
||||
|
||||
#: core/views.py:191
|
||||
#: core/views.py:196
|
||||
msgid "Logged in successfully!"
|
||||
msgstr "تم تسجيل الدخول بنجاح!"
|
||||
|
||||
#: core/views.py:262
|
||||
#: core/views.py:267
|
||||
msgid "Truck registered successfully! It will be visible after admin approval."
|
||||
msgstr "تم تسجيل الشاحنة بنجاح! ستكون مرئية بعد اعتماد المسؤول."
|
||||
|
||||
#: core/views.py:265
|
||||
#: core/views.py:270
|
||||
msgid "There was an error in your registration. Please check the form."
|
||||
msgstr "حدث خطأ في التسجيل. يرجى التحقق من النموذج."
|
||||
|
||||
#: core/views.py:281
|
||||
#: core/views.py:286
|
||||
msgid "Truck data updated successfully! It will be reviewed by admin again."
|
||||
msgstr "تم تحديث بيانات الشاحنة بنجاح! سيتم مراجعتها من قبل المسؤول مرة أخرى."
|
||||
|
||||
#: core/views.py:284
|
||||
#: core/views.py:289
|
||||
msgid "There was an error updating your truck. Please check the form."
|
||||
msgstr "حدث خطأ أثناء تحديث شاحنتك. يرجى التحقق من النموذج."
|
||||
|
||||
#: core/views.py:301
|
||||
#: core/views.py:306
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Your truck (%(plate)s) has been approved! You can now receive offers for "
|
||||
"shipments."
|
||||
msgstr "تمت الموافقة على شاحنتك (%(plate)s)! يمكنك الآن تلقي عروض للشحنات."
|
||||
|
||||
#: core/views.py:304
|
||||
#: core/views.py:309
|
||||
msgid "Truck approved successfully!"
|
||||
msgstr "تم اعتماد الشاحنة بنجاح!"
|
||||
|
||||
#: core/views.py:315
|
||||
#: core/views.py:320
|
||||
msgid "Truck has been suspended."
|
||||
msgstr "تم تعليق الشاحنة."
|
||||
|
||||
#: core/views.py:330
|
||||
#: core/views.py:335
|
||||
msgid ""
|
||||
"Shipment posted successfully! It is now open for bids or you can browse "
|
||||
"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."
|
||||
msgstr "يرجى تصحيح الأخطاء في النموذج."
|
||||
|
||||
#: core/views.py:385
|
||||
#: core/views.py:390
|
||||
#, 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"
|
||||
msgstr ""
|
||||
"تم استلام عرض جديد لشاحنتك (%(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!"
|
||||
msgstr "تم إرسال العرض بنجاح!"
|
||||
|
||||
#: core/views.py:392
|
||||
#: core/views.py:397
|
||||
msgid "Error sending offer. Please check the form."
|
||||
msgstr "خطأ في إرسال العرض. يرجى التحقق من النموذج."
|
||||
|
||||
#: core/views.py:414
|
||||
#: core/views.py:419
|
||||
msgid "You are not authorized to accept this offer."
|
||||
msgstr "أنت غير مخول لقبول هذا العرض."
|
||||
|
||||
#: core/views.py:429
|
||||
#: core/views.py:434
|
||||
#, python-format
|
||||
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:432
|
||||
#: core/views.py:437
|
||||
msgid "Offer accepted! Shipment is now in progress."
|
||||
msgstr "تم قبول العرض! الشحنة قيد التنفيذ الآن."
|
||||
|
||||
#: core/views.py:444
|
||||
#: core/views.py:449
|
||||
msgid "Offer rejected."
|
||||
msgstr "تم رفض العرض."
|
||||
|
||||
#: core/views.py:452
|
||||
#: core/views.py:457
|
||||
msgid "Privacy policy is coming soon."
|
||||
msgstr "سياسة الخصوصية ستتوفر قريباً."
|
||||
|
||||
#: core/views.py:462
|
||||
#| msgid "Terms of service are coming soon."
|
||||
#: core/views.py:467
|
||||
msgid "Terms of service are soon."
|
||||
msgstr "شروط الخدمة ستتوفر قريباً."
|
||||
|
||||
#: core/views.py:509
|
||||
#: core/views.py:514
|
||||
msgid "Online payment is currently disabled. Please contact support."
|
||||
msgstr "الدفع عبر الإنترنت معطل حالياً. يرجى الاتصال بالدعم."
|
||||
|
||||
#: core/views.py:558
|
||||
#: core/views.py:563
|
||||
msgid "Failed to initiate payment. Please try again later."
|
||||
msgstr "فشل بدء الدفع. يرجى المحاولة مرة أخرى لاحقاً."
|
||||
|
||||
#: core/views.py:587
|
||||
#: core/views.py:592
|
||||
#, fuzzy, python-format
|
||||
#| msgid ""
|
||||
#| "Your subscription for MASAR CARGO has been successfully renewed! Your new "
|
||||
@ -2013,52 +2069,62 @@ msgstr ""
|
||||
"تم تجديد اشتراكك في مسار للشحن بنجاح! تاريخ انتهاء اشتراكك الجديد هو "
|
||||
"%(date)s. شكراً لاستخدامك خدمتنا."
|
||||
|
||||
#: core/views.py:597
|
||||
#: core/views.py:602
|
||||
#, fuzzy
|
||||
#| msgid "Subscription Renewed - MASAR CARGO"
|
||||
msgid "Subscription Activated - MASAR CARGO"
|
||||
msgstr "تم تجديد الاشتراك - مسار للشحن"
|
||||
|
||||
#: core/views.py:627
|
||||
#: core/views.py:632
|
||||
msgid "Payment successful! Your subscription is now active."
|
||||
msgstr "تم الدفع بنجاح! اشتراكك نشط الآن."
|
||||
|
||||
#: core/views.py:633
|
||||
#: core/views.py:638
|
||||
#, python-format
|
||||
msgid "Payment was not successful. Status: %(status)s"
|
||||
msgstr "لم يكن الدفع ناجحاً. الحالة: %(status)s"
|
||||
|
||||
#: core/views.py:635
|
||||
#: core/views.py:640
|
||||
msgid "Failed to verify payment status."
|
||||
msgstr "فشل التحقق من حالة الدفع."
|
||||
|
||||
#: core/views.py:641
|
||||
#: core/views.py:646
|
||||
msgid "Payment was cancelled."
|
||||
msgstr "تم إلغاء الدفع."
|
||||
|
||||
#: core/views.py:705
|
||||
#| msgid "This email is already in use."
|
||||
#: core/views.py:710
|
||||
msgid "This is already a refund transaction."
|
||||
msgstr "هذا البريد الإلكتروني مستخدم بالفعل."
|
||||
|
||||
#: core/views.py:718
|
||||
#: core/views.py:723
|
||||
#, python-format
|
||||
msgid "Refund issued successfully! Receipt: %(receipt)s"
|
||||
msgstr "تم إصدار الاسترداد بنجاح! الإيصال: %(receipt)s"
|
||||
|
||||
#: core/views.py:731
|
||||
#: core/views.py:736
|
||||
msgid "Application settings updated successfully."
|
||||
msgstr "تم تحديث إعدادات التطبيق بنجاح."
|
||||
|
||||
#: core/views.py:744
|
||||
#: core/views.py:749
|
||||
msgid "Your message has been sent successfully! We will get back to you soon."
|
||||
msgstr "تم إرسال رسالتك بنجاح! سنقوم بالرد عليك قريباً."
|
||||
|
||||
#: core/views.py:747
|
||||
#| msgid "There was an error updating your truck. Please check the form."
|
||||
#: core/views.py:752
|
||||
msgid "There was an error in your form. Please check the fields below."
|
||||
msgstr "حدث خطأ أثناء تحديث شاحنتك. يرجى التحقق من النموذج."
|
||||
|
||||
#~ msgid "التفاصيل باللغة العربية"
|
||||
#~ msgstr "التفاصيل باللغة العربية"
|
||||
|
||||
#~ msgid "الموديل"
|
||||
#~ msgstr "الموديل"
|
||||
|
||||
#~ msgid "الحمولة"
|
||||
#~ msgstr "الحمولة"
|
||||
|
||||
#~ msgid "اللون"
|
||||
#~ msgstr "اللون"
|
||||
|
||||
#~ msgid "Registered Trucks"
|
||||
#~ msgstr "الشاحنات المسجلة"
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user