angle-uparrow-clockwisearrow-counterclockwisearrow-down-uparrow-leftatcalendarcard-listchatcheckenvelopefolderhouseinfo-circlepencilpeoplepersonperson-fillperson-plusphoneplusquestion-circlesearchtagtrashx

Повторное рассмотрение вопроса о многоязычном откате и нижний колонтитул страницы со ссылками на другие языки

Сохраните переведенное название и вставьте его в одно место и пометьте как действительное, чтобы его можно было использовать даже в том случае, если остальная часть текста недействительна.

14 сентября 2019
post main image
unsplash.com/@olidale

Прежде чем читать дальше, вы, возможно, захотите прочитать мое предыдущее сообщение о языковом отставании, см. ссылку ниже. Приведу пример сложности многоязычия. Ссылка должна быть показана на языке, который вы используете в данный момент ... в другое время.

Жизнь - это одна большая последовательность проблем, которые мы решаем постоянно. Это начинается с получения достаточного количества кислорода, разрешенного дыханием, может быть, вторым является наличие ошибок и неполной архитектуры при работе разработчиком и программистом. В любом случае, пришло время реализовать многоязычный нижний колонтитул страницы, это нижняя часть страницы со ссылками на страницы About, Contact, Terms of use, Privacy Policy. Для подлинно многоязычного сайта эти ссылки должны быть на выбранном языке.

Я начал с двух таблиц и создал новую часть администратора для управления ими:


Перевод нижнего колонтитула нижнего колонтитула

С помощью администратора я создаю элемент нижнего колонтитула и добавляю в него одну или несколько языковых записей, для каждого языка добавляется запись перевода. Моя первая мысль заключалась в том, чтобы указать имя и слизняк для страницы здесь, я имею в виду, что страница может быть недоступна на выбранном языке, и мы хотим вернуться к языку отката. Переведенные имя ссылки (название страницы) и слизняк должны быть где-то сохранены.

Однако при построении запроса на выборку страниц я нашел это слишком сложным, поскольку теперь мне пришлось запрашивать не только таблицы content_item и content_item, но и таблицы footer_item и footer_item_translation. Не совсем то, что я имел в виду, я программист и предпочитаю KISS.

Моим решением для уменьшения сложности является повторное использование записи content_item_translation, когда я в последний раз добавлял флаг 'do_not_fallback' и теперь я добавляю еще один флаг: 'can_use_slug'. Смысл заключается в следующем:

  • Когда записи content_item_translation не существует, мы возвращаемся к резервному языку.
  • Когда запись content_item_translation существует и публикуется, мы ее используем.
  • Когда запись content_item_translation существует, но не публикуется, у нас есть два условия: - do_not_fallback
    , если True, элемент недоступен.
    - can_use_slug, если do_not_fallback - это False, а can_use_slug - это True, мы можем использовать название и слизень записи content_item_translation.

Приятным моментом является то, что теперь мы можем построить настоящий многоязычный нижний колонтитул с многоязычными ссылками, даже если страница не опубликована, только путем перевода и добавления названия страницы и слизняка к записи content_item_translation и установки флага can_use_slug. Название и слизняк страницы находятся только в одном месте.

Бонус состоит в том, что мы также можем использовать это при отображении страницы для отображения названия страницы на выбранном языке, в то время как остальные части страницы остаются на английском языке. Вы можете проверить это, просмотрев страницу "Условия использования" на этом сайте на нескольких языках. Эта страница доступна только на английском языке, но у нас все еще есть многоязычные ссылки в нижнем колонтитуле и многоязычное название.

Реализация похожа на объект кэширования и объект настройки, описанный в предыдущих сообщениях, и, конечно, использует кэширование, нет необходимости генерировать нижний колонтитул каждого запроса. Никаких кодов в этом сообщении, сначала нужно кое-что прибрать....

Ссылки / кредиты

Refining multilanguage: adding language fallback as an option
/en/blog/refining-multilanguage-adding-language-fallback-as-an-option

Подробнее

Multilanguage

Оставить комментарий

Комментируйте анонимно или войдите в систему, чтобы прокомментировать.

Комментарии

Оставьте ответ

Ответьте анонимно или войдите в систему, чтобы ответить.