changeset 70:8f2ed279784b

i18n - gettext support added in frontends - first draft of frontends french translation
author Goffi <goffi@goffi.org>
date Fri, 05 Mar 2010 20:33:10 +1100
parents 86f1f7f6d332
children efe81b61673c
files frontends/fr.po frontends/i18n/fr/LC_MESSAGES/sat_frontend.mo frontends/jp/fr.po frontends/jp/i18n/fr/LC_MESSAGES/jp.mo frontends/jp/jp frontends/jp/jp.po frontends/quick_frontend/quick_app.py frontends/quick_frontend/quick_chat.py frontends/quick_frontend/quick_contact_list.py frontends/quick_frontend/quick_contact_management.py frontends/sat_frontend.po frontends/sortilege/boxsizer.py frontends/sortilege/chat.py frontends/sortilege/sortilege frontends/sortilege/statusbar.py frontends/sortilege/window.py frontends/wix/chat.py frontends/wix/form.py frontends/wix/gateways.py frontends/wix/main_window.py frontends/wix/param.py frontends/wix/profile.py frontends/wix/profile_manager.py
diffstat 23 files changed, 1701 insertions(+), 196 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/frontends/fr.po	Fri Mar 05 20:33:10 2010 +1100
@@ -0,0 +1,620 @@
+# SàT frontends french translation file.
+# Copyright (C) 2009, 2010  Jérôme Poisson
+# This file is distributed under the same license as the SàT frontends packages.
+# Jérôme Poisson <goffi@goffi.org>, 2009, 2010.
+# Goffi <goffi@goffi.org>, 2010.
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: 0.0.2D\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-03-05 20:23+1100\n"
+"PO-Revision-Date: 2010-03-05 20:27+1100\n"
+"Last-Translator: Goffi <goffi@goffi.org>\n"
+"Language-Team: French <goffi@goffi.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: sortilege/sortilege:89
+msgid "Contact List"
+msgstr "Liste de contacts"
+
+#: sortilege/sortilege:241
+msgid "Activating colors"
+msgstr "Activation des couleurs"
+
+#: sortilege/sortilege:245
+msgid "Deactivating colors"
+msgstr "Désactivation des couleurs"
+
+#: sortilege/sortilege:251
+msgid "show chat"
+msgstr "Affichage du chat"
+
+#: sortilege/sortilege:253
+#, python-format
+msgid "hiding %s"
+msgstr "On cache %s"
+
+#: sortilege/sortilege:256
+#, python-format
+msgid "showing %s"
+msgstr "On afficher %s"
+
+#: sortilege/sortilege:266
+#, python-format
+msgid "contact choosed: %s"
+msgstr "Contact choisi: %s"
+
+#: sortilege/sortilege:291
+msgid "FIXME: askConfirmation not implemented"
+msgstr "CORRIGEZ-MOI: askConfirmation n'est pas implémenté"
+
+#: sortilege/sortilege:295
+msgid "FIXME: actionResult not implemented"
+msgstr "CORRIGEZ-MOI: actionResult n'est pas implémenté"
+
+#: sortilege/sortilege:370
+msgid "Pleeeeasse, I can't even breathe !"
+msgstr "Pitiééééééééé, je ne peux même pas respirer !"
+
+#: wix/chat.py:68
+msgid "&SendFile\tCTRL-s"
+msgstr "Envoi de fichier\tCTRL-s"
+
+#: wix/chat.py:68
+msgid " Send a file to contact"
+msgstr "Envoi un fichier à un contact"
+
+#: wix/chat.py:70
+msgid "&Action"
+msgstr "&Action"
+
+#: wix/chat.py:110
+msgid "Send File"
+msgstr "Envoi un fichier"
+
+#: wix/chat.py:111
+msgid "Choose a file to send"
+msgstr "Veuillez choisir le fichier à envoyer"
+
+#: wix/chat.py:113
+#, python-format
+msgid "filename: %s"
+msgstr "nom du fichier: %s"
+
+#: wix/chat.py:116 wix/main_window.py:374
+msgid "File Transfer"
+msgstr "Transfert de fichier"
+
+#: wix/chat.py:116 wix/main_window.py:374
+#, python-format
+msgid "Copying %s"
+msgstr "Copie de %s"
+
+#: wix/form.py:77
+#, python-format
+msgid "FIXME FIXME FIXME: type [%s] is not implemented"
+msgstr ""
+"CORRIGEZ-MOI CORRIGEZ-MOI CORRIGEZ-MOI: le type [%s] n'est pas implémenté"
+
+#: wix/form.py:101
+msgid "Submitting form"
+msgstr "Envoi du formulaire"
+
+#: wix/form.py:112
+msgid "Cancelling form"
+msgstr "Annulation du formulaire"
+
+#: wix/form.py:118 wix/gateways.py:191 wix/param.py:123 wix/profile.py:89
+msgid "close"
+msgstr "fermeture"
+
+#: wix/gateways.py:30
+msgid ""
+"Be careful ! Gateways allow you to use an external IM (legacy IM), so you "
+"can see your contact as jabber contacts.\n"
+"But when you do this, all your messages go throught the external legacy IM "
+"server, it is a huge privacy issue (i.e.: all your messages throught the "
+"gateway can be monitored, recorded, analyzed by the external server, most of "
+"time a private company)."
+msgstr ""
+"Soyez prudent ! Les transports vous permettent d'utiliser une messagerie "
+"externe, de façon à pouvoir afficher vos contacts comme des contacts "
+"jabber.\n"
+"Mais si vous faites cela, tous vos messages passeront par les serveurs de la "
+"messagerie externe, c'est un gros problème pour votre vie privée (comprenez: "
+"tous vos messages à travers le transport pourront être affichés, "
+"enregistrés, analysés par ces serveurs externes, la plupart du temps une "
+"entreprise privée)."
+
+#: wix/gateways.py:34
+msgid "Gateways manager"
+msgstr "Gestionnaire de transport"
+
+#: wix/gateways.py:89
+msgid "Use external XMPP server: "
+msgstr "Utiliser un autre serveur XMPP:"
+
+#: wix/gateways.py:92
+msgid "GO !"
+msgstr "C'est parti !"
+
+#: wix/gateways.py:107
+#, python-format
+msgid "Opening gateways manager on [%s]"
+msgstr "Ouverture du gestionnaire de transports pour [%s]"
+
+#: wix/gateways.py:130
+msgid "Unknown IM"
+msgstr "Messagerie inconnue"
+
+#: wix/gateways.py:173
+msgid "Register"
+msgstr "Inscription"
+
+#: wix/gateways.py:177
+msgid "Unregister"
+msgstr "Désinscription"
+
+#: wix/main_window.py:55
+msgid "Online"
+msgstr "En ligne"
+
+#: wix/main_window.py:56
+msgid "Free for chat"
+msgstr "Libre pour discuter"
+
+#: wix/main_window.py:57
+msgid "AFK"
+msgstr "Loin du clavier"
+
+#: wix/main_window.py:58
+msgid "DND"
+msgstr "Ne pas déranger"
+
+#: wix/main_window.py:59
+msgid "Away"
+msgstr "Absent"
+
+#: wix/main_window.py:93
+#, python-format
+msgid "update %s"
+msgstr "mise à jour de %s"
+
+#: wix/main_window.py:158
+#, python-format
+msgid "adding %s"
+msgstr "ajout de %s"
+
+#: wix/main_window.py:177
+#, python-format
+msgid "removing %s"
+msgstr "suppression de %s"
+
+#: wix/main_window.py:257
+msgid "Wix jabber client"
+msgstr "client jabber Wix"
+
+#: wix/main_window.py:286
+msgid "Creating menus"
+msgstr "Construction des menus"
+
+#: wix/main_window.py:288
+msgid "&Connect\tCTRL-c"
+msgstr "&Connexion\tCTRL-c"
+
+#: wix/main_window.py:288
+msgid " Connect to the server"
+msgstr " Connexion au serveur"
+
+#: wix/main_window.py:289
+msgid "&Disconnect\tCTRL-d"
+msgstr "&Déconnexion\tCTRL-d"
+
+#: wix/main_window.py:289
+msgid " Disconnect from the server"
+msgstr " Déconnexion du serveur"
+
+#: wix/main_window.py:290
+msgid "&Parameters"
+msgstr "&Paramètres"
+
+#: wix/main_window.py:290
+msgid " Configure the program"
+msgstr " Configurer l'application"
+
+#: wix/main_window.py:292
+msgid "E&xit"
+msgstr "Quitter"
+
+#: wix/main_window.py:292
+msgid " Terminate the program"
+msgstr " Ferme l'application"
+
+#: wix/main_window.py:294
+msgid "&Add contact"
+msgstr "&Ajouter un contact"
+
+#: wix/main_window.py:294
+msgid " Add a contact to your list"
+msgstr " Ajouter un contact à votre liste"
+
+#: wix/main_window.py:295
+msgid "&Remove contact"
+msgstr "Supp&rimer un contact"
+
+#: wix/main_window.py:295
+msgid " Remove the selected contact from your list"
+msgstr " Supprime le contact sélectionné de votre liste"
+
+#: wix/main_window.py:297
+msgid "&Show profile"
+msgstr "Afficher profile"
+
+#: wix/main_window.py:297
+msgid " Show contact's profile"
+msgstr " Affiche le profile du contact"
+
+#: wix/main_window.py:299
+msgid "&Find Gateways"
+msgstr "Trouver transports"
+
+#: wix/main_window.py:299
+msgid " Find gateways to legacy IM"
+msgstr " Trouve les transports vers les messageries externes"
+
+#: wix/main_window.py:301
+msgid "&General"
+msgstr "&Général"
+
+#: wix/main_window.py:302
+msgid "&Contacts"
+msgstr "&Contacts"
+
+#: wix/main_window.py:303
+msgid "&Communication"
+msgstr "&Communication"
+
+#: wix/main_window.py:342
+#, python-format
+msgid "unmanaged dialog type: %s"
+msgstr "type de discussion non géré: %s"
+
+#: wix/main_window.py:360
+msgid "Confirmation asked"
+msgstr "Confirmation demandée"
+
+#: wix/main_window.py:363
+msgid "File transfert confirmation asked"
+msgstr "Demande de confirmation pour un transfert de fichier demandée"
+
+#: wix/main_window.py:364
+#, python-format
+msgid ""
+"The contact %(jid)s wants to send you the file %(filename)s\n"
+"Do you accept ?"
+msgstr ""
+"Le contact %(jid)s veut vous envoyer le fichier %(filename)s\n"
+"Êtes vous d'accord ?"
+
+#: wix/main_window.py:365
+msgid "File Request"
+msgstr "Gestion de fichiers"
+
+#: wix/main_window.py:370
+msgid "Where do you want to save the file ?"
+msgstr "Où voulez-vous sauvegarder le fichier ?"
+
+#: wix/main_window.py:383
+msgid "Yes/No confirmation asked"
+msgstr "confirmation de type Oui/Non demandée"
+
+#: wix/main_window.py:385 wix/profile_manager.py:112
+msgid "Confirmation"
+msgstr "Confirmation"
+
+#: wix/main_window.py:397
+#, python-format
+msgid "actionResult: type = [%(type)s] id = [%(id)s] data = [%(data)s]"
+msgstr "actionResult: type = [%(type)s] id = [%(id)s] data = [%(data)s]"
+
+#: wix/main_window.py:399
+msgid "unknown id, ignoring"
+msgstr "id inconnue, on l'ignore"
+
+#: wix/main_window.py:406
+msgid "Success"
+msgstr "Succès"
+
+#: wix/main_window.py:414 wix/main_window.py:517 wix/main_window.py:540
+msgid "Error"
+msgstr "Erreur"
+
+#: wix/main_window.py:421
+msgid "Form received"
+msgstr "Formulaire reçu"
+
+#: wix/main_window.py:422
+msgid "Registration"
+msgstr "Inscription"
+
+#: wix/main_window.py:436
+#, python-format
+msgid "FIXME FIXME FIXME: type [%s] not implemented"
+msgstr "CORRIGER-MOI: le type [%s] n'est pas implémenté"
+
+#: wix/main_window.py:468
+#, python-format
+msgid "onContactActivated: %s"
+msgstr "onContactActivated: %s"
+
+#: wix/main_window.py:486
+msgid "Status change request"
+msgstr "Demande de changement de statut"
+
+#: wix/main_window.py:490
+msgid "Param request"
+msgstr "Gestion des paramètres"
+
+#: wix/main_window.py:497
+msgid "Add contact request"
+msgstr "Demande d'ajout de contact"
+
+#: wix/main_window.py:499
+msgid "Please enter new contact JID"
+msgstr "Veuillez entrer le JID de votre nouveau contact"
+
+#: wix/main_window.py:500
+msgid "Adding a contact"
+msgstr "Ajout d'un contact"
+
+#: wix/main_window.py:500
+msgid "name@server.tld"
+msgstr "nom@serveur.ext"
+
+#: wix/main_window.py:507
+#, python-format
+msgid "'%s' is an invalid JID !"
+msgstr "'%s' n'est pas un JID valide !"
+
+#: wix/main_window.py:513
+msgid "Remove contact request"
+msgstr "Demande de suppression de contact"
+
+#: wix/main_window.py:516 wix/main_window.py:539
+msgid "You haven't selected any contact !"
+msgstr "Vous n'avez sélectionné aucun contact !"
+
+#: wix/main_window.py:524
+#, python-format
+msgid "Are you sure you want to delete %s from your roster list ?"
+msgstr "Êtes vous sûr de vouloir supprimer %s de votre liste de contacts ?"
+
+#: wix/main_window.py:525
+msgid "Contact suppression"
+msgstr "Suppression de contact"
+
+#: wix/main_window.py:530
+#, python-format
+msgid "Unsubscribing %s presence"
+msgstr "Désinscription à la présence de %s"
+
+#: wix/main_window.py:536
+msgid "Show contact's profile request"
+msgstr "Demande d'affichage du profile d'un contact"
+
+#: wix/main_window.py:552
+#, python-format
+msgid "Profile received: [%s]"
+msgstr "Profile reçu: [%s]"
+
+#: wix/main_window.py:557
+msgid "Find Gateways request"
+msgstr "Demande de recherche de transports"
+
+#: wix/main_window.py:569
+msgid "Exiting..."
+msgstr "Sortie..."
+
+#: wix/main_window.py:573
+msgid "Tray Click"
+msgstr "Clic sur l'icône de la barre de tâches"
+
+#: wix/param.py:32
+msgid "Configuration"
+msgstr "Configuration"
+
+#: wix/param.py:78
+msgid "FIXME FIXME FIXME"
+msgstr "CORRIGER-MOI"
+
+#: wix/profile_manager.py:47
+msgid "Profile:"
+msgstr "Profile:"
+
+#: wix/profile_manager.py:52
+msgid "New"
+msgstr "Nouveau"
+
+#: wix/profile_manager.py:53
+msgid "Delete"
+msgstr "Suppression"
+
+#: wix/profile_manager.py:60
+msgid "Login"
+msgstr "Identifiant"
+
+#: wix/profile_manager.py:67
+msgid "Password:"
+msgstr "Mot de passe:"
+
+#: wix/profile_manager.py:70
+msgid "Connect"
+msgstr "Connexion"
+
+#: wix/profile_manager.py:96
+msgid "Please enter the new profile name"
+msgstr "Veuillez entrer le nom du nouveau profile"
+
+#: wix/profile_manager.py:96
+msgid "New profile"
+msgstr "Nouveau profile"
+
+#: wix/profile_manager.py:101 wix/profile_manager.py:133
+msgid "A profile name can't start with a @"
+msgstr "Un nom de profile ne peut pas commencer avec un @"
+
+#: wix/profile_manager.py:101 wix/profile_manager.py:133
+msgid "Bad profile name"
+msgstr "Mauvais nom de profile"
+
+#: wix/profile_manager.py:112
+#, python-format
+msgid "Are you sure to delete the profile [%s]"
+msgstr "Êtes vous sûr de vouloir supprimer le profile [%s] ?"
+
+#: wix/profile_manager.py:130
+msgid "You must select a profile or create a new one before connecting"
+msgstr ""
+"Vous devez sélectionner un profile ou en créer un nouveau avant de vous "
+"connecter."
+
+#: wix/profile_manager.py:130
+msgid "No profile selected"
+msgstr "Aucun profile sélectionné"
+
+#: wix/profile_manager.py:138
+msgid "The profile is new, we create it"
+msgstr "Le profile est nouveau, on le créé"
+
+#: wix/profile_manager.py:144
+msgid "Saving new JID"
+msgstr "Sauvegarde du nouveau JID"
+
+#: wix/profile_manager.py:147
+msgid "Saving new password"
+msgstr "Sauvegarde du nouveau mot de passe"
+
+#: wix/profile.py:35
+msgid "Full Name"
+msgstr "Nom complet"
+
+#: wix/profile.py:36
+msgid "Nickname"
+msgstr "Surnon"
+
+#: wix/profile.py:37
+msgid "Birthday"
+msgstr "Date de naissance"
+
+#: wix/profile.py:38
+msgid "Phone #"
+msgstr "N° de Tél:"
+
+#: wix/profile.py:39
+msgid "Website"
+msgstr "Site Web"
+
+#: wix/profile.py:40
+msgid "E-mail"
+msgstr "Courriel"
+
+#: wix/profile.py:41
+msgid "Avatar"
+msgstr "Avatar"
+
+#: wix/profile.py:84
+msgid "General"
+msgstr "Général"
+
+#: quick_frontend/quick_app.py:63
+msgid "There is already one profile plugged (we are in single profile mode) !"
+msgstr "Il y a déjà un profile utilisé (nous comme en mode profile unique) !"
+
+#: quick_frontend/quick_app.py:67
+msgid "The profile asked doesn't exist"
+msgstr "Le profile demandé n'existe pas"
+
+#: quick_frontend/quick_app.py:70
+msgid "The profile is already plugged"
+msgstr "Le profile est déjà utilisé"
+
+#: quick_frontend/quick_app.py:110
+msgid "This profile is not plugged"
+msgstr "Ce profile n'est pas utilisé"
+
+#: quick_frontend/quick_app.py:121
+msgid "Connected"
+msgstr "Connecté"
+
+#: quick_frontend/quick_app.py:128
+msgid "Disconnected"
+msgstr "Déconnecté"
+
+#: quick_frontend/quick_app.py:156
+#, python-format
+msgid "presence update for %(jid)s (show=%(show)s, statuses=%(statuses)s)"
+msgstr ""
+"Mise à jour de l'information de présence pour %(jid)s (show=%(show)s, "
+"statuses=%(statuses)s)"
+
+#: quick_frontend/quick_app.py:177
+#, python-format
+msgid "Watched jid [%s] is connected !"
+msgstr "Le jid surveillé [%s] est connecté !"
+
+#: quick_frontend/quick_app.py:205
+#, python-format
+msgid "The contact %s has accepted your subscription"
+msgstr "Le contact %s a accepté votre inscription"
+
+#: quick_frontend/quick_app.py:205 quick_frontend/quick_app.py:211
+msgid "Subscription confirmation"
+msgstr "Confirmation d'inscription"
+
+#: quick_frontend/quick_app.py:208
+#, python-format
+msgid "The contact %s has refused your subscription"
+msgstr "Le contact %s a refusé votre inscription"
+
+#: quick_frontend/quick_app.py:208
+msgid "Subscription refusal"
+msgstr "Refus d'inscription"
+
+#: quick_frontend/quick_app.py:211
+#, python-format
+msgid ""
+"The contact %s wants to subscribe to your presence.\n"
+"Do you accept ?"
+msgstr ""
+"Le contact %s veut s'inscrire à vos informations de présence\n"
+"Acceptez vous ?"
+
+#: quick_frontend/quick_app.py:226
+#, python-format
+msgid "param update: [%(namespace)s] %(name)s = %(value)s"
+msgstr "Le paramètre [%(namespace)s] %(name)s vaut désormais %(value)s"
+
+#: quick_frontend/quick_app.py:228
+#, python-format
+msgid "Changing JID to %s"
+msgstr "Changement du JID pour %s"
+
+#: quick_frontend/quick_chat.py:35
+msgid "now we print history"
+msgstr "Maintenant on affiche l'historique"
+
+#: quick_frontend/quick_contact_list.py:33
+msgid "Contact List init"
+msgstr "Initialisation de la liste de contacts"
+
+#: quick_frontend/quick_contact_management.py:67
+msgid "Trying to get attribute for an unknown contact"
+msgstr "Tentative d'accès aux attributs d'un contact inconnu"
+
+#: quick_frontend/quick_contact_management.py:94
+#, python-format
+msgid "Trying to update an unknown contact: %s"
+msgstr "Tentative de mise à jour d'un contact inconnu: %s"
Binary file frontends/i18n/fr/LC_MESSAGES/sat_frontend.mo has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/frontends/jp/fr.po	Fri Mar 05 20:33:10 2010 +1100
@@ -0,0 +1,164 @@
+# JP French Translation.
+# Copyright (C) 2009, 2010 Jérôme Poisson
+# This file is distributed under the same license as the jp package.
+# Jérôme Poisson <goffi@goffi.org>, 2009, 2010.
+# Goffi <goffi@goffi.org>, 2010.
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: 0.0.2\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-03-05 19:08+1100\n"
+"PO-Revision-Date: 2010-03-05 19:24+1100\n"
+"Last-Translator: Goffi <goffi@goffi.org>\n"
+"Language-Team: French <goffi@goffi.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: jp:63
+msgid ""
+"ProgressBar not available, please download it at http://pypi.python.org/pypi/"
+"progressbar"
+msgstr ""
+"ProgressBar n'est pas disponible, veuillez le télécharger à http://pypi."
+"python.org/pypi/progressbar"
+
+#: jp:64
+msgid ""
+"Progress bar deactivated\n"
+"--\n"
+msgstr ""
+"Barre de progression désactivée\n"
+"--\n"
+
+#: jp:77
+msgid ""
+"\n"
+"        %prog [options] [FILE1 FILE2 ...] JID\n"
+"        %prog -w [options] [JID1 JID2 ...]\n"
+"\n"
+"        %prog --help for options list\n"
+"        "
+msgstr ""
+"\n"
+"        %prog [options] [FICHIER1 FICHIER2 ...] JID\n"
+"        %prog -w [options] [JID1 JID2 ...]\n"
+"\n"
+"        %prog --help pour la liste des options\n"
+"        "
+
+#: jp:86
+msgid "Make a bzip2 tarball"
+msgstr "Fait un fichier compressé bzip2"
+
+#: jp:88
+msgid "Wait for a file to be sent by a contact"
+msgstr "Attend qu'un fichier soit envoyé par un contact"
+
+#: jp:90
+msgid "Accept multiple files (you'll have to stop manually)"
+msgstr ""
+"Accepte plusieurs fichiers (vous devrez arrêter le programme à la main)"
+
+#: jp:92
+msgid "Force overwritting of existing files"
+msgstr "Force le remplacement des fichiers existants"
+
+#: jp:94
+msgid "Show progress bar"
+msgstr "Affiche la barre de progression"
+
+#: jp:96
+msgid ""
+"Separate xmpp messages: send one message per line instead of one message "
+"alone."
+msgstr ""
+"Sépare les messages xmpp: envoi un message par ligne plutôt qu'un seul "
+"message global."
+
+#: jp:98
+msgid "Add a new line at the beginning of the input (usefull for ascii art ;))"
+msgstr ""
+"Ajoute un saut de ligne au début de l'entrée (utile pour l'art ascii ;))"
+
+#: jp:103
+msgid "You must specify the destination JID (Jabber ID)"
+msgstr "Vous devez préciser le JID (Jabber ID) de destination"
+
+#: jp:112
+#, python-format
+msgid "%s is not a valid JID !"
+msgstr "%s n'est pas un JID valide !"
+
+#: jp:118
+msgid "Option progress is not available, deactivated."
+msgstr ""
+"L'option « progress » (barre de progression) n'est pas disponible, elle est "
+"désactivée."
+
+#: jp:131
+msgid "SAT is not conneted, please connect before using jp"
+msgstr "SAT n'est pas connecté, veuillez le connecter avant d'utiliser jp"
+
+#: jp:155
+#, python-format
+msgid "File [%s] doesn't exist !"
+msgstr "Le fichier [%s] n'existe pas !"
+
+#: jp:158
+#, python-format
+msgid "[%s] is a dir ! Please send files inside or use compression"
+msgstr ""
+"[%s] est un répertoire ! Veuillez envoyer les fichiers qu'il contient ou "
+"utiliser la compression."
+
+#: jp:164
+#, python-format
+msgid "tmp file (%s) already exists ! Please remove it"
+msgstr "le fichier temporaire (%s) existe déjà ! Veuillez le supprimer"
+
+#: jp:166
+msgid "bz2 is an experimental option at an early dev stage, use with caution"
+msgstr ""
+"bz2 est une option expérimentale à un stade de développement peu avancé, "
+"utilisez-là avec prudence"
+
+#: jp:168
+msgid "Starting compression, please wait..."
+msgstr "Lancement de la compression, veuillez patienter..."
+
+#: jp:172
+#, python-format
+msgid "Adding %s"
+msgstr "Ajout de %s"
+
+#: jp:175
+msgid "OK !"
+msgstr "C'est parti !"
+
+#: jp:196
+#, python-format
+msgid "Accepted file [%(filename)s] from %(sender)s"
+msgstr "Le fichier [%(filename)s] de %(sender)s a été accepté"
+
+#: jp:200
+#, python-format
+msgid ""
+"Refused file [%(filename)s] from %(sender)s: a file with the same name "
+"already exist"
+msgstr ""
+"Le fichier [%(filename)s] de %(sender)s a été refusé: un fichier avec le "
+"même nom existe déjà"
+
+#: jp:209
+msgid "FIXME: actionResult not implemented"
+msgstr "CORRIGEZ-MOI: actionResult n'est pas implémenté"
+
+#: jp:223
+msgid "Progress: "
+msgstr "Progression: "
+
+#: jp:254
+msgid "User interruption: good bye"
+msgstr "Interrompu par l'utilisateur: au revoir"
Binary file frontends/jp/i18n/fr/LC_MESSAGES/jp.mo has changed
--- a/frontends/jp/jp	Wed Mar 03 17:12:23 2010 +1100
+++ b/frontends/jp/jp	Fri Mar 05 20:33:10 2010 +1100
@@ -45,6 +45,9 @@
                     format='%(message)s')
 ###
 
+import gettext
+gettext.install('jp', "i18n", unicode=True)
+
 import sys
 import os
 from os.path import abspath, basename, dirname
@@ -57,8 +60,8 @@
 try:
     from progressbar import ProgressBar, Percentage, Bar, ETA, FileTransferSpeed
 except ImportError, e:
-        info ('ProgressBar not available, please download it at http://pypi.python.org/pypi/progressbar')
-        info ('Progress bar deactivated\n--\n')
+        info (_('ProgressBar not available, please download it at http://pypi.python.org/pypi/progressbar'))
+        info (_('Progress bar deactivated\n--\n'))
         pbar_available=False
 
 
@@ -71,33 +74,33 @@
 
     def check_options(self):
         """Check command line options"""
-        usage="""
+        usage=_("""
         %prog [options] [FILE1 FILE2 ...] JID
         %prog -w [options] [JID1 JID2 ...]
 
         %prog --help for options list
-        """
+        """)
         parser = OptionParser(usage=usage,version=about)
 
         parser.add_option("-b", "--bz2", action="store_true", default=False,
-                    help="Make a bzip2 tarball")
+                    help=_("Make a bzip2 tarball"))
         parser.add_option("-w", "--wait-file", action="store_true", default=False,
-                    help="Wait for a file to be sent by a contact")
+                    help=_("Wait for a file to be sent by a contact"))
         parser.add_option("-m", "--multiple", action="store_true", default=False,
-                    help="Accept multiple files (you'll have to stop manually)")
+                    help=_("Accept multiple files (you'll have to stop manually)"))
         parser.add_option("-f", "--force", action="store_true", default=False,
-                    help="Force overwritting of existing files")
+                    help=_("Force overwritting of existing files"))
         parser.add_option("-p", "--progress", action="store_true", default=False,
-                    help="Show progress bar")
+                    help=_("Show progress bar"))
         parser.add_option("-s", "--separate", action="store_true", default=False,
-                    help="Separate xmpp messages: send one message per line instead of one message alone.")
+                    help=_("Separate xmpp messages: send one message per line instead of one message alone."))
         parser.add_option("-n", "--new-line", action="store_true", default=False,
-                    help="Add a new line at the beginning of the input (usefull for ascii art ;))")
+                    help=_("Add a new line at the beginning of the input (usefull for ascii art ;))"))
 
         (self.options, args) = parser.parse_args()
 
         if len(args) < 1 and not self.options.wait_file:
