Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 27-10-2009 16:07:49

GueloSuperStar
Membre
Lieu: Paris
Date d'inscription: 05-08-2009
Messages: 107

Zend +traduction + javascript

Bonjour les zender's

Me voilà confronter à une petite question.... smile

Pour faire proprement, je sépare mon JS de mon code (dans un fichier js, dans le dossier accessible) .
Ensuite je fait une inclusion propre avec $this->headScript()->appendFile('monFichierjs.js').

Jusqu'ici rien de bien difficile et passionnant....

Mais la ou sa ce corse légèrement, c'est quand j'ai besoin d'afficher du texte(popup,dans le html...) et que je veux qu'il soit localisable, c'est à dire un texte en fonction de la langue utilisateur.

Comment on peux faire sa sans un fichier Js inclus??

J'aimerais bien avoir un début d'idées, de solution ou bien le traitement a effectuer pour réaliser cette opération digne d'un Zender....


Merci pour vos réponse les Zender's wink

Dernière modification par GueloSuperStar (27-10-2009 16:08:10)


A+ Guelo Super Star

Hors ligne

 

#2 27-10-2009 16:23:47

ndesaleux
Membre
Date d'inscription: 16-04-2007
Messages: 196
Site web

Re: Zend +traduction + javascript

Ta popup a bien une URL ? Tu peux donc passer la localisation via un paramètre

Hors ligne

 

#3 27-10-2009 17:06:26

nORKy
Membre
Date d'inscription: 06-03-2008
Messages: 1098

Re: Zend +traduction + javascript

ndesaleux a écrit:

Ta popup a bien une URL ? Tu peux donc passer la localisation via un paramètre

Pas forcément, moi j'ai des popup générer entièrement javascript.

Moi, je dirais plutot que de faire un truc du genre :

Code:

<?php
$this->headScript()->appendFile('lang.'.$lang.'.js').

----
Gruiiik !

Hors ligne

 

#4 27-10-2009 17:45:07

ndesaleux
Membre
Date d'inscription: 16-04-2007
Messages: 196
Site web

Re: Zend +traduction + javascript

Un des intérêts d'avoir JS séparé du HTML est  le découplage de la logique information HTML, de la logique interaction JS. Je passe sur la couche présentation CSS (oups, c'est fait ^^). Ce qui te permet d'avoir un site fonctionnel sans JS mais bon apparement ce n'est pas le débat ici.

Au fait, tu peux faire des popups totalement en JS, mais ayant une URL ^^ (au hasard, les popups en ajax).

@norky: J'aimerai bien connaître les raisons de ton choix car je n'en vois aucune (accessibilité, coût en BP )

Petit PS :
Concernant les performances, il est conseillé de faire les appels de fichiers JS juste avant la fermeture du body et non pas dans le head

Dernière modification par ndesaleux (27-10-2009 17:48:38)

Hors ligne

 

#5 27-10-2009 18:45:15

GueloSuperStar
Membre
Lieu: Paris
Date d'inscription: 05-08-2009
Messages: 107

Re: Zend +traduction + javascript

@ndesaleux bien vu pour le petit ps smile

En ce qui concerne mon problème je ne peux pas faire comme tu le suggère @ndesaleux car en gros j'ai cette structure la :

Code:

Dans mon fichier js : 
  $(document).ready(function(){
    ready_init_fonction();
});

var ready_init_fonction= function() {
  $("#monLien").click(function(){
  $("#moncontent").html('coucou')
});

}

Dans ce cas la j'ai pas d'appel à la fonction ou je pourrais lui passer en paramètre la localisation

Tu me suis?

j'espère avoir été assez clair dans mes explication car pas très évident.


@nORKy
j'utilise Zend_Translate je peux pas faire comme tu me dis si ?
$this->headScript()->appendFile('lang.'.$lang.'.js').

Merci les Zender's

Dernière modification par GueloSuperStar (27-10-2009 18:45:58)


A+ Guelo Super Star

Hors ligne

 

#6 27-10-2009 20:18:10

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Re: Zend +traduction + javascript

dans mon contrôleur je positionne la valeur de la langue dans la vue

Code:

$this->view->lang = "fr";

Dans ma vue je mets une bout de JS qui positionne une variable JS

Code:

<script>
   App.lang = "<?php echo $this->lang; ?>";
</script>

ensuite dans n'importe quelle partie de mon code JS je peux utiliser App.lang
pour ce qui est de traduire les éléments d'u-interface JS comme les massages et autres labels j'ai des fichiers de langues que je charge avec ajax ces fichiers sont des fichier contenant du JSON statique (pour utiliser le cache et aller plus vite)

