Label eines Node Attributes

Hallo,
ich habe einen custom eel helper, dem ich alle Instanzen eines Node übergebe und mit foreach durchgehe.
Vom Attribut ‘newsCategory’ (SelectBox) hätte ich dann gerne Value und Label.
über
$news->getProperty('newsCategory');
komme ich auch problemlos an das Value.

Beim Label haperts aber.
Wie komme ich an das Label? Irgendwie wollte keine Schreibweise die ich ausprobiert habe funktionieren.

Ein node hat eine getLabel() Methode. Die kannst du auch direkt in Fusion über ${node.label} erreichen können.

Hi,
vielen dank für deine Antwort.
Damit bekomme ich aber nur den Namen des Node, nicht den Label eines Selectbox Attributes des Node? $news->getProperty(‘newsCategory’)->getLabel(); funktioniert jedenfalls nicht, das hatte ich schon ausprobiert.

Ich für diesen Node ein Attribut definiert:

'newsCategory':
      type: 'string'
      defaultValue: 'A'
      ui:
        label: 'Category'
        reloadIfChanged: TRUE
        inspector:
          group: 'main'
          editor: Content/Inspector/Editors/SelectBoxEditor
          editorOptions:
            values:
              'ABC':
                label: 'Eins'
              'DEF':
                label: 'Zwei'

Über
$news->getProperty('newsCategory'); kriege ich dann zb. “ABC” zurück.
Ich bräuchte aber auch das dazugehörige Label “Eins”.

Sorry das hatte ich missverstanden. Ich dachte categories wären nodes.

Es wird nur der value gespeichert. Das label ist ja im Zweifel von der Sprache abhängig.

Ich würde für den Rückweg translations mit dem value als id nutzen.

Ok, dann ists kein Wunder, dass ich das nicht gefunden habe :smiley:
Vielen Dank^^

Beim Auslesen hab ich es jetzt schon hingekriegt, translations zu benutzen. Das funktioniert einwandfrei.
Aber bei der Node Definition für das Attribut ‘NewsCategory’ wie oben gezeigt scheiterts irgendwie.
Im Backend wird mir als Label überall nur i18n angezeigt^^°

neosProblemNodetranslation

Die Node Definition sieht jetzt so aus (Ausschnitt):

'newsCategory':
       type: 'string'
       defaultValue: 'A'
       ui:
         label: 'Category'
         reloadIfChanged: TRUE
         inspector:
           group: 'main'
           editor: Content/Inspector/Editors/SelectBoxEditor
           editorOptions:
             values:
               'ABC':
                 label: 'i18n'
               'DEF':
                 label: 'i18n'

Ich habe eine xlf angelegt: Resources/Private/Translations/en/NodeTypes/News.xlf
(da muss kein “NodeTypes.Document.” vor, oder? Nur Plain der Name?)

xlf:

<?xml version="1.0"?>
<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
	<file original="" product-name="X.Y" source-language="en" datatype="plaintext">
		<body>
			<trans-unit id="properties.newsCategory.ui.inspector.editorOptions.values.ABC">
				<source>Kartoffel</source>
			</trans-unit>
		</body>
	</file>
</xliff>

Jetzt zeigt der aber im Backend als Label bei diesem Attribut überall nur “i18n” anstatt “Kartoffel” :confused:
Ich schätze mal, der key in der xlf ist falsch, ich hab aber leider nicht rausgekriegt, wie ich das schreiben muss. Hättest du da vielleicht einen Tipp…?

Wo ich das gerade sehe… Ja, da stolpere ich auch jedes mal wieder drüber… Die Keys sind dort ein wenig anders. :roll_eyes:

properties.newsCategory.selectBoxEditor.values.ABC wäre hier korrekt, wenn ich mich nicht ganz täusche.

Aber wie gesagt, ich stolper da beim copy-pasten der anderen translation-labels auch immer drüber.

VG
Niklas

Vielen Dank :smiley:

should this translation “trick” be added here? Property Editor Reference — Neos CMS dev-master documentation

or is it already documented some other place?

… this seems to be the right place: NodeType Translations - Content Repository - Manual - Neos CMS - Neos Docs

A data source is also a nice idea :thinking:
Thank you very much, this is really interesting :smiley:
Didn’t know i could use a data source in the yaml as well^^

Das hier hatte ich im Juli vor meinem Urlaub geschrieben, aber nicht abgeschickt.

Das sieht dann so aus:

Z. B. Datei Vendor.Package/Resources/Private/Translations/de/Labels.xlf:

<?xml version="1.0" encoding="UTF-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
    <file product-name="Vendor.Package" source-language="de" datatype="plaintext">
        <body>
            <trans-unit id="newsCategory.ABC" xml:space="preserve">
                <source>Eins</source>
            </trans-unit>
            <trans-unit id="newsCategory.DEF" xml:space="preserve">
                <source>Zwei</source>
            </trans-unit>
        </body>
    </file>
</xliff>

PHP:

$newsCategory = $news->getProperty('newsCategory');
$translationParameterToken = new TranslationParameterToken('newsCategory.' . $newsCategory, $newsCategory);
$label = $translationParameterToken
    ->package('Vendor.Package')
    ->source('Labels') // Pfad unterhalb von Translations/<Sprache>/, ohne .xlf-Endung
    ->translate();

Dadurch sollte er die Übersetzung aus der .xlf-Datei verwenden und als Fallback auf den eigentlichen Wert zurückspringen. Hoffe, das hilft dir.

Vielen Dank :grinning: