Переводы 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), оно не первое, просто переводится случайное слово.
- Убедитесь, что 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\
...
- Убедитесь, что файлы .po генерируются локально и присутствуют в ваших исходных файлах
python manage.py makemessages --all
В вашем CI/CD убедитесь, что вы генерируете .mo-файлы, которые должны быть из локального env. Обычно их добавляют в файл .gitignore, чтобы они генерировались на лету
python manage.py compilemessages