Auslesen der aktuellen für den Frontend-Besucher geltenden Sprache

  • Hallo beinander,


    ich habe eine zweisprachige Joomla 4 Seite und binde ein eigenes Script mittels iframe bzw wrapper ein. Nun will ich dieses script ebenfalls zweisprachig haben. Um das zu programmieren brauche ich die für den jeweiligen Benutzer aktuell geltende Sprache. Wie lese ich die aus?


    Vielen Dank im Voraus für eure Antworten.

  • Hallo Indigo,


    vielleicht habe ich nicht präzise genug geschrieben. Mit meiner zweisprachigen Seite www.arteficio.de kann man zwischen den beiden Sprachen hin und herschalten. Die Browsersprache bleibt dabei unverändert und nützt somit nichts. Wahrscheinlich geht es irgendwie über die jfactory. Nur wie?


    Das script ist umfangreich, viele Programmzeilen. Man könnte natürlich für jede Sprache ein eigenes script verwenden, aber dann müsste man immer doppelt pflegen. Das ist unelegant. Ich würde gerne nur die im frontend erscheinden Texte sprachabhängig machen und vom Programm trennen. Dazu brauche ich die Sprachvariable von Joomla.

  • Wenn ich die Sprachvariable habe, kann ich es programmieren. Oder kann Joomla die nicht liefern? Zumindest im html-Tag ist lang="es-es". Nur habe ich keine Ahnung, wie ich die abfragen kann. Hat jemand eine Idee?

  • Etwas weiter bin ich schon gekommen. Folgender Code funktioniert:

    Allerdings nur für getlanguage. Damit kommt aber immer nur englisch, das weder die aktuelle noch der default ist. Somit sollte ich auf die session zugreifen. Da fehlt leider noch was.

  • Wie Indigo66 in #4 ja schon sagt, hängt es davon ab, wo dein Skript läuft. In der Joomla-Seite selbst kommst du sicherlich an die vom Besucher in Joomla eingestellte Sprache. Im Iframe kommst du nicht an die Sprache und auch nicht an die Session der einbettenden Seite, weil du das betrachten musst wie einen Browser im Browser.


    Dein "Script für Sprache" muss also in Joomla selbst laufen. Dort könntest du dann z.B. den Iframe generieren, indem du die Sprache z.B. in einem weiteren Query-Parameter in der Iframe-URL hinterlegst.


    Oder kurz ;) : Wo läuft den dein Skript eigentlich und wie wird der Iframe eigentlich eingebunden (MOdul, Komponente, händisch?) und was passiert in welcher Script-Sprache im Iframe und ... ?

  • Hallo Re:Later,


    genau das obige script ist per Menü/iframe-wrapper eingebunden (siehe Menü Test bei http://www.arteficio.de). Ich verstehe, was du sagen willst, aber es macht nicht viel Hoffnung. Komisch ist, dass das obige script fehlerfrei durchläuft und auch die Sprache englisch ausliefert. Wenn ich allerdings die Zeile mit JFactory::getsession dazu schalte, läuft es nicht mehr. Da sollte doch auch anderes möglich sein.

  • Du verwendest die Komponente com_wrapper.

    Die gibt dir die Möglichkeit einen Override zu erstellen für die default.php.

    Meine Idee war jetzt in der Zeile im Override

    PHP
    src="<?php echo $this->escape($this->wrapper->url); ?>"

    eine GET-Variable mit der Sprache anzuhängen, so, dass da statt

    Code
    src="http://www.arteficio.de/test.php"

    steht:

    Code
    src="http://www.arteficio.de/test.php?sprache=de"

    oder so ähnlich rauskommt.


    Ist reine Theorie, aber ich denke im Override-Code, sollte die aktuelle Sprache ohne großes Kokolores auslesbar sein.


    Und in der test.php sollte es dann relativ einfach sein, die übergebene GET-Variable auszulesen, die jetzt zum IFrame selbst gehört.

  • Keine schlechte Idee. Ich habe es mal mit "->get($lang)" ausprobiert. Leider geht das nicht. Da müsste man die genaue Syntax kennen.


    In der Adresszeile erscheint der Ländercode bereits: http://arteficio.de/index.php/de/test5 Aber diese URL ist nicht auslesbar. Jedenfalls weiß ich nicht, wie ich die holen könnte. Die üblichen Instrumente holen mir nur die tatsächliche URL, also die, wo das script liegt. Siehe http://arteficio.de/index.php/de/formeln

  • Code
    $lang = JFactory::getLanguage();
    echo ' DebUG 1 <pre>' . print_r($lang->getTag(), true) . '</pre>';#exit;
    
    $uri = JUri::getInstance()->getPath();
    echo ' DebUG 2 <pre>' . print_r($uri, true) . '</pre>';#exit;
    
    $input = JFactory::getApplication()->input->get('language', 'en-GB');
    echo ' DebUG 3 <pre>' . print_r($input, true) . '</pre>';#exit;

    Englische Seite mit explizit "/en/" im Link:



    Deutsche Seite, wo "de" in Link ausgeblendet wurde:


    wie es nun aussieht mit anderen Einstellungen wie browserkontrolliert oder so? Keine Ahnung.


    es gibt sicherlich noch weitere Möglichkeiten.

  • Es sieht so aus, dass es keine Möglichkeit gibt, die aktuelle Sprache des Anwenders herauszufinden. Ich habe das deshalb anders gelöst. Ich habe aus dem script alles was der Anwender nicht sieht ausgelagert und die aufrufende HTML-Dateien in Sprachen aufgeteilt. Somit kann ich im Menü über iframe das script für die jeweilige Sprache starten, welches dann auf die selben Programme zugreift. Danke für die Hilfe.

  • Alle Möglichkeiten funktionieren nicht. Es kommt maximal nur gb, obwohl es eingestellt ist.

    Wie Re:Later bereits schrieb, muss sich der Check welche Sprache benutzt wird zwingend (!) innerhalb des Joomla befinden und übermittelt den Parameter dann über die URL an das Script im iFrame. In der anderen Richtung kann es nicht funktionieren, da der Besucher des Browsers das iFrame direkt lädt, ohne Beteiligung des Joomla in dem es sich befindet.


    Das Gleiche würde auch auf Lösungsansätze mit einem Cookie zutreffen, da ein Server immer nur jene Cookies auslesen darf, die auch von ihm selbst über den Browser gesetzt wurden.

  • Die dem Anwender angezeigte URL wird nicht übermittelt. Es kommt nur die URL in der sich das script befindet, naturgemäß ohne Länderkürzel. Auch die GET-Anweisung funktioniert nicht. Jedenfalls weiß ich nicht, wie die korrekte Syntax wäre. Die vom Anwender gewählte Sprache ist nicht in der JFactory.