Add language selection feature and internationalization support

This commit is contained in:
Eduardo Silva
2025-04-14 15:42:12 -03:00
parent 701f957642
commit e430580aba
18 changed files with 261 additions and 107 deletions

0
intl_tools/__init__.py Normal file
View File

1
intl_tools/admin.py Normal file
View File

@@ -0,0 +1 @@
# Register your models here.

6
intl_tools/apps.py Normal file
View File

@@ -0,0 +1,6 @@
from django.apps import AppConfig
class IntlToolsConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'intl_tools'

23
intl_tools/forms.py Normal file
View File

@@ -0,0 +1,23 @@
from crispy_forms.helper import FormHelper
from crispy_forms.layout import Column, Layout, Row, Submit
from django import forms
from django.conf import settings
from django.utils.translation import gettext_lazy as _
class LanguageForm(forms.Form):
language = forms.ChoiceField(
choices=settings.LANGUAGES,
label=_("Language"),
)
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.helper = FormHelper()
self.helper.form_method = 'post'
self.helper.layout = Layout(
Row(
Column('language', css_class='col-md-6'),
),
Submit('submit', _("Change Language"), css_class='btn btn-primary')
)

View File

1
intl_tools/models.py Normal file
View File

@@ -0,0 +1 @@
# Create your models here.

1
intl_tools/tests.py Normal file
View File

@@ -0,0 +1 @@
# Create your tests here.

25
intl_tools/views.py Normal file
View File

@@ -0,0 +1,25 @@
from django.conf import settings
from django.shortcuts import redirect, render
from django.utils import translation
from .forms import LanguageForm
def view_change_language(request):
if request.method == 'POST':
form = LanguageForm(request.POST)
if form.is_valid():
language = form.cleaned_data['language']
translation.activate(language)
request.session['django_language'] = language
next_url = '/'
response = redirect(next_url)
response.set_cookie(settings.LANGUAGE_COOKIE_NAME, language)
return response
else:
form = LanguageForm(initial={'language': translation.get_language()})
if request.user.is_authenticated:
return render(request, 'generic_form.html', {'form': form})
else:
return render(request, 'generic_form_guest.html', {'form': form})