Linuchs: bestimmte Sprache aus mehrsprachigem String filtern

Beitrag lesen

Ich habe deinen Lösungsweg ehrlichgesagt nicht verstanden.

Es geht um HTML-Dateien mit Platzhaltern, die von PHP-Programmen gelesen, ausgefüllt und an den Client ausgeliefert werden.

Ursprünglich hatte ich für fünf Sprachen und jedes Programm je eine Platzhalter-Datei. Bei Änderungen mussten fünf Dateien manuell geändert werden, das führte zu Fehlern.

Deshalb habe ich sprach-abhängige Texte als "Array" in die HTML-Datei geschrieben und die "Arrays" mit den Zeichen ### markiert. Bisher pro Zeile nur ein "Array".

Nun geht es darum, mehrere "Arrays" pro Zeile zuzulassen, wobei die Anzahl der Sprachen von Programm zu Programm variieren kann, sie muss als Parameter also mitgegeben werden.

Hier habe ich 5 Sprachen und möchte die französische Version (4):

$zeile = "<p>textA: ###de-1###en-1###nl-1###fr-1###es-1### textB: ###deutsch###english###Nederlands###francais###espanol### textC: ###de-2###en-2###nl-2###fr-2###es-2</p>";
echo displaySprache( $zeile, 5, 4 );

Ausgabe: textA: fr-1 textB: francais textC: fr-2

Habe das inzwischen so gelöst, hoffe aber, dass das vielleicht schneller geht. Pro Zeile der Platzhalter-Datei so eine Schleife zu duchlaufen hält auf:

function displaySprache( $text, $anzahl_sprachen, $lg_ndx ) {
  $anzahl_trenner   = substr_count ( $text, "###" ); // Prtüfung, ob paarig
  // Trenner vorhanden und teilbar durch anzahl_sprachen +1?
  if ( $anzahl_trenner > 0 && $anzahl_trenner % ($anzahl_sprachen +1) == 0 ) {
    $arr    = explode( '###', $text );   // text - #de - #en - #nl - #text - #de - #en - #nl - #text
    $string   =  $arr[0];   // vorlaufender text
    for ( $i=1; $i<count($arr); $i++ ) {
      if ( 
          $i %  ($anzahl_sprachen +1) == 0        // vorlaufender Text und Texte zwischen den Sprachen
      ||  $i ==  $lg_ndx                          // 1. Vorkommen der Sprache
      ||  $i %  ($anzahl_sprachen +1) == $lg_ndx  // weitere Sprach-Elemente
      ) {
        $string .=  $arr[$i];
      }
    }
    $string .=  $arr[$i];   // nachlaufender text
  } else {
    $string = $text;
  }
  return $string;
}

Linuchs