Метод чувствительного к языку названия (Plone, Archetypes, LinguaPlone)

У меня есть сайт Plone с интернационализированным контентом, использующим Archetypes и LinguaPlone.

Некоторые из моих объектов (включая папки) не зависят от языка, другие - нет. Для создания меню и навигационных хлебных крошек, я хотел бы метод, который

  • возвращает непереведенное Title()если Language() непусто (потому что при этом условии title атрибут должен соответствовать языку), и
  • возвращает перевод Title() в противном случае (потому что объект используется для нескольких языков, и у меня есть небольшой набор затронутых строк).

Я не мог найти ни одного *title* метод в Products.LinguaPlone пакет; pretty_title_or_id по-видимому, не зависит от языка.

Неужели такого метода еще нет?

(Products.LinguaPlone 4.1.8, Products.CMFPlone 4.3.3, Products.ATContentTypes 2.1.14)

Изменить: затронутые объекты представляют собой ограниченное количество папок (около корня сайта), названия которых очень редко меняются; у большинства других есть непустые Language (что вызовет их Title не должны быть переведены) или не являются папками (и я не буду иметь известный перевод, я допускаю, но в этих случаях будет использоваться оригинальное название). Я мог бы представить, чтобы патч pretty_title_or_id соответственно и мне интересно по поводу причин не делать этого.

3 ответа

Решение

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

Для небольшого фиксированного набора языков это может быть хорошим решением для использования title_<lang> поля метаданных.

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

Теоретически, вы могли бы исправить все необходимые вам шаблоны (например, навигационный портлет и панель навигации), но если быть точным, вам нужно будет исправить все, что выглядит Title где угодно, когда угодно), чтобы передать все их строки через слой перевода (в основном добавляя i18n:domain="..." i18n:translate=""), и поддерживать ваши переводы в .mo/.po языковой файл, но вы не сможете изменить их во время выполнения. Мое инстинктивное чувство было бы то, что это исправляет концептуальную проблему с тем, что могут и не могут сделать нейтральные для языка элементы.

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

Если вы хотите сделать это с независимым от языка контентом, вам нужно будет исправить метод Title объектов и добавить туда свой собственный код... В любом случае это окажет влияние на каталог, потому что только язык контента по умолчанию будет каталогизирован для обоих. индексировать содержимое и метаданные, и будет возвращать странные результаты... Так что это не рекомендуется.

Другие вопросы по тегам