-            parser.error("You must specify the destination JID (Jabber ID)")
+            parser.error(_("You must specify the destination JID (Jabber ID)").encode('utf-8'))
 
         if self.options.wait_file:
             #several jid
@@ -106,13 +109,13 @@
             #one dest_jid, other args are files
             self.dest_jid = JID(args[-1])
             if not self.dest_jid.is_valid:
-                error ("%s is not a valid JID !", self.dest_jid)
+                error (_("%s is not a valid JID !"), self.dest_jid)
                 exit(1)
             self.files = args[:-1]
 
         if not pbar_available and self.options.progress:
             self.options.progress = False
-            error ("Option progress is not available, deactivated.")
+            error (_("Option progress is not available, deactivated."))
 
         if self.options.progress or self.options.wait_file:
             self.start_loop = True  #We have to use loop for these options
@@ -125,7 +128,7 @@
     def check_jabber_status(self):
         """Check that jabber status is allright"""
         if not self.bridge.isConnected():
-            error("SAT is not conneted, please connect before using jp")
+            error(_("SAT is not conneted, please connect before using jp"))
             exit(1)
 
 
@@ -149,27 +152,27 @@
 
         for file in self.files:
             if not os.path.exists(file):
-                error ("File [%s] doesn't exist !" % file)
+                error (_("File [%s] doesn't exist !") % file)
                 exit(1)
             if not self.options.bz2 and os.path.isdir(file):
-                error ("[%s] is a dir ! Please send files inside or use compression" % file)
+                error (_("[%s] is a dir ! Please send files inside or use compression") % file)
                 exit(1)
 
         if self.options.bz2:
             tmpfile = (basename(self.files[0]) or basename(dirname(self.files[0])) ) + '.tar.bz2' #FIXME: tmp, need an algorithm to find a good name/path
             if os.path.exists(tmpfile):
-                error ("tmp file (%s) already exists ! Please remove it", tmpfile)
+                error (_("tmp file (%s) already exists ! Please remove it"), tmpfile)
                 exit(1)
-            warning("bz2 is an experimental option at an early dev stage, use with caution")
+            warning(_("bz2 is an experimental option at an early dev stage, use with caution"))
             #FIXME: check free space, writting perm, tmp dir, filename (watch for OS used)
-            info("Starting compression, please wait...")
+            info(_("Starting compression, please wait..."))
             sys.stdout.flush()
             bz2=tarfile.open(tmpfile, "w:bz2")
             for file in self.files:
-                info("Adding %s", file)
+                info(_("Adding %s"), file)
                 bz2.add(file)
             bz2.close()
-            info("OK !")
+            info(_("OK !"))
             path = abspath(tmpfile)
             self.transfert_id = self.bridge.sendFile(self.dest_jid, path)
         else:
@@ -190,11 +193,11 @@
 
             if self.options.force or not os.path.exists(answer_data["dest_path"]):
                 self.bridge.confirmationAnswer(id, True, answer_data)
-                info("Accepted file [%s] from %s", data['filename'], data['from'])
+                info(_("Accepted file [%(filename)s] from %(sender)s") % {'filename':data['filename'], 'sender':data['from']})
                 self.transfert_id = id
             else:
                 self.bridge.confirmationAnswer(id, False, answer_data)
-                warning("Refused file [%s] from %s: a file with the same name already exist", data['filename'], data['from'])
+                warning(_("Refused file [%(filename)s] from %(sender)s: a file with the same name already exist") % {'filename':data['filename'], 'sender':data['from']})
                 
 
             if not self.options.multiple and not self.options.progress:
@@ -203,7 +206,7 @@
                 
     def actionResult(self, type, id, data):
         #FIXME
-        info ("FIXME: actionResult not implemented")
+        info (_("FIXME: actionResult not implemented"))
 
     def wait_file(self):
         """Wait for a file and write it on local dir"""
@@ -217,7 +220,7 @@
                     data['position'] = '0'
                 if not self.pbar:
                     #first answer, we must construct the bar
-                    self.pbar = ProgressBar(int(data['size']),["Progress: ",Percentage()," ",Bar()," ",FileTransferSpeed()," ",ETA()])
+                    self.pbar = ProgressBar(int(data['size']),[_("Progress: "),Percentage()," ",Bar()," ",FileTransferSpeed()," ",ETA()])
                     self.pbar.start()
                     
                 self.pbar.update(int(data['position']))
@@ -248,7 +251,7 @@
             try:
                 self.loop.run()
             except KeyboardInterrupt:
-                info("User interruption: good bye")
+                info(_("User interruption: good bye"))
 
 
 if __name__ == "__main__":
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/frontends/jp/jp.po	Fri Mar 05 20:33:10 2010 +1100
@@ -0,0 +1,142 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-03-05 19:08+1100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: jp:63
+msgid ""
+"ProgressBar not available, please download it at http://pypi.python.org/pypi/"
+"progressbar"
+msgstr ""
+
+#: jp:64
+msgid ""
+"Progress bar deactivated\n"
+"--\n"
+msgstr ""
+
+#: jp:77
+msgid ""
+"\n"
+"        %prog [options] [FILE1 FILE2 ...] JID\n"
+"        %prog -w [options] [JID1 JID2 ...]\n"
+"\n"
+"        %prog --help for options list\n"
+"        "
+msgstr ""
+
+#: jp:86
+msgid "Make a bzip2 tarball"
+msgstr ""
+
+#: jp:88
+msgid "Wait for a file to be sent by a contact"
+msgstr ""
+
+#: jp:90
+msgid "Accept multiple files (you'll have to stop manually)"
+msgstr ""
+
+#: jp:92
+msgid "Force overwritting of existing files"
+msgstr ""
+
+#: jp:94
+msgid "Show progress bar"
+msgstr ""
+
+#: jp:96
+msgid ""
+"Separate xmpp messages: send one message per line instead of one message "
+"alone."
+msgstr ""
+
+#: jp:98
+msgid "Add a new line at the beginning of the input (usefull for ascii art ;))"
+msgstr ""
+
+#: jp:103
+msgid "You must specify the destination JID (Jabber ID)"
+msgstr ""
+
+#: jp:112
+#, python-format
+msgid "%s is not a valid JID !"
+msgstr ""
+
+#: jp:118
+msgid "Option progress is not available, deactivated."
+msgstr ""
+
+#: jp:131
+msgid "SAT is not conneted, please connect before using jp"
+msgstr ""
+
+#: jp:155
+#, python-format
+msgid "File [%s] doesn't exist !"
+msgstr ""
+
+#: jp:158
+#, python-format
+msgid "[%s] is a dir ! Please send files inside or use compression"
+msgstr ""
+
+#: jp:164
+#, python-format
+msgid "tmp file (%s) already exists ! Please remove it"
+msgstr ""
+
+#: jp:166
+msgid "bz2 is an experimental option at an early dev stage, use with caution"
+msgstr ""
+
+#: jp:168
+msgid "Starting compression, please wait..."
+msgstr ""
+
+#: jp:172
+#, python-format
+msgid "Adding %s"
+msgstr ""
+
+#: jp:175
+msgid "OK !"
+msgstr ""
+
+#: jp:196
+#, python-format
+msgid "Accepted file [%(filename)s] from %(sender)s"
+msgstr ""
+
+#: jp:200
+#, python-format
+msgid ""
+"Refused file [%(filename)s] from %(sender)s: a file with the same name "
+"already exist"
+msgstr ""
+
+#: jp:209
+msgid "FIXME: actionResult not implemented"
+msgstr ""
+
+#: jp:223
+msgid "Progress: "
+msgstr ""
+
+#: jp:254
+msgid "User interruption: good bye"
+msgstr ""
--- a/frontends/quick_frontend/quick_app.py	Wed Mar 03 17:12:23 2010 +1100
+++ b/frontends/quick_frontend/quick_app.py	Fri Mar 05 20:33:10 2010 +1100
@@ -24,6 +24,9 @@
 from sat_bridge_frontend.DBus import DBusBridgeFrontend
 import pdb
 
