перевод gettext не работает в производственной системе

Я столкнулся со странной проблемой при переводе строк (в админке) с помощью gettext django: при локальном запуске сервера разработки все переводы отображаются правильно в админке, но когда проект развернут на рабочем сервере некоторые строки вообще не переводятся. Я не могу определить ни одну систему, за которой строки затронуты, а какие нет!

Чтобы произвести впечатление, т.е. модель определяется как:

class Company(models.Model):

    ....

    class Meta:
        verbose_name = _('Company Profile')
        verbose_name_plural = _('Company Profiles')

При использовании dev-сервера название модели правильно отображается на разных языках в админке, а на рабочем сервере нет! Это влияет на некоторые модели, на другие нет... Это сводит меня с ума, так как я с трудом представляю, как это отлаживать...


person Bernhard Vallant    schedule 04.11.2010    source источник
comment
Возможно, ugettext_lazy против ugettext?   -  person Wolph    schedule 05.11.2010


Ответы (2)


Несколько возможностей:

  • рабочий сервер не видит скомпилированные сообщения
  • непереведенные сообщения помечаются как fuzzy
  • _() разрешается в ugettext вместо ugettext_lazy
person Tomasz Zieliński    schedule 05.11.2010
comment
Они не помечены как нечеткие, но можете ли вы назвать несколько причин, по которым сервер не видит скомпилированные сообщения (они находятся в каталогах приложений). Еще не читал, в чем проблема использования ugettext вместо ugettext_lazy? - person Bernhard Vallant; 05.11.2010
comment
В порядке. решил это сейчас. Я наследовал от модели, которая использовала ugettext, а ребенок использовал ugettext_lazy, поэтому я получил эту странную смесь! Спасибо! - person Bernhard Vallant; 05.11.2010
comment
Я имел в виду, что, может быть, например. скомпилированные сообщения не были зафиксированы на сервере. Ничего волшебного, просто иногда случаются такие тривиальные вещи. - person Tomasz Zieliński; 05.11.2010
comment
@ThomaszZielinski Спасибо! В моем случае я использовал общий файл Python .gitignore, который игнорирует файлы *.mo! Такая глупая проблема :P - person achedeuzot; 20.11.2014
comment
Хороший ответ на все возможные варианты. Этот ответ пятилетней давности все еще может спасти мою задницу. - person Joey; 13.09.2015

У меня была похожая проблема, и помимо того, что указал Томаш Зелински, мне пришлось внести следующие изменения:

в настройках.py

LOCALE_PATHS = (
    "/path/to/your/project/locale",
)

Запомните косую черту в конце и убедитесь, что структура каталогов выглядит примерно так:

project
   your_app
   your_other_app
   locale
      en_US
          LC_MESSAGES
      sv_SE
          LC_MESSAGES
person Joelbitar    schedule 09.01.2011