simplecontent

PHP Snippets und Beispiele

Inhaltsverzeichnis A-Z Register
Beispiel ausführen

Sprachversionen

Einfache Methode um mehrsprachige Inhalte anzubieten.

Das folgende Skript kann dazu genutzt werden auf einfache Weise unterschiedliche Sprachversionen zu erzeugen. Diese Methode eignet sich gut für kurze Texte/ Navigationselemente etc. die nicht intensiv gepflegt werden müssen. Also für Admin- u.ä Oberflächen, aber weniger gut für umfangreiche redaktionelle Inhalte. Vorteil ist dabei, dass die Angaben "am Mann" sind also nicht ausgelagert werden sondern direkt im Template stehen. Ein weiterer Vorteil ist die Tatsache das es sich unaufwändig in bestehende Strukturen integrieren lässt da nur wenige Änderungen und Anpassungen erforderlich sind. Das kann man auch gut für rollenbasierte Varianten einsetzen, also wenn z.B. der Admin mehr Knöpfe aber dafür weniger oder andere erläuternde Hilfstexte als der normale Nutzer haben soll. Das PHP Code Beispiel:
<?php
/**
* Sprachspezifische Bereiche auswählen
* ==================================
* - per Outputbuffering wird die Ausgabe gesammelt
* - als Sprachvariante markierte Bereiche werden entsprechend der aktuell verlangten Sprachversion ausgefiltert
* - das Resultat wird ausgegeben

* Syntax zur Markierung der Sprachversionen:
* ----------------------------------------------------------
* Bsp. 1:
* [en] Hello [/en] [fr] Salut[/fr]
*
* Bei Ersetzungen wird bis zur nächsten Taggrenze (< oder >) alles ersetzt.
* Dies damit man die Standard-Sprache nicht zwingend auszeichnen muss.
* Es reicht also (hier ist "de" die Standard-Sprache) zu schreiben:
* Bsp.2:
* <h1>Beispiel[en]Example[/en]</h1>

* statt
*
* <h1>[de]Beispiel[/de][en]Example[/en]</h1>
*
*
* Integration in Webseite
* -------------------------------
* Am einfachtsten laesst sich das uber die php.ini erreichen:
* Bsp. 3:
* auto_prepend_file=langpick.inc.php
*
* Man kann es natürlich auch per include in alle Seiten einbinden:
* Bsp. 4:
* require_once('langpick.inc.php');

*/

ob_start('langpick');


function 
langpick()
{



    
// alle verwendeten Sprachkuerzel auflisten ...
    
$AvailableLanguage = array (

        
'de',
        
'en',
        
'fr',
    );
    
    
// Standardsprache ...
    
$DefaultLanguage $AvailableLanguage[0];
    
    
    
// in der Auszeichnung verwendete Klammern definieren ...

    
$OpeningBracket '[';
    
$ClosingBracket ']';
    
    
    
// Standardsprache als aktuelle Sprache setzen ...
    
$CurrentLanguage $DefaultLanguage;

    
// hier geforderte Sprachversion ermittlen, z.B. anhand der URL ...
    // Hier im Beispiel wird ein GET-Parameter genutzt in der Praxis bieten sich eher 
    // Subdomains oder Unterverzeichnisse im Webrrot an.
    
if (isset($_GET['lang']) && in_array($_GET['lang'], $AvailableLanguage)){

        
$CurrentLanguage $_GET['lang'];
    }
    

    
// bisherige Ausgabe ...
    
$Content ob_get_contents();
    
    
    
// Alle Sprachversionen außer der geforderten entfernen ...
    
foreach ($AvailableLanguage as $Language){
        if ( 
strtolower($Language) == strtolower($CurrentLanguage) ) {
            continue;
        }
        
$StartTag preg_quote($OpeningBracket.$Language.$ClosingBracket);
        
$StopTag  preg_quote($OpeningBracket.'/'.$Language.$ClosingBracket);
        
$Content  preg_replace ('#'.$StartTag.'(.*)'.$StopTag.'#iUs'''$Content);
    }

    
// Die gewaehlte Sprachversion ersetzt alles bis zu den umliegenden Taggrenzen ...
    
$StartTag preg_quote($OpeningBracket.$CurrentLanguage.$ClosingBracket);
    
$StopTag  preg_quote($OpeningBracket.'/'.$CurrentLanguage.$ClosingBracket);

    
$Content preg_replace ('#([^>"]*)'.$StartTag.'(.*)'.$StopTag.'([^<"]*)(?=<|$|")#iUs','\2'$Content);
    
    return 
$Content;
}

// HINWEIS!
// ========
// Der folgende Teil ist nur zu Demonstrationszwecken erforderlich.
// Bevor man das Skript also richtig einsetzt ist er also zu entfernen.

echo <<< EOT


<h1>Hallo [en]Hello[/en][fr]Salut[/fr]</h1>


[de]Dieser Text erscheint nur in der deutschsprachigen Version[/de]
[en]Dieser Text erscheint nur in der englischsprachigen Version[/en]
[fr]Dieser Text erscheint nur in der französichsprachigen Version[/fr]

<ul>
<li><a href="?lang=de">Deutsch</a></li>
<li><a href="?lang=en">Englisch</a></li>
<li><a href="?lang=fr">Französisch</a></li>
</ul>
EOT;

// hier explizit "flushen", da hier output buffering auf mehreren Level zum Einsatz kommt
ob_end_flush();



?>

Dieses PHP Snippet soll in erster Linie als Beispiel und Anregung für eigene Bemühungen dienen.
Gerne darf man es für Projekte aller Art benutzen.
Möchte jemand das Snippet also solches in ähnlicher oder anderer Form veröffentlichen ist ein kleiner Hinweis auf simplecontent.net nicht zuviel verlangt oder Herr Koch?
Für die Abwesenheit von Fehlern kann natürlich keine Gewähr gegeben werden.