Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Fehler in Chrome und IE10, aber nicht in FF

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Fehler in Chrome und IE10, aber nicht in FF

    Hi,

    ich habe ein kleines Problemchen, das bei mir Verwirrung stiftet:

    Ich nutze das geniale Phalcon-Framework. Dieses ermöglicht auch das Anlegen von Übersetzungen in Dateien (als assoz. Arrays).

    In meiner abstrakten Klasse ControllerBase gibt es eine Funktion, die die entsprechenden Übersetzungen ausliest:

    PHP-Code:
    abstract class ControllerBase extends Controller
    {
        ...
        
        protected function 
    _translate ($type 'text'$group 'text')
        {
            
    //Ask browser what is the best language
            
    $language $this->request->getBestLanguage();
            
    //Check if we have a translation file for that lang
            
    if (file_exists("../languages/".$language."-".$type.".php")) {
                require 
    "../languages/".$language."-".$type.".php";
            } else {
            
    // fallback to some default
                
    require "../languages/en-".$type.".php";
            }
            
    //Return a translation object
            
    return new \Phalcon\Translate\Adapter\NativeArray(array(
                
    "content" => ${$group}
            ));
        }
        

    Soweit ist alles schön. Immer mitm Firefox gearbeitet. Zum Test auch mal den Chrome angeworfen, der dann aber eine schöne Fehlermeldung ausspuckte:

    Notice: Undefined variable: messages in D:\Programmierung\xampp\htdocs\tournaments\apps\ba ckend\controllers\ControllerBase.php on line 34
    Translation data must be an array
    Gleiche Fehlermeldung wirft der IE10.

    Meine Frage nun: Wieso werfen IE10 und Chrome eine Fehlermeldung (sie laden auch nicht die Übersetzungen), während es im Firefox keine Probleme gibt?

    Besten Dank im Voraus
    Aljoscha

  • #2
    In deinen Tranlationfiles hast du doch einfach nur ein assoziatives Array, und das hat doch auch einen Namen, warum dann "content" => ${$group} ?
    Lass dir doch mal ausgeben, was $this->request->getBestLanguage() sagt.

    Es ist nämlich sehr wahrscheinlich so, dass du in einem deiner Tranlationsfiles das array falsch benannt hast.

    PS: Das geniale Phalcon hat übrigens auch das noch viel genialere Konzept der DI und da gehört dein Code auch hin und nicht in den Controller.

    PHP-Code:
    $di->setShared('t', function() ) {
            
            
    $supported = array('de''en');
            
            
    $lang http\Env::negotiateLanguage($supported);
            
            
            require 
    "../app/translations/".$lang.".php";
            
            return new \
    Phalcon\Translate\Adapter\NativeArray(array(
                
    "content" => $translation
            
    ));
        }); 
    sowas könntest du in der index.php haben, braucht aber die php Erweiterung http, da die getBestLanguage leider nicht so viel kann
    Fatal Error: Windows wird gestartet

    Wie administriert man ein Netzwerk: Beispiel

    Kommentar


    • #3
      Mein Tipp: Die Sprachauswahl funktioniert irgendwie automatisch an Hand der vom Browser akzeptierten Sprachen, und du hast bei Firefox eine andere Spracheinstellung als bei Chrome und IE.

      Das der Fehler aber irgendwo anders liegt, sollte dir aber auch auffallen. Die Variable über die sich PHP mokiert messages verwendest du im gezeigten Ausschnitt ja gar nicht.

      Kommentar


      • #4
        Zitat von Tropi Beitrag anzeigen
        Mein Tipp: Die Sprachauswahl funktioniert irgendwie automatisch an Hand der vom Browser akzeptierten Sprachen, und du hast bei Firefox eine andere Spracheinstellung als bei Chrome und IE.

        Das der Fehler aber irgendwo anders liegt, sollte dir aber auch auffallen. Die Variable über die sich PHP mokiert messages verwendest du im gezeigten Ausschnitt ja gar nicht.
        Klar er ruft von seinem Kontroller _translate('text', 'messages'); auf, ich verstehe nur nicht warum
        Fatal Error: Windows wird gestartet

        Wie administriert man ein Netzwerk: Beispiel

        Kommentar


        • #5
          Hallo,

          danke für die superschnellen Antworten.

          Sry, hätte natürlich auch den Aufruf und eine Sprachdatei mit hinzufügen sollen :/

          Beispielaufrufr aus einem Controller, der ControllerBase erweitert:
          Bei Fehlermeldungen z.B.:
          PHP-Code:
          ... $this->flashSession->error($this->_translate('messages''errors')->_('TOURNAMENTS_LOAD'));... 
          Bei UI-Übersetzungen z.B.:
          PHP-Code:
          echo $this->_translate('text''description')->_('TOURNAMENTS_LIST'); 
          oder
          PHP-Code:
          $this->_translate('forms''labels')->_('TOURNAMENT_LABEL_LEAGUES'); 
          Der erste Parameter gibt die zu verwendene Sprachdatei an, also z.B. "forms". Funktion _translate (...) lädt also bspw. 'de-forms.php', wenn diese existiert, sonst 'en-forms.php'.

          Die 'de-messages.php' existiert (auch die 'en-messages.php' und alle anderen verwendeten Sprachdateien) und sieht so aus:
          PHP-Code:
          <?php
          $errors 
          = array(
              
          'DIRECTORY_OPEN' => 'Verzeichnis konnte nicht geöffnet werden.',
              
          "DIRECTORY_NOT_EXISTS"   => 'Verzeichnis existiert nicht.',
              
          "DIRECTORY_NOT_READABLE" => 'Verzeichnis ist nicht lesbar.',
              
          "DIRECTORY_NOT_WRITABLE" => 'Verzeichnis ist nicht beschreibbar.',
              
              
          'NO_ID' => 'Keine ID erhalten.',
              
          'NO_POST' => 'Keine Daten vom Formular erhalten.',
              
              
          'FILE_UPLOADED' => 'Datei konnte nicht hochgeladen werden.',
              
              
          'GYM_CREATE' => 'Halle konnte nicht erstellt werden.',
              
          'GYM_DELETE' => 'Halle konnte nicht gelöscht werden.',
              
          'GYM_LOAD' => 'Halle konnte nicht geladen werden.',
              
          'GYM_UPDATE' => 'Halle konnte nicht aktualisiert werden.',
              
              
          'TEAM_CREATE' => 'Team konnte nicht erstellt werden.',
              
          'TEAM_DELETE' => 'Team konnte nicht gelöscht werden.',
              
          'TEAM_LOAD' => 'Team konnte nicht geladen werden.',
              
          'TEAM_UPDATE' => 'Team konnte nicht aktualisiert werden.',
              
          );

          $notices = array(
              
          'TEAM_CREATE' => 'Erstelle Team.',
          );

          $successes = array(
              
          'FILE_UPLOADED' => 'Datei wurde erfolgreich hochgeladen.',
              
          'GYM_CREATE'  => 'Halle wurde erstellt.',
              
          'GYM_DELETE'  => 'Halle wurde erfolgreich gelöscht.',
              
          'GYM_UPDATE'  => 'Halle wurde erfolgreich aktualisiert.',
              
          'TEAM_CREATE' => 'Team wurde erstellt.',
              
          'TEAM_DELETE' => 'Team wurde erfolgreich gelöscht.',
              
          'TEAM_UPDATE' => 'Team wurde erfolgreich aktualisiert.',
          );
          Ich bin eben verwirrt, da der Firefox alles ohne Probleme macht;
          IE und Chrome meckern.

          Denn eigentlich geschieht doch die Verarbeitung des Skripts serverseitig. Und das ist ja nun definitiv derselbe!



          @Unlikus
          Du hast natürlich recht, dass das mit DI viel besser geht. Ich bin halt allgemein einfach gerad nur verwirrt und mache ein paar Übungen, da ich bisher nix mit dem laden von Sprachdateien und Spracherkennung gemacht habe!

          Kommentar


          • #6
            Du hast das mit der Übersetzung nicht besonders gut implemtiert. Es ist kein Problem alle Übersetzungen in ein array zu machen. Dann brauchst du das Translationobjekt auch nur ein mal zu erstellen und das bitte in der DI.
            Dann hast du auch nur einen Namen für deine Translationarrays und dann wird der Fehler auch nicht mehr auftreten.
            Um die Bereiche abzutrennten, kannst du ja Prefixe machen.
            Fatal Error: Windows wird gestartet

            Wie administriert man ein Netzwerk: Beispiel

            Kommentar


            • #7
              In meiner BA mache ich das auch ordentlich. Nur trotzdem kann man ja immer wieder in so einen Fehler laufen (FF läuft, Chrome und IE nicht, oder ähnlich). Deshalb vor allem meine Frage, woran es liegt? O

              Kommentar


              • #8
                Der Fehler zeigt dir doch eindeutig, dass $messages nicht definiert wurde, also in deiner geladen Sprachdatei nicht existiert. Wahrscheinlich weil Chrome eine andere Sprache will und deshlab eine andere Sprachdatei hohlt. Du hast wohl English nur so halb fertig gestellt oder was auch immer. In jedem Fall muss du das ganze noch mal gründlich überarbeiten
                Fatal Error: Windows wird gestartet

                Wie administriert man ein Netzwerk: Beispiel

                Kommentar


                • #9
                  Alles klaro. Herzlichsten Dank! Werde mich bemühen!

                  Kommentar


                  • #10
                    richtig ordentlich wäre vielleicht ein eigenes Translationobjekt, was das kann was du willst. Finde aber das ist den aufwand nicht Wert. (und zweitens ist es dann nicht mehr in C implemtiert )
                    Setze das am besten einfach so um, wie ich es aufgezeigt habe und du wirst keine Probleme mit bekommen.
                    Fatal Error: Windows wird gestartet

                    Wie administriert man ein Netzwerk: Beispiel

                    Kommentar

                    Lädt...
                    X