Локализация доменных моделей в Neos / Flow
Веб-сайт, который я сейчас разрабатываю с Neos / Flow, включает в себя собственную систему магазинов, реализованную как Flow Plugin. Продукты, варианты и ваучеры хранятся как модели предметной области. Поскольку клиент хочет предоставить свой веб-сайт на разных языках, мне нужно найти способ управления переводами для доменных объектов. Я не могу найти способ, который запекается в Neos / Flow, поэтому моей первой мыслью было просто вставить идентификаторы перевода в переводимые поля (описание и тому подобное), которые затем используются внутри представления с помощью viewhelper перевода. Это будет работать совершенно нормально, если клиент не захочет редактировать эти поля самостоятельно.
Моя следующая идея состояла в том, чтобы просто реализовать дополнительное поле для каждого языкового измерения и каждого переводимого поля (например, description_en; description_es, …). Но это был бы худший подход с точки зрения ремонтопригодности и изменчивости. Я обычно работал над проектами TYPO3, где перевод объектов домена действительно прост и работает из коробки. Так что этот опыт внутри Неоса очень расстраивает.
Кто-нибудь сталкивался с подобной проблемой или даже нашел решение этой проблемы?
2 ответа
Всякий раз, когда у нас есть требование иметь многоязычный контент, мы решаем это, сохраняя данные в Neos Content Repository. Таким образом, обработка языка, ака измерения, работает из коробки. Кроме того, создание пользовательского интерфейса для этих записей очень просто с помощью встроенного редактирования или инспектора модуля содержимого.
Обратите внимание, что хранение данных в CR не обязательно означает, что вы должны хранить их в корневом узле /site. Вы также можете добавить новый корневой узел /products
хранить ваши продукты.
Вы можете взглянуть на https://github.com/neos/metadata-contentrepositoryadapter где метаданные хранятся в своем корне.
Надеюсь, что помогает, ура, Даниэль
Для справки, нечто подобное может быть достигнуто с помощью расширения Doctrine Translateable в чистом Flow:
https://github.com/Atlantic18/DoctrineExtensions/blob/master/doc/translatable.md
См. http://flowframework.readthedocs.io/en/stable/TheDefinitiveGuide/PartIII/Persistence.html о том, как активировать расширение в Flow.
Однако более чистый подход заключается в том, чтобы фактически отделить модель домена и контент (если вы не создаете CMS, а контент - это ваш домен;)