اذهب إلى المحتوى

السؤال

Recommended Posts

  • 1
نشر

بما أنك تريد القيام بذلك من أجل اللغة فهناك طريقة أفضل من استعمال ال regex  لذلك، و هو استعمال ال i18_patterns بحيث تقوم بإحاطة ال urls التي تريد أن يكون خيار اللغة مفعل من أجلهم و سيقوم الدجانغو تلقائياً بأخذ الخيارات التي قمت بإتاحتها عن طريق ال settings من أجل اللغة.

كمثال على ذلك:

from django.urls import path, include
from pages.views import HomeView
from django.conf.urls.i18n import i18n_patterns


urlpatterns = i18n_patterns(
    path('admin/', admin.site.urls),
    path('products/', include('products.urls')),
    path('accounts/', include('allauth.urls')),
    path('reviews/', include('reviews.urls')),
    path('language-preference/', include('pages.urls')),
    path('shopping_cart/', include('shopping_cart.urls')),
    path('', HomeView.as_view(), name='home'),
)

و في ملف ال settings يجب عليك وضع ما يلي:

LANGUAGES = (
    ('ar', gettext('Arabic')),
    ('fr', gettext('French')),
)

USE_I18N = True

و بالتالي هنا لن يأخذ غير الخيارين الذي يعبران عن اللغات التي قمت بتحديدها.

هذه الطريقة أفضل ﻷنها تلقائياً سوف تقوم بوضع اللغة على اللغة المحلية للمستخدم، بالطبع يجب عليك توفير زر يقوم بعملية التحويل (لن يقوم المستخدم بكتابة اللغة في الرابط)، و لكن حتى بدون زر التحويل هذا سوف يقوم بأخذ اللغة الافتراضية لجهاز المستخدم.

هناك طريقة أخرى تعتمد على ال regex و لكنها ليست مستحبة، أما إذا كنت تريد أن يقوم المستخدم بإدخال متحول و له شروط معينة يمكنك القيام بتعديل ذلك في ال view بحيث تقوم بإرجاع 404 في حال لم تكن قيمة المتحول ما تريده.

و إذا كنت مصراً على استعمال ال regex فيمكنك استعمال re_path و الذي هو يمثال ال path و لكن يقبل ب regex و بالتالي يمكنك ضمنه وضع خيار ar|fr بحيث سيأخذ فقط أحدهما.

  • 1
نشر

نلاحظ أن الجزء الأول مشترك بين المسارين، ثم يأتي قيمتين اختياريتين

exemple.com/fr , exemple.com/ar

urlpatterns = [

	url(r'^exemple.com/(ar|fr)', admin.site.urls),

]

أول جزء يكوت ثابت، ثم نضع بين قوسين القيمتين الاختياريتين و بينهم | الذي يعني أو - or - ( عربي أو فرنسي )

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...