Quaks: Multilingualer Webauftritt

Hi,

ein Kunde möchte seinem Webauftritt (bisher deutsch und english auf getrennten Seiten) zehn, zwölf weitere Sprachen hinzufügen.

Bisher wurde mit Templates gearbeitet. Eine deutsche, eine englishe Datei mit Platzhaltern. Das Konzept kann man für 12 Sprachen nicht durchziehen, die kleinste Änderung betrifft dann ja immer 12 Dateien.

Jetzt brauche ich mal Ideen, wie man an das Thema rangeht. Mit diesen beiden Ideen bin ich nicht zufrieden:

1. Alle Sprachen bekommen eine einzige Template-Datei, darin Kapitel für jede Sprache. Die Kapitel ähneln sich sehr (Platzhalter und Textformatierungen sind gleich), viel Redundanz. Auch die PHP-Laufzeit für das Auswählen und Überlesen von Kapiteln erhöht sich etwas.

2. Die Zeilen der einzigen Template-Datei bekommen Sprachkennungen. Zeilen ohne Sprachkennung werden immer genommen, etwa so:

<h3 class='zentriert rot'>
^de Überschrift für
^en Title for
^es Título para
{produktname}</h3>

Mit 2. habe ich experimentiert, für jedes Wort oder jede Wortgruppe wird pro Sprache eine Zeile benötigt, was den Quelltext unübersichtlich - und damit fehleranfällig macht.

Mehrere Sprachen in einer Zeile, etwa so:
<h3 class='zentriert rot'>^de Überschrift für ^en Title for ^es Título para {produktname}</h3>
ist auch nicht übersichtlicher und benötgt PHP-Zeit, weil das Zeichen ^ überall stehen kann.

Wer hat Erfahrung?

