Skip to main content

Django application to provide useful utils and reusable parts of code for multi-languages sites.

Project description

django-lang PyPi license

PyPi status PyPi version PyPi python version PyPi downloads PyPi downloads PyPi downloads

GitHub GitHub release GitHub release

Test codecov.io pre-commit.ci status gitthub.com

Check Demo Project

  • Check the demo repo on GitHub

Requirements

  • Python 3.8+ supported.
  • Django 3.2+ supported.

Setup

  1. Install from pip:

    pip install django-lang
    
  2. Modify settings.py by adding the app to INSTALLED_APPS:

    INSTALLED_APPS = [
        # ...
        "lang",
        # ...
    ]
    
  3. Modify settings.py by adding the app to INSTALLED_APPS:

    TEMPLATES = [
        {
            "BACKEND": "django.template.backends.django.DjangoTemplates",
            "DIRS": [os.path.join(PROJECT_DIR, "templates")],
            "APP_DIRS": True,
            "OPTIONS": {
                "context_processors": [
                    "django.template.context_processors.debug",
                    "django.template.context_processors.request",
                    "django.contrib.auth.context_processors.auth",
                    "django.contrib.messages.context_processors.messages",
                    "lang.context_processors.from_settings",
                    "lang.context_processors.seo_i18n",
                ],
            },
        },
    ]
    

    Optional: lang.context_processors.language_switcher_next (fills redirect_to for the packaged language form).

  4. Modify your project's base template base.html to include language's switcher styles:

    <head>
        ...
        <link rel="stylesheet" type="text/css" href="{% static 'lang/css/nav-link.css' %}">
        ...
    </head>
    
  5. Modify your project's base template base.html to include attributes using translate_url template's tag:

    <head>
        ...
        <meta name="language" content="{{ LANGUAGE_CODE }}" />
        {% include "hreflang.html" %}
        ...
    </head>
    
  6. Modify your project's nav template nav.html to include language's switcher:

    <nav class="navbar">
        ...
        <ul class="nav navbar-nav">
            {% include "lang/nav-link.html" %}
        </ul>
        ...
    </nav>
    

Configuration: lang.conf and APP_CONFIG

Built-in maps live in lang.defaults. At runtime, :mod:lang.conf resolves values lazily:

  1. Top-level Django settings (LANGUAGE_HREFLANG_MAP, LANGUAGE_WIKIPEDIA_SAMEAS, OG_LOCALE_BY_LANGUAGE, HREFLANG_DEFAULT_LANGUAGE, LANGUAGE_FLAG_MAP), if set.
  2. Partial dicts under settings.APP_CONFIG["lang"] merged onto the package defaults (for the three LANGUAGE_* / OG_* maps and flag overrides).
  3. Otherwise the content of lang.defaults.

You do not need to import lang.defaults from settings.py. Typical site-only override for x-default::

APP_CONFIG = {
    "lang": {
        "HREFLANG_DEFAULT_LANGUAGE": "it",
    },
}

Or use the usual flat settings (full replacement for the dict keys, or HREFLANG_DEFAULT_LANGUAGE at top level) if you prefer.

Optional: language control beside the hamburger on small viewports

nav-link-standalone.css shows the extra switcher next to the menu toggle below the lg breakpoint (~992px) and hides the duplicate inside the collapsed drawer. Optional script display-standalone-class.js only adds class display-standalone on <html> for installed web apps; layout no longer depends on it.

  1. In settings.py, add the optional context processor so redirect_to is filled for set_language’s next (unless you pass redirect_to from each view):
    "lang.context_processors.language_switcher_next",
    
  2. In the base layout <head>, after nav-link.css, add:
    <link rel="stylesheet" href="{% static 'lang/css/nav-link-standalone.css' %}">
    <script src="{% static 'lang/js/display-standalone-class.js' %}"></script>
    
  3. Next to your mobile menu button, include:
    {% include "lang/nav-link-standalone.html" %}
    

Packaged templates:

  • hreflang.html (app template root) — <link rel="alternate" hreflang="…"> for the current view.
  • lang/nav-link.html — language <select> (optional context: lang_switcher_id, lang_switcher_extra_class).
  • lang/nav-link-standalone.html — duplicate switcher beside the mobile toggle (small viewports / PWA).

Run Example Project

git clone --depth=50 --branch=django-lang https://github.com/DLRSP/example.git DLRSP/example
cd DLRSP/example
python manage.py runserver

Now browser the app @ http://127.0.0.1:8000

References

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django_lang-0.6.0.tar.gz (30.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

django_lang-0.6.0-py2.py3-none-any.whl (14.1 kB view details)

Uploaded Python 2Python 3

File details

Details for the file django_lang-0.6.0.tar.gz.

File metadata

  • Download URL: django_lang-0.6.0.tar.gz
  • Upload date:
  • Size: 30.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for django_lang-0.6.0.tar.gz
Algorithm Hash digest
SHA256 dac105fb46e5601b597d4659cd71f01e53ac852f51df229bd61774ec798c3541
MD5 4c057bffe9c9c71faee5db101fad011c
BLAKE2b-256 d6dc2e7358b999cbf08546a3c637e87c39abb5e20df1e306cb3a6e4dd685c000

See more details on using hashes here.

File details

Details for the file django_lang-0.6.0-py2.py3-none-any.whl.

File metadata

  • Download URL: django_lang-0.6.0-py2.py3-none-any.whl
  • Upload date:
  • Size: 14.1 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for django_lang-0.6.0-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 3ca91237b1f136883bcef426efc595ee39d1ed4701ab51df52bd49326c86c4fa
MD5 b4a5e1536ebb7a6b2e4b9d0b17e7c644
BLAKE2b-256 af465c7c5aca6ccebe95a198593b9133c447046c0827390e521c5e1e3a36d574

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page