You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
33 lines
1.2 KiB
33 lines
1.2 KiB
from django.utils.translation import get_language
|
|
from .messages import ACCOUNT_MESSAGES
|
|
|
|
def get_localized_msg(key, request=None, fallback_lang="en"):
|
|
"""
|
|
Get localized message from ACCOUNT_MESSAGES based on request or active language.
|
|
"""
|
|
json_list = ACCOUNT_MESSAGES.get(key)
|
|
if not json_list:
|
|
return key # Fallback to key itself if not found
|
|
|
|
# Get language from request (LocaleMiddleware sets LANGUAGE_CODE)
|
|
language_code = getattr(request, "LANGUAGE_CODE", None) if request else None
|
|
|
|
# Check if 'lang' query param is used (common in this project's mobile apps)
|
|
if not language_code and request:
|
|
language_code = request.query_params.get('lang')
|
|
|
|
if not language_code:
|
|
language_code = get_language() or fallback_lang
|
|
|
|
# 1) Exact match
|
|
for item in json_list:
|
|
if item.get("language_code") == language_code:
|
|
return item.get("text")
|
|
|
|
# 2) Fallback to English
|
|
for item in json_list:
|
|
if item.get("language_code") == "en":
|
|
return item.get("text")
|
|
|
|
# 3) First available
|
|
return json_list[0].get("text") if json_list else key
|