Robert: Mehrsprachigkeit in einem einzelnen Dokument

Hallo zusammen!
Ich steh vor einem konkreten Problem für das ich dringend Hilfe suche: auf meinen Seite möchte ich neben deutsch noch die Sprachen
Spanisch und Englisch anbieten.
Diese werden über einen Klick auf die entsprechende Flagge ausgewählt, dann Weiterleitung zu einem Frameset. Hier das Problem: ab diesem Zeitpunkt müsste ich immer zwei gleichaufgebaute html-Seiten erstellen: einmal für spanisch, einmal für englisch. Gibt es eine Möglichkeit das Problem anders zu lösen? Jeweils ein html-dokument das beide Sprachen beinhaltet, aber immer nur die Sprache anzeigt, die ja über die Flagge ausgewählt wurde?
Ich hab unter dem Themenbereich "sonstiges" gepostet, weil ich keine Ahnung hab, ob das mit JavaS oder ähnlichem funktioniert. Über einen einigermaßen ausführlichen Quelltext wäre ich sehr dankbar, da ich mich noch nicht sooo gut auskenne. Danke bereits im Voraus. Robert

  1. Hallo Robert,

    ab diesem Zeitpunkt müsste ich immer zwei gleichaufgebaute html-Seiten erstellen: einmal für spanisch, einmal für englisch. Gibt es eine Möglichkeit das Problem anders zu lösen? Jeweils ein html-dokument das beide Sprachen beinhaltet, aber immer nur die Sprache anzeigt, die ja über die Flagge ausgewählt wurde?

    Sicher waere es moeglich, mit DHTML irgendwas zu basteln. Aber was spricht gegen die mehreren Dateien? Bitte ja keine Angst haben vor "vielen Dateien" beim Web-Publishing! Viele einfache Dateien sind besser verdaulich als wenige komplizierte, ausserdem regen sie den Kreislauf des Betriebssystems an ;-)
    Nee, im Ernst, die Texte muessen ja eh uebersetzt werden. Also kopiert man eine deutsche Datei einfach auf eine andere und uebersetzt diese dann.
    Ich wuerde dabei allerdings mit Unterverzeichnissen arbeiten. Das erlaubt es, dass alle Dateien in allen Sprachen immer die gleichen Dateinamen haben und sich nur dadurch unterscheiden, dass sie z.B. in Verzeichnissen namens de, en und es liegen.

    viele Gruesse
      Stefan Muenz

    1. Hallo Herr Münz, vielen Dank für die schnelle Antwort!

      Ich wuerde dabei allerdings mit Unterverzeichnissen arbeiten. Das erlaubt es, dass alle Dateien in allen Sprachen immer die gleichen Dateinamen haben und sich nur dadurch unterscheiden, dass sie z.B. in Verzeichnissen namens de, en und es liegen.

      Momentan arbeite ich ja eh noch mit Unterverzeichnissen, aber der ganze Dateien-Wust ist meiner Meinung nach komplizierter, als eine geringere Anzahl von Dateien, die wiederum dafür komplexer sind.
      Auf meiner deutschsprachigen Seite arbeite ich mit Grafiken (onmouseover,onmouseout), und über die beiden Flaggen (es, en) gelangt man jeweils zu einem eigenen Frameset. Ich möchte es bereits da schaffen, mit nur einem Frameset auszukommen. Denn wenn ich später mal Änderungen am Layout vornehme, muss ich jeweils zwei Dateien ausbessern. Zwar arbeite ich bereits mit CSS, aber das löst ja das Problem auch nicht bis ins letzte. Bitte Sie deshalb, mir vielleicht ein paar Denkanstöße zu geben, oder einen Link auf eine andere Seite, die das Problem ähnlich löst. Dankeschön im Voraus.
      Viele Grüße, Robert

      1. hi

        Auf meiner deutschsprachigen Seite arbeite ich mit Grafiken (onmouseover,onmouseout), und über die beiden Flaggen (es, en) gelangt man jeweils zu einem eigenen Frameset. Ich möchte es bereits da schaffen, mit nur einem Frameset auszukommen. Denn wenn ich später mal Änderungen am Layout vornehme, muss ich jeweils zwei Dateien ausbessern. Zwar arbeite ich bereits mit CSS, aber das löst ja das Problem auch nicht bis ins letzte. Bitte Sie deshalb, mir vielleicht ein paar Denkanstöße zu geben, oder einen Link auf eine andere Seite, die das Problem ähnlich löst. Dankeschön im Voraus.

        mit _konsequentem_ Einsatz von CSS ist das ohne Probleme - und vor allem eben zuverlässiger als die JS-Version - lösbar.

        1. Hallo!

          mit _konsequentem_ Einsatz von CSS ist das ohne Probleme - und vor allem eben zuverlässiger als die JS-Version - lösbar.

          Die Startseite (mit onmouseover,etc.) möchte ich auf jeden Fall so lassen, weil sie ohne Probleme läuft. Möchte nur folgendes schaffen: beim Klick auf eine der beiden Flaggen soll sich EIN Frameset öffnen, welches in Abhängigkeit von der zuvor angeklickten Flagge die Inhalte auf spanisch, bzw. englisch ausgibt. Wie könnte es funktionieren? Vielen Dank. MfG, Robert

          1. Moin,

            Die Startseite (mit onmouseover,etc.) möchte ich auf jeden Fall so lassen, weil sie ohne Probleme läuft. Möchte nur folgendes schaffen: beim Klick auf eine der beiden Flaggen soll sich EIN Frameset öffnen, welches in Abhängigkeit von der zuvor angeklickten Flagge die Inhalte auf spanisch, bzw. englisch ausgibt. Wie könnte es funktionieren?

            <a href="es_index.htm" target="_blank"><img src="es.gif" border="0"></a>

            Und die index.htm knnte dann zB so aussehen:

            <frameset rows="20%,*">
             <frame src="ordner_fuer_spanische_dateien/span_datei_1.htm name="eine_spanische_datei">
             <frame src="ordner_fuer_spanische_dateien/span_datei_2.htm" name="eine_andere_spanische_datei">
            </frameset>

            Und das alles ohne JS und CSS-Gedöns, geht also IMHO in jedem framefähigen Browser, Nachteil, doch jede Datei für jede Sprache anlegen...

          2. Hallo!

            Die Startseite (mit onmouseover,etc.) möchte ich auf jeden Fall so lassen, weil sie ohne Probleme läuft. Möchte nur folgendes schaffen: beim Klick auf eine der beiden Flaggen soll sich EIN Frameset öffnen, welches in Abhängigkeit von der zuvor angeklickten Flagge die Inhalte auf spanisch, bzw. englisch ausgibt. Wie könnte es funktionieren? Vielen Dank. MfG, Robert

            Hallo!

            Ich hab das mal mit PHP gelöst. In einer extra-Datei waren alle Texte in Arrays
            z.b. text['de']='Hallo'
                 text['en']='Hi'
                 text['sp']='Hola'
                 text2['de']='...'
            .........................
            gespeichert. In der eigentlichen Datei greifst du auf dieses Array zu...  text[$lang]
            $lang ist dabei die Sprachvariable, die Du von Deiner Startseite aus übergibst.
            So brauchst Du nur eine zusätzliche Sprachdatei, in der alle Texte stehen und keine "doppelten" Dateien für jede Sprache.
            Weitere Sprachen kannst Du problemlos hinzufügen, indem Du das Array um die Sprache erweiterst.

            Gruss Kerstin

            1. Moin!
              Das interessiert mich jetzt, ich habe mal sowas ähnliches gemacht, aber mti MySQL, für jeden blöden Text einen eigenen Datensatz. Das dann immer am Anfang ausgelesen und eingefügt. Nur ich hatte das Gefühl, das war seh langsam. Ist Deine Version wohl performanter? Oder sollte man das ruhig mit MySQL machen, wenn man die Verbindung eh aufbaut?

              Grüße
                Andreas

              1. Hi Andreas,

                ich habe mal sowas ähnliches gemacht, aber mti MySQL, für
                jeden blöden Text einen eigenen Datensatz.
                Das dann immer am Anfang ausgelesen und eingefügt.
                Nur ich hatte das Gefühl, das war seh langsam.
                Ist Deine Version wohl performanter? Oder sollte man das
                ruhig mit MySQL machen, wenn man die Verbindung eh aufbaut?

                das kommt darauf an, wie Du einfügst.

                Ich würde nicht versuchen, den Text direkt in mySQL zusammenzubauen.
                Aber eine sprachspezifische Übersetzungstabelle zwischen Platzhalternamen und deren einzusetzenden Werten aus der Datenbank zu lesen, als hash über die Platzhalter zu adressieren und z. B. in Perl die Gesamt-Schablone (sinnvollerweise über Dateizugriff gelesen) mit den entsprechenden Werten zu füllen, das dürfte schnell genug sein.

                Der Verbindungsaufbau zu mySQL kostet sicherlich spürbar. Aber beliebig viele einzelne SQL-Statements alle separat "preparen" und ausführen lassen, das summiert sich mit der Zeit halt auch.

                Im Zweifelsfalle laß Dir die gesamten generierten SQL-Statements im Debug-Mode Deines Skripts irgendwohin ausgeben (ggf. halt in den Browser) und schieße sie dann als Textdatei via "source <dateiname>" über die Kommandozeile in mySQL hinein - dann bekommst Du eine sehr schön lesbare Zeitmessung für jedes einzelne Statement. Und dann siehst Du, was wieviel kostet.

                Viele Grüße
                      Michael

    2. Hallo Stefan,

      Ich wuerde dabei allerdings mit Unterverzeichnissen
      arbeiten. Das erlaubt es, dass alle Dateien in allen
      Sprachen immer die gleichen Dateinamen haben und sich
      nur dadurch unterscheiden, dass sie z.B. in
      Verzeichnissen namens de, en und es liegen.

      damit unterläufst Du allerdings die Möglichkeiten von HTTP Content Negotiation, welches davon lebt, daß die Dateien in allen verfügbaren Sprachen im selben Verzeichnis liegen und sich nur durch eine zusätzliche Extension unterscheiden.

      (http://aktuell.de.selfhtml.org/artikel/server/alt-http/)

      Viele Grüße
            Michael

      1. Moin!

        damit unterläufst Du allerdings die Möglichkeiten von HTTP Content Negotiation, welches davon lebt, daß die Dateien in allen verfügbaren Sprachen im selben Verzeichnis liegen und sich nur durch eine zusätzliche Extension unterscheiden.

        Dieses Verfahren will man aber eigentlich nur auf der Startseite nutzen, also z.B. ein Frameset je Sprache, mit Verknüpfung zur Unterseiten im Unterverzeichnis der jeweiligen Seite. Und dann ein Link zu den anderen Sprachversionen in den anderen Verzeichnissen.

        Anders kriegst du es IMO nicht hin, Sprachen auch userselektierbar zu machen. Es ist ja ok, wenn ein spanischer Browser zuerst die spanische Seite öffnet. Wenn aber ein Engländer in einem spanischen Internetcafé sitzt und surft, will er mit Sicherheit englische Seiten sehen. :)

        - Sven Rautenberg

        1. Hi Sven,

          Wenn aber ein Engländer in einem spanischen Internetcafé sitzt und
          surft, will er mit Sicherheit englische Seiten sehen. :)

          wenn das Internet-Cafe die Konfiguration des Browsers so zugenagelt hat, daß der Engländer dort nicht mal mehr seine Sprache einstellen kann, dann bleibt die Frage, inwiefern der Browser noch korrekt benutzbar ist.

          Anders kriegst du es IMO nicht hin, Sprachen auch userselektierbar
          zu machen. Es ist ja ok, wenn ein spanischer Browser zuerst die
          spanische Seite öffnet.

          Wieso? Ich kann doch sehr wohl in jede Seite Links auf alle verfügbaren Sprachen hinein generieren (mit SSI, unter Verwendung des vollen URL mit Sprache, ohne Negotiation). Ich weiß nur nicht, ob ich das wollen würde.

          Viele Grüße
                Michael

          1. Moin!

            wenn das Internet-Cafe die Konfiguration des Browsers so zugenagelt hat, daß der Engländer dort nicht mal mehr seine Sprache einstellen kann, dann bleibt die Frage, inwiefern der Browser noch korrekt benutzbar ist.

            Finde ich nicht. Das Einstellen der bevorzugten Sprache bedeutet nicht, daß das die _einzige_ Sprache ist, die der User benutzen möchte.

            Ich halte es im Sinne einer möglichst benutzerfreundlichen Seite zwar für fast zwingend, die Startseite in der laut Browser gewünschten Sprache zu liefern (Google macht das schon ewig so), aber sollte der Besucher eine andere Sprache wählen, dann hat diese Wahl solange Bestand zu haben, bis eine neue Auswahl erfolgt. Wie die Website das realisiert, ist erstmal irrelevant.

            Abgesehen davon ist dieses Feature beim normalen User noch dermaßen unbekannt, daß du erstmal jahrelange Aufklärungsarbeit leisten müßtest, um es überhaupt präsent zu machen. Und dann wäre es von Seiten der Browserhersteller vermutlich auch notwendig, diese Einstellung nicht ganz so sehr zu verstecken, sondern z.B. in die Iconleiste zu packen.

            Und dann braucht es natürlich auch noch eine Reihe von besuchten Webseiten, die dieses Feature auch ausnutzen. :)

            Wieso? Ich kann doch sehr wohl in jede Seite Links auf alle verfügbaren Sprachen hinein generieren (mit SSI, unter Verwendung des vollen URL mit Sprache, ohne Negotiation). Ich weiß nur nicht, ob ich das wollen würde.

            Wenn du nach jedem Linkklicken die Sprachauswahl wiederholen mußt, wirst du die Seite genervt verlassen. ;)

            PS: Content Negotiation muß nicht dem Webserver überlassen bleiben, das kann auch eine aktive Skriptkomponente machen. Und vermutlich besser und userabgestimmter, als es der doch relativ dumme Webserver je könnte.

            - Sven Rautenberg

            1. Bongú!

              Ich halte es im Sinne einer möglichst benutzerfreundlichen Seite zwar für fast zwingend, die Startseite in der laut Browser gewünschten Sprache zu liefern (Google macht das schon ewig so),

              Einspruch! Bei mir reagiert Google in keinster Weise auf die Browsereinstellungen. Selbst mit einem englischsprachigen Opera, der nur English; [en] präferieren sollte, erhalte ich von http://www.google.com nur einen 302 als Antwort und werde auf http://www.google.de verwiesen.

              Mache ich etwas falsch?

              Gruss,

              kerki

              1. Moin!
                Das hatten wir schonmal hier diskutiert, Google macht das tatsächlich anders, soweit ich mich erinnere wußte keiner 100%ig wie die das genau machten, aber anscheinend irgendwie mit den IPs!
                Grüße
                  Andreas

  2. Diese werden über einen Klick auf die entsprechende Flagge ausgewählt, dann Weiterleitung zu einem Frameset. Hier das Problem: ab diesem Zeitpunkt müsste ich immer zwei gleichaufgebaute html-Seiten erstellen: einmal für spanisch, einmal für englisch. Gibt es eine Möglichkeit das Problem anders zu lösen? Jeweils ein html-dokument das beide Sprachen beinhaltet, aber immer nur die Sprache anzeigt, die ja über die Flagge ausgewählt wurde?

    Ich realisiere sowas gerade fuer einen Kunden( alles serverseitig und _ohne_ Javascript)

    Mein Loesungsweg:
    1.) Sitestruktur in einer externen Datei
    2.) notwendige Sprachen in einer externen Datei
    3.) alle Texte extern abgelegt
    4.) alle Seiten mit PHP erstellen, Sprache als Parameter uebergeben

    <a href=seite.phtml?lg=de>1.Seite deutsch aufrufen</a>
    ab dann fuer alle Folgeseiten: lg=$lg

    Meine Dateien sehen so aus:
    de_datei.csv, en_datei.csv usw.

    Die Pflege erfolgt ueber ein Webfrontend mittels Formularfelder.
    Zu Beginn wird die gewuenschte Sprache ausgewaehtlt, anschliessend liest er die Menuestruktur und bietet die Seiten zur Aenderung an. Sollte eine Datei noch nicht vorhanden sein (neue Unterseite), wird diese per Programm erstellt.

    Wenn alles korrekt laeuft, ist es ein Kinderspiel, eine neue Sprache anzulegen. Einfach nur in die Sprachdatei einen neuen Eintrag hinzufuegen.

    Gruesse
    Wilhelm