+import gettext
+gettext.install('sat_frontend', "../i18n", unicode=True)
+
 class QuickApp():
     """This class contain the main methods needed for the frontend"""
 
@@ -57,14 +60,14 @@
     def plug_profile(self, profile_key='@DEFAULT@'):
         """Tell application which profile must be used"""
         if self.single_profile and self.profiles:
-            error('There is already one profile plugged (we are in single profile mode) !')
+            error(_('There is already one profile plugged (we are in single profile mode) !'))
             return
         profile = self.bridge.getProfileName(profile_key)
         if not profile:
-            error("The profile asked doesn't exist")
+            error(_("The profile asked doesn't exist"))
             return
         if self.profiles.has_key(profile):
-            warning("The profile is already plugged")
+            warning(_("The profile is already plugged"))
             return
         self.profiles[profile]={}
         if self.single_profile:
@@ -104,7 +107,7 @@
     def unplug_profile(self, profile):
         """Tell the application to not follow anymore the profile"""
         if not profile in self.profiles:
-            warning ("This profile is not plugged")
+            warning (_("This profile is not plugged"))
             return
         self.profiles.remove(profile)
 
@@ -115,14 +118,14 @@
         """called when the connection is made"""
         if not self.__check_profile(profile):
             return
-        debug("Connected")
+        debug(_("Connected"))
         self.setStatusOnline(True)
 
     def disconnected(self, profile):
         """called when the connection is closed"""
         if not self.__check_profile(profile):
             return
-        debug("Disconnected")
+        debug(_("Disconnected"))
         self.CM.clear()
         self.contactList.clear_contacts()
         self.setStatusOnline(False)
@@ -150,9 +153,9 @@
         if not self.__check_profile(profile):
             return
         print "check ok"
-        debug ("presence update for %s (show=%s, statuses=%s)", jabber_id, show, statuses);
+        debug (_("presence update for %(jid)s (show=%(show)s, statuses=%(statuses)s)") % {'jid':jabber_id, 'show':show, 'statuses':statuses});
         from_jid=JID(jabber_id)
-        debug ("from_jid.short=%s whoami.short=%s", from_jid.short, self.profiles[profile]['whoami'].short)
+        debug ("from_jid.short=%(from_jid)s whoami.short=%(whoami)s" % {'from_jid':from_jid.short, 'whoami':self.profiles[profile]['whoami'].short})
 
         if from_jid.short==self.profiles[profile]['whoami'].short:
             if not type:
@@ -171,7 +174,7 @@
 
             #FIXME: must be moved in a plugin
             if from_jid.short in self.profiles[profile]['watched'] and not from_jid.short in self.profiles[profile]['onlineContact']:
-                self.showAlert("Watched jid [%s] is connected !" % from_jid.short)
+                self.showAlert(_("Watched jid [%s] is connected !") % from_jid.short)
 
             self.profiles[profile]['onlineContact'].add(from_jid)  #FIXME onlineContact is useless with CM, must be removed
             self.CM.add(from_jid)
@@ -199,13 +202,13 @@
         entity = JID(raw_jid)
         if type=="subscribed":
             # this is a subscription confirmation, we just have to inform user
-            self.showDialog("The contact %s has accepted your subscription" % entity.short, 'Subscription confirmation')
+            self.showDialog(_("The contact %s has accepted your subscription") % entity.short, _('Subscription confirmation'))
         elif type=="unsubscribed":
             # this is a subscription refusal, we just have to inform user
-            self.showDialog("The contact %s has refused your subscription" % entity.short, 'Subscription refusal', 'error')
+            self.showDialog(_("The contact %s has refused your subscription") % entity.short, _('Subscription refusal'), 'error')
         elif type=="subscribe":
             # this is a subscriptionn request, we have to ask for user confirmation
-            answer = self.showDialog("The contact %s wants to subscribe to your presence.\nDo you accept ?" % entity.short, 'Subscription confirmation', 'yes/no')
+            answer = self.showDialog(_("The contact %s wants to subscribe to your presence.\nDo you accept ?") % entity.short, _('Subscription confirmation'), 'yes/no')
             if answer:
                 self.bridge.subscription("subscribed", entity.short)
             else:
@@ -220,9 +223,9 @@
     def paramUpdate(self, name, value, namespace, profile):
         if not self.__check_profile(profile):
             return
-        debug("param update: [%s] %s = %s", namespace, name, value)
+        debug(_("param update: [%(namespace)s] %(name)s = %(value)s") % {'namespace':namespace, 'name':name, 'value':value})
         if (namespace,name) == ("Connection", "JabberID"):
-            debug ("Changing ID to %s", value)
+            debug (_("Changing JID to %s"), value)
             self.profiles[profile]['whoami']=JID(value)
         elif (namespace,name) == ("Misc", "Watched"):
             self.profiles[profile]['watched']=value.split()
--- a/frontends/quick_frontend/quick_chat.py	Wed Mar 03 17:12:23 2010 +1100
+++ b/frontends/quick_frontend/quick_chat.py	Fri Mar 05 20:33:10 2010 +1100
@@ -32,7 +32,7 @@
 
     def historyPrint(self, size=20, keep_last=False, profile='@NONE@'):
         """Print the initial history"""
-        debug ("now we print history")
+        debug (_("now we print history"))
         history=self.host.bridge.getHistory(self.host.profiles[profile]['whoami'].short, self.to_jid, 20)
         stamps=history.keys()
         stamps.sort()
--- a/frontends/quick_frontend/quick_contact_list.py	Wed Mar 03 17:12:23 2010 +1100
+++ b/frontends/quick_frontend/quick_contact_list.py	Fri Mar 05 20:33:10 2010 +1100
@@ -30,7 +30,7 @@
         """
         @param CM: instance of QuickContactManagement
         """
-        debug("Contact List init")
+        debug(_("Contact List init"))
         self.CM = CM
     
     def clear_contacts(self, jid):
--- a/frontends/quick_frontend/quick_contact_management.py	Wed Mar 03 17:12:23 2010 +1100
+++ b/frontends/quick_frontend/quick_contact_management.py	Fri Mar 05 20:33:10 2010 +1100
@@ -64,7 +64,7 @@
             if self.__contactlist[entity.short].has_key(name):
                 return self.__contactlist[entity.short][name]
         else:
-            debug('Trying to get attribute for an unknown contact')
+            debug(_('Trying to get attribute for an unknown contact'))
         return None
     
     def isConnected(self, entity):
@@ -91,7 +91,7 @@
         if self.__contactlist.has_key(entity.short):
             self.__contactlist[entity.short][key] = value
         else:
