So binden Sie Binärdateien für Sprachportale ein

Dieser Artikel beschreibt die Vorgehensweise zum Einbinden von Binärdateien (Bilder, PDF's, Word/Office-Dokumente, etc.) in einem Portal mit mehreren Sprachen.

Eine mehrsprachige Präsenz wird über Weblication® durch Anlegen der jeweiligen Sprachverzeichnisse realisiert. Dies führt das Beispielprojekt bereits anschaulich dar, indem die weiteren Sprachen einfach über das Werkzeug "Sprachprojekt erstellen" erstellt werden. Die Sprachverzeichnisse beziehen sich hinsichtlich des Layouts standardmässig auf einen globalen Ordner, in dem die Templates- und Layout-Dateien abliegen. Desweiteren verfügt ein Portal in den meisten Fällen über ein globales Assets-Verzeichnis, das die Bilder und sonstigen Mediadateien enthält, auf die alle Sprachen zurückgreifen.

Um nun z.B. ein Bild in allen Sprachen auszugeben, dabei aber Titel, Alternativtext, Beschreibung, etc. in der jeweiligen Sprache zu halten, empfehlen wir folgende Vorgehensweise.

Pflegemaske für die Binärdateien mit Mehrsprachigkeit nutzen

Sowohl das BASE Classic wie auch das BASE (Mobile First) Projekt beinhalten bereits im Standard eine Pflegemaske für Binärdateien, welche die Projektsprachen Deutsch, Englisch und Französisch berücksichtigt. Weitere Sprachen lassen sich individuell im Template erweitern.

Nachfolgend das multilanguage.extension.php Template beispielhaft aus einem Mobile First Projekt.

Beispiel: multilanguage.extension.php innerhalb /[IHR-LAYOUT-PROJEKT]/wGlobal/layout/templates/editmasks

<?php $version="1.0"; $encoding="UTF-8"; ?>
<?php exit; ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:wsl="http://weblication.de/5.0/wsl" xmlns:wslPre="http://weblication.de/5.0/wsl" xmlns:wslEditorPre="http://weblication.de/5.0/wsl" xmlns:wd="http://weblication.de/5.0/wd" xmlns:php="http://php.net/xsl" version="1.0">
  <xsl:output method="xml" encoding="UTF-8" omit-xml-declaration="yes"/>
  <!-- Systemparameter (nicht ändern!) -->

  <xsl:param name="wHostURL"/>
  <xsl:param name="wDocumentRoot"/>
  <xsl:param name="wDocumentPath"/>
  <xsl:param name="wDocumentDir"/>
  <xsl:param name="wProjectPath"/>
  <xsl:param name="wIsInEditor"/>
  <xsl:param name="wUsertype"/>
  <xsl:param name="wIsLoggedIn"/>

  <!-- XSLT-Template zur Pflege von Metadaten von Binärdateien -->
  <!--@allowUpdate:1 info=""-->
  <xsl:template match="/wd:document">
    <html lang="de">
      <head>
        <title>wdExtension-Bearbeitungsmaske</title>
        <meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
      </head>
      <body id="wBody">
        <div class="wEditorExtensionSheet">

          <wsl:buttonEdit icon="edit_template_object" path="/[IHR-LAYOUT-PROJEKT]/wGlobal/layout/templates/editmasks/multilanguage.extension.php" showInEditor="1" caption="" style="float:right" title="{php:functionString('wTexts::showTextUser', 'Edit mask', 'Pflegemaske anpassen', 'Editer masque dwAposaffichage')}"/>          
        
          <xsl:if test="php:functionString('preg_match', '/(gif|png|jpe?g|svg)$/i', $wDocumentPath) = '1'">
            <img src="{php:functionString('wPathName::getPathDraft', $wDocumentPath)}?{php:functionString('rand', 100000, 999999)}" alt="" width="200" height="" class="wEditorExtensionThumbnailMeta"/>
          </xsl:if>

          <div style="clear:both"></div>
          
          <!-- web:text:start decorators="default" active="1" caption="<xsl:value-of select="php:functionString('wTexts::getTextUser', 'editor_page_title')"/>" captionInfo="<xsl:value-of select="php:functionString('wTexts::getTextUser', 'editor_page_title_info')"/>" editor="input" allowSpecialChars="1" markShys="1" validator="" errorMessage="<xsl:value-of select="php:functionString('wTexts::getTextUser', 'editor_page_title_fill_out')"/>"--><xsl:value-of select="/wd:document/wd:extension/wd:meta/wd:title/text()"/><!-- web:text:stop -->                                      
          <!-- web:text:start decorators="default" active="1" caption="DE - <xsl:value-of select="php:functionString('wTexts::getTextUser', 'editor_page_title')"/>" captionInfo="<xsl:value-of select="php:functionString('wTexts::getTextUser', 'editor_page_title_info')"/>" editor="input" allowSpecialChars="1" markShys="1" --><xsl:value-of select="/wd:document/wd:extension/wd:object/wd:data[@id = 'title_de']/text()"/><!-- web:text:stop -->
          <!-- web:text:start decorators="default" active="1" caption="EN - <xsl:value-of select="php:functionString('wTexts::getTextUser', 'editor_page_title')"/>" captionInfo="<xsl:value-of select="php:functionString('wTexts::getTextUser', 'editor_page_title_info')"/>" editor="input" allowSpecialChars="1" markShys="1" --><xsl:value-of select="/wd:document/wd:extension/wd:object/wd:data[@id = 'title_en']/text()"/><!-- web:text:stop -->
          <!-- web:text:start decorators="default" active="1" caption="FR - <xsl:value-of select="php:functionString('wTexts::getTextUser', 'editor_page_title')"/>" captionInfo="<xsl:value-of select="php:functionString('wTexts::getTextUser', 'editor_page_title_info')"/>" editor="input" allowSpecialChars="1" markShys="1" --><xsl:value-of select="/wd:document/wd:extension/wd:object/wd:data[@id = 'title_fr']/text()"/><!-- web:text:stop -->                      
          <!-- web:text:start decorators="default" active="1" caption="<xsl:value-of select="php:functionString('wTexts::getTextUser', 'editor_page_description')"/>" captionInfo="<xsl:value-of select="php:functionString('wTexts::getTextUser', 'editor_page_description_info')"/>" editor="textarea"--><xsl:value-of select="/wd:document/wd:extension/wd:meta/wd:description/text()"/><!-- web:text:stop -->
          <!-- web:text:start decorators="default" active="1" caption="DE - <xsl:value-of select="php:functionString('wTexts::getTextUser', 'editor_page_description')"/>" captionInfo="<xsl:value-of select="php:functionString('wTexts::getTextUser', 'editor_page_description_info')"/>" editor="textarea"--><xsl:value-of select="/wd:document/wd:extension/wd:object/wd:data[@id = 'description_de']/text()"/><!-- web:text:stop -->
          <!-- web:text:start decorators="default" active="1" caption="EN - <xsl:value-of select="php:functionString('wTexts::getTextUser', 'editor_page_description')"/>" captionInfo="<xsl:value-of select="php:functionString('wTexts::getTextUser', 'editor_page_description_info')"/>" editor="textarea"--><xsl:value-of select="/wd:document/wd:extension/wd:object/wd:data[@id = 'description_en']/text()"/><!-- web:text:stop -->
          <!-- web:text:start decorators="default" active="1" caption="FR - <xsl:value-of select="php:functionString('wTexts::getTextUser', 'editor_page_description')"/>" captionInfo="<xsl:value-of select="php:functionString('wTexts::getTextUser', 'editor_page_description_info')"/>" editor="textarea"--><xsl:value-of select="/wd:document/wd:extension/wd:object/wd:data[@id = 'description_fr']/text()"/><!-- web:text:stop -->
          <!-- web:text:start decorators="default" active="1" caption="<xsl:value-of select="php:functionString('wTexts::getTextUser', 'editor_page_keywords')"/>" captionInfo="<xsl:value-of select="php:functionString('wTexts::getTextUser', 'editor_page_keywords_info')"/>" editor="input"--><xsl:value-of select="/wd:document/wd:extension/wd:meta/wd:keywords/text()"/><!-- web:text:stop -->
          <!-- web:text:start decorators="default" caption="<xsl:value-of select="php:functionString('wTexts::getTextUser', 'editor_page_copyright')"/>" captionInfo="<xsl:value-of select="php:functionString('wTexts::getTextUser', 'editor_page_copyright_info')"/>" editor="input"--><xsl:value-of select="/wd:document/wd:extension/wd:meta/wd:copyright/text()"/><!-- web:text:stop -->          
          <xsl:variable name="pathThumbnails"><xsl:if test="php:functionString('preg_match', '/^\/[^\/]+\/videos$/', php:functionString('wPathName::getDirFile', $wDocumentPath)) = '1'"><xsl:value-of select="php:functionString('wPathName::getDirFile', $wDocumentPath)" />/thumbnails</xsl:if></xsl:variable>
          <!-- web:text:start decorators="default" caption="<xsl:value-of select="php:functionString('wTexts::getTextUser', 'editor_page_thumbnail')"/>" captionInfo="<xsl:value-of select="php:functionString('wTexts::getTextUser', 'editor_page_thumbnail_info')"/>" editor="file" pathIfEmpty="<xsl:value-of select="$pathThumbnails" />"--><xsl:value-of select="/wd:document/wd:extension/wd:meta/wd:thumbnail/@src"/><!-- web:text:stop -->          
          <!--web:categories:start decorators="default" caption="<xsl:value-of select="php:functionString('wTexts::getTextUser', 'editor_page_categories')"/>" captionInfo="<xsl:value-of select="php:functionString('wTexts::getTextUser', 'editor_page_categories_info')"/>" pathCategories="/[IHR-LAYOUT-PROJEKT]/wGlobal/content/categories/standard.wCategories.php" multiple="1" --><xsl:copy-of select="/wd:document/wd:extension/wd:meta/wd:categories"/><!--web:categories:stop-->

          <wslPre:php>
            wEnv::setGlobalValue('isProjectAsset', wProject::getValueOf(wProjectCur::getPath(), '/wProject/type/text()') == 'assets' ? '1' : '0');
          </wslPre:php>
          
          <!-- Diese Felder werden nur angezeigt, wenn sich das Dokument nicht im Asset-Verzeichnis befindet -->
          <xsl:if test="php:functionString('preg_match', '/wAssets/', $wProjectPath) = '0' and php:functionString('wEnv::getGlobalValue', 'isProjectAsset') = '0'">
            <!--web:text:start decorators="default" caption="<xsl:value-of select="php:functionString('wTexts::getTextUser', 'editor_page_navpoint')"/>" captionInfo="<xsl:value-of select="php:functionString('wTexts::getTextUser', 'editor_page_navpoint_info')"/>" editor="navpath" pathNavigation="<xsl:value-of select="php:function('wPathName::getDirTop', $wDocumentPath)" />/wGlobal/content/navigations/all.wNavigation.php"--><xsl:value-of select="/wd:document/wd:extension/wd:meta/wd:navpoint/@path"/><!--web:text:stop-->
          </xsl:if>        
        </div>
        
        <script>
          //var inputTitle = document.getElementById('webtag_text_<xsl:value-of select="/wd:document/wd:extension/wd:meta/wd:title/@wEditorId"/>');
          //if(inputTitle){
          //  inputTitle.focus();
          //}
          
          wEditor.onBeforeUnloadMessage = 'Alle Änderungen gehen verloren!';          
        </script>
      </body>
    </html>   

  </xsl:template>
</xsl:stylesheet>

Standard-Dateieinstellungen für das globale Assets-Verzeichnis anlegen

Legen Sie für das globale Mediaverzeichnis (z.B. /wAssets) Standard-Dateieinstellungen an, die auf die im vorigen Beispiel definierte Pflegemaske zurückgreifen. Hierzu rufen Sie z.B. die Verzeichniseinstellungen für das Verzeichnis /wAssets/img auf und klicken im Register "Allgemein" auf die Schaltfläche "Eigene Standard-Dateieinstellungen für dieses Verzeichnis anlegen" (sofern vorhanden). Klicken Sie dann auf die erscheinende Schaltfläche "Standard-Dateieinstellungen bearbeiten".
Über das Register "Eigenschaften" und die Schaltfläche "Templates" wählen Sie dann in der Auswahlbox zu "Maske Metadaten" die zuvor definierte Pflegemaske aus (z.B. /[IHR-LAYOUT-PROJEKT]/wGlobal/layout/templates/editmasks/multilanguage.extension.php).

Wenn Sie nun innerhalb des Assets-Bildverzeichnisses ein Bild einchecken, erhält dies als Dokumentenerweiterung die zuvor definierte Erweiterung.

Auslesen der sprachabhängigen Texte

Die aktuelle Projektbasis unterstützt das Auslesen von Titel und Beschreibung der Sprachvarianten bereits im Standard. Somit erhalten Sie bei Titel und Beschreibung, welche wie zuvor genannt hinterlegt wurden, im entsprechenden Sprachprojekt passend den Text (Bild-Element, Liste).

Im Bild-Element nutzen Sie hierzu die Option "Titel des Bildes nutzen", um den passend zur Sprache eingepflegten Text zu verwenden.