multilinguale Webseiten?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • multilinguale Webseiten?

    Hallo zusammen,

    kennt jemand von euch eine performante Methode um eine Seite mehrsprachig zu machen? (3-5 Sprachen)

    gruss
    berni

    php-Entwicklung | ebiz-consult.de
    PHP-Webhosting für PHP Entwickler | ebiz-webhosting.de
    die PHP Marktplatz-Software | ebiz-trader.de

  • #2
    Is das nich eher ne JS frage? Startseite mit
    Wenn client spache=... location.href = "inde.php?language=..."; . Gucks dir einfach von google ab...
    Andere Idee: Falls du kein Bock hast die sachen selbst zu übersetzen: http://www.systran.de da gibbet site-auto-translation. Da kannste nen link drauf setzten.. google hat sowas auch, jedoch können die beide nur spärlich übersetzten

    Kommentar


    • #3
      ich bin eher an einer Profilösung interessiert.
      - wo speichere ich die Sprachen-Daten?
      - bietet der Webserver funktionen?
      ...

      so was in der Art

      cu
      berni

      php-Entwicklung | ebiz-consult.de
      PHP-Webhosting für PHP Entwickler | ebiz-webhosting.de
      die PHP Marktplatz-Software | ebiz-trader.de

      Kommentar


      • #4
        hmm ... mit Templates und DB wie ich dich kenne ...

        Tabelle TEXTE
        ID bigint (20) unsigned
        IDENT varchar(30)
        INH_DE text
        INH_EN text
        INH_FR text

        Paramter $language in Session speichern oder durchschieben
        im Template steht: %%str_identifier%%

        Code:
        $array = explode ('%%str_', $templatetext);
        echo $array[0];
        for ($i=1; $i<count($array); $i++))
        {
          list ($ident, $tail) = explode('%%', $array[$i]);
          $q = mysql_query ("select INH_$language from TEXTE where IDENT='$ident'");
          if ($q && $r = mysql_fetch_row($q))
            echo $r[0];
          else
            echo $ident;
          echo $tail;
        }
        Wenn du mit den Sprachen flexibler sein willst:
        Tabelle TEXTE:
        IDENT_ID bigint (20) unsigned
        SPRACHE varchar(3)
        INHALT text
        primary key (IDENT_ID, SPRACHE)

        Tabelle IDENTS:
        ID bigint (20) unsigned auto_increment
        IDENT varchar (30)

        Für die Identifier bei Sprache 0 oder irgendwas eindeutiges eingeben und die Query oben entsprechend anpassen:
        $q = mysql_query ("select T.INHALT from TEXTE T, IDENTS I where I.IDENT='$ident' and I.ID=T.IDENT_ID and T.SPRACHE='$language'");

        -------------------
        Beim echo $ident würd ich noch ne Fehlermeldung mailen lassen, dass der Identifier in der Sprache fehlt ... hilft Tippfehlern auch nachträglich auf die Spur zu kommen.
        mein Sport: mein Frühstück: meine Arbeit:

        Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

        Kommentar


        • #5
          Original geschrieben von Titus
          hmm ... mit Templates und DB wie ich dich kenne ...

          Tabelle TEXTE
          ID bigint (20) unsigned
          IDENT varchar(30)
          INH_DE text
          INH_EN text
          INH_FR text

          Paramter $language in Session speichern oder durchschieben
          im Template steht: %%str_identifier%%

          Code:
          $array = explode ('%%str_', $templatetext);
          echo $array[0];
          for ($i=1; $i<count($array); $i++))
          {
            list ($ident, $tail) = explode('%%', $array[$i]);
            $q = mysql_query ("select INH_$language from TEXTE where IDENT='$ident'");
            if ($q && $r = mysql_fetch_row($q))
              echo $r[0];
            else
              echo $ident;
            echo $tail;
          }
          ...

          -------------------
          Beim echo $ident würd ich noch ne Fehlermeldung mailen lassen, dass der Identifier in der Sprache fehlt ... hilft Tippfehlern auch nachträglich auf die Spur zu kommen.
          Hi,

          also ich bin noch neu in PHP und wollte das oben genannte mal durchspielen habe die DB-Tabelle erstellt und den Code in die Seite getan, aber es funktioniert nicht, Platzhalter bleiben leer und nix tut sich.

          Kann mir jemand helfen? Vielleicht hat jemand eine mini-PHP-Seite mit diesem Code lauffähig!?!? Ich wäre sehr dankbar dafür!

          Hoffe habe das Beispiel auch richtig verstehen, mein Anliegen ist:

          Eine mehrsprachige Website, datenbankbasiert, welcher bei Aufruf der Seite die Platzhalter %%Testplatzhalter%% komplett gegen die Sprache in der Session-Variable austauscht.

          Richtig? Das macht doch der Code oben oder?

          gruß
          yavuz
          blog | www.bogazci.com
          mm | www.micromanager.de

          Kommentar


          • #6
            Was ist denn dein code? was steht in der DB? Wie sehen die Dateien aus?

            error_reporting angeschaltet?

            Testausgaben und debugging gemacht?

            Kommentar


            • #7
              Original geschrieben von yonthebeach
              ... aber es funktioniert nicht, Platzhalter bleiben leer und nix tut sich.

              ... die Platzhalter %%Testplatzhalter%% komplett gegen die Sprache in der Session-Variable austauscht.

              Richtig? Das macht doch der Code oben oder?
              nein, das macht obiger Code nicht!

              Dieser Code ist nur eine Möglichkeit wie man mit einem Template-System multilinguale Textersetzungen realisieren kann.

              die "%%irgendwas%%" werden vom Template-System oder irgendeinem anderen Parser ersetzt.
              [COLOR=royalblue]Ein großes DANKE an alle, die sich auf selbstlose Weise im Forum einbringen.[/COLOR]

              [COLOR=silver]btw: REAL PROGRAMMERs aren't afraid to use GOTOs![/COLOR]

              [color=indigo]Etwas ernster, aber auch nicht weiter tragisch, sieht die Situation bei Software-Patenten aus. Software-Patente sind eine amerikanische Erfindung und stehen auf dem selben Blatt wie genveränderte Babynahrung, die im Supermarkt nicht mehr als solche gekennzeichnet werden soll, um die Hersteller nicht gegenüber denen natürlicher Produkte zu diskriminieren ...[/color]
              (from here)

              Kommentar


              • #8
                Hi!
                da ich mich damit schon ein wenig beschäftigt habe, würde ich andere Tabelenstruktur vorschlagen.

                Tabelle Schprache
                id | sprache | sprachenkurzel | textausrichtung (von rechts oder links)

                Tabelle Begriff
                //in einer sprache "de" oder "en" wird hier Text gepackt,
                //der als mitelpunkt für übersetzung dient

                id | Begriff

                tabelle uebersetzung
                id| begriff_id (von Begriff)|sprachen_id(id von sprache) | uebersetzung

                Tabelle Seiteninhalt
                //seiten_id kann mehrere mal auf einer Seite vorkommen
                Seiten_id | platzhalter | begriff_id

                Bei dieser Model sind alle mögliche Spracheinsätze und einstellungen offen.
                utf-8 nicht vergessen!

                Wenn Ebiz-consult meine Beratung braucht, dann weisst du mein Telefon-nr

                Und richte viele Grüsse an die Jungs von Ebiz-consult und deine Familie!
                viele Grüße
                Slava
                Slava
                bituniverse.com

                Kommentar


                • #9
                  guckt es doch von XAMPP ab

                  Kommentar


                  • #10
                    Ich würde mal spontan sagen - und lieg' bestimmt weit weg von einer Profilösung :P - machs doch so:


                    Spracherkennung via der $_SERVER - Variable 'HTTP_ACCEPT_LANGUAGE':

                    Der Inhalt des Accept-Language:-Headers der aktuellen Anforderung, so vorhanden. Beispiel: 'en'.
                    Dazu ein netter Auszug von der php.net - Seite (Kommentare):

                    PHP-Code:
                    function chooseLang($availableLangs) {
                       
                    $pref=array();
                       foreach(
                    split(','$_SERVER["HTTP_ACCEPT_LANGUAGE"]) as $lang) {
                           if (
                    preg_match('/^([a-z]+).*?(?:;q=([0-9.]+))?/i'$lang.';q=1.0'$split)) {
                               
                    $pref[sprintf("%f%d"$split[2], rand(0,9999))]=strtolower($split[1]);       
                           }
                       }
                       
                    krsort($pref);
                       return 
                    array_shift(array_merge(array_intersect($pref$availableLangs), $availableLangs));
                    }
                     
                    echo 
                    'BESTLANG: '.chooseLang(array('de''en''fr')); 

                    In der Datenbank dann für jede Sprache, wie schon oben vorgeschlagen, die jeweiligen Texte.
                    Um das ganze performater zu gestaltent vllt. die Texte in Dateien auslagern.

                    Zu Webserver-funktionen kann ich dir leider nich helfen


                    lg

                    Kommentar


                    • #11
                      Ok! Vielen Dank erst einmal, funktioniert jetzt, ich musste die Funktion auch in eine "function" reinpacken. Das ist meine Seite, aber noch zwei Fragen habe ich:

                      1. Wie kann ich den Aufruf der Funktion

                      "<?php getlang('%%str_sample1%%')?>"

                      abkürzen?

                      2. Und wie würde man unter PHP so was wegpacken, ich meine in eine "Userklasse" oder so. Damit es wiederverwendbar wird und die Seite sauberer wird. Was wäre professionell.

                      Ich finde PHP langsam richtig geil! Es macht richtig Spaß damit zu entwickeln wenn man weiß was man tut damit scheint ja ne ganze Menge zu gehen! hehe

                      Und vielen Dank an die Community die super hilft und vor allem SOO schnell!

                      Code:
                      <?php 
                      	$servername = "localhost";
                      	$username = "root";
                      	$password = "point";
                      	$port = "3306";
                      	$db = "mm";
                      
                      	$verbidung = mysql_connect($servername, $username, $password)
                      		or die ("Kann keine Verbindung zur Datenbank herstellen".mysql_error());
                      		
                      	mysql_select_db($db);
                      	
                      	function getlang($templatetext)
                        {
                      		$array = explode ('%%str_', $templatetext);
                      		echo $array[0];
                      		for ($i=1; $i<count($array); $i++)
                      		{
                      		  list ($ident, $tail) = explode('%%', $array[$i]);
                      		  $q = mysql_query ("select EN from t_lang_objects where IDENT='$ident'");
                      		  if ($q && $r = mysql_fetch_row($q))
                      		    echo $r[0];
                      		  else
                      		    echo $ident;
                      		  echo $tail;
                      		}
                        }
                      ?>
                      
                      <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
                      <html xmlns="http://www.w3.org/1999/xhtml">
                      <head>
                      <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
                      <title>Untitled Document</title>
                      </head>
                      
                      <body>
                      <?php getlang('%%str_sample1%%')?>
                      </body>
                      </html>
                      
                      <?php
                      	/* Verbindung schließen */
                      	mysql_close($verbidung);
                      ?>
                      gruß
                      yavuz
                      Zuletzt geändert von yonthebeach; 18.06.2006, 10:24.
                      blog | www.bogazci.com
                      mm | www.micromanager.de

                      Kommentar


                      • #12
                        wenn du sich mit mehrsprachigen Seiten beschäfftigen willst, dann muss du auf utf-8 umsteigen. Mit charset=iso-8859-1 wird es sogar in Europa Probleme geben
                        Slava
                        bituniverse.com

                        Kommentar


                        • #13
                          ok,

                          das ist ja kein großes problem innerhalb des HTML die codierung auf utf8 umzustellen. die db bzw. die tabellen sind bereits utf8.

                          Aber gibt es keine antworten zu folgenden fragen?


                          1. Wie kann ich den Aufruf der Funktion

                          "<?php getlang('%%str_sample1%%')?>"

                          abkürzen?

                          2. Und wie würde man unter PHP so was wegpacken, ich meine in eine "Userklasse" oder so. Damit es wiederverwendbar wird und die Seite sauberer wird. Was wäre professionell.
                          gruß
                          yavuz
                          blog | www.bogazci.com
                          mm | www.micromanager.de

                          Kommentar


                          • #14
                            wieso willst die Funktion denn abkürzen?
                            ist das wirklich sooo viel Tipparbeit?
                            oder willst "schönen" Code haben?

                            ich verstehs nicht....

                            Kommentar


                            • #15
                              ich hätte kein problem damit wenn so bleibt, aber vielleichts gehts ja auch anders. man lernt ja nie aus und da ich noch am anfang stehe bin ich mir bei manchen sachen nicht so ganz sicher ob alles seine richtigkeit hat.

                              und

                              2. Und wie würde man unter PHP so was wegpacken, ich meine in eine "Userklasse" oder so. Damit es wiederverwendbar wird und die Seite
                              sauberer wird. Was wäre professionell.
                              gruß
                              yavuz
                              blog | www.bogazci.com
                              mm | www.micromanager.de

                              Kommentar

                              Lädt...
                              X