NSProject
02 вересня 2022 р. 01:11

Мультиязычность Django

Django

Интересует меня такой вопрос. При работе с датой в шаблоне с использованием тега timesince что идёт с джангой. При переключении языка на русский оно не переводится. То есть как было 55 minutes так и осталось.
Как это исправить чтоб оно тоже переводил ось?

2

Вам це подобається? Поділіться в соціальних мережах!

11
Evgenii Legotckoi
  • 02 вересня 2022 р. 15:13

Попробуйте использовать localtime

  1. {% load tz %}
  2.  
  3. {% localtime on %}
  4. {{ value }}
  5. {% endlocaltime %}
  6.  
  7. {% localtime off %}
  8. {{ value }}
  9. {% endlocaltime %}
    NSProject
    • 02 вересня 2022 р. 15:34

    Я видел при поиске в гугле что можно сделать через blocktrans. Или это не лучшая идея?

      Evgenii Legotckoi
      • 02 вересня 2022 р. 16:02

      Я могу ошибаться, но полагаю, что localtime в этом случае лучше. Поскольку там уже решены все нюансы с отображением времени для каждого языка.
      Я бы оставил blocktrans на крайний случай

        NSProject
        • 02 вересня 2022 р. 17:32
        • (відредаговано)

        что то у меня не очень идут дела с loadtime. Можкт из за того что это джанго4 версии. В общем не отрабатывает этот тег совсем. Смысл в том что мне просто нужно что бы отображалось сколько минут, часов, месяцев и тд назад отображалось. И это нормально что localtime on и localtime off отображаются вместе одновременно?

          Evgenii Legotckoi
          • 02 вересня 2022 р. 17:35

          Возможно, что этот тэг не совсем соответствует той задаче, которую вы делаете.
          Покажите код, который относится к дате.
          Код из модели и код в шаблоне.

            NSProject
            • 02 вересня 2022 р. 18:39

            Оно выводит сколько времени прошло с момента публикации или же если про пользователей. То есть онлайн или когда заходил последний раз.

            models.py

            1. class Comment(models.Model):
            2.  
            3. " Тут другие поля модели "
            4. create_at = models.DateTimeField(auto_now_add=True)
            5.  
            6. objects = CommentManager()
            7.  
            8. def __str__(self):
            9. return self.content[0:200]
            10.  
            11. def likes_count(self):
            12. return self.likes.count()
            13.  
            14. def likes_user(self):
            15. return self.likes.filter(id=self.user.id).exists()
            16.  
            17. def filename(self):
            18. return os.path.basename(self.file.name)

            и вот собственно сам вывод в шаблоне

            1. <p class="text-muted mb-0"><small>{{ comment.create_at|timesince }}</small></p>
              Evgenii Legotckoi
              • 02 вересня 2022 р. 18:55
              • Відповідь була позначена як рішення.

              У меня аналогичный функционал реализован в шаблоне так

              1. {% trans "asked" %} {{ topic.pub_date|naturaltime }}

              Но если верить документации, то для этого достаточно подключить нужные модули

              To activate these filters, add 'django.contrib.humanize' to your INSTALLED_APPS setting. Once you’ve done that, use {% load humanize %} in a template, and you’ll have access to the following filters.

              И это работает. Смею предположить, что у вас в файле settings.py не включены следующие настройки

              1. USE_I18N = True
              2. USE_L10N = True
              3. USE_TZ = True

              по существу они все касаются локализации, USE_TZ отвечает именно за ввсяким localtime и прочее

                NSProject
                • 02 вересня 2022 р. 20:02

                Ну к стати да точно у меня нет USE_L10N вообще. Но вот про humanize я где то что то пропустил в документации. Или попросту не дошёл до этого места. Спасибо за помощь всё заработало.

                  NSProject
                  • 02 вересня 2022 р. 20:14

                  А самое прикольное во всём этом то что изначально я написал свой велосипед для реализации функционала и лишь потом решил спросить ))) А то кода многовато выходило

                    Evgenii Legotckoi
                    • 02 вересня 2022 р. 20:16

                    Это так всегда. Я регулярно выметаю грязь из кода.

                      NSProject
                      • 02 вересня 2022 р. 20:30

                      Так дело ещё в том что я в python вообще случайно попал из php. Так что многого и не знаю, но в принципе всё же более менее сейчас ориентируюсь. Мне просто захотелось попробовать Django и я переписал всё что было сделано на ванильном Php и Laravel.

                        Коментарі

                        Only authorized users can post comments.
                        Please, Log in or Sign up
                        • Останні коментарі
                        • Evgenii Legotckoi
                          16 квітня 2025 р. 17:08
                          Благодарю за отзыв. И вам желаю всяческих успехов!
                        • IscanderChe
                          12 квітня 2025 р. 17:12
                          Добрый день. Спасибо Вам за этот проект и отдельно за ответы на форуме, которые мне очень помогли в некоммерческих пет-проектах. Профессиональным программистом я так и не стал, но узнал мно…
                        • AK
                          01 квітня 2025 р. 11:41
                          Добрый день. В данный момент работаю над проектом, где необходимо выводить звук из программы в определенное аудиоустройство (колонки, наушники, виртуальный кабель и т.д). Пишу на Qt5.12.12 поско…
                        • Evgenii Legotckoi
                          09 березня 2025 р. 21:02
                          К сожалению, я этого подсказать не могу, поскольку у меня нет необходимости в обходе блокировок и т.д. Поэтому я и не задавался решением этой проблемы. Ну выглядит так, что вам действитель…
                        • VP
                          09 березня 2025 р. 16:14
                          Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…