IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

jQuery Discussion :

DataTable: Transférer le fichier langue de PHP à JS


Sujet :

jQuery

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    Décembre 2008
    Messages
    1 718
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en électrotechnique retraité

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 718
    Par défaut DataTable: Transférer le fichier langue de PHP à JS
    Bonjour à tous,

    En vue de centraliser mon fichier langue et de faciliter la maintenance, je souhaite transférer une constante objet JS de PHP dans le fichier script JS.
    Définition de la constante à transférer:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    define('DATA_TABLE_MSG', 
    <<<DT_OBJ
    	language: {
    		processing:		"Traitement en cours...",
    		search:			"Rechercher&nbsp;:",
    		lengthMenu:		"Afficher&nbsp;&nbsp; _MENU_ lignes.",									/*"Afficher _MENU_ &eacute;l&eacute;ments",*/
    		info:			"Affichage des lignes _START_ &agrave; _END_ sur un total de _TOTAL_",	/*"Affichage de l'&eacute;lement _START_ &agrave; _END_ sur _TOTAL_ &eacute;l&eacute;ments",*/
    		infoEmpty:		"Affichage de la ligne 0 &agrave; 0 sur un total de 0",					/*"Affichage de l&apos;&eacute;lement 0 &agrave; 0 sur 0 &eacute;l&eacute;ments",*/
    		infoFiltered:	"(filtr&eacute; d'un total de _MAX_ lignes)",							/*"(filtr&eacute; de _MAX_ &eacute;l&eacute;ments au total)",*/
    		infoPostFix:	"",
    		loadingRecords:	"Chargement en cours...",
    		zeroRecords:	"Aucune ligne à afficher",												/*"Aucun &eacute;l&eacute;ment &agrave; afficher",*/
    		emptyTable:		"Tableau vide",
    		paginate: {
    			first:		"&lt;&lt;",	/*"Premier"*/
    			previous:	"&lt;",		/*"Pr&eacute;c&eacute;dent"*/
    			next:		"&gt;",		/*"Suivant"*/
    			last:		"&gt;&gt;"	/*"Dernier"*/
    		},
    		aria: {
    			sortAscending:  ": activer pour trier la colonne par ordre croissant",
    			sortDescending: ": activer pour trier la colonne par ordre décroissant"
    		}
    	}
    DT_OBJ
    );
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <script>
            const language = <?= DATA_TABLE_MSG; ?>;
    </script>
    Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    // Nouvelle version
    $('#table').DataTable( { language } );
    console.log(language);
     
    // Version d'origine
    // Traductions française (les lignes en commentaire correspondent à la traduction officielle de DataTable)
    /*
    $('#table').DataTable( {
    	language: {
    		processing:		"Traitement en cours...",
    		search:			"Rechercher&nbsp;:",
    		lengthMenu:		"Afficher&nbsp;&nbsp; _MENU_ lignes.",									//"Afficher _MENU_ &eacute;l&eacute;ments",
    		info:			"Affichage des lignes _START_ &agrave; _END_ sur un total de _TOTAL_",	//"Affichage de l'&eacute;lement _START_ &agrave; _END_ sur _TOTAL_ &eacute;l&eacute;ments",
    		infoEmpty:		"Affichage de la ligne 0 &agrave; 0 sur un total de 0",					//"Affichage de l&apos;&eacute;lement 0 &agrave; 0 sur 0 &eacute;l&eacute;ments",
    		infoFiltered:	"(filtr&eacute; d'un total de _MAX_ lignes)",							//"(filtr&eacute; de _MAX_ &eacute;l&eacute;ments au total)",
    		infoPostFix:	"",
    		loadingRecords:	"Chargement en cours...",
    		zeroRecords:	"Aucune ligne à afficher",												//"Aucun &eacute;l&eacute;ment &agrave; afficher",
    		emptyTable:		"Tableau vide",
    		paginate: {
    			first:		"&lt;&lt;",	//"Premier"
    			previous:	"&lt;",		//"Pr&eacute;c&eacute;dent"
    			next:		"&gt;",		//"Suivant"
    			last:		"&gt;&gt;"	//"Dernier"
    		},
    		aria: {
    			sortAscending:  ": activer pour trier la colonne par ordre croissant",
    			sortDescending: ": activer pour trier la colonne par ordre décroissant"
    		}
    	}
    } );
    */
    EDIT: Ajout des erreurs signalées dans la console:
    ';' attendu dans le fichier source PHP à la ligne const language = language: {.
    ':' attendu dans le fichier JS à la ligne $('#table').DataTable( { language } );.
    Sur ce dernier point, si je mets les ':', j'ai une erreur de syntaxe.

  2. #2
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 519
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 519
    Par défaut
    Salut,
    si tu mets ton code php entre guillemets :
    Code js : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    const language = "<?= DATA_TABLE_MSG; ?>";
    //ou
    const language = "<?php echo DATA_TABLE_MSG; ?>";
    tu as toujours les mêmes erreurs dans la console ?

    Dans DataTable, il est possible aussi d'utiliser le paramètre url de language Voir la documentation, tout les fichiers .lang sont en bas de la page, tu peux les stocker localement et les appeler depuis l'url.

  3. #3
    Membre éprouvé
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    Décembre 2008
    Messages
    1 718
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en électrotechnique retraité

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 718
    Par défaut
    Merci d'avoir répondu.
    Avec les guillemets les erreurs sont les mêmes.
    Les liens que tu indiques ne fonctionnent pas. Je dois regarder plus avant mais j'ai déjà constaté que le nom des attributs sont différents. Ce doit être un problème de version.
    J'ai plusieurs vérifications à faire avant de continuer cette discussion.

    EDIT: Je pense qu'il vaudrait mieux utiliser les fichiers fournis en plugin. Par contre, il y a visiblement un problème de version:
    • Les plugins de langue ne sont pas numérotés.
    • La version disponible en téléchargement est la 1.10.18 donc antérieure à la mienne que j'appelle avec le lien: 'https://cdn.datatables.net/1.10.19/js/jquery.dataTables.js'.
    • Les attributs ne portent pas le même nom (exemple: processing sur la version stockée sur mon site devient sProcessing sur le plugin à télécharger) (1)
    • Il y a plus d'attributs sur le plugin à télécharger que sur ma version stockée.
    • Je n'ai pas envie de changer de version, vu que j'ai stocké et personnalisé la feuille de style sur mon site.

    (1) Je peux bien sûr modifier le nom des attributs sur les fichiers téléchargés, mais c'est lourd pour la maintenance.

  4. #4
    Membre éprouvé
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    Décembre 2008
    Messages
    1 718
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en électrotechnique retraité

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 718
    Par défaut
    Citation Envoyé par Toufik83 Voir le message
    Dans DataTable, il est possible aussi d'utiliser le paramètre url de language Voir la documentation, tout les fichiers .lang sont en bas de la page, tu peux les stocker localement et les appeler depuis l'url.
    J'ai essayé d'incorporer les fichiers langue fournis par DataTables dans mon site. J'ai été obligé de les bricoler car il ne correspondent pas à ma version 1.10.19 plus récente que celle du site. Malheureusement, ça ne fonctionne pas et mes messages apparaissent en Anglais. De plus je ne comprends pas pourquoi les versions allemande et française n'ont pas les mêmes propriétés.

    EDIT: Oups, j'ai oublié de joindre mes scripts!
    Fichier parent
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
     
    // Section DataTable
    // .............................................................................................
        $(document).ready(function() {
            $('#table').dataTable( {
                "language": {
                    //"url": "dataTables.german.lang"
    				"url": "lang/fr_datable"
                }
            } );
        } );
     
    /*
    // Affectation de DataTable au tableau
    $(document).ready( function () {
        $('#table').DataTable();
    } );
     
    // Version d'origine
    // Traductions française (les lignes en commentaires correpondent à la traduction officielle de DataTable)
    // ATTENTION DANS LES FICHIERS FOURNIS SUR LE SITE IL Y A DES GUILLEMETS SUR LES NOMS D'ATTRIBUTS
    $('#table').DataTable( {
    	language: {
    		processing:		"Traitement en cours...",
    		search:			"Rechercher&nbsp;:",
    		lengthMenu:		"Afficher&nbsp;&nbsp; _MENU_ lignes.",									//"Afficher _MENU_ &eacute;l&eacute;ments",
    		info:			"Affichage des lignes _START_ &agrave; _END_ sur un total de _TOTAL_",	//"Affichage de l'&eacute;lement _START_ &agrave; _END_ sur _TOTAL_ &eacute;l&eacute;ments",
    		infoEmpty:		"Affichage de la ligne 0 &agrave; 0 sur un total de 0",					//"Affichage de l&apos;&eacute;lement 0 &agrave; 0 sur 0 &eacute;l&eacute;ments",
    		infoFiltered:	"(filtr&eacute; d'un total de _MAX_ lignes)",							//"(filtr&eacute; de _MAX_ &eacute;l&eacute;ments au total)",
    		infoPostFix:	"",
    		loadingRecords:	"Chargement en cours...",
    		zeroRecords:	"Aucune ligne à afficher",												//"Aucun &eacute;l&eacute;ment &agrave; afficher",
    		emptyTable:		"Tableau vide",
    		paginate: {
    			first:		"&lt;&lt;",	//"Premier"
    			previous:	"&lt;",		//"Pr&eacute;c&eacute;dent"
    			next:		"&gt;",		//"Suivant"
    			last:		"&gt;&gt;"	//"Dernier"
    		},
    		aria: {
    			sortAscending:  ": activer pour trier la colonne par ordre croissant",
    			sortDescending: ": activer pour trier la colonne par ordre décroissant"
    		}
    	}
    } );
    */
     
     
    document.addEventListener("DOMContentLoaded", function(event) {
    	var search = document.querySelector("input[type='search']");
    	search.focus();
    });
    Fichier langue:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    {
        "processing":     "Traitement en cours...",
        "search":         "Rechercher&nbsp;:",
        "lengthMenu":     "Afficher _MENU_ &eacute;l&eacute;ments",
        "info":           "Affichage de l'&eacute;l&eacute;ment _START_ &agrave; _END_ sur _TOTAL_ &eacute;l&eacute;ments",
        "infoEmpty":      "Affichage de l'&eacute;l&eacute;ment 0 &agrave; 0 sur 0 &eacute;l&eacute;ment",
        "infoFiltered":   "(filtr&eacute; de _MAX_ &eacute;l&eacute;ments au total)",
        "infoPostFix":    "",
        "loadingRecords": "Chargement en cours...",
        "zeroRecords":    "Aucun &eacute;l&eacute;ment &agrave; afficher",
        "emptyTable":     "Aucune donn&eacute;e disponible dans le tableau",
        "paginate": {
            "first":      "&lt;&lt;",	//"Premier"
            "previous":   "&lt;",		//"Pr&eacute;c&eacute;dent"
            "next":       "&gt;",		//"Suivant"
            "last":       "&gt;&gt;"	//"Dernier"
        },
        "aria": {
            "sortAscending":  ": activer pour trier la colonne par ordre croissant",
            "sortDescending": ": activer pour trier la colonne par ordre d&eacute;croissant"
        }
    }
     
     
    /*
    {
        processing:     "Traitement en cours...",
        search:         "Rechercher&nbsp;:",
        lengthMenu:     "Afficher _MENU_ &eacute;l&eacute;ments",
        info:           "Affichage de l'&eacute;l&eacute;ment _START_ &agrave; _END_ sur _TOTAL_ &eacute;l&eacute;ments",
        infoEmpty:      "Affichage de l'&eacute;l&eacute;ment 0 &agrave; 0 sur 0 &eacute;l&eacute;ment",
        infoFiltered:   "(filtr&eacute; de _MAX_ &eacute;l&eacute;ments au total)",
        infoPostFix:    "",
        loadingRecords: "Chargement en cours...",
        zeroRecords:    "Aucun &eacute;l&eacute;ment &agrave; afficher",
        emptyTable:     "Aucune donn&eacute;e disponible dans le tableau",
        paginate: {
            first:      "&lt;&lt;",	//"Premier"
            previous:   "&lt;",		//"Pr&eacute;c&eacute;dent"
            next:       "&gt;",		//"Suivant"
            last:       "&gt;&gt;"	//"Dernier"
        },
        aria: {
            sortAscending:  ": activer pour trier la colonne par ordre croissant",
            sortDescending: ": activer pour trier la colonne par ordre d&eacute;croissant"
        }
    }
    */

  5. #5
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    ton langage doit arriver dans ton js sous forme de json corretement formaté ..
    Que vois tu dans le code html source de ta page ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    const language = "<?php echo DATA_TABLE_MSG; ?>";
    regarde peut être du coté de json_encode ...
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  6. #6
    Membre éprouvé
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    Décembre 2008
    Messages
    1 718
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en électrotechnique retraité

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 718
    Par défaut
    Tu as répondu avant que j'édite le point précédent. J'ai abandonné l'idée de transférer depuis PHP. Je cherche à adopter les fichiers langue du site DataTables mais du fait des changement de versions j'ai les soucis signalés plus haut #4.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    1- Ce n'est pas compliqué : il faut créer un objet.
    Il ne manque que les {... } autour :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	const language = {<?= DATA_TABLE_MSG; ?>};
    On obtient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	console.log( language.language.processing );
    	console.log( language.language.infoEmpty );
    	console.log( language.language.paginate.previous );
    	console.log( language.language.aria.sortAscending );
    ...
    N.B. language.language.... :
    • le 1er est le nom de la variable JS
    • le 2ème est contenu dans la constante PHP



    2- Sinon, on peut éviter la répétition language.language.... avec une CONSTANTE PHP légèrement modifiée.

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?php
    define('DATA_TABLE_MSG', 
    <<<DT_OBJ
    	{
    		processing:		"Traitement en cours...",
    		search:			"Rechercher&nbsp;:",
    		...
    		...
    	}
    DT_OBJ
    );
    ?>
    Du coup, les {...} y sont déjà :
    Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    	const language = <?= DATA_TABLE_MSG; ?>;
     
    	console.log( language.processing );
    	console.log( language.infoEmpty );
    	console.log( language.paginate.previous );
    	console.log( language.aria.sortAscending );

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Transférer des fichiers avec php
    Par diable2010 dans le forum Langage
    Réponses: 1
    Dernier message: 18/09/2008, 09h20
  2. [Excel] Comment lire des fichiers excel avec php?
    Par dear_rihab dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 02/11/2007, 12h38
  3. Transférer des fichiers avec un câble réseau
    Par denis finch dans le forum Développement
    Réponses: 5
    Dernier message: 08/11/2005, 16h08
  4. [SimpleXML] Comment faire pour transformer un fichier XML en PHP ?
    Par magic8392 dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 23/09/2005, 16h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo