Files
VITEC-website/packages/vitec/ContentBlocks/ContentElements/card/language/labels.xlf
o-rasche 3aaf8fdad5 VITEC headless v14: 5-bug fix unifies plugin renderers + cleanup
Resolves a cascade of TYPO3 v14 breaking changes that left every VITEC
plugin's JSON output silently empty:

1. `list_type` column dropped — all renderer page-discovery queries now
   filter by `CType = 'vitec_X'`.
2. `#[AsAllowedCallable]` attribute added to every public render() —
   without it v14 throws AllowedCallableException, which headless
   silently filters via its "Oops, an error occurred!" guard.
3. `$GLOBALS['TSFE']->id` is null inside JSON cObj context — page id
   now read from the `frontend.page.information` request attribute
   (TSFE fallback kept for legacy entry points).
4. page.tsconfig wizard items migrated to `CType = vitec_X` directly
   (legacy `CType=list, list_type=...` no longer exists in v14).
5. ContainerChildrenProcessor + ContentElementResolver dispatch the
   PLUGIN_RENDERERS map by CType (primary) with list_type fallback.

Beyond the bug fix this commit also contains:
- Datasheets renderer rewritten to "products with newest datasheet"
  semantics (filtered via Download.hideondatasheets).
- New vitec/card content block — multi-purpose card with backend
  preview and layout/background/aspect/alignment/border/shadow options.
- New vitec_container CType (b13 single-column container, FlexForm
  cssClass propagated into the JSON envelope).
- ContentElementResolver service for contentelement/contentelementcta
  link resolution; ContainerChildrenProcessor for nested plugin
  resolution inside b13 containers.
- Vitecset setup.typoscript: ContentElement import moved to top so
  lib.contentElement is defined before VITEC's tt_content blocks.
- Cleanup: 98 .bak.<timestamp> debugging backups removed; *.bak.* and
  /public/_assets_install/ added to .gitignore.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-15 14:29:17 +02:00

207 lines
8.3 KiB
XML

