Autosave: 20260125-113016

This commit is contained in:
Flatlogic Bot 2026-01-25 11:30:16 +00:00
parent f2a747c61a
commit 192b5d7408
13 changed files with 515 additions and 149 deletions

Binary file not shown.

View File

@ -4,6 +4,12 @@ from django.utils.translation import gettext_lazy as _
from django.utils.translation import get_language from django.utils.translation import get_language
from .models import Profile, Parcel, Country, Governate, City from .models import Profile, Parcel, Country, Governate, City
class ContactForm(forms.Form):
name = forms.CharField(max_length=100, label=_("Name"), widget=forms.TextInput(attrs={'class': 'form-control', 'placeholder': _('Your Name')}))
email = forms.EmailField(label=_("Email"), widget=forms.EmailInput(attrs={'class': 'form-control', 'placeholder': _('Your Email')}))
subject = forms.CharField(max_length=200, label=_("Subject"), widget=forms.TextInput(attrs={'class': 'form-control', 'placeholder': _('Subject')}))
message = forms.CharField(label=_("Message"), widget=forms.Textarea(attrs={'class': 'form-control', 'rows': 5, 'placeholder': _('Your Message')}))
class UserRegistrationForm(forms.ModelForm): class UserRegistrationForm(forms.ModelForm):
password = forms.CharField(widget=forms.PasswordInput, label=_("Password")) password = forms.CharField(widget=forms.PasswordInput, label=_("Password"))
password_confirm = forms.CharField(widget=forms.PasswordInput, label=_("Confirm Password")) password_confirm = forms.CharField(widget=forms.PasswordInput, label=_("Confirm Password"))

38
core/mail.py Normal file
View File

@ -0,0 +1,38 @@
from django.core.mail import send_mail
from django.conf import settings
import logging
logger = logging.getLogger(__name__)
def send_contact_message(name, email, message):
"""
Sends a contact form message to the platform admins.
Args:
name (str): Sender's name
email (str): Sender's email
message (str): The message content
Returns:
bool: True if sent successfully, False otherwise
"""
try:
subject = f"New Contact Message from {name}"
full_message = f"You have received a new message from your website contact form.\n\n" \
f"Name: {name}\n" \
f"Email: {email}\n\n" \
f"Message:\n{message}"
recipient_list = settings.CONTACT_EMAIL_TO or [settings.DEFAULT_FROM_EMAIL]
send_mail(
subject=subject,
message=full_message,
from_email=settings.DEFAULT_FROM_EMAIL,
recipient_list=recipient_list,
fail_silently=False,
)
return True
except Exception as e:
logger.error(f"Failed to send contact message: {e}")
return False

View File

@ -36,6 +36,15 @@
body { body {
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; /* Example font suitable for Arabic */ font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; /* Example font suitable for Arabic */
} }
/* Fix alignment for form inputs in RTL */
.form-control, .form-select {
text-align: right;
}
/* Ensure labels are also right-aligned */
.form-label {
text-align: right;
width: 100%;
}
</style> </style>
{% endif %} {% endif %}
@ -54,6 +63,9 @@
<li class="nav-item"> <li class="nav-item">
<a class="nav-link px-3" href="{% url 'index' %}#how-it-works">{% trans "How it Works" %}</a> <a class="nav-link px-3" href="{% url 'index' %}#how-it-works">{% trans "How it Works" %}</a>
</li> </li>
<li class="nav-item">
<a class="nav-link px-3" href="{% url 'contact' %}">{% trans "Contact" %}</a>
</li>
{% if user.is_authenticated %} {% if user.is_authenticated %}
<li class="nav-item"> <li class="nav-item">
<a class="nav-link px-3" href="{% url 'dashboard' %}">{% trans "Dashboard" %}</a> <a class="nav-link px-3" href="{% url 'dashboard' %}">{% trans "Dashboard" %}</a>
@ -162,9 +174,9 @@
{% if platform_profile.vat_number %} {% if platform_profile.vat_number %}
<li class="mb-2">{% trans "VAT No:" %} {{ platform_profile.vat_number }}</li> <li class="mb-2">{% trans "VAT No:" %} {{ platform_profile.vat_number }}</li>
{% endif %} {% endif %}
{% if not platform_profile.address and not platform_profile.phone_number %} <li class="mt-3">
<li class="mb-2">{% trans "Contact information pending." %}</li> <a href="{% url 'contact' %}" class="text-white text-decoration-underline">{% trans "Send us a message" %} <i class="bi bi-arrow-right-short"></i></a>
{% endif %} </li>
</ul> </ul>
</div> </div>

