Перенаправить отсутствующие переводы на сайт Hugo

У меня есть сайт Hugo с несколькими переведенными страницами. Не все страницы переведены, так как у меня не всегда есть добровольцы для каждой страницы на каждом языке.

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

# Force to have /en/my-page and /fr/my-page routes, even for default language.
defaultContentLanguageInSubdir= true

# English is the default language
defaultContentLanguage = "en"

# This page exists in en and fr, but not de
[[menu.shortcuts]]
name = "Licence"
url = "/licence"

[Languages]
[Languages.en]
languageName = "English"

[Languages.fr]
languageName = "Français"

[Languages.de]
languageName = "Deutsch"

На странице на английском и французском языках это работает нормально, ссылка в меню переходит на /en/licence и /fr/licence. Но на немецкой странице это идет к /de/licence, что является 404.

Есть ли способ перенаправить отсутствующие страницы на соответствующую страницу на языке по умолчанию?


person Inductiveload    schedule 27.03.2020    source источник
comment
Вы нашли работу вокруг?   -  person Robbi Nespu    schedule 16.02.2021


Ответы (1)


На самом деле нет решения для Хьюго по умолчанию. Я потратил много времени, чтобы выяснить, как достичь цели и не копировать содержимое данных все время для всех языков, потому что это затрудняет управление разными версиями.

Поэтому я просто проверяю, является ли это внутренней ссылкой и существует ли страница на текущем языке, и если да, то я создаю ссылку для этого языка, если нет, то я просто назначаю ссылку по умолчанию.

{{ $link := .link }}
{{ if and ( $.Site.GetPage ( substr ( $link ) 0 -1 ) ) ( ne ( $.Site.BaseURL | relLangURL ) "/" ) ( not ( in $link "://" ) ) }}
    {{ $link = ( print ( $.Site.BaseURL | relLangURL ) $link ) }}
{{ end }}

Все мои ссылки имеют в конце символ /, поэтому, если ваши ссылки выглядят как /blog, а не как /blog/, просто измените ( substr ( $link ) 0 -1 ) на просто $link.

Я новичок, извините, если это не элегантное решение, но пока оно работает для меня.

person Anna Bakurova    schedule 14.04.2021