ingobar: Mehrsprachige website, aber wie?

Guten Morgen! Ich möchte für ein zweisprachiges Orchester einen Internetseite gestalten. Diese soll es in zwei Varianten geben: deutsch, ungarisch. Wie macht man das am effizientesten?

Folgende Ideen hatte ich schon:

  1. php+mysql und dann mit get die Sprache übergeben
  2. cookie für die Sprache plazieren (oder auf get) und dann irgendwie mit json (und php) und javascript arbeiten. Ungefähr so wie hier. Auch die Lösung mit YAML gefiel mir gut, aber ich habe keine Ahnung, was da noch alles dazu gehört und aus den zwei kurzen Beispiel-Codes werde ich nicht schlau.
  3. Eine Seite in Deutsch erstellen und wenn diese fertig ist, einfach eine Kopie machen und übersetzen.

Bei der ersten Variante hätte ich Sorge wegen irgendwelcher injections. Bei der zweiten Varianten würde nichts gehen, wenn jemand JS deaktiviert. Allerdings wollte ich auch gumby als framework für das responsive Design nehmen (--Ergänzung: Das gibt es nicht mehr, jetzt muss ich was neues suchen), dafür brauch ich ja nun auch JS. Die dritte ist vor allem mühsam.

Wie würdet ihr das machen?

Ingo

PS: Im Moment tendiere ich sogar zu einer Kombination aus 2. und 3. Ich würde json nehmen, um die Texte einfacher zu handeln und mit eine festen Struktur arbeiten, damit die Adressen "einfacher" sind. Also z.B. www.blablabla.de/de/inhalt.html und www.blablabla.de/hu/inhalt.html