-            debug ('Trying to update an unknown contact: %s', entity.short)
+            debug (_('Trying to update an unknown contact: %s'), entity.short)
 
     def get_full(self, entity):
         return entity.short+'/'+self.__contactlist[entity.short]['resources'][-1]
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/frontends/sat_frontend.po	Fri Mar 05 20:33:10 2010 +1100
@@ -0,0 +1,603 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-03-05 20:23+1100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: sortilege/sortilege:89
+msgid "Contact List"
+msgstr ""
+
+#: sortilege/sortilege:241
+msgid "Activating colors"
+msgstr ""
+
+#: sortilege/sortilege:245
+msgid "Deactivating colors"
+msgstr ""
+
+#: sortilege/sortilege:251
+msgid "show chat"
+msgstr ""
+
+#: sortilege/sortilege:253
+#, python-format
+msgid "hiding %s"
+msgstr ""
+
+#: sortilege/sortilege:256
+#, python-format
+msgid "showing %s"
+msgstr ""
+
+#: sortilege/sortilege:266
+#, python-format
+msgid "contact choosed: %s"
+msgstr ""
+
+#: sortilege/sortilege:291
+msgid "FIXME: askConfirmation not implemented"
+msgstr ""
+
+#: sortilege/sortilege:295
+msgid "FIXME: actionResult not implemented"
+msgstr ""
+
+#: sortilege/sortilege:370
+msgid "Pleeeeasse, I can't even breathe !"
+msgstr ""
+
+#: wix/chat.py:68
+msgid "&SendFile\tCTRL-s"
+msgstr ""
+
+#: wix/chat.py:68
+msgid " Send a file to contact"
+msgstr ""
+
+#: wix/chat.py:70
+msgid "&Action"
+msgstr ""
+
+#: wix/chat.py:110
+msgid "Send File"
+msgstr ""
+
+#: wix/chat.py:111
+msgid "Choose a file to send"
+msgstr ""
+
+#: wix/chat.py:113
+#, python-format
+msgid "filename: %s"
+msgstr ""
+
+#: wix/chat.py:116 wix/main_window.py:374
+msgid "File Transfer"
+msgstr ""
+
+#: wix/chat.py:116 wix/main_window.py:374
+#, python-format
+msgid "Copying %s"
+msgstr ""
+
+#: wix/form.py:77
+#, python-format
+msgid "FIXME FIXME FIXME: type [%s] is not implemented"
+msgstr ""
+
+#: wix/form.py:101
+msgid "Submitting form"
+msgstr ""
+
+#: wix/form.py:112
+msgid "Cancelling form"
+msgstr ""
+
+#: wix/form.py:118 wix/gateways.py:191 wix/param.py:123 wix/profile.py:89
+msgid "close"
+msgstr ""
+
+#: wix/gateways.py:30
+msgid ""
+"Be careful ! Gateways allow you to use an external IM (legacy IM), so you "
+"can see your contact as jabber contacts.\n"
+"But when you do this, all your messages go throught the external legacy IM "
+"server, it is a huge privacy issue (i.e.: all your messages throught the "
+"gateway can be monitored, recorded, analyzed by the external server, most of "
+"time a private company)."
+msgstr ""
+
+#: wix/gateways.py:34
+msgid "Gateways manager"
+msgstr ""
+
+#: wix/gateways.py:89
+msgid "Use external XMPP server: "
+msgstr ""
+
+#: wix/gateways.py:92
+msgid "GO !"
+msgstr ""
+
+#: wix/gateways.py:107
+#, python-format
+msgid "Opening gateways manager on [%s]"
+msgstr ""
+
+#: wix/gateways.py:130
+msgid "Unknown IM"
+msgstr ""
+
+#: wix/gateways.py:173
+msgid "Register"
+msgstr ""
+
+#: wix/gateways.py:177
+msgid "Unregister"
+msgstr ""
+
+#: wix/main_window.py:55
+msgid "Online"
+msgstr ""
+
+#: wix/main_window.py:56
+msgid "Free for chat"
+msgstr ""
+
+#: wix/main_window.py:57
+msgid "AFK"
+msgstr ""
+
+#: wix/main_window.py:58
+msgid "DND"
+msgstr ""
+
+#: wix/main_window.py:59
+msgid "Away"
+msgstr ""
+
+#: wix/main_window.py:93
+#, python-format
+msgid "update %s"
+msgstr ""
+
+#: wix/main_window.py:158
+#, python-format
+msgid "adding %s"
+msgstr ""
+
+#: wix/main_window.py:177
+#, python-format
+msgid "removing %s"
+msgstr ""
+
+#: wix/main_window.py:257
+msgid "Wix jabber client"
+msgstr ""
+
+#: wix/main_window.py:286
+msgid "Creating menus"
+msgstr ""
+
+#: wix/main_window.py:288
+msgid "&Connect\tCTRL-c"
+msgstr ""
+
+#: wix/main_window.py:288
+msgid " Connect to the server"
+msgstr ""
+
+#: wix/main_window.py:289
+msgid "&Disconnect\tCTRL-d"
+msgstr ""
+
+#: wix/main_window.py:289
+msgid " Disconnect from the server"
+msgstr ""
+
+#: wix/main_window.py:290
+msgid "&Parameters"
+msgstr ""
+
+#: wix/main_window.py:290
+msgid " Configure the program"
+msgstr ""
+
+#: wix/main_window.py:292
+msgid "E&xit"
+msgstr ""
+
+#: wix/main_window.py:292
+msgid " Terminate the program"
+msgstr ""
+
+#: wix/main_window.py:294
+msgid "&Add contact"
+msgstr ""
+
+#: wix/main_window.py:294
+msgid " Add a contact to your list"
+msgstr ""
+
+#: wix/main_window.py:295
+msgid "&Remove contact"
+msgstr ""
+
+#: wix/main_window.py:295
+msgid " Remove the selected contact from your list"
+msgstr ""
+
+#: wix/main_window.py:297
+msgid "&Show profile"
+msgstr ""
+
+#: wix/main_window.py:297
+msgid " Show contact's profile"
+msgstr ""
+
+#: wix/main_window.py:299
+msgid "&Find Gateways"
+msgstr ""
+
+#: wix/main_window.py:299
+msgid " Find gateways to legacy IM"
+msgstr ""
+
+#: wix/main_window.py:301
+msgid "&General"
+msgstr ""
+
+#: wix/main_window.py:302
+msgid "&Contacts"
+msgstr ""
+
+#: wix/main_window.py:303
+msgid "&Communication"
+msgstr ""
+
+#: wix/main_window.py:342
+#, python-format
+msgid "unmanaged dialog type: %s"
+msgstr ""
+
+#: wix/main_window.py:360
+msgid "Confirmation asked"
+msgstr ""
+
+#: wix/main_window.py:363
+msgid "File transfert confirmation asked"
+msgstr ""
+
+#: wix/main_window.py:364
+#, python-format
+msgid ""
+"The contact %(jid)s wants to send you the file %(filename)s\n"
+"Do you accept ?"
+msgstr ""
+
+#: wix/main_window.py:365
+msgid "File Request"
+msgstr ""
+
+#: wix/main_window.py:370
+msgid "Where do you want to save the file ?"
+msgstr ""
+
+#: wix/main_window.py:383
+msgid "Yes/No confirmation asked"
+msgstr ""
+
+#: wix/main_window.py:385 wix/profile_manager.py:112
+msgid "Confirmation"
+msgstr ""
+
+#: wix/main_window.py:397
+#, python-format
+msgid "actionResult: type = [%(type)s] id = [%(id)s] data = [%(data)s]"
+msgstr ""
+
+#: wix/main_window.py:399
+msgid "unknown id, ignoring"
+msgstr ""
+
+#: wix/main_window.py:406
+msgid "Success"
+msgstr ""
+
+#: wix/main_window.py:414 wix/main_window.py:517 wix/main_window.py:540
+msgid "Error"
+msgstr ""
+
+#: wix/main_window.py:421
+msgid "Form received"
+msgstr ""
+
+#: wix/main_window.py:422
+msgid "Registration"
+msgstr ""
+
+#: wix/main_window.py:436
+#, python-format
+msgid "FIXME FIXME FIXME: type [%s] not implemented"
+msgstr ""
+
+#: wix/main_window.py:468
+#, python-format
+msgid "onContactActivated: %s"
+msgstr ""
+
+#: wix/main_window.py:486
+msgid "Status change request"
+msgstr ""
+
+#: wix/main_window.py:490
+msgid "Param request"
+msgstr ""
+
+#: wix/main_window.py:497
+msgid "Add contact request"
+msgstr ""
+
+#: wix/main_window.py:499
+msgid "Please enter new contact JID"
+msgstr ""
+
+#: wix/main_window.py:500
+msgid "Adding a contact"
+msgstr ""
+
+#: wix/main_window.py:500
+msgid "name@server.tld"
+msgstr ""
+
+#: wix/main_window.py:507
+#, python-format
+msgid "'%s' is an invalid JID !"
+msgstr ""
+
+#: wix/main_window.py:513
+msgid "Remove contact request"
+msgstr ""
+
+#: wix/main_window.py:516 wix/main_window.py:539
+msgid "You haven't selected any contact !"
+msgstr ""
+
+#: wix/main_window.py:524
+#, python-format
+msgid "Are you sure you want to delete %s from your roster list ?"
+msgstr ""
+
+#: wix/main_window.py:525
+msgid "Contact suppression"
+msgstr ""
+
+#: wix/main_window.py:530
+#, python-format
+msgid "Unsubscribing %s presence"
+msgstr ""
+
+#: wix/main_window.py:536
+msgid "Show contact's profile request"
+msgstr ""
+
+#: wix/main_window.py:552
+#, python-format
+msgid "Profile received: [%s]"
+msgstr ""
+
+#: wix/main_window.py:557
+msgid "Find Gateways request"
+msgstr ""
+
+#: wix/main_window.py:569
+msgid "Exiting..."
+msgstr ""
+
+#: wix/main_window.py:573
+msgid "Tray Click"
+msgstr ""
+
+#: wix/param.py:32
+msgid "Configuration"
+msgstr ""
+
+#: wix/param.py:78
+msgid "FIXME FIXME FIXME"
+msgstr ""
+
+#: wix/profile_manager.py:47
+msgid "Profile:"
+msgstr ""
+
+#: wix/profile_manager.py:52
+msgid "New"
+msgstr ""
+
+#: wix/profile_manager.py:53
+msgid "Delete"
+msgstr ""
+
+#: wix/profile_manager.py:60
+msgid "Login"
+msgstr ""
+
+#: wix/profile_manager.py:67
+msgid "Password:"
+msgstr ""
+
+#: wix/profile_manager.py:70
+msgid "Connect"
+msgstr ""
+
+#: wix/profile_manager.py:96
+msgid "Please enter the new profile name"
+msgstr ""
+
+#: wix/profile_manager.py:96
+msgid "New profile"
+msgstr ""
+
+#: wix/profile_manager.py:101 wix/profile_manager.py:133
+msgid "A profile name can't start with a @"
+msgstr ""
+
+#: wix/profile_manager.py:101 wix/profile_manager.py:133
+msgid "Bad profile name"
+msgstr ""
+
+#: wix/profile_manager.py:112
+#, python-format
+msgid "Are you sure to delete the profile [%s]"
+msgstr ""
+
+#: wix/profile_manager.py:130
+msgid "You must select a profile or create a new one before connecting"
+msgstr ""
+
+#: wix/profile_manager.py:130
+msgid "No profile selected"
+msgstr ""
+
+#: wix/profile_manager.py:138
+msgid "The profile is new, we create it"
+msgstr ""
+
+#: wix/profile_manager.py:144
+msgid "Saving new JID"
+msgstr ""
+
+#: wix/profile_manager.py:147
+msgid "Saving new password"
+msgstr ""
+
+#: wix/profile.py:35
+msgid "Full Name"
+msgstr ""
+
+#: wix/profile.py:36
+msgid "Nickname"
+msgstr ""
+
+#: wix/profile.py:37
+msgid "Birthday"
+msgstr ""
+
+#: wix/profile.py:38
+msgid "Phone #"
+msgstr ""
+
+#: wix/profile.py:39
+msgid "Website"
+msgstr ""
+
+#: wix/profile.py:40
+msgid "E-mail"
+msgstr ""
+
+#: wix/profile.py:41
+msgid "Avatar"
+msgstr ""
+
+#: wix/profile.py:84
+msgid "General"
+msgstr ""
+
+#: quick_frontend/quick_app.py:63
+msgid "There is already one profile plugged (we are in single profile mode) !"
+msgstr ""
+
+#: quick_frontend/quick_app.py:67
+msgid "The profile asked doesn't exist"
+msgstr ""
+
+#: quick_frontend/quick_app.py:70
+msgid "The profile is already plugged"
+msgstr ""
+
+#: quick_frontend/quick_app.py:110
+msgid "This profile is not plugged"
+msgstr ""
+
+#: quick_frontend/quick_app.py:121
+msgid "Connected"
+msgstr ""
+
+#: quick_frontend/quick_app.py:128
+msgid "Disconnected"
+msgstr ""
+
+#: quick_frontend/quick_app.py:156
+#, python-format
+msgid "presence update for %(jid)s (show=%(show)s, statuses=%(statuses)s)"
+msgstr ""
+
+#: quick_frontend/quick_app.py:177
+#, python-format
+msgid "Watched jid [%s] is connected !"
+msgstr ""
+
+#: quick_frontend/quick_app.py:205
+#, python-format
+msgid "The contact %s has accepted your subscription"
+msgstr ""
+
+#: quick_frontend/quick_app.py:205 quick_frontend/quick_app.py:211
+msgid "Subscription confirmation"
+msgstr ""
+
+#: quick_frontend/quick_app.py:208
+#, python-format
+msgid "The contact %s has refused your subscription"
+msgstr ""
+
+#: quick_frontend/quick_app.py:208
+msgid "Subscription refusal"
+msgstr ""
+
+#: quick_frontend/quick_app.py:211
+#, python-format
+msgid ""
+"The contact %s wants to subscribe to your presence.\n"
+"Do you accept ?"
+msgstr ""
+
+#: quick_frontend/quick_app.py:226
+#, python-format
+msgid "param update: [%(namespace)s] %(name)s = %(value)s"
+msgstr ""
+
+#: quick_frontend/quick_app.py:228
+#, python-format
+msgid "Changing JID to %s"
+msgstr ""
+
+#: quick_frontend/quick_chat.py:35
+msgid "now we print history"
+msgstr ""
+
+#: quick_frontend/quick_contact_list.py:33
+msgid "Contact List init"
+msgstr ""
+
+#: quick_frontend/quick_contact_management.py:67
+msgid "Trying to get attribute for an unknown contact"
+msgstr ""
+
+#: quick_frontend/quick_contact_management.py:94
+#, python-format
+msgid "Trying to update an unknown contact: %s"
+msgstr ""
--- a/frontends/sortilege/boxsizer.py	Wed Mar 03 17:12:23 2010 +1100
+++ b/frontends/sortilege/boxsizer.py	Fri Mar 05 20:33:10 2010 +1100
@@ -23,12 +23,6 @@
 from window import Window
 import os,pdb
 
-
-def echo(message):
-        return 
-        os.system('echo "'+str(message)+'" >> /tmp/toto')
-
-
 class BoxSizer:
     """This class manage the position of the window like boxes."""
 
@@ -66,22 +60,17 @@
                         #if the last win is hidden, we expand previous visible one
                         current_row[-1][2] = current_row[-1][2] + (win.getX() - oriX)+win.getWidth()
                 else:
-                    echo ("ajout de %s à current row" % (win.__class__.__name__))
                     current_row.append([win, h+y-oriY, w+x-oriX, oriY, oriX])
                     oriX=oriX+w
                     
             if oriX!=0:
-                echo ("ligne visible (dernier: %s)" % win.__class__.__name__)
                 oriY=oriY+h
                 visible_row.append(current_row)
             elif visible_row:
                 #if all the row is empty, we take the space
                 for box in visible_row[-1]:
-                    echo ("on augmente %s de %d" % (box[0].__class__.__name__, h))
                     box[1]=box[1]+h
                 oriY=oriY+h  #this only happen if it's not the first visible row
-            else:
-                echo ("ligne invisible")
 
         for row in visible_row:
             for win in row:
--- a/frontends/sortilege/chat.py	Wed Mar 03 17:12:23 2010 +1100
+++ b/frontends/sortilege/chat.py	Fri Mar 05 20:33:10 2010 +1100
@@ -75,7 +75,6 @@
 
     def update(self):
         if self.isHidden():
-            echo ("fenetre cachee")
             return
         Window.update(self)
         content=[] #what is really printed
--- a/frontends/sortilege/sortilege	Wed Mar 03 17:12:23 2010 +1100
+++ b/frontends/sortilege/sortilege	Fri Mar 05 20:33:10 2010 +1100
@@ -20,6 +20,10 @@
 """
 
 
+from quick_frontend.quick_app import QuickApp
+from quick_frontend.quick_chat_list import QuickChatList
+from quick_frontend.quick_contact_list import QuickContactList
+from quick_frontend.quick_contact_management import QuickContactManagement
 import curses
 import pdb
 from window import Window
@@ -40,10 +44,6 @@
 import struct
 import termios
 from boxsizer import BoxSizer
-from quick_frontend.quick_chat_list import QuickChatList
-from quick_frontend.quick_contact_list import QuickContactList
-from quick_frontend.quick_app import QuickApp
-from quick_frontend.quick_contact_management import QuickContactManagement
 
 
 ### logging configuration FIXME: put this elsewhere ###
@@ -86,7 +86,7 @@
         self.host = host
         self.jid_list = []
         self.__index=0  #indicate which contact is selected (ie: where we are)
-        Window.__init__(self, stdscr, stdscr.getmaxyx()[0]-2,const_CONTACT_WIDTH,0,0, True, "Contact List", code=code)
+        Window.__init__(self, stdscr, stdscr.getmaxyx()[0]-2,const_CONTACT_WIDTH,0,0, True, _("Contact List"), code=code)
 
     def resize(self, height, width, y, x):
         Window.resize(self, height, width, y, x)
@@ -238,22 +238,22 @@
 
     def color(self, activate=True):
         if activate:
-            debug ("Activation des couleurs")
+            debug (_("Activating colors"))
             curses.init_pair(1, curses.COLOR_BLUE, curses.COLOR_BLACK)
             curses.init_pair(2, curses.COLOR_RED, curses.COLOR_BLACK)
         else:
-            debug ("Desactivation des couleurs")
+            debug (_("Deactivating colors"))
             curses.init_pair(1, curses.COLOR_WHITE, curses.COLOR_BLACK)
             curses.init_pair(2, curses.COLOR_WHITE, curses.COLOR_BLACK)
             
 
     def showChat(self, chat):
-        debug ("show chat")
+        debug (_("show chat"))
         if self.currentChat:
-            debug ("hiding %s", self.currentChat)
+            debug (_("hiding %s"), self.currentChat)
             self.chat_wins[self.currentChat].hide()
         self.currentChat=chat
-        debug ("showing %s", self.currentChat)
+        debug (_("showing %s"), self.currentChat)
         self.chat_wins[self.currentChat].show()
         self.chat_wins[self.currentChat].update()
         
@@ -263,7 +263,7 @@
     def onContactChoosed(self, jid_txt):
         """Called when a contact is selected in contact list."""
         jid=JID(jid_txt)
-        debug ("contact choosed: %s", jid)
+        debug (_("contact choosed: %s"), jid)
         self.showChat(jid.short)
         self.statusBar.remove_item(jid.short)
         if len(self.statusBar)==0:
@@ -288,11 +288,11 @@
 
     def askConfirmation(self, type, id, data):
         #FIXME
-        info ("FIXME: askConfirmation not implemented")
+        info (_("FIXME: askConfirmation not implemented"))
 
     def actionResult(self, type, id, data):
         #FIXME
-        info ("FIXME: actionResult not implemented")
+        info (_("FIXME: actionResult not implemented"))
 
     def newMessage(self, from_jid, msg, type, to_jid, profile):
         QuickApp.newMessage(self, from_jid, msg, type, to_jid, profile)
@@ -367,7 +367,7 @@
             stdscr.erase()
             height, width = stdscr.getmaxyx()
             if height<5 and width<35:
-                stdscr.addstr("Pleeeeasse, I can't even breathe !")
+                stdscr.addstr(_("Pleeeeasse, I can't even breathe !"))
             else:
                 for win in self.listWins:
                     win.resizeAdapt()
--- a/frontends/sortilege/statusbar.py	Wed Mar 03 17:12:23 2010 +1100
+++ b/frontends/sortilege/statusbar.py	Fri Mar 05 20:33:10 2010 +1100
@@ -24,10 +24,6 @@
 from window import Window
 import os
 
-def echo(message):
-        return
-        os.system('echo "'+str(message)+'" >> /tmp/toto')
-
 class StatusBar(Window):
     """This class manage the edition of text"""
 
@@ -49,9 +45,7 @@
 
     def update(self):
         if self.isHidden():
-            echo ("status bar hidden") 
             return
-        echo ("update status bar")
         Window.update(self)
         x=0
         for item in self.__items:
--- a/frontends/sortilege/window.py	Wed Mar 03 17:12:23 2010 +1100
+++ b/frontends/sortilege/window.py	Fri Mar 05 20:33:10 2010 +1100
@@ -25,10 +25,6 @@
 import pdb
 
 
-def echo(message):
-        return
-        os.system('echo "'+str(message)+'" >> /tmp/toto')
-
 class Window():
     def __init__(self, parent, height, width, y, x, border=False, title="", code="utf-8"):
         self.__border=border
@@ -93,7 +89,6 @@
         self.__coordAdjust(self.__coords)
         height,width,y,x=self.__coords
        
-        echo ("newwin %d %d %d %d" % (height, width, y, x))
         self.window = self.__parent.subwin(height, width, y, x)
         self.defInsideCoord()
 
--- a/frontends/wix/chat.py	Wed Mar 03 17:12:23 2010 +1100
+++ b/frontends/wix/chat.py	Fri Mar 05 20:33:10 2010 +1100
@@ -65,16 +65,15 @@
     def createMenus(self):
         info("Creating menus")
         actionMenu = wx.Menu()
-        actionMenu.Append(idSEND, "&SendFile	CTRL-s"," Send a file to contact")
+        actionMenu.Append(idSEND, _("&SendFile	CTRL-s"),_(" Send a file to contact"))
         menuBar = wx.MenuBar()
-        menuBar.Append(actionMenu,"&Action")
+        menuBar.Append(actionMenu,_("&Action"))
         self.SetMenuBar(menuBar)
 
         #events
         wx.EVT_MENU(self, idSEND, self.onSendFile)
 
     def __del__(self):
-        debug ("Chat window destructor")
         wx.Frame.__del__(self)
 
     def onClose(self, event):
@@ -108,11 +107,11 @@
     ### events ###
 
     def onSendFile(self, e):
-        debug("Send File")
-        filename = wx.FileSelector("Choose a file to send", flags = wx.FD_FILE_MUST_EXIST)
+        debug(_("Send File"))
+        filename = wx.FileSelector(_("Choose a file to send"), flags = wx.FD_FILE_MUST_EXIST)
         if filename:
-            debug("filename: %s",filename)
+            debug(_("filename: %s"),filename)
             full_jid = self.host.CM.get_full(self.to_jid)
             id = self.host.bridge.sendFile(full_jid, filename)
-            self.host.waitProgress(id, "File Transfer", "Copying %s" % os.path.basename(filename)) 
+            self.host.waitProgress(id, _("File Transfer"), _("Copying %s") % os.path.basename(filename)) 
 
--- a/frontends/wix/form.py	Wed Mar 03 17:12:23 2010 +1100
+++ b/frontends/wix/form.py	Fri Mar 05 20:33:10 2010 +1100
@@ -74,7 +74,7 @@
                 self.ctl_list.append({'name':name, 'type':type, 'control':ctrl})
                 sizer.Add(label)
             else:
-                error("FIXME FIXME FIXME: type [%s] is not implemented" % type)  #FIXME !
+                error(_("FIXME FIXME FIXME: type [%s] is not implemented") % type)  #FIXME !
                 raise NotImplementedError
             sizer.Add(ctrl, 1, flag=wx.EXPAND)
             #self.ctl_list[(name, category)] = ctrl
@@ -98,26 +98,24 @@
 
     def onFormSubmitted(self, event):
         """Called when submit button is clicked"""
-        debug("Submitting form")
+        debug(_("Submitting form"))
         data = []
         for ctrl in self.ctl_list:
             data.append((ctrl["name"], ctrl["control"].GetValue()))
-        print "submitting:",data
         id = self.host.bridge.gatewayRegister("SUBMIT",self.target, data)
         self.host.current_action_ids.add(id)
-        print "action id:",id
         self.MakeModal(False)
         self.Destroy()
         
     def onFormCancelled(self, event):
         """Called when cancel button is clicked"""
-        debug("Cancelling form")
+        debug(_("Cancelling form"))
         self.MakeModal(False)
         self.Close()
    
     def onClose(self, event):
         """Close event: we have to send the form."""
-        debug("close")
+        debug(_("close"))
         self.MakeModal(False)
         event.Skip()
 
--- a/frontends/wix/gateways.py	Wed Mar 03 17:12:23 2010 +1100
+++ b/frontends/wix/gateways.py	Fri Mar 05 20:33:10 2010 +1100
@@ -27,11 +27,11 @@
 from logging import debug, info, error
 from tools.jid  import JID
 
-WARNING_MSG = u"""Be careful ! Gateways allow you to use an external IM (legacy IM), so you can see your contact as jabber contacts.
-But when you do this, all your messages go throught the external legacy IM server, it is a huge privacy issue (i.e.: all your messages throught the gateway can be monitored, recorded, analyzed by the external server, most of time a private company)."""
+WARNING_MSG = _(u"""Be careful ! Gateways allow you to use an external IM (legacy IM), so you can see your contact as jabber contacts.
+But when you do this, all your messages go throught the external legacy IM server, it is a huge privacy issue (i.e.: all your messages throught the gateway can be monitored, recorded, analyzed by the external server, most of time a private company).""")
 
 class GatewaysManager(wx.Frame):
-    def __init__(self, host, gateways, title="Gateways manager", server=None):
+    def __init__(self, host, gateways, title=_("Gateways manager"), server=None):
         super(GatewaysManager, self).__init__(None, title=title)
 
         self.host = host
@@ -86,10 +86,10 @@
         self.ext_server_panel.SetAutoLayout(True)
         self.sizer.Add(self.ext_server_panel, 0, flag=wx.EXPAND)
 
-        ext_server_label = wx.StaticText(self.ext_server_panel, -1, "Use external XMPP server: ")
+        ext_server_label = wx.StaticText(self.ext_server_panel, -1, _("Use external XMPP server: "))
         ext_server_label.SetFont(wx.ITALIC_FONT)
         self.ext_server_text = wx.TextCtrl(self.ext_server_panel, -1)
-        ext_server_button =  wx.Button(self.ext_server_panel, -1, "GO !")
+        ext_server_button =  wx.Button(self.ext_server_panel, -1, _("GO !"))
         self.ext_server_panel.Bind(wx.EVT_BUTTON, self.browseExternalServer, ext_server_button)
 
         self.ext_server_panel.sizer.Add(ext_server_label)
@@ -104,7 +104,7 @@
     def browseExternalServer(self, event):
         """Open the gateway manager on given server"""
         server = self.ext_server_text.GetValue()
-        debug("Opening gateways manager on [%s]" % server) 
+        debug(_("Opening gateways manager on [%s]") % server) 
         id = self.host.bridge.findGateways(server)
         self.host.current_action_ids.add(id)
         self.host.current_action_ids_cb[id] = self.host.onGatewaysFound
@@ -127,7 +127,7 @@
        
         #Then the transport type message
         
-        type_label_txt = 'Unknown IM'
+        type_label_txt = _('Unknown IM')
 
         if param['type'] == 'irc':
             type_label_txt = "Internet Relay Chat"
@@ -159,7 +159,6 @@
             gateway_jid = event.GetEventObject().gateway_jid
             id = self.host.bridge.in_band_register(gateway_jid)
             self.host.current_action_ids.add(id)
-            print "register id:",id
             self.MakeModal(False) 
             self.Destroy()
 
@@ -168,15 +167,14 @@
             gateway_jid = event.GetEventObject().gateway_jid
             id = self.host.bridge.gatewayRegister("CANCEL",gateway_jid, None)
             self.host.current_action_ids.add(id)
-            print "unregister id:",id
             self.MakeModal(False) 
             self.Destroy()
         
-        reg_button = wx.Button(self.panel, -1, "Register", size=wx.Size(-1, 8))
+        reg_button = wx.Button(self.panel, -1, _("Register"), size=wx.Size(-1, 8))
         reg_button.SetFont(self.button_font)
         reg_button.gateway_jid = JID(gateway)
         self.panel.Bind(wx.EVT_BUTTON, register_cb, reg_button)
-        unreg_button = wx.Button(self.panel, -1, "Unregister", size=wx.Size(-1, 8))
+        unreg_button = wx.Button(self.panel, -1, _("Unregister"), size=wx.Size(-1, 8))
         unreg_button.SetFont(self.button_font)
         unreg_button.gateway_jid = JID(gateway)
         self.panel.Bind(wx.EVT_BUTTON, unregister_cb, unreg_button)
@@ -190,7 +188,7 @@
 
     def onClose(self, event):
         """Close event"""
-        debug("close")
+        debug(_("close"))
         self.MakeModal(False)
         event.Skip()
 
--- a/frontends/wix/main_window.py	Wed Mar 03 17:12:23 2010 +1100
+++ b/frontends/wix/main_window.py	Fri Mar 05 20:33:10 2010 +1100
@@ -20,6 +20,10 @@
 """
 
 
