11548 sujets

JavaScript, DOM et API Web HTML5

Bonjour,

Voila je m'initie aux nouvelles technologies du web que je ne maitrise pas du tout ! J'ai cependant quelques connaissances en php.

De ce fait je développe une page toute simple qui contient du javascript (via jQuery) et du code PHP. Pour me mettre en situation, je souhaite proposer plusieurs langues à cette page : français et anglais. J'ai tout logiquement créé un répertoire "locales" dans lequel j'ai mis un fichier fr-fr.php et un fichier en-en.php. Au chargement de la page j'ai un code qui choisi tel ou tel fichier selon l'environnement du client. Bref...

Ces fichiers se composent tels que :

$pages_index_join_label_nom = "Nom";
$pages_index_join_label_prenom = "Prénom";
$pages_index_join_label_pseudo = "Pseudo";
$pages_index_join_label_mail = "Courriel valide";
$pages_index_join_label_mdp1 = "Mot de passe";
$pages_index_join_label_mdp2 = "Confirmer le mot de passe";


Ma question est assez simple. Je réussie à faire ce que je veux dans le cadre du code php mais pas dans le javascript. Par exemple, j'ai un formulaire d'inscription qui contrôle les champs via JQuery et des expressions régulières. Quand l'utilisateur se plante (par exemple pas de @ dans le mail) j'ai un message qui s'affiche sur le coté de l'input via l'événement focusout de l'input en question. Je me demande donc comment gérer les fichiers de langages dans cette fonction javascript ?

Mes recherches sur la toile m'ont laissé entendre que JSON serait une solution mais je ne comprend pas trop comment le mettre en place ici sans trop alourdir le nombre de requêtes vers le serveur. Une autre solution, l'AJAX, via le XMLHttprequest mais encore une fois je ne vois pas trop l'utilité ici, je me dit qu'il y a plus simple pour gérer tout celà. L'idée serait d'avoir des constantes communes aux php et au javascript même si dans la pratique je ne vois pas trop comment celà est possible, l'un étant côté serveur et l'autre côté client...

Si vous avez des astuces pour gérer le multi-language dans ce type d'environnement je suis preneur Smiley biggol

Cordialement,

Ludovic
Modifié par revlam (03 Sep 2011 - 01:35)
L'utilisation de JSON tend à réduire le nombre de requêtes, donc je cale pas trop pourquoi tu parles de "trop alourdir le nombre de requêtes vers le serveur".

D'autant plus que JSON est utilisé AVEC AJAX, majoritairement.

Comment est rédigé le message ? Tu écris bien le message quelque part. Eh bien ce message doit être dynamiquement rempli.
Si tu as le tout dans un fichier JS, utilises une liste de variables initialisées DANS ta page (donc pas dans un média externe). Si tu ne souhaites pas passer par là, alors oui, AJAX pour obtenir le message.

Il n'existe qu'une solution pour conjuguer PHP et JS en tant que fichier externe: donner un fichier PHP en tant que source de la balise script, et servir ce PHP en tant que JS (via le header content-type approprié dans le PHP), et c'est, de mon point de vue, très sale (mais utile dans des cas rarissimes).
Hello,

Un petit conseil au passage, au lieu d'utiliser une variable par phrase à traduire, passe plutôt par un tableau associatif du genre :
$trad = array(
		'fr' => array(
			'home' => array(
				'title' => 'Mon site incroyable'
			)
		),

		'en' => array(
			'home' => array(
				'title' => 'my awesome website'
			)
		),
	)


	//Appel dans la page
	$trad[$langue]['home']['title']


Tu pourras également utiliser la même structure dans ton json
trad = {
	fr: {
		home: {
			bla: 'bla'
		}
	},
	
	en: {
		home: {
			bla: 'bla mais en anglais'
		}
	},
}


Cela dans le but d'éviter de multiplier les variables, et de garder un code plus structuré.
Juste pour info, PHP dispose de l'extension GetText qui est faite pour gérer les traductions de sites. Histoire de pas réinventer la roue et d'utiliser des outils vraiment pratique. Et dans le cas où l'extension n'est pas activée chez votre hébergeur (très rare) il est possible d'utiliser la bibliothèque php-gettext.

https://launchpad.net/php-gettext/

Un tuto pour voir comment ça marche :

http://www.grafikart.fr/tutoriels/php/internationaliser-site-gettext-104
Modifié par jb_gfx (02 Sep 2011 - 15:21)
jb_gfx a écrit :
Juste pour info, PHP dispose de l'extension GetText qui est faite pour gérer les traductions de sites. Histoire de pas réinventer la roue et d'utiliser des outils vraiment pratique. Et dans le cas où l'extension n'est pas activée chez votre hébergeur (très rare) il est possible d'utiliser la bibliothèque php-gettext.

https://launchpad.net/php-gettext/

