14.05.2010

Texte aus PHP-Funktionen in javascript zur Verfügung stellen

Gerade bei mehrsprachigen Seiten macht es Sinn, die statischen Texte einer Website in separate (XML-) Dateien auszulagern. Um auf diese auch in Javascript-Funktionen zuzugreifen, ist nur ein kleines Script notwendig.


Gerade bei mehrsprachigen Seiten macht es Sinn, die statischen Texte einer Website in separate (XML-) Dateien auszulagern. Um auf diese auch in Javascript-Funktionen zuzugreifen, ist nur ein kleines Script notwendig.

Dieses Script sollte im Head-Bereich der Seite integriert werden.

// Aktuelle Sprache setzen
$currentLanguage = 'de';

// Alle verfügbaren Texte in das Array $languageTexts schreiben
$languageTexts = getLanguageTexts($currentLanguage);

// Javascriptbereich erzeugen
echo '<script type="text/javascript">';

// Array fuer alle Texte erzeugen
echo 'var languageTexts    = new Array();';

// Assoziatives "Array" (Objekt) erzeugen
echo 'languageTexts[0]     = new Object();';

// Alle Texte in das Objekt-Array languageTexts[0] schreiben
// Format languageTexts[0][key] = value
foreach ($languageTexts as $languageTextId => $languageTextValue){
  echo 'languageTexts[0]["'.$languageTextId.'"] = \''.$languageTextValue.'\';';
}
echo '</script>';

Die zugehörige Funktion getLanguageTexts

function getLanguageTexts($currentLanguage){

  $dom = new DomDocument;
  $languageXMLFile = '/text/'.$currentLanguage.'.wTexts.php'

  $xmlString = file_get_contents($_SERVER['DOCUMENT_ROOT'].$languageXMLFile );
  $dom->loadXML($xmlString);
  $xpath = new DOMXpath($dom);

  $nodeList = $xpath->evaluate('/allTexts/text');

  $languageTexts = array();
  foreach ($nodeList as $node){
    $languageTexts[$node->getAttribute('key')] = $node->nodeValue;
  }

  return $languageTexts;

}

Die XML-Datei, in der die Texte gespeichert werden (Beispiel)

<allTexts version="1.0">
  <text key="homepage">Startseite</text>
  <text key="contact">Kontakt</text>
  <text key="link_back">Zurück</text>
</allTexts>

Fertiges Script für Weblication GRID5 Projekte:

Funktionsaufruf

<wsl:registerTextJS lib="/de-wGlobal/wGlobal/scripts/taglib/wsl" project="{$wProjectPath}" textfile="" language="de"/>

Sicher auch interessant