Code:

{
UserForm {
   title: "Edition d'un Utilisateur",
   name: "Nom",
   nameError: "Un nom ne peut que contenir des ...."
   ...
}

ainsi dans mes javascript il n'y a aucune chaîne de caractères autre de des élément techniques j'utilise systématiquement des objets

Code:

aform = new FormPanel({
title : UserForm.title,...

ainsi toute mes application sont traduisible par simple ajout de nouveaux fichiers de langue. et une mise ajout de la liste des langue gérée.

voici un exemple de fichier de langue

Code:

{
    ContactList: {
        title: 'Mes contacts',
        add: 'Ajouter un contact',
        edit: 'Modifier le contact',
        remove: 'supprimer le contact',
        removeError: 'impossible de supprimer ce contact',
        removeConfirm: 'Le contact à été supprimé'
    },
    Contact: {
        title: 'Contact : ',
        wait: {
            title : 'Veuillez Patienter',
            msg: 'SVP .....'
        },
        genre: [
            ['0', 'Homme'],
            ['1', 'Femme'],
            ['2', 'Enfant']
        ],
        save: 'Enregistrer',
        reset: 'Annuler'
    }
}

et un exemple de js qui l'utilise

Code:

        this.win = new Ext.Window({
            id: 'contact-win' + this.id,
            title:  this.locale.title + this.name,
            width: 400,
            height: 230,
            iconCls: this.iconCls,
            shim:false,
            animCollapse:false,
            closable:true,
            resizable: true,
            constrainHeader:true,
            bodyStyle:'padding:5px 5px 0',
            border:false,
            layout: 'fit',
            buttonAlign:'center',
            items: this.form

        });

A+JYT

Hors ligne

 

#7 28-10-2009 07:26:48

nORKy
Membre
Date d'inscription: 06-03-2008
Messages: 1098

Re: Zend +traduction + javascript

ndesaleux a écrit:

@norky: J'aimerai bien connaître les raisons de ton choix car je n'en vois aucune (accessibilité, coût en BP )

Argument bidon. A partir du moment ou tu utilises javascript et de la localisation, tu vas pas me dire que tu te soucis de la BP et de qq ko.. Dans ce cas la, il fallait pas utiliser JS (et encore moins des images sur ton site !)
(cf post de sekaijin ci-dessus identique à ce que je fais, a part qu'il les récupères via ajax)

Ps : on est plus à l'époque du net ou on avait tous (du moins ceux qui avait le net !) des 56k...


----
Gruiiik !

Hors ligne

 

#8 28-10-2009 08:38:18

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: Zend +traduction + javascript

@GueloSuperStar :
J'ai 2 types de javascript : les "librairies" qui sont des js statiques et des javascripts dynamiques qui sont liés à une page donnée.
Ces js dynamiques sont générés en PHP et donc je peux utiliser mon translateur dedans.

Si vraiment tu veux que tous tes js soient statiques, tu peux mettre dans ton html, dans une div cachée des contenus localisés et quand tu en as besoin en javascript, tu vas les chercher dans ton html.

A+, Philippe


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

#9 28-10-2009 08:47:53

GueloSuperStar
Membre
Lieu: Paris
Date d'inscription: 05-08-2009
Messages: 107

Re: Zend +traduction + javascript

@sekaijin merci pour toute ses infos, si je comprend bien il faut que je fasse obligatoirement un fichier de langue spécifique pour le js (ce que je voulais éviter sad )?? et ensuite soit je l'inclus comme dit @nORKy soit je récupère les information en ajax.

C'est un peu lourd et contraignant tout de même vous trouvez pas.... mais en même temps si c'est le seul moyen de faire, il va falloir que je m'y mette.

Comment tu fais ta récupération en ajax @sekaijin? A chaque fois que tu as besoin d'une traduction tu fait une requête en ajax?

En tout cas merci les Zender's pour votre aide et votre temps prit pour me répondre smile

Dernière modification par GueloSuperStar (28-10-2009 08:48:04)


A+ Guelo Super Star

Hors ligne

 

#10 28-10-2009 08:54:25

GueloSuperStar
Membre
Lieu: Paris
Date d'inscription: 05-08-2009
Messages: 107

Re: Zend +traduction + javascript

@Philippe :

Moi aussi j'ai des librairies JS et des scripts qui ne sont appelé que dans certaines partie du site.

Moi mes scripts qui sont appelé spécifiquement dans chaque partie sont des fichiers js donc en gros "statiques"

je veux bien faire comme tu dit en php mais ça veux dire, soit je fait mon traitement dans ma "view"ou mon "controller" non?


Comme ceci :

Code:

<?php $this->headScript()->captureStart();?>

Mon code javascript

<?php $this->headScript()->captureEnd();?>

A moins que tu fasse autrement?

Merci les Zender's

Dernière modification par GueloSuperStar (28-10-2009 08:55:02)


A+ Guelo Super Star

Hors ligne

 

#11 28-10-2009 09:16:49

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: Zend +traduction + javascript

@GueloSuperStar : je suis beaucoup plus bourrin que ça au naturel smile

dans mon contrôleur, je fais

Code:

$this->view->jsCode = $this->view->directRender("toto.js.phtml");
echo $this->view->render("toto.phtml");

(note : directRender est une fonction que j'ai ajouté à ma vue pour afficher un truc sans layout, mais ça date d'une version antédiluvienne du ZF... il y a certainement mieux maintenant... Je te donne juste un principe !)

et dans ma vue toto.phtml je fais un

Code:

<?= $jsCode ?>

comme ça j'ai accès aux mêmes variables de vue dans mon toto.js.phtml et mon toto.js (notamment j'ai accès à mon translator).

A+, Philippe


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

#12 28-10-2009 10:07:23

ndesaleux
Membre
Date d'inscription: 16-04-2007
Messages: 196
Site web

Re: Zend +traduction + javascript

nORKy a écrit:

ndesaleux a écrit:

@norky: J'aimerai bien connaître les raisons de ton choix car je n'en vois aucune (accessibilité, coût en BP )

Argument bidon. A partir du moment ou tu utilises javascript et de la localisation, tu vas pas me dire que tu te soucis de la BP et de qq ko.. Dans ce cas la, il fallait pas utiliser JS (et encore moins des images sur ton site !)
(cf post de sekaijin ci-dessus identique à ce que je fais, a part qu'il les récupères via ajax)

En quoi, est ce un argument bidon. Si tu utilise des bibliothèques JS, par exemple Jquery, tu utilises les CDN de google via http://ajax.googleapis.com/ajax/libs/jq … ery.min.js (C'est pas ta BP qui est prise mais celle de google, de plus si tous les développeurs le font, tu as de forte chance que le fichier soit en cache chez le client). Gain de ton coté et au niveau de ton client ^^

De plus, le fait d'avoir plusieurs langues ne t'oblige nullement de charger toutes les langues à chaque fois. Tu ne charge que la localisation nécessaire. Au mieux tu fais un chargement via Ajax de la traduction nécessaire, au pire tu recharges la page avec les informations nécessaire. Je te retourne la question pourquoi surcharger la page avec des informations non nécessaire, comprendre les traductions. C'est peut être jouable avec des langues telles que de l'anglais et du français. Mais dès que tu gères des langues comme l'arabe ou tout autre langue qui se lit de droite à gauche, tu dois aussi penser à adapter l'interface. C'est aussi ça, la localisation.
Lorsque tu dois gérer un site traduit en 10-20 langues, cela devient vite une surcharge inutile bien que cela soit possible pour 2-3 langues.

JS n'est la que pour apporter du confort d'utilisation à l'utilisateur, ni plus ni moins.

Ps : on est plus à l'époque du net ou on avait tous (du moins ceux qui avait le net !) des 56k...

Est ce une raison pour faire des sites qui sont hyper lourd ? Après si tu veux avoir des problématiques lors de surcharge de serveur, tu penseras peut être à gagner quelques petits ko pour améliorer l'expérience utilisateur.

Cf http://performance.survol.fr/2008/06/a-quoi-ca-sert/ et les autres articles sont tout aussi intéressant.

Après chacun voit midi à sa porte, je propose vous disposez. Je te fais simplement part de mon expérience de la gestion de la localisation.

Dernière modification par ndesaleux (28-10-2009 10:18:42)

Hors ligne

 

#13 28-10-2009 11:07:15

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Re: Zend +traduction + javascript

j'ai abandonné les js dynamique en php car ça n'apporte pas grand chose et ça ralenti énormément les chargement.

en utilisant que du javascript statique le navigateur garde en cache les js et surtout leur forme compilés (aujourd'hui tout navigateur moderne utilise la compilation à la volée) du coups les perfs sont excellentes.
je m'arrange pour charger les librairies nécessaire à mon appli au fur et à mesure des besoins.

reste les partie dynamiques.
pour celle-ci j'utilise JSON et AJAX c'est vrai pour les données et les langues

pour donner un ordre d'idée de la taille j'ai une application de 26 000 lignes de code JS et 30 000 ligne de code php
le tout est très dynamique et fluide à l'usage.

pour en arriver là j'ai aussi abandonner la transformation de page HTML je construit toute mon IHM en js

avec une approche comme celle de JQuery on produit du code HTML avec le PHP puis ce code HTML qui contient les prémisses de l'IHM et les données, est interprété par le navigateur qui en fait un DOM ensuite JQuery transforme ce DOM pour produire l'IHM désirés avec ces données. et cela à chaque fois qu'on charge la page.

mon PHP produit une page HTML ne contenant que les headers un bout de JS de passage de variables et l'inclusion des librairies. ce HTML va donner un DOM vide dans le navigateur. le JS va alors construire le DOM directement tel que l'IHM doit être. puis Ajax viendra y placer les données. lorsqu'on reviens sur la page il n'y a que les donnée qui sont généré par le serveur et la construction de l'IHM est éjà compilé coté navigateur.

du coup je n'ai qu'une seule page HTML dans toute mon application
c'est le js qui assure la navigation dans l'IHM sans solliciter le server (sauf chargement dynamique de complément de lib)
le serveur lui ce contente d'assurer son travail fonctionnel.

on pourrait penser qu'alors ZF ne sert à rien
en fait si car un appel ajax c'est un appel HTTP normal sauf que la vue et en JS
mes contrôleurs invoque un view render qui produit du JSON

j'ai amélioré mon approche en construisant un framework MVC en js pour la partie IHM la partie M reposant sur AJAX et utilise ZF côté server

du coup tout deviens très modulaire et on peut radicalement changer d'IHM (de look mais surtout de feel) sans impacter un seul élément côté serveur.

en fait c'est très proche d'une architecture client/serveur mais contrairement à cette architecture telle que définie dans les années 80s le client est déployé automatiquement via la page HTML et le serveur n'est pas un serveur de données mais un serveur applicatif.

ce que j'ai retenu de cette expérience c'est quelle amène à réfléchir sur ce qui est de la logique d'interface utilisateur et qui donc est porté par js et sur ce qui est de la logique applicative et qui donc est porté par le serveur.

autre gain si une autre application dans l'entreprise à besoin d'un des services de mon appli il lui suffit d'invoquer une action d'un contrôleur qui se comporte comme sur service web

A+JYT
PS: peut être devrais-je faire un article complet sur le sujet.

Hors ligne

 

#14 28-10-2009 12:03:04

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: Zend +traduction + javascript

@sekaijin :
Sur le principe on n'est pas si loin l'un de l'autre (t'es un peu plus jusqu'auboutiste). Globalement l'essentiel de mon JS est effectivement statique. Ensuite j'associe à une fenêtre de mon appli quelques lignes JS générées dynamiquement qui appellent des librairies JS statiques.
Chez toi c'est juste un passage de variable et chez moi c'est quelques lignes de code qui activent mes librairies en leur envoyant les bons paramètres, mais on est dans le même ordre d'idée.

Par contre, le fait de générer toute l'IHM en JS, c'est un cas très particulier. C'est intéressant pour un intranet ou une application.
Par contre c'est souvent inutilisable sur un site "standard". J'ai souvent besoin sur mes sites d'avoir
- des URLs différentes entre les pages (ne serait-ce que pour envoyer un lien par email)
- des pages lisibles par un moteur de recherche

Dans tous les cas, j'ai travaillé une fois sur un projet "full JS" comme le tien et effectivement, je retrouvais les mêmes problématiques que le bon vieux client-serveur de ma jeunesse (avec notamment le MVC client cher à swing pour les adeptes de java smile )

A+, Philippe


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

#15 29-10-2009 07:54:58

GueloSuperStar
Membre
Lieu: Paris
Date d'inscription: 05-08-2009
Messages: 107

Re: Zend +traduction + javascript

Bonjour les Zender's

Donc pour faire ce que je veux, il faut soit que j'inclus un fichier toto.js.phtml qui contient mon js comme le suggère @philippe ou soit que je créer un Xml au format Json et récupère à la volée la traduction qu'il me conviens.

Est-ce bien sa ou je suis à coté de la plaque.... sad


A+ Guelo Super Star

Hors ligne

 

#16 29-10-2009 08:44:44

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: Zend +traduction + javascript

Pour ma solution c'est bien ça !

A+, Philippe


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages