Search code examples
djangotranslation

Django translation for uz-cyrl return uz instead


I have configured my django LANGUAGES like

import os

from django.utils.translation import gettext_lazy as _

from config.settings.base import BASE_DIR

LANGUAGE_CODE = "en"
USE_I18N = True

LANGUAGES = (
("uz", _("Uzbek")),
("uz-cyrl", _("Cyrillic")),
("ru", _("Russian")),
("en", _("English")),
("ar", _("Arabic")),
)

LOCALE_PATHS = [os.path.join(BASE_DIR, "locale")]

I have translated texts in all .po files and compiled them. In local runserver it works with Accept-Language: uz-cyrl properly, but through docker-compose it returns uz translation instead, what might be the reason?

I have used different base docker images like python3.11-slim, python3.11 itself but not worked.


Solution

  • Finally, I found the reason. When I execute

    python manage.py makemessages -l uz-cyrl
    

    It raise like

    invalid locale uz-cyrl, did you mean uz_CYrl?

    so I execute

    python manage.py makemessages -l uz_CYrl
    

    and it created uz_CYrl folder inside locale folder, it works in Windows and Mac locally but in docker-compose running project returns uz translation instead of uz-cyrl always.

    When I execute makemessages command inside container and it raise different

    invalid locale uz-cyrl, did you mean uz_Cyrl?

    So I changed folder name from uz_CYrl to uz_Cyrl and it works both local and through docker-compose also.

    So I understand that uz-cyrl translation .po and .mo files should be inside uz_Cyrl folder not uz_CYrl.