Un tuto pour voir comment ça marche :

http://www.grafikart.fr/tutoriels/php/internationaliser-site-gettext-104


Oui je connais cette fonction mais sauf erreur de ma part ça ne règle pas mon soucis de traduire les messages inclus dans les JS.
Florian_R et Lpu8er merci de vos conseils avisés.
Je pensais que JSON n'était pas dédié a l'utilisation que je voulais faire mais encore une fois je ne connais pas bien cette technique. Je me met dans la documentation du coup, merci de m'avoir aiguillé dans mon choix de techno.

Ludo
Oui et non.

En fait si tu suis ce conseil :

a écrit :

Si tu as le tout dans un fichier JS, utilises une liste de variables initialisées DANS ta page (donc pas dans un média externe). Si tu ne souhaites pas passer par là, alors oui, AJAX pour obtenir le message.


Alors GetText peut être utiliser pour traduire tes scripts JS. Personnellement c'est comme ça que je fais car je trouve que c'est beaucoup plus propre. En plus comme ça j'utilise les mêmes traductions pour la validation côté client et côté serveur.
jb_gfx a écrit :
Oui et non.

En fait si tu suis ce conseil :


Si tu as le tout dans un fichier JS, utilises une liste de variables initialisées DANS ta page (donc pas dans un média externe). Si tu ne souhaites pas passer par là, alors oui, AJAX pour obtenir le message.


Alors GetText peut être utiliser pour traduire tes scripts JS. Personnellement c'est comme ça que je fais car je trouve que c'est beaucoup plus propre. En plus comme ça j'utilise les mêmes traductions pour la validation côté client et côté serveur.

Je penses comprendre. En gros je place mes variables entre des bornes <script></script> de ma page à traduire. Mais dans ce cas, celà veut dire que le contenu de ces bornes <script> va varier d'une page à l'autre ? Car dans ce cas je préfère avoir un seul fichier langage, externalisé pour faciliter la travail du "traducteur".
Je suis peut être à côté de la plaque, le cas échéant, désolé de mon incompétence Smiley smile
Je suis en plein dans le docs au bout d'un moment on s'y perd !!!
Merci pour ta patience.

Ludo
Gettext, c'est sympa sur le papier car puissant niveau perfs. Le souci, (en tous cas la dernière fois que je me suis penché dessus), c'est le manque d'outils autres que POedit pour générer les .po.

Sur un projet ou c'est le dev qui saisit tous les textes, ça roule. Pour un blog ou n'importe qu'elle autre site avec un backoffice derrière, je n'avais pas trouvé de solutions pour que les rédacteurs puissent saisir du contenu et mettre à jour les .po en conséquence.

D'ailleurs si quelqu'un à des infos là-dessus au passage...
Euh... GetText c'est pour les textes en dur... . Pour le rédactionnel ou n'importe quel contenu éditable depuis le back-office ça va dans la base de données.
Modifié par jb_gfx (02 Sep 2011 - 20:43)
Yep, j'ai mal tourné mon message.

Ce que je voulais juste dire, c'est que c'est pas non plus la solution universelle, si tu n'as que du rédactionnel et juste ton header et footer en dur, je vois pas trop l'intêret.
Il est évident que si tu n'en as pas besoin, ce n'est pas la bonne solution. C'est valable pour tout, pas que GetText. Smiley smile

Maintenant pour un site multilingue, même si il y a peu de texte, pourquoi ne pas l'utiliser ? Puisque c'est fait pour, que ça existe et que ça fonctionne très bien. Aucun intérêt de réinventer la roue quand on a un outil adapté (et en plus libre).

En plus POEdit c'est super pratique, super simple, disponible sur tous les OS. En 10 minutes ton traducteur sait comment l'utiliser, et c'est gratuit. Au final tu récupères des fichiers .po que tu peux utiliser directement sur ton site, pas besoin de copier/coller et échapper des dizaines, centaines ou milliers de lignes de textes pour les inclure dans des fichiers PHP ou XML.
Modifié par jb_gfx (02 Sep 2011 - 20:57)
Bien j'ai pas mal avancé ! J'ai réussi à récupérer les variable de mon fichier "lang/traduction.json" construit sur le modèle présenté ci-dessus. Seul hic je ne parvient pas à les récupérer dans php. Pour ce faire j'ai le code suivant :


$traduction = json_decode(file_get_contents($env_path_site . "lang/trad.json"));
print $traduction->{"fr.title"}; 


Ce n'est pas la bonne manière ?

Edit : autant pour moi je viens de trouver un façon de le faire :
$t = json_decode($traduction, true);


Je partait du principe que ca fonctionnait comme sur JQuery... merci pour votre aide, je n'ai plus qu'a parcourir le tableau pour trouver ce qu'il me faut !
Modifié par revlam (03 Sep 2011 - 01:35)