<?xml version="1.0" encoding="UTF-8"?>
<xliff version="1.2">
<file source-language="en" datatype="plaintext" original="messages">
<body>
<trans-unit id="title">
<source>VITEC · Card</source>
</trans-unit>
<trans-unit id="description">
<source>Multi-purpose card with image / icon, body, two CTAs, layout/background/aspect-ratio/alignment/border/shadow options.</source>
</trans-unit>
<trans-unit id="tab_content.label">
<source>Content</source>
</trans-unit>
<trans-unit id="tab_layout.label">
<source>Layout</source>
</trans-unit>
<trans-unit id="tab_advanced.label">
<source>Advanced</source>
</trans-unit>
<trans-unit id="eyebrow.label">
<source>Eyebrow (small pre-title)</source>
</trans-unit>
<trans-unit id="image.label">
<source>Image</source>
</trans-unit>
<trans-unit id="image.description">
<source>Primary card image. Optional — leave empty for text-only / icon-only layouts.</source>
</trans-unit>
<trans-unit id="icon.label">
<source>Icon (SVG or PNG)</source>
</trans-unit>
<trans-unit id="icon.description">
<source>Small icon used as fallback when no image is set, or as a visual indicator in icon-focused layouts.</source>
</trans-unit>
<trans-unit id="primary_cta.label">
<source>Primary CTA Link</source>
</trans-unit>
<trans-unit id="primary_cta_label.label">
<source>Primary CTA Button Text</source>
</trans-unit>
<trans-unit id="secondary_cta.label">
<source>Secondary CTA Link (optional)</source>
</trans-unit>
<trans-unit id="secondary_cta_label.label">
<source>Secondary CTA Button Text (optional)</source>
</trans-unit>
<trans-unit id="card_link.label">
<source>Whole-card link (optional)</source>
</trans-unit>
<trans-unit id="card_link.description">
<source>If set, the whole card becomes clickable. Overrides individual CTAs visually in the frontend.</source>
</trans-unit>
<!-- ============================================================== -->
<!-- layout_variant -->
<!-- ============================================================== -->
<trans-unit id="layout_variant.label">
<source>Layout Variant</source>
</trans-unit>
<trans-unit id="layout_variant.items.vertical.label">
<source>Vertical (image top, content below)</source>
</trans-unit>
<trans-unit id="layout_variant.items.horizontal.label">
<source>Horizontal (image left, content right)</source>
</trans-unit>
<trans-unit id="layout_variant.items.horizontal_reverse.label">
<source>Horizontal Reverse (content left, image right)</source>
</trans-unit>
<trans-unit id="layout_variant.items.image_overlay.label">
<source>Image Overlay (text over image)</source>
</trans-unit>
<trans-unit id="layout_variant.items.text_only.label">
<source>Text Only (no image)</source>
</trans-unit>
<trans-unit id="layout_variant.items.icon_card.label">
<source>Icon Card (icon focused, text below)</source>
</trans-unit>
<trans-unit id="layout_variant.items.feature.label">
<source>Feature (large highlighted card)</source>
</trans-unit>
<trans-unit id="layout_variant.items.compact.label">
<source>Compact (small card, tight spacing)</source>
</trans-unit>
<!-- ============================================================== -->
<!-- background_variant -->
<!-- ============================================================== -->
<trans-unit id="background_variant.label">
<source>Background Variant</source>
</trans-unit>
<trans-unit id="background_variant.items.none.label">
<source>None</source>
</trans-unit>
<trans-unit id="background_variant.items.orange.label">
<source>Orange</source>
</trans-unit>
<trans-unit id="background_variant.items.blue.label">
<source>Blue</source>
</trans-unit>
<trans-unit id="background_variant.items.graphite.label">
<source>Graphite</source>
</trans-unit>
<trans-unit id="background_variant.items.midnight.label">
<source>Midnight</source>
</trans-unit>
<trans-unit id="background_variant.items.light.label">
<source>Light (neutral)</source>
</trans-unit>
<trans-unit id="background_variant.items.dark.label">
<source>Dark (neutral)</source>
</trans-unit>
<!-- ============================================================== -->
<!-- image_aspect_ratio -->
<!-- ============================================================== -->
<trans-unit id="image_aspect_ratio.label">
<source>Image Aspect Ratio</source>
</trans-unit>
<trans-unit id="image_aspect_ratio.items.auto.label">
<source>Auto (original)</source>
</trans-unit>
<trans-unit id="image_aspect_ratio.items.1_1.label">
<source>Square (1:1)</source>
</trans-unit>
<trans-unit id="image_aspect_ratio.items.4_3.label">
<source>Landscape (4:3)</source>
</trans-unit>
<trans-unit id="image_aspect_ratio.items.16_9.label">
<source>Widescreen (16:9)</source>
</trans-unit>
<trans-unit id="image_aspect_ratio.items.3_4.label">
<source>Portrait (3:4)</source>
</trans-unit>
<!-- ============================================================== -->
<!-- text_alignment -->
<!-- ============================================================== -->
<trans-unit id="text_alignment.label">
<source>Text Alignment</source>
</trans-unit>
<trans-unit id="text_alignment.items.left.label">
<source>Left</source>
</trans-unit>
<trans-unit id="text_alignment.items.center.label">
<source>Center</source>
</trans-unit>
<trans-unit id="text_alignment.items.right.label">
<source>Right</source>
</trans-unit>
<!-- ============================================================== -->
<!-- border_style -->
<!-- ============================================================== -->
<trans-unit id="border_style.label">
<source>Border Style</source>
</trans-unit>
<trans-unit id="border_style.items.none.label">
<source>None</source>
</trans-unit>
<trans-unit id="border_style.items.soft.label">
<source>Soft (subtle line)</source>
</trans-unit>
<trans-unit id="border_style.items.hard.label">
<source>Hard (thick line)</source>
</trans-unit>
<trans-unit id="border_style.items.dashed.label">
<source>Dashed</source>
</trans-unit>
<!-- ============================================================== -->
<!-- shadow -->
<!-- ============================================================== -->
<trans-unit id="shadow.label">
<source>Shadow</source>
</trans-unit>
<trans-unit id="shadow.items.none.label">
<source>None</source>
</trans-unit>
<trans-unit id="shadow.items.soft.label">
<source>Soft</source>
</trans-unit>
<trans-unit id="shadow.items.medium.label">
<source>Medium</source>
</trans-unit>
<trans-unit id="shadow.items.strong.label">
<source>Strong</source>
</trans-unit>
<trans-unit id="cssClass.label">
<source>Additional CSS Class</source>
</trans-unit>
<trans-unit id="cssClass.description">
<source>Custom CSS class rendered on the card root element in the frontend.</source>
</trans-unit>
<trans-unit id="debug.label">
<source>Allow Debug Output</source>
</trans-unit>
<trans-unit id="debug.description">
<source>When enabled, extra debug fields may be included in the JSON output for this element.</source>
</trans-unit>
</body>
</file>
</xliff>