PPS: Am liebsten wären mir natürlich auch Links zu Sourcecodes.

  1. Hallo

    Du hast an dieser Stelle zwei Aufgaben.

    1. Auswahl der anzuzeigenden Sprache.
    2. Art der Bereitstellung der Daten.

    zu 1.:

    • Die Browser übertragen, wenn nicht verkonfiguriert sind, beim Request einer Seite auch die im Browser akzeptierten Sprachen. Da steht meist die im Betriebssystem eingestellte Sprache und meist noch Englisch drin. Du kannst also schon einmal auf diese Werte reagieren und die passende oder eine Standardsprache ausgeben (Stichwort: „Content Negotiation“).
    • Für den Fall, dass beispielsweise ein ungarischer Musiker die Seite am Rechner eines deutschen Mitmusikers aufruft, solltest du zusätzlich eine Sprachauswahl auf der Website zur Verfügung stellen.
    • Es erscheint mir in deinem Fall nicht als sinnvoll, die Sprache als Cookie beim Nutzer abzuspeichern, weil die Browservorgabe wohl in den allermeisten Fällen zutrifft. Grundsätzlich könnte man das aber machen.

    zu 2.:

    • Du kannst nach der Auswahl, welche Sprache ausgegeben werden soll, die passenden Daten aus weiner Datenbank oder aus einer Datei lesen. Gedanken und Beispiele dazu hast du ja in deinem Punkten 1 und 2 gebracht. An diesem Punkt würde ich, unabhängig von der Sympathie zu einer der Techniken, nach der in der Ausführung schnelleren Technik greifen.
    • Grundsätzlich ist dabei einer Bereitstellung der Daten schon auf dem Server vor der Auslieferung des Dokuments zu bevorzugen. Ein z.B. mit PHP realisierte Umsetzung funktioniert immer, außer der Webserver oder PHP auf dem Webserver will nicht. Das Nachladen der Inhalte durch ein im Browser anspringendes JavaScript, muss wegen dafür ungünstiger Browsereinstellungen nicht klappen. Dass das erst nach der Auslieferung der dann wohl falschen Sprache an den Browser geschieht, ist ein zusätzlicher Minuspunkt. JavaScript sollte man hier benutzen, um im Fall einer bewussten Änderung der Sprache die neuen Inhalte nachzuladen und ins Dokument einzufügen.

    Tschö, Auge

    --
    Wir hören immer wieder, dass Regierungscomputer gehackt wurden. Ich denke, man sollte die Sicherheit seiner Daten nicht Regierungen anvertrauen.
    Jan Koum, Mitgründer von WhatsApp, im Heise.de-Interview
    1. Danke, dass du so ausführlich geantwortet hast. Das hilft natürlich beim Denken. Im Moment habe folgenen Ansatz: Für jede Sprache gibt es eine json-Datei mit den Texten, die per php eingelesen werden. Das Ganze werde ich dann noch irgendwie mit foundation so aufblasen und gestalten, wie ich es gerne hätte.

      Wegen der Sprache werde ich einen Umschalter auf alle Fälle integrieren. „Content Negotiation“ schaue ich mir auch noch an.

      Nochmals danke für deine Anregungen,

      Ingo

      1. Hallo ingobar,

        Wegen der Sprache werde ich einen Umschalter auf alle Fälle integrieren. „Content Negotiation“ schaue ich mir auch noch an.

        Zum Beispiel auch beim W3C https://www.w3.org/International/questions/qa-when-lang-neg

        Bis demnächst
        Matthias

        --
        Das Geheimnis des Könnens liegt im Wollen. (Giuseppe Mazzini)
        1. @@Matthias Apsel

          Wegen der Sprache werde ich einen Umschalter auf alle Fälle integrieren. „Content Negotiation“ schaue ich mir auch noch an.

          Zum Beispiel auch beim W3C https://www.w3.org/International/questions/qa-when-lang-neg

          Wobei der Artikel selbst auch ein Beispiel für content negotiation ist. Irgendwer hat den mal ins Deutsche übersetzt. ;-)

          LLAP 🖖

          --
          „Wir haben deinen numidischen Schreiber aufgegriffen, o Syndicus.“
          „Hat auf dem Forum herumgelungert …“
          (Wachen in Asterix 36: Der Papyrus des Cäsar)
  2. Hallo,

    warum nutzt Du nicht ein Content Management System, welches die benötigten Mechanismen und vor allem eine Pflegeoberfläche für die mehrsprachigen Inhalte mitbringt? Ich nutze z.B. sehr gern Processwire.

    Viele Grüße Basti

    1. warum nutzt Du nicht ein Content Management System

      Ich habe mal eine zeitlang mit Wordpress gearbeitet, hatte dann aber wochenlang das Problem, dass ich es nicht dicht bekommen habe. Immer haben irgendwelche Hacker einen Weg durchgefunden. Alle möglichen PlugIns sollten das zwar verhindern, aber ich habe es nicht richtig dichtbekommen. Daher möchte ich lieber wieder was eigenes machen.

      Aber danke für den Tipp mit ProcessWire, das kannte ich noch nicht.

  3. @@ingobar

    Ich möchte für ein zweisprachiges Orchester einen Internetseite gestalten. Diese soll es in zwei Varianten geben: deutsch, ungarisch. Wie macht man das am effizientesten?

    Das Wie wäre die Folgefrage. Zunächst ist das Was zu klären: Was sind die Anforderungen?

    • Sind die deutschen und ungarischen Seiten Übersetzungen derselben Inhalte?
      In dem Fall ist content negotiation ein Muss. (Wurde in diesem Thread ja schon angesprochen.)

    • Werden die Inhalte einmal erstellt und bleiben (bis auf kleine Korrekturen) statisch? Oder ändern sich die Inhalte ständig? Wenn ja, wer tut das: nur du oder sollen andere Personen auch Inhalte pflegen können?
      Im ersten Fall oder wenn nur du Änderungen vornimmst, bist du mit reinen HTML-Seiten bestens bedient. Nur wenn auch andere ohne HTML-Kenntnisse Inhalte pflegen können sollen, brauchst du ein CMS.

    • Ist gewährleistet, dass zu jedem Zeitpunkt alle Seiten in beiden Sprachen verfügbar sind, oder kann es vorkommen, dass manche Seiten (zumindest zeitweise) nur in einer Sprache vorliegen (bspw. weil die Übersetzung noch auf sich warten lässt)?
      Davon hängt u.a. ab, wie Verlinkungen zu setzen sind.

    Folgende Ideen hatte ich schon:

    1. php+mysql und dann mit get die Sprache übergeben

    Das wäre eine Form der CMS-Variante. Würde ich nur machen, wenn ein CMS erforderlich ist.

    2. cookie für die Sprache plazieren (oder auf get) und dann irgendwie mit json (und php) und javascript arbeiten.

    Bietet sich zusätzlich zu content negotiation an. (Auch das wurde in diesem Thread schon angesprochen.)

    3. Eine Seite in Deutsch erstellen und wenn diese fertig ist, einfach eine Kopie machen und übersetzen.

    Wenn kein CMS erforderlich ist, würde ich statische HTML-Seiten erstellen. Manchmal ist die einfachste Lösung auch die beste.

    Die dritte ist vor allem mühsam.

    Inwiefern?

    damit die Adressen "einfacher" sind. Also z.B. www.blablabla.de/de/inhalt.html und www.blablabla.de/hu/inhalt.html

    Einfacher mit content negotiation hast du es mit Adressen wie example.net/inhalt.de.html und example.net/inhalt.hu.html; dann kannst du MultiViews auf Apache einsetzen.

    Und für Beispieldomains verwende bitte eine der nach BCP 32 dafür vorgesehenen (wie bspw. example.net).

    Eine gute Einführung gibt auch Guiding users to translated pages (Entwurf; später vermutlich hier (https://www.w3.org/International/questions/qa-site-conneg) verfügbar, dann vielleicht sogar in deutscher Übersetzung ;-)).

    LLAP 🖖

    --
    „Wir haben deinen numidischen Schreiber aufgegriffen, o Syndicus.“
    „Hat auf dem Forum herumgelungert …“
    (Wachen in Asterix 36: Der Papyrus des Cäsar)
  4. Moin,

    Ich möchte für ein zweisprachiges Orchester einen Internetseite gestalten. Diese soll es in zwei Varianten geben: deutsch, ungarisch. Wie macht man das am effizientesten?

    Eine Seite? Und dafür (wie diskutiert) ein CMS mit Einarbeitungs- und Folgeproblemen ?

    Ich habe eine ganz einfache PHP-Lösung. Ich nehme eine ganz normale HTML-Seite in einer PHP Datei und schreibe die Sprachen nacheinander in dieser Form:

    <p>###deutsche Sprache###english language###Nederlandse taal###</p>

    Lediglich die Bereiche mit den Sprachen werden jeweils in ein php-Kommando eingebettet:

    <? zeig_lg( "<p>###deutsche Sprache###english language###Nederlandse taal###</p>" ); ?>
    

    Daraus wird ein Array, auf Platz 0 ist immer deutsch, Platz 1 english usw:

    function zeig_lg( $zeile )
    {
      global $lg_ndx;
      // 2011-02-17 PRO ZEILE EINMAL: SPRACHEN-AUSWAHL
      if ( strpos( 'x'.$zeile, '###' ))
      {
        $arr_lg = explode( '###', $zeile );
        $zeile  = $arr_lg[0].$arr_lg[$lg_ndx].$arr_lg[count($arr_lg)-1];
      }
      echo $zeile;
    }
    

    Bleibt nur noch, die Sprache festzulegen. Vorrang hat der Parameter lg beim Aufruf des PHP Programms, sonst wird die Browser-Sprache genommen:

    $bia_lg      =( $_REQUEST['lg'] ) ? $_REQUEST['lg'] : strtolower( $_SERVER['HTTP_ACCEPT_LANGUAGE'] );
    $arr_bia_lg  = explode( ',', $bia_lg ); // ru,en;q=0.9,es;q=0.8,de;q=0.7
    if ( $arr_bia_lg[0] ) $bia_lg = $arr_bia_lg[0];
    
    // Sprach-Index bestimmen
         if ( $bia_lg == 'de' )            { $lg_ndx = 1; }
    else if ( $bia_lg == 'en' )            { $lg_ndx = 2; }
    else if ( $bia_lg == 'nl' )            { $lg_ndx = 3; }
    // meine Seiten laufen unter drei Domains: example.de, example.eu und example.com
    // falls sowas reinkommt wie jp nimm de für example.de, sonst en
    else if ( strpos( $bia_domain, '.de' )){ $lg_ndx = 1; }
    else                                   { $lg_ndx = 2; }
    

    Und schon fertig. Hier zu sehen: http://remso.eu/_text/news.php?lg=nl

    Linuchs

    1. @@Linuchs

      Ich habe eine ganz einfache PHP-Lösung. Ich nehme eine ganz normale HTML-Seite in einer PHP Datei und schreibe die Sprachen nacheinander in dieser Form:

      <p>###deutsche Sprache###english language###Nederlandse taal###</p>

      Das hört sich keinesfalls besser an als JSON.

      Und was machst du mit <p><a href="deutsch">deutsche</a> <a href="Sprache">Sprache</a></p>?

      LLAP 🖖

      --
      „Wir haben deinen numidischen Schreiber aufgegriffen, o Syndicus.“
      „Hat auf dem Forum herumgelungert …“
      (Wachen in Asterix 36: Der Papyrus des Cäsar)
      1. Und was machst du mit <p><a href="deutsch">deutsche</a> <a href="Sprache">Sprache</a></p>?

        Frage nicht verstanden. Was ist daran mehrsprachig?

        Falls deine Feststellung ist, dass die Fuktion zeig_lg() nur einmal eine Sprache wählen kann: Ich nutze ich die Funktion auch mehrmals für einen Satz.

        Linuchs

        1. @@Linuchs

          Und was machst du mit <p><a href="deutsch">deutsche</a> <a href="Sprache">Sprache</a></p>?

          Falls deine Feststellung ist, dass die Fuktion zeig_lg() nur einmal eine Sprache wählen kann: Ich nutze ich die Funktion auch mehrmals für einen Satz.

          Und wie soll das gehen?

          Wie machst du aus obigem deutschen Text diesen polnischen:
          <p><a href="Sprache">język</a> <a href="deutsch">niemiecki</a></p>?

          LLAP 🖖

          --
          „Wir haben deinen numidischen Schreiber aufgegriffen, o Syndicus.“
          „Hat auf dem Forum herumgelungert …“
          (Wachen in Asterix 36: Der Papyrus des Cäsar)
          1. Wie machst du aus obigem deutschen Text diesen polnischen:
            <p><a href="Sprache">język</a> <a href="deutsch">niemecki</a></p>?

            Die Worte (oder Sätze), die in der jeweiligen Sprache anzuzeigen sind, werden hintereinander geschrieben. Voraussetzung,: Das Programm hat "de" als ersten, "en" als zweiten, "pl" als dritten Index vorher festgelegt:

            <? zeig_lg ( "<p><a href="Sprache">###Sprache###language###język###</a>" ); ?>
            <? zeig_lg ( " <a href="deutsch">###deutsch###german###niemecki###</a></p>" ); ?>
            

            Übrigens gebe ich die Zielsprache immer in ihrer eigenen Sprache an wie bei Wikipedia. Was sollte ein Pole mit dem Link nach einer Seite namens "niemecki" wenn er kein deutsch versteht?

            Das ist Windoof-Denken. Da möchtest du etwas löschen, dann kommt ganz ernsthaft die Frage "wollen Sie wirklich?" und bei "ja" lacht sich Windoof schlapp mit der Meldung "Ihre Rechte reichen nicht aus" oder sinngemäß.

            Linuchs

            1. Hallo Linuchs,

              Übrigens gebe ich die Zielsprache immer in ihrer eigenen Sprache an wie bei Wikipedia. Was sollte ein Pole mit dem Link nach einer Seite namens "niemecki" wenn er kein deutsch versteht?

              ???

              Ein Pole weiß dann, dass sich hinter „Ta witryna w języku niemieckim“ deutschsprachige Inhalte verbergen und er sie vielleicht nicht anzuklicken braucht, weil er sie nicht versteht.

              Anders sieht es für Sprachmenüs aus. Da sollte man tatsächlich die Zielsprache angeben.

              Bis demnächst
              Matthias

              --
              Das Geheimnis des Könnens liegt im Wollen. (Giuseppe Mazzini)
  5. Content/Language Negotiation.

    1. @@pl

      Content/Language Negotiation.

      Das ist sinnvoll.

      Dein Beitrag eher nicht. Oder welchen Sinn hat es, dem Theo einen Begriff an den Kopf zu knallen? Zumal der schon mindestens dreimal in diesem Thread gefallen ist.

      LLAP 🖖

      --
      „Wir haben deinen numidischen Schreiber aufgegriffen, o Syndicus.“
      „Hat auf dem Forum herumgelungert …“
      (Wachen in Asterix 36: Der Papyrus des Cäsar)
      1. Hast Du schonmal eine mehrsprachige Website programmiert? Wen ja, gibt Doch Deine Erfahrungen mit sowas hier weiter, es wäre eine Bereicherung.

        Mfg

        1. @@pl

          Hast Du schonmal eine mehrsprachige Website programmiert? Wen ja, gibt Doch Deine Erfahrungen mit sowas hier weiter, es wäre eine Bereicherung.

          Siehe Archiv.

          LLAP 🖖

          --
          „Wir haben deinen numidischen Schreiber aufgegriffen, o Syndicus.“
          „Hat auf dem Forum herumgelungert …“
          (Wachen in Asterix 36: Der Papyrus des Cäsar)