diff --git a/core/__pycache__/admin.cpython-311.pyc b/core/__pycache__/admin.cpython-311.pyc index f65d7c4..a8a34de 100644 Binary files a/core/__pycache__/admin.cpython-311.pyc and b/core/__pycache__/admin.cpython-311.pyc differ diff --git a/core/__pycache__/models.cpython-311.pyc b/core/__pycache__/models.cpython-311.pyc index 77440cd..2d03087 100644 Binary files a/core/__pycache__/models.cpython-311.pyc and b/core/__pycache__/models.cpython-311.pyc differ diff --git a/core/__pycache__/views.cpython-311.pyc b/core/__pycache__/views.cpython-311.pyc index 18141de..e6e8455 100644 Binary files a/core/__pycache__/views.cpython-311.pyc and b/core/__pycache__/views.cpython-311.pyc differ diff --git a/core/admin.py b/core/admin.py index fd6f7d6..fd116b7 100644 --- a/core/admin.py +++ b/core/admin.py @@ -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('', obj.image.url) + return "-" + image_preview.short_description = _("Image Preview") \ No newline at end of file diff --git a/core/management/commands/__pycache__/seed_testimonials.cpython-311.pyc b/core/management/commands/__pycache__/seed_testimonials.cpython-311.pyc new file mode 100644 index 0000000..307d1b8 Binary files /dev/null and b/core/management/commands/__pycache__/seed_testimonials.cpython-311.pyc differ diff --git a/core/migrations/0024_testimonial.py b/core/migrations/0024_testimonial.py new file mode 100644 index 0000000..804a136 --- /dev/null +++ b/core/migrations/0024_testimonial.py @@ -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'], + }, + ), + ] diff --git a/core/migrations/__pycache__/0024_testimonial.cpython-311.pyc b/core/migrations/__pycache__/0024_testimonial.cpython-311.pyc new file mode 100644 index 0000000..76ca10c Binary files /dev/null and b/core/migrations/__pycache__/0024_testimonial.cpython-311.pyc differ diff --git a/core/models.py b/core/models.py index 4d7d3f5..fad8694 100644 --- a/core/models.py +++ b/core/models.py @@ -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 \ No newline at end of file diff --git a/core/templates/core/index.html b/core/templates/core/index.html index 7c7ada1..b2b8d8e 100644 --- a/core/templates/core/index.html +++ b/core/templates/core/index.html @@ -223,6 +223,45 @@ +{% if testimonials %} + + + + + {% trans "What Our Customers Say" %} + {% trans "Real stories from shippers and truck owners using MASAR." %} + + + {% for testimonial in testimonials %} + + + + {% for i in "12345" %} + + {% endfor %} + + "{{ testimonial.display_content }}" + + {% if testimonial.image %} + + {% else %} + + {{ testimonial.display_name|slice:":1" }} + + {% endif %} + + {{ testimonial.display_name }} + {{ testimonial.display_role }} + + + + + {% endfor %} + + + +{% endif %} + @@ -234,4 +273,4 @@ -{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/core/views.py b/core/views.py index fd34b2f..32e0082 100644 --- a/core/views.py +++ b/core/views.py @@ -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 - }) + }) \ No newline at end of file diff --git a/locale/ar/LC_MESSAGES/django.mo b/locale/ar/LC_MESSAGES/django.mo index 075d78e..2bb717e 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 9d94438..395ed80 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 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 "الشاحنات المسجلة"
{% trans "Real stories from shippers and truck owners using MASAR." %}
"{{ testimonial.display_content }}"