add the language code prefix to every url pattern within this function this may only be used in the root urlconf not in an included urlconf return a tuple of two booleans true if i18npatterns localeprefixpattern is used in the urlconf true if the default language should be prefixed add the language code prefix to every url pattern within this function this may only be used in the root urlconf not in an included urlconf return a tuple of two booleans true if i18n_patterns localeprefixpattern is used in the urlconf true if the default language should be prefixed
import functools

from django.conf import settings
from django.urls import LocalePrefixPattern, URLResolver, get_resolver, path
from django.views.i18n import set_language


def i18n_patterns(*urls, prefix_default_language=True):
    
    if not settings.USE_I18N:
        return list(urls)
    return [
        URLResolver(
            LocalePrefixPattern(prefix_default_language=prefix_default_language),
            list(urls),
        )
    ]


@functools.cache
def is_language_prefix_patterns_used(urlconf):
    
    for url_pattern in get_resolver(urlconf).url_patterns:
        if isinstance(url_pattern.pattern, LocalePrefixPattern):
            return True, url_pattern.pattern.prefix_default_language
    return False, False


urlpatterns = [
    path("setlang/", set_language, name="set_language"),
]