Перевод Django gettext не работает с динамическими переводамиPython

Программы на Python
Ответить
Anonymous
 Перевод Django gettext не работает с динамическими переводами

Сообщение Anonymous »

Вопрос:
Я работаю над приложением Django, поддерживающим несколько языков. Я использую аутентификацию на основе токенов и пытаюсь изменить язык для аутентифицированных пользователей в соответствии с их предпочтениями, хранящимися в их профиле. Однако я столкнулся с некоторыми проблемами, связанными с применением переводов, особенно когда речь идет о динамическом переводе сообщений.
Что у меня есть:
Я настроил несколько языков. в settings.py (LANGUAGES) и настроил английский язык по умолчанию (LANGUAGE_CODE = 'en').
Я использую аутентификацию на основе токенов (rest_framework.authtoken) для аутентификации пользователей. Предпочитаемый язык пользователя хранится в базе данных как предпочтительный_язык.
Я добавил специальное промежуточное программное обеспечение для обработки переключения языка на основе предпочтений пользователя, которое должно применяться, как только пользователь пройдет аутентификацию и будет установлен сеанс.Проблема:
Похоже, что языковые предпочтения применяются к статическому содержимому (например, шаблонам), но динамические переводы строк в представлениях (с использованием gettext) не применяются правильно после выбора предпочтительного языка пользователя. set.
Например, хотя изменение языка работает частично (например, контент пользовательского интерфейса), сообщения, созданные с помощью gettext() (например, сообщения об ошибках или успехах), по-прежнему отображаются на языке по умолчанию (en), а не на предпочитаемом пользователем языке. (например, es для испанского).
Вот некоторые наблюдения:
Когда я проверяю активный язык в представлении с помощью get_language(), он правильно отражает предпочтительный язык для сеанс.
Я убедился, что Предпочтительный язык правильно установлен как в сеансе, так и в файле cookie (cookie_language_tinocoloco).
LocaleMiddleware настроен на активацию языка, но не применяется к динамическим сообщениям.
Что я пробовал:
Я убедитесь, что порядок промежуточного программного обеспечения правильный. SessionMiddleware находится перед LocaleMiddleware, а LocaleMiddleware — перед AuthenticationMiddleware, что соответствует рекомендуемой настройке.
Я вручную активировал язык в промежуточном программном обеспечении с помощью Translation.activate(user.preferred_language).
Моя настройка:
Конфигурация MIDDLEWARE (соответствующий фрагмент):

Код: Выделить всё

MIDDLEWARE = [
"django.middleware.security.SecurityMiddleware",
"django.contrib.sessions.middleware.SessionMiddleware",  # Ensuring session is set before locale
"django.middleware.locale.LocaleMiddleware",  # Language activation middleware
"django.contrib.auth.middleware.AuthenticationMiddleware",  # Authentication for token
# Other middleware
]
Custom Language Middleware:

from django.utils import translation

def get_user_language(user):
if user and hasattr(user, 'preferred_language') and user.preferred_language:
return user.preferred_language
return None

class LanguageMiddleware:
def __init__(self, get_response):
self.get_response = get_response

def __call__(self, request):
if hasattr(request, 'user') and request.user.is_authenticated:
language = get_user_language(request.user)
if language:
translation.activate(language)  # Activate user preferred language
response = self.get_response(request)
return response
Файл cookie сеанса: я также гарантирую, что языковые настройки сохраняются в сеансе и файле cookie.
Ожидаемое поведение:
Я ожидаю, что динамические переводы (с использованием gettext() и gettext_lazy()) будут меняться в зависимости от предпочтительного языка пользователя. Однако, несмотря на настройку правильных языковых предпочтений, только некоторые части сайта (например, шаблоны) отражают новый язык, в то время как другие (например, динамически генерируемые сообщения) по-прежнему отображаются на языке по умолчанию (en).
Вопрос:
Не хватает ли в моей настройке чего-то, что позволило бы строкам динамического перевода учитывать предпочтительный язык аутентифицированного пользователя?
Как я могу гарантировать, что переводы применяются глобально, включая динамические сообщения, после язык пользователя установлен в сеансе и файле cookie?
Любые указания или советы по этому поводу будут очень признательны. Спасибо!

Подробнее здесь: https://stackoverflow.com/questions/792 ... anslations
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»