+from quick_frontend.quick_chat_list import QuickChatList
+from quick_frontend.quick_app import QuickApp
+from quick_frontend.quick_contact_list import QuickContactList
+from quick_frontend.quick_contact_management import QuickContactManagement
 import wx
 from chat import Chat
 from param import Param
@@ -32,10 +36,6 @@
 import pdb
 from tools.jid  import JID
 from logging import debug, info, error
-from quick_frontend.quick_chat_list import QuickChatList
-from quick_frontend.quick_contact_list import QuickContactList
-from quick_frontend.quick_app import QuickApp
-from quick_frontend.quick_contact_management import QuickContactManagement
 from cgi import escape
 import sys
 
@@ -52,11 +52,11 @@
 idSHOW_PROFILE,\
 idFIND_GATEWAYS = range(8)
 const_DEFAULT_GROUP = "Unclassed"
-const_STATUS        = [("", "Online", None),
-                       ("chat", "Free for chat", "green"),
-                       ("away", "AFK", "brown"),
-                       ("dnd", "DND", "red"),
-                       ("xa", "Away", "red")]
+const_STATUS        = [("", _("Online"), None),
+                       ("chat", _("Free for chat"), "green"),
+                       ("away", _("AFK"), "brown"),
+                       ("dnd", _("DND"), "red"),
+                       ("xa", _("Away"), "red")]
 
 class ChatList(QuickChatList):
     """This class manage the list of chat windows"""
@@ -90,7 +90,7 @@
         return result
 
     def replace(self, jid):
-        debug("update %s" % jid)
+        debug(_("update %s") % jid)
         if not self.__find_idx(jid):
             self.add(jid)
         else:
@@ -155,7 +155,7 @@
 
     def add(self, jid):
         """add a contact to the list"""
-        debug ("adding %s",jid)
+        debug (_("adding %s"),jid)
         groups = self.CM.getAttr(jid, 'groups')
         if not groups:
             idx = self.Append(self.__presentItem(jid), jid)
@@ -174,7 +174,7 @@
 
     def remove(self, jid):
         """remove a contact from the list"""
-        debug ("removing %s",jid)
+        debug (_("removing %s"),jid)
         list_idx = self.__find_idx(jid)
         list_idx.reverse()  #we me make some deletions, we have to reverse the order
         for i in list_idx:
@@ -254,7 +254,7 @@
         #tray icon
         ticon = wx.Icon(IMAGE_DIR+'/crystal/tray_icon.xpm', wx.BITMAP_TYPE_XPM)
         self.tray_icon = wx.TaskBarIcon()
-        self.tray_icon.SetIcon(ticon, "Wix jabber client")
+        self.tray_icon.SetIcon(ticon, _("Wix jabber client"))
         wx.EVT_TASKBAR_LEFT_UP(self.tray_icon, self.onTrayClick)
 
 
@@ -283,24 +283,24 @@
             self.bridge.connect(profile_key)
 
     def createMenus(self):
-        info("Creating menus")
+        info(_("Creating menus"))
         connectMenu = wx.Menu()
-        connectMenu.Append(idCONNECT, "&Connect	CTRL-c"," Connect to the server")
-        connectMenu.Append(idDISCONNECT, "&Disconnect	CTRL-d"," Disconnect from the server")
-        connectMenu.Append(idPARAM,"&Parameters"," Configure the program")
+        connectMenu.Append(idCONNECT, _("&Connect	CTRL-c"),_(" Connect to the server"))
+        connectMenu.Append(idDISCONNECT, _("&Disconnect	CTRL-d"),_(" Disconnect from the server"))
+        connectMenu.Append(idPARAM,_("&Parameters"),_(" Configure the program"))
         connectMenu.AppendSeparator()
-        connectMenu.Append(idEXIT,"E&xit"," Terminate the program")
+        connectMenu.Append(idEXIT,_("E&xit"),_(" Terminate the program"))
         contactMenu = wx.Menu()
-        contactMenu.Append(idADD_CONTACT, "&Add contact"," Add a contact to your list")
-        contactMenu.Append(idREMOVE_CONTACT, "&Remove contact"," Remove the selected contact from your list")
+        contactMenu.Append(idADD_CONTACT, _("&Add contact"),_(" Add a contact to your list"))
+        contactMenu.Append(idREMOVE_CONTACT, _("&Remove contact"),_(" Remove the selected contact from your list"))
         contactMenu.AppendSeparator()
-        contactMenu.Append(idSHOW_PROFILE, "&Show profile", " Show contact's profile")
+        contactMenu.Append(idSHOW_PROFILE, _("&Show profile"), _(" Show contact's profile"))
         communicationMenu = wx.Menu()
-        communicationMenu.Append(idFIND_GATEWAYS, "&Find Gateways"," Find gateways to legacy IM")
+        communicationMenu.Append(idFIND_GATEWAYS, _("&Find Gateways"),_(" Find gateways to legacy IM"))
         self.menuBar = wx.MenuBar()
-        self.menuBar.Append(connectMenu,"&General")
-        self.menuBar.Append(contactMenu,"&Contacts")
-        self.menuBar.Append(communicationMenu,"&Communication")
+        self.menuBar.Append(connectMenu,_("&General"))
+        self.menuBar.Append(contactMenu,_("&Contacts"))
+        self.menuBar.Append(communicationMenu,_("&Communication"))
         self.SetMenuBar(self.menuBar)
 
         #events
@@ -339,7 +339,7 @@
             flags = wx.YES_NO | wx.ICON_QUESTION
         else:
             flags = wx.OK | wx.ICON_INFORMATION
-            error('unmanaged dialog type: %s', type)
+            error(_('unmanaged dialog type: %s'), type)
         dlg = wx.MessageDialog(self, message, title, flags)
         answer = dlg.ShowModal()
         dlg.Destroy()
@@ -357,21 +357,21 @@
 
     def askConfirmation(self, type, id, data):
         #TODO: refactor this in QuickApp
-        debug ("Confirmation asked")
+        debug (_("Confirmation asked"))
         answer_data={}
         if type == "FILE_TRANSFERT":
-            debug ("File transfert confirmation asked")
-            dlg = wx.MessageDialog(self, "The contact %s wants to send you the file %s\nDo you accept ?" % (data["from"], data["filename"]),
-                                   'File Request',
+            debug (_("File transfert confirmation asked"))
+            dlg = wx.MessageDialog(self, _("The contact %(jid)s wants to send you the file %(filename)s\nDo you accept ?") % {'jid':data["from"], 'filename':data["filename"]},
+                                   _('File Request'),
                                    wx.YES_NO | wx.ICON_QUESTION
                                   )
             answer=dlg.ShowModal()
             if answer==wx.ID_YES:
-                filename = wx.FileSelector("Where do you want to save the file ?", flags = wx.FD_SAVE | wx.FD_OVERWRITE_PROMPT)
+                filename = wx.FileSelector(_("Where do you want to save the file ?"), flags = wx.FD_SAVE | wx.FD_OVERWRITE_PROMPT)
                 if filename:
                     answer_data["dest_path"] = filename
                     self.bridge.confirmationAnswer(id, True, answer_data)
-                    self.waitProgress(id, "File Transfer", "Copying %s" % os.path.basename(filename)) 
+                    self.waitProgress(id, _("File Transfer"), _("Copying %s") % os.path.basename(filename)) 
                 else:
                     answer = wx.ID_NO
             if answer==wx.ID_NO:
@@ -380,9 +380,9 @@
             dlg.Destroy()
 
         elif type == "YES/NO":
-            debug ("Yes/No confirmation asked")
+            debug (_("Yes/No confirmation asked"))
             dlg = wx.MessageDialog(self, data["message"],
-                                   'Confirmation',
+                                   _('Confirmation'),
                                    wx.YES_NO | wx.ICON_QUESTION
                                   )
             answer=dlg.ShowModal()
@@ -394,16 +394,16 @@
             dlg.Destroy()
 
     def actionResult(self, type, id, data):
-        debug ("actionResult: type = [%s] id = [%s] data = [%s]" % (type, id, data))
+        debug (_("actionResult: type = [%(type)s] id = [%(id)s] data = [%(data)s]") % {'type':type, 'id':id, 'data':data})
         if not id in self.current_action_ids:
-            debug ('unknown id, ignoring')
+            debug (_('unknown id, ignoring'))
             return
         if type == "SUPPRESS":
             self.current_action_ids.remove(id)
         elif type == "SUCCESS":
             self.current_action_ids.remove(id)
             dlg = wx.MessageDialog(self, data["message"],
-                                   'Success',
+                                   _('Success'),
                                    wx.OK | wx.ICON_INFORMATION
                                   )
             dlg.ShowModal()
@@ -411,15 +411,15 @@
         elif type == "ERROR":
             self.current_action_ids.remove(id)
             dlg = wx.MessageDialog(self, data["message"],
-                                   'Error',
+                                   _('Error'),
                                    wx.OK | wx.ICON_ERROR
                                   )
             dlg.ShowModal()
             dlg.Destroy()
         elif type == "FORM":
             self.current_action_ids.remove(id)
-            debug ("Form received")
-            form=Form(self, title='Registration', target = data['target'], type = data['type'], xml_data = data['xml'])
+            debug (_("Form received"))
+            form=Form(self, title=_('Registration'), target = data['target'], type = data['type'], xml_data = data['xml'])
         elif type == "RESULT":
             self.current_action_ids.remove(id)
             if self.current_action_ids_cb.has_key(id):
@@ -433,7 +433,7 @@
                 del self.current_action_ids_cb[id]
                 callback(data)
         else:
-            error ("FIXME FIXME FIXME: type [%s] not implemented" % type)
+            error (_("FIXME FIXME FIXME: type [%s] not implemented") % type)
             raise NotImplementedError
 
 
@@ -465,7 +465,7 @@
     ### events ###
 
     def onContactActivated(self, jid):
-        debug ("onContactActivated: %s", jid)
+        debug (_("onContactActivated: %s"), jid)
         if self.chat_wins[jid.short].IsShown():
             self.chat_wins[jid.short].Hide()
         else:
@@ -483,61 +483,61 @@
         self.bridge.setPresence(show=show, statuses={'default':status})  #FIXME: manage multilingual statuses
 
     def onStatusChange(self, e):
-        debug("Status change request")
+        debug(_("Status change request"))
         self.__updateStatus()
 
     def onParam(self, e):
-        debug("Param request")
+        debug(_("Param request"))
         param=Param(self)
 
     def onExit(self, e):
         self.Close()
     
     def onAddContact(self, e):
-        debug("Add contact request")
+        debug(_("Add contact request"))
         dlg = wx.TextEntryDialog(
-                self, 'Please enter new contact JID',
-                'Adding a contact', 'name@server.tld')
+                self, _('Please enter new contact JID'),
+                _('Adding a contact'), _('name@server.tld'))
 
         if dlg.ShowModal() == wx.ID_OK:
             jid=JID(dlg.GetValue())
             if jid.is_valid():
                 self.bridge.addContact(jid.short)
             else:
-                error ("'%s' is an invalid JID !", jid)
+                error (_("'%s' is an invalid JID !"), jid)
                 #TODO: notice the user
 
         dlg.Destroy()
 
     def onRemoveContact(self, e):
-        debug("Remove contact request")
+        debug(_("Remove contact request"))
         target = self.contactList.getSelection()
         if not target:
-            dlg = wx.MessageDialog(self, "You haven't selected any contact !",
-                                   'Error',
+            dlg = wx.MessageDialog(self, _("You haven't selected any contact !"),
+                                   _('Error'),
                                    wx.OK | wx.ICON_ERROR
                                   )
             dlg.ShowModal()
             dlg.Destroy()
             return
 
-        dlg = wx.MessageDialog(self, "Are you sure you want to delete %s from your roster list ?" % target.short,
-                               'Contact suppression',
+        dlg = wx.MessageDialog(self, _("Are you sure you want to delete %s from your roster list ?") % target.short,
+                               _('Contact suppression'),
                                wx.YES_NO | wx.ICON_QUESTION
                               )
 
         if dlg.ShowModal() == wx.ID_YES:
-            info("Unsubscribing %s presence", target.short)
+            info(_("Unsubscribing %s presence"), target.short)
             self.bridge.delContact(target.short)
 
         dlg.Destroy()
 
     def onShowProfile(self, e):
-        debug("Show contact's profile request")
+        debug(_("Show contact's profile request"))
         target = self.contactList.getSelection()
         if not target:
-            dlg = wx.MessageDialog(self, "You haven't selected any contact !",
-                                   'Error',
+            dlg = wx.MessageDialog(self, _("You haven't selected any contact !"),
+                                   _('Error'),
                                    wx.OK | wx.ICON_ERROR
                                   )
             dlg.ShowModal()
@@ -549,12 +549,12 @@
    
     def onProfileReceived(self, data):
         """Called when a profile is received"""
-        debug ('Profile received: [%s]' % data)
+        debug (_('Profile received: [%s]') % data)
         profile=Profile(self, data)
         
 
     def onFindGateways(self, e):
-        debug("Find Gateways request")
+        debug(_("Find Gateways request"))
         id = self.bridge.findGateways(self.profiles[self.profile]['whoami'].domain)
         self.current_action_ids.add(id)
         self.current_action_ids_cb[id] = self.onGatewaysFound
@@ -566,11 +566,11 @@
         gatewayManager = GatewaysManager(self, data, server=target)
     
     def onClose(self, e):
-        info("Exiting...")
+        info(_("Exiting..."))
         e.Skip()
 
     def onTrayClick(self, e):
-        debug("Tray Click")
+        debug(_("Tray Click"))
         if self.IsShown():
             self.Hide()
         else:
--- a/frontends/wix/param.py	Wed Mar 03 17:12:23 2010 +1100
+++ b/frontends/wix/param.py	Fri Mar 05 20:33:10 2010 +1100
@@ -29,7 +29,7 @@
 
 
 class Param(wx.Frame):
-    def __init__(self, host, title="Configuration"):
+    def __init__(self, host, title=_("Configuration")):
         super(Param, self).__init__(None, title=title)
 
         self.host = host
@@ -75,7 +75,7 @@
             elif type=="button":
                 ctrl = wx.Button(panel, -1, value)
             else:
-                error("FIXME FIXME FIXME")  #FIXME !
+                error(_("FIXME FIXME FIXME"))  #FIXME !
                 raise NotImplementedError
             ctrl.param_id=(name, category)
             sizer.Add(ctrl, 1, flag=wx.EXPAND)
@@ -107,12 +107,10 @@
     def onButtonClicked(self, event):
         """Called when a paramated is modified"""
         self.__save_parameters()
-        print "Button Clicked (%s/%s)" % event.GetEventObject().param_id
         name, category = event.GetEventObject().param_id
         data = {"name":name, "category":category}
         id = self.host.bridge.launchAction("button", data)
         self.host.current_action_ids.add(id)
-        print "action id:",id
         event.Skip()
 
     def __save_parameters(self):
@@ -122,7 +120,7 @@
 
     def onClose(self, event):
         """Close event: we have to save the params."""
-        debug("close")
+        debug(_("close"))
         #now we save the modifier params
         self.__save_parameters()
 
--- a/frontends/wix/profile.py	Wed Mar 03 17:12:23 2010 +1100
+++ b/frontends/wix/profile.py	Fri Mar 05 20:33:10 2010 +1100
@@ -32,13 +32,13 @@
         super(Profile, self).__init__(None, title=title)
         self.host = host
 
-        self.name_dict = { 'fullname': 'Full Name',
-                           'nick' : 'Nickname',
-                           'birthday' : 'Birthday',
-                           'phone' : 'Phone #',
-                           'website' : 'Website',
-                           'email' : 'E-mail',
-                           'avatar' : 'Avatar'
+        self.name_dict = { 'fullname': _('Full Name'),
+                           'nick' : _('Nickname'),
+                           'birthday' : _('Birthday'),
+                           'phone' : _('Phone #'),
+                           'website' : _('Website'),
+                           'email' : _('E-mail'),
+                           'avatar' : _('Avatar')
                          }
         self.ctl_list = {}  # usefull to access ctrl, key = (name)
 
@@ -81,12 +81,12 @@
 
 
         
-        self.notebook.AddPage(generaltab, "General")
+        self.notebook.AddPage(generaltab, _("General"))
 
 
     def onClose(self, event):
         """Close event"""
-        debug("close")
+        debug(_("close"))
         self.MakeModal(False)
         event.Skip()
 
--- a/frontends/wix/profile_manager.py	Wed Mar 03 17:12:23 2010 +1100
+++ b/frontends/wix/profile_manager.py	Fri Mar 05 20:33:10 2010 +1100
@@ -44,30 +44,30 @@
         self.panel_id = wx
 
         self.sizer.Add(wx.Window(self, -1), 1)
-        self.sizer.Add(wx.StaticText(self, -1, "Profile:"), 0, flag=wx.ALIGN_CENTER)
+        self.sizer.Add(wx.StaticText(self, -1, _("Profile:")), 0, flag=wx.ALIGN_CENTER)
         self.sizer.Add(self.profile_name, 0, flag=wx.ALIGN_CENTER)
         button_panel = wx.Panel(self)
         button_panel.sizer = wx.BoxSizer(wx.HORIZONTAL)
         button_panel.SetSizer(button_panel.sizer)
-        button_new = wx.Button(button_panel, -1, "New")
-        button_del = wx.Button(button_panel, -1, "Delete")
+        button_new = wx.Button(button_panel, -1, _("New"))
+        button_del = wx.Button(button_panel, -1, _("Delete"))
         button_panel.sizer.Add(button_new)
         button_panel.sizer.Add(button_del)
         self.sizer.Add(button_panel, flag=wx.CENTER)
         self.Bind(wx.EVT_BUTTON, self.onNewProfile, button_new)
         self.Bind(wx.EVT_BUTTON, self.onDeleteProfile, button_del)
         
-        login_box = wx.StaticBox(self, -1, "Login")
+        login_box = wx.StaticBox(self, -1, _("Login"))
         self.login_sizer = wx.StaticBoxSizer(login_box, wx.VERTICAL)
         self.sizer.Add(self.login_sizer, 1, wx.EXPAND | wx.ALL)
         self.login_jid = wx.TextCtrl(self, -1)
         self.login_sizer.Add(wx.StaticText(self, -1, "JID:"), 0, flag=wx.ALIGN_CENTER)
         self.login_sizer.Add(self.login_jid, flag=wx.EXPAND)
         self.login_pass = wx.TextCtrl(self, -1, style = wx.TE_PASSWORD)
-        self.login_sizer.Add(wx.StaticText(self, -1, "Password:"), 0, flag=wx.ALIGN_CENTER)
+        self.login_sizer.Add(wx.StaticText(self, -1, _("Password:")), 0, flag=wx.ALIGN_CENTER)
         self.login_sizer.Add(self.login_pass, flag=wx.EXPAND)
        
-        loggin_button = wx.Button(self, -1, "Connect")
+        loggin_button = wx.Button(self, -1, _("Connect"))
         self.Bind(wx.EVT_BUTTON, self.onConnectButton, loggin_button)
         self.login_sizer.Add(loggin_button, flag=wx.ALIGN_CENTER)
 
@@ -93,12 +93,12 @@
    
  
     def onNewProfile(self, event):
-        dlg = wx.TextEntryDialog(self, "Please enter the new profile name", "New profile", style = wx.OK | wx.CANCEL)
+        dlg = wx.TextEntryDialog(self, _("Please enter the new profile name"), _("New profile"), style = wx.OK | wx.CANCEL)
         if dlg.ShowModal() == wx.ID_OK:
             name = dlg.GetValue()
             if name:
                 if name[0]=='@':
-                    wx.MessageDialog(self, "A profile name can't start with a @", "Bad profile name", wx.ICON_ERROR).ShowModal()
+                    wx.MessageDialog(self, _("A profile name can't start with a @"), _("Bad profile name"), wx.ICON_ERROR).ShowModal()
                 else:
                     profile = self.host.bridge.createProfile(name)
                     self.__refillProfiles()
@@ -109,7 +109,7 @@
         name = self.profile_name.GetValue()
         if not name:
             return
-        dlg = wx.MessageDialog(self, "Are you sure to delete the profile [%s]" % name, "Confirmation", wx.ICON_QUESTION | wx.YES_NO)
+        dlg = wx.MessageDialog(self, _("Are you sure to delete the profile [%s]") % name, _("Confirmation"), wx.ICON_QUESTION | wx.YES_NO)
         if dlg.ShowModal() == wx.ID_YES:
             self.host.bridge.deleteProfile(name)
             self.__refillProfiles()
@@ -127,24 +127,24 @@
         """Called when the Connect button is pressed"""
         name = self.profile_name.GetValue()
         if not name:
-            wx.MessageDialog(self, "You must select a profile a create a new one before connecting", "No profile selected", wx.ICON_ERROR).ShowModal()
+            wx.MessageDialog(self, _("You must select a profile or create a new one before connecting"), _("No profile selected"), wx.ICON_ERROR).ShowModal()
             return
         if name[0]=='@':
-            wx.MessageDialog(self, "A profile name can't start with a @", "Bad profile name", wx.ICON_ERROR).ShowModal()
+            wx.MessageDialog(self, _("A profile name can't start with a @"), _("Bad profile name"), wx.ICON_ERROR).ShowModal()
             return
         profile = None # gof
         profile = self.host.bridge.getProfileName(name)
         if not profile:
-            debug("The profile is new, we create it")
+            debug(_("The profile is new, we create it"))
         old_jid = self.host.bridge.getParamA("JabberID", "Connection", profile_key=profile)
         old_pass = self.host.bridge.getParamA("Password", "Connection", profile_key=profile)
         new_jid = self.login_jid.GetValue()
         new_pass = self.login_pass.GetValue()
         if old_jid != new_jid:
-            debug('Saving new JID')
+            debug(_('Saving new JID'))
             self.host.bridge.setParam("JabberID", new_jid, "Connection", profile)
         if old_pass != new_pass:
-            debug('Saving new password')
+            debug(_('Saving new password'))
             self.host.bridge.setParam("JabberID", new_pass, "Connection", profile)
         self.host.plug_profile(name)