MfG Quaks

  1. Hallo,

    ein Kunde möchte seinem Webauftritt (bisher deutsch und english auf getrennten Seiten) zehn, zwölf weitere Sprachen hinzufügen.

    Jetzt brauche ich mal Ideen, wie man an das Thema rangeht. Mit diesen beiden Ideen bin ich nicht zufrieden:

    siehe https://forum.selfhtml.org/?t=200830&m=1353888 ff.

    Freundliche Grüße

    Vinzenz

    1. Hallo,

      siehe https://forum.selfhtml.org/?t=200830&m=1353888 ff.

      Ein System, das Mehrsprachigkeit erklärt - nur in english. Naja ...

      Das ist wie ein schwarzweisser Bericht über Farben.

      Gruß, Quaks schwarzweiss

  2. Moin!

    1. Wo kommen denn die Inhalte her?
    2. Wie groß ist die Seite?

    Ich habe bei einem Projekt in den Templates mal einen "Translate-Tag" eingebaut:

    <title><translate>Eine tolle Seite!</translate></title>

    Das wird beim Auslesen untersucht:

    function translate_tpl($str, $lang=false, $arTemplate) {
    require_once 'includes/translate.inc.php';
    $suchmuster = '/<translate>(.*)</translate>/e';
    return preg_replace($suchmuster, "getTranslation('\1')", $str);
    }

    Die Funktion getTranslation('\1') sucht einen String aus einem Hash, zwischengespeichertem Hash oder einer Datenbank heraus.

    Also etwa so:

      
    $GLOBALS['uebersetzungen']['Eine tolle Seite!']['en']='A fine site!';  
    $GLOBALS['uebersetzungen']['Habe einen netten Tag!']['en']='Have a nice day!';
    

    ...

    function getTranslation($str) {  
        if ( TRUE  
           and isset $_SESSION['lang']  
           and ($_SESSION['lang'] != 'de')  
           and isset ($GLOBALS['uebersetzungen'][$str][$_SESSION['lang']])  
           and ('' != $GLOBALS['uebersetzungen'][$str][$_SESSION['lang']])  
        ) {  
           return ($GLOBALS['uebersetzungen'][$str][$_SESSION['lang']]);  
        } else {  
           return $str;  
        }  
    }
    

    Das passt z.B. ganz gut beim "Interior" eines Shops, weil der Anteil der seitenspezifischen Textmengen recht gering ist, die Produktbeschreibungen e.t.c. liegen dann aber schon in der Datenbank übersetzt vor, so dass diese nicht nochmals übersetzt werden müssen.

    Dazu brauchst Du noch eine Routine, welche unübersetzte Texte in das Array oder die Datenbank einträgt und für die Übersetzer ein kleines, zugangsgeschütztes "Backoffice" sowie womöglich eine gute Idee wie Du das alles mit einem Cache unterstützt. Den kann es ja auch für Templates geben.

    Enthält Deine Webseite eher Romane, dann geht das natürlich nicht...

    MFFG (Mit freundlich- friedfertigem Grinsen)

    fastix

    1. Moin!

      1. Wo kommen denn die Inhalte her?

      Die HTML-"Formulare" mache ich im Moment. Für eine handvoll Sprachen habe ich Grundkenntnisse und hole mir Vorschläge über Google translate. Die anderen Sprachen muss später jemand anders machen.

      1. Wie groß ist die Seite?

      von 2 kB bis 27 kB, für jedes Programm eine HTML-Seite.

      Ich habe bei einem Projekt in den Templates mal einen "Translate-Tag" eingebaut:

      <title><translate>Eine tolle Seite!</translate></title>

      Also etwa so:

      $GLOBALS['uebersetzungen']['Eine tolle Seite!']['en']='A fine site!';
      $GLOBALS['uebersetzungen']['Habe einen netten Tag!']['en']='Have a nice day!';

        
      Habe einen Arbeitstag hinter mir, und bin nicht ganz sicher, ob ich dein Beispiel verstanden habe. Ist es richtig, dass du jeden deutschen Text als $GLOBALS-Index wiederholen musst?  
        
      also so: `<translate>Eine tolle Seite!</translate>`{:.language-html}  
        
      und so: `$GLOBALS['uebersetzungen']['Eine tolle Seite!']['en']='A fine site!';`{:.language-php}  
        
      Nein, kann nicht sein. Der Index ['Eine tolle Seite!'] muss von PHP erzeugt werden. Aber das habe ich nicht ganz kapiert.  
        
      Morgen, wenn ich ausgeschlafen bin ...
      
      1. Moin!

        Ist es richtig, dass du jeden deutschen Text als $GLOBALS-Index wiederholen musst?

        Musst Du nicht. Du kannst auch Snippets mit einer numerischen ID verwenden. Du muss auch keine globale Variable verwenden. Dann brauchst Du aber folgendes:

        $arSnippets[1]['de']='Eine tolle Seite!';  
        $arSnippets[1]['en']='A fine site!';  
          
        $arSnippets[2]['de']='Habe einen tollen Tag!';  
        $arSnippets[2]['en']='Have a nice day!';
        

        Im Arbeitsspeicher sparst Du praktisch nichts, hast dafür aber sehr viel "Spaß"(¹) wenn Du Die Webseite erstellst. Natürlich kann da auch aus der Datenbank kommen. Ich gebe Dir einen Tipp: Unbedingt für jeden Snippet die Datenbank einmal abfragen... Das spart die Mühe für eine DDoS-Attacke zu werben.

        für jedes Programm eine HTML-Seite.

        Das ist eine Null-Information. Falls es eine Art Shop ist, dann sollten die Inhalte aus einer Datensammlung kommen und die Daten für die Programme, auch die Übersetzungen sollten aus der Datensammlung kommen. Meine Vorschläge bezogen sich auf das Interior wie zum Beispiel den Klassiker:

        [Home] [Impressum] [Kontakt] [AGB] [Warenkorb] [Suche]

        und die anderen festen Bestandteile jeder Webseite. Das meine Lösung funktioniert kann man hier sehen.

        ¹) meint hier: Aufwand, Ärger, Stress

        MFFG (Mit freundlich- friedfertigem Grinsen)

        fastix

  3. Grüße,
    kritische frage - wie sieht die textstruktur aus?
    sind es viele statische artikel die hin und wieder mal geändert werden? oder ist das ganze ständig am ändern?
    wie komplex ist struktur?
    wie liegen daten vor?

    spontan ohne viel rumzudenken - erstell ein template wobei jedes eigenständiges textstück (alles was eigenes element drum hat) eine art id - stell die aus funktion numme rund sprache zusammen, die werte packst du in xml und gut ist - achte bloß auf fallback sodass im fall des fehlenden textes einfach nur english (oder was auch immer) doch noch präsentiert wird

    du kannst noch mehr mühe sparen wenn du auf komplexe textformatierungen verzichtest bzw diese "intern" parst (BBC codes oÄ)
    MFG
    bleicher

    --
    __________________________-

    FirefoxMyth
    1. Icxh grüße bleicher,

      kritische frage - wie sieht die textstruktur aus?

      sind es viele statische artikel die hin und wieder mal geändert werden? oder ist das ganze ständig am ändern?

      Verständnisproblem ... Die Artikel, die aus der Datenbank kommen, werden täglich geändert. Und es sind je nach Abfrage vollkommen unterschiedliche.

      Aber die HTML-Seiten, in die die Artikel eingefügt werden, und die für den sprachlichen Rahmen zuständig sind, sind nach Test sehr stabil.

      wie komplex ist struktur?

      Artikel und Dienstleistungen werden mit Firma, Ort und Art gespeichert. Nehmen wir mal das Thema Touristik.

      • Firma: Für ein Unternehmen können alle Dienstleistungen angezeigt werden.
        Beispiel: TUI fliegt von Hamburg, Frankfurt und München. Aber die fliegen nur. Haben keine Schiffe, keine Busse.

      • Ort: Ab Frankfurt fliegen TUI, Lufthansa und Emirates. Ab Bremen fährt Wolters mit Bussen. Ab Cuxhaven XXX mit Schiffen nach Helgoland.

      • Art: Flüge bieten TUI und Lufthansa, Busreisen Greiner und Wolters, Schiffsreisen XXX.

      Dann gibt's natürlich Kombinationen. Bekannt von jeder Bücherseite: Kunden, die X gekauft haben, haben auch Y und Z gekauft.

      Oder, um auf Interessenten einzugehen, die Umkreissuche. Ich wohne in Bederkesa und bin bereit, 50 km zu fahren. Da bietet sich Hamburg an mit einem TUI- Flug übermorgen nach Timbuktu, aber auch Cuxhaven morgen mit einer Schifffahrt nach Helgoland (nur ein Gedankenspiel, keine Ahnung, ob das mit 50 km hinkommt)

      wie liegen daten vor?

      Produkte und Dienstleistungen (Vermittlung, die Geld bringt) in einer MySQL-Datenbank.

      Die fremdsprachigen Texte (Formulare) z.Z. in de und en als separate HTML-Dateien mit Platzhaltern. de-Besucher werden in deutsch bedient, alle anderen in en.

      $_SERVER['HTTP_ACCEPT_LANGUAGE'] wird ausgewertet, wird aber mit dem Parameter, z.B. lg=de überschrieben. Wer als Franzose bewusst "de" angeklickt hat, bekommt auch beim Weiterblättern "de" und nicht "en". Und wenn die Seiten "fr" fertig sind, bekommt er natürlich "fr". Und der Russe "ru". Das Programm prüft, ob "ru" verfügbar ist. Wenn nicht, dann "en".

      Also kann jede beliebige der zweihundertsoundsoviel 2-stelligen Sprachen nachgeschoben werden, ohne das Programm zu ändern. Ein Gag von mir sind sogar die 3-stelligen Sprachen, also nds föör plattdüütsch un pfl for pälzisch.

      achte bloß auf fallback sodass im fall des fehlenden textes einfach nur english (oder was auch immer) doch noch präsentiert wird.

      Klar. Irgendwas wird ausgeliefert.

      Quaks.

  4. Hallo und danke,

    eure Antworten haben schon ein weiteres Problem aufgezeigt:

    Übersetzer sollten nicht (per Editor) zwischen HTML-Tags arbeiten müssen. Da ich bisher Alleinübersetzer war, habe ich daran gar nicht gedacht.

    Also ist die Frage aufzuwerfen, ob mein Kunde - ohne mein Zutun - eine weitere Sprache erfassen kann. Nehmen wir mal arabisch oder japanisch, da habe ich keine Ahnung.

    Brauche ich dann für jedes PHP-Programm - es gibt über 200 - eine eigene Sprachendatei? Na gut, nicht ganz 200, weil etliche Programme ja nur für die "Administratoren" (= Mitarbeiter) und nicht für die Öffentlichkeit zugänglich sind. Aber auch die brauchen zumindest deutsch und english.

    Ich spreche hier nur über die "Formulare", die per PHP mit Daten aus der Datenbank gefüllt werden.

    Irgendwie scheue ich mich, die "Formulare" in der Datenbank abzulegen, weil die Formulare zu meinen Software-Produkten gehören (da bin ich verantwortlich), während die Datenbank die Daten des Kunden enthält. Ich weiss, andere (SAP ?) mischen das. Aber ich hätte gerne eine klare Linie.

    Oder bin ich da zu verbohrt?

    Quaks

    1. Hallo

      Oder bin ich da zu verbohrt?

      Also wenn du für dich diese Frage stellst dann geht die Frage zurück. Wer will dass die Übersetzer nicht im HTML schaffen müssen? Ist das eine Vorstellung von dir oder von deinem Kunden? Wenn es deine Vorstellung ist, dann machst du alles unnötig kompliziert und teuer, ist es die Vorstellung des Kunden, dann muss er wissen, dass es seinen Preis hat.

      Übersetzer sollten nicht (per Editor) zwischen HTML-Tags arbeiten müssen. Da ich bisher Alleinübersetzer war, habe ich daran gar nicht gedacht.

      Ich bin der Auffassung das derjenige, der sich im Web bewegt sich auch mit HTML auszukennen hat. Wenn man einen Link im Text eingefügt hat und jemand das übersetzt dann muss der Übersetzer wissen:

      a) was ist der Anker eines Links und was gehört da hinein im Fall einer Übersetzung
      b) Liegt von dem verlinkten Text auch eine Version vor in übersetzter Sprache (auf einer anderen Seite) und ist hier ggf. auch der Link zu ändern?
      c) Was ist ein Titeltag eines Links und was gehört da rein?

      Und wenn der Übersetzer das weiß, dann kann er auch die Dinge dort direkt eintragen.

      Natürlich kann man einem Übersetzer dann was bauen, mit allem Komfort und zurück. Aber das muss der Kunde dann wollen und bezahlen.

      Herzliche Grüße
      Wolfgang

      1. @@Wolfgang:

        nuqneH

        Ich bin der Auffassung das derjenige, der sich im Web bewegt sich auch mit HTML auszukennen hat.

        Ziemlich alt, deine Auffassung. Wir leben in der Zeit des Web 2.0, wo jeder Inhalte im Web publizieren kann – ohne besondere Kenntnisse der dahinterliegenden Technik.

        Das Spezialgebiet von Übersetzern sind natürlche Sprachen, nicht Computersprachen.

        Wenn man einen Link im Text eingefügt hat und jemand das übersetzt dann muss der Übersetzer wissen:
        a) was ist der Anker eines Links und was gehört da hinein im Fall einer Übersetzung

        Der Übersetzer sollte im UI dargestellt bekommen, welche Textpassagen welche Funktion haben.

        b) Liegt von dem verlinkten Text auch eine Version vor in übersetzter Sprache (auf einer anderen Seite) und ist hier ggf. auch der Link zu ändern?

        Das liegt im Aufgabenbereich des Verantwortlichen für die Lokalisierung, der über die Übersetzung hinausgeht.

        Qapla'

        --
        Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
        (Mark Twain)