Forums : Xul, Xbl, JS...

Aller à la discussion :  Plus récente Plus ancienne

# [Résolu] Bug aléatoire pour un changement de langue... à n'y rien comprendre...

Envoyé par : Raphael

Date : 25/09/2006 18:22

Bonjour, j'ai un bug incompréhensible durant mon changement de langue :

prefs.xul

<listbox id="languageSelector" flex="1" >
			<listitem class="listitem-iconic" image="us.png" label="en-US" />  
			<listitem class="listitem-iconic" image="fr.png" label="fr-FR" />
</listbox>
<vbox>
			<label id="test" value="test" />
			<button class="bt-ok" label="&prefs.use;" oncommand="useLanguage();"/>
</vbox>

prefs.js

function useLanguage()
{
var CC = Components.classes;
var Ci = Components.interfaces;
var lng = document.getElementById('languageSelector').selectedItem.label;

document.getElementById('test').setAttribute('value',lng);
var prfs = CC["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefBranch);
prfs.setCharPref("general.useragent.locale", lng);

var prop = CC["@mozilla.org/file/directory_service;1"].getService(Ci.nsIProperties);
var drct = prop.get("PrefD", Ci.nsIFile);
			
var file = CC["@mozilla.org/file/local;1"].createInstance();
file.QueryInterface(Ci.nsILocalFile);
	
file.initWithPath(drct.path);
file.appendRelativePath("user.js");
		
var prfr = CC["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefService);
prfr.savePrefFile(file);
}

J'ai un label test pour vérifier que la valeur arrive bien dans la fonction... et c'est le cas, elle arrive bien sur pression du bouton.

Problème : Ca marche... Je change la langue 3, 4, 5 fois... je relance l'appli. entre chaque changement et effectivement, la langue change bien, je me dis donc que tout va bien... Je ne touche à rien, je ne fais que continuer de m'amuser à changer la langue et puis au bout de la 6° ou 7° fois, ben ça ne marche plus ! Mon label test prend toujours la valeur, mais on dirait qu'elle ne s'enregistre plus puisque lorsque je ferme mon appli. puis la réouvre, la langue est la même et les changements ne sont pas pris en compte.

Bref, je ne comprends rien à ce bug qui me parait aléatoire au possible... Auriez-vous une idée par hasard ?

Et puis pourriez-vous m'indiquer un code pour récupérer les infos de préférences comme la langue, afin de tester et d'afficher dans un label la valeur stockée pour la langue, histoire d'essayer de déterminer le noeud du problème... merci.

# Re: Bug aléatoire pour un changement de langue... à n'y rien comprendre...

Envoyé par : Raphael

Date : 29/09/2006 19:34

UP... Après quelques tests, il semblerait que la langue change bien pour toute ouverture de nouvelle fenêtre : En fait, j'ai une fenêtre principale et une fenêtre "préférences" où je choisis la langue. Lorsque je change la langue, que je ferme les préférences et la réouvre, effectivement, ma fenêtre de préférences a bien changé ! Mais lorsque je ferme mon application, et la réouvre, les changements n'ont apparemment pas été pris en compte.

C'est quand même étrange car d'après ce post : http://xulfr.org/forums/read.php?1,6138

Et bien, la 2° partie du code devrait me sauvegarder les infos non ? Et il me semble que ça marchait à un moment... et je n'ai pourtant rien touché depuis...

Ai-je râté un épisode ? Faut-il créer un fichier user.js dont il est fait mention ? Ou est-ce un fichier interne à XULRunner ? Mais après recherches sur mon disque, je ne trouve aucun fichier user.js... Est-ce à moi de le créer ? Dois-je en créer un pour chacun de mes utilisateurs ? Est-ce à moi de gérer tout ça en manuel ? genre : sauvegarde dans user-nicolas.js, user-stephane.js,... ?

# Re: Bug aléatoire pour un changement de langue... à n'y rien comprendre...

Envoyé par : thefab

Date : 30/09/2006 16:14

Faut-il créer un fichier user.js dont il est fait mention ?

Non, c'est un fichier interne à XULRunner tu n'as pas besoin de le créer, à moins que tu le fasses explicitement avec savePrefFile(file). Sauf erreur il s'appelle prefs.js et se trouve dans dossier Profiles.

Il y a aussi localstore.rdf qui stocke des informations comme la position des fenêtres,...

# Re: Bug aléatoire pour un changement de langue... à n'y rien comprendre...

Envoyé par : Raphael

Date : 30/09/2006 19:19

Ah bon... pourtant j'ai cherché manuellement dans toute mon arborescence de XULRunner 1.9a1 et je ne l'ai pas trouvé... de même avec une recherche fichier, étrange...

Sinon, vois-tu un problème dans mon code ? ou ai-je oublié quelque chose ? Y a bien des gens ici qui font des applications multi-lingues non ? XD

Merci pour n'importe quelle info permettant de me donner une piste =)

# Re: Bug aléatoire pour un changement de langue... à n'y rien comprendre...

Envoyé par : thefab

Date : 30/09/2006 19:58

Il ne se trouve pas dans l'arborescence de XULRunner mais dans celle de l'utilisateur de l'OS. Sous Windows c'est dans C:\Documents and Settings\{winuser}\Application Data\{vendor}\{name}\Profiles\{profile}

  • {winuser} L'utilisateur Windows en cours
  • {vendor} et {name} Valeur dans application.ini
  • {profile} L'utilisateur XULRunner en cours

Sous Linux je crois que ça se trouve dans le dossier de l'utilisateur ~/.Profiles

# Re: Bug aléatoire pour un changement de langue... à n'y rien comprendre...

Envoyé par : Raphael

Date : 01/10/2006 00:19

Ok... Je comprends mieux les choses maintenant... effectivement, sous Linux, c'est en fait dans ~./user/appli.

Donc, en fait les applications que l'on code en XUL ne doivent pas se préoccuper de créer un système d'utilisateurs, c'est bien ça ? En fait, XULRunner utilise et récupère celui de l'OS si j'ai bien compris. C'est super pratique ça ! ^^

Et puis ça me fait avancer sur mon problème : Je viens donc de voir que j'ai 2 fichiers similaires : user.js et prefs.js... ce qui veut certainement dire qu'il doit y avoir un malentendu entre ces 2 là, bref ça me fait une piste à explorer maintenant...

Tu vois, c'est tout bête ce que tu viens de me dire, mais tu peux pas savoir ce que ça vient de m'aider à comprendre comment XULRunner fonctionne, comment sauvegarder et lire des informations utilisateurs...

Un grand merci à toi, je te tiens au courant pour mon problème de changement de langues =D

# Re: Bug aléatoire pour un changement de langue... à n'y rien comprendre...

Envoyé par : thefab

Date : 02/10/2006 18:09

Donc, en fait les applications que l'on code en XUL ne doivent pas se préoccuper de créer un système d'utilisateurs, c'est bien ça ? En fait, XULRunner utilise et récupère celui de l'OS si j'ai bien compris. C'est super pratique ça !

Pas tout à fait, en fait il y a les 2: les utilisateurs de l'OS + les utilisateurs XULRunner (profiles). Si les utilisateurs OS sont correctement créés effectivement tu n'as rien à gérer, mais tu peux aussi avoir plusieurs profiles XULRunner sous le même utilisateur OS.

Je te tiens au courant pour mon problème de changement de langues =D

Volontiers ça peut intéresser du monde.

# Re: Bug aléatoire pour un changement de langue... à n'y rien comprendre...

Envoyé par : Raphael

Date : 03/10/2006 17:03

Ok... Sinon pour mon problème de langue, c'est vraiment TRES BIZARRE. En fait, je change ma langue, ça marche... jusqu'à un moment t que je n'arrive pas à situer.

En fait mon fichier user.js et prefs.js contiennent à peu près la même chose et varient parfois quand je change ma langue... puis arrivé à un moment (au bout du 8° changement par exemple) ça ne bouge plus, ma langue reste bloquée de même que la variable stockée dans prefs.js et mon user.js est alors vierge... Le seul moyen de refaire marcher le changement c'est de supprimer la ligne de sauvegarde dans prefs.js... Ensuite ça remarche, je rechange de en-US à fr-FR autant de fois que je veux SAUF si j'ouvre manuellement ces fichiers : Même si je ne touche rien... je relance mon programme après et les changements ne s'effectuent plus...

Vraiment à n'y rien comprendre... Pour info. je suis sous Ubuntu Breezy... faudrait que je teste sous Windows pour voir si j'ai le même problème...

Sinon, petite question hors-sujet : comment fait-on pour rajouter des lignes manuellement à un tree ? Pour un listitem, je sais qu'on fait :

for (var i = 0 ; i < tags.length ; i++) {
	 var listitem = $("taglist").appendItem(tags[i].name);
	 listitem.setAttribute("tagid", tags[i].id);
 }

Mais pour un tree ? Je ne trouve pas dans le Wiki (seulement des exemples de templates a priori et moi je veux pouvoir rajouter une ligne manuellement...)

Merci :)

# Re: Bug aléatoire pour un changement de langue... à n'y rien comprendre...

Envoyé par : chBok

Date : 03/10/2006 17:11

Pour ta question sur les arbres, comme tu as trois types d'arbres, tu risques de ne pas avoir de réponse qui te satisfasse.

L'arbre le plus simple est construit sur le DOM, et peut très bien être manipulé avec les fonctions du DOM (createElement, appendChild, etc.). Si ton arbre est d'un autre type, c'est un autre problème.

# Re: Bug aléatoire pour un changement de langue... à n'y rien comprendre...

Envoyé par : Raphael

Date : 03/10/2006 18:33

Arf... J'ai beau cherché, je me perds parmi ces tonnes d'informations sur XULplanet... =/

En fait, j'ai un tree tout simple, quasiment un listitem, sauf que je mets un tree pour pouvoir avoir des columnpicker :

<tree id="card-list" flex="1">
			<treecols>
				<treecol id="card-ref" width="90" label="&ref;" hidden="true" />
				<treecol id="card-name"  flex="1" label="&name;" />
				<treecol id="card-subtype" width="140" label="&type;" />										
			</treecols>
			<treechildren>
				<treeitem>
					<treerow>
						<treecell label="JUMP-EN001" />
						<treecell label="Blue-Eyes White Dragon" />
						<treecell label="Magie Jeu-Rapide" />
					</treerow>
				</treeitem>
			</treechildren>
		</tree>

Comme tu le vois, il est très simple... J'aimerais juste savoir comment ajouter une ligne à ce tree... et en y mettant un attribute card_ID après (mais invisible...)

Ce serait vraiment bien si quelqu'un connaissait ces quelques mots de syntaxe, merci d'avance.

# Re: Bug aléatoire pour un changement de langue... à n'y rien comprendre...

Envoyé par : chBok

Date : 04/10/2006 09:47

Tu as un arbre à trois colonnes que tu peux modifier avec les fonctions du DOM. Il faut que tu ajoutes un ensemble d'éléments <treeitem>, <treerow> et 3 <treecell> à ton élément <treechildren> existant.

cf les fonctions du DOM getElementById(), createElement(), appendChild(), etc.

# Re: Bug aléatoire pour un changement de langue... à n'y rien comprendre...

Envoyé par : Raphael

Date : 04/10/2006 19:51

Bah c'est justement ce que j'aimerais savoir... J'ai beau chercher, je ne trouve pas de documentation sur le manière d'utiliser tout ça... Rien dans le wiki, ni dans le pdf de Xulfr, et sur Xulplanet, je trouve juste ça sur appendChild : http://www.xulplanet.com/references/objr(..) et ça sur tree : http://www.xulplanet.com/references/elem(..)

Et ça ne m'aide pas vraiment...

Saurais-tu m'aiguiller vers une bonne documentation, un bon site ? ou bien des exemples ? Pour que je puisse étudier et apprendre ?

Merci.

# Re: Bug aléatoire pour un changement de langue... à n'y rien comprendre...

Envoyé par : Gregco

Date : 30/04/2007 16:31

Sinon pour revenir sur le vrai sujet de ton poste, change :

  • file.appendRelativePath("user.js");

par

  • file.appendRelativePath("prefs.js");

ça marche chez moi, mais l'utilisateur est obligé de fermer le programme et le re-lancer pour que le changement de langue prenne effet. Si t'as une astuce pour ce petit soucis, je suis prenneur :D

++ Gregco

EDIT: j'ai trouvé la réponse à ma question sur ce poste : http://xulfr.org/forums/read.php?1,8133,8133#msg-8133

# Re: Bug aléatoire pour un changement de langue... à n'y rien comprendre...

Envoyé par : Raphael

Date : 30/04/2007 16:35

Merci, en fait j'ai contourné le problème donc je n'en ai plus besoin mais je passe le sujet en Résolu pour aider les prochains.

Merci.

Il n'est plus possible de poster des messages dans ce forum.


Copyright © 2003-2013 association xulfr, 2013-2016 Laurent Jouanneau - Informations légales.

Mozilla® est une marque déposée de la fondation Mozilla.
Mozilla.org™, Firefox™, Thunderbird™, Mozilla Suite™ et XUL™ sont des marques de la fondation Mozilla.