Повторное рассмотрение вопроса о многоязычном откате и нижний колонтитул страницы со ссылками на другие языки
Сохраните переведенное название и вставьте его в одно место и пометьте как действительное, чтобы его можно было использовать даже в том случае, если остальная часть текста недействительна.
Прежде чем читать дальше, вы, возможно, захотите прочитать мое предыдущее сообщение о языковом отставании, см. ссылку ниже. Приведу пример сложности многоязычия. Ссылка должна быть показана на языке, который вы используете в данный момент ... в другое время.
Жизнь - это одна большая последовательность проблем, которые мы решаем постоянно. Это начинается с получения достаточного количества кислорода, разрешенного дыханием, может быть, вторым является наличие ошибок и неполной архитектуры при работе разработчиком и программистом. В любом случае, пришло время реализовать многоязычный нижний колонтитул страницы, это нижняя часть страницы со ссылками на страницы 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
Недавний
- Скрытие первичных ключей базы данных UUID вашего веб-приложения
- Don't Repeat Yourself (DRY) с Jinja2
- SQLAlchemy, PostgreSQL, максимальное количество строк для user
- Показать значения в динамических фильтрах SQLAlchemy
- Безопасная передача данных с помощью шифрования Public Key и pyNaCl
- rqlite: альтернатива dist с высокой степенью готовности и SQLite
Большинство просмотренных
- Используя Python pyOpenSSL для проверки SSL-сертификатов, загруженных с хоста
- Использование UUID вместо Integer Autoincrement Primary Keys с SQLAlchemy и MariaDb
- Подключение к службе на хосте Docker из контейнера Docker
- Использование PyInstaller и Cython для создания исполняемого файла Python
- SQLAlchemy: Использование Cascade Deletes для удаления связанных объектов
- Flask Удовлетворительный запрос API проверка параметров запроса с помощью схем Маршмэллоу