diff --git a/.tx/config b/.tx/config
index 114a89996..b1f1421c7 100644
--- a/.tx/config
+++ b/.tx/config
@@ -2,6 +2,7 @@
source_file = apps/i2ptunnel/locale/messages_en.po
source_lang = en
trans.de = apps/i2ptunnel/locale/messages_de.po
+trans.fr = apps/i2ptunnel/locale/messages_fr.po
trans.nl = apps/i2ptunnel/locale/messages_nl.po
trans.ru = apps/i2ptunnel/locale/messages_ru.po
trans.zh_CN = apps/i2ptunnel/locale/messages_zh.po
@@ -20,6 +21,7 @@ trans.zh_CN = apps/routerconsole/locale/messages_zh.po
source_file = apps/susidns/locale/messages_en.po
source_lang = en
trans.de = apps/susidns/locale/messages_de.po
+trans.fr = apps/susidns/locale/messages_fr.po
trans.nl = apps/susidns/locale/messages_nl.po
trans.ru = apps/susidns/locale/messages_ru.po
trans.zh_CN = apps/susidns/locale/messages_zh.po
@@ -27,6 +29,7 @@ trans.zh_CN = apps/susidns/locale/messages_zh.po
[I2P.susimail]
source_file = apps/susimail/locale/messages_en.po
source_lang = en
+trans.fr = apps/susimail/locale/messages_fr.po
trans.nl = apps/susimail/locale/messages_nl.po
[I2P.i2psnark]
@@ -43,6 +46,7 @@ trans.zh_CN = apps/i2psnark/locale/messages_zh.po
[I2P.desktopgui]
source_file = apps/desktopgui/locale/messages_en.po
source_lang = en
+trans.fr = apps/desktopgui/locale/messages_fr.po
trans.nl = apps/desktopgui/locale/messages_nl.po
trans.ru = apps/desktopgui/locale/messages_ru.po
trans.zh_CN = apps/desktopgui/locale/messages_zh.po
diff --git a/apps/i2psnark/locale/messages_fr.po b/apps/i2psnark/locale/messages_fr.po
index 0bd450919..2a27c043c 100644
--- a/apps/i2psnark/locale/messages_fr.po
+++ b/apps/i2psnark/locale/messages_fr.po
@@ -883,7 +883,7 @@ msgstr "Torrent déjà actif: {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1990
#, java-format
msgid "Torrent already in the queue: {0}"
-msgstr "Torrent déjà dans la file d'attente: {0}"
+msgstr "Torrent déjà dans la file d\\''attente: {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1996
#, java-format
diff --git a/apps/i2ptunnel/locale/messages_fr.po b/apps/i2ptunnel/locale/messages_fr.po
index c901f3135..68ca3345c 100644
--- a/apps/i2ptunnel/locale/messages_fr.po
+++ b/apps/i2ptunnel/locale/messages_fr.po
@@ -21,7 +21,7 @@ msgstr ""
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:474
#, java-format
msgid "To visit the destination in your host database, click here. To visit the conflicting addresshelper destination, click here."
-msgstr "Pour aller à la destination de votre base de données d'hôtes, cliquez here. Pour aller à la destination de l'aide d'adresse en conflit, cliquez là."
+msgstr "Pour aller à la destination de votre base de données d\\''hôtes, cliquez here. Pour aller à la destination de l\\''aide d\\''adresse en conflit, cliquez là."
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:931
msgid "Click a link below to look for an address helper by using a \"jump\" service:"
diff --git a/apps/routerconsole/locale/messages_fr.po b/apps/routerconsole/locale/messages_fr.po
index 751aa9850..b7b6d9457 100644
--- a/apps/routerconsole/locale/messages_fr.po
+++ b/apps/routerconsole/locale/messages_fr.po
@@ -155,8 +155,8 @@ msgstr "Réamorçage en cours"
#, java-format
msgid "Reseed fetched only 1 router."
msgid_plural "Reseed fetched only {0} routers."
-msgstr[0] "Le réamorçage n'a trouvé qu'un seul routeur."
-msgstr[1] "Le réamorçage n'a trouvé que {0} routeurs."
+msgstr[0] "Le réamorçage n\\''a trouvé qu\\''un seul routeur."
+msgstr[1] "Le réamorçage n\\''a trouvé que {0} routeurs."
#: ../../../router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java:148
msgid "Reseed failed."
@@ -178,7 +178,7 @@ msgstr "Réamorçage: collecte des URL sources."
#: ../../../router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java:335
#, java-format
msgid "Reseeding: fetching router info from seed URL ({0} successful, {1} errors)."
-msgstr "Réamorçage: collecte routerInfo depuis l'URL source ({0} réussie, {1} erreurs)."
+msgstr "Réamorçage: collecte routerInfo depuis l\\''URL source ({0} réussie, {1} erreurs)."
#: ../../../router/java/src/net/i2p/router/transport/CommSystemFacadeImpl.java:512
msgid "NetDb entry"
@@ -382,7 +382,7 @@ msgstr "Le nombre de paquets en double reçus du pair"
#: ../../../router/java/src/net/i2p/router/transport/ntcp/EstablishState.java:627
#, java-format
msgid "Excessive clock skew: {0}"
-msgstr "Décalage excessif de l'horloge: {0}"
+msgstr "Décalage excessif de l\\''horloge: {0}"
#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:732
msgid "NTCP connections"
@@ -1549,7 +1549,7 @@ msgstr "Greffon {0} arrêté"
#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:103
#, java-format
msgid "Error stopping plugin {0}"
-msgstr "Erreur d'arrêt du greffon {0}"
+msgstr "Erreur d\\''arrêt du greffon {0}"
#. label (IE)
#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:124
@@ -2819,7 +2819,7 @@ msgstr "Ce greffon est seulement une mise à jour, mais le greffon prérequis n'
#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:364
#, java-format
msgid "Failed to install plugin in {0}"
-msgstr "Échec d'installation du greffon {0}"
+msgstr "Échec d\\''installation du greffon {0}"
#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:371
#, java-format
@@ -3079,7 +3079,7 @@ msgstr "Le bannissement temporaire expire dans {0}"
#: ../java/src/net/i2p/router/web/ShitlistRenderer.java:64
#, java-format
msgid "Banned until restart or in {0}"
-msgstr "Banni jusqu'au redémarrage ou dans {0}"
+msgstr "Banni jusqu\\''au redémarrage ou dans {0}"
#: ../java/src/net/i2p/router/web/ShitlistRenderer.java:76
msgid "unban now"
@@ -3199,7 +3199,7 @@ msgstr[1] "Il y a eu {0} évènements sur cette période."
#: ../java/src/net/i2p/router/web/StatsGenerator.java:203
#, java-format
msgid "The period ended {0} ago."
-msgstr "La période s'est terminée il y a {0}."
+msgstr "La période s\\''est terminée il y a {0}."
#: ../java/src/net/i2p/router/web/StatsGenerator.java:205
msgid "No events"
@@ -4193,7 +4193,7 @@ msgstr "NOTE"
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:361
#, java-format
msgid "You have configured I2P to share only {0} KBps."
-msgstr "Vous avez configuré I2P pour qu'il ne partage que {0} ko/s."
+msgstr "Vous avez configuré I2P pour qu\\''il ne partage que {0} ko/s."
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:364
msgid "I2P requires at least 12KBps to enable sharing. "
@@ -5077,7 +5077,7 @@ msgstr "Lancer le navigateur au démarrage du routeur?"
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:379
msgid "I2P's main configuration interface is this web console, so for your convenience I2P can launch a web browser on startup pointing at"
-msgstr "La plus grande partie de la configuration d\'I2P se fait dans cette console, et donc pour votre confort, I2P peut lancer au démarrage votre navigateur sur "
+msgstr "La plus grande partie de la configuration d'I2P se fait dans cette console, et donc pour votre confort, I2P peut lancer au démarrage votre navigateur sur "
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configstats_jsp.java:113
msgid "config stats"
@@ -5431,7 +5431,7 @@ msgstr "Statistiques du routeur I2P"
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/summaryframe_jsp.java:255
#, java-format
msgid "Disable {0} Refresh"
-msgstr "Désactiver l'actualisation automatique {0}"
+msgstr "Désactiver l\\''actualisation automatique {0}"
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/tunnels_jsp.java:111
msgid "tunnel summary"
diff --git a/apps/susidns/locale/messages_fr.po b/apps/susidns/locale/messages_fr.po
index 546e3a71f..d2b100d5a 100644
--- a/apps/susidns/locale/messages_fr.po
+++ b/apps/susidns/locale/messages_fr.po
@@ -72,12 +72,12 @@ msgstr "Remplacer"
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:264
#, java-format
msgid "Host name {0} is already in addressbook, unchanged."
-msgstr "L'hôte {0} est déjà présent: inchangé."
+msgstr "L\\''hôte {0} est déjà présent: inchangé."
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:266
#, java-format
msgid "Host name {0} is already in addressbook with a different destination. Click \"Replace\" to overwrite."
-msgstr "L'hôte {0} est déjà présent avec une destination différente. Cliquez sur \"Remplacer\"...pour le remplacer."
+msgstr "L\\''hôte {0} est déjà présent avec une destination différente. Cliquez sur \"Remplacer\"...pour le remplacer."
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:278
#, java-format
diff --git a/apps/susimail/locale/messages_fr.po b/apps/susimail/locale/messages_fr.po
index d44ac0f27..d93234c78 100644
--- a/apps/susimail/locale/messages_fr.po
+++ b/apps/susimail/locale/messages_fr.po
@@ -29,7 +29,7 @@ msgstr "Avertissement: pas d'encodage de transfert trouvé: retour en 7bits."
#: src/src/i2p/susi/webmail/WebMail.java:478
#, java-format
msgid "No encoder found for encoding \\''{0}\\''."
-msgstr "Pas d'encodeur trouvé pour encoder \\''{0}\\''."
+msgstr "Pas d\\''encodeur trouvé pour encoder \\''{0}\\''."
#: src/src/i2p/susi/webmail/WebMail.java:484
msgid "Warning: no charset found, fallback to US-ASCII."
@@ -132,12 +132,12 @@ msgstr "ID de message incorrecte."
#: src/src/i2p/susi/webmail/WebMail.java:958
#, java-format
msgid "No Encoding found for {0}"
-msgstr "PAs d'encodage trouvé pour {0}"
+msgstr "Pas d\\''encodage trouvé pour {0}"
#: src/src/i2p/susi/webmail/WebMail.java:962
#, java-format
msgid "Could not encode data: {0}"
-msgstr "Impossible d'encoder les données: {0}"
+msgstr "Impossible d\\''encoder les données: {0}"
#: src/src/i2p/susi/webmail/WebMail.java:967
#, java-format
@@ -204,7 +204,7 @@ msgstr "Adresse d'expéditeur correcte non trouvée"
#: src/src/i2p/susi/webmail/WebMail.java:1400
#, java-format
msgid "Found no valid address in \\''{0}\\''."
-msgstr "Pas d'adresse correcte dans \\''{0}\\''."
+msgstr "Pas d\\''adresse correcte dans \\''{0}\\''."
#: src/src/i2p/susi/webmail/WebMail.java:1419
msgid "No recipients found."