Gerrit: Zweisprachige Domain

Hallo,
im Augenblick wird beim Aufruf meiner Seite die deutsche Version angezeigt. Dort kann man die englische Version auswählen.
Wie kann ich erreichen, dass die englischspracige Leserschaft zunächst die englische Version angezeigt bekommt?
Die unterschiedlichen Versionen liegen in example.test/de/ bzw. example.test/fr/

Vielen Dank für Eure Unterstützung
Gerrit

  1. Langfassung auf der Seite.

    1. Das ist mir leider zu kompliziert. Das Beispiel verwendet z.B. php, mit dem ich nichts zu tun habe.

      1. Das Beispiel verwendet z.B. php, mit dem ich nichts zu tun habe.

        Tja. Du kannst es ja gerne in die Programmiersprache Deiner Wahl umschreiben - alternativ in der Dokumentation des Webservers nachschauen, was der so bietet.

        Allerdings macht es das sehr schwierig, einem Benutzer eine Auswahl anzubieten.

        1. @@ursus contionabundo

          Allerdings macht es das sehr schwierig, einem Benutzer eine Auswahl anzubieten.

          Warum sollte?

          Im Sprachmenü stehen sprachspezifische Links zu den Versionen der jeweiligen Seite. Bei Anfrage eines sprachspezifischen URLs wird die Seite in dieser Sprache ausgeliefert; bei Anfrage eines generischen URLs (d.h. ohne Sprachangabe im URL) greift language negotiation.

          Und wo gerade nach Sprachmenü gefragt wurde: Flaggen stehen nicht für Sprachen.

          LLAP 🖖

          --
          „Wer durch Wissen und Erfahrung der Klügere ist, der sollte nicht nachgeben. Und nicht aufgeben.“ —Kurt Weidemann
  2. @@Gerrit

    Wie kann ich erreichen, dass die englischspracige Leserschaft zunächst die englische Version angezeigt bekommt?

    LLAP 🖖

    --
    „Wer durch Wissen und Erfahrung der Klügere ist, der sollte nicht nachgeben. Und nicht aufgeben.“ —Kurt Weidemann
    1. Hallo Gunnar,
      die beiden Dokumente enthalten sehr viel Text und spezielle Begriffe von Euch Experten geschrieben.
      Wenn man allerdings kurzfristig so etwas realisieren soll, ist dies nicht geeignet. Ich bin inzwischen auf folgendes gestoßen:
      https://wiki.selfhtml.org/wiki/Webserver/htaccess/alternative_Inhalte * Mehrere Beispiele mit kurzen Erläuterungen.
      Die Frage ist nun, ob es sich dabei um eine alte Version handelt, und die Beispiele nicht funktionieren, bzw. welches der drei Beispiele noch heute zu empfehlen ist.

      1. Hallo Gerrit,

        die beiden Dokumente enthalten sehr viel Text und spezielle Begriffe von Euch Experten geschrieben.
        Wenn man allerdings kurzfristig so etwas realisieren soll, ist dies nicht geeignet.

        Wenn man nicht genügend Ahnung hat, sollte man sich an gewisse Dinge nicht heranwagen.

        Bis demnächst
        Matthias

        --
        Pantoffeltierchen haben keine Hobbys.
        1. @Matthias,
          auf Deinen Kommentar kann ich gerne verzichten. Muss man denn, wenn man etwas realisieren will in allen Details Bescheid wissen/sich in alles einarbeiten? Wozu sind dann die Beispiele im Netz und insbesondere auch in Selfhtml?

        2. Hello,

          die beiden Dokumente enthalten sehr viel Text und spezielle Begriffe von Euch Experten geschrieben.
          Wenn man allerdings kurzfristig so etwas realisieren soll, ist dies nicht geeignet.

          Wenn man nicht genügend Ahnung hat, sollte man sich an gewisse Dinge nicht heranwagen.

          "Motivation" ist wohl heute nicht dein zweiter Vorname?

          Man kann ruhig mal etwas wagen. Mit HTML-Seiten kann man schließlich nicht viel zerstören. :-)

          Glück Auf
          Tom vom Berg

          --
          Es gibt nichts Gutes, außer man tut es!
          Das Leben selbst ist der Sinn.
        3. Wenn man nicht genügend Ahnung hat, sollte man sich an gewisse Dinge nicht heranwagen.

          Ich hätte hier ein klein Blümchen für Dich.

      2. welches der drei Beispiele noch heute zu empfehlen ist.

        Es sind "Beispiele" für das, was Dir bereits z.B. unter MultiViews-Sprachvereinbarung (Apache) empfohlen wurde. Jedes sollte funktionieren.

        Wenn man allerdings kurzfristig so etwas realisieren soll, ist dies nicht geeignet.

        Wenn man derartiges kurzfristig realisieren will, aber mit dem "Fachchinesisch" nicht klarkommt, dann muss ein Fachmann her. Oder bringst Du Dein Auto zur Frisöse wenn die Bremsen "gemacht" werden müssen? Anders ausgedrückt: Es gibt oft einen Punkt ab dem es kompliziert wird.

        1. Wenn man derartiges kurzfristig realisieren will, aber mit dem "Fachchinesisch" nicht klarkommt, dann muss ein Fachmann her. Oder bringst Du Dein Auto zur Frisöse wenn die Bremsen "gemacht" werden müssen?

          Super Beispiel!

          Die Fachleute finde ich doch hier im Forum. Muss ich wissen, wie ein Reifen konstruiert wird, wenn ich einen alten ersetzen will? Nein, ich frage einen Fachmann, was in Frage kommt und damit hat's sich!

          1. Literatur

            wenn Du jedermann zeigen willst, dass Du schlechte, aber vermeintlich einfache Lösungen bevorzugst, dass mach sowas.

            Der gezeigte Code ist aus den genannten Gründen ungetestet. Bringe das oder halt "sowas" (Du kannst es verhübschen und/oder ergänzen) in der index.html im Document-Root unter:

            <!Doctype html>
            <html>
                <head>
                    <meta charset="utf-8">
                    <script src="/selectLanguage.js"></script>
                    <meta name="robots" constent="noindex,follow" />
                </head>
                <body>
                  <noscript>
                        <ul>
                            <li><a href="/de/">deutsch</a></li>
                            <li><a href="/fr/">francais</a></li>
                            <li><a href="/en/">english</a></li>
                        </ul>
                    </noscript>
                </body>
            </html>
            
            // file: [DOCUMENT_ROOT]/selectLanguage.js
            
            function selectLanguage {
                
                var languages = ['de', 'en', 'fr'];
                var default   = 'en'; // languages[1] geht auch...
             
                var newUri = false;  
                languages.forEach =  (function ( language ) {
                    if ( navigator.language.indexOf( language ) > -1 ) {
                        newUri = constructNewUri( language );
                    }
                });
                if ( false == newUri ) {
                    newUri = constructNewUri( default );
                }
                document.location.href = newUri;
            }
            
            function constructNewUri( language ) {
            
                var uri =  document.location.href;
                newUri = uri.protocol;
            
                if ( uri.username ) {
                    newUri = newUri + uri.username;
                    if ( uri.password ) {
                        newUri = newUri + ':' + uri.password;
                    }
                }
            
                if ( uri.username || uri.password ) {
                    newUri = newUri + '@';
                }
            
                newUri + '//' + uri.host;
            
                if ( uri.port ) {
                    newUri = newUri + ':' + uri.port;
                }
            
                newUri = newUri + '/' + language;
            
                if ( uri.pathname ) {
                    newUri = newUri + uri.pathname;
                }
            
                if ( uri.search ) {
                    newUri = newUri + uri.search;
                } else {
                    newUri = newUri + '/';
                }
            
                if ( uri.hash ) {
                    newUri = newUri + uri.hash;
                }
                
                return newUri;
            }
            
            selectLanguage();
            

            Es könnte hilfreich sein, auch die 404er Seite mittels eines Eintrages in der .htaccess auf die /index.php zu setzen und dann in den Sprachordnern wieder zu überschreiben.

            1. So. Gerrit. Mich wundert ja, dass Du Dich mit den vorgestellten Lösungen offenbar gar nicht wirklich befasst. Sonst wäre Dir aufgefallen, dass mein Schnellschrieb von gestern den einen oder anderen kleinen Fehler enthält.

              Hier also der reparierte und getestete Code der "selectLanguage.js", die, wie gezeigt, nur eingebunden werden muss. Einfacher geht es wirklich nicht.

              // file: [DOCUMENT_ROOT]/selectLanguage.js
              
              function selectLanguage () {
              
                  // Selbst festlegen    
                  var languages = ['de', 'en', 'fr'];
                  var defaultLang   = 'en'; // languages[1] geht auch…
                  // Ab hier nichts mehr ändern
              
              
                  var newUri = false;  
                  for ( var i=0; i < languages.length; i++ ) {
                      if ( navigator.language.indexOf( languages[i] ) > -1 ) {
                          newUri = constructNewUri( languages[i] );
                      }
                  }
                  if ( false == newUri ) {
                      newUri = constructNewUri( defaultLang );
                  }
                  document.location.href = newUri;
              }
              
              
              function constructNewUri( language ) {
              
                  var uri =  new URL( document.location.href );
                  newUri = uri.protocol + '//';
              
                  if ( uri.username ) {
                      newUri = newUri + uri.username;
                      if ( uri.password ) {
                          newUri = newUri + ':' + uri.password;
                      }
                  }
              
                  if ( uri.username || uri.password ) {
                      newUri = newUri + '@';
                  }
              
                  newUri = newUri + uri.host;
                  
                  if ( uri.port ) {
                      newUri = newUri + ':' + uri.port;
                  }
              
                  newUri = newUri + '/' + language;
              
                  if ( uri.pathname ) {
                      newUri = newUri + uri.pathname;
                  }
              
                  if ( uri.search ) {
                      newUri = newUri + uri.search;
                  } 
              
                  if ( uri.hash ) {
                      newUri = newUri + uri.hash;
                  }
                  
                  return newUri;
              }
              
              selectLanguage();
              
              1. // file: [DOCUMENT_ROOT]/selectLanguage.js
                
                function selectLanguage () {
                
                    // Selbst festlegen    
                    var languages = ['de', 'en', 'fr'];
                    var defaultLang   = 'en'; // languages[1] geht auch…
                    // Ab hier nichts mehr ändern
                
                
                    var newUri = false;  
                    for ( var i=0; i < languages.length; i++ ) {
                        if ( navigator.language.indexOf( languages[i] ) > -1 ) {
                            newUri = constructNewUri( languages[i] );
                        }
                    }
                    if ( false == newUri ) {
                        newUri = constructNewUri( defaultLang );
                    }
                    document.location.href = newUri;
                }
                
                function constructNewUri( language ) {
                    var uri =  new URL( document.location.href );
                    uri.pathname = '/' + language + uri.pathname;
                    return uri.href;
                }
                
                selectLanguage();
                
      3. Ich bin inzwischen auf folgendes gestoßen:
        https://wiki.selfhtml.org/wiki/Webserver/htaccess/alternative_Inhalte * Mehrere Beispiele mit kurzen Erläuterungen.
        Die Frage ist nun, ob es sich dabei um eine alte Version handelt, und die Beispiele nicht funktionieren, bzw. welches der drei Beispiele noch heute zu empfehlen ist.

        Leider habe ich auf diese Frage keine antwort erhalten, oder irre ich mich?

        1. Servus!

          Ich bin inzwischen auf folgendes gestoßen:
          https://wiki.selfhtml.org/wiki/Webserver/htaccess/alternative_Inhalte * Mehrere Beispiele mit kurzen Erläuterungen.
          Die Frage ist nun, ob es sich dabei um eine alte Version handelt, und die Beispiele nicht funktionieren, bzw. welches der drei Beispiele noch heute zu empfehlen ist.

          Leider habe ich auf diese Frage keine antwort erhalten, oder irre ich mich?

          Doch, du irrst:

          Es sind "Beispiele" für das, was Dir bereits z.B. unter MultiViews-Sprachvereinbarung (Apache) empfohlen wurde. Jedes sollte funktionieren.

          Herzliche Grüße

          Matthias Scharwies

          --
          "I don’t make typos. I make new words."
  3. Hello,

    im Augenblick wird beim Aufruf meiner Seite die deutsche Version angezeigt. Dort kann man die englische Version auswählen.
    Wie kann ich erreichen, dass die englischspracige Leserschaft zunächst die englische Version angezeigt bekommt?

    Unterschiedliche TLDs benutzen. Das würde statistisch bezrachtet vermutlich für eine hohe Trefferqoute sorgen.

    Die unterschiedlichen Versionen liegen in example.test/de/ bzw. example.test/fr/

    Das ist logisch: "fr" für die englische Version :-P

    Glück Auf
    Tom vom Berg

    --
    Es gibt nichts Gutes, außer man tut es!
    Das Leben selbst ist der Sinn.
    1. Das ist logisch: "fr" für die englische Version :-P

      Mea culpa: Kopierfehler!

      1. Hello,

        Das ist logisch: "fr" für die englische Version :-P

        Mea culpa: Kopierfehler!

        Macht ja nichts. Es brachte mich zumindest auf die einfache Idee, die Sprache ggf. durch eine passende TLD abzubilden, sofern man die Domain dort registrieren kann.

        Das wirft selbstverständlich viele andere Fragen auf, die hier sicherlich gleich diskutiert werden :-O

        [Edit] Nachtrag zu einer Lösung mit Apache

        Glück Auf
        Tom vom Berg

        --
        Es gibt nichts Gutes, außer man tut es!
        Das Leben selbst ist der Sinn.
    2. @@TS

      Unterschiedliche TLDs benutzen.

      Welche TLD für Kastilisch (Spanisch)? Und welche für Katalanisch?

      LLAP 🖖

      --
      „Wer durch Wissen und Erfahrung der Klügere ist, der sollte nicht nachgeben. Und nicht aufgeben.“ —Kurt Weidemann
      1. Hello,

        Unterschiedliche TLDs benutzen.

        Welche TLD für Kastilisch (Spanisch)? Und welche für Katalanisch?

        Das stand hier beides nicht zur Debatte. Aber selbstverständlich habe ich derartige Einwände von Dir erwartet.

        Fragt sich, ob man mittels Accept-Header eine bessere Trefferquote erzielen könnte?!

        Glück Auf
        Tom vom Berg

        --
        Es gibt nichts Gutes, außer man tut es!
        Das Leben selbst ist der Sinn.
  4. Hi Gerrit,

    die schnellste Möglichkeit wäre eine Javascript-Weiterleitung, z.B. so etwas:

    <script type="text/javascript">
    
    if(navigator.userLanguage=="de" || window.navigator.language == 'de')
    {
    location.href = 'example.test/de/';
    }
    
    </script>
    

    Hier werden alle mit deutscher Browsersprache auf die deutsche Seite umgeleitet. Wenn das für deine Zwecke reicht, würde ich es genauso machen. Das funktioniert ohne großes technisches Verständnis

    BTW: die Browsersprache muss nicht immer der gewünschten Lesesprache entsprechen. Vielleicht hat jemand den Browser auf englisch eingestellt, weil ihm so die Menüs besser gefallen, liest aber trotzdem auf deutsch. Und für die Fälle, in denen Javascript deaktiviert ist, könntest du die Links auch zusätzlich anbieten. Die Sache mit den Länderflaggen birgt potentielle Probleme (s.o.). Allerdings wird sich kaum jemand daran stören, wenn er oder sie aus Kanada kommt und trotzdem auf die englische oder französische Flaage klickt (imho). In diesem Forum geht es manchmal etwas zu dogmatisch zu, was teils funktionierende, aber technisch nicht korrekte Lösungen verhindert und einen als Anfänger nicht unbedingt weiter bringt. Ebenso es allerdings User, die sich in einzelnen Gebieten sehr gut auskennen und viel Recherchearbeit ersparen. Wo viel Licht ist, ist auch Schatten :-)

    Gruß Hans