Fix setlang redirect normalization for locale variants
This commit is contained in:
@@ -21,11 +21,17 @@ def normalize_set_language_next(value: str | None) -> str:
|
||||
if not path.startswith("/"):
|
||||
path = f"/{path}"
|
||||
|
||||
language_codes = [code for code, _ in settings.LANGUAGES]
|
||||
if language_codes:
|
||||
pattern = (
|
||||
rf"^/(?:{'|'.join(re.escape(code) for code in language_codes)})(?=/|$)"
|
||||
)
|
||||
path = re.sub(pattern, "", path, count=1) or "/"
|
||||
configured_codes = {
|
||||
str(code).lower().replace("_", "-") for code, _ in settings.LANGUAGES
|
||||
}
|
||||
first_segment, _, remainder = path.lstrip("/").partition("/")
|
||||
normalized_segment = first_segment.lower().replace("_", "-")
|
||||
looks_like_language_code = bool(
|
||||
re.fullmatch(r"[a-z]{2}(?:-[a-z]{2})?", normalized_segment)
|
||||
)
|
||||
should_strip = normalized_segment in configured_codes or looks_like_language_code
|
||||
|
||||
if should_strip:
|
||||
path = f"/{remainder}" if remainder else "/"
|
||||
|
||||
return urlunsplit(("", "", path, parsed.query, ""))
|
||||
|
||||
Reference in New Issue
Block a user