Wie funktioniert diese Übersetzung?

  • Ich mal wieder ein Frage, ich hab vor meine neue Website auf deutsch und englisch zu gestalten. Hab auch schon ein Übersetzungssystem eingebaut, allerdings hab ich jetzt was gefunden was mir besser gefallen würde.

    Auf meiner Arbeit benutzen wir ein bestimmtes Websystem das für die Übersetzung .csv Dateien benutzt.

    Der Aufruf sieht so aus:

    PHP
    <?php echo $this->__('Unser Text'); ?>

    Die .csv Datei würde dann so aussehen:

    Code
    "Unser Text","Our Text"
    "deutsch","german"
    "wie geht's?","how are you?"

    Jenach welche Sprache gesetzt ist, liest das System halt den richtigen Text aus.
    So eine Funktion ist doch bestimmt nicht all zu viel arbeit oder?
    Also was ich denke was das macht ist:
    1. Über einen Link halt ein Cookie setzen, welche Sprache halt gerade genutzt wird.
    2. Jenachdem welche Sprache genutzt wird, für jeden Text der in ...->__('jkhh')... steht, die passende Übersetzung raussuchen und ausgeben. Wenn bei einem Satz keine Übersetzung vorhanden ist, wird der Satz in der anderen Sprache ausgegeben.

    Ich versteh nur nicht ganz wie das geht, dass er sich das halt aus den .csv Dateien raussucht... Ich hoffe ihr könnt mir helfen.

    Danke im voraus.:roll:

    Don't follow me, I run into walls.

  • CSV-Datei per fgetcsv einlesen und durchsuchen, wo ist dein Problem???

  • Und was hat es mit diesem $this->__() auf sich? So hab ich noch nie gearbeitet... Soweit ich weiß handelt es sich dabei um Klassen und Objekte oder so oder? Wie genau wird das hier gemacht das man das über $this->__() machen kann?

    Don't follow me, I run into walls.

  • wird wohl ähnlich der Zend_View componente sein. Ein view-script wird gerendert und bekommt den scope des view-objekts (das heisst man kann mit $this innerhalb des scripts arbeiten). __("text") ist dann nichts weiter als eine stinknormale Funktion mit nem komischen Namen :D


  • Wie müsste ich denn in diesem Fall eine Klasse erstellen, damit ich mittels $this-> auf eine Funktions zugreifen kann, die mir den übermittelten text übersetzt?

    Don't follow me, I run into walls.

  • Du scheinst dir ein Grundsystem bauen zu wollen, ich glaube hier greifst du lieber auf ein Framework zurück als selbst etwas "hinzufuschen"

  • Eigentlich ist das sowieso quatsch oder? Im Prinzip kann ich auch einfach ne stink normale Funktion schreiben die das macht. Dann hab ich halt nicht dieses $this-> davor aber das ist ja wurscht... Oder seht ihr da einen Sinn das das wichtig ist?

    Don't follow me, I run into walls.

  • Ich seh nen Sinn darin ne klasse Language zu machen, die zu instanzieieren und dann darauf get("unser text"); auszuführen. Die Klasse language geht einfach her, liest evtl. aus der Session/Cookie die Sprache und lädt die Datei ohne irgendein dazutun von dir. Du hohlst dir einfach gas get(); .

    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.

    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!

  • Ich hab jetzt einfach mal ne normale PHP Funktion geschrieben, die im Prinzip genauso funktionieren soll.. Sieht heißt auch "__" :D

    Naja also hier ist der Code allerdings klappt es nicht Oo

    Wenn ich $translateArray der Funktion übergebe, dann geht es wunderbar. Mir geht es ja aber darum, dass ich nur den Text der übersetzt werden soll übergebe.
    Ich hab jetzt gedacht wenn ich das Array global registriere, müsste es gehen, leider klappt es nicht, hat jemand ne Idee wieso?

    Don't follow me, I run into walls.

  • ne, so klappt des nich und is unschön.

    Die CSV Sieht dann so aus:

    Code
    text1|Deutsch|English|Francias
    text2|Hallo|Hello|Bonjour

    Was als erstes steht gibst du get() um dann das entsprechende dahinter zu bekommen. Da du dann natürlich kein | schreiben kannst, musst du &hl; nehmen.
    EDIT:
    Die Spaltenaufteilung ist in $lngs() definiert

    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.

    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!

    2 Mal editiert, zuletzt von Tobse (16. Juni 2010 um 21:20)

  • Naja, das ist aber auch nicht wirklich schön. Vielzuviel "Konstante" drin.

  • Wenn du sowas selber machen willst, was spricht gegen eine Klasse?

    Weil ich mich damit noch nicht wirklich gut auskenne... Ich will dem ganzen erst etwas näher kommen... Bin derzeit schon kräftig am lernen aber so ganz dahinter gestiegen bin ich noch nicht :D

    Das was ich einer Seite vorher noch an Code gepostet hab reicht btw für meine Seite voll aus. Kann trotzdem vielleicht mal jemand gucken wo der Fehler dort ist? Ich bekomms nicht zum laufen...

    Tobse: Danke für deine Mühen! Habs mal getestet, sind paar fehler dirn, die hab ich schon behoben aber es läuft trotzdem irgendwie nicht...

    Don't follow me, I run into walls.

  • Weil ich mich damit noch nicht wirklich gut auskenne...


    Das wäre das genau der richtige Einsteiger, weil das nun wirklich nicht kompliziert ist.

    Kann trotzdem vielleicht mal jemand gucken wo der Fehler dort ist?


    Das

    PHP
    global $translateArray;


    in die Funktion und das Array mit

    PHP
    $translateArray = array();


    am Anfang initialisieren. Schön ist das aber auf keinen Fall!

  • @bandit600: Danke klappt jetzt wunderbar. Aber wieso ist das eine "unschöne" Lösung? Wenn ich das jetzt mit meinem Sprachscript verbinde und es oben in die index Datei include ist doch alles super oder nicht?

    Don't follow me, I run into walls.

  • Wenn du alles sauber in einer Klasse verpackst, lässt sich diese immer wieder verwenden. Wie schon erwähnt, dein Vorhaben ist zum Üben eigentlich genial, weil nicht kompliziert.

    Unschön alleine schon deshalb, weil globale Variablen eigentlich Käse sind.

  • Ich werd das jetzt mal in meiner Version in meine Website einbauen und dann versuch ich mich mal weiter daran mittels klasse ;) Mal sehen ob das was wird.

    Don't follow me, I run into walls.

  • Weil ich mich damit noch nicht wirklich gut auskenne... Ich will dem ganzen erst etwas näher kommen... Bin derzeit schon kräftig am lernen aber so ganz dahinter gestiegen bin ich noch nicht :D

    Das was ich einer Seite vorher noch an Code gepostet hab reicht btw für meine Seite voll aus. Kann trotzdem vielleicht mal jemand gucken wo der Fehler dort ist? Ich bekomms nicht zum laufen...

    Tobse: Danke für deine Mühen! Habs mal getestet, sind paar fehler dirn, die hab ich schon behoben aber es läuft trotzdem irgendwie nicht...


    Sorry, war nich getestet, aber


    mit lang.csv

    Code
    text1|Hallo|Hello|Bonjoure


    ergibt

    Zitat von Ausgabe


    Hallo

    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.

    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!

  • Och Tobse, das ist doch immer noch Käse! Diese Zeilen

    PHP
    if (isset($_COOKIE['lang'])) $lng=$_COOKIE['lang']; else setcookie("lang", $lng, 60*60*24*356*1000);
            $lngs=array("de"=>1, "en"=>2, "fr"=>3);
            $csv=file("lang.csv");


    sollten so auf gar keinen Fall in einer Klasse stehen.