Переводы Django i18n работают локально, но не работают при развертывании в конвейере CI/CD

Я пытаюсь добавить переводы в свой проект django, и по какой-то причине это никогда не получалось. Когда я разворачиваю его в ci/cd pipeline, он не только не переводит, но и получает ошибки csrf, несмотря на то, что в моем шаблоне есть {% csrf token %}, а в представлении используется render. Но все эти проблемы исчезают, когда я запускаю его локально. Вот мой код:

views.py

from django.shortcuts import render

def test_page(request):
    return render(request, "translatetest.html")

urls.py(app level)

from . import views
from django.urls import path

urlpatterns = [
    path('test_page/', views.test_page, name='test_page'),
]

urls.py(уровень проекта)

from django.contrib import admin
from django.urls import include, path
from django.conf.urls.i18n import i18n_patterns

urlpatterns = [
    path("admin/", admin.site.urls),
    path("i18n/", include("django.conf.urls.i18n")),
]

urlpatterns += i18n_patterns (
    path("", include("help_pages.urls"), name="help_pages"), #test_page is here
)

settings.py

LANGUAGE_CODE = "en-us"

TIME_ZONE = "UTC"

USE_I18N = True

USE_L10N = True

USE_TZ = True

LANGUAGES = [
    ('en', ('English')),
    ('fr', ('French')),
]

LOCALE_PATHS = (
    os.path.join(BASE_DIR, 'locale'),
)

Я не думаю, что это проблема с моим питоном, так как он работал локально, но на всякий случай я его тоже поставлю. Также любопытно, что когда я развертываю его в конвейере ci/cd, переводится только одно слово (в другом представлении, а не на test_page), оно не первое, просто переводится случайное слово.

  1. Убедитесь, что gettext установлен в вашей среде CI/CD. На Ubuntu Server вы можете установить его с помощью apt или в docker.
# Using apt
sudo apt-get install gettext
# Using Docker
...
RUN apt-get update \
    && apt-get install -y \
   ...
    gettext\
   ...
  1. Убедитесь, что файлы .po генерируются локально и присутствуют в ваших исходных файлах
python manage.py makemessages --all

В вашем CI/CD убедитесь, что вы генерируете .mo-файлы, которые должны быть из локального env. Обычно их добавляют в файл .gitignore, чтобы они генерировались на лету

python manage.py compilemessages
Вернуться на верх