A propos du composant Localise pour Joomla! 4

Réduire
X
 
  • Filtrer
  • Heure
  • Afficher
Tout effacer
nouveaux messages

  • A propos du composant Localise pour Joomla! 4

    Bonjour,

    Pour cesser de mélanger deux discussions, j'ouvre celle-ci concernant le composant Localise (destiné à la traduction des fichiers de langues).
    Comme je l'ai dit ailleurs, les champs de filtre, notamment de la partie "traductions", ne se remplissent pas sur l'ensemble des sites hébergés en ligne (que ce soit en PHP 7.4 ou en PHP 8.0), alors que sur un site en local (Wampserver 64) ils sont bien fonctionnels de la 7.3 à la 8.0.7.

    J'ai cru que c'était une question de base de données car en local j'étais en MySQL alors qu'en ligne, sur deux serveurs, les bases sont des MariaDB. Mais en passant la base locale en MariaDB, même version que sur un des serveurs, les listes de filtres s'affichent bien.

    Faute donc de trouver la cause sur les serveurs distants, j'ai commencé à faire hier des tests en local.
    Première constatation : dans la liste des fichiers, seuls ceux du noyau et ceux de Localise sont présents, rien pour Akeeba backup qui est installé sur le site, mais utilise les anciens noms, nécessitant de supprimer "en-GB_" de ces noms pour les voir affichés dans la liste (et "fr-FR_" si une traduction partielle existe).

    Deuxième point : tant que je suis en version 7.3 ou 7.4, l'enregistrement des modifications des traductions fonctionne, mais si je passe en PHP 8.0, lors de l'enregistrement s'affiche cette erreur, avec échec de l'enregistrement :
    The arguments array must contain 2 items, 1 given
    La référence au fichier Text.php, comme on l'a eu pour l'affichage du panneau d'administration il y a quelques temps m'a fait aller jeter un coup d'œil sur le fichier localise.php où il manque une parenthèse fermante
    Code:
     public static function getPluralSuffixes($count)
    {
    if ($count == 0)
    {
    return array('ONE', '1';
    }
    La correction n'a rien changé à l'erreur.
    "Patience et longueur de temps font plus que force ni que rage..." (La Fontaine : Le Lion et le Rat) - "Il n'y a pas de problèmes; il n'y a que des solutions" (André Gide).
    MoovJla et LazyDbBackup sur www.joomxtensions.com - FaQ sur www.fontanil.info - Site pro : www.robertg-conseil.fr et sites perso chez PlanetHoster + sites gérés chez PHPNET, 1and1 et OVH

  • #2
    Il manque aussi l'accolade de fermeture de la fonction, mais c'est peut-être dû au copier/coller qui était incomplet.
    Tous les services pour les sites Joomla! : sécurité, nettoyage de sites piratés, hébergement, SEO, applications Fabrik, migration, compatibilité mobiles, accessibilité, ...
    Administrateur certifié Joomla! 3
    https://www.betterweb.fr

    Commentaire


    • #3
      Ce n'est qu'une copie partielle, il y a un elseif et un else qui suivent.
      "Patience et longueur de temps font plus que force ni que rage..." (La Fontaine : Le Lion et le Rat) - "Il n'y a pas de problèmes; il n'y a que des solutions" (André Gide).
      MoovJla et LazyDbBackup sur www.joomxtensions.com - FaQ sur www.fontanil.info - Site pro : www.robertg-conseil.fr et sites perso chez PlanetHoster + sites gérés chez PHPNET, 1and1 et OVH

      Commentaire


      • #4
        Bonjour,

        Pour ce qui est de l'erreur à l'enregistrement du fichier de langue sous PHP 8, elle ne survient que si le paramètre "Complet" est à "non". Je présume donc que ce paramètre renvoie une valeur vide que PHP 8 n'accepte plus, alors que PHP 7.4 ne signale pas d'anomalie, expliquant l'erreur 0
        The arguments array must contain 2 items, 1 given
        Trouvé : dans le fichier View/Translation/HtmlView.php ligne 81, $complete revient vide au lieu d'être à "0"
        Code:
        $complete   = (int) ComponentHelper::getParams('com_localise')->get('complete', 0);
        en forçant la valeur à "0" dans le "else" ligne 115, l'enregistrement fonctionne sans erreur.

        Edit : ce n'est pas ça, après avoir fonctionné sans erreur, j'ai de nouveau l'erreur 0

        Edit 2 : l'erreur ne survient pas pour tous les fichiers, mais systématiquement pour le fichier com_localise.ini !
        Dernière édition par RobertG à 26/06/2021, 10h19
        "Patience et longueur de temps font plus que force ni que rage..." (La Fontaine : Le Lion et le Rat) - "Il n'y a pas de problèmes; il n'y a que des solutions" (André Gide).
        MoovJla et LazyDbBackup sur www.joomxtensions.com - FaQ sur www.fontanil.info - Site pro : www.robertg-conseil.fr et sites perso chez PlanetHoster + sites gérés chez PHPNET, 1and1 et OVH

        Commentaire


        • #5
          Bonjour,

          A force de recherches, je me suis aperçu que la cause de l'erreur lors de l'enregistrement de la traduction de com_localise.ini était la présence de virgules dans certaines valeurs de chaînes, mais curieusement pas dans toutes.
          Après correction de deux valeurs par suppression d'une virgule qu'elles contenaient, l'enregistrement se fait. Je vérifie alors avec notepad++ le nombre de virgules présentes dans le fichier complet et j'en trouve 49 autres dans ces valeurs de chaînes, 49 qui ne déclenchent aucune erreur !

          Le problème est que c'est la présence de la virgule dans la référence qui est en cause ? Qu'est-ce qui fait que ceci déclenche l'erreur dans la routine du noyau chargée de découper les chaînes en se basant sur la virgule, mais pas sur toutes ? Exemple :
          COM_LOCALISE_NOTICE_GITHUB_FILE_ADDED="A new file <strong>%1$s</strong> present in the Github %2$s branch, has been added to the local %3$s/language/en-GB folder."
          Donc si je supprime la virgule après "branch", l'erreur disparaît
          Mais encore plus curieux : si j'ajoute une autre virgule juste après "</strong>" en conservant ou en supprimant celle après "branch", dans les deux cas, je n'ai plus d'erreur non plus !
          "Patience et longueur de temps font plus que force ni que rage..." (La Fontaine : Le Lion et le Rat) - "Il n'y a pas de problèmes; il n'y a que des solutions" (André Gide).
          MoovJla et LazyDbBackup sur www.joomxtensions.com - FaQ sur www.fontanil.info - Site pro : www.robertg-conseil.fr et sites perso chez PlanetHoster + sites gérés chez PHPNET, 1and1 et OVH

          Commentaire


          • #6
            A la recherche maintenant de la raison pour laquelle les listes de filtres client et develop (fichier com_localise/layouts/joomla/searchtools/default.php), en utilisant var_dump() en local j'ai ceci :
            D:\wamp64\www\Joomla_4.0.0-rc3-dev\administrator\components\com_localise\layouts\ joomla\searchtools\default.php:75:string '<select id="client" name="client" onchange="this.form.submit()" class="custom-select"> <option value="" selected="selected">- S&eacute;lection Client -</option> <option value="site">Site</option> <option value="administrator">Administrateur</option> </select> ' (length=264)
            D:\wamp64\www\Joomla_4.0.0-rc3-dev\administrator\components\com_localise\layouts\ joomla\searchtools\default.php:75:string '<select id="develop" name="develop" class="form-select" onchange="this.form.submit()"> <option value="" selected="selected">- Select Content State -</option> <option value="complete">Complete</option> <option value="incomplete">Incomplete</option> </select> ' (length=261)
            Sur le site distant :
            string(219) " " string(223) " "
            La variable $tagField->input quant à elle renvoie bien la liste des langues.

            Si j'utilise J!Dump pour la variable client, j'obtiens ceci en ligne :
            et en local :
            Pourquoi cette différence ???
            "Patience et longueur de temps font plus que force ni que rage..." (La Fontaine : Le Lion et le Rat) - "Il n'y a pas de problèmes; il n'y a que des solutions" (André Gide).
            MoovJla et LazyDbBackup sur www.joomxtensions.com - FaQ sur www.fontanil.info - Site pro : www.robertg-conseil.fr et sites perso chez PlanetHoster + sites gérés chez PHPNET, 1and1 et OVH

            Commentaire


            • #7
              Bonjour,

              J'ai eu beau chercher, je n'ai toujours pas trouvé pourquoi les listes client et develop sont vides en ligne, alors que la liste des langues y est remplie, mais que tout fonctionne en local.
              "Patience et longueur de temps font plus que force ni que rage..." (La Fontaine : Le Lion et le Rat) - "Il n'y a pas de problèmes; il n'y a que des solutions" (André Gide).
              MoovJla et LazyDbBackup sur www.joomxtensions.com - FaQ sur www.fontanil.info - Site pro : www.robertg-conseil.fr et sites perso chez PlanetHoster + sites gérés chez PHPNET, 1and1 et OVH

              Commentaire


              • #8
                Bonjour,

                A force de JDump, j'ai pu constater que lors de l'ouverture de la page des langues ou des traductions, en local on passe par des lignes différentes, supplémentaires en local.
                Sur le serveur distant, on passe directement de la lecture du fichier \administrator\components\com_localise\forms\filte r_languages.xml à la fonction
                protected function loadField($element, $group = null, $value = null)
                du fichier libraries/src/Form/Form.php avec le type "client" et le contenu du champ correspondant dans le fichier XML.
                En local, après lecture du fichier XML en question, on passe par la
                protected function findField($name, $group = null)
                avec comme "$name" le terme "ordercol", puis plusieurs autres fois avant de repasser à la fonction précédente avec le type "text" qui correspond aux filtres de recherche, et enfin le type "client".

                La question est donc de trouver pourquoi en ligne toute cette étape intermédiaire est sautée, expliquant la différence de valeur de variable $tagField->input comme cité plus haut, et l'absence de remplissage de certaines listes.

                JM, si tu passes par ici !

                PS : sur le serveur distant, le code ne passe jamais par les fonctions bind et bindLevel du fichier libraries/src/Form/Form.php (alors qu'il y passe bien en local) mais je n'arrive toujours pas trouver pourquoi.
                Je remonte à
                Code:
                 // Trigger the form preparation event.
                Factory::getApplication()->triggerEvent('onContentPrepareForm', array($form, $data));
                de la fonction
                protected function preprocessForm(Form $form, $data, $group = 'content')
                du fichier libraries/src/MVC/Model/FormBehaviorTrait.php
                Une balise dumpMessage('preprocess end'); placée après cete ligne de code ne s'affiche pas sur le site distant, ce qui voudrait dire que cette ligne échoue ?
                Dernière édition par RobertG à 03/07/2021, 11h10
                "Patience et longueur de temps font plus que force ni que rage..." (La Fontaine : Le Lion et le Rat) - "Il n'y a pas de problèmes; il n'y a que des solutions" (André Gide).
                MoovJla et LazyDbBackup sur www.joomxtensions.com - FaQ sur www.fontanil.info - Site pro : www.robertg-conseil.fr et sites perso chez PlanetHoster + sites gérés chez PHPNET, 1and1 et OVH

                Commentaire


                • #9
                  Faute de comprendre dans quel fichier était activé ce triggerEvent, j'ai neutralisé la ligne pour voir. Le code passe alors bien dans les fonctions bind et bindLevel, mais au final, le résultat ne change pas, l'erreur se produit ailleurs.
                  "Patience et longueur de temps font plus que force ni que rage..." (La Fontaine : Le Lion et le Rat) - "Il n'y a pas de problèmes; il n'y a que des solutions" (André Gide).
                  MoovJla et LazyDbBackup sur www.joomxtensions.com - FaQ sur www.fontanil.info - Site pro : www.robertg-conseil.fr et sites perso chez PlanetHoster + sites gérés chez PHPNET, 1and1 et OVH

                  Commentaire


                  • #10
                    Bonjour,

                    Faute de trouver la différence entre les deux sites, j'ai cloné le site distant en local, la seule différence étant que le site distant est en https alors que le local sur Wampserver est en http. J'ai ensuite récupéré les infos avec JDump lors de l'affichage de la page des langues dans Localise. Voici la comparaison, en haut le site distant, en bas le site local :
                    Cliquez sur l'image pour l'afficher en taille normale  Nom : localise-dist-loc_20210705.jpg  Affichages : 0  Taille : 22,5 Ko  ID : 2028783
                    La différence est qu'en local, le code utilise un fichier différent : com_localise/Field/ClientField.php, sauf qu'il est orthographié "clientField" dans ce dossier, expliquant, je pense, que Windows le reconnait malgré la différence de casse, mais pas Linux.
                    La modification du nom fonctionne dans la page des langues ; celle du fichier developClient aussi dans la page des traductions, mais pas celle de translationsclientField.php !

                    Une idée ?

                    PS : en fait, il faut que ces fichiers soient nommés ClientField.php, DevelopField.php et TranslationsclientField pour que ces listes ! Pourquoi la fonction "TranslationsClientField" est-elle bien reconnue comme étant dans le fichier TranslationsclientField.php puisque la casse est différente ? Et le problème est-il le même pour les autres fichiers de ce dossier "com_localise/Field" ? En tout cas, la série de filtres de la page "langues" est aussi totalement vide avec la casse actuelle. Faut-il tous les renommer en passant en majuscule leur lettre initiale ?
                    Dernière édition par RobertG à 05/07/2021, 14h59
                    "Patience et longueur de temps font plus que force ni que rage..." (La Fontaine : Le Lion et le Rat) - "Il n'y a pas de problèmes; il n'y a que des solutions" (André Gide).
                    MoovJla et LazyDbBackup sur www.joomxtensions.com - FaQ sur www.fontanil.info - Site pro : www.robertg-conseil.fr et sites perso chez PlanetHoster + sites gérés chez PHPNET, 1and1 et OVH

                    Commentaire


                    • #11
                      Bon, après avoir renommé tous ces fichiers, Localise fonctionne.

                      Mais dans la page des traductions (liste des fichiers), lorsque je filtre sur "site", j'ai deux fois, en local et en ligne
                      Warning: Trying to access array offset on value of type bool in D:\wamp64\www\fsjtranslate\administrator\component s\com_localise\Model\TranslationModel.php on line 317
                      Warning: Trying to access array offset on value of type bool in D:\wamp64\www\fsjtranslate\administrator\component s\com_localise\Model\TranslationModel.php on line 321
                      Si je comprends bien, cela voudrait dire qu'il y aurait deux fichiers côté site qui ne commenceraient pas par "#" ou ";" mais par une ligne vide. (pour rappel, ces tests sont faits sous PHP 8.0.7)

                      Ensuite, il faut valider les filtres et rafraîchir, ou cliquer une nouvelle fois sur l'icône "loupe" de recherche pour qu'ils s'appliquent.
                      Dernière édition par RobertG à 05/07/2021, 16h55
                      "Patience et longueur de temps font plus que force ni que rage..." (La Fontaine : Le Lion et le Rat) - "Il n'y a pas de problèmes; il n'y a que des solutions" (André Gide).
                      MoovJla et LazyDbBackup sur www.joomxtensions.com - FaQ sur www.fontanil.info - Site pro : www.robertg-conseil.fr et sites perso chez PlanetHoster + sites gérés chez PHPNET, 1and1 et OVH

                      Commentaire

                      Annonce

                      Réduire
                      1 sur 2 < >

                      C'est [Réglé] et on n'en parle plus ?

                      A quoi ça sert ?
                      La mention [Réglé] permet aux visiteurs d'identifier rapidement les messages qui ont trouvé une solution.

                      Merci donc d'utiliser cette fonctionnalité afin de faciliter la navigation et la recherche d'informations de tous sur le forum.

                      Si vous deviez oublier de porter cette mention, nous nous permettrons de le faire à votre place... mais seulement une fois
                      Comment ajouter la mention [Réglé] à votre discussion ?
                      1 - Aller sur votre discussion et éditer votre premier message :


                      2 - Cliquer sur la liste déroulante Préfixe.

                      3 - Choisir le préfixe [Réglé].


                      4 - Et voilà… votre discussion est désormais identifiée comme réglée.

                      2 sur 2 < >

                      Assistance au forum - Outil de publication d'infos de votre site

                      Compatibilité: PHP 4.1,PHP4, 5, 6DEV MySQL 3.2 - 5.5 MySQLi from 4.1 ( @ >=PHP 4.4.9)

                      Support Version de Joomla! : | J!3.0 | J!2.5.xx | J!1.7.xx | J!1.6.xx | J1.5.xx | J!1.0.xx |

                      Version française (FR) D'autres versions sont disponibles depuis la version originale de FPA

                      UTILISER À VOS PROPRES RISQUES :
                      L'exactitude et l'exhaustivité de ce script ainsi que la documentation ne sont pas garanties et aucune responsabilité ne sera acceptée pour tout dommage, questions ou confusion provoquée par l'utilisation de ce script.

                      Problèmes connus :
                      FPA n'est actuellement pas compatible avec des sites Joomla qui ont eu leur fichier configuration.php déplacé en dehors du répertoire public_html.

                      Installation :

                      1. Téléchargez l'archive souhaitée : http://afuj.github.io/FPA/

                      Archive zip : https://github.com/AFUJ/FPA/zipball/master

                      2. Décompressez le fichier de package téléchargé sur votre propre ordinateur (à l'aide de WinZip ou d'un outil de décompression natif).

                      3. Lisez le fichier LISEZMOI inclus pour toutes les notes de versions spécifiques.

                      4. LIRE le fichier de documentation inclus pour obtenir des instructions d'utilisation détaillées.

                      5. Téléchargez le script fpa-fr.php à la racine de votre site Joomla!. C'est l'endroit que vous avez installé Joomla et ce n'est pas la racine principale de votre serveur. Voir les exemples ci-dessous.

                      6. Exécutez le script via votre navigateur en tapant: http:// www. votresite .com/ fpa-fr.php
                      et remplacer www. votresite .com par votre nom de domaine


                      Exemples:
                      Joomla! est installé dans votre répertoire web et vous avez installé la version française du fichier FPA:
                      Télécharger le script fpa-fr.php dans: /public_html/
                      Pour executer le script: http://www..com/fpa-fr.php

                      Joomla! est installé dans un sous-répertoire nommé "cms" et vous avez installé la version française du fichier FPA:
                      Télécharger le script fpa-fr.php dans: /public_html/cms/
                      Pour executer le script: http://www..com/cms/fpa-fr.php

                      En raison de la nature très sensible de l'information affichée par le script FPA, il doit être retiré immédiatement du serveur après son utilisation.

                      Pour supprimer le script de votre site, utilisez le lien de script de suppression fourni en haut de la page du script. Si le lien de suppression échoue pour supprimer le script, utilisez votre programme FTP pour le supprimer manuellement ou changer le nom une fois que le script a généré les données du site et le message publié sur le forum. Si le script est toujours présent sur le site, il peut être utilisé pour recueillir suffisamment d'informations pour pirater votre site. Le retrait du script empêche des étrangers de l'utiliser pour jeter un oeil à la façon dont votre site est structuré et de détecter les défauts qui peuvent être utilisé à vos dépends.
                      Voir plus
                      Voir moins

                      Partenaire de l'association

                      Réduire

                      Hébergeur Web PlanetHoster
                      Travaille ...
                      X