Verwendung einer Sprachdatei
Es liegt ein Template cardList.spml vor, welches das Template getTranslation.spml einbindet.
<%@ page language="java" pageEncoding="UTF-8" contentType="text/html; charset=UTF-8"
%><%@ taglib uri="http://www.sitepark.com/taglibs/core" prefix="sp"
%><%@ taglib tagdir="/WEB-INF/tags/spt" prefix="spt"
%><%@ taglib tagdir="/WEB-INF/tags/tag" prefix="tag"
%>
<sp:set name="_itemScope" object="system.arguments.itemScope"/>
<sp:set name="_sectionType" object="system.arguments.sectionType"/>
<sp:include module="sitekit-module" uri="/functions/getTranslations.spml" return="_translation">
<sp:argument name="key" value="templates.sectionTypes.cards"/>
<sp:argument name="extend" object="system.arguments.translation"/>
</sp:include>
<%-- hier erfolgt der Zugriff auf die Übersetzungsschlüsselwörter -->
<div class="editorblock">
<h2><sp:print name="_translation.name"/></h2>
</div>
Die json-Sprachdatei lang/de/templates/sectionTypes/cards.json
{
"name": "Kacheln"
}
übergeben wir im key-Argument an das Template getTranslations.spml
...
<sp:include module="sitekit-module" uri="/functions/getTranslations.spml" return="_translation">
<sp:argument name="key" value="templates.sectionTypes.cards"/>
...
Innerhalb des Templates können wir nun mit _translation.keyname auf die einzelnen Übersetzungskeys zugreifen.
Überschreiben der Sprachdatei
Wir nehmen an, dass das Template cardList.spml von dem Template moreLikeThis.spml verwendet wird. Das moreLikeThis Template nutzt cardsList.spml und ergänzt die Eingabe um einige Eingabefelder bevor es die Maske für die Eingabe der Card-Felder darstellt. Das einzige was moreLikeThis innerhalb der ‘cards’ verändern möchte, ist die Übersetzung des Schlüsselwortes name.
Wie oben bereits gesehen, ist aber die Sprachdatei innerhalb des cardList.spml fest vorgegeben. Um die Übersetzungen zu beeinflussen bietet das Template getTranslation.spml einen zweiten Übergabeparameter:
...
<sp:include module="sitekit-module" uri="/functions/getTranslations.spml" return="_translation">
<sp:argument name="key" value="templates.sectionTypes.cards"/>
<sp:argument name="extend" object="system.arguments.translation"/>
...
Der Übergabeparamter extend erwartet eine map mit key-value Paren. Wir können vor dem include des Templates cards.spml die map zusammenstellen:
<sp:map name="_translation" action="new" />
<sp:map name="_translation" action="put" key="name" value="Auch interessant"/>
oder die dazugehörige json-Sprachdatei lang/client/kundenmodul/de/templates/sectionTypes/moreLikeThis.json aus dem Kundenmodul nutzen.
<sp:include module="sitekit-module" uri="/functions/getTranslations.spml" return="_translation">
<sp:argument name="key" value="templates.sectionTypes.moreLikeThis"/>
<sp:argument name="extend" object="system.arguments.translation"/>
</sp:include>
‘Sprachdatei nutzen’ entspricht nicht exakt dem was in dem Fall passiert. Wir greifen eigentlich auf die bereits zusammengefassten Übersetzungsbaum in dem wir keys verwendet, die den Pfaden der Sprachdateien entsprechen.
Die _translation-Map übergeben wir dann an das cardList.spml-Template, das seinerseits über system.arguments.translation die Map erhält und an das Template getTranslation.spml übergibt.
Das vollständige Template ‘moreLikeThis.spml’:
<%@ page language="java" pageEncoding="UTF-8" contentType="text/html; charset=UTF-8"
%><%@ taglib uri="http://www.sitepark.com/taglibs/core" prefix="sp"
%><%@ taglib tagdir="/WEB-INF/tags/spt" prefix="spt"
%><%@ taglib tagdir="/WEB-INF/tags/tag" prefix="tag"
%>
<sp:set name="_itemScope" object="system.arguments.itemScope"/>
<sp:set name="_sectionType" object="system.arguments.sectionType"/>
<sp:set name="_options" object="system.arguments.options"/>
<sp:include module="sitekit-module" uri="/functions/getTranslations.spml" return="_translation">
<sp:argument name="key" value="templates.sectionTypes.moreLikeThis"/>
<sp:argument name="extend" object="system.arguments.translation"/>
</sp:include>
<sp:include module="sitekit-module" uri="/templates/sectionTypes/cards.spml" >
<sp:argument name="itemScope" object="_itemScope"/>
<sp:argument name="sectionType" object="_sectionType"/>
<sp:argument name="options" object="_options"/>
<sp:argument name="translation" object="_translation"/>
</sp:include>