diff --git a/core/docs/changelog/WCM-316.change b/core/docs/changelog/WCM-316.change new file mode 100644 index 0000000000..90f31ca380 --- /dev/null +++ b/core/docs/changelog/WCM-316.change @@ -0,0 +1 @@ +WCM-316: add teaser title, teaser text and background color to volume \ No newline at end of file diff --git a/core/src/zeit/content/volume/browser/form.py b/core/src/zeit/content/volume/browser/form.py index a3136a20d1..ad561fad83 100644 --- a/core/src/zeit/content/volume/browser/form.py +++ b/core/src/zeit/content/volume/browser/form.py @@ -23,15 +23,27 @@ def doc(self): class Base: form_fields = zope.formlib.form.FormFields(zeit.content.volume.interfaces.IVolume).select( - 'product', 'year', 'volume', 'date_digital_published', 'teaserText' + 'product', + 'year', + 'volume', + 'date_digital_published', + 'volume_note', + 'title', + 'teaser', + 'background_color', ) field_groups = ( gocept.form.grouped.Fields( _('Volume'), - ('product', 'year', 'volume', 'date_digital_published', 'teaserText'), + ('product', 'year', 'volume', 'date_digital_published', 'volume_note'), css_class='column-left', ), + gocept.form.grouped.Fields( + _('Teaser'), + ('title', 'teaser', 'background_color'), + css_class='wide-widgets column-left', + ), ) def __init__(self, context, request): @@ -58,10 +70,16 @@ def __init__(self, context, request): required=False, source=zeit.content.image.interfaces.imageGroupSource, ) - field.__name__ = 'cover_%s_%s' % (product.id, name) + field.__name__ = f'cover_{product.id}_{name}' field.interface = ICovers self.form_fields += zope.formlib.form.FormFields(field) fieldnames.append(field.__name__) + # In addition to covers, we give the possibility to override the title + field = zope.schema.TextLine(title=_('Title'), required=False) + field.__name__ = f'title_{product.id}' + field.interface = ICovers + self.form_fields += zope.formlib.form.FormFields(field) + fieldnames.append(field.__name__) self.field_groups += ( gocept.form.grouped.Fields(product.title, fieldnames, css_class='column-right'), ) @@ -144,17 +162,24 @@ class Covers(grok.Adapter): grok.context(zeit.content.volume.interfaces.IVolume) def __getattr__(self, name): - if not name.startswith('cover_'): - return super().__getattr__(name) - name = name.replace('cover_', '', 1) - product, cover = name.split('_') - # We dont want the fallback in the UI - return self.context.get_cover(cover, product, use_fallback=False) + if name.startswith('title_'): + product = name.split('_')[1] + return self.context.get_cover_title(product) + elif name.startswith('cover_'): + name = name.replace('cover_', '', 1) + product, cover = name.split('_') + # We dont want the fallback in the UI + return self.context.get_cover(cover, product, use_fallback=False) + return super().__getattr__(name) def __setattr__(self, name, value): - if not name.startswith('cover_'): - super().__setattr__(name, value) + if name.startswith('title_'): + product = name.split('_')[1] + self.context.set_cover_title(product, value) + return + elif name.startswith('cover_'): + name = name.replace('cover_', '', 1) + product, cover = name.split('_') + self.context.set_cover(cover, product, value) return - name = name.replace('cover_', '', 1) - product, cover = name.split('_') - self.context.set_cover(cover, product, value) + super().__setattr__(name, value) diff --git a/core/src/zeit/content/volume/browser/reference.py b/core/src/zeit/content/volume/browser/reference.py index 0582b4eb32..7eb98f5533 100644 --- a/core/src/zeit/content/volume/browser/reference.py +++ b/core/src/zeit/content/volume/browser/reference.py @@ -10,7 +10,7 @@ class EditReference(zeit.edit.browser.form.InlineForm): - """Display the additional field `teaserText` for references.""" + """Display the additional field `volume_note` for references.""" legend = '' @@ -19,7 +19,7 @@ class EditReference(zeit.edit.browser.form.InlineForm): # support read-only mode, see # zeit.content.article.edit.browser.form.FormFields render_context=zope.formlib.interfaces.DISPLAY_UNWRITEABLE, - ).select('teaserText') + ).select('volume_note') @property def prefix(self): diff --git a/core/src/zeit/content/volume/browser/tests/test_form.py b/core/src/zeit/content/volume/browser/tests/test_form.py index aefb41157d..f39808f1b2 100644 --- a/core/src/zeit/content/volume/browser/tests/test_form.py +++ b/core/src/zeit/content/volume/browser/tests/test_form.py @@ -110,6 +110,22 @@ def test_adds_centerpage_in_addition_to_volume(self): self.assertEqual(2010, cp.year) self.assertEqual(2, cp.volume) + def test_teaser_attributes_are_contained_in_volume(self): + self.open_add_form() + b = self.browser + b.getControl('Year').value = '2010' + b.getControl(name='form.volume').value = '2' + b.getControl('Add').click() + b.getControl(name='form.title').value = 'Obamas Return' + b.getControl(name='form.teaser').value = 'Obama returns you to tell about his vacation' + b.getControl(name='form.background_color').value = 'ff0000' + b.getControl('Apply').click() + b.getLink('Checkin').click() + volume = zeit.cms.interfaces.ICMSContent('http://xml.zeit.de/2010/02/ausgabe') + assert volume.title == 'Obamas Return' + assert volume.teaser == 'Obama returns you to tell about his vacation' + assert volume.background_color == 'ff0000' + class TestVolumeCoverWidget(zeit.content.volume.testing.SeleniumTestCase): def setUp(self): @@ -131,3 +147,24 @@ def test_only_one_cover_add_form_is_visible_at_the_time(self): s.select('id=choose-cover', 'label=Zeit Magazin') s.assertVisible('css=.fieldname-cover_ZMLB_portrait') s.assertNotVisible('css=.fieldname-cover_ZEI_portrait') + + def test_saves_title_for_each_cover(self): + s = self.selenium + volume = self.repository['2015']['01']['ausgabe'] + title_overrides = volume.xml.makeelement('title-overrides') + text_zei = volume.xml.makeelement('title', {'product_id': 'ZEI'}) + text_zei.text = 'Budgies are cool' + text_zmlb = volume.xml.makeelement('title', {'product_id': 'ZMLB'}) + text_zmlb.text = 'Kingfishers are eating fish' + title_overrides.append(text_zei) + title_overrides.append(text_zmlb) + volume.xml.append(title_overrides) + self.repository['2015']['01']['ausgabe'] = volume + self.open('/repository/2015/01/ausgabe/@@checkout') + s.waitForElementPresent('css=#choose-cover') + # Set title of Die Zeit + s.select('id=choose-cover', 'label=Die Zeit') + s.assertValue('id=form.title_ZEI', 'Budgies are cool') + # Set title for Zeit Magazin + s.select('id=choose-cover', 'label=Zeit Magazin') + s.assertValue('id=form.title_ZMLB', 'Kingfishers are eating fish') diff --git a/core/src/zeit/content/volume/interfaces.py b/core/src/zeit/content/volume/interfaces.py index efa92eaca7..21c38d5733 100644 --- a/core/src/zeit/content/volume/interfaces.py +++ b/core/src/zeit/content/volume/interfaces.py @@ -37,7 +37,7 @@ class IVolume(zeit.cms.content.interfaces.IXMLContent): volume = zope.schema.Int(title=_('Volume'), min=1, max=54) - teaserText = zope.schema.Text(title=_('Volume text'), required=False, max_length=170) + volume_note = zope.schema.Text(title=_('Volume text'), required=False, max_length=170) date_digital_published = zope.schema.Datetime(title=_('Date of digital publication')) @@ -47,6 +47,19 @@ class IVolume(zeit.cms.content.interfaces.IXMLContent): next = zope.interface.Attribute('The next IVolume object (by date_digital_published) or None') + title = zope.schema.TextLine(title=_('Title'), required=False) + + teaser = zope.schema.TextLine(title=_('Teaser'), required=False) + + background_color = zope.schema.TextLine( + title=_('Area background color (6 characters, no #)'), + description=_('Hex value of background color for area'), + required=False, + min_length=6, + max_length=6, + constraint=zeit.cms.content.interfaces.hex_literal, + ) + def fill_template(text): """Fill in a string template with the placeholders year=self.year and name=self.volume (zero-padded to two digits), e.g. @@ -71,6 +84,24 @@ def set_cover(cover_id, product_id, image): Set an image as a cover of product. """ + def get_cover_title(product_id): + """ + Get a title of a product. + For example volume.get_title('ZEI') returns the title of DIE ZEIT of + this specific volume. + :param product_id: str product ID set in products.xml + :return: str + """ + + def set_cover_title(product_id, title): + """ + Set cover specific title. + For example volume.set_title('ZEI', 'DIE ZEIT') sets the title of DIE + ZEIT of this specific volume. + :param product_id: str product ID set in products.xml + :param title: str - title of the product + """ + def all_content_via_search(additional_query_contstraints): """ Get all Content for this volume with a Elasticsearch-Lookup. @@ -103,7 +134,7 @@ def content_with_references_for_publishing(): class IVolumeReference(zeit.cms.content.interfaces.IReference): - teaserText = zope.schema.Text(title=_('Volume text'), required=False, max_length=170) + volume_note = zope.schema.Text(title=_('Volume text'), required=False, max_length=170) class ITocConnector(zope.interface.Interface): diff --git a/core/src/zeit/content/volume/reference.py b/core/src/zeit/content/volume/reference.py index 705a026fd9..c0396580f0 100644 --- a/core/src/zeit/content/volume/reference.py +++ b/core/src/zeit/content/volume/reference.py @@ -22,9 +22,9 @@ class RelatedReference(zeit.cms.content.reference.Reference): grok.provides(zeit.cms.content.interfaces.IReference) grok.name('related') - _teaserText_local = zeit.cms.content.property.ObjectPathAttributeProperty( - '.', 'teasertext_local', zeit.content.volume.interfaces.IVolumeReference['teaserText'] + _volume_note_local = zeit.cms.content.property.ObjectPathAttributeProperty( + '.', 'volume_note_local', zeit.content.volume.interfaces.IVolumeReference['volume_note'] ) - teaserText = zeit.cms.content.reference.OverridableProperty( - zeit.content.volume.interfaces.IVolume['teaserText'], original='target' + volume_note = zeit.cms.content.reference.OverridableProperty( + zeit.content.volume.interfaces.IVolume['volume_note'], original='target' ) diff --git a/core/src/zeit/content/volume/tests/test_reference.py b/core/src/zeit/content/volume/tests/test_reference.py index b96398620b..20e1f2621d 100644 --- a/core/src/zeit/content/volume/tests/test_reference.py +++ b/core/src/zeit/content/volume/tests/test_reference.py @@ -13,7 +13,7 @@ def setUp(self): super().setUp() volume = Volume() - volume.teaserText = 'original' + volume.volume_note = 'original' self.repository['testvolume'] = volume self.volume = self.repository['testvolume'] @@ -31,7 +31,7 @@ def test_reference_honors_ICommonMetadata_xml_format(self): volume = Volume() volume.year = 2015 volume.volume = 1 - volume.teaserText = 'original' + volume.volume_note = 'original' volume.product = zeit.cms.content.sources.Product('ZEI') self.repository['2015'] = Folder() self.repository['2015']['01'] = Folder() @@ -58,7 +58,7 @@ def test_volume_can_be_adapted_to_IReference(self): ) self.assertEqual(True, IVolumeReference.providedBy(reference)) - def test_teasertext_can_be_overridden(self): + def test_volume_note_can_be_overridden(self): node = zope.component.getAdapter( self.volume, zeit.cms.content.interfaces.IXMLReference, name='related' ) @@ -66,8 +66,8 @@ def test_teasertext_can_be_overridden(self): reference = zope.component.getMultiAdapter( (source, node), zeit.cms.content.interfaces.IReference, name='related' ) - self.assertEqual('original', reference.teaserText) - reference.teaserText = 'local' - self.assertEqual('local', reference.teaserText) - reference.teaserText = None - self.assertEqual('original', reference.teaserText) + self.assertEqual('original', reference.volume_note) + reference.volume_note = 'local' + self.assertEqual('local', reference.volume_note) + reference.volume_note = None + self.assertEqual('original', reference.volume_note) diff --git a/core/src/zeit/content/volume/tests/test_volume.py b/core/src/zeit/content/volume/tests/test_volume.py index 1a40c9bff1..2f730f6629 100644 --- a/core/src/zeit/content/volume/tests/test_volume.py +++ b/core/src/zeit/content/volume/tests/test_volume.py @@ -4,6 +4,7 @@ import lxml.builder import lxml.etree +import pytest import pytz import requests_mock import zope.component @@ -180,9 +181,9 @@ def test_looks_up_centerpage_for_depent_product_content(self): cp = zeit.content.cp.interfaces.ICenterPage(volume) self.assertEqual('http://xml.zeit.de/2015/01/index', cp.uniqueId) - def test_no_teaserText_present_returns_default_string(self): + def test_no_volume_note_present_returns_default_string(self): volume = zeit.cms.interfaces.ICMSContent('http://xml.zeit.de/2015/01/ausgabe') - self.assertEqual('Teäser 01/2015', volume.teaserText) + self.assertEqual('Teäser 01/2015', volume.volume_note) def test_covers_are_published_with_the_volume(self): volume = self.repository['2015']['01']['ausgabe'] @@ -313,6 +314,25 @@ def test_volume_contents_access_dry_run_does_not_change_accces(self, mock): self.assertEqual('free', c.access) +@pytest.mark.parametrize( + 'color, raised_exception', + [ + ('123456', None), # Valid hex value + ('abcdeg', zeit.cms.interfaces.ValidationError), # Invalid hex (faulty character) + ('ff12', zope.schema._bootstrapinterfaces.TooShort), # Invalid hex value (too short) + ('abcdef123456', zope.schema._bootstrapinterfaces.TooLong), # Invalid hex value (too long) + (None, None), # Absent value raises nothing + ], +) +def test_background_color_is_hex_validation(color, raised_exception): + field = zeit.content.volume.interfaces.IVolume['background_color'] + if raised_exception: + with pytest.raises(raised_exception): + field.validate(color) + else: + field.validate(color) + + class TestWebtrekkQuery(TestVolumeQueries): def setUp(self): super().setUp() diff --git a/core/src/zeit/content/volume/volume.py b/core/src/zeit/content/volume/volume.py index b4b9f48c9f..c09446a0d8 100644 --- a/core/src/zeit/content/volume/volume.py +++ b/core/src/zeit/content/volume/volume.py @@ -38,6 +38,7 @@ class Volume(zeit.cms.content.xmlsupport.XMLContentBase): + """ @@ -45,7 +46,7 @@ class Volume(zeit.cms.content.xmlsupport.XMLContentBase): zeit.cms.content.dav.mapProperties( zeit.content.volume.interfaces.IVolume, zeit.cms.interfaces.DOCUMENT_SCHEMA_NS, - ('date_digital_published', 'year', 'volume'), + ('date_digital_published', 'year', 'volume', 'title', 'teaser', 'background_color'), ) _product_id = zeit.cms.content.dav.DAVProperty( @@ -71,22 +72,28 @@ def product(self, value): return self._product_id = value.id if value is not None else None - _teaserText = zeit.cms.content.dav.DAVProperty( - zeit.content.volume.interfaces.IVolume['teaserText'], + _volume_note = zeit.cms.content.dav.DAVProperty( + zeit.content.volume.interfaces.IVolume['volume_note'], + zeit.cms.interfaces.DOCUMENT_SCHEMA_NS, + 'volume_note', + ) + + _old_volume_note = zeit.cms.content.dav.DAVProperty( + zeit.content.volume.interfaces.IVolume['volume_note'], zeit.cms.interfaces.DOCUMENT_SCHEMA_NS, 'teaserText', ) @property - def teaserText(self): - text = self._teaserText + def volume_note(self): + text = self._volume_note or self._old_volume_note if text is None: text = zeit.cms.config.required('zeit.content.volume', 'default-teaser-text') return self.fill_template(text) - @teaserText.setter - def teaserText(self, value): - self._teaserText = value + @volume_note.setter + def volume_note(self, value): + self._volume_note = value @property def teaserSupertitle(self): # For display in CP-editor @@ -204,6 +211,24 @@ def set_cover(self, cover_id, product_id, imagegroup): self.xml.find('covers').append(node) super().__setattr__('_p_changed', True) + def get_cover_title(self, product_id): + path = f'//volume/title-overrides/title[@product_id="{product_id}"]' + node = self.xml.xpath(path) + return node[0].text if node else None + + def set_cover_title(self, product_id, title): + title_overrides_path = '//volume/title-overrides' + if not self.xml.xpath(title_overrides_path): + self.xml.append(lxml.builder.E('title-overrides')) + path = f'//volume/title-overrides/title[@product_id="{product_id}"]' + node = self.xml.xpath(path) + if node: + self.xml.find('title-overrides').remove(node[0]) + if title is not None: + node = lxml.builder.E.title(title, product_id=product_id) + self.xml.find('title-overrides').append(node) + super().__setattr__('_p_changed', True) + def _is_valid_cover_id_and_product_id(self, cover_id, product_id): cover_ids = list(zeit.content.volume.interfaces.VOLUME_COVER_SOURCE(self)) product_ids = [prod.id for prod in self._all_products] diff --git a/core/src/zeit/locales/de/LC_MESSAGES/zeit.cms.mo b/core/src/zeit/locales/de/LC_MESSAGES/zeit.cms.mo index 23a72b11bb..2f7ae096d6 100644 Binary files a/core/src/zeit/locales/de/LC_MESSAGES/zeit.cms.mo and b/core/src/zeit/locales/de/LC_MESSAGES/zeit.cms.mo differ diff --git a/core/src/zeit/locales/de/LC_MESSAGES/zeit.cms.po b/core/src/zeit/locales/de/LC_MESSAGES/zeit.cms.po index df64b12aa0..442da46f00 100644 --- a/core/src/zeit/locales/de/LC_MESSAGES/zeit.cms.po +++ b/core/src/zeit/locales/de/LC_MESSAGES/zeit.cms.po @@ -14,7 +14,7 @@ msgid "" msgstr "" "Project-Id-Version: Unknown\n" -"POT-Creation-Date: Mon Sep 9 10:27:07 2024\n" +"POT-Creation-Date: Tue Sep 17 07:54:43 2024\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -22,14 +22,14 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 3.5\n" +"X-Generator: Poedit 3.4.4\n" #: zeit/addcentral/sidebar.pt:10 zeit/addcentral/sidebar.py:39 #: zeit/cms/browser/form.py:220 zeit/cms/menu.zcml:17 zeit/cms/menu.zcml:24 #: zeit/content/article/edit/browser/recension-list.pt:93 #: zeit/edit/browser/view.py:122 msgid "Add" -msgstr "Inhalte hinzufügen…" +msgstr "Inhalte hinzufügen" #: zeit/brightcove/configure.zcml:9 msgid "Edit brightcove videos" @@ -241,11 +241,12 @@ msgstr "Autor" #: zeit/content/article/interfaces.py:191 #: zeit/content/article/interfaces.py:231 zeit/content/audio/interfaces.py:35 #: zeit/content/author/interfaces.py:36 zeit/content/cp/interfaces.py:189 -#: zeit/content/cp/interfaces.py:282 zeit/content/cp/interfaces.py:408 -#: zeit/content/cp/interfaces.py:457 zeit/content/gallery/interfaces.py:91 +#: zeit/content/cp/interfaces.py:278 zeit/content/cp/interfaces.py:404 +#: zeit/content/cp/interfaces.py:453 zeit/content/gallery/interfaces.py:91 #: zeit/content/infobox/interfaces.py:21 zeit/content/modules/interfaces.py:165 #: zeit/content/rawxml/interfaces.py:18 zeit/content/text/interfaces.py:64 #: zeit/content/video/browser/object-details-body.pt:24 +#: zeit/content/volume/browser/form.py:78 zeit/content/volume/interfaces.py:50 msgid "Title" msgstr "Titel" @@ -276,7 +277,7 @@ msgstr "Seite" #: zeit/cms/browser/locking-error.pt:5 msgid "An error is occoured" -msgstr "Ein Fehler ist aufgetreten." +msgstr "Ein Fehler ist aufgetreten" #: zeit/cms/browser/locking-error.pt:10 msgid "" @@ -327,7 +328,7 @@ msgstr "Meldungen" #: zeit/cms/browser/messages.pt:22 msgid "Hides automatically" -msgstr "Wird automatisch ausgeblendet…" +msgstr "Wird automatisch ausgeblendet" #: zeit/cms/browser/messages.pt:25 msgid "hide" @@ -388,7 +389,7 @@ msgstr "'${id}' hat keinen hier akzeptierten Typ (${types})." #: zeit/cms/browser/widget.py:617 msgid "Type to find entries ..." -msgstr "Name eingeben" +msgstr "Name eingeben …" #: zeit/cms/checkout/browser/checkin-conflict-error.pt:3 msgid "Conflict Error" @@ -524,7 +525,7 @@ msgstr "Objekte nach »${paste-into-id}« kopieren" msgid "clipboard-paste-explain" msgstr "" "Wählen Sie den Eintrag aus Ihrer Zwischenablage den Sie nach »${paste-into-" -"id}« kopieren möchten." +"id}« kopieren möchten" #: zeit/cms/content/browser/form.py:13 #: zeit/content/advertisement/browser/form.py:26 @@ -621,7 +622,7 @@ msgstr "Vorlage auswählen" #: zeit/cms/content/browser/template.py:92 msgid "Continue" -msgstr "Weiter …" +msgstr "Weiter" #: zeit/cms/content/browser/template.py:105 #: zeit/cms/content/browser/template.zcml:33 @@ -642,7 +643,7 @@ msgstr "Löschen" #: zeit/cms/content/browser/typechange.pt:5 msgid "Change type of ${object-unique-id}" -msgstr "Typ von »${object-unique-id}« ändern " +msgstr "Typ von »${object-unique-id}« ändern" #. Default: "You are about to change the type of an object. Be sure you know what you are doing." #: zeit/cms/content/browser/typechange.pt:12 @@ -677,8 +678,8 @@ msgstr "Jahr" #: zeit/cms/content/interfaces.py:73 #: zeit/content/article/edit/interfaces.py:303 -#: zeit/content/volume/browser/form.py:31 zeit/content/volume/interfaces.py:38 -#: zeit/content/volume/volume.py:343 +#: zeit/content/volume/browser/form.py:38 zeit/content/volume/interfaces.py:38 +#: zeit/content/volume/volume.py:368 msgid "Volume" msgstr "Ausgabe" @@ -753,16 +754,16 @@ msgstr "Bitte auf Groß- und Kleinschreibung achten." msgid "Subtitle" msgstr "Teaser/Vorspann (Unterzeile)" -#: zeit/cms/content/interfaces.py:171 zeit/content/cp/interfaces.py:557 +#: zeit/cms/content/interfaces.py:171 zeit/content/cp/interfaces.py:553 msgid "Teaser title" msgstr "Überschrift (Centerpage)" -#: zeit/cms/content/interfaces.py:173 zeit/content/cp/interfaces.py:559 +#: zeit/cms/content/interfaces.py:173 zeit/content/cp/interfaces.py:555 #: zeit/content/video/browser/object-details-body.pt:28 msgid "Teaser text" msgstr "Teaser (Centerpage)" -#: zeit/cms/content/interfaces.py:176 zeit/content/cp/interfaces.py:555 +#: zeit/cms/content/interfaces.py:176 zeit/content/cp/interfaces.py:551 msgid "Teaser kicker" msgstr "Teaser-Spitzmarke" @@ -842,7 +843,7 @@ msgstr "InterRed Beitrags-ID" msgid "Invalid hex literal" msgstr "Kein gültiger Farbwert" -#: zeit/cms/content/interfaces.py:358 zeit/content/cp/interfaces.py:607 +#: zeit/cms/content/interfaces.py:358 zeit/content/cp/interfaces.py:603 msgid "XML Source" msgstr "XML-Quelltext" @@ -1149,7 +1150,7 @@ msgstr "Audio von Simplecast aktualisieren" #: zeit/cms/related/interfaces.py:31 msgid "Related content" -msgstr "interne Links" +msgstr "Interne Links" #: zeit/cms/related/interfaces.py:32 msgid "Objects that are related to this object." @@ -1210,7 +1211,7 @@ msgstr "Neue Datei hochladen" #: zeit/cms/repository/browser/file.py:43 msgid "Form input is not a file object" -msgstr "keine gültige Datei" +msgstr "Keine gültige Datei" #: zeit/cms/repository/browser/file.py:68 msgid "Add file" @@ -1365,7 +1366,7 @@ msgstr "Generieren" #: zeit/cms/tagging/browser/widget.pt:24 msgid "Type to find keywords ..." -msgstr "Schlagworte manuell auswählen" +msgstr "Schlagworte manuell auswählen …" #: zeit/cms/tagging/browser/widget.pt:32 msgid "Show in TMS" @@ -1377,7 +1378,7 @@ msgstr "Im TMS anzeigen" #: zeit/cms/tagging/interfaces.py:77 msgid "Too few keywords given." -msgstr "Bitte mindestens 3 Schlagworte vergeben" +msgstr "Bitte mindestens 3 Schlagworte vergeben." #: zeit/cms/tagging/interfaces.py:82 #: zeit/content/article/edit/browser/form.py:101 @@ -1512,7 +1513,7 @@ msgstr "Farbe Button" #: zeit/content/article/edit/image.py:85 #: zeit/content/article/edit/interfaces.py:204 #: zeit/content/article/interfaces.py:68 zeit/content/cp/interfaces.py:127 -#: zeit/content/cp/interfaces.py:291 zeit/content/cp/interfaces.py:641 +#: zeit/content/cp/interfaces.py:287 zeit/content/cp/interfaces.py:637 #: zeit/content/image/browser/configure.zcml:262 #: zeit/content/image/browser/imagegroup.py:222 zeit/content/image/image.py:126 #: zeit/content/portraitbox/interfaces.py:16 @@ -1522,8 +1523,8 @@ msgstr "Bild" #: zeit/content/advertisement/interfaces.py:34 #: zeit/content/article/edit/interfaces.py:205 -#: zeit/content/article/interfaces.py:69 zeit/content/cp/interfaces.py:292 -#: zeit/content/cp/interfaces.py:642 zeit/content/image/interfaces.py:386 +#: zeit/content/article/interfaces.py:69 zeit/content/cp/interfaces.py:288 +#: zeit/content/cp/interfaces.py:638 zeit/content/image/interfaces.py:386 #: zeit/push/interfaces.py:222 msgid "Drag an image group here" msgstr "Ziehen Sie Bilder hierher, um sie zu verknüpfen" @@ -1575,7 +1576,8 @@ msgstr "Artikel" #: zeit/content/animation/browser/form.py:22 #: zeit/content/article/edit/browser/form.py:306 -#: zeit/content/link/browser/form.py:33 +#: zeit/content/link/browser/form.py:33 zeit/content/volume/browser/form.py:43 +#: zeit/content/volume/interfaces.py:52 #: zeit/wysiwyg/browser/resources/pagebreak/dialog.pt:14 msgid "Teaser" msgstr "Teaser" @@ -1712,7 +1714,7 @@ msgstr "Videoempfehlung generieren" #: zeit/content/article/edit/browser/edit.py:346 #: zeit/content/author/browser/form.py:170 #: zeit/content/author/browser/honorar.py:53 -#: zeit/content/volume/browser/form.py:120 +#: zeit/content/volume/browser/form.py:138 msgid "There were errors" msgstr "Fehler aufgetreten" @@ -1951,7 +1953,7 @@ msgstr "Ziehen Sie ein Video hierher, um es zu verknüpfen" #: zeit/content/article/edit/interfaces.py:395 #: zeit/content/article/edit/interfaces.py:405 #: zeit/content/article/edit/interfaces.py:464 -#: zeit/content/cp/interfaces.py:539 zeit/content/gallery/interfaces.py:98 +#: zeit/content/cp/interfaces.py:535 zeit/content/gallery/interfaces.py:98 #: zeit/wysiwyg/browser/resources/citation/dialog.pt:39 #: zeit/wysiwyg/browser/resources/reference/image.pt:26 #: zeit/wysiwyg/browser/resources/reference/portraitbox.pt:24 @@ -2107,18 +2109,18 @@ msgid "Show liveblog in teaser" msgstr "Timeline am Teaser anzeigen" #: zeit/content/article/edit/interfaces.py:438 -#: zeit/content/cp/interfaces.py:691 +#: zeit/content/cp/interfaces.py:687 msgid "Cardstack id" msgstr "ID" #: zeit/content/article/edit/interfaces.py:439 -#: zeit/content/cp/interfaces.py:693 +#: zeit/content/cp/interfaces.py:689 msgid "Advertorial?" msgstr "Advertorial?" #: zeit/content/article/edit/interfaces.py:454 #: zeit/content/article/edit/interfaces.py:609 -#: zeit/content/cp/interfaces.py:280 zeit/content/cp/interfaces.py:407 +#: zeit/content/cp/interfaces.py:276 zeit/content/cp/interfaces.py:403 #: zeit/content/infobox/interfaces.py:15 #: zeit/content/video/browser/object-details-body.pt:20 #: zeit/content/volume/browser/toc_listing.py:33 @@ -2181,7 +2183,7 @@ msgid "Linktext" msgstr "LInktext" #: zeit/content/article/edit/interfaces.py:621 -#: zeit/content/cp/interfaces.py:319 +#: zeit/content/cp/interfaces.py:315 msgid "Automatic type" msgstr "Quelle" @@ -2796,7 +2798,7 @@ msgstr "Teaser" msgid "automatic-area-type-centerpage" msgstr "Centerpage" -#: zeit/content/cp/browser/area.py:210 zeit/content/cp/interfaces.py:222 +#: zeit/content/cp/browser/area.py:210 zeit/content/cp/interfaces.py:221 msgid "automatic-area-type-rss-feed" msgstr "RSS-Feed" @@ -2808,7 +2810,7 @@ msgstr "Individuelle Abfrage" msgid "automatic-area-type-topicpage" msgstr "TMS-Themenseite" -#: zeit/content/cp/browser/area.py:217 zeit/content/cp/interfaces.py:219 +#: zeit/content/cp/browser/area.py:217 zeit/content/cp/interfaces.py:218 msgid "automatic-area-type-elasticsearch-query" msgstr "ES-Query" @@ -2816,11 +2818,11 @@ msgstr "ES-Query" msgid "automatic-area-type-related-topics" msgstr "Verwandte TMS-Themenseiten" -#: zeit/content/cp/browser/area.py:222 zeit/content/cp/interfaces.py:220 +#: zeit/content/cp/browser/area.py:222 zeit/content/cp/interfaces.py:219 msgid "automatic-area-type-reach" msgstr "Reach" -#: zeit/content/cp/browser/area.py:226 zeit/content/cp/interfaces.py:223 +#: zeit/content/cp/browser/area.py:226 zeit/content/cp/interfaces.py:222 msgid "automatic-area-type-sql-query" msgstr "SQL-Query" @@ -2847,7 +2849,7 @@ msgstr "Teaser pinnen" #: zeit/content/cp/browser/blocks/teaser.py:172 msgid "Zitat:" -msgstr "Zitat" +msgstr "Zitat:" #: zeit/content/cp/browser/configure.zcml:13 msgid "CenterPage" @@ -3041,11 +3043,11 @@ msgid "Description" msgstr "Beschreibung" #: zeit/content/cp/interfaces.py:177 zeit/content/cp/interfaces.py:194 -#: zeit/content/cp/interfaces.py:272 +#: zeit/content/cp/interfaces.py:268 msgid "Visible in frontend" msgstr "Sichtbar im Frontend" -#: zeit/content/cp/interfaces.py:196 zeit/content/cp/interfaces.py:275 +#: zeit/content/cp/interfaces.py:196 zeit/content/cp/interfaces.py:271 msgid "Kind" msgstr "Typ" @@ -3053,184 +3055,180 @@ msgstr "Typ" msgid "Kind Title" msgstr "Titel" -#: zeit/content/cp/interfaces.py:218 -msgid "automatic-area-type-query" -msgstr "Query" - -#: zeit/content/cp/interfaces.py:221 +#: zeit/content/cp/interfaces.py:220 msgid "automatic-area-type-topicpagelist" msgstr "Themenseiten-Ranking" -#: zeit/content/cp/interfaces.py:275 +#: zeit/content/cp/interfaces.py:271 msgid "Used internally for rendering on Friedbert" msgstr "Zum Rendern via Friedbert" -#: zeit/content/cp/interfaces.py:284 zeit/content/cp/interfaces.py:415 +#: zeit/content/cp/interfaces.py:280 zeit/content/cp/interfaces.py:411 msgid "Read more" msgstr "Weiterlesen" -#: zeit/content/cp/interfaces.py:287 zeit/content/cp/interfaces.py:417 +#: zeit/content/cp/interfaces.py:283 zeit/content/cp/interfaces.py:413 msgid "Read more URL" msgstr "»Weiterlesen«-URL" -#: zeit/content/cp/interfaces.py:298 +#: zeit/content/cp/interfaces.py:294 msgid "Apply teaser layouts automatically?" msgstr "Teaser-Layouts automatisch einstellen" -#: zeit/content/cp/interfaces.py:302 +#: zeit/content/cp/interfaces.py:298 msgid "First teaser layout" msgstr "Layout 1. Teaser" -#: zeit/content/cp/interfaces.py:311 +#: zeit/content/cp/interfaces.py:307 msgid "automatic" msgstr "Autopilot" -#: zeit/content/cp/interfaces.py:323 +#: zeit/content/cp/interfaces.py:319 zeit/content/volume/interfaces.py:55 msgid "Area background color (6 characters, no #)" msgstr "Hintergrundfarbe (6 Zeichen, ohne Hash)" -#: zeit/content/cp/interfaces.py:324 +#: zeit/content/cp/interfaces.py:320 zeit/content/volume/interfaces.py:56 msgid "Hex value of background color for area" msgstr "Hintergrundfarbe (Hex-Wert)" -#: zeit/content/cp/interfaces.py:335 +#: zeit/content/cp/interfaces.py:331 msgid "" "Automatic area with teaser from centerpage requires a referenced centerpage." msgstr "Es ist keine valide Centerpage angegeben." -#: zeit/content/cp/interfaces.py:340 +#: zeit/content/cp/interfaces.py:336 msgid "" "Automatic area with teaser from custom query requires a query condition." msgstr "Es ist keine valide Query angegeben." -#: zeit/content/cp/interfaces.py:344 +#: zeit/content/cp/interfaces.py:340 msgid "Automatic area with teaser from TMS topicpage requires a topicpage ID." msgstr "Es ist keine valide Themenseite angegeben." -#: zeit/content/cp/interfaces.py:348 +#: zeit/content/cp/interfaces.py:344 msgid "" "Automatic area with teaser from elasticsearch query requires a raw query." msgstr "Es ist keine valide Query angegeben." -#: zeit/content/cp/interfaces.py:352 +#: zeit/content/cp/interfaces.py:348 msgid "Automatic area with rss-feed requires a given feed" msgstr "Es ist kein valider RSS-Feed angegeben." -#: zeit/content/cp/interfaces.py:354 +#: zeit/content/cp/interfaces.py:350 msgid "Automatic area with related-topics requires a given topicpage" msgstr "Es ist keine valide Themeseiten ID angegeben." -#: zeit/content/cp/interfaces.py:358 +#: zeit/content/cp/interfaces.py:354 msgid "Automatic area with teasers from reach require a given kind" msgstr "Autoflächen mit Reach als Quelle benötigen eine Metrik" -#: zeit/content/cp/interfaces.py:372 +#: zeit/content/cp/interfaces.py:368 msgid "Elasticsearch raw query is malformed: %s" msgstr "Elasticsearch-Query fehlerhaft: {error}" -#: zeit/content/cp/interfaces.py:411 +#: zeit/content/cp/interfaces.py:407 msgid "Whether block can be removed by automation, e.g. AutoPilot" msgstr "" "Ist der Block “flüchtig” und darf automatisch entfernt werden, z.B. vom " "AutoPilot?" -#: zeit/content/cp/interfaces.py:445 +#: zeit/content/cp/interfaces.py:441 msgid "Pinned" msgstr "Fest" -#: zeit/content/cp/interfaces.py:447 +#: zeit/content/cp/interfaces.py:443 msgid "Hidden on HP" msgstr "¬HP" -#: zeit/content/cp/interfaces.py:449 +#: zeit/content/cp/interfaces.py:445 msgid "Big layout" msgstr "Großes Layout" -#: zeit/content/cp/interfaces.py:451 +#: zeit/content/cp/interfaces.py:447 msgid "Hidden relateds" msgstr "¬Relateds" -#: zeit/content/cp/interfaces.py:459 +#: zeit/content/cp/interfaces.py:455 msgid "Limit amount" msgstr "Anzahl begrenzen" -#: zeit/content/cp/interfaces.py:460 +#: zeit/content/cp/interfaces.py:456 msgid "limit-amount-description" msgstr "limit-amount-description" -#: zeit/content/cp/interfaces.py:532 +#: zeit/content/cp/interfaces.py:528 msgid "Referenced content" msgstr "Teaser" -#: zeit/content/cp/interfaces.py:533 +#: zeit/content/cp/interfaces.py:529 msgid "Drag content here" msgstr "Ziehen Sie Inhalte hierher um einen Teaser hinzuzufügen." -#: zeit/content/cp/interfaces.py:542 +#: zeit/content/cp/interfaces.py:538 msgid "Force image on mobile" msgstr "mobil mit Bild" -#: zeit/content/cp/interfaces.py:595 +#: zeit/content/cp/interfaces.py:591 msgid "The root element must be ." msgstr "Der Wurzelkonten muss ein sein." -#: zeit/content/cp/interfaces.py:597 +#: zeit/content/cp/interfaces.py:593 msgid "cp:type must be 'xml'." msgstr "Das Attribut »cp:type« muss »xml« sein." -#: zeit/content/cp/interfaces.py:599 +#: zeit/content/cp/interfaces.py:595 msgid "No or empty cp:__name__ attribute." msgstr "Kein oder leers Attribut »cp:__name__«." -#: zeit/content/cp/interfaces.py:615 +#: zeit/content/cp/interfaces.py:611 msgid "CP Extra Id" msgstr "CPExtra" -#: zeit/content/cp/interfaces.py:646 +#: zeit/content/cp/interfaces.py:642 msgid "Animate" msgstr "Animieren" -#: zeit/content/cp/interfaces.py:652 +#: zeit/content/cp/interfaces.py:648 msgid "left" msgstr "links" -#: zeit/content/cp/interfaces.py:653 +#: zeit/content/cp/interfaces.py:649 msgid "center" msgstr "mittig" -#: zeit/content/cp/interfaces.py:654 +#: zeit/content/cp/interfaces.py:650 msgid "right" msgstr "rechts" -#: zeit/content/cp/interfaces.py:660 zeit/content/infobox/interfaces.py:19 +#: zeit/content/cp/interfaces.py:656 zeit/content/infobox/interfaces.py:19 msgid "Contents" msgstr "Inhalt" -#: zeit/content/cp/interfaces.py:660 zeit/content/modules/interfaces.py:137 +#: zeit/content/cp/interfaces.py:656 zeit/content/modules/interfaces.py:137 msgid "Use Markdown" msgstr "verwendet Markdown" -#: zeit/content/cp/interfaces.py:663 +#: zeit/content/cp/interfaces.py:659 msgid "Alignment" msgstr "Ausrichtung" -#: zeit/content/cp/interfaces.py:664 +#: zeit/content/cp/interfaces.py:660 msgid "Choose alignment" msgstr "Ausrichtung wählen" -#: zeit/content/cp/interfaces.py:696 +#: zeit/content/cp/interfaces.py:692 msgid "Background color" msgstr "Hintergrundfarbe" -#: zeit/content/cp/interfaces.py:697 +#: zeit/content/cp/interfaces.py:693 msgid "Choose a background color" msgstr "Hintergrundfarbe auswählen" -#: zeit/content/cp/interfaces.py:708 zeit/content/modules/interfaces.py:73 +#: zeit/content/cp/interfaces.py:704 zeit/content/modules/interfaces.py:73 msgid "Jobbox Ticker" msgstr "Jobbox Ticker" -#: zeit/content/cp/interfaces.py:726 +#: zeit/content/cp/interfaces.py:722 msgid "Enable RSS Tracking-Parameter" msgstr "RSS Tracking-Parameter aktivieren" @@ -3638,7 +3636,7 @@ msgstr "Mobil" #: zeit/content/image/interfaces.py:189 msgid "Viewport was used multiple times" -msgstr "Dieselbe Anzeige wurde mehrfach ausgewählt." +msgstr "Dieselbe Anzeige wurde mehrfach ausgewählt" #: zeit/content/image/interfaces.py:193 msgid "Image was used multiple times" @@ -4078,15 +4076,15 @@ msgstr "Inhaltsverzeichnis" msgid "A volume with the given name already exists." msgstr "Eine solche Ausgabe gibt es bereits." -#: zeit/content/volume/browser/form.py:71 +#: zeit/content/volume/browser/form.py:89 msgid "Add volume" msgstr "Ausgabe hinzufügen" -#: zeit/content/volume/browser/form.py:127 +#: zeit/content/volume/browser/form.py:145 msgid "Edit volume" msgstr "Ausgabe bearbeiten" -#: zeit/content/volume/browser/form.py:131 +#: zeit/content/volume/browser/form.py:149 msgid "View volume" msgstr "Ausgabe anzeigen" @@ -4130,7 +4128,7 @@ msgstr "optimiert (SEO)" msgid "Teaserimage" msgstr "Teaserbild" -#: zeit/content/volume/interfaces.py:40 zeit/content/volume/interfaces.py:106 +#: zeit/content/volume/interfaces.py:40 zeit/content/volume/interfaces.py:137 msgid "Volume text" msgstr "Ausgaben-Hinweis" @@ -4788,6 +4786,9 @@ msgstr "Format" msgid "with info" msgstr "mit Info" +#~ msgid "automatic-area-type-query" +#~ msgstr "Query" + #~ msgid "use images" #~ msgstr "Bilder verwenden" diff --git a/core/src/zeit/locales/zeit.cms.pot b/core/src/zeit/locales/zeit.cms.pot index ea8db9109a..dbafe7e1db 100644 --- a/core/src/zeit/locales/zeit.cms.pot +++ b/core/src/zeit/locales/zeit.cms.pot @@ -14,7 +14,7 @@ msgid "" msgstr "" "Project-Id-Version: Unknown\n" -"POT-Creation-Date: Mon Sep 9 10:27:07 2024\n" +"POT-Creation-Date: Tue Sep 17 07:54:43 2024\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: Zope 3 Developers \n" @@ -269,15 +269,17 @@ msgstr "" #: zeit/content/audio/interfaces.py:35 #: zeit/content/author/interfaces.py:36 #: zeit/content/cp/interfaces.py:189 -#: zeit/content/cp/interfaces.py:282 -#: zeit/content/cp/interfaces.py:408 -#: zeit/content/cp/interfaces.py:457 +#: zeit/content/cp/interfaces.py:278 +#: zeit/content/cp/interfaces.py:404 +#: zeit/content/cp/interfaces.py:453 #: zeit/content/gallery/interfaces.py:91 #: zeit/content/infobox/interfaces.py:21 #: zeit/content/modules/interfaces.py:165 #: zeit/content/rawxml/interfaces.py:18 #: zeit/content/text/interfaces.py:64 #: zeit/content/video/browser/object-details-body.pt:24 +#: zeit/content/volume/browser/form.py:78 +#: zeit/content/volume/interfaces.py:50 msgid "Title" msgstr "" @@ -711,9 +713,9 @@ msgstr "" #: zeit/cms/content/interfaces.py:73 #: zeit/content/article/edit/interfaces.py:303 -#: zeit/content/volume/browser/form.py:31 +#: zeit/content/volume/browser/form.py:38 #: zeit/content/volume/interfaces.py:38 -#: zeit/content/volume/volume.py:343 +#: zeit/content/volume/volume.py:368 msgid "Volume" msgstr "" @@ -791,18 +793,18 @@ msgid "Subtitle" msgstr "" #: zeit/cms/content/interfaces.py:171 -#: zeit/content/cp/interfaces.py:557 +#: zeit/content/cp/interfaces.py:553 msgid "Teaser title" msgstr "" #: zeit/cms/content/interfaces.py:173 -#: zeit/content/cp/interfaces.py:559 +#: zeit/content/cp/interfaces.py:555 #: zeit/content/video/browser/object-details-body.pt:28 msgid "Teaser text" msgstr "" #: zeit/cms/content/interfaces.py:176 -#: zeit/content/cp/interfaces.py:555 +#: zeit/content/cp/interfaces.py:551 msgid "Teaser kicker" msgstr "" @@ -884,7 +886,7 @@ msgid "Invalid hex literal" msgstr "" #: zeit/cms/content/interfaces.py:358 -#: zeit/content/cp/interfaces.py:607 +#: zeit/content/cp/interfaces.py:603 msgid "XML Source" msgstr "" @@ -1550,8 +1552,8 @@ msgstr "" #: zeit/content/article/edit/interfaces.py:204 #: zeit/content/article/interfaces.py:68 #: zeit/content/cp/interfaces.py:127 -#: zeit/content/cp/interfaces.py:291 -#: zeit/content/cp/interfaces.py:641 +#: zeit/content/cp/interfaces.py:287 +#: zeit/content/cp/interfaces.py:637 #: zeit/content/image/browser/configure.zcml:262 #: zeit/content/image/browser/imagegroup.py:222 #: zeit/content/image/image.py:126 @@ -1563,8 +1565,8 @@ msgstr "" #: zeit/content/advertisement/interfaces.py:34 #: zeit/content/article/edit/interfaces.py:205 #: zeit/content/article/interfaces.py:69 -#: zeit/content/cp/interfaces.py:292 -#: zeit/content/cp/interfaces.py:642 +#: zeit/content/cp/interfaces.py:288 +#: zeit/content/cp/interfaces.py:638 #: zeit/content/image/interfaces.py:386 #: zeit/push/interfaces.py:222 msgid "Drag an image group here" @@ -1619,6 +1621,8 @@ msgstr "" #: zeit/content/animation/browser/form.py:22 #: zeit/content/article/edit/browser/form.py:306 #: zeit/content/link/browser/form.py:33 +#: zeit/content/volume/browser/form.py:43 +#: zeit/content/volume/interfaces.py:52 #: zeit/wysiwyg/browser/resources/pagebreak/dialog.pt:14 msgid "Teaser" msgstr "" @@ -1757,7 +1761,7 @@ msgstr "" #: zeit/content/article/edit/browser/edit.py:346 #: zeit/content/author/browser/form.py:170 #: zeit/content/author/browser/honorar.py:53 -#: zeit/content/volume/browser/form.py:120 +#: zeit/content/volume/browser/form.py:138 msgid "There were errors" msgstr "" @@ -2006,7 +2010,7 @@ msgstr "" #: zeit/content/article/edit/interfaces.py:395 #: zeit/content/article/edit/interfaces.py:405 #: zeit/content/article/edit/interfaces.py:464 -#: zeit/content/cp/interfaces.py:539 +#: zeit/content/cp/interfaces.py:535 #: zeit/content/gallery/interfaces.py:98 #: zeit/wysiwyg/browser/resources/citation/dialog.pt:39 #: zeit/wysiwyg/browser/resources/reference/image.pt:26 @@ -2167,19 +2171,19 @@ msgid "Show liveblog in teaser" msgstr "" #: zeit/content/article/edit/interfaces.py:438 -#: zeit/content/cp/interfaces.py:691 +#: zeit/content/cp/interfaces.py:687 msgid "Cardstack id" msgstr "" #: zeit/content/article/edit/interfaces.py:439 -#: zeit/content/cp/interfaces.py:693 +#: zeit/content/cp/interfaces.py:689 msgid "Advertorial?" msgstr "" #: zeit/content/article/edit/interfaces.py:454 #: zeit/content/article/edit/interfaces.py:609 -#: zeit/content/cp/interfaces.py:280 -#: zeit/content/cp/interfaces.py:407 +#: zeit/content/cp/interfaces.py:276 +#: zeit/content/cp/interfaces.py:403 #: zeit/content/infobox/interfaces.py:15 #: zeit/content/video/browser/object-details-body.pt:20 #: zeit/content/volume/browser/toc_listing.py:33 @@ -2243,7 +2247,7 @@ msgid "Linktext" msgstr "" #: zeit/content/article/edit/interfaces.py:621 -#: zeit/content/cp/interfaces.py:319 +#: zeit/content/cp/interfaces.py:315 msgid "Automatic type" msgstr "" @@ -2854,7 +2858,7 @@ msgid "automatic-area-type-centerpage" msgstr "" #: zeit/content/cp/browser/area.py:210 -#: zeit/content/cp/interfaces.py:222 +#: zeit/content/cp/interfaces.py:221 msgid "automatic-area-type-rss-feed" msgstr "" @@ -2869,7 +2873,7 @@ msgid "automatic-area-type-topicpage" msgstr "" #: zeit/content/cp/browser/area.py:217 -#: zeit/content/cp/interfaces.py:219 +#: zeit/content/cp/interfaces.py:218 msgid "automatic-area-type-elasticsearch-query" msgstr "" @@ -2879,12 +2883,12 @@ msgid "automatic-area-type-related-topics" msgstr "" #: zeit/content/cp/browser/area.py:222 -#: zeit/content/cp/interfaces.py:220 +#: zeit/content/cp/interfaces.py:219 msgid "automatic-area-type-reach" msgstr "" #: zeit/content/cp/browser/area.py:226 -#: zeit/content/cp/interfaces.py:223 +#: zeit/content/cp/interfaces.py:222 msgid "automatic-area-type-sql-query" msgstr "" @@ -3112,12 +3116,12 @@ msgstr "" #: zeit/content/cp/interfaces.py:177 #: zeit/content/cp/interfaces.py:194 -#: zeit/content/cp/interfaces.py:272 +#: zeit/content/cp/interfaces.py:268 msgid "Visible in frontend" msgstr "" #: zeit/content/cp/interfaces.py:196 -#: zeit/content/cp/interfaces.py:275 +#: zeit/content/cp/interfaces.py:271 msgid "Kind" msgstr "" @@ -3125,184 +3129,182 @@ msgstr "" msgid "Kind Title" msgstr "" -#: zeit/content/cp/interfaces.py:218 -msgid "automatic-area-type-query" -msgstr "" - -#: zeit/content/cp/interfaces.py:221 +#: zeit/content/cp/interfaces.py:220 msgid "automatic-area-type-topicpagelist" msgstr "" -#: zeit/content/cp/interfaces.py:275 +#: zeit/content/cp/interfaces.py:271 msgid "Used internally for rendering on Friedbert" msgstr "" -#: zeit/content/cp/interfaces.py:284 -#: zeit/content/cp/interfaces.py:415 +#: zeit/content/cp/interfaces.py:280 +#: zeit/content/cp/interfaces.py:411 msgid "Read more" msgstr "" -#: zeit/content/cp/interfaces.py:287 -#: zeit/content/cp/interfaces.py:417 +#: zeit/content/cp/interfaces.py:283 +#: zeit/content/cp/interfaces.py:413 msgid "Read more URL" msgstr "" -#: zeit/content/cp/interfaces.py:298 +#: zeit/content/cp/interfaces.py:294 msgid "Apply teaser layouts automatically?" msgstr "" -#: zeit/content/cp/interfaces.py:302 +#: zeit/content/cp/interfaces.py:298 msgid "First teaser layout" msgstr "" -#: zeit/content/cp/interfaces.py:311 +#: zeit/content/cp/interfaces.py:307 msgid "automatic" msgstr "" -#: zeit/content/cp/interfaces.py:323 +#: zeit/content/cp/interfaces.py:319 +#: zeit/content/volume/interfaces.py:55 msgid "Area background color (6 characters, no #)" msgstr "" -#: zeit/content/cp/interfaces.py:324 +#: zeit/content/cp/interfaces.py:320 +#: zeit/content/volume/interfaces.py:56 msgid "Hex value of background color for area" msgstr "" -#: zeit/content/cp/interfaces.py:335 +#: zeit/content/cp/interfaces.py:331 msgid "Automatic area with teaser from centerpage requires a referenced centerpage." msgstr "" -#: zeit/content/cp/interfaces.py:340 +#: zeit/content/cp/interfaces.py:336 msgid "Automatic area with teaser from custom query requires a query condition." msgstr "" -#: zeit/content/cp/interfaces.py:344 +#: zeit/content/cp/interfaces.py:340 msgid "Automatic area with teaser from TMS topicpage requires a topicpage ID." msgstr "" -#: zeit/content/cp/interfaces.py:348 +#: zeit/content/cp/interfaces.py:344 msgid "Automatic area with teaser from elasticsearch query requires a raw query." msgstr "" -#: zeit/content/cp/interfaces.py:352 +#: zeit/content/cp/interfaces.py:348 msgid "Automatic area with rss-feed requires a given feed" msgstr "" -#: zeit/content/cp/interfaces.py:354 +#: zeit/content/cp/interfaces.py:350 msgid "Automatic area with related-topics requires a given topicpage" msgstr "" -#: zeit/content/cp/interfaces.py:358 +#: zeit/content/cp/interfaces.py:354 msgid "Automatic area with teasers from reach require a given kind" msgstr "" -#: zeit/content/cp/interfaces.py:372 +#: zeit/content/cp/interfaces.py:368 msgid "Elasticsearch raw query is malformed: %s" msgstr "" -#: zeit/content/cp/interfaces.py:411 +#: zeit/content/cp/interfaces.py:407 msgid "Whether block can be removed by automation, e.g. AutoPilot" msgstr "" -#: zeit/content/cp/interfaces.py:445 +#: zeit/content/cp/interfaces.py:441 msgid "Pinned" msgstr "" -#: zeit/content/cp/interfaces.py:447 +#: zeit/content/cp/interfaces.py:443 msgid "Hidden on HP" msgstr "" -#: zeit/content/cp/interfaces.py:449 +#: zeit/content/cp/interfaces.py:445 msgid "Big layout" msgstr "" -#: zeit/content/cp/interfaces.py:451 +#: zeit/content/cp/interfaces.py:447 msgid "Hidden relateds" msgstr "" -#: zeit/content/cp/interfaces.py:459 +#: zeit/content/cp/interfaces.py:455 msgid "Limit amount" msgstr "" -#: zeit/content/cp/interfaces.py:460 +#: zeit/content/cp/interfaces.py:456 msgid "limit-amount-description" msgstr "" -#: zeit/content/cp/interfaces.py:532 +#: zeit/content/cp/interfaces.py:528 msgid "Referenced content" msgstr "" -#: zeit/content/cp/interfaces.py:533 +#: zeit/content/cp/interfaces.py:529 msgid "Drag content here" msgstr "" -#: zeit/content/cp/interfaces.py:542 +#: zeit/content/cp/interfaces.py:538 msgid "Force image on mobile" msgstr "" -#: zeit/content/cp/interfaces.py:595 +#: zeit/content/cp/interfaces.py:591 msgid "The root element must be ." msgstr "" -#: zeit/content/cp/interfaces.py:597 +#: zeit/content/cp/interfaces.py:593 msgid "cp:type must be 'xml'." msgstr "" -#: zeit/content/cp/interfaces.py:599 +#: zeit/content/cp/interfaces.py:595 msgid "No or empty cp:__name__ attribute." msgstr "" -#: zeit/content/cp/interfaces.py:615 +#: zeit/content/cp/interfaces.py:611 msgid "CP Extra Id" msgstr "" -#: zeit/content/cp/interfaces.py:646 +#: zeit/content/cp/interfaces.py:642 msgid "Animate" msgstr "" -#: zeit/content/cp/interfaces.py:652 +#: zeit/content/cp/interfaces.py:648 msgid "left" msgstr "" -#: zeit/content/cp/interfaces.py:653 +#: zeit/content/cp/interfaces.py:649 msgid "center" msgstr "" -#: zeit/content/cp/interfaces.py:654 +#: zeit/content/cp/interfaces.py:650 msgid "right" msgstr "" -#: zeit/content/cp/interfaces.py:660 +#: zeit/content/cp/interfaces.py:656 #: zeit/content/infobox/interfaces.py:19 msgid "Contents" msgstr "" -#: zeit/content/cp/interfaces.py:660 +#: zeit/content/cp/interfaces.py:656 #: zeit/content/modules/interfaces.py:137 msgid "Use Markdown" msgstr "" -#: zeit/content/cp/interfaces.py:663 +#: zeit/content/cp/interfaces.py:659 msgid "Alignment" msgstr "" -#: zeit/content/cp/interfaces.py:664 +#: zeit/content/cp/interfaces.py:660 msgid "Choose alignment" msgstr "" -#: zeit/content/cp/interfaces.py:696 +#: zeit/content/cp/interfaces.py:692 msgid "Background color" msgstr "" -#: zeit/content/cp/interfaces.py:697 +#: zeit/content/cp/interfaces.py:693 msgid "Choose a background color" msgstr "" -#: zeit/content/cp/interfaces.py:708 +#: zeit/content/cp/interfaces.py:704 #: zeit/content/modules/interfaces.py:73 msgid "Jobbox Ticker" msgstr "" -#: zeit/content/cp/interfaces.py:726 +#: zeit/content/cp/interfaces.py:722 msgid "Enable RSS Tracking-Parameter" msgstr "" @@ -4133,15 +4135,15 @@ msgstr "" msgid "A volume with the given name already exists." msgstr "" -#: zeit/content/volume/browser/form.py:71 +#: zeit/content/volume/browser/form.py:89 msgid "Add volume" msgstr "" -#: zeit/content/volume/browser/form.py:127 +#: zeit/content/volume/browser/form.py:145 msgid "Edit volume" msgstr "" -#: zeit/content/volume/browser/form.py:131 +#: zeit/content/volume/browser/form.py:149 msgid "View volume" msgstr "" @@ -4188,7 +4190,7 @@ msgid "Teaserimage" msgstr "" #: zeit/content/volume/interfaces.py:40 -#: zeit/content/volume/interfaces.py:106 +#: zeit/content/volume/interfaces.py:137 msgid "Volume text" msgstr "" diff --git a/core/src/zeit/retresco/convert.py b/core/src/zeit/retresco/convert.py index 0582e8e838..a6ef137821 100644 --- a/core/src/zeit/retresco/convert.py +++ b/core/src/zeit/retresco/convert.py @@ -617,8 +617,8 @@ def __new__(cls, context): def __call__(self): result = { - 'title': self.context.teaserText or 'Ausgabe', - 'teaser': self.context.teaserText or 'Ausgabe', + 'title': self.context.volume_note or 'Ausgabe', + 'teaser': self.context.volume_note or 'Ausgabe', } covers = [ {'id': x.get('id'), 'product_id': x.get('product_id'), 'href': x.get('href')}