tor-commits
Threads by month
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
April 2015
- 19 participants
- 1111 discussions
[translation/liveusb-creator_completed] Update translations for liveusb-creator_completed
by translation@torproject.org 04 Apr '15
by translation@torproject.org 04 Apr '15
04 Apr '15
commit 5fc856a0033f27931de8f5899111675bf8d12007
Author: Translation commit bot <translation(a)torproject.org>
Date: Sat Apr 4 16:45:20 2015 +0000
Update translations for liveusb-creator_completed
---
fr/fr.po | 147 +++++++++++++++++++++++++++++++-------------------------------
1 file changed, 74 insertions(+), 73 deletions(-)
diff --git a/fr/fr.po b/fr/fr.po
index 7e935e3..12533ad 100644
--- a/fr/fr.po
+++ b/fr/fr.po
@@ -7,6 +7,7 @@
# Alex <chioubaca(a)gmail.com>, 2014
# arpalord <arpalord(a)gmail.com>, 2012
# 5boro <bastien(a)pontet.eu>, 2015
+# BitingBird <bitingbird(a)riseup.net>, 2015
# Charles-Antoine Couret, 2009
# Charles-Antoine Couret <cacouret(a)wanadoo.fr>, 2009
# Emmanuel Simond, 2014
@@ -21,9 +22,9 @@ msgid ""
msgstr ""
"Project-Id-Version: The Tor Project\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-02-11 19:14+0100\n"
-"PO-Revision-Date: 2015-02-14 09:01+0000\n"
-"Last-Translator: 5boro <bastien(a)pontet.eu>\n"
+"POT-Creation-Date: 2015-03-30 14:40+0200\n"
+"PO-Revision-Date: 2015-04-04 16:44+0000\n"
+"Last-Translator: BitingBird <bitingbird(a)riseup.net>\n"
"Language-Team: French (http://www.transifex.com/projects/p/torproject/language/fr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -51,7 +52,7 @@ msgstr "%(size)s %(label)s"
msgid "%(vendor)s %(model)s (%(details)s) - %(device)s"
msgstr "%(vendor)s %(model)s (%(details)s) - %(device)s"
-#: ../liveusb/creator.py:1063
+#: ../liveusb/creator.py:1072
#, python-format
msgid "%s already bootable"
msgstr "%s déjà amorçable"
@@ -108,16 +109,16 @@ msgid ""
"persist after a reboot."
msgstr "En allouant de l'espace supplémentaire sur votre clé USB pour le volume persistant, vous serez en mesure de stocker des données et d'effectuer des modifications permanentes sur le système d'exploitation. Sans ça, toutes les données sauvegardées ne seront plus disponibles après un redémarrage."
-#: ../liveusb/creator.py:1162 ../liveusb/creator.py:1425
+#: ../liveusb/creator.py:1171 ../liveusb/creator.py:1434
#, python-format
msgid "Calculating the SHA1 of %s"
msgstr "Calcul du SHA1 de %s"
-#: ../liveusb/creator.py:1373
+#: ../liveusb/creator.py:1382
msgid "Cannot find"
msgstr "Impossible de trouver"
-#: ../liveusb/creator.py:556
+#: ../liveusb/creator.py:558
#, python-format
msgid "Cannot find device %s"
msgstr "Impossible de trouver le périphérique %s"
@@ -136,7 +137,7 @@ msgid ""
"Upgrade"
msgstr "Cloner\n&&\nMettre à jour"
-#: ../liveusb/creator.py:408
+#: ../liveusb/creator.py:410
#, python-format
msgid "Creating %sMB persistent overlay"
msgstr "Création du volume persistant de %s Mo"
@@ -144,7 +145,7 @@ msgstr "Création du volume persistant de %s Mo"
#: ../liveusb/gui.py:553
msgid ""
"Device is not yet mounted, so we cannot determine the amount of free space."
-msgstr "L'appareil n'est pas encore monté, nous ne pouvons donc pas déterminer la quantité d'espace libre disponible."
+msgstr "Le périphérique n'est pas encore monté, nous ne pouvons donc pas déterminer la quantité d'espace libre disponible."
#: ../liveusb/dialog.py:157
#, python-format
@@ -164,16 +165,16 @@ msgstr "Échec du téléchargement : "
msgid "Downloading %s..."
msgstr "Téléchargement de %s..."
-#: ../liveusb/creator.py:1158
+#: ../liveusb/creator.py:1167
msgid "Drive is a loopback, skipping MBR reset"
-msgstr "Le périphérique est un « loopback », pas de réinitialisation du MBR nécessaire"
+msgstr "Le périphérique est un « loopback », la réinitialisation du MBR est inutile"
-#: ../liveusb/creator.py:827
+#: ../liveusb/creator.py:836
#, python-format
msgid "Entering unmount_device for '%(device)s'"
msgstr "Lancement de unmount_device pour '%(device)s'"
-#: ../liveusb/creator.py:1238
+#: ../liveusb/creator.py:1247
msgid "Error probing device"
msgstr "Erreur lors de l'accès au périphérique"
@@ -183,26 +184,26 @@ msgid ""
"continue."
msgstr "Erreur : impossible de configurer le label ou d'obtenir l'UUID de votre périphérique. Impossible de continuer."
-#: ../liveusb/creator.py:384
+#: ../liveusb/creator.py:386
msgid ""
"Error: The SHA1 of your Live CD is invalid. You can run this program with "
"the --noverify argument to bypass this verification check."
msgstr "Erreur : le SHA1 de votre Live CD est invalide. Vous pouvez exécuter ce programme avec l'option « --noverify » pour contourner cette vérification."
-#: ../liveusb/creator.py:147
+#: ../liveusb/creator.py:148
msgid "Extracting live image to the target device..."
msgstr "Extraction de l'image Live sur le périphérique cible..."
-#: ../liveusb/creator.py:1106
+#: ../liveusb/creator.py:1115
#, python-format
msgid "Formatting %(device)s as FAT32"
msgstr "Formattage de %(device)s en FAT32"
-#: ../liveusb/creator.py:142
+#: ../liveusb/creator.py:143
msgid "ISO MD5 checksum passed"
-msgstr "Somme de contrôle MD5 de l'image correcte"
+msgstr "Vérification de la somme de contrôle MD5 de l'ISO réussie"
-#: ../liveusb/creator.py:140
+#: ../liveusb/creator.py:141
msgid "ISO MD5 checksum verification failed"
msgstr "Échec de la vérification de la somme de contrôle MD5 de l'ISO"
@@ -229,26 +230,26 @@ msgstr "Installation terminée ! (%s)"
msgid "Installation was completed. Press OK to close this program."
msgstr "L'installation est terminée. Appuyez sur OK pour fermer ce programme."
-#: ../liveusb/creator.py:963 ../liveusb/creator.py:1279
+#: ../liveusb/creator.py:972 ../liveusb/creator.py:1288
msgid "Installing bootloader..."
-msgstr "Installation du bootloader..."
+msgstr "Installation du chargeur de démarrage (bootloader)..."
#: ../liveusb/gui.py:269
msgid "LiveUSB creation failed!"
msgstr "Échec lors de la création du Live USB !"
-#: ../liveusb/creator.py:1374
+#: ../liveusb/creator.py:1383
msgid ""
"Make sure to extract the entire liveusb-creator zip file before running this"
" program."
msgstr "Assurez-vous d'avoir extrait l'archive zip complète de liveusb-creator avant d'exécuter ce programme."
-#: ../liveusb/creator.py:1250
+#: ../liveusb/creator.py:1259
msgid ""
"Make sure your USB key is plugged in and formatted with the FAT filesystem"
msgstr "Assurez-vous que votre clé USB est branchée et qu'elle est formatée avec le système de fichiers FAT"
-#: ../liveusb/creator.py:849
+#: ../liveusb/creator.py:858
#, python-format
msgid "Mount %s exists after unmounting"
msgstr "Le montage %s existe après démontage"
@@ -258,11 +259,11 @@ msgstr "Le montage %s existe après démontage"
msgid "No free space on device %(device)s"
msgstr "Espace libre insuffisant sur le périphérique %(device)s"
-#: ../liveusb/creator.py:816
+#: ../liveusb/creator.py:825
msgid "No mount points found"
msgstr "Aucun point de montage trouvé"
-#: ../liveusb/creator.py:401
+#: ../liveusb/creator.py:403
#, python-format
msgid ""
"Not enough free space on device.\n"
@@ -275,9 +276,9 @@ msgstr "La partition est de type FAT16, la taille du volume est donc restreinte
#: ../liveusb/gui.py:536
msgid "Partition is FAT32; Restricting overlay size to 4G"
-msgstr "La partition est en FAT32; Restriction de la taille du volume à 4Go."
+msgstr "La partition est en FAT32 ; Restriction de la taille du volume à 4Go."
-#: ../liveusb/creator.py:228 ../liveusb/creator.py:856
+#: ../liveusb/creator.py:229 ../liveusb/creator.py:865
#, python-format
msgid "Partitioning device %(device)s"
msgstr "Partitionnement du périphérique %(device)s"
@@ -296,22 +297,22 @@ msgstr "Veuillez confirmer le périphérique sélectionné"
#: ../liveusb/gui.py:453
msgid "Refreshing releases..."
-msgstr "Raffraîchissement des versions..."
+msgstr "Rafraîchissement des versions..."
#: ../liveusb/gui.py:458
msgid "Releases updated!"
msgstr "Version mise à jour!"
-#: ../liveusb/creator.py:970 ../liveusb/creator.py:1297
+#: ../liveusb/creator.py:979 ../liveusb/creator.py:1306
#, python-format
msgid "Removing %(file)s"
msgstr "Suppression du fichier %(file)s"
-#: ../liveusb/creator.py:483
+#: ../liveusb/creator.py:485
msgid "Removing existing Live OS"
msgstr "Suppression du système d'exploitation Live existant"
-#: ../liveusb/creator.py:1152
+#: ../liveusb/creator.py:1161
#, python-format
msgid "Resetting Master Boot Record of %s"
msgstr "Réinitialisation du « Master Boot Record » de %s"
@@ -320,23 +321,23 @@ msgstr "Réinitialisation du « Master Boot Record » de %s"
msgid "Select Live ISO"
msgstr "Sélectionnez l'ISO Live"
-#: ../liveusb/creator.py:184
+#: ../liveusb/creator.py:185
msgid "Setting up OLPC boot file..."
msgstr "Configuration du fichier d'amorçage de l'OLPC..."
-#: ../liveusb/creator.py:730
+#: ../liveusb/creator.py:739
#, python-format
msgid ""
"Some partitions of the target device %(device)s are mounted. They will be "
"unmounted before starting the installation process."
msgstr "Des partitions sont actuellement montées sur le périphérique cible %(device)s. Elles seront démontées avant de démarrer le processus d'installation."
-#: ../liveusb/creator.py:133
+#: ../liveusb/creator.py:134
msgid ""
"Source type does not support verification of ISO MD5 checksum, skipping"
msgstr "Ce type de source ne permet pas la vérification de la somme de contrôle MD5 de l'ISO, passage à l'étape suivante"
-#: ../liveusb/creator.py:1186
+#: ../liveusb/creator.py:1195
msgid "Synchronizing data on disk..."
msgstr "Synchronisation des données sur le disque..."
@@ -350,7 +351,7 @@ msgid ""
"another file."
msgstr "Le fichier sélectionné ne peut pas être lu. Veuillez changer les permissions associées ou sélectionner un autre fichier."
-#: ../liveusb/creator.py:345
+#: ../liveusb/creator.py:347
#, python-format
msgid ""
"There was a problem executing the following command: `%(command)s`.\n"
@@ -362,7 +363,7 @@ msgid ""
"This button allows you to browse for an existing Live system ISO that you "
"have previously downloaded. If you do not select one, a release will be "
"downloaded for you automatically."
-msgstr "Ce bouton vous permet de rechercher une image ISO Live que vous auriez téléchargé auparavant. Si vous n'en sélectionnez pas, une version sera téléchargée pour vous automatiquement."
+msgstr "Ce bouton vous permet de rechercher une image ISO Live que vous auriez téléchargée auparavant. Si vous n'en sélectionnez pas, une version sera téléchargée pour vous automatiquement."
#: ../liveusb/dialog.py:164
msgid ""
@@ -370,7 +371,7 @@ msgid ""
"optionally downloading a release (if an existing one wasn't selected), "
"extracting the ISO to the USB device, creating the persistent overlay, and "
"installing the bootloader."
-msgstr "Ce bouton va démarrer le processus de création du LiveUSB. Cela implique l'éventuel téléchargement d'une version (si aucune n'a été sélectionnée), l'extraction de l'image ISO sur le périphérique USB, la création d'un volume persistant et l'installation du bootloader."
+msgstr "Ce bouton va démarrer le processus de création du LiveUSB. Cela implique l'éventuel téléchargement d'une version (si aucune n'a été sélectionnée), l'extraction de l'image ISO sur le périphérique USB, la création d'un volume persistant et l'installation du chargeur de démarrage (bootloader)."
#: ../liveusb/dialog.py:158
msgid ""
@@ -382,13 +383,13 @@ msgstr "Ceci est la clé USB sur laquelle vous souhaitez installer votre systèm
msgid ""
"This is the progress bar that will indicate how far along in the LiveUSB "
"creation process you are"
-msgstr "C'est la barre de progression qui vous indiquera l'avancement de la création du LiveUSB."
+msgstr "Ceci est la barre de progression qui vous indiquera l'avancement de la création du LiveUSB."
#: ../liveusb/dialog.py:162
msgid "This is the status console, where all messages get written to."
-msgstr "C'eci est la console d'état, où tous les messages sont écrits."
+msgstr "Ceci est la console d'état, où tous les messages sont écrits."
-#: ../liveusb/creator.py:925
+#: ../liveusb/creator.py:934
msgid "Trying to continue anyway."
msgstr "On tente de continuer malgré tout."
@@ -396,17 +397,17 @@ msgstr "On tente de continuer malgré tout."
msgid "USB drive found"
msgstr "Lecteur USB détecté"
-#: ../liveusb/creator.py:958
+#: ../liveusb/creator.py:967
#, python-format
msgid "Unable to change volume label: %(message)s"
msgstr "Impossible de changer le label du volume : %(message)s"
-#: ../liveusb/creator.py:492 ../liveusb/creator.py:503
+#: ../liveusb/creator.py:494 ../liveusb/creator.py:505
#, python-format
msgid "Unable to chmod %(file)s: %(message)s"
msgstr "Impossible de changer les permissions de %(file)s : %(message)s"
-#: ../liveusb/creator.py:469
+#: ../liveusb/creator.py:471
#, python-format
msgid "Unable to copy %(infile)s to %(outfile)s: %(message)s"
msgstr "Impossible de copier %(infile)s vers %(outfile)s : %(message)s"
@@ -415,15 +416,15 @@ msgstr "Impossible de copier %(infile)s vers %(outfile)s : %(message)s"
msgid "Unable to find any USB drive"
msgstr "Impossible de trouver un lecteur USB"
-#: ../liveusb/creator.py:1240
+#: ../liveusb/creator.py:1249
msgid "Unable to find any supported device"
msgstr "Impossible de trouver un périphérique pris en charge"
-#: ../liveusb/creator.py:1083
+#: ../liveusb/creator.py:1092
msgid "Unable to find partition"
msgstr "Impossible de trouver la partition"
-#: ../liveusb/creator.py:1320
+#: ../liveusb/creator.py:1329
msgid ""
"Unable to get Win32_LogicalDisk; win32com query did not return any results"
msgstr "Impossible d'avoir accès à « Win32_LogicalDisk » ; la requête « win32com » n'a pas fourni de résultat."
@@ -432,22 +433,22 @@ msgstr "Impossible d'avoir accès à « Win32_LogicalDisk » ; la requête «
msgid "Unable to mount device"
msgstr "Impossible de monter le périphérique"
-#: ../liveusb/creator.py:804
+#: ../liveusb/creator.py:813
#, python-format
msgid "Unable to mount device: %(message)s"
msgstr "Impossible de monter le périphérique : %(message)s"
-#: ../liveusb/creator.py:508
+#: ../liveusb/creator.py:510
#, python-format
msgid "Unable to remove directory from previous LiveOS: %(message)s"
msgstr "Impossible d'enlever le dossier du système d'exploitation Live précédent : %(message)s"
-#: ../liveusb/creator.py:496
+#: ../liveusb/creator.py:498
#, python-format
msgid "Unable to remove file from previous LiveOS: %(message)s"
msgstr "Impossible d'enlever le fichier du système d'exploitation Live précédent : %(message)s"
-#: ../liveusb/creator.py:1155
+#: ../liveusb/creator.py:1164
msgid ""
"Unable to reset MBR. You may not have the `syslinux` package installed."
msgstr "Impossible de réinitialiser le MBR. Le paquet `syslinux` n'est sans doute pas installé."
@@ -456,23 +457,23 @@ msgstr "Impossible de réinitialiser le MBR. Le paquet `syslinux` n'est sans dou
msgid ""
"Unable to use the selected file. You may have better luck if you move your "
"ISO to the root of your drive (ie: C:\\)"
-msgstr "Impossible d'utiliser le fichier sélectionné. Vous devriez avoir plus de chance en déplacant l'ISO à la racine de votre disque (i.e. : C:\\)"
+msgstr "Impossible d'utiliser le fichier sélectionné. Vous devriez avoir plus de chance en déplaçant l'ISO à la racine de votre disque (i.e. : C:\\)"
-#: ../liveusb/creator.py:711
+#: ../liveusb/creator.py:720
#, python-format
msgid "Unable to write on %(device)s, skipping."
msgstr "Impossible d'écrire sur %(device)s, passage à l'étape suivante."
-#: ../liveusb/creator.py:390
+#: ../liveusb/creator.py:392
msgid "Unknown ISO, skipping checksum verification"
msgstr "ISO inconnue, omission de la vérification de la somme de contrôle"
-#: ../liveusb/creator.py:800
+#: ../liveusb/creator.py:809
#, python-format
msgid "Unknown dbus exception while trying to mount device: %(message)s"
msgstr "Exception dbus inconnue lors de la tentative de montage du périphérique : %(message)s"
-#: ../liveusb/creator.py:779 ../liveusb/creator.py:937
+#: ../liveusb/creator.py:788 ../liveusb/creator.py:946
msgid "Unknown filesystem. Your device may need to be reformatted."
msgstr "Système de fichiers inconnu. Votre périphérique doit être reformaté."
@@ -481,41 +482,41 @@ msgstr "Système de fichiers inconnu. Votre périphérique doit être reformaté
msgid "Unknown release: %s"
msgstr "Version inconnue: %s"
-#: ../liveusb/creator.py:841
+#: ../liveusb/creator.py:850
#, python-format
msgid "Unmounting '%(udi)s' on '%(device)s'"
msgstr "Démontage de '%(udi)s' sur '%(device)s'"
-#: ../liveusb/creator.py:837
+#: ../liveusb/creator.py:846
#, python-format
msgid "Unmounting mounted filesystems on '%(device)s'"
msgstr "Démontage des systèmes de fichiers sur '%(device)s'"
-#: ../liveusb/creator.py:922
+#: ../liveusb/creator.py:931
#, python-format
msgid "Unsupported device '%(device)s', please report a bug."
-msgstr "Périphérique '%(device)s' non pris en charge, merci de signaler un bug."
+msgstr "Périphérique '%(device)s' non pris en charge, merci de rapporter un bug."
-#: ../liveusb/creator.py:784 ../liveusb/creator.py:940
+#: ../liveusb/creator.py:793 ../liveusb/creator.py:949
#, python-format
msgid "Unsupported filesystem: %s"
msgstr "Système de fichiers non pris en charge : %s"
-#: ../liveusb/creator.py:782
+#: ../liveusb/creator.py:791
#, python-format
msgid ""
"Unsupported filesystem: %s\n"
"In case you are trying to upgrade a manually installed Tails system (that is, if it was installed without this installer), this option is not supported: you need to install it anew to start with, e.g. by choosing the \"Clone & Install\" action instead."
msgstr "Système de fichiers non supporté : %s\nAu cas où vous essayeriez de mettre à jour une version de Tails installée manuellement (autrement dit, si elle a été installée sans l'installeur), cette option n'est pas supportée : vous devez la réinstaller, e.g. en choisissant l'action \"Cloner & Installer\"."
-#: ../liveusb/creator.py:1253
+#: ../liveusb/creator.py:1262
#, python-format
msgid ""
"Unsupported filesystem: %s\n"
"Please backup and format your USB key with the FAT filesystem."
msgstr "Système de fichiers non pris en charge : %s\nVeuillez sauvegarder le contenu de votre clé USB et la formater avec le système de fichiers FAT."
-#: ../liveusb/creator.py:882
+#: ../liveusb/creator.py:891
#, python-format
msgid "Updating properties of system partition %(system_partition)s"
msgstr "Mise à jour des propriétés de la partition système %(system_partition)s"
@@ -528,19 +529,19 @@ msgstr "Mettre à jour à partir de l'ISO"
msgid "Use existing Live system ISO"
msgstr "Utiliser l'image ISO du système Live existant"
-#: ../liveusb/creator.py:135
+#: ../liveusb/creator.py:136
msgid "Verifying ISO MD5 checksum"
msgstr "Vérification de la somme de contrôle MD5 de l'ISO"
-#: ../liveusb/creator.py:364
+#: ../liveusb/creator.py:366
msgid "Verifying SHA1 checksum of LiveCD image..."
msgstr "Vérification de la somme de contrôle SHA1 de l'image du Live CD..."
-#: ../liveusb/creator.py:368
+#: ../liveusb/creator.py:370
msgid "Verifying SHA256 checksum of LiveCD image..."
msgstr "Vérification de la somme de contrôle SHA256 de l'image du Live CD..."
-#: ../liveusb/creator.py:934 ../liveusb/creator.py:1246
+#: ../liveusb/creator.py:943 ../liveusb/creator.py:1255
msgid "Verifying filesystem..."
msgstr "Vérification du système de fichiers..."
@@ -556,7 +557,7 @@ msgid ""
"check the \"Run this program as an administrator\" box."
msgstr "Attention : cet outil doit être exécuté en tant qu'Administrateur. Pour cela, clic-droit sur l'icône et ouvrez les Propriétés. Dans l'onglet Compatibilité, cochez la case \"Exécuter ce programme en tant qu'Administrateur\"."
-#: ../liveusb/creator.py:154
+#: ../liveusb/creator.py:155
#, python-format
msgid "Wrote to device at %(speed)d MB/sec"
msgstr "Écriture sur le périphérique effectuée à %(speed)d Mo/sec"
@@ -574,9 +575,9 @@ msgid ""
"You are going to upgrade Tails on the %(parent_size)s %(vendor)s %(model)s "
"device (%(device)s). Any persistent volume on this device will remain "
"unchanged. Continue?"
-msgstr "Vous allez mettre à jour Tails sur le périphérique %(parent_size)s %(vendor)s %(model)s (%(device)s). Tout volume persistant sur ce périphérique sera conservé. Continuer?"
+msgstr "Vous allez mettre à jour Tails sur le périphérique %(parent_size)s %(vendor)s %(model)s (%(device)s). Tout volume persistant sur ce périphérique sera conservé. Continuer ?"
-#: ../liveusb/creator.py:618
+#: ../liveusb/creator.py:620
msgid ""
"You are using an old version of syslinux-extlinux that does not support the "
"ext4 filesystem"
@@ -586,7 +587,7 @@ msgstr "Vous utilisez une version obsolète de syslinux-extlinux, qui ne permet
msgid "You can try again to resume your download"
msgstr "Vous pouvez essayer de reprendre votre téléchargement"
-#: ../liveusb/creator.py:94
+#: ../liveusb/creator.py:95
msgid "You must run this application as root"
msgstr "Vous devez exécuter cette application en tant que superutilisateur (root)"
1
0
[translation/liveusb-creator] Update translations for liveusb-creator
by translation@torproject.org 04 Apr '15
by translation@torproject.org 04 Apr '15
04 Apr '15
commit 2f9833ce5a3040f11f9bb060977649f2b61d8ba4
Author: Translation commit bot <translation(a)torproject.org>
Date: Sat Apr 4 16:45:16 2015 +0000
Update translations for liveusb-creator
---
fr/fr.po | 147 +++++++++++++++++++++++++++++++-------------------------------
1 file changed, 74 insertions(+), 73 deletions(-)
diff --git a/fr/fr.po b/fr/fr.po
index 7e935e3..12533ad 100644
--- a/fr/fr.po
+++ b/fr/fr.po
@@ -7,6 +7,7 @@
# Alex <chioubaca(a)gmail.com>, 2014
# arpalord <arpalord(a)gmail.com>, 2012
# 5boro <bastien(a)pontet.eu>, 2015
+# BitingBird <bitingbird(a)riseup.net>, 2015
# Charles-Antoine Couret, 2009
# Charles-Antoine Couret <cacouret(a)wanadoo.fr>, 2009
# Emmanuel Simond, 2014
@@ -21,9 +22,9 @@ msgid ""
msgstr ""
"Project-Id-Version: The Tor Project\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-02-11 19:14+0100\n"
-"PO-Revision-Date: 2015-02-14 09:01+0000\n"
-"Last-Translator: 5boro <bastien(a)pontet.eu>\n"
+"POT-Creation-Date: 2015-03-30 14:40+0200\n"
+"PO-Revision-Date: 2015-04-04 16:44+0000\n"
+"Last-Translator: BitingBird <bitingbird(a)riseup.net>\n"
"Language-Team: French (http://www.transifex.com/projects/p/torproject/language/fr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -51,7 +52,7 @@ msgstr "%(size)s %(label)s"
msgid "%(vendor)s %(model)s (%(details)s) - %(device)s"
msgstr "%(vendor)s %(model)s (%(details)s) - %(device)s"
-#: ../liveusb/creator.py:1063
+#: ../liveusb/creator.py:1072
#, python-format
msgid "%s already bootable"
msgstr "%s déjà amorçable"
@@ -108,16 +109,16 @@ msgid ""
"persist after a reboot."
msgstr "En allouant de l'espace supplémentaire sur votre clé USB pour le volume persistant, vous serez en mesure de stocker des données et d'effectuer des modifications permanentes sur le système d'exploitation. Sans ça, toutes les données sauvegardées ne seront plus disponibles après un redémarrage."
-#: ../liveusb/creator.py:1162 ../liveusb/creator.py:1425
+#: ../liveusb/creator.py:1171 ../liveusb/creator.py:1434
#, python-format
msgid "Calculating the SHA1 of %s"
msgstr "Calcul du SHA1 de %s"
-#: ../liveusb/creator.py:1373
+#: ../liveusb/creator.py:1382
msgid "Cannot find"
msgstr "Impossible de trouver"
-#: ../liveusb/creator.py:556
+#: ../liveusb/creator.py:558
#, python-format
msgid "Cannot find device %s"
msgstr "Impossible de trouver le périphérique %s"
@@ -136,7 +137,7 @@ msgid ""
"Upgrade"
msgstr "Cloner\n&&\nMettre à jour"
-#: ../liveusb/creator.py:408
+#: ../liveusb/creator.py:410
#, python-format
msgid "Creating %sMB persistent overlay"
msgstr "Création du volume persistant de %s Mo"
@@ -144,7 +145,7 @@ msgstr "Création du volume persistant de %s Mo"
#: ../liveusb/gui.py:553
msgid ""
"Device is not yet mounted, so we cannot determine the amount of free space."
-msgstr "L'appareil n'est pas encore monté, nous ne pouvons donc pas déterminer la quantité d'espace libre disponible."
+msgstr "Le périphérique n'est pas encore monté, nous ne pouvons donc pas déterminer la quantité d'espace libre disponible."
#: ../liveusb/dialog.py:157
#, python-format
@@ -164,16 +165,16 @@ msgstr "Échec du téléchargement : "
msgid "Downloading %s..."
msgstr "Téléchargement de %s..."
-#: ../liveusb/creator.py:1158
+#: ../liveusb/creator.py:1167
msgid "Drive is a loopback, skipping MBR reset"
-msgstr "Le périphérique est un « loopback », pas de réinitialisation du MBR nécessaire"
+msgstr "Le périphérique est un « loopback », la réinitialisation du MBR est inutile"
-#: ../liveusb/creator.py:827
+#: ../liveusb/creator.py:836
#, python-format
msgid "Entering unmount_device for '%(device)s'"
msgstr "Lancement de unmount_device pour '%(device)s'"
-#: ../liveusb/creator.py:1238
+#: ../liveusb/creator.py:1247
msgid "Error probing device"
msgstr "Erreur lors de l'accès au périphérique"
@@ -183,26 +184,26 @@ msgid ""
"continue."
msgstr "Erreur : impossible de configurer le label ou d'obtenir l'UUID de votre périphérique. Impossible de continuer."
-#: ../liveusb/creator.py:384
+#: ../liveusb/creator.py:386
msgid ""
"Error: The SHA1 of your Live CD is invalid. You can run this program with "
"the --noverify argument to bypass this verification check."
msgstr "Erreur : le SHA1 de votre Live CD est invalide. Vous pouvez exécuter ce programme avec l'option « --noverify » pour contourner cette vérification."
-#: ../liveusb/creator.py:147
+#: ../liveusb/creator.py:148
msgid "Extracting live image to the target device..."
msgstr "Extraction de l'image Live sur le périphérique cible..."
-#: ../liveusb/creator.py:1106
+#: ../liveusb/creator.py:1115
#, python-format
msgid "Formatting %(device)s as FAT32"
msgstr "Formattage de %(device)s en FAT32"
-#: ../liveusb/creator.py:142
+#: ../liveusb/creator.py:143
msgid "ISO MD5 checksum passed"
-msgstr "Somme de contrôle MD5 de l'image correcte"
+msgstr "Vérification de la somme de contrôle MD5 de l'ISO réussie"
-#: ../liveusb/creator.py:140
+#: ../liveusb/creator.py:141
msgid "ISO MD5 checksum verification failed"
msgstr "Échec de la vérification de la somme de contrôle MD5 de l'ISO"
@@ -229,26 +230,26 @@ msgstr "Installation terminée ! (%s)"
msgid "Installation was completed. Press OK to close this program."
msgstr "L'installation est terminée. Appuyez sur OK pour fermer ce programme."
-#: ../liveusb/creator.py:963 ../liveusb/creator.py:1279
+#: ../liveusb/creator.py:972 ../liveusb/creator.py:1288
msgid "Installing bootloader..."
-msgstr "Installation du bootloader..."
+msgstr "Installation du chargeur de démarrage (bootloader)..."
#: ../liveusb/gui.py:269
msgid "LiveUSB creation failed!"
msgstr "Échec lors de la création du Live USB !"
-#: ../liveusb/creator.py:1374
+#: ../liveusb/creator.py:1383
msgid ""
"Make sure to extract the entire liveusb-creator zip file before running this"
" program."
msgstr "Assurez-vous d'avoir extrait l'archive zip complète de liveusb-creator avant d'exécuter ce programme."
-#: ../liveusb/creator.py:1250
+#: ../liveusb/creator.py:1259
msgid ""
"Make sure your USB key is plugged in and formatted with the FAT filesystem"
msgstr "Assurez-vous que votre clé USB est branchée et qu'elle est formatée avec le système de fichiers FAT"
-#: ../liveusb/creator.py:849
+#: ../liveusb/creator.py:858
#, python-format
msgid "Mount %s exists after unmounting"
msgstr "Le montage %s existe après démontage"
@@ -258,11 +259,11 @@ msgstr "Le montage %s existe après démontage"
msgid "No free space on device %(device)s"
msgstr "Espace libre insuffisant sur le périphérique %(device)s"
-#: ../liveusb/creator.py:816
+#: ../liveusb/creator.py:825
msgid "No mount points found"
msgstr "Aucun point de montage trouvé"
-#: ../liveusb/creator.py:401
+#: ../liveusb/creator.py:403
#, python-format
msgid ""
"Not enough free space on device.\n"
@@ -275,9 +276,9 @@ msgstr "La partition est de type FAT16, la taille du volume est donc restreinte
#: ../liveusb/gui.py:536
msgid "Partition is FAT32; Restricting overlay size to 4G"
-msgstr "La partition est en FAT32; Restriction de la taille du volume à 4Go."
+msgstr "La partition est en FAT32 ; Restriction de la taille du volume à 4Go."
-#: ../liveusb/creator.py:228 ../liveusb/creator.py:856
+#: ../liveusb/creator.py:229 ../liveusb/creator.py:865
#, python-format
msgid "Partitioning device %(device)s"
msgstr "Partitionnement du périphérique %(device)s"
@@ -296,22 +297,22 @@ msgstr "Veuillez confirmer le périphérique sélectionné"
#: ../liveusb/gui.py:453
msgid "Refreshing releases..."
-msgstr "Raffraîchissement des versions..."
+msgstr "Rafraîchissement des versions..."
#: ../liveusb/gui.py:458
msgid "Releases updated!"
msgstr "Version mise à jour!"
-#: ../liveusb/creator.py:970 ../liveusb/creator.py:1297
+#: ../liveusb/creator.py:979 ../liveusb/creator.py:1306
#, python-format
msgid "Removing %(file)s"
msgstr "Suppression du fichier %(file)s"
-#: ../liveusb/creator.py:483
+#: ../liveusb/creator.py:485
msgid "Removing existing Live OS"
msgstr "Suppression du système d'exploitation Live existant"
-#: ../liveusb/creator.py:1152
+#: ../liveusb/creator.py:1161
#, python-format
msgid "Resetting Master Boot Record of %s"
msgstr "Réinitialisation du « Master Boot Record » de %s"
@@ -320,23 +321,23 @@ msgstr "Réinitialisation du « Master Boot Record » de %s"
msgid "Select Live ISO"
msgstr "Sélectionnez l'ISO Live"
-#: ../liveusb/creator.py:184
+#: ../liveusb/creator.py:185
msgid "Setting up OLPC boot file..."
msgstr "Configuration du fichier d'amorçage de l'OLPC..."
-#: ../liveusb/creator.py:730
+#: ../liveusb/creator.py:739
#, python-format
msgid ""
"Some partitions of the target device %(device)s are mounted. They will be "
"unmounted before starting the installation process."
msgstr "Des partitions sont actuellement montées sur le périphérique cible %(device)s. Elles seront démontées avant de démarrer le processus d'installation."
-#: ../liveusb/creator.py:133
+#: ../liveusb/creator.py:134
msgid ""
"Source type does not support verification of ISO MD5 checksum, skipping"
msgstr "Ce type de source ne permet pas la vérification de la somme de contrôle MD5 de l'ISO, passage à l'étape suivante"
-#: ../liveusb/creator.py:1186
+#: ../liveusb/creator.py:1195
msgid "Synchronizing data on disk..."
msgstr "Synchronisation des données sur le disque..."
@@ -350,7 +351,7 @@ msgid ""
"another file."
msgstr "Le fichier sélectionné ne peut pas être lu. Veuillez changer les permissions associées ou sélectionner un autre fichier."
-#: ../liveusb/creator.py:345
+#: ../liveusb/creator.py:347
#, python-format
msgid ""
"There was a problem executing the following command: `%(command)s`.\n"
@@ -362,7 +363,7 @@ msgid ""
"This button allows you to browse for an existing Live system ISO that you "
"have previously downloaded. If you do not select one, a release will be "
"downloaded for you automatically."
-msgstr "Ce bouton vous permet de rechercher une image ISO Live que vous auriez téléchargé auparavant. Si vous n'en sélectionnez pas, une version sera téléchargée pour vous automatiquement."
+msgstr "Ce bouton vous permet de rechercher une image ISO Live que vous auriez téléchargée auparavant. Si vous n'en sélectionnez pas, une version sera téléchargée pour vous automatiquement."
#: ../liveusb/dialog.py:164
msgid ""
@@ -370,7 +371,7 @@ msgid ""
"optionally downloading a release (if an existing one wasn't selected), "
"extracting the ISO to the USB device, creating the persistent overlay, and "
"installing the bootloader."
-msgstr "Ce bouton va démarrer le processus de création du LiveUSB. Cela implique l'éventuel téléchargement d'une version (si aucune n'a été sélectionnée), l'extraction de l'image ISO sur le périphérique USB, la création d'un volume persistant et l'installation du bootloader."
+msgstr "Ce bouton va démarrer le processus de création du LiveUSB. Cela implique l'éventuel téléchargement d'une version (si aucune n'a été sélectionnée), l'extraction de l'image ISO sur le périphérique USB, la création d'un volume persistant et l'installation du chargeur de démarrage (bootloader)."
#: ../liveusb/dialog.py:158
msgid ""
@@ -382,13 +383,13 @@ msgstr "Ceci est la clé USB sur laquelle vous souhaitez installer votre systèm
msgid ""
"This is the progress bar that will indicate how far along in the LiveUSB "
"creation process you are"
-msgstr "C'est la barre de progression qui vous indiquera l'avancement de la création du LiveUSB."
+msgstr "Ceci est la barre de progression qui vous indiquera l'avancement de la création du LiveUSB."
#: ../liveusb/dialog.py:162
msgid "This is the status console, where all messages get written to."
-msgstr "C'eci est la console d'état, où tous les messages sont écrits."
+msgstr "Ceci est la console d'état, où tous les messages sont écrits."
-#: ../liveusb/creator.py:925
+#: ../liveusb/creator.py:934
msgid "Trying to continue anyway."
msgstr "On tente de continuer malgré tout."
@@ -396,17 +397,17 @@ msgstr "On tente de continuer malgré tout."
msgid "USB drive found"
msgstr "Lecteur USB détecté"
-#: ../liveusb/creator.py:958
+#: ../liveusb/creator.py:967
#, python-format
msgid "Unable to change volume label: %(message)s"
msgstr "Impossible de changer le label du volume : %(message)s"
-#: ../liveusb/creator.py:492 ../liveusb/creator.py:503
+#: ../liveusb/creator.py:494 ../liveusb/creator.py:505
#, python-format
msgid "Unable to chmod %(file)s: %(message)s"
msgstr "Impossible de changer les permissions de %(file)s : %(message)s"
-#: ../liveusb/creator.py:469
+#: ../liveusb/creator.py:471
#, python-format
msgid "Unable to copy %(infile)s to %(outfile)s: %(message)s"
msgstr "Impossible de copier %(infile)s vers %(outfile)s : %(message)s"
@@ -415,15 +416,15 @@ msgstr "Impossible de copier %(infile)s vers %(outfile)s : %(message)s"
msgid "Unable to find any USB drive"
msgstr "Impossible de trouver un lecteur USB"
-#: ../liveusb/creator.py:1240
+#: ../liveusb/creator.py:1249
msgid "Unable to find any supported device"
msgstr "Impossible de trouver un périphérique pris en charge"
-#: ../liveusb/creator.py:1083
+#: ../liveusb/creator.py:1092
msgid "Unable to find partition"
msgstr "Impossible de trouver la partition"
-#: ../liveusb/creator.py:1320
+#: ../liveusb/creator.py:1329
msgid ""
"Unable to get Win32_LogicalDisk; win32com query did not return any results"
msgstr "Impossible d'avoir accès à « Win32_LogicalDisk » ; la requête « win32com » n'a pas fourni de résultat."
@@ -432,22 +433,22 @@ msgstr "Impossible d'avoir accès à « Win32_LogicalDisk » ; la requête «
msgid "Unable to mount device"
msgstr "Impossible de monter le périphérique"
-#: ../liveusb/creator.py:804
+#: ../liveusb/creator.py:813
#, python-format
msgid "Unable to mount device: %(message)s"
msgstr "Impossible de monter le périphérique : %(message)s"
-#: ../liveusb/creator.py:508
+#: ../liveusb/creator.py:510
#, python-format
msgid "Unable to remove directory from previous LiveOS: %(message)s"
msgstr "Impossible d'enlever le dossier du système d'exploitation Live précédent : %(message)s"
-#: ../liveusb/creator.py:496
+#: ../liveusb/creator.py:498
#, python-format
msgid "Unable to remove file from previous LiveOS: %(message)s"
msgstr "Impossible d'enlever le fichier du système d'exploitation Live précédent : %(message)s"
-#: ../liveusb/creator.py:1155
+#: ../liveusb/creator.py:1164
msgid ""
"Unable to reset MBR. You may not have the `syslinux` package installed."
msgstr "Impossible de réinitialiser le MBR. Le paquet `syslinux` n'est sans doute pas installé."
@@ -456,23 +457,23 @@ msgstr "Impossible de réinitialiser le MBR. Le paquet `syslinux` n'est sans dou
msgid ""
"Unable to use the selected file. You may have better luck if you move your "
"ISO to the root of your drive (ie: C:\\)"
-msgstr "Impossible d'utiliser le fichier sélectionné. Vous devriez avoir plus de chance en déplacant l'ISO à la racine de votre disque (i.e. : C:\\)"
+msgstr "Impossible d'utiliser le fichier sélectionné. Vous devriez avoir plus de chance en déplaçant l'ISO à la racine de votre disque (i.e. : C:\\)"
-#: ../liveusb/creator.py:711
+#: ../liveusb/creator.py:720
#, python-format
msgid "Unable to write on %(device)s, skipping."
msgstr "Impossible d'écrire sur %(device)s, passage à l'étape suivante."
-#: ../liveusb/creator.py:390
+#: ../liveusb/creator.py:392
msgid "Unknown ISO, skipping checksum verification"
msgstr "ISO inconnue, omission de la vérification de la somme de contrôle"
-#: ../liveusb/creator.py:800
+#: ../liveusb/creator.py:809
#, python-format
msgid "Unknown dbus exception while trying to mount device: %(message)s"
msgstr "Exception dbus inconnue lors de la tentative de montage du périphérique : %(message)s"
-#: ../liveusb/creator.py:779 ../liveusb/creator.py:937
+#: ../liveusb/creator.py:788 ../liveusb/creator.py:946
msgid "Unknown filesystem. Your device may need to be reformatted."
msgstr "Système de fichiers inconnu. Votre périphérique doit être reformaté."
@@ -481,41 +482,41 @@ msgstr "Système de fichiers inconnu. Votre périphérique doit être reformaté
msgid "Unknown release: %s"
msgstr "Version inconnue: %s"
-#: ../liveusb/creator.py:841
+#: ../liveusb/creator.py:850
#, python-format
msgid "Unmounting '%(udi)s' on '%(device)s'"
msgstr "Démontage de '%(udi)s' sur '%(device)s'"
-#: ../liveusb/creator.py:837
+#: ../liveusb/creator.py:846
#, python-format
msgid "Unmounting mounted filesystems on '%(device)s'"
msgstr "Démontage des systèmes de fichiers sur '%(device)s'"
-#: ../liveusb/creator.py:922
+#: ../liveusb/creator.py:931
#, python-format
msgid "Unsupported device '%(device)s', please report a bug."
-msgstr "Périphérique '%(device)s' non pris en charge, merci de signaler un bug."
+msgstr "Périphérique '%(device)s' non pris en charge, merci de rapporter un bug."
-#: ../liveusb/creator.py:784 ../liveusb/creator.py:940
+#: ../liveusb/creator.py:793 ../liveusb/creator.py:949
#, python-format
msgid "Unsupported filesystem: %s"
msgstr "Système de fichiers non pris en charge : %s"
-#: ../liveusb/creator.py:782
+#: ../liveusb/creator.py:791
#, python-format
msgid ""
"Unsupported filesystem: %s\n"
"In case you are trying to upgrade a manually installed Tails system (that is, if it was installed without this installer), this option is not supported: you need to install it anew to start with, e.g. by choosing the \"Clone & Install\" action instead."
msgstr "Système de fichiers non supporté : %s\nAu cas où vous essayeriez de mettre à jour une version de Tails installée manuellement (autrement dit, si elle a été installée sans l'installeur), cette option n'est pas supportée : vous devez la réinstaller, e.g. en choisissant l'action \"Cloner & Installer\"."
-#: ../liveusb/creator.py:1253
+#: ../liveusb/creator.py:1262
#, python-format
msgid ""
"Unsupported filesystem: %s\n"
"Please backup and format your USB key with the FAT filesystem."
msgstr "Système de fichiers non pris en charge : %s\nVeuillez sauvegarder le contenu de votre clé USB et la formater avec le système de fichiers FAT."
-#: ../liveusb/creator.py:882
+#: ../liveusb/creator.py:891
#, python-format
msgid "Updating properties of system partition %(system_partition)s"
msgstr "Mise à jour des propriétés de la partition système %(system_partition)s"
@@ -528,19 +529,19 @@ msgstr "Mettre à jour à partir de l'ISO"
msgid "Use existing Live system ISO"
msgstr "Utiliser l'image ISO du système Live existant"
-#: ../liveusb/creator.py:135
+#: ../liveusb/creator.py:136
msgid "Verifying ISO MD5 checksum"
msgstr "Vérification de la somme de contrôle MD5 de l'ISO"
-#: ../liveusb/creator.py:364
+#: ../liveusb/creator.py:366
msgid "Verifying SHA1 checksum of LiveCD image..."
msgstr "Vérification de la somme de contrôle SHA1 de l'image du Live CD..."
-#: ../liveusb/creator.py:368
+#: ../liveusb/creator.py:370
msgid "Verifying SHA256 checksum of LiveCD image..."
msgstr "Vérification de la somme de contrôle SHA256 de l'image du Live CD..."
-#: ../liveusb/creator.py:934 ../liveusb/creator.py:1246
+#: ../liveusb/creator.py:943 ../liveusb/creator.py:1255
msgid "Verifying filesystem..."
msgstr "Vérification du système de fichiers..."
@@ -556,7 +557,7 @@ msgid ""
"check the \"Run this program as an administrator\" box."
msgstr "Attention : cet outil doit être exécuté en tant qu'Administrateur. Pour cela, clic-droit sur l'icône et ouvrez les Propriétés. Dans l'onglet Compatibilité, cochez la case \"Exécuter ce programme en tant qu'Administrateur\"."
-#: ../liveusb/creator.py:154
+#: ../liveusb/creator.py:155
#, python-format
msgid "Wrote to device at %(speed)d MB/sec"
msgstr "Écriture sur le périphérique effectuée à %(speed)d Mo/sec"
@@ -574,9 +575,9 @@ msgid ""
"You are going to upgrade Tails on the %(parent_size)s %(vendor)s %(model)s "
"device (%(device)s). Any persistent volume on this device will remain "
"unchanged. Continue?"
-msgstr "Vous allez mettre à jour Tails sur le périphérique %(parent_size)s %(vendor)s %(model)s (%(device)s). Tout volume persistant sur ce périphérique sera conservé. Continuer?"
+msgstr "Vous allez mettre à jour Tails sur le périphérique %(parent_size)s %(vendor)s %(model)s (%(device)s). Tout volume persistant sur ce périphérique sera conservé. Continuer ?"
-#: ../liveusb/creator.py:618
+#: ../liveusb/creator.py:620
msgid ""
"You are using an old version of syslinux-extlinux that does not support the "
"ext4 filesystem"
@@ -586,7 +587,7 @@ msgstr "Vous utilisez une version obsolète de syslinux-extlinux, qui ne permet
msgid "You can try again to resume your download"
msgstr "Vous pouvez essayer de reprendre votre téléchargement"
-#: ../liveusb/creator.py:94
+#: ../liveusb/creator.py:95
msgid "You must run this application as root"
msgstr "Vous devez exécuter cette application en tant que superutilisateur (root)"
1
0
commit 906ec7f3a6aefe901703d43cfe006e096ec21380
Author: Nathan Freitas <nathan(a)freitas.net>
Date: Sat Apr 4 00:37:47 2015 -0400
v15-beta-2 small fixes for VPN
---
AndroidManifest.xml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 1041e6a..5038fbe 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.torproject.android"
- android:versionName="15.0.0-beta-1"
- android:versionCode="15100"
+ android:versionName="15.0.0-beta-2"
+ android:versionCode="15102"
android:installLocation="auto"
>
1
0
commit 1c26ccd694c45895ef3f77d251b1df26a33365ba
Author: Nathan Freitas <nathan(a)freitas.net>
Date: Fri Apr 3 13:16:59 2015 -0400
tag to head
---
external/badvpn | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/external/badvpn b/external/badvpn
index 1359c04..ff125be 160000
--- a/external/badvpn
+++ b/external/badvpn
@@ -1 +1 @@
-Subproject commit 1359c04fe9d075ecdad4c9d3e2b81cf9b653da2c
+Subproject commit ff125bea79e7edc939af83ca7703eecf21b89e53
1
0
commit f37b935529cc905bebdbe88008cadb70ee8deef3
Author: Nathan Freitas <nathan(a)freitas.net>
Date: Fri Apr 3 22:37:26 2015 -0400
modifications to bridge setup strings
---
res/values/strings.xml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/res/values/strings.xml b/res/values/strings.xml
index d48d1dc..ede9174 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -319,7 +319,7 @@
<string name="menu_qr">QR Codes</string>
- <string name="if_your_mobile_network_actively_blocks_tor_you_can_use_a_tor_bridge_to_access_the_network_another_way_to_get_bridges_is_to_send_an_email_to_bridges_torproject_org_please_note_that_you_must_send_the_email_using_an_address_from_one_of_the_following_email_providers_riseup_gmail_or_yahoo_">If your mobile network actively blocks Tor, you can use a Tor Bridge to access the network.\n\nYou can get a bridge address from https://bridges.torproject.org, by emailing bridges(a)torproject.org, or by scanning a bridge QR code.</string>
+ <string name="if_your_mobile_network_actively_blocks_tor_you_can_use_a_tor_bridge_to_access_the_network_another_way_to_get_bridges_is_to_send_an_email_to_bridges_torproject_org_please_note_that_you_must_send_the_email_using_an_address_from_one_of_the_following_email_providers_riseup_gmail_or_yahoo_">If your mobile network actively blocks Tor, you can use a Tor Bridge to access the network.\n\nPlease select one of the bridge types above to enable this feature.</string>
<string name="bridge_mode">Bridge Mode</string>
@@ -334,7 +334,7 @@
<string name="send_email">Send Email</string>
- <string name="you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_">You must can a bridge address by email, web or by scanning a bridge QR code. Once you have this address, please paste it into the \"Bridges\" preference in Orbot\'s setting and restart.</string>
+ <string name="you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_">You can get a bridge address through email, the web or by scanning a bridge QR code. Select \'Email\' or \'Web\' below to request a bridge address.\n\nOnce you have an address, copy & paste it into the \"Bridges\" preference in Orbot\'s setting and restart.</string>
<string name="install_orweb">Install Orweb</string>
1
0
04 Apr '15
commit d6eb1dca5727c57f2b14650ef846d2f8fe22a856
Author: Nathan Freitas <nathan(a)freitas.net>
Date: Sat Apr 4 00:36:24 2015 -0400
fixes for network switching with VPN enabled
---
src/org/torproject/android/OrbotMainActivity.java | 10 +++----
src/org/torproject/android/service/TorService.java | 31 ++++++++++++--------
.../torproject/android/vpn/OrbotVpnService.java | 30 +++++++++++--------
3 files changed, 41 insertions(+), 30 deletions(-)
diff --git a/src/org/torproject/android/OrbotMainActivity.java b/src/org/torproject/android/OrbotMainActivity.java
index 7e211e5..405e930 100644
--- a/src/org/torproject/android/OrbotMainActivity.java
+++ b/src/org/torproject/android/OrbotMainActivity.java
@@ -688,11 +688,7 @@ public class OrbotMainActivity extends Activity implements OrbotConstants, OnLon
boolean isTransProxy = mPrefs.getBoolean("pref_transparent", false);
- if (isOrwebInstalled)
- {
- startIntent("info.guardianproject.browser",Intent.ACTION_VIEW,Uri.parse(browserLaunchUrl));
- }
- else if (mBtnVPN.isChecked())
+ if (mBtnVPN.isChecked())
{
//use the system browser since VPN is on
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(browserLaunchUrl));
@@ -705,6 +701,10 @@ public class OrbotMainActivity extends Activity implements OrbotConstants, OnLon
intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP|Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
+ else if (isOrwebInstalled)
+ {
+ startIntent("info.guardianproject.browser",Intent.ACTION_VIEW,Uri.parse(browserLaunchUrl));
+ }
else
{
AlertDialog aDialog = new AlertDialog.Builder(OrbotMainActivity.this)
diff --git a/src/org/torproject/android/service/TorService.java b/src/org/torproject/android/service/TorService.java
index cae1697..03c7ebb 100644
--- a/src/org/torproject/android/service/TorService.java
+++ b/src/org/torproject/android/service/TorService.java
@@ -128,6 +128,7 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
private long mTotalTrafficWritten = 0;
private long mTotalTrafficRead = 0;
private boolean mConnectivity = true;
+ private int mNetworkType = -1;
private long lastRead = -1;
private long lastWritten = -1;
@@ -2086,6 +2087,9 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
final NetworkInfo netInfo = cm.getActiveNetworkInfo();
boolean newConnectivityState = false;
+ int newNetType = -1;
+
+ boolean isChanged = false;
if(netInfo != null && netInfo.isConnected()) {
// WE ARE CONNECTED: DO SOMETHING
@@ -2096,10 +2100,17 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
newConnectivityState = false;
}
+ if (netInfo!=null)
+ newNetType = netInfo.getType();
+
+ isChanged = ((mNetworkType != newNetType)||(mConnectivity != newConnectivityState));
+
//is this a change in state?
- if (mConnectivity != newConnectivityState)
+ if (isChanged)
{
-
+ mNetworkType = newNetType;
+ mConnectivity = newConnectivityState;
+
if (doNetworKSleep)
{
try {
@@ -2130,6 +2141,10 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
shell.close();
}
+ if (mUseVPN) //we need to turn on VPN here so the proxy is running
+ refreshVpnProxy();
+
+
}
}
@@ -2140,18 +2155,8 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
}
}
- if (mUseVPN && mConnectivity && (mCurrentStatus != STATUS_OFF)) //we need to turn on VPN here so the proxy is running
- {
- setTorNetworkEnabled (false);
- refreshVpnProxy();
- setTorNetworkEnabled (true);
-
-
- }
+
}
-
- mConnectivity = newConnectivityState;
-
}
diff --git a/src/org/torproject/android/vpn/OrbotVpnService.java b/src/org/torproject/android/vpn/OrbotVpnService.java
index b495937..f2a0e96 100644
--- a/src/org/torproject/android/vpn/OrbotVpnService.java
+++ b/src/org/torproject/android/vpn/OrbotVpnService.java
@@ -89,14 +89,18 @@ public class OrbotVpnService extends VpnService implements Handler.Callback {
}
else if (action.equals("stop"))
{
+ Log.d(TAG,"stop OrbotVPNService service!");
+
stopVPN();
if (mHandler != null)
mHandler.postDelayed(new Runnable () { public void run () { stopSelf(); }}, 1000);
}
else if (action.equals("refresh"))
{
- if (!isLollipop)
- startSocksBypass();
+ Log.d(TAG,"refresh OrbotVPNService service!");
+
+ // if (!isLollipop)
+ // startSocksBypass();
setupTun2Socks();
}
@@ -201,13 +205,13 @@ public class OrbotVpnService extends VpnService implements Handler.Callback {
// (i.e., Farsi and Arabic).^M
Locale.setDefault(new Locale("en"));
- //String localhost = InetAddress.getLocalHost().getHostAddress();
+ String localhost = InetAddress.getLocalHost().getHostAddress();
String vpnName = "OrbotVPN";
String virtualGateway = "10.0.0.1";
String virtualIP = "10.0.0.2";
String virtualNetMask = "255.255.255.0";
- String localSocks = "127.0.0.1" + ':' + TorServiceConstants.PORT_SOCKS_DEFAULT;
+ String localSocks = localhost + ':' + TorServiceConstants.PORT_SOCKS_DEFAULT;//+ "127.0.0.1"
String localDNS = "10.0.0.1" + ':' + TorServiceConstants.TOR_DNS_PORT_DEFAULT;
@@ -224,21 +228,23 @@ public class OrbotVpnService extends VpnService implements Handler.Callback {
doLollipopAppRouting(builder);
}
- // Create a new interface using the builder and save the parameters.
- ParcelFileDescriptor newInterface = builder.setSession(mSessionName)
- .setConfigureIntent(mConfigureIntent)
- .establish();
-
if (mInterface != null)
{
+ Log.d(TAG,"Stopping existing VPN interface");
isRestart = true;
-
- Tun2Socks.Stop();
mInterface.close();
-
+ mInterface = null;
+
+ Tun2Socks.Stop();
}
+ // Create a new interface using the builder and save the parameters.
+ ParcelFileDescriptor newInterface = builder.setSession(mSessionName)
+ .setConfigureIntent(mConfigureIntent)
+ .establish();
+
+
mInterface = newInterface;
Tun2Socks.Start(mInterface, VPN_MTU, virtualIP, virtualNetMask, localSocks , localDNS , true);
1
0
[orbot/master] Improve VPN service support - fix network switching handling
by n8fr8@torproject.org 03 Apr '15
by n8fr8@torproject.org 03 Apr '15
03 Apr '15
commit 75426bb9e25d11fa84636481aac59094eec41b26
Author: Nathan Freitas <nathan(a)freitas.net>
Date: Fri Apr 3 12:27:59 2015 -0400
Improve VPN service support - fix network switching handling
We now refresh the VPN and tun2socks interfaces when the network
type switches, and we do so in a way that does not cause traffic to leak.
The new interface is established before we close the old one.
---
res/values/arrays.xml | 13 +-
res/values/strings.xml | 13 +-
src/org/torproject/android/OrbotConstants.java | 2 +-
src/org/torproject/android/OrbotMainActivity.java | 180 ++++++++++++++++----
src/org/torproject/android/service/TorService.java | 134 +++++++++++----
.../torproject/android/vpn/OrbotVpnService.java | 157 ++++++++++-------
6 files changed, 359 insertions(+), 140 deletions(-)
diff --git a/res/values/arrays.xml b/res/values/arrays.xml
index fb0a7c3..00eb3a4 100644
--- a/res/values/arrays.xml
+++ b/res/values/arrays.xml
@@ -36,9 +36,16 @@
<item>ru</item>
-
-
-
+ </string-array>
+
+ <string-array name="bridge_options">
+ <item>Obfs4 (Recommended)</item>
+ <item>Obfs3</item>
+ <item>ScrambleSuit</item>
+ <item>Tunnel through Azure</item>
+ <item>Tunnel through Amazon</item>
+ <item>Tunnel through Google</item>
+ <item></item>
</string-array>
</resources>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 92e1e35..e76ce28 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -315,15 +315,16 @@
<string name="bridges_updated">Bridges Updated</string>
- <string name="restart_orbot_to_use_this_bridge_">"Restart Orbot to use these bridges: "</string>
+ <string name="restart_orbot_to_use_this_bridge_">Please restart Orbot to enable the changes</string>
<string name="menu_qr">QR Codes</string>
- <string name="if_your_mobile_network_actively_blocks_tor_you_can_use_a_tor_bridge_to_access_the_network_another_way_to_get_bridges_is_to_send_an_email_to_bridges_torproject_org_please_note_that_you_must_send_the_email_using_an_address_from_one_of_the_following_email_providers_riseup_gmail_or_yahoo_">If your mobile network actively blocks Tor, you can use a Tor Bridge to access the network.\n\nYou can get a bridge address from https://bridges.torproject.org or scan a bridge QR code from a friend.\n\nAnother way to get bridges is to send an email to bridges(a)torproject.org. Please note that you must send the email using an address from one of the following email providers: Riseup, Gmail or Yahoo.</string>
+ <string name="if_your_mobile_network_actively_blocks_tor_you_can_use_a_tor_bridge_to_access_the_network_another_way_to_get_bridges_is_to_send_an_email_to_bridges_torproject_org_please_note_that_you_must_send_the_email_using_an_address_from_one_of_the_following_email_providers_riseup_gmail_or_yahoo_">If your mobile network actively blocks Tor, you can use a Tor Bridge to access the network.\n\nYou can get a bridge address from https://bridges.torproject.org, by emailing bridges(a)torproject.org, or by scanning a bridge QR code.</string>
<string name="bridge_mode">Bridge Mode</string>
- <string name="get_bridges">Get Bridges</string>
+ <string name="get_bridges_email">Email</string>
+ <string name="get_bridges_web">Web</string>
<string name="activate">Activate</string>
@@ -332,4 +333,10 @@
<string name="you_can_enable_all_apps_on_your_device_to_run_through_the_tor_network_using_the_vpn_feature_of_android_">You can enable all apps on your device to run through the Tor network using the VPN feature of Android.\n\n*WARNING* This is a new, experimental feature and in some cases may not start automatically, or may stop. It should NOT be used for anonymity, and ONLY used for getting through firewalls and filters.</string>
<string name="send_email">Send Email</string>
+
+ <string name="you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_">You must can a bridge address by email, web or by scanning a bridge QR code. Once you have this address, please paste it into the \"Bridges\" preference in Orbot\'s setting and restart.</string>
+
+ <string name="install_orweb">Install Orweb</string>
+
+ <string name="standard_browser">Standard Browser</string>
</resources>
diff --git a/src/org/torproject/android/OrbotConstants.java b/src/org/torproject/android/OrbotConstants.java
index 745ace4..fa67d92 100644
--- a/src/org/torproject/android/OrbotConstants.java
+++ b/src/org/torproject/android/OrbotConstants.java
@@ -16,7 +16,7 @@ public interface OrbotConstants {
//path to check Tor against
public final static String URL_TOR_CHECK = "https://check.torproject.org";
- public final static String URL_TOR_BRIDGES = "https://bridges.torproject.org";
+ public final static String URL_TOR_BRIDGES = "https://bridges.torproject.org/bridges?transport=";
public final static String NEWLINE = "\n";
diff --git a/src/org/torproject/android/OrbotMainActivity.java b/src/org/torproject/android/OrbotMainActivity.java
index be05d69..2e22fb2 100644
--- a/src/org/torproject/android/OrbotMainActivity.java
+++ b/src/org/torproject/android/OrbotMainActivity.java
@@ -661,6 +661,8 @@ public class OrbotMainActivity extends Activity implements OrbotConstants, OnLon
setResult(RESULT_OK);
mBtnBridges.setChecked(true);
+
+ enableBridges(true);
}
private boolean showWizard = true;
@@ -707,7 +709,7 @@ public class OrbotMainActivity extends Activity implements OrbotConstants, OnLon
.setIcon(R.drawable.onion32)
.setTitle(R.string.install_apps_)
.setMessage(R.string.it_doesn_t_seem_like_you_have_orweb_installed_want_help_with_that_or_should_we_just_open_the_browser_)
- .setPositiveButton(android.R.string.ok, new Dialog.OnClickListener ()
+ .setPositiveButton(R.string.install_orweb, new Dialog.OnClickListener ()
{
@Override
@@ -720,7 +722,7 @@ public class OrbotMainActivity extends Activity implements OrbotConstants, OnLon
}
})
- .setNegativeButton(android.R.string.no, new Dialog.OnClickListener ()
+ .setNegativeButton(R.string.standard_browser, new Dialog.OnClickListener ()
{
@Override
@@ -860,41 +862,56 @@ public class OrbotMainActivity extends Activity implements OrbotConstants, OnLon
new AlertDialog.Builder(this)
.setTitle(R.string.bridge_mode)
.setView(view)
- .setNeutralButton(R.string.get_bridges, new Dialog.OnClickListener ()
- {
-
- @Override
- public void onClick(DialogInterface dialog, int which) {
-
- //openBrowser(URL_TOR_BRIDGES);
-
- sendGetBridgeEmail();
- }
-
-
- })
- .setPositiveButton(R.string.activate, new Dialog.OnClickListener ()
- {
-
- @Override
- public void onClick(DialogInterface dialog, int which) {
-
- enableBridges (true);
-
- }
-
-
- })
- .setNegativeButton(android.R.string.cancel, new Dialog.OnClickListener()
+ .setItems(R.array.bridge_options, new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int which) {
+ // The 'which' argument contains the index position
+ // of the selected item
+
+ switch (which)
+ {
+ case 0: //obfs 4;
+ showGetBridgePrompt("obfs4");
+
+ break;
+ case 1: //obfs3
+ showGetBridgePrompt("obfs3");
+
+ break;
+ case 2: //scramblesuit
+ showGetBridgePrompt("scramblesuit");
+
+ break;
+ case 3: //azure
+ mPrefs.edit().putString(OrbotConstants.PREF_BRIDGES_LIST,"2").commit();
+ enableBridges(true);
+
+ break;
+ case 4: //amazon
+ mPrefs.edit().putString(OrbotConstants.PREF_BRIDGES_LIST,"1").commit();
+ enableBridges(true);
+
+ break;
+ case 5: //google
+ mPrefs.edit().putString(OrbotConstants.PREF_BRIDGES_LIST,"0").commit();
+ enableBridges(true);
+
+ break;
+
+ }
+
+ }
+ }).setNegativeButton(android.R.string.cancel, new Dialog.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which) {
- mBtnBridges.setChecked(false);
+ //mBtnBridges.setChecked(false);
}
})
.show();
+
+
}
else
{
@@ -903,13 +920,72 @@ public class OrbotMainActivity extends Activity implements OrbotConstants, OnLon
}
- private void sendGetBridgeEmail ()
+ private void showGetBridgePrompt (final String type)
+ {
+ LayoutInflater li = LayoutInflater.from(this);
+ View view = li.inflate(R.layout.layout_diag, null);
+
+ TextView versionName = (TextView)view.findViewById(R.id.diaglog);
+ versionName.setText(R.string.you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_);
+
+ new AlertDialog.Builder(this)
+ .setTitle(R.string.bridge_mode)
+ .setView(view)
+ .setNegativeButton(android.R.string.cancel, new Dialog.OnClickListener()
+ {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+
+ //mBtnBridges.setChecked(false);
+
+ }
+ })
+ .setNeutralButton(R.string.get_bridges_email, new Dialog.OnClickListener ()
+ {
+
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+
+
+ sendGetBridgeEmail(type);
+
+ }
+
+
+ })
+ .setPositiveButton(R.string.get_bridges_web, new Dialog.OnClickListener ()
+ {
+
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+
+ openBrowser(URL_TOR_BRIDGES + type);
+
+ }
+
+
+ }).show();
+ }
+
+ private void sendGetBridgeEmail (String type)
{
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("message/rfc822");
intent.putExtra(Intent.EXTRA_EMAIL , new String[]{"bridges(a)torproject.org"});
- intent.putExtra(Intent.EXTRA_SUBJECT, "Tor Bridge Request");
-
+
+ if (type != null)
+ {
+ intent.putExtra(Intent.EXTRA_SUBJECT, "get transport " + type);
+ intent.putExtra(Intent.EXTRA_TEXT, "get transport " + type);
+
+ }
+ else
+ {
+ intent.putExtra(Intent.EXTRA_SUBJECT, "get bridges");
+ intent.putExtra(Intent.EXTRA_TEXT, "get bridges");
+
+ }
+
startActivity(Intent.createChooser(intent, getString(R.string.send_email)));
}
@@ -917,10 +993,45 @@ public class OrbotMainActivity extends Activity implements OrbotConstants, OnLon
{
Editor edit = mPrefs.edit();
- edit.putBoolean("pref_bridges_enabled", enable);
+ edit.putBoolean(OrbotConstants.PREF_BRIDGES_ENABLED, enable);
edit.commit();
updateSettings();
+
+ if (torStatus == TorServiceConstants.STATUS_ON)
+ {
+ String bridgeList = mPrefs.getString(OrbotConstants.PREF_BRIDGES_LIST,null);
+ if (bridgeList != null && bridgeList.length() > 0)
+ {
+ try
+ {
+ //do auto restart
+ stopTor ();
+
+ mHandler.postDelayed(new Runnable () {
+
+ public void run ()
+ {
+ try
+ {
+ startTor();
+ }
+ catch (Exception e)
+ {
+ Log.e(TAG,"can't start orbot",e);
+ }
+ }
+ }, 2000);
+ }
+ catch (Exception e)
+ {
+ Log.e(TAG,"can't stop orbot",e);
+ }
+ }
+
+ }
+
+
}
public void promptStartVpnService ()
@@ -1160,7 +1271,7 @@ public class OrbotMainActivity extends Activity implements OrbotConstants, OnLon
//here we update the UI which is a bit sloppy and mixed up code wise
//might be best to just call updateStatus() instead of directly manipulating UI in this method - yep makes sense
imgStatus.setImageResource(R.drawable.torstarting);
- // lblStatus.setText(getString(R.string.status_starting_up));
+ lblStatus.setText(getString(R.string.status_starting_up));
//we send a message here to the progressDialog i believe, but we can clarify that shortly
Message msg = mHandler.obtainMessage(TorServiceConstants.ENABLE_TOR_MSG);
@@ -1168,7 +1279,6 @@ public class OrbotMainActivity extends Activity implements OrbotConstants, OnLon
mHandler.sendMessage(msg);
-
}
//now we stop Tor! amazing!
diff --git a/src/org/torproject/android/service/TorService.java b/src/org/torproject/android/service/TorService.java
index 9529d6d..cae1697 100644
--- a/src/org/torproject/android/service/TorService.java
+++ b/src/org/torproject/android/service/TorService.java
@@ -96,7 +96,7 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
private int mPortHTTP = 8118;
private int mPortSOCKS = 9050;
- private int mVpnProxyPort = 7231;
+ private int mVpnProxyPort = 9099;
private static final int NOTIFY_ID = 1;
private static final int TRANSPROXY_NOTIFY_ID = 2;
@@ -1475,6 +1475,18 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
}
+ public void refreshVpnProxy () {
+
+ debug ("refreshing VPN Proxy");
+
+ Intent intent = new Intent(TorService.this, OrbotVpnService.class);
+ intent.setAction("refresh");
+ startService(intent);
+
+ }
+
+
+
public void clearVpnProxy ()
{
debug ("clearing VPN Proxy");
@@ -1911,6 +1923,31 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
return false;
}
+ public void setTorNetworkEnabled (final boolean isEnabled)
+ {
+
+
+ //it is possible to not have a connection yet, and someone might try to newnym
+ if (conn != null)
+ {
+ new Thread ()
+ {
+ public void run ()
+ {
+ try {
+
+ conn.setConf("DisableNetwork", isEnabled ? "0" : "1");
+
+ }
+ catch (Exception ioe){
+ debug("error requesting newnym: " + ioe.getLocalizedMessage());
+ }
+ }
+ }.start();
+ }
+
+ }
+
public void newIdentity ()
{
//it is possible to not have a connection yet, and someone might try to newnym
@@ -2048,52 +2085,75 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
final ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
final NetworkInfo netInfo = cm.getActiveNetworkInfo();
+ boolean newConnectivityState = false;
+
if(netInfo != null && netInfo.isConnected()) {
// WE ARE CONNECTED: DO SOMETHING
- mConnectivity = true;
+ newConnectivityState = true;
}
else {
// WE ARE NOT: DO SOMETHING ELSE
- mConnectivity = false;
+ newConnectivityState = false;
}
- if (doNetworKSleep)
+ //is this a change in state?
+ if (mConnectivity != newConnectivityState)
{
- try {
- updateConfiguration("DisableNetwork", mConnectivity ? "0" : "1", false);
-
- if (mCurrentStatus != STATUS_OFF)
- {
- if (!mConnectivity)
- {
- logNotice(context.getString(R.string.no_network_connectivity_putting_tor_to_sleep_));
- showToolbarNotification(getString(R.string.no_internet_connection_tor),NOTIFY_ID,R.drawable.ic_stat_tor_off);
-
- }
- else
- {
- logNotice(context.getString(R.string.network_connectivity_is_good_waking_tor_up_));
- showToolbarNotification(getString(R.string.status_activated),NOTIFY_ID,R.drawable.ic_stat_tor);
-
- if (mHasRoot && mEnableTransparentProxy && mTransProxyNetworkRefresh)
- {
-
- Shell shell = Shell.startRootShell();
-
- disableTransparentProxy(shell);
- enableTransparentProxy(shell);
-
- shell.close();
- }
-
- }
- }
-
- } catch (Exception e) {
- logException ("error updating state after network restart",e);
- }
+
+ if (doNetworKSleep)
+ {
+ try {
+
+ setTorNetworkEnabled (mConnectivity);
+
+ if (mCurrentStatus != STATUS_OFF)
+ {
+ if (!mConnectivity)
+ {
+ logNotice(context.getString(R.string.no_network_connectivity_putting_tor_to_sleep_));
+ showToolbarNotification(getString(R.string.no_internet_connection_tor),NOTIFY_ID,R.drawable.ic_stat_tor_off);
+
+ }
+ else
+ {
+ logNotice(context.getString(R.string.network_connectivity_is_good_waking_tor_up_));
+ showToolbarNotification(getString(R.string.status_activated),NOTIFY_ID,R.drawable.ic_stat_tor);
+
+ if (mHasRoot && mEnableTransparentProxy && mTransProxyNetworkRefresh)
+ {
+
+ Shell shell = Shell.startRootShell();
+
+ disableTransparentProxy(shell);
+ enableTransparentProxy(shell);
+
+ shell.close();
+ }
+
+ }
+ }
+
+ saveConfiguration();
+
+ } catch (Exception e) {
+ logException ("error updating state after network restart",e);
+ }
+ }
+
+ if (mUseVPN && mConnectivity && (mCurrentStatus != STATUS_OFF)) //we need to turn on VPN here so the proxy is running
+ {
+ setTorNetworkEnabled (false);
+ refreshVpnProxy();
+ setTorNetworkEnabled (true);
+
+
+ }
}
+ mConnectivity = newConnectivityState;
+
+
+
}
};
diff --git a/src/org/torproject/android/vpn/OrbotVpnService.java b/src/org/torproject/android/vpn/OrbotVpnService.java
index 2127562..b495937 100644
--- a/src/org/torproject/android/vpn/OrbotVpnService.java
+++ b/src/org/torproject/android/vpn/OrbotVpnService.java
@@ -57,6 +57,10 @@ public class OrbotVpnService extends VpnService implements Handler.Callback {
private final static int VPN_MTU = 1500;
+ private final static boolean isLollipop = Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP;
+
+ private boolean isRestart = false;
+
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
@@ -76,7 +80,7 @@ public class OrbotVpnService extends VpnService implements Handler.Callback {
// Stop the previous session by interrupting the thread.
if (mThreadVPN == null || (!mThreadVPN.isAlive()))
{
- boolean isLollipop = Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP;
+
if (!isLollipop)
startSocksBypass();
@@ -89,6 +93,13 @@ public class OrbotVpnService extends VpnService implements Handler.Callback {
if (mHandler != null)
mHandler.postDelayed(new Runnable () { public void run () { stopSelf(); }}, 1000);
}
+ else if (action.equals("refresh"))
+ {
+ if (!isLollipop)
+ startSocksBypass();
+
+ setupTun2Socks();
+ }
return START_NOT_STICKY;
@@ -102,6 +113,12 @@ public class OrbotVpnService extends VpnService implements Handler.Callback {
{
try {
+
+ if (mSocksProxyServer != null)
+ {
+ stopSocksBypass ();
+ }
+
mSocksProxyServer = new ProxyServer(new ServerAuthenticatorNone(null, null));
ProxyServer.setVpnService(OrbotVpnService.this);
mSocksProxyServer.start(mSocksProxyPort, 5, InetAddress.getLocalHost());
@@ -115,10 +132,20 @@ public class OrbotVpnService extends VpnService implements Handler.Callback {
}
+ private void stopSocksBypass ()
+ {
+
+ if (mSocksProxyServer != null){
+ mSocksProxyServer.stop();
+ mSocksProxyServer = null;
+ }
+
+
+ }
+
@Override
public void onDestroy() {
stopVPN();
-
}
private void stopVPN ()
@@ -126,10 +153,7 @@ public class OrbotVpnService extends VpnService implements Handler.Callback {
Tun2Socks.Stop();
- if (mSocksProxyServer != null){
- mSocksProxyServer.stop();
- mSocksProxyServer = null;
- }
+ stopSocksBypass ();
if (mInterface != null){
try
@@ -167,54 +191,64 @@ public class OrbotVpnService extends VpnService implements Handler.Callback {
public void run ()
{
- if (mInterface == null)
- {
- try
+ try
+ {
+
+ // Set the locale to English (or probably any other language that^M
+ // uses Hindu-Arabic (aka Latin) numerals).^M
+ // We have found that VpnService.Builder does something locale-dependent^M
+ // internally that causes errors when the locale uses its own numerals^M
+ // (i.e., Farsi and Arabic).^M
+ Locale.setDefault(new Locale("en"));
+
+ //String localhost = InetAddress.getLocalHost().getHostAddress();
+
+ String vpnName = "OrbotVPN";
+ String virtualGateway = "10.0.0.1";
+ String virtualIP = "10.0.0.2";
+ String virtualNetMask = "255.255.255.0";
+ String localSocks = "127.0.0.1" + ':' + TorServiceConstants.PORT_SOCKS_DEFAULT;
+ String localDNS = "10.0.0.1" + ':' + TorServiceConstants.TOR_DNS_PORT_DEFAULT;
+
+
+ Builder builder = new Builder();
+
+ builder.setMtu(VPN_MTU);
+ builder.addAddress(virtualGateway,28);
+ builder.setSession(vpnName);
+ builder.addRoute("0.0.0.0",0);
+ // builder.addDnsServer("8.8.8.8");
+
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
{
-
- // Set the locale to English (or probably any other language that^M
- // uses Hindu-Arabic (aka Latin) numerals).^M
- // We have found that VpnService.Builder does something locale-dependent^M
- // internally that causes errors when the locale uses its own numerals^M
- // (i.e., Farsi and Arabic).^M
- Locale.setDefault(new Locale("en"));
-
- //String localhost = InetAddress.getLocalHost().getHostAddress();
-
- String vpnName = "OrbotVPN";
- String virtualGateway = "10.0.0.1";
- String virtualIP = "10.0.0.2";
- String virtualNetMask = "255.255.255.0";
- String localSocks = "127.0.0.1" + ':' + TorServiceConstants.PORT_SOCKS_DEFAULT;
- String localDNS = "10.0.0.1" + ':' + TorServiceConstants.TOR_DNS_PORT_DEFAULT;
-
-
- Builder builder = new Builder();
-
- builder.setMtu(VPN_MTU);
- builder.addAddress(virtualGateway,28);
- builder.setSession(vpnName);
- builder.addRoute("0.0.0.0",0);
- // builder.addDnsServer("8.8.8.8");
-
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
- {
- doLollipopAppRouting(builder);
- }
-
- // Create a new interface using the builder and save the parameters.
- mInterface = builder.setSession(mSessionName)
- .setConfigureIntent(mConfigureIntent)
- .establish();
-
- Tun2Socks.Start(mInterface, VPN_MTU, virtualIP, virtualNetMask, localSocks , localDNS , true);
+ doLollipopAppRouting(builder);
}
- catch (Exception e)
+
+ // Create a new interface using the builder and save the parameters.
+ ParcelFileDescriptor newInterface = builder.setSession(mSessionName)
+ .setConfigureIntent(mConfigureIntent)
+ .establish();
+
+ if (mInterface != null)
{
- Log.d(TAG,"tun2Socks has stopped",e);
+ isRestart = true;
+
+ Tun2Socks.Stop();
+ mInterface.close();
+
}
- }
- }
+
+
+ mInterface = newInterface;
+
+ Tun2Socks.Start(mInterface, VPN_MTU, virtualIP, virtualNetMask, localSocks , localDNS , true);
+ }
+ catch (Exception e)
+ {
+ Log.d(TAG,"tun2Socks has stopped",e);
+ }
+ }
+
};
mThreadVPN.start();
@@ -222,22 +256,23 @@ public class OrbotVpnService extends VpnService implements Handler.Callback {
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
private void doLollipopAppRouting (Builder builder) throws NameNotFoundException
- {
-
-
- builder.addDisallowedApplication("org.torproject.android");
-
-
+ {
+ builder.addDisallowedApplication("org.torproject.android");
}
@Override
public void onRevoke() {
- SharedPreferences prefs = TorServiceUtils.getSharedPrefs(getApplicationContext());
- prefs.edit().putBoolean("pref_vpn", false).commit();
-
- stopVPN();
-
+ if (!isRestart)
+ {
+ SharedPreferences prefs = TorServiceUtils.getSharedPrefs(getApplicationContext());
+ prefs.edit().putBoolean("pref_vpn", false).commit();
+ stopVPN();
+
+ }
+
+ isRestart = false;
+
super.onRevoke();
}
1
0
commit 6d15a465354dac78e3123420468d4aa48e3e0aac
Author: Nathan Freitas <nathan(a)freitas.net>
Date: Fri Apr 3 12:27:28 2015 -0400
update jni build documents
---
jni/Android.mk | 2 --
jni/Application.mk | 4 +---
2 files changed, 1 insertion(+), 5 deletions(-)
diff --git a/jni/Android.mk b/jni/Android.mk
index 4eb1e78..8b9af75 100644
--- a/jni/Android.mk
+++ b/jni/Android.mk
@@ -1,3 +1 @@
-##include ../OriginalDest/Android.mk
include ./external/badvpn/Android.mk
-##include ../kalium-jni/jni/Android.mk
diff --git a/jni/Application.mk b/jni/Application.mk
index 0cfcc0f..512556b 100644
--- a/jni/Application.mk
+++ b/jni/Application.mk
@@ -1,3 +1 @@
-APP_OPTIM := release
-APP_ABI := all #armeabi armeabi-v7a mips x86
-APP_PLATFORM := android-14
+APP_ABI := armeabi armeabi-v7a
1
0
commit d14dabb4f3443070c327d298bea662ef6dc30e02
Author: Nathan Freitas <nathan(a)freitas.net>
Date: Fri Apr 3 12:27:40 2015 -0400
update tun2socks shared libraries
---
libs/armeabi-v7a/libtun2socks.so | Bin 121220 -> 117192 bytes
libs/armeabi/libtun2socks.so | Bin 125312 -> 125376 bytes
2 files changed, 0 insertions(+), 0 deletions(-)
diff --git a/libs/armeabi-v7a/libtun2socks.so b/libs/armeabi-v7a/libtun2socks.so
index 4b21a81..2ac9336 100755
Binary files a/libs/armeabi-v7a/libtun2socks.so and b/libs/armeabi-v7a/libtun2socks.so differ
diff --git a/libs/armeabi/libtun2socks.so b/libs/armeabi/libtun2socks.so
index f15c6e3..91689fa 100755
Binary files a/libs/armeabi/libtun2socks.so and b/libs/armeabi/libtun2socks.so differ
1
0
03 Apr '15
commit 6fd6a5a8590c2143ad7cca6de6172d66b59a46b0
Author: Nathan Freitas <nathan(a)freitas.net>
Date: Fri Apr 3 13:01:29 2015 -0400
tune first-time experience (No more wizard!)
---
res/values/strings.xml | 2 +-
src/org/torproject/android/OrbotMainActivity.java | 13 +++++++------
2 files changed, 8 insertions(+), 7 deletions(-)
diff --git a/res/values/strings.xml b/res/values/strings.xml
index e76ce28..d48d1dc 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -88,7 +88,7 @@
<string name="wizard_proxy_help_info">Proxy Settings</string>
<string name="wizard_proxy_help_msg">If the Android app you are using can support the use of an HTTP or SOCKS proxy, then you can configure it to connect to Orbot and use Tor.\n\n\n The host settings is 127.0.0.1 or \"localhost\". For HTTP, the port setting is 8118. For SOCKS, the proxy is 9050. You should use SOCKS4A or SOCKS5 if possible.\n \n\n\n You can learn more about proxying on Android via the FAQ at: http://tinyurl.com/proxyandroid\n </string>
<string name="wizard_final">Orbot is ready!</string>
- <string name="wizard_final_msg">Hundreds of thousands of people around the world use Tor for a wide variety of reasons.\n\nJournalists and bloggers, human rights defenders, law enforcement officers, soldiers, corporations, citizens of repressive regimes, and just ordinary citizens… and now you are ready to, as well!</string>
+ <string name="wizard_final_msg">Millions of people around the world use Tor for a wide variety of reasons.\n\nJournalists and bloggers, human rights defenders, law enforcement officers, soldiers, corporations, citizens of repressive regimes, and just ordinary citizens… and now you are ready to, as well!</string>
<string name="wizard_exit_at_first_screen_toast">Please configure Orbot before you can start using it!</string>
<!--END Welcome Wizard strings (DJH)-->
<string name="connect_first_time">You\'ve successfully connected to the Tor network - but this does NOT mean your device is secure. You can use the \'Check\' option from the menu to test your browser. \n\nVisit us at https://guardianproject.info/apps/orbot or send an email to help(a)guardianproject.info to learn more.</string>
diff --git a/src/org/torproject/android/OrbotMainActivity.java b/src/org/torproject/android/OrbotMainActivity.java
index 2e22fb2..7e211e5 100644
--- a/src/org/torproject/android/OrbotMainActivity.java
+++ b/src/org/torproject/android/OrbotMainActivity.java
@@ -626,7 +626,7 @@ public class OrbotMainActivity extends Activity implements OrbotConstants, OnLon
showWizard = mPrefs.getBoolean("show_wizard",showWizard);
//let's not show the wizard now for new users
- /**
+
if (showWizard)
{
Editor pEdit = mPrefs.edit();
@@ -634,15 +634,17 @@ public class OrbotMainActivity extends Activity implements OrbotConstants, OnLon
pEdit.commit();
showWizard = false;
- startActivity(new Intent(this, ChooseLocaleWizardActivity.class));
- }**/
+ showAlert(getString(R.string.app_name),getString(R.string.wizard_final_msg),true);
+
+ }
}
+ updateStatus("");
+
setIntent(null);
- updateStatus ("");
}
@@ -1242,8 +1244,7 @@ public class OrbotMainActivity extends Activity implements OrbotConstants, OnLon
else if (torStatus == TorServiceConstants.STATUS_OFF)
{
imgStatus.setImageResource(R.drawable.toroff);
- lblStatus.setText("");
- //lblStatus.setText(getString(R.string.status_disabled) + "\n" + getString(R.string.press_to_start));
+ lblStatus.setText(getString(R.string.press_to_start));
mBtnBrowser.setEnabled(false);
if (mItemOnOff != null)
1
0