View File

@ -0,0 +1,91 @@
{% extends 'base.html' %}
{% load i18n static %}
{% block title %}{% trans "Contact Us" %} | masarX{% endblock %}
{% block content %}
<section class="py-5 bg-light">
<div class="container">
<div class="row justify-content-center">
<div class="col-lg-8">
<div class="card shadow-sm border-0 rounded-3">
<div class="card-body p-4 p-md-5">
<div class="text-center mb-5">
<h2 class="fw-bold mb-2">{% trans "Contact Us" %}</h2>
<p class="text-muted">{% trans "We'd love to hear from you. Please fill out the form below." %}</p>
</div>
<form method="post">
{% csrf_token %}
{% if form.non_field_errors %}
<div class="alert alert-danger">
{% for error in form.non_field_errors %}
{{ error }}
{% endfor %}
</div>
{% endif %}
<div class="row mb-3">
<div class="col-md-6">
<label for="{{ form.name.id_for_label }}" class="form-label">{{ form.name.label }}</label>
{{ form.name }}
{% if form.name.errors %}
<div class="text-danger small">{{ form.name.errors.0 }}</div>
{% endif %}
</div>
<div class="col-md-6">
<label for="{{ form.email.id_for_label }}" class="form-label">{{ form.email.label }}</label>
{{ form.email }}
{% if form.email.errors %}
<div class="text-danger small">{{ form.email.errors.0 }}</div>
{% endif %}
</div>
</div>
<div class="mb-3">
<label for="{{ form.subject.id_for_label }}" class="form-label">{{ form.subject.label }}</label>
{{ form.subject }}
{% if form.subject.errors %}
<div class="text-danger small">{{ form.subject.errors.0 }}</div>
{% endif %}
</div>
<div class="mb-4">
<label for="{{ form.message.id_for_label }}" class="form-label">{{ form.message.label }}</label>
{{ form.message }}
{% if form.message.errors %}
<div class="text-danger small">{{ form.message.errors.0 }}</div>
{% endif %}
</div>
<div class="d-grid">
<button type="submit" class="btn btn-masarx-primary btn-lg">{% trans "Send Message" %}</button>
</div>
</form>
</div>
</div>
<!-- Additional Contact Info (Optional, if you want it visible on this page too) -->
{% if platform_profile %}
<div class="mt-5 text-center">
<h5 class="fw-bold mb-3">{% trans "Or reach us at" %}</h5>
<div class="d-flex justify-content-center gap-4 flex-wrap">
{% if platform_profile.phone_number %}
<div><i class="bi bi-telephone me-2 text-primary"></i>{{ platform_profile.phone_number }}</div>
{% endif %}
{% if platform_profile.email %}
<div><i class="bi bi-envelope me-2 text-primary"></i>{{ platform_profile.email }}</div>
{% endif %}
{% if platform_profile.address %}
<div><i class="bi bi-geo-alt me-2 text-primary"></i>{{ platform_profile.address }}</div>
{% endif %}
</div>
</div>
{% endif %}
</div>
</div>
</div>
</section>
{% endblock %}

View File

@ -1,28 +1,24 @@
from django.urls import path from django.urls import path
from . import views
from django.contrib.auth import views as auth_views from django.contrib.auth import views as auth_views
from . import views
urlpatterns = [ urlpatterns = [
path('', views.index, name='index'), path('', views.index, name='index'),
path('register/', views.register, name='register'),
path('login/', auth_views.LoginView.as_view(template_name='core/login.html'), name='login'), path('login/', auth_views.LoginView.as_view(template_name='core/login.html'), name='login'),
path('logout/', auth_views.LogoutView.as_view(next_page='index'), name='logout'), path('logout/', auth_views.LogoutView.as_view(next_page='/'), name='logout'),
path('register/', views.register, name='register'),
path('dashboard/', views.dashboard, name='dashboard'), path('dashboard/', views.dashboard, name='dashboard'),
path('shipment-request/', views.shipment_request, name='shipment_request'), path('shipment-request/', views.shipment_request, name='shipment_request'),
path('accept-parcel/<int:parcel_id>/', views.accept_parcel, name='accept_parcel'), path('accept-parcel/<int:parcel_id>/', views.accept_parcel, name='accept_parcel'),
path('update-status/<int:parcel_id>/', views.update_status, name='update_status'), path('update-status/<int:parcel_id>/', views.update_status, name='update_status'),
path('article/', views.article_detail, name='article_detail'), path('initiate-payment/<int:parcel_id>/', views.initiate_payment, name='initiate_payment'),
path('payment-success/', views.payment_success, name='payment_success'),
path('payment-cancel/', views.payment_cancel, name='payment_cancel'),
# AJAX for locations path('article/1/', views.article_detail, name='article_detail'),
path('ajax/get-governates/', views.get_governates, name='get_governates'), path('ajax/get-governates/', views.get_governates, name='get_governates'),
path('ajax/get-cities/', views.get_cities, name='get_cities'), path('ajax/get-cities/', views.get_cities, name='get_cities'),
# Thawani Payment
path('payment/initiate/<int:parcel_id>/', views.initiate_payment, name='initiate_payment'),
path('payment/success/', views.payment_success, name='payment_success'),
path('payment/cancel/', views.payment_cancel, name='payment_cancel'),
# Static pages
path('privacy-policy/', views.privacy_policy, name='privacy_policy'), path('privacy-policy/', views.privacy_policy, name='privacy_policy'),
path('terms-conditions/', views.terms_conditions, name='terms_conditions'), path('terms-conditions/', views.terms_conditions, name='terms_conditions'),
path('contact/', views.contact_view, name='contact'),
] ]

