Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 6, 2020 00:24:57

gtlhbkkj
Зарегистрирован: 2019-09-20
Сообщения: 173
Репутация: +  2  -
Профиль   Отправить e-mail  

Django Translation. Проблемы.

проект первоначально был полностью на английском. Все работало на английском. Перевел его на русский функцией gettext, gettext_lazy и в шаблонах trans, blocktrans. Все перевелось. Не могу настроить корректную работу.

Когда в forms.py использую функцию gettext_lazy, то вне зависимости от того, какой язык настроен в броузере - английский или русский, вебсайт отображается полностью на русском. То что обведено в рамочку слева - это вывод в шаблоне из forms.py в цикле. Правая часть - то что на англ выходит выпадающее меню - еще не переведена. Верхняя часть - простой текст из шаблонов. На английском языке левая и верхняя части сайте не выходят вообще.



Когда в form.py использую функцию gettext, то в независимости от того, какой язык настроен в броузере - английский или русский, вебсайт отображается нижняя часть на английском, а верхняя на русском.



Другими словам - верхняя часть сайта - простой текст из шаблонов ВСЕГДА выходит только на русском языке.

Все шаблоны начинаются {% load i18n %}

Как настроить корректную работу?

forms.py

 from django import forms
from django.db.models import Max, Min
from .models import Application, FlowRate, WaterFilterSubType, Fineness, Dirt
from .models import DirtProperties, Flange
from django.utils.translation import gettext_lazy as _
# from django.utils.translation import gettext as _
class InputDataWaterForm(forms.Form):
    '''Application'''
    choices = list(Application.objects.values_list('id','application'))
    application = forms.ChoiceField(choices = choices, initial="1", label=_("Specify application:"))
...

urls.py
 from django.contrib import admin
from django.urls import path
from . import views
from django.conf.urls.i18n import i18n_patterns
app_name = 'rsf'
urlpatterns = [
    path('f_size_water/', views.f_size_water, name = 'f_size_water'),
    path('f_size_water_fin/', views.f_size_water_fin, name = 'f_size_water_fin'),
]

settings.py
 import os
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
SECRET_KEY = 'xxxxxxxxxxxxxxxxx'
DEBUG = True
ALLOWED_HOSTS = []
# Application definition
INSTALLED_APPS = [
    'rsf.apps.RsfConfig',
    'auswertung.apps.AuswertungConfig',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]
MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.locale.LocaleMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
ROOT_URLCONF = 'ako.urls'
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]
WSGI_APPLICATION = 'ako.wsgi.application'
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}
AUTH_PASSWORD_VALIDATORS = [
    {
        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
    },
]
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True
LOCALE_PATH = [os.path.join(BASE_DIR, 'locale')]
STATIC_URL = '/static/'
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static'),
]
EMAIL_HOST = 'smtp.gxxx.xx'
EMAIL_PORT = 587
EMAIL_HOST_USER = 'xxxxxx'
EMAIL_HOST_PASSWORD = 'xxxxxxx!'
EMAIL_USE_TLS = True

Отредактировано gtlhbkkj (Апрель 6, 2020 00:29:50)

Офлайн

#2 Апрель 6, 2020 17:00:39

slav0nic
Команда
От: dp.ua
Зарегистрирован: 2006-05-07
Сообщения: 2267
Репутация: +  41  -
Профиль   Отправить e-mail  

Django Translation. Проблемы.

для начала проверьте `{% get_current_language as LANGUAGE_CODE %}` и что в po файлах, не ясно как вы язык меняете

Офлайн

#3 Апрель 6, 2020 21:29:20

gtlhbkkj
Зарегистрирован: 2019-09-20
Сообщения: 173
Репутация: +  2  -
Профиль   Отправить e-mail  

Django Translation. Проблемы.

slav0nic
для начала проверьте `{% get_current_language as LANGUAGE_CODE %}` и что в po файлах, не ясно как вы язык меняете

проверил этой командой в шаблоне. Оказывается что LANGUAGE_CODE = ru
в файле сеттингс указан en-us
больше нигде никаких изменений языка не делал.

Пробую подряд следующие варианты

броузер ENG
gettext или gettext_lazy
LANGUAGE_CODE = EN
вебсайт выходит 100% на англ - всё правильно

броузер рус
gettext_lazy
LANGUAGE_CODE = RU
вебсайт выходит 100% на русском - всё правильно

броузер рус
gettext
LANGUAGE_CODE = RU
вебсайт выходит верхний (первый шаблон) на русском и низ на английском (как на картинке выше)
неправильно !!!
полностью очищаю кеш и кукисы мозиллы, перезагружаюсь, ничего не меняется

броузер рус
gettext_lazy
LANGUAGE_CODE = RU
вебсайт выходит 100% на русском - всё правильно

броузер ENG
gettext_lazy
LANGUAGE_CODE = EN
вебсайт выходит 100% на англ - всё правильно

последние два варианта с gettext_lazy сегодня дают правильные результаты. Возможно потому что кеш броузера очистил.

Теперь попробую меню смены языка делать.
Благодарю вас. Вы мне указали правильное направление.

Отредактировано gtlhbkkj (Апрель 6, 2020 21:29:58)

Офлайн

#4 Апрель 7, 2020 15:34:51

slav0nic
Команда
От: dp.ua
Зарегистрирован: 2006-05-07
Сообщения: 2267
Репутация: +  41  -
Профиль   Отправить e-mail  

Django Translation. Проблемы.

Если вы лабел в полях формы, то там надо использовать lazy ф-ции

Отредактировано slav0nic (Апрель 7, 2020 15:35:10)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version