Merge pull request #1688 from umap-project/fix-oembed-i18n
fix: deal with i18n in oembed URLs
This commit is contained in:
commit
8cc6d58752
2 changed files with 16 additions and 2 deletions
|
@ -7,6 +7,7 @@ from django.contrib.auth import get_user_model
|
|||
from django.core import mail
|
||||
from django.core.signing import Signer
|
||||
from django.urls import reverse
|
||||
from django.utils import translation
|
||||
|
||||
from umap.models import DataLayer, Map, Star
|
||||
|
||||
|
@ -815,6 +816,17 @@ def test_oembed_map(client, map, datalayer):
|
|||
)
|
||||
|
||||
|
||||
def test_oembed_map_with_non_default_language(client, map, datalayer):
|
||||
translation.activate("en")
|
||||
path = map.get_absolute_url()
|
||||
assert path.startswith("/en/")
|
||||
path = path.replace("/en/", "/fr/")
|
||||
url = f"{reverse('map_oembed')}?url=http://testserver{path}"
|
||||
response = client.get(url)
|
||||
assert response.status_code == 200
|
||||
translation.activate("en")
|
||||
|
||||
|
||||
def test_oembed_link(client, map, datalayer):
|
||||
response = client.get(map.get_absolute_url())
|
||||
assert response.status_code == 200
|
||||
|
|
|
@ -38,11 +38,11 @@ from django.http import (
|
|||
from django.middleware.gzip import re_accepts_gzip
|
||||
from django.shortcuts import get_object_or_404
|
||||
from django.urls import resolve, reverse, reverse_lazy
|
||||
from django.utils import translation
|
||||
from django.utils.encoding import smart_bytes
|
||||
from django.utils.http import http_date
|
||||
from django.utils.timezone import make_aware
|
||||
from django.utils.translation import gettext as _
|
||||
from django.utils.translation import to_locale
|
||||
from django.views.decorators.cache import cache_control
|
||||
from django.views.decorators.http import require_GET
|
||||
from django.views.generic import DetailView, TemplateView, View
|
||||
|
@ -536,7 +536,7 @@ class MapDetailMixin:
|
|||
if hasattr(self.request, "LANGUAGE_CODE"):
|
||||
lang = self.request.LANGUAGE_CODE
|
||||
properties["lang"] = lang
|
||||
locale = to_locale(lang)
|
||||
locale = translation.to_locale(lang)
|
||||
properties["locale"] = locale
|
||||
context["locale"] = locale
|
||||
geojson = self.get_geojson()
|
||||
|
@ -699,6 +699,8 @@ class MapOEmbed(View):
|
|||
raise Http404("Host not allowed.")
|
||||
|
||||
url_path = parsed_url.path
|
||||
lang = translation.get_language_from_path(url_path)
|
||||
translation.activate(lang)
|
||||
view, args, kwargs = resolve(url_path)
|
||||
if "slug" not in kwargs or "map_id" not in kwargs:
|
||||
raise Http404("Invalid URL path.")
|
||||
|
|
Loading…
Reference in a new issue