Найти - Пользователи
Полная версия: Django Translation. Проблемы.
Начало » Python для новичков » Django Translation. Проблемы.
1
gtlhbkkj
проект первоначально был полностью на английском. Все работало на английском. Перевел его на русский функцией 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
slav0nic
для начала проверьте `{% get_current_language as LANGUAGE_CODE %}` и что в po файлах, не ясно как вы язык меняете
gtlhbkkj
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 сегодня дают правильные результаты. Возможно потому что кеш броузера очистил.

Теперь попробую меню смены языка делать.
Благодарю вас. Вы мне указали правильное направление.
slav0nic
Если вы лабел в полях формы, то там надо использовать lazy ф-ции
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB