Django application to provide useful utils and reusable parts of code for multi-languages sites.
Project description
django-lang 
GitHub

Test

Check Demo Project
- Check the demo repo on GitHub
Requirements
- Python 3.8+ supported.
- Django 3.2+ supported.
Setup
-
Install from pip:
pip install django-lang
-
Modify
settings.pyby adding the app toINSTALLED_APPS:INSTALLED_APPS = [ # ... "lang", # ... ]
-
Modify
settings.pyby adding the app toINSTALLED_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(fillsredirect_tofor the packaged language form). -
Modify your project's base template
base.htmlto include language's switcher styles:<head> ... <link rel="stylesheet" type="text/css" href="{% static 'lang/css/nav-link.css' %}"> ... </head>
-
Modify your project's base template
base.htmlto include attributes usingtranslate_urltemplate's tag:<head> ... <meta name="language" content="{{ LANGUAGE_CODE }}" /> {% include "hreflang.html" %} ... </head>
-
Modify your project's nav template
nav.htmlto 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:
- Top-level Django settings (
LANGUAGE_HREFLANG_MAP,LANGUAGE_WIKIPEDIA_SAMEAS,OG_LOCALE_BY_LANGUAGE,HREFLANG_DEFAULT_LANGUAGE,LANGUAGE_FLAG_MAP), if set. - Partial dicts under
settings.APP_CONFIG["lang"]merged onto the package defaults (for the threeLANGUAGE_*/OG_*maps and flag overrides). - 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.
- In
settings.py, add the optional context processor soredirect_tois filled forset_language’snext(unless you passredirect_tofrom each view):"lang.context_processors.language_switcher_next",
- In the base layout
<head>, afternav-link.css, add:<link rel="stylesheet" href="{% static 'lang/css/nav-link-standalone.css' %}"> <script src="{% static 'lang/js/display-standalone-class.js' %}"></script>
- 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
- brainstorm.it - Language's switching
- hakibenita.com - Url's translation for "hreflang" html's attributes
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
dac105fb46e5601b597d4659cd71f01e53ac852f51df229bd61774ec798c3541
|
|
| MD5 |
4c057bffe9c9c71faee5db101fad011c
|
|
| BLAKE2b-256 |
d6dc2e7358b999cbf08546a3c637e87c39abb5e20df1e306cb3a6e4dd685c000
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3ca91237b1f136883bcef426efc595ee39d1ed4701ab51df52bd49326c86c4fa
|
|
| MD5 |
b4a5e1536ebb7a6b2e4b9d0b17e7c644
|
|
| BLAKE2b-256 |
af465c7c5aca6ccebe95a198593b9133c447046c0827390e521c5e1e3a36d574
|