anbeck: Mehrsprachige Seite organisieren

Hallo zusammen,

ich habe eine kleine Seite im Internet, die hauptsächlich Reportagefotos zeigt. Momentan ist sie noch auf Deutsch, aber um einen möglichst großen Personenkreis anzusprechen, möchte ich sie auch auf Englisch und Französisch anbieten.

Natürlich bietet sich die Möglichkeit, einfach die Seite zu übersetzen und in 3 Versionen ins Internet zu stellen. Da es aber hauptsächlich um die Fotos auf der Seite geht, wollte ich fragen, ob es eine elegantere Lösung gibt.
Am besten wäre, ich könnte die Navigationsleisten übersetzen, und je nach Wahl des Lesers die anzeigen, die seiner Sprachwahl entsprechen.

Habt Ihr irgendwelche Vorschläge?

Wenn es hilfreich ist, es geht um diese Seite:
http://www.photografree.net

Viele Dank!
André

  1. Huhu André,

    ich habe eine kleine Seite im Internet, die hauptsächlich Reportagefotos zeigt.

    Eine schöne Seite, gefällt mir sehr gut.

    Am besten wäre, ich könnte die Navigationsleisten übersetzen, und je nach Wahl des Lesers die anzeigen, die seiner Sprachwahl entsprechen.

    Wenn es hilfreich ist, es geht um diese Seite:
    http://www.photografree.net

    Das ist in der Tat hilfreich.

    Beschreibe mal wie die Seite bisher verwaltet wird.
    So wie ich es verstehe setzt Du auf Deinem Rechner ein lokales Programm "HomeGallery 1.4.8" http://www.stefanheymann.de/homegallery/ ein.

    Dort steckst Du ein HTML-Template (mit PHP) für die Seiten hinein und spielst die generierten Seiten mit Bildern auf den Server.
    Allerdings bietet das Programm keine Funktionalität zur Verwaltung mehrsprachiger Seiten und daraus resultiert jetzt das Problem, richtig?

    Mmmmh, da fällt mir auf die Schnelle folgendes ein:

    Lege für jede Sprache eine Subdomain an. Also z.B. "en.photografree.net", "fr.photografree.net" und "de.photografree.net".

    Jetzt kannst Du im Template je nach gewählter Domain unterschiedliche
    Elemente ausgeben. Dazu könntest Du $_SERVER['HTTP_HOST'] auswerten.

    Eine andere Idee mit der Du u.U. auch gleich die anderen Inhalte mit Homegallery mehrsprachig pflegen könntest wäre es alle sprachspezifischen Inhalte durch Tags zu identifizieren.
    Z.B. ungefähr so:

    <de>Sommer 2006</de><en>summer 2006</en><fr>été 2006</fr>

    Jetzt muss bei jeder Anforderung einer Seite natürlich dafür gesorgt werden
    dass diese Pseudo-Tags entfernt und nur die Inhalte zur aktuell gewählten Sprache ausgegeben werden.
    Da kann man etwas mit Hilfe von mod rewrite und ein paar Skript-Zeilen zusammenstecken. Da könnte ich Dir was raussuchen, habe das schon mal irgendwo so ähnlich gemacht.

    Viele Grüße

    lulu

    --
    bythewaythewebsuxgoofflineandenjoytheday
    1. Hi.

      Mmmmh, da fällt mir auf die Schnelle folgendes ein:

      Ob deine Vorschläge funktionieren, kann ich nicht beurteilen. Scheint mir recht aufwändig zu sein. Wäre es unter praktischen Gesichtspunkten nicht einfacher, ein kleines CMS einzusetzten, das mehrsprachige Versionen einer Website verwalten kann, Redaxo zum Beispiel?

      vg Bud

      1. Ob deine Vorschläge funktionieren, kann ich nicht beurteilen. Scheint mir recht aufwändig zu sein. Wäre es unter praktischen Gesichtspunkten nicht einfacher, ein kleines CMS einzusetzten, das mehrsprachige Versionen einer Website verwalten kann, Redaxo zum Beispiel?

        Ich schau mir das gerade an, sieht interessant aus. Ich werde mal unverbindlich schauen, inwiefern sich die Galerien dort einbinden lassen.

        Grüße,
        André

        1. Ob deine Vorschläge funktionieren, kann ich nicht beurteilen. Scheint mir recht aufwändig zu sein. Wäre es unter praktischen Gesichtspunkten nicht einfacher, ein kleines CMS einzusetzten, das mehrsprachige Versionen einer Website verwalten kann, Redaxo zum Beispiel?

          Ich schau mir das gerade an, sieht interessant aus. Ich werde mal unverbindlich schauen, inwiefern sich die Galerien dort einbinden lassen.

          Hmm, Redaxo kann sicher viel. Aber für mich erscheint das im Moment etwas viel. Ich sehe nicht, wie ich da innerhalb von kurzer Zeit meine Seite in ein Template verwandeln könnte, dafür fehlt mir der Durchblick.

          Grüße,
          a.

          1. Hi.

            Hmm, Redaxo kann sicher viel. Aber für mich erscheint das im Moment etwas viel. Ich sehe nicht, wie ich da innerhalb von kurzer Zeit meine Seite in ein Template verwandeln könnte, dafür fehlt mir der Durchblick.

            Ein kleines Beispiel, wie es aussehen könnte (mit deinem leicht gekürzten Quellcode):

              
            <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"  
                    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">  
              
            <html xmlns="http://www.w3.org/1999/xhtml">  
              
             <head>  
              <title><? print $REX['SERVERNAME'].' | '.$this->getValue("name"); ?></title>  
              <link href="<? echo $REX['HTDOCS_PATH'] ?>files/print.css" type="text/css" rel="stylesheet" media="print"/>  
              <link href="<? echo $REX['HTDOCS_PATH'] ?>files/style.css" type="text/css" rel="stylesheet" media="screen"/>  
              <!--[if lte IE 6]><link rel="stylesheet" href="css/ielte6.css" type="text/css" media="screen" /><![endif]-->  
             </head>  
              
             <body>  
              <div id="container">  
               <div id="logo">  
                <a href="./">photogra<span>free</span></a>  
                <!-- Deine Navigation. --><?php  
               <?php print $navLeftCol; ?></div>  
               <div id="subnav">  
                <!-- Deine  erste Spalte. --><?php  
                print $this->getArticle(1);  
                ?>  
               </div>  
               <div id="main">  
                <!-- Deine zweite Spalte. -->  
                <?php print $this->getArticle(0);?>  
               </div>  
              </div>  
             </body>  
              
            </html>  
            
            

            Lies vielleicht zum Einstieg Webseiten erstellen mit Redaxo. Du kannst dir diese Demoversion installieren und im Backend studieren, wie sie aufgebaut ist. Das erklärt mehr als tausend Worte. Einfach mal bisschen rumspielen.

            vg Bud

            1. Hi.

              Hmm, Redaxo kann sicher viel. Aber für mich erscheint das im Moment etwas viel. Ich sehe nicht, wie ich da innerhalb von kurzer Zeit meine Seite in ein Template verwandeln könnte, dafür fehlt mir der Durchblick.

              Ein kleines Beispiel, wie es aussehen könnte (mit deinem leicht gekürzten Quellcode):

              Danke, wäre schön, wenn das so einfach ginge. Ich hab mir das jetzt ein wenig angeschaut, aber das Erstellen der Templates erscheint mir ein wenig kompliziert, insbesondere, da ich noch nicht verstanden habe, wie es denn nun mehrsprachig geht (auch wenn das Arbeiten nachher dank der Templates umso einfacher wäre).

              Hmm,
              a.

      2. Redaxo zum Beispiel?

        Wer hätte das gedacht? Es gibt ein Homegallery-Addon für Redaxo!

        Grüße,
        a.

    2. Huhu André,

      Huhu lulu,

      huch, der Text unten sieht irgendwie nach Kammquoting aus, ich hoffe, das erklärt sich durch die Größe des Formulars und gibt sich beim Posten.

      Beschreibe mal wie die Seite bisher verwaltet wird.
      So wie ich es verstehe setzt Du auf Deinem Rechner ein lokales Programm "HomeGallery 1.4.8" http://www.stefanheymann.de/homegallery/ ein.

      Dort steckst Du ein HTML-Template (mit PHP) für die Seiten hinein und spielst die generierten Seiten mit Bildern auf den Server.
      Allerdings bietet das Programm keine Funktionalität zur Verwaltung mehrsprachiger Seiten und daraus resultiert jetzt das Problem, richtig?

      So spielt sich das ab. Home Gallery benutze ich insbesondere, weil es mir die Bilder gleich in die bildschirmgerechte Größe skaliert und mir, wie Du angenommen hattest, gleich die Galerie-Seiten ausspuckt. Das ist noch nicht problematisch, da ich das von Dir angesprochene Template so verändern kann, wie es paßt. Das Problem ist also kein HG-spezifisches.

      Mmmmh, da fällt mir auf die Schnelle folgendes ein:

      Lege für jede Sprache eine Subdomain an. Also z.B. "en.photografree.net", "fr.photografree.net" und "de.photografree.net".

      Jetzt kannst Du im Template je nach gewählter Domain unterschiedliche
      Elemente ausgeben. Dazu könntest Du $_SERVER['HTTP_HOST'] auswerten.

      Ah, oh. Aber ich müßte trotzdem die Daten 3fach auf den Server spielen. Die Bilder nicht, aber die Seiten an sich.

      Eine andere Idee mit der Du u.U. auch gleich die anderen Inhalte mit Homegallery mehrsprachig pflegen könntest wäre es alle sprachspezifischen Inhalte durch Tags zu identifizieren.
      Z.B. ungefähr so:

      <de>Sommer 2006</de><en>summer 2006</en><fr>été 2006</fr>

      Jetzt muss bei jeder Anforderung einer Seite natürlich dafür gesorgt werden
      dass diese Pseudo-Tags entfernt und nur die Inhalte zur aktuell gewählten Sprache ausgegeben werden.
      Da kann man etwas mit Hilfe von mod rewrite und ein paar Skript-Zeilen zusammenstecken. Da könnte ich Dir was raussuchen, habe das schon mal irgendwo so ähnlich gemacht.

      Das hört sich sehr interessant an. Meine Traumlösung wäre in der Tat folgende: ich habe die von Dir genannten Pseudotags. Auf der Startseite befinden sich die üblichen kleinen Fähnchen. Englisch wird als Standard ausgewählt, aber sobald jemand ein Fähnchen anclickt, merkt sich der Server die Variable und gibt sie von Seite zu Seite weiter. Damit das ganze nicht zu ineffizient wird, wäre es nur für die kurzen Texte auf der Startseite und die Menüs auf den Seiten der Galerie denkbar, nehme ich an. Für die gößeren Essays würde ich dann wirklich andere Seiten anlegen.
      Und als Bonus würde die Sprachwahl dann per Cookie gespeichert, für den nächsten Besuch.

      Wie genau läuft Deine Lösung?

      Beste Grüße,
      André

      1. Huhu

        Jetzt kannst Du im Template je nach gewählter Domain unterschiedliche
        Elemente ausgeben. Dazu könntest Du $_SERVER['HTTP_HOST'] auswerten.

        Ah, oh. Aber ich müßte trotzdem die Daten 3fach auf den Server spielen. Die Bilder nicht, aber die Seiten an sich.

        Nein, Du würdest innerhalb des Templates einfach den Wert für HTTP_HOST erfragen und entsprechende Varianten ausgeben.

        Z.B.

        if ($_SERVER['HTTP_HOST'] == 'en.photografree.net'){

        echo "Die englischen Schaltknöpfe";
        }elseif($_SERVER['HTTP_HOST'] == 'fr.photografree.net'){
            echo "Die franz. Version";
        }else{
          echo "Die Standard-Knöpfe (z.B. deutsch)";
        }

        Das ist eine primitive Variante, die aber durchaus reichen würde wenn Du tatsächlich nur die "weiter" und "zurück" Schaltflächen in Deiner Bildansicht übersetzen wolltest.

        Wie genau läuft Deine Lösung?

        Das hängt davon ab wie Deine Seite gebaut ist.
        Für eine PHP-Seite, also eine Seite bei der alle HTML-Seiten geparsed werden kann man in jede Datei ein include ergänzen (ggf. kann man dafür auch "auto_prepend_file" nutzen).

        Ungefähr so:

        xyz.php
        --
        <?php
         require_once ('langpick.inc.php');
        ?>

        <H1>Beispiel[en]Example[/en]</H1>
        Hallo wie geht es
        [en]Hello how are you[/en]
        [fr]Ca va?[/fr]

        langpick.inc.php
        --

        <?php
        /**
        * Sprachspezifische Elemente auswählen
        * Dazu per Outputbuffering die Ausgabe sammeln und vor der Ausgabe als Sprachvariante markierte Bereiche
        * entsprechend der aktuell verlangten Sprachversion ausfiltern.
        */

        ob_start('picksnippet');

        function picksnippet()
        {
         $content = ob_get_contents();
         // hier geforderte Sprachversion ermittlen, z.B. anhand der URL
         $lang = 'en';
         extract_language($content, $lang);

        return $content;
        }

        function extract_language(&$s, $lang)
        {
                $avail_lang = array (
                 'en',
                 'de',
              'fr',
                );

        // Alle Sprachversionen außer der geforderten entfernen
                foreach ($avail_lang as $l){
                        if ( strtolower($l) == strtolower($lang) ) {
                                continue;
                        }
                        $s = preg_replace ('#['.$l.'](.*)[/'.$l.']#iUs', '', $s);
                }

        $s = preg_replace ('#([^>"]*)['.$lang.'](.*)[/'.$lang.']([^<"]*)(?=<|$|")#iUs','\2', $s);
        }

        In diesem Beipspiel ist "en" fest vorgegeben.
        Das muss natürlich an dieser Stelle angepasst werden.
        Die Sprachvarianten werden hier in eckigen Klammern notiert.
        Bei Ersetzungen wird bis zur nächsten Taggrenze (< oder >) alles ersetzt.
        Dies damit man die default-Sparache nicht auszeichnen muss.
        Es reicht also zu schreiben:

        <h1>Beispiel[en]Example[/en]</h1>

        statt

        <h1>[de]Beispiel[/de][en]Example[/en]</h1>

        Bei einer Webseite die nicht standardmäßig per PHP geparsed wird könnte man
        per mod rewrite alle Anfragen über ein Skript laufen lassen welches sich den
        Seiteninhalt besorgt, entprechend verändert und erst dann ausliefert.

        Das funktioniert recht schnell und zuverlässig.
        Ich bevorzuge es die aktuell gewählte Sprachvariante mit in der URL
        zu übergeben. Also z.B. per subdomain (en.example.org/index.html) oder im Pfad (www.example.org/en/index.html).
        Man kann das natürlich auch im Cookie ablegen aber dann sollte man beachten den Inhalt nicht vor Suchmaschinen zu verbergen.

        Du kannst es ja mal mit einer Deiner Seiten ausprobieren.

        Viele Grüße

        lulu

        --
        bythewaythewebsuxgoofflineandenjoytheday
        1. Huhu

          Jetzt kannst Du im Template je nach gewählter Domain unterschiedliche
          Elemente ausgeben. Dazu könntest Du $_SERVER['HTTP_HOST'] auswerten.

          Ah, oh. Aber ich müßte trotzdem die Daten 3fach auf den Server spielen. Die Bilder nicht, aber die Seiten an sich.

          Nein, Du würdest innerhalb des Templates einfach den Wert für HTTP_HOST erfragen und entsprechende Varianten ausgeben.

          Hmm, das sieht wirklich interessant aus. Ich werde das tatsächlich am Wochenende mal ausprobieren.

          Da ist nur eine Sache, die ich nicht verstehe: wenn die Sprachversion über den HTTP_HOST bzw. die subdomain abgefragt wird (en/fr/de.abc.net), wie schaffe ich es dann, jede Datei nur einmal hochladen zu müssen? Um bei mir Inhalte auf einer Subdomain anzuzeigen, muß ich dafür einen Unterordner anlegen. Dh. einen für en, etc. Ich müßte also jede Datei 3 Mal hochladen (in jedes Unterverzeichnis, also für jede subdomain ein Mal).

          Hmmm, ich glaube, ich stehe auf dem Schlauch.

          Grüße,
          a.

          1. Hallo André,

            Da ist nur eine Sache, die ich nicht verstehe: wenn die Sprachversion über den HTTP_HOST bzw. die subdomain abgefragt wird (en/fr/de.abc.net), wie schaffe ich es dann, jede Datei nur einmal hochladen zu müssen? Um bei mir Inhalte auf einer Subdomain anzuzeigen, muß ich dafür einen Unterordner anlegen. Dh. einen für en, etc. Ich müßte also jede Datei 3 Mal hochladen (in jedes Unterverzeichnis, also für jede subdomain ein Mal).

            Subdomains und Verzeichnisstruktur auf dem Server sollten unabhängig voneinander sein. D.h. Du kannst allen drei Subdomains das selbe Webroot-Verzeichnis zuweisen.
            Es kann natürlich sein dass Dein Hoster das etwas unüblich handhabt.
            Das sollte sich aber konfigurieren lassen.
            Frage ggf. bei Deinem Hosting-Anbieter nach wie und wo das geht.
            Ansonsten knallhart den Anbieter wechseln ;-)

            Viele Grüße

            lulu

            --
            bythewaythewebsuxgoofflineandenjoytheday
            1. Hallo,

              Da ist nur eine Sache, die ich nicht verstehe: wenn die Sprachversion über den HTTP_HOST bzw. die subdomain abgefragt wird (en/fr/de.abc.net), wie schaffe ich es dann, jede Datei nur einmal hochladen zu müssen? Um bei mir Inhalte auf einer Subdomain anzuzeigen, muß ich dafür einen Unterordner anlegen. Dh. einen für en, etc. Ich müßte also jede Datei 3 Mal hochladen (in jedes Unterverzeichnis, also für jede subdomain ein Mal).

              Subdomains und Verzeichnisstruktur auf dem Server sollten unabhängig voneinander sein. D.h. Du kannst allen drei Subdomains das selbe Webroot-Verzeichnis zuweisen.

              Ohh, sorry, da bin ich auf die einfachste Lösung natürlich nicht gekommen! Natürlich ist es möglich, den Subdomains einfach dasselbe Verzeichnis zuzuweisen (pffff!). Ein kurzer Test bestätigte dies.

              Am Wochenende werde ich das ausprobieren und dann melde ich mich noch mal.

              Frage ggf. bei Deinem Hosting-Anbieter nach wie und wo das geht.
              Ansonsten knallhart den Anbieter wechseln ;-)

              Hehe, ;-)

              Vielen Dank und Grüße,
              a.

        2. Ich hab das jetzt mal ausprobiert und Dir noch ein Problemchen ins Postfach gelegt, ich hoffe, das macht Dir nichts aus!

          Grüße,
          André