View File

@ -3,7 +3,7 @@ from django.contrib.auth import login, authenticate, logout
from django.contrib.auth.forms import AuthenticationForm from django.contrib.auth.forms import AuthenticationForm
from django.contrib.auth.decorators import login_required from django.contrib.auth.decorators import login_required
from .models import Parcel, Profile, Country, Governate, City from .models import Parcel, Profile, Country, Governate, City
from .forms import UserRegistrationForm, ParcelForm from .forms import UserRegistrationForm, ParcelForm, ContactForm
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from django.utils.translation import get_language from django.utils.translation import get_language
from django.contrib import messages from django.contrib import messages
@ -17,6 +17,7 @@ from .whatsapp_utils import (
notify_driver_assigned, notify_driver_assigned,
notify_status_change notify_status_change
) )
from .mail import send_contact_message
def index(request): def index(request):
tracking_id = request.GET.get('tracking_id') tracking_id = request.GET.get('tracking_id')
@ -188,3 +189,22 @@ def privacy_policy(request):
def terms_conditions(request): def terms_conditions(request):
return render(request, 'core/terms_conditions.html') return render(request, 'core/terms_conditions.html')
def contact_view(request):
if request.method == 'POST':
form = ContactForm(request.POST)
if form.is_valid():
# Send email
sent = send_contact_message(
name=form.cleaned_data['name'],
email=form.cleaned_data['email'],
message=form.cleaned_data['message']
)
if sent:
messages.success(request, _("Your message has been sent successfully!"))
else:
messages.error(request, _("There was an error sending your message. Please try again later."))
return redirect('contact')
else:
form = ContactForm()
return render(request, 'core/contact.html', {'form': form})

Binary file not shown.

View File

@ -7,7 +7,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-25 07:25+0000\n" "POT-Creation-Date: 2026-01-25 11:14+0000\n"
"PO-Revision-Date: 2026-01-25 07:13+0000\n" "PO-Revision-Date: 2026-01-25 07:13+0000\n"
"Last-Translator: Gemini\n" "Last-Translator: Gemini\n"
"Language-Team: Arabic\n" "Language-Team: Arabic\n"
@ -18,199 +18,393 @@ msgstr ""
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " "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" "&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"
#: core/forms.py:7 #: core/forms.py:8
msgid "Password" msgid "Name"
msgstr "كلمة المرور" msgstr "الاسم"
#: core/forms.py:8 #: core/forms.py:8
msgid "Confirm Password" msgid "Your Name"
msgstr "تأكيد كلمة المرور" msgstr "اسمك"
#: core/forms.py:9 #: core/forms.py:9 core/forms.py:28
msgid "Register as"
msgstr "التسجيل كـ"
#: core/forms.py:10 core/models.py:13
msgid "Phone Number"
msgstr "رقم الهاتف"
#: core/forms.py:16
msgid "Username"
msgstr "اسم المستخدم"
#: core/forms.py:17
msgid "Email" msgid "Email"
msgstr "البريد الإلكتروني" msgstr "البريد الإلكتروني"
#: core/forms.py:18 #: core/forms.py:9
msgid "Your Email"
msgstr "بريدك الإلكتروني"
#: core/forms.py:10
msgid "Subject"
msgstr "الموضوع"
#: core/forms.py:11
msgid "Message"
msgstr "الرسالة"
#: core/forms.py:11
msgid "Your Message"
msgstr "رسالتك"
#: core/forms.py:14
msgid "Password"
msgstr "كلمة المرور"
#: core/forms.py:15
msgid "Confirm Password"
msgstr "تأكيد كلمة المرور"
#: core/forms.py:16
msgid "Register as"
msgstr "التسجيل كـ"
#: core/forms.py:17 core/models.py:69 core/models.py:154
msgid "Phone Number"
msgstr "رقم الهاتف"
#: core/forms.py:19 core/models.py:23 core/models.py:27 core/models.py:71
msgid "Country"
msgstr "الدولة"
#: core/forms.py:20 core/models.py:41 core/models.py:45 core/models.py:72
msgid "Governate"
msgstr "المحافظة"
#: core/forms.py:21 core/models.py:59 core/models.py:73
msgid "City"
msgstr "المدينة"
#: core/forms.py:27
msgid "Username"
msgstr "اسم المستخدم"
#: core/forms.py:29
msgid "First Name" msgid "First Name"
msgstr "الاسم الأول" msgstr "الاسم الأول"
#: core/forms.py:19 #: core/forms.py:30
msgid "Last Name" msgid "Last Name"
msgstr "اسم العائلة" msgstr "اسم العائلة"
#: core/forms.py:26 #: core/forms.py:69
msgid "Passwords don't match" msgid "Passwords don't match"
msgstr "كلمات المرور غير متطابقة" msgstr "كلمات المرور غير متطابقة"
#: core/forms.py:46 #: core/forms.py:97
msgid "What are you sending?" msgid "What are you sending?"
msgstr "ماذا سترسل؟" msgstr "ماذا سترسل؟"
#: core/forms.py:48 #: core/forms.py:104 core/forms.py:109
msgid "123 Street, City" msgid "Street/Building"
msgstr "123 شارع، مدينة" msgstr "الشارع/المبنى"
#: core/forms.py:49 #: core/forms.py:115
msgid "456 Avenue, City"
msgstr "456 جادة، مدينة"
#: core/forms.py:54
msgid "Package Description" msgid "Package Description"
msgstr "وصف الطرد" msgstr "وصف الطرد"
#: core/forms.py:55 core/models.py:36 #: core/forms.py:116 core/models.py:112
msgid "Weight (kg)" msgid "Weight (kg)"
msgstr "الوزن (كجم)" msgstr "الوزن (كجم)"
#: core/forms.py:56 core/models.py:38 #: core/forms.py:117
msgid "Pickup Address" msgid "Shipping Price (OMR)"
msgstr "عنوان الاستلام" msgstr "سعر الشحن (ر.ع)"
#: core/forms.py:57 core/models.py:39 #: core/forms.py:118 core/models.py:116
msgid "Delivery Address" msgid "Pickup Country"
msgstr "عنوان التوصيل" msgstr "دولة الاستلام"
#: core/forms.py:58 core/models.py:41 #: core/forms.py:119 core/models.py:117
msgid "Pickup Governate"
msgstr "محافظة الاستلام"
#: core/forms.py:120 core/models.py:118
msgid "Pickup City"
msgstr "مدينة الاستلام"
#: core/forms.py:121
msgid "Pickup Address (Street/Building)"
msgstr "عنوان الاستلام (الشارع/المبنى)"
#: core/forms.py:122 core/models.py:122
msgid "Delivery Country"
msgstr "دولة التوصيل"
#: core/forms.py:123 core/models.py:123
msgid "Delivery Governate"
msgstr "محافظة التوصيل"
#: core/forms.py:124 core/models.py:124
msgid "Delivery City"
msgstr "مدينة التوصيل"
#: core/forms.py:125
msgid "Delivery Address (Street/Building)"
msgstr "عنوان التوصيل (الشارع/المبنى)"
#: core/forms.py:126 core/models.py:127
msgid "Receiver Name" msgid "Receiver Name"
msgstr "اسم المستلم" msgstr "اسم المستلم"
#: core/forms.py:59 core/models.py:42 #: core/forms.py:127 core/models.py:128
msgid "Receiver Phone" msgid "Receiver Phone"
msgstr "هاتف المستلم" msgstr "هاتف المستلم"
#: core/models.py:8 core/models.py:32 #: core/models.py:10 core/models.py:28 core/models.py:46
msgid "Name (English)"
msgstr "الاسم (إنجليزي)"
#: core/models.py:11 core/models.py:29 core/models.py:47
msgid "Name (Arabic)"
msgstr "الاسم (عربي)"
#: core/models.py:24
msgid "Countries"
msgstr "الدول"
#: core/models.py:42
msgid "Governates"
msgstr "المحافظات"
#: core/models.py:60
msgid "Cities"
msgstr "المدن"
#: core/models.py:64 core/models.py:108
msgid "Shipper" msgid "Shipper"
msgstr "شاحن" msgstr "شاحن"
#: core/models.py:9 #: core/models.py:65
msgid "Car Owner" msgid "Car Owner"
msgstr "صاحب سيارة" msgstr "صاحب سيارة"
#: core/models.py:11 #: core/models.py:67
msgid "User" msgid "User"
msgstr "مستخدم" msgstr "مستخدم"
#: core/models.py:12 #: core/models.py:68
msgid "Role" msgid "Role"
msgstr "الدور" msgstr "الدور"
#: core/models.py:19 #: core/models.py:79
msgid "Profile" msgid "Profile"
msgstr "الملف الشخصي" msgstr "الملف الشخصي"
#: core/models.py:20 #: core/models.py:80
msgid "Profiles" msgid "Profiles"
msgstr "الملفات الشخصية" msgstr "الملفات الشخصية"
#: core/models.py:24 #: core/models.py:94
msgid "Pending Pickup" msgid "Pending Pickup"
msgstr "في انتظار الاستلام" msgstr "في انتظار الاستلام"
#: core/models.py:25 #: core/models.py:95
msgid "Picked Up" msgid "Picked Up"
msgstr "تم الاستلام" msgstr "تم الاستلام"
#: core/models.py:26 #: core/models.py:96
msgid "In Transit" msgid "In Transit"
msgstr "في الطريق" msgstr "في الطريق"
#: core/models.py:27 #: core/models.py:97
msgid "Delivered" msgid "Delivered"
msgstr "تم التوصيل" msgstr "تم التوصيل"
#: core/models.py:28 #: core/models.py:98
msgid "Cancelled" msgid "Cancelled"
msgstr "ملغي" msgstr "ملغي"
#: core/models.py:31 #: core/models.py:102
msgid "Pending"
msgstr "قيد الانتظار"
#: core/models.py:103
msgid "Paid"
msgstr "مدفوع"
#: core/models.py:104
msgid "Failed"
msgstr "فشل"
#: core/models.py:107
msgid "Tracking Number" msgid "Tracking Number"
msgstr "رقم التتبع" msgstr "رقم التتبع"
#: core/models.py:33 core/templates/core/shipper_dashboard.html:28 #: core/models.py:109 core/templates/core/shipper_dashboard.html:42
msgid "Carrier" msgid "Carrier"
msgstr "الناقل" msgstr "الناقل"
#: core/models.py:35 #: core/models.py:111
msgid "Description" msgid "Description"
msgstr "الوصف" msgstr "الوصف"
#: core/models.py:36 #: core/models.py:112
msgid "Weight in kg" msgid "Weight in kg"
msgstr "الوزن بالكيلوجرام" msgstr "الوزن بالكيلوجرام"
#: core/models.py:44 core/templates/core/index.html:30 #: core/models.py:113
msgid "Price (OMR)"
msgstr "السعر (ر.ع)"
#: core/models.py:119
msgid "Pickup Address"
msgstr "عنوان الاستلام"
#: core/models.py:125
msgid "Delivery Address"
msgstr "عنوان التوصيل"
#: core/models.py:130 core/templates/core/index.html:30
msgid "Status" msgid "Status"
msgstr "الحالة" msgstr "الحالة"
#: core/models.py:45 #: core/models.py:131
msgid "Payment Status"
msgstr "حالة الدفع"
#: core/models.py:132
msgid "Thawani Session ID"
msgstr "معرف جلسة ثواني"
#: core/models.py:134
msgid "Created At" msgid "Created At"
msgstr "أنشئ في" msgstr "أنشئ في"
#: core/models.py:46 #: core/models.py:135
msgid "Updated At" msgid "Updated At"
msgstr "حدث في" msgstr "حدث في"
#: core/models.py:57 #: core/models.py:146
msgid "Parcel" msgid "Parcel"
msgstr "طرد" msgstr "طرد"
#: core/models.py:58 #: core/models.py:147
msgid "Parcels" msgid "Parcels"
msgstr "طرود" msgstr "طرود"
#: core/templates/base.html:9 #: core/models.py:150
msgid "Platform Name"
msgstr "اسم المنصة"
#: core/models.py:151
msgid "Logo"
msgstr "الشعار"
#: core/models.py:152
msgid "Slogan"
msgstr "الشعار اللفظي"
#: core/models.py:153
msgid "Address"
msgstr "العنوان"
#: core/models.py:155
msgid "Registration Number"
msgstr "رقم السجل التجاري"
#: core/models.py:156
msgid "VAT Number"
msgstr "الرقم الضريبي"
#: core/models.py:157 core/templates/base.html:177
#: core/templates/core/privacy_policy.html:6
msgid "Privacy Policy"
msgstr "سياسة الخصوصية"
#: core/models.py:158 core/templates/core/terms_conditions.html:6
msgid "Terms and Conditions"
msgstr "الشروط والأحكام"
#: core/models.py:164 core/models.py:165
msgid "Platform Profile"
msgstr "ملف تعريف المنصة"
#: core/templates/base.html:9 core/templates/base.html:149
msgid "Small Shipments, Smart Delivery" msgid "Small Shipments, Smart Delivery"
msgstr "شحنات صغيرة، توصيل ذكي" msgstr "شحنات صغيرة، توصيل ذكي"
#: core/templates/base.html:62 #: core/templates/base.html:55
msgid "How it Works" msgid "How it Works"
msgstr "كيف يعمل" msgstr "كيف يعمل"
#: core/templates/base.html:66 #: core/templates/base.html:58
msgid "Contact"
msgstr "اتصل بنا"
#: core/templates/base.html:62
msgid "Dashboard" msgid "Dashboard"
msgstr "لوحة التحكم" msgstr "لوحة التحكم"
#: core/templates/base.html:69 #: core/templates/base.html:66
msgid "Admin"
msgstr "المسؤول"
#: core/templates/base.html:70
msgid "Hello" msgid "Hello"
msgstr "مرحباً" msgstr "مرحباً"
#: core/templates/base.html:74 #: core/templates/base.html:75
msgid "Logout" msgid "Logout"
msgstr "تسجيل الخروج" msgstr "تسجيل الخروج"
#: core/templates/base.html:79 core/templates/core/login.html:4 #: core/templates/base.html:80 core/templates/core/login.html:4
#: core/templates/core/login.html:25 #: core/templates/core/login.html:25
msgid "Login" msgid "Login"
msgstr "تسجيل الدخول" msgstr "تسجيل الدخول"
#: core/templates/base.html:82 core/templates/core/register.html:4 #: core/templates/base.html:83 core/templates/core/register.html:4
msgid "Register" msgid "Register"
msgstr "تسجيل" msgstr "تسجيل"
#: core/templates/base.html:110 #: core/templates/base.html:111
msgid "Find Loads" msgid "Find Loads"
msgstr "البحث عن شحنات" msgstr "البحث عن شحنات"
#: core/templates/base.html:112 core/templates/core/index.html:13 #: core/templates/base.html:113 core/templates/core/index.html:13
msgid "Start Shipping" msgid "Start Shipping"
msgstr "ابدأ الشحن" msgstr "ابدأ الشحن"
#: core/templates/base.html:137 #: core/templates/base.html:154 core/templates/core/contact.html:4
#: core/templates/core/contact.html:14
msgid "Contact Us"
msgstr "اتصل بنا"
#: core/templates/base.html:163
msgid "Reg No:"
msgstr "رقم السجل:"
#: core/templates/base.html:166
msgid "VAT No:"
msgstr "الرقم الضريبي:"
#: core/templates/base.html:169
msgid "Send us a message"
msgstr "أرسل لنا رسالة"
#: core/templates/base.html:175
msgid "Legal"
msgstr "قانوني"
#: core/templates/base.html:178
msgid "Terms & Conditions"
msgstr "الشروط والأحكام"
#: core/templates/base.html:186
msgid "All rights reserved." msgid "All rights reserved."
msgstr "جميع الحقوق محفوظة." msgstr "جميع الحقوق محفوظة."
#: core/templates/core/contact.html:15
msgid "We'd love to hear from you. Please fill out the form below."
msgstr "نود أن نسمع منك. يرجى ملء النموذج أدناه."
#: core/templates/core/contact.html:63
msgid "Send Message"
msgstr "إرسال الرسالة"
#: core/templates/core/contact.html:72
msgid "Or reach us at"
msgstr "أو تواصل معنا عبر"
#: core/templates/core/driver_dashboard.html:6 #: core/templates/core/driver_dashboard.html:6
msgid "Driver Dashboard" msgid "Driver Dashboard"
msgstr "لوحة تحكم السائق" msgstr "لوحة تحكم السائق"
@ -231,34 +425,34 @@ msgstr "الاستلام"
msgid "Delivery" msgid "Delivery"
msgstr "التوصيل" msgstr "التوصيل"
#: core/templates/core/driver_dashboard.html:29 #: core/templates/core/driver_dashboard.html:30
msgid "Weight" msgid "Weight"
msgstr "الوزن" msgstr "الوزن"
#: core/templates/core/driver_dashboard.html:32 #: core/templates/core/driver_dashboard.html:35
msgid "Accept Shipment" msgid "Accept Shipment"
msgstr "قبول الشحنة" msgstr "قبول الشحنة"
#: core/templates/core/driver_dashboard.html:40 #: core/templates/core/driver_dashboard.html:43
msgid "No shipments available at the moment." msgid "No shipments available at the moment."
msgstr "لا توجد شحنات متوفرة حالياً." msgstr "لا توجد شحنات متوفرة حالياً."
#: core/templates/core/driver_dashboard.html:57 #: core/templates/core/driver_dashboard.html:60
#: core/templates/core/index.html:35 #: core/templates/core/index.html:35
#: core/templates/core/shipper_dashboard.html:25 #: core/templates/core/shipper_dashboard.html:25
msgid "To" msgid "To"
msgstr "إلى" msgstr "إلى"
#: core/templates/core/driver_dashboard.html:58 #: core/templates/core/driver_dashboard.html:61
#: core/templates/core/shipper_dashboard.html:27 #: core/templates/core/shipper_dashboard.html:41
msgid "Receiver" msgid "Receiver"
msgstr "المستلم" msgstr "المستلم"
#: core/templates/core/driver_dashboard.html:69 #: core/templates/core/driver_dashboard.html:72
msgid "Update" msgid "Update"
msgstr "تحديث" msgstr "تحديث"
#: core/templates/core/driver_dashboard.html:77 #: core/templates/core/driver_dashboard.html:80
msgid "You haven't accepted any shipments yet." msgid "You haven't accepted any shipments yet."
msgstr "لم تقبل أي شحنات بعد." msgstr "لم تقبل أي شحنات بعد."
@ -369,6 +563,10 @@ msgstr "ليس لديك حساب؟"
msgid "Register here" msgid "Register here"
msgstr "سجل هنا" msgstr "سجل هنا"
#: core/templates/core/privacy_policy.html:11
msgid "Privacy Policy not available yet."
msgstr "سياسة الخصوصية غير متوفرة بعد."
#: core/templates/core/register.html:13 #: core/templates/core/register.html:13
msgid "Join masarX" msgid "Join masarX"
msgstr "انضم إلى مسارX" msgstr "انضم إلى مسارX"
@ -385,11 +583,34 @@ msgstr "لديك حساب بالفعل؟"
msgid "Login here" msgid "Login here"
msgstr "سجل دخولك هنا" msgstr "سجل دخولك هنا"
#: core/templates/core/register.html:48
#: core/templates/core/shipment_request.html:143
msgid "Select Governate"
msgstr "اختر المحافظة"
#: core/templates/core/register.html:49 core/templates/core/register.html:67
#: core/templates/core/shipment_request.html:144
#: core/templates/core/shipment_request.html:162
msgid "Select City"
msgstr "اختر المدينة"
#: core/templates/core/shipment_request.html:10 #: core/templates/core/shipment_request.html:10
msgid "Request a Shipment" msgid "Request a Shipment"
msgstr "طلب شحنة" msgstr "طلب شحنة"
#: core/templates/core/shipment_request.html:24 #: core/templates/core/shipment_request.html:39
msgid "Pickup Details"
msgstr "تفاصيل الاستلام"
#: core/templates/core/shipment_request.html:72
msgid "Delivery Details"
msgstr "تفاصيل التوصيل"
#: core/templates/core/shipment_request.html:105
msgid "Receiver Details"
msgstr "تفاصيل المستلم"
#: core/templates/core/shipment_request.html:123
msgid "Submit Request" msgid "Submit Request"
msgstr "إرسال الطلب" msgstr "إرسال الطلب"
@ -401,88 +622,70 @@ msgstr "شحناتي"
msgid "New Shipment" msgid "New Shipment"
msgstr "شحنة جديدة" msgstr "شحنة جديدة"
#: core/templates/core/shipper_dashboard.html:28 #: core/templates/core/shipper_dashboard.html:36
msgid "Pay Now"
msgstr "ادفع الآن"
#: core/templates/core/shipper_dashboard.html:42
msgid "Waiting for pickup" msgid "Waiting for pickup"
msgstr "في انتظار الاستلام" msgstr "في انتظار الاستلام"
#: core/templates/core/shipper_dashboard.html:36 #: core/templates/core/shipper_dashboard.html:50
msgid "You haven't sent any shipments yet." msgid "You haven't sent any shipments yet."
msgstr "لم ترسل أي شحنات بعد." msgstr "لم ترسل أي شحنات بعد."
#: core/templates/core/shipper_dashboard.html:37 #: core/templates/core/shipper_dashboard.html:51
msgid "Send your first shipment" msgid "Send your first shipment"
msgstr "أرسل أول شحنة لك" msgstr "أرسل أول شحنة لك"
#: core/views.py:18 #: core/templates/core/terms_conditions.html:11
msgid "Terms and Conditions not available yet."
msgstr "الشروط والأحكام غير متوفرة بعد."
#: core/views.py:30
msgid "Parcel not found." msgid "Parcel not found."
msgstr "الطرد غير موجود." msgstr "الطرد غير موجود."
#: core/views.py:55 #: core/views.py:70
msgid "Only shippers can request shipments." msgid "Only shippers can request shipments."
msgstr "فقط الشاحنين يمكنهم طلب شحنات." msgstr "فقط الشاحنين يمكنهم طلب شحنات."
#: core/views.py:64 #: core/views.py:83
msgid "Shipment requested successfully! Tracking ID: " msgid "Shipment requested successfully! Tracking ID: "
msgstr "تم طلب الشحنة بنجاح! رقم التتبع: " msgstr "تم طلب الشحنة بنجاح! رقم التتبع: "
#: core/views.py:73 #: core/views.py:93
msgid "Only car owners can accept shipments." msgid "Only car owners can accept shipments."
msgstr "فقط أصحاب السيارات يمكنهم قبول الشحنات." msgstr "فقط أصحاب السيارات يمكنهم قبول الشحنات."
#: core/views.py:80 #: core/views.py:104
msgid "You have accepted the shipment!" msgid "You have accepted the shipment!"
msgstr "لقد قبلت الشحنة!" msgstr "لقد قبلت الشحنة!"
#: core/views.py:91 #: core/views.py:119
msgid "Status updated successfully!" msgid "Status updated successfully!"
msgstr "تم تحديث الحالة بنجاح!" msgstr "تم تحديث الحالة بنجاح!"
#: core/templates/core/shipment_request.html:38 #: core/views.py:138
msgid "Pickup Details" msgid "Could not initiate payment. Please try again later."
msgstr "تفاصيل الاستلام" msgstr "تعذر بدء الدفع. يرجى المحاولة مرة أخرى لاحقاً."
#: core/templates/core/shipment_request.html:64 #: core/views.py:157
msgid "Delivery Details" msgid "Payment successful! Your shipment is now active."
msgstr "تفاصيل التوصيل" msgstr "تم الدفع بنجاح! شحنتك نشطة الآن."
#: core/templates/core/shipment_request.html:90 #: core/views.py:159
msgid "Receiver Details" msgid "Payment status is pending or failed. Please check your dashboard."
msgstr "تفاصيل المستلم" msgstr "حالة الدفع معلقة أو فشلت. يرجى التحقق من لوحة التحكم."
#: core/templates/core/shipment_request.html:113 #: core/views.py:165
msgid "Select Governate" msgid "Payment was cancelled."
msgstr "اختر المحافظة" msgstr "تم إلغاء الدفع."
#: core/templates/core/shipment_request.html:114 #: core/views.py:204
msgid "Select City" msgid "Your message has been sent successfully!"
msgstr "اختر المدينة" msgstr "تم إرسال رسالتك بنجاح!"
msgid "Shipping Price (OMR)" #: core/views.py:206
msgstr "سعر الشحن (ر.ع)" msgid "There was an error sending your message. Please try again later."
msgstr "حدث خطأ أثناء إرسال رسالتك. يرجى المحاولة مرة أخرى لاحقاً."
msgid "Pickup Country"
msgstr "دولة الاستلام"
msgid "Pickup Governate"
msgstr "محافظة الاستلام"
msgid "Pickup City"
msgstr "مدينة الاستلام"
msgid "Pickup Address (Street/Building)"
msgstr "عنوان الاستلام (الشارع/المبنى)"
msgid "Delivery Country"
msgstr "دولة التوصيل"
msgid "Delivery Governate"
msgstr "محافظة التوصيل"
msgid "Delivery City"
msgstr "مدينة التوصيل"
msgid "Delivery Address (Street/Building)"
msgstr "عنوان التوصيل (الشارع/المبنى)"
msgid "Street/Building"
msgstr "الشارع/المبنى"

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB