Surveiller ce forum | Commencer une nouvelle discussion Commencer une nouvelle discussion
Gestion des libellés et des langues [ Répondre ]
Par : Benjamin Leperchey on 2007-06-17 22:36
[forum:52745]
Contrairement au framework serveur, le framework client riche n'offre pas de gestion des langues.

J'imagine que tous les projets qui ont eu besoin ont trouvé des solutions. Ca pourrait être intéressant de les mettre en commun, pour définir un "composant" qui normaliserait ces pratiques et permettrait d'éviter, y compris pour les applications monolingues, de mettre les libellés et les messages dans le code Javascript.

Il y a déjà la solution utilisée dans le fw_xml : définir autant de variables que de ressources, en postfixant par le code la langue.

Cette méthode a toute sa place dans le framework lui-même, puisque le nombre de messages est limité et qu'on s'en sert seulement quand quelque chose va mal -- c'est à dire précisément quand on doit éviter de bidouiller des trucs compliqués.

Pour le code applicatif, ce n'est pas très pratique : d'abord les textes sont toujours dans le Javascript (même s'ils sont quand même bien séparés du code), lequel est d'ailleurs passablement alourdi, et ça oblige à des contorsions du genre 'var test=GetCookie(...); eval("ma_chaine_"+test)' pour récupérer la chaîne.

A mon avis, pour les messages applicatifs, il serait préférable de définir les libellés (et les url des images quand elles contiennent du texte) dans un fichier XML global (dans la frame 'BODY'), avec des fonctions standard qui récupèrent automatiquement le libellé dans la bonne langue. Dans le code, on ferait simplement :

var message = parent.ComposantI18N.getResource('message_action_effectuee');
alert(message);

pour utiliser la ressource définie dans le XML :

<properties>
<default>
<message_action_effectuee>L'action a été effectuée</message_action_effectuee>
</default>
<en>
<message_action_effectuee>The action was completed successfully</message_action_effectuee>
</end>
</properties>


La méthode se chargerait de récupérer la langue dans le cookie et renverrait, par ordre de préférence :
1) la chaine pour cette langue (pour l'anglais, dans <en>),
2) la chaîne pour la langue par défaut (dans <default>),
3) le code passé en paramètre si aucune ressource ne correspond.

Pour éviter de charger un XML avec tous les libellés dans toutes les langues au démarrage de l'application (il sera vite gros), on pourrait imaginer un système où on ne charge que les libellés de la langue utilisée : les libellés seraient dans des fichiers properties_XX.xml, comme pour le serveur. Il serait chargé au démarrage, et rechargé lors du changement de langue :

parent.ComposantI18N.setLanguage('FR');

changerait le cookie et chargerait (de façon synchrone) le XML pour la langue demandée (nota: ça compliquerait la gestion du cas 2, la 'langue par défaut'). On pourrait même aller plus loin en découpant les libellés en "modules", qu'on pourrait charger indépendamment les uns des autres.




Et vous, comment faites-vous ?

FEDER Powered By FusionForge Collaborative Development Environment Charte d'utilisation / Nous contacter / Mentions légales Haut de page