Skip to content

Fix #163 -- Lazily get i18n locale name #164

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Nov 5, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 4 additions & 3 deletions django_select2/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -86,9 +86,10 @@ class Select2Mixin:

empty_label = ""

def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.i18n_name = SELECT2_TRANSLATIONS.get(get_language())
@property
def i18n_name(self):
"""Name of the i18n file for the current language."""
return SELECT2_TRANSLATIONS.get(get_language())

def build_attrs(self, base_attrs, extra_attrs=None):
"""Add select2 data attributes."""
Expand Down
25 changes: 14 additions & 11 deletions tests/test_forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
from collections.abc import Iterable

import pytest
from django.contrib.admin.widgets import SELECT2_TRANSLATIONS
from django.db.models import QuerySet
from django.urls import reverse
from django.utils import translation
Expand Down Expand Up @@ -48,11 +47,16 @@ def test_initial_form_class(self):
assert "my-class" in widget.render("name", None)
assert "django-select2" in widget.render("name", None)

@pytest.mark.parametrize("code,name", SELECT2_TRANSLATIONS.items())
def test_lang_attr(self, code, name):
translation.activate(code)
widget = self.widget_cls()
assert f'lang="{name}"' in widget.render("name", None)
def test_lang_attr(self):
with translation.override("de"):
widget = Select2Widget()
assert 'lang="de"' in widget.render("name", None)

# Regression test for #163
widget = Select2Widget()
assert widget.i18n_name == "en"
with translation.override("de"):
assert widget.i18n_name == "de"

def test_allow_clear(self, db):
required_field = self.form.fields["artist"]
Expand Down Expand Up @@ -258,11 +262,10 @@ def test_initial_form_class(self):
"name", None
)

@pytest.mark.parametrize("code,name", SELECT2_TRANSLATIONS.items())
def test_lang_attr(self, code, name):
translation.activate(code)
widget = self.widget_cls(data_view="heavy_data_1")
assert f'lang="{name}"' in widget.render("name", None)
def test_lang_attr(self):
with translation.override("fr"):
widget = self.widget_cls(data_view="heavy_data_1")
assert 'lang="fr"' in widget.render("name", None)

def test_selected_option(self, db):
not_required_field = self.form.fields["primary_genre"]
Expand Down