tor-commits
Threads by month
- ----- 2025 -----
- 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
December 2013
- 25 participants
- 992 discussions

08 Dec '13
commit 4b7885cc5c2e6da17819f230ecc61255975dca95
Author: Translation commit bot <translation(a)torproject.org>
Date: Sun Dec 8 20:45:13 2013 +0000
Update translations for vidalia
---
fil/vidalia_fil.po | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/fil/vidalia_fil.po b/fil/vidalia_fil.po
index 682c9b5..590fa00 100644
--- a/fil/vidalia_fil.po
+++ b/fil/vidalia_fil.po
@@ -5,7 +5,7 @@ msgstr ""
"Project-Id-Version: The Tor Project\n"
"Report-Msgid-Bugs-To: https://trac.torproject.org/projects/tor\n"
"POT-Creation-Date: 2012-03-21 17:52+0000\n"
-"PO-Revision-Date: 2013-11-12 09:41+0000\n"
+"PO-Revision-Date: 2013-12-08 20:41+0000\n"
"Last-Translator: runasand <runa.sandvik(a)gmail.com>\n"
"Language-Team: Filipino (http://www.transifex.com/projects/p/torproject/language/fil/)\n"
"MIME-Version: 1.0\n"
@@ -3695,7 +3695,7 @@ msgstr ""
msgctxt "UpdatesAvailableDialog"
msgid "Version"
-msgstr ""
+msgstr "Version"
msgctxt "VMessageBox"
msgid "OK"
@@ -3707,11 +3707,11 @@ msgstr "Kanselahin"
msgctxt "VMessageBox"
msgid "Yes"
-msgstr ""
+msgstr "Oo"
msgctxt "VMessageBox"
msgid "No"
-msgstr ""
+msgstr "Wala"
msgctxt "VMessageBox"
msgid "Help"
1
0

[translation/liveusb-creator_completed] Update translations for liveusb-creator_completed
by translation@torproject.org 08 Dec '13
by translation@torproject.org 08 Dec '13
08 Dec '13
commit 246a35e7c90e40dcb8ad9c555998495324189fc9
Author: Translation commit bot <translation(a)torproject.org>
Date: Sun Dec 8 19:45:57 2013 +0000
Update translations for liveusb-creator_completed
---
nl/nl.po | 339 +++++++++++++++++++++++++++++++++-----------------------------
1 file changed, 180 insertions(+), 159 deletions(-)
diff --git a/nl/nl.po b/nl/nl.po
index c6a25d2..6518bd4 100644
--- a/nl/nl.po
+++ b/nl/nl.po
@@ -3,6 +3,7 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# cialenhh <c1914502(a)drdrb.com>, 2013
# Geert Warrink <geert.warrink(a)onsnet.nu>, 2009-2010
# Richard E. van der Luit <nippur(a)fedoraproject.org>, 2012
# Shondoit Walker <shondoit(a)gmail.com>, 2013
@@ -11,10 +12,10 @@
msgid ""
msgstr ""
"Project-Id-Version: The Tor Project\n"
-"Report-Msgid-Bugs-To: https://trac.torproject.org/projects/tor\n"
-"POT-Creation-Date: 2013-09-09 11:21+0200\n"
-"PO-Revision-Date: 2013-09-25 08:40+0000\n"
-"Last-Translator: Lazlo <transifex(a)lazlo.me>\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2013-11-30 15:23+0100\n"
+"PO-Revision-Date: 2013-12-08 19:29+0000\n"
+"Last-Translator: cialenhh <c1914502(a)drdrb.com>\n"
"Language-Team: Dutch (http://www.transifex.com/projects/p/torproject/language/nl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -22,143 +23,149 @@ msgstr ""
"Language: nl\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: ../liveusb/dialog.py:150 ../liveusb/launcher_ui.py:149
+#: ../liveusb/dialog.py:159 ../liveusb/launcher_ui.py:158
#, python-format
-msgid "%(distribution)s LiveUSB Creator"
-msgstr "%(distribution)s LiveUSB Creator"
+msgid "%(distribution)s installer"
+msgstr "%(distribution)s installer"
-#: ../liveusb/gui.py:776
+#: ../liveusb/gui.py:807
#, python-format
msgid "%(filename)s selected"
msgstr "%(filename)s geselecteerd"
-#: ../liveusb/creator.py:1004
+#: ../liveusb/gui.py:437
+#, python-format
+msgid "%(size)s %(label)s"
+msgstr "%(size)s %(label)s"
+
+#: ../liveusb/gui.py:443
+#, python-format
+msgid "%(vendor)s %(model)s (%(details)s) - %(device)s"
+msgstr "%(vendor)s %(model)s (%(details)s) - %(device)s"
+
+#: ../liveusb/creator.py:1023
#, python-format
msgid "%s already bootable"
msgstr "%s is al bootable"
-#: ../liveusb/launcher_ui.py:156
+#: ../liveusb/launcher_ui.py:165
msgid ""
"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
"<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
"p, li { white-space: pre-wrap; }\n"
"</style></head><body style=\" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;\">\n"
-"<p align=\"center\" style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:10pt;\">Need help? Read the </span><a href=\"file:///usr/share/doc/tails/website/doc/first_steps/usb_installation.en.html\"><span style=\" text-decoration: underline; color:#0000ff;\">documentation</span></a><span style=\" font-size:10pt;\">.</span></p></body></html>"
-msgstr "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\np, li { white-space: pre-wrap; }\n</style></head><body style=\" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;\">\n<p align=\"center\" style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:10pt;\">Help nodig? Lees de </span><a href=\"file:///usr/share/doc/tails/website/doc/first_steps/usb_installation.en.html\"><span style=\" text-decoration: underline; color:#0000ff;\">documentatie</span></a><span style=\" font-size:10pt;\">.</span></p></body></html>"
+"<p align=\"center\" style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:10pt;\">Need help? Read the </span><a href=\"file:///usr/share/doc/tails/website/doc/first_steps/installation.en.html\"><span style=\" text-decoration: underline; color:#0000ff;\">documentation</span></a><span style=\" font-size:10pt;\">.</span></p></body></html>"
+msgstr "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\np, li { white-space: pre-wrap; }\n</style></head><body style=\" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;\">\n<p align=\"center\" style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:10pt;\">Hulp nodig? Lees de </span><a href=\"file:///usr/share/doc/tails/website/doc/first_steps/installation.en.html\"><span style=\" text-decoration: underline; color:#0000ff;\">documentation</span></a><span style=\" font-size:10pt;\">.</span></p></body></html>"
-#: ../liveusb/launcher_ui.py:151
+#: ../liveusb/launcher_ui.py:160
msgid ""
"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
"<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
"p, li { white-space: pre-wrap; }\n"
"</style></head><body style=\" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;\">\n"
-"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:10pt;\">Copy the running Tails onto a USB stick. All data on the target drive will be lost.</span></p></body></html>"
-msgstr "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\np, li { white-space: pre-wrap; }\n</style></head><body style=\" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;\">\n<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:10pt;\">Kopieer de draaiende Tails naar een USB stick. Alle data op de doel drive zullen verloren gaan.</span></p></body></html>"
+"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:10pt;\">Copy the running Tails onto a USB stick or SD card. All data on the target drive will be lost.</span></p></body></html>"
+msgstr "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\np, li { white-space: pre-wrap; }\n</style></head><body style=\" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;\">\n<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:10pt;\">Kopieer de functionerende Tails naar een USB-stick of naar een SD-kaart. Alle data op de doelschijf zal verloren gaan.</span></p></body></html>"
-#: ../liveusb/launcher_ui.py:153
+#: ../liveusb/launcher_ui.py:162
msgid ""
"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
"<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
"p, li { white-space: pre-wrap; }\n"
"</style></head><body style=\" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;\">\n"
-"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:10pt;\">Copy the running Tails onto an already installed Tails USB stick. Other partitions found on the stick are preserved.</span></p></body></html>"
-msgstr "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\np, li { white-space: pre-wrap; }\n</style></head><body style=\" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;\">\n<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:10pt;\">Kopieer de draaiende Tails naar een al bestaande Tails USB stick. Andere gevonden partities op de stick zullen bewaard blijven.</span></p></body></html>"
+"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:10pt;\">Copy the running Tails onto an already installed Tails device. Other partitions found on the stick are preserved.</span></p></body></html>"
+msgstr "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\np, li { white-space: pre-wrap; }\n</style></head><body style=\" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;\">\n<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:10pt;\">Kopieer de functionerende Tails naar een reeds geïnstalleerd Tails apparaat. Andere partities die gevonden worden op de stick zijn behouden.</span></p></body></html>"
-#: ../liveusb/launcher_ui.py:155
+#: ../liveusb/launcher_ui.py:164
msgid ""
"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
"<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
"p, li { white-space: pre-wrap; }\n"
"</style></head><body style=\" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;\">\n"
-"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:10pt;\">Upgrade an already installed Tails USB stick from a new ISO image.</span></p></body></html>"
-msgstr "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\np, li { white-space: pre-wrap; }\n</style></head><body style=\" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;\">\n<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:10pt;\">Upgrade een al geïnstalleerde Tails USB stick vanaf een nieuwe ISO.</span></p></body></html>"
+"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:10pt;\">Upgrade an already installed Tails device from a new ISO image.</span></p></body></html>"
+msgstr "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\np, li { white-space: pre-wrap; }\n</style></head><body style=\" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;\">\n<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:10pt;\">Upgrade een reeds geïnstalleerd Tails apparaat vanaf een nieuwe ISO afbeelding.</span></p></body></html>"
-#: ../liveusb/dialog.py:154
+#: ../liveusb/dialog.py:163
msgid "Alt+B"
msgstr "Alt+B"
-#: ../liveusb/dialog.py:153
+#: ../liveusb/dialog.py:162
msgid "Browse"
msgstr "Bladeren"
-#: ../liveusb/dialog.py:160
+#: ../liveusb/dialog.py:169
msgid ""
"By allocating extra space on your USB stick for a persistent overlay, you "
"will be able to store data and make permanent modifications to your live "
"operating system. Without it, you will not be able to save data that will "
"persist after a reboot."
-msgstr "Door extra ruimte voor persistente opslag op je USB stick toe te wijzen, kun je data en permanente aanpassingen maken op je live besturingssysteem. Zonder dit kun je geen data opslaan dat bewaard blijft na opnieuw opstarten."
+msgstr "Door extra ruimte voor persistente opslag op je USB stick toe te wijzen, kun je data en permanente aanpassingen bewaren op je live besturingssysteem. Zonder dit kun je geen data opslaan die bewaard blijft na opnieuw opstarten."
-#: ../liveusb/creator.py:1106 ../liveusb/creator.py:1369
+#: ../liveusb/creator.py:1125 ../liveusb/creator.py:1388
#, python-format
msgid "Calculating the SHA1 of %s"
msgstr "SHA1 berekenen van %s"
-#: ../liveusb/creator.py:1317
+#: ../liveusb/creator.py:1336
msgid "Cannot find"
-msgstr "Niet gevonden:"
+msgstr "Niet gevonden"
#: ../liveusb/creator.py:545
#, python-format
msgid "Cannot find device %s"
msgstr "Kan apparaat %s niet vinden"
-#: ../liveusb/launcher_ui.py:150
+#: ../liveusb/launcher_ui.py:159
msgid ""
"Clone\n"
"&&\n"
"Install"
msgstr "Kloon\n&&\nInstalleer"
-#: ../liveusb/launcher_ui.py:152
+#: ../liveusb/launcher_ui.py:161
msgid ""
"Clone\n"
"&&\n"
"Upgrade"
msgstr "Kloon\n&&\nUpgrade"
-#: ../liveusb/dialog.py:165
-msgid "Create Live USB"
-msgstr "Maak Live USB"
-
#: ../liveusb/creator.py:400
#, python-format
msgid "Creating %sMB persistent overlay"
msgstr "%sMb persistente geheugenruimte aanmaken..."
-#: ../liveusb/gui.py:556
+#: ../liveusb/gui.py:565
msgid ""
"Device is not yet mounted, so we cannot determine the amount of free space."
-msgstr "Apparaat is niet aangekoppeld, daarom kunnen we de hoveelheid vrije ruimte niet bepalen."
+msgstr "Apparaat is nog niet aangekoppeld, daarom kunnen we de hoveelheid vrije ruimte niet bepalen."
-#: ../liveusb/dialog.py:157
+#: ../liveusb/dialog.py:166
#, python-format
msgid "Download %(distribution)s"
msgstr "Download %(distribution)s"
-#: ../liveusb/gui.py:750
+#: ../liveusb/gui.py:781
msgid "Download complete!"
-msgstr "Download klaar!"
+msgstr "Download voltooid!"
-#: ../liveusb/gui.py:754
+#: ../liveusb/gui.py:785
msgid "Download failed: "
-msgstr "Download mislukte: "
+msgstr "Download mislukt: "
#: ../liveusb/gui.py:88
#, python-format
msgid "Downloading %s..."
-msgstr "Downloaden %s..."
+msgstr "%s downloaden..."
-#: ../liveusb/creator.py:1102
+#: ../liveusb/creator.py:1121
msgid "Drive is a loopback, skipping MBR reset"
msgstr "Station is een loopback, MBR-reset wordt overgeslagen"
-#: ../liveusb/creator.py:808
+#: ../liveusb/creator.py:816
#, python-format
msgid "Entering unmount_device for '%(device)s'"
-msgstr "Binnengaan unmount_device voor '%(device)s'"
+msgstr "Unmount_device voor '%(device)s' binnengaan"
-#: ../liveusb/creator.py:1182
+#: ../liveusb/creator.py:1201
msgid "Error probing device"
msgstr "Fout bij proben apparaat"
@@ -172,16 +179,16 @@ msgstr "Fout: Kan het label niet zetten of de UUID van jouw apparaat niet verkri
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 "Fout: De SHA1 van jouw Live CD is niet correct. Je kunt het programma uitvoeren met het --noverify argument om deze controle over te slaan."
+msgstr "Fout: De SHA1 van jouw Live CD is niet correct. Je kunt dit programma uitvoeren met het --noverify argument om deze controle over te slaan."
#: ../liveusb/creator.py:145
-msgid "Extracting live image to USB device..."
-msgstr "Live image uitpakken naar USB apparaat..."
+msgid "Extracting live image to the target device..."
+msgstr "Live afbeelding naar het doelapparaat overzetten..."
-#: ../liveusb/creator.py:1047
+#: ../liveusb/creator.py:1066
#, python-format
msgid "Formatting %(device)s as FAT32"
-msgstr "Formatteren %(device)s als FAT32"
+msgstr "%(device)s als FAT32 formatteren"
#: ../liveusb/creator.py:140
msgid "ISO MD5 checksum passed"
@@ -191,13 +198,17 @@ msgstr "ISO MD5 checksum klopte"
msgid "ISO MD5 checksum verification failed"
msgstr "ISO MD5 checksumverificatie niet gelukt"
-#: ../liveusb/dialog.py:156
+#: ../liveusb/dialog.py:165
msgid ""
"If you do not select an existing Live ISO, the selected release will be "
"downloaded for you."
-msgstr "Als je geen bestaande Live ISO selecteerd, zal de geselecteerde release gedownload worden."
+msgstr "Als je geen bestaande Live ISO selecteert, zal de geselecteerde release voor je gedownload worden."
-#: ../liveusb/gui.py:619
+#: ../liveusb/dialog.py:174
+msgid "Install Tails"
+msgstr "Installeer Tails"
+
+#: ../liveusb/gui.py:628
msgid "Installation complete!"
msgstr "Installatie afgerond!"
@@ -206,44 +217,40 @@ msgstr "Installatie afgerond!"
msgid "Installation complete! (%s)"
msgstr "Installatie afgerond! (%s)"
-#: ../liveusb/gui.py:620
+#: ../liveusb/gui.py:629
msgid "Installation was completed. Press OK to close this program."
msgstr "Installatie is afgerond. Klik op OK om dit programma af te sluiten."
-#: ../liveusb/creator.py:900 ../liveusb/creator.py:1223
+#: ../liveusb/creator.py:919 ../liveusb/creator.py:1242
msgid "Installing bootloader..."
msgstr "Bootloader installeren..."
#: ../liveusb/gui.py:284
msgid "LiveUSB creation failed!"
-msgstr "LiveUSB aanmaken faalde!"
+msgstr "LiveUSB aanmaken mislukt!"
-#: ../liveusb/creator.py:1318
+#: ../liveusb/creator.py:1337
msgid ""
"Make sure to extract the entire liveusb-creator zip file before running this"
" program."
-msgstr "Wees er zeker van dat het hele liveusb-creator zip bestand is uitgepakt voordat je dit programma draait."
+msgstr "Wees er zeker van dat het hele liveusb-creator zip bestand is uitgepakt voordat je dit programma uitvoert."
-#: ../liveusb/creator.py:1194
+#: ../liveusb/creator.py:1213
msgid ""
"Make sure your USB key is plugged in and formatted with the FAT filesystem"
-msgstr "Verzeker je ervan dat jouw USB stick is aangesloten en geformatteerd met het FAT bestandssysteem"
+msgstr "Verzeker je ervan dat jouw USB-stick is aangesloten en geformatteerd met het FAT bestandssysteem"
-#: ../liveusb/creator.py:830
+#: ../liveusb/creator.py:838
#, python-format
msgid "Mount %s exists after unmounting"
msgstr "Aankoppeling %s bestaat na afkoppeling"
-#: ../liveusb/gui.py:681 ../liveusb/gui.py:698
-msgid "Next"
-msgstr "Verder"
-
-#: ../liveusb/gui.py:562
+#: ../liveusb/gui.py:571
#, python-format
msgid "No free space on device %(device)s"
-msgstr "Er is niet genoeg vrije ruimte op apparaat %(device)s"
+msgstr "Er is geen vrije ruimte op apparaat %(device)s"
-#: ../liveusb/creator.py:797
+#: ../liveusb/creator.py:805
msgid "No mount points found"
msgstr "Geen aankoppelpunten gevonden"
@@ -252,56 +259,56 @@ msgstr "Geen aankoppelpunten gevonden"
msgid ""
"Not enough free space on device.\n"
"%dMB ISO + %dMB overlay > %dMB free space"
-msgstr "Er is niet genoeg vrije ruimte op het apparaat.\n %dMB ISO + %dMB overlay > %dMB vrije ruimte"
+msgstr "Niet genoeg vrije ruimte op het apparaat.\n %dMB ISO + %dMB overlay > %dMB vrije ruimte"
-#: ../liveusb/gui.py:543
+#: ../liveusb/gui.py:552
msgid "Partition is FAT16; Restricting overlay size to 2G"
msgstr "Partitie is FAT16; Overlay size wordt beperkt tot 2G"
-#: ../liveusb/gui.py:539
+#: ../liveusb/gui.py:548
msgid "Partition is FAT32; Restricting overlay size to 4G"
msgstr "Partitie is FAT32; Overlay grootte wordt beperkt tot 4G"
-#: ../liveusb/creator.py:226 ../liveusb/creator.py:837
+#: ../liveusb/creator.py:226 ../liveusb/creator.py:845
#, python-format
msgid "Partitioning device %(device)s"
msgstr "Partitioneren van apparaat %(device)s"
-#: ../liveusb/gui.py:610
+#: ../liveusb/gui.py:619
msgid "Persistent Storage"
msgstr "Persistente opslag"
-#: ../liveusb/dialog.py:161
+#: ../liveusb/dialog.py:170
msgid "Persistent Storage (0 MB)"
msgstr "Persistente opslag (0 MB)"
-#: ../liveusb/gui.py:679 ../liveusb/gui.py:696
-msgid "Press 'Next' if you wish to continue."
-msgstr "Druk op 'Verder' als je verder wilt gaan."
+#: ../liveusb/gui.py:700 ../liveusb/gui.py:730
+msgid "Please confirm your device selection"
+msgstr "Bevestig uw apparaatselectie"
-#: ../liveusb/gui.py:456
+#: ../liveusb/gui.py:465
msgid "Refreshing releases..."
-msgstr "Bezig met vernieuwen van releases"
+msgstr "Bezig met vernieuwen van releases..."
-#: ../liveusb/gui.py:461
+#: ../liveusb/gui.py:470
msgid "Releases updated!"
msgstr "Releases zijn bijgewerkt!"
-#: ../liveusb/creator.py:923 ../liveusb/creator.py:1241
+#: ../liveusb/creator.py:942 ../liveusb/creator.py:1260
#, python-format
msgid "Removing %(file)s"
-msgstr "Verwijderen %(file)s"
+msgstr "%(file)s verwijderen"
#: ../liveusb/creator.py:469
msgid "Removing existing Live OS"
-msgstr "Verwijderen bestaand Live OS...."
+msgstr "Bestaand Live OS verwijderen"
-#: ../liveusb/creator.py:1096
+#: ../liveusb/creator.py:1115
#, python-format
msgid "Resetting Master Boot Record of %s"
-msgstr "Resetten Master Boot Record van %s"
+msgstr "Master Boot Record van %s resetten"
-#: ../liveusb/gui.py:761
+#: ../liveusb/gui.py:792
msgid "Select Live ISO"
msgstr "Selecteer Live ISO"
@@ -309,33 +316,33 @@ msgstr "Selecteer Live ISO"
msgid "Setting up OLPC boot file..."
msgstr "Inrichten OLPC bootbestand..."
-#: ../liveusb/creator.py:711
+#: ../liveusb/creator.py:719
#, python-format
msgid ""
-"Some partitions of USB device %(device)s are mounted. They will be unmounted"
-" before starting the installation process."
-msgstr "Sommige partities van USB-apparaat %(device)s zijn aangekoppeld. Zij zullen voor de start van het installatieproces worden afgekoppeld."
+"Some partitions of the target device %(device)s are mounted. They will be "
+"unmounted before starting the installation process."
+msgstr "Sommige partities van het doelapparaat %(device)s zijn gekoppeld. Ze zullen ontkoppeld worden voordat het installatieproces wordt gestart."
#: ../liveusb/creator.py:131
msgid ""
"Source type does not support verification of ISO MD5 checksum, skipping"
-msgstr "Brontype ondersteunt niet het verifiëren van ISO MD5 checksum; wordt overgeslagen"
+msgstr "Brontype ondersteunt het verifiëren van ISO MD5 checksum niet; wordt overgeslagen"
-#: ../liveusb/creator.py:1130
+#: ../liveusb/creator.py:1149
msgid "Synchronizing data on disk..."
msgstr "Data synchroniseren op schijf..."
-#: ../liveusb/dialog.py:159
+#: ../liveusb/dialog.py:168
msgid "Target Device"
-msgstr "Doel apparaat"
+msgstr "Doelapparaat"
-#: ../liveusb/gui.py:643
+#: ../liveusb/gui.py:665
msgid ""
-"The Master Boot Record on your device is blank. Pressing 'Create Live USB' "
+"The Master Boot Record on your device is blank. Pressing 'Install Tails' "
"again will reset the MBR on this device."
-msgstr "De Master Boot Record op dit apparaat is blanco. Nogmaals aanklikken van 'Creëer Live USB' zal de MBR op dit apparaat resetten."
+msgstr "De Master Boot Record op uw apparaat is leeg. Weer op 'Installeer Tails' drukken zal de MBR op dit apparaat resetten."
-#: ../liveusb/gui.py:764
+#: ../liveusb/gui.py:795
msgid ""
"The selected file is unreadable. Please fix its permissions or select "
"another file."
@@ -346,40 +353,44 @@ msgstr "Het geselecteerde bestand is onleesbaar. Herstel de rechten of selecteer
msgid ""
"There was a problem executing the following command: `%(command)s`.\n"
"A more detailed error log has been written to '%(filename)s'."
-msgstr "Er is een probleem met het uitvoeren van het volgende commando: `%(command)s`.\nUitgebreidere informatie is geschreven naar '%(filename)s'."
+msgstr "Er was een probleem met het uitvoeren van het volgende commando: `%(command)s`.\nUitgebreidere informatie is geschreven naar '%(filename)s'."
-#: ../liveusb/dialog.py:151
+#: ../liveusb/dialog.py:160
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 "Deze knop laat je bladeren naar een bestaande Live system ISO dat je eerder hebt gedownload. Als je er geen selecteert, zal er automatisch een release voor je gedownload worden."
-#: ../liveusb/dialog.py:164
+#: ../liveusb/dialog.py:173
msgid ""
"This button will begin the LiveUSB creation process. This entails "
"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 "Deze knop start het proces om de LiveUSB te maken. Dit houdt in dat er indien nodig een uitgave worden gedownload (als er geen reeds bestaande was geselecteerd), de ISO wordt uitgepakt naar een USB apparaat, de persistente geheugenruimte wordt aangemaakt en het installeren van de bootloader."
+msgstr "Deze knop start het proces om de LiveUSB te maken. Dit houdt in dat er indien nodig een uitgave wordt gedownload (als er geen reeds bestaande was geselecteerd), de ISO wordt uitgepakt naar een USB-apparaat, de persistente geheugenruimte wordt aangemaakt en de bootloader wordt geïnstalleerd."
-#: ../liveusb/dialog.py:158
+#: ../liveusb/dialog.py:167
msgid ""
"This is the USB stick that you want to install your Live system on. This "
"device must be formatted with the FAT filesystem."
msgstr "Dit is de USB-stick waar u uw Live systeem op wilt installeren. Dit apparaat moet in het FAT bestandssysteem zijn geformatteerd."
-#: ../liveusb/dialog.py:163
+#: ../liveusb/dialog.py:172
msgid ""
"This is the progress bar that will indicate how far along in the LiveUSB "
"creation process you are"
msgstr "Deze balk toont aan hoe ver u zit in het proces om de LiveUSB aan te maken"
-#: ../liveusb/dialog.py:162
+#: ../liveusb/dialog.py:171
msgid "This is the status console, where all messages get written to."
msgstr "Dit is het statusveld waar alle berichten getoond worden."
-#: ../liveusb/creator.py:895
+#: ../liveusb/creator.py:882
+msgid "Trying to continue anyway."
+msgstr "Proberen om toch door te gaan."
+
+#: ../liveusb/creator.py:914
#, python-format
msgid "Unable to change volume label: %(message)s"
msgstr "Niet in staat volumelabel te veranderen: %(message)s"
@@ -396,26 +407,26 @@ msgstr "Kan %(infile)s niet naar %(outfile)s kopiëren: %(message)s"
#: ../liveusb/gui.py:418
msgid "Unable to find any USB drive"
-msgstr "Kan geen USB apparaten vinden"
+msgstr "Kan geen USB-apparaten vinden"
-#: ../liveusb/creator.py:1184
-msgid "Unable to find any removable device"
-msgstr "Kan geen verwijderbare apparaten vinden"
+#: ../liveusb/creator.py:1203
+msgid "Unable to find any supported device"
+msgstr "Niet in staat ondersteunde apparaten te vinden"
-#: ../liveusb/creator.py:1024
+#: ../liveusb/creator.py:1043
msgid "Unable to find partition"
msgstr "Kan geen partitie vinden"
-#: ../liveusb/creator.py:1264
+#: ../liveusb/creator.py:1283
msgid ""
"Unable to get Win32_LogicalDisk; win32com query did not return any results"
msgstr "Niet in staat Win32_LogicalDisk te verkrijgen; win32com query gaf geen zoekresultaat"
-#: ../liveusb/gui.py:671
+#: ../liveusb/gui.py:693
msgid "Unable to mount device"
msgstr "Kan apparaat niet aankoppelen"
-#: ../liveusb/creator.py:785
+#: ../liveusb/creator.py:793
#, python-format
msgid "Unable to mount device: %(message)s"
msgstr "Kan apparaat niet aankoppelen: %(message)s"
@@ -430,128 +441,144 @@ msgstr "Kan map van vorige LiveOS niet verwijderen: %(message)s"
msgid "Unable to remove file from previous LiveOS: %(message)s"
msgstr "Kan bestand van vorige LiveOS niet verwijderen: %(message)s"
-#: ../liveusb/creator.py:1099
+#: ../liveusb/creator.py:1118
msgid ""
"Unable to reset MBR. You may not have the `syslinux` package installed."
msgstr "Niet in staat de MBR te resetten. Mogelijk is het `syslinux` pakket niet geïnstalleerd."
-#: ../liveusb/gui.py:770
+#: ../liveusb/gui.py:801
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 "Kan geselecteerd bestand niet gebruiken. Je kunt meer geluk hebben als je jouw ISO verplaatst naar het hoogste niveau van jouw schijf (b.v.: C:\\)"
+msgstr "Kan geselecteerd bestand niet gebruiken. Je kunt meer geluk hebben als je jouw ISO verplaatst naar het hoogste niveau van jouw schijf (bijv.: C:\\)"
-#: ../liveusb/creator.py:692
+#: ../liveusb/creator.py:700
#, python-format
msgid "Unable to write on %(device)s, skipping."
msgstr "Niet in staat te schrijven naar %(device)s; wordt overgeslagen."
#: ../liveusb/creator.py:382
msgid "Unknown ISO, skipping checksum verification"
-msgstr "Onbekende ISO, verificatie checksum wordt overgeslagen"
+msgstr "Onbekende ISO, checksumverificatie wordt overgeslagen"
-#: ../liveusb/creator.py:781
+#: ../liveusb/creator.py:789
#, python-format
msgid "Unknown dbus exception while trying to mount device: %(message)s"
-msgstr "Onbekende dbus-exceptie tijdens aankoppelen van apparaat: %(message)s"
+msgstr "Onbekende dbus-uitzondering tijdens aankoppelen van apparaat: %(message)s"
-#: ../liveusb/creator.py:760 ../liveusb/creator.py:874
+#: ../liveusb/creator.py:768 ../liveusb/creator.py:893
msgid "Unknown filesystem. Your device may need to be reformatted."
-msgstr "Onbekend bestandssysteem. Het apparaat moet mogelijk geherformatteerd worden."
+msgstr "Onbekend bestandssysteem. Het apparaat moet mogelijk geherformatteerd worden."
#: ../liveusb/gui.py:84
#, python-format
msgid "Unknown release: %s"
-msgstr "Onbekende vrijgave: %s"
+msgstr "Onbekende release: %s"
-#: ../liveusb/creator.py:822
+#: ../liveusb/creator.py:830
#, python-format
msgid "Unmounting '%(udi)s' on '%(device)s'"
-msgstr "Afkoppelen '%(udi)s' op '%(device)s'"
+msgstr "'%(udi)s' op '%(device)s' afkoppelen"
-#: ../liveusb/creator.py:818
+#: ../liveusb/creator.py:826
#, python-format
msgid "Unmounting mounted filesystems on '%(device)s'"
-msgstr "Afkoppelen aangekoppeld bestandssysteem op '%(device)s'"
+msgstr "Aangekoppeld bestandssysteem op '%(device)s' afkoppelen"
-#: ../liveusb/creator.py:765 ../liveusb/creator.py:877
+#: ../liveusb/creator.py:879
+#, python-format
+msgid "Unsupported device '%(device)s', please report a bug."
+msgstr "Niet-ondersteund apparaat '%(device)s', rapporteer alstublieft een bug."
+
+#: ../liveusb/creator.py:773 ../liveusb/creator.py:896
#, python-format
msgid "Unsupported filesystem: %s"
-msgstr "Bestandssysteem: %s niet ondersteund"
+msgstr "Bestandssysteem niet ondersteund: %s"
-#: ../liveusb/creator.py:763
+#: ../liveusb/creator.py:771
#, 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 "Het bestandssysteem wordt niet ondersteund: %s\nIn het geval dat u een handmatig geïnstalleerde Tails wilt updaten (dat wilt zeggen dat het zonder deze installer is geïnstalleerd), dan wordt deze optie niet ondersteund. U moet het opnieuw installeren door de \"Kloon & Installeer\" optie te kiezen."
+msgstr "Het bestandssysteem wordt niet ondersteund: %s\nIn het geval dat u een handmatig geïnstalleerde Tails wilt updaten (dat wilt zeggen dat het zonder deze installer is geïnstalleerd), dan wordt deze optie niet ondersteund. U moet het om te beginnen opnieuw installeren, bijvoorbeeld door de \"Kloon & Installeer\" optie te kiezen."
-#: ../liveusb/creator.py:1197
+#: ../liveusb/creator.py:1216
#, python-format
msgid ""
"Unsupported filesystem: %s\n"
"Please backup and format your USB key with the FAT filesystem."
msgstr "Niet ondersteund bestandssysteem: %s\nMaak een back-up en formatteer jouw USB stick met het FAT bestandssysteem."
-#: ../liveusb/launcher_ui.py:154
+#: ../liveusb/launcher_ui.py:163
msgid "Upgrade from ISO"
msgstr "Upgrade vanaf ISO"
-#: ../liveusb/dialog.py:152
+#: ../liveusb/dialog.py:161
msgid "Use existing Live system ISO"
msgstr "Gebruik bestaande Live system ISO"
#: ../liveusb/creator.py:133
msgid "Verifying ISO MD5 checksum"
-msgstr "Verifiëren ISO MD5 checksum"
+msgstr "ISO MD5 checksum verifiëren"
#: ../liveusb/creator.py:356
msgid "Verifying SHA1 checksum of LiveCD image..."
-msgstr "Verifiëren van SHA1 checksum van LiveCD image..."
+msgstr "SHA1 checksum van LiveCD image verifiëren..."
#: ../liveusb/creator.py:360
msgid "Verifying SHA256 checksum of LiveCD image..."
-msgstr "Verifiëren van SHA256 checksum van LiveCD image..."
+msgstr "SHA256 checksum van LiveCD image verifiëren..."
-#: ../liveusb/creator.py:871 ../liveusb/creator.py:1190
+#: ../liveusb/creator.py:890 ../liveusb/creator.py:1209
msgid "Verifying filesystem..."
msgstr "Bestandssysteem verifiëren..."
-#: ../liveusb/gui.py:677
-msgid "Warning: All data on the selected drive will be lost."
-msgstr "Waarschuwing: Alle data op de geselecteerde schijf zal verloren gaan."
-
-#: ../liveusb/gui.py:694
+#: ../liveusb/gui.py:728
msgid ""
"Warning: Creating a new persistent overlay will delete your existing one."
-msgstr "Waarschuwing: Het maken van persistente geheugenruimte zal jouw bestaande geheugenruimte verwijderen."
+msgstr "Waarschuwing: Het maken van een nieuwe persistente geheugenruimte zal jouw bestaande geheugenruimte verwijderen."
-#: ../liveusb/gui.py:657
+#: ../liveusb/gui.py:679
msgid ""
"Warning: The Master Boot Record on your device does not match your system's "
"syslinux MBR. If you have trouble booting this stick, try running the "
"liveusb-creator with the --reset-mbr option."
-msgstr "Waarschuwing: De Master Boot Record op dit apparaat komt niet overeen met de syslinux MBR van je systeem. Indien er moeilijkheden zijn bij het booten van deze stick, draai dan liveusb-creator met optie --reset-mbr "
+msgstr "Waarschuwing: De Master Boot Record op dit apparaat komt niet overeen met de syslinux MBR van je systeem. Indien je moeilijkheden hebt bij het booten van deze stick, voer dan liveusb-creator uit met de optie --reset-mbr."
#: ../liveusb/gui.py:392
msgid ""
"Warning: This tool needs to be run as an Administrator. To do this, right "
"click on the icon and open the Properties. Under the Compatibility tab, "
"check the \"Run this program as an administrator\" box."
-msgstr "Waarschuwing: Deze tool moet als beheerder worden gestart. Om dat te doen, klik met rechter muisknop op het icoon en open Eigenschappen. onder de Compatibiliteit tab, check de \"Start dit programma als beheerder\" box."
+msgstr "Waarschuwing: Deze tool moet als beheerder worden uitgevoerd. Om dat te doen, klik met rechter muisknop op het icoon en open Eigenschappen. Onder de Compatibiliteit tab, check het \"Start dit programma als beheerder\" selectievakje."
#: ../liveusb/creator.py:152
#, python-format
msgid "Wrote to device at %(speed)d MB/sec"
-msgstr "Schreef naar apparaat met %(speed)d MB/sec"
+msgstr "Schreef naar apparaat met %(speed)d MB/sec"
+
+#: ../liveusb/gui.py:701
+#, python-format
+msgid ""
+"You are going to install Tails on the %(size)s %(vendor)s %(model)s device "
+"(%(device)s). All data on the selected device will be lost. Continue?"
+msgstr "U gaat Tails installeren op het %(size)s %(vendor)s %(model)s apparaat (%(device)s). Alle data op het geselecteerde apparaat zal verloren gaan. Doorgaan?"
+
+#: ../liveusb/gui.py:718
+#, python-format
+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 "U gaat Tails upgraden op het %(parent_size)s %(vendor)s %(model)s apparaat (%(device)s). Alle persistente volumes op dit apparaat zullen onveranderd blijven. Doorgaan?"
#: ../liveusb/creator.py:607
msgid ""
"You are using an old version of syslinux-extlinux that does not support the "
"ext4 filesystem"
-msgstr "Je gebruikt een oude versie van syslinux-extlinux die het ext4-bestandssysteem niet ondersteund"
+msgstr "Je gebruikt een oude versie van syslinux-extlinux die het ext4-bestandssysteem niet ondersteunt"
-#: ../liveusb/gui.py:755
+#: ../liveusb/gui.py:786
msgid "You can try again to resume your download"
msgstr "Je kunt opnieuw proberen je download voort te zetten"
@@ -559,12 +586,6 @@ msgstr "Je kunt opnieuw proberen je download voort te zetten"
msgid "You must run this application as root"
msgstr "Deze applicatie moet gestart worden als beheerder"
-#: ../liveusb/gui.py:691
-msgid ""
-"Your device already contains a LiveOS.\n"
-"If you continue, this will be overwritten."
-msgstr "Jouw apparaat bevat al een LiveOS.\nAls je doorgaat, wordt het overschreven."
-
-#: ../liveusb/dialog.py:155
+#: ../liveusb/dialog.py:164
msgid "or"
msgstr "of"
1
0

[translation/liveusb-creator] Update translations for liveusb-creator
by translation@torproject.org 08 Dec '13
by translation@torproject.org 08 Dec '13
08 Dec '13
commit 60468f7068a67dbeaa37a3377be6eef90b747044
Author: Translation commit bot <translation(a)torproject.org>
Date: Sun Dec 8 19:45:54 2013 +0000
Update translations for liveusb-creator
---
nl/nl.po | 36 ++++++++++++++++++------------------
1 file changed, 18 insertions(+), 18 deletions(-)
diff --git a/nl/nl.po b/nl/nl.po
index 55eea06..6518bd4 100644
--- a/nl/nl.po
+++ b/nl/nl.po
@@ -14,7 +14,7 @@ msgstr ""
"Project-Id-Version: The Tor Project\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-11-30 15:23+0100\n"
-"PO-Revision-Date: 2013-12-08 19:13+0000\n"
+"PO-Revision-Date: 2013-12-08 19:29+0000\n"
"Last-Translator: cialenhh <c1914502(a)drdrb.com>\n"
"Language-Team: Dutch (http://www.transifex.com/projects/p/torproject/language/nl/)\n"
"MIME-Version: 1.0\n"
@@ -26,7 +26,7 @@ msgstr ""
#: ../liveusb/dialog.py:159 ../liveusb/launcher_ui.py:158
#, python-format
msgid "%(distribution)s installer"
-msgstr ""
+msgstr "%(distribution)s installer"
#: ../liveusb/gui.py:807
#, python-format
@@ -36,12 +36,12 @@ msgstr "%(filename)s geselecteerd"
#: ../liveusb/gui.py:437
#, python-format
msgid "%(size)s %(label)s"
-msgstr ""
+msgstr "%(size)s %(label)s"
#: ../liveusb/gui.py:443
#, python-format
msgid "%(vendor)s %(model)s (%(details)s) - %(device)s"
-msgstr ""
+msgstr "%(vendor)s %(model)s (%(details)s) - %(device)s"
#: ../liveusb/creator.py:1023
#, python-format
@@ -55,7 +55,7 @@ msgid ""
"p, li { white-space: pre-wrap; }\n"
"</style></head><body style=\" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;\">\n"
"<p align=\"center\" style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:10pt;\">Need help? Read the </span><a href=\"file:///usr/share/doc/tails/website/doc/first_steps/installation.en.html\"><span style=\" text-decoration: underline; color:#0000ff;\">documentation</span></a><span style=\" font-size:10pt;\">.</span></p></body></html>"
-msgstr ""
+msgstr "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\np, li { white-space: pre-wrap; }\n</style></head><body style=\" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;\">\n<p align=\"center\" style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:10pt;\">Hulp nodig? Lees de </span><a href=\"file:///usr/share/doc/tails/website/doc/first_steps/installation.en.html\"><span style=\" text-decoration: underline; color:#0000ff;\">documentation</span></a><span style=\" font-size:10pt;\">.</span></p></body></html>"
#: ../liveusb/launcher_ui.py:160
msgid ""
@@ -64,7 +64,7 @@ msgid ""
"p, li { white-space: pre-wrap; }\n"
"</style></head><body style=\" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;\">\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:10pt;\">Copy the running Tails onto a USB stick or SD card. All data on the target drive will be lost.</span></p></body></html>"
-msgstr ""
+msgstr "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\np, li { white-space: pre-wrap; }\n</style></head><body style=\" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;\">\n<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:10pt;\">Kopieer de functionerende Tails naar een USB-stick of naar een SD-kaart. Alle data op de doelschijf zal verloren gaan.</span></p></body></html>"
#: ../liveusb/launcher_ui.py:162
msgid ""
@@ -73,7 +73,7 @@ msgid ""
"p, li { white-space: pre-wrap; }\n"
"</style></head><body style=\" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;\">\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:10pt;\">Copy the running Tails onto an already installed Tails device. Other partitions found on the stick are preserved.</span></p></body></html>"
-msgstr ""
+msgstr "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\np, li { white-space: pre-wrap; }\n</style></head><body style=\" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;\">\n<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:10pt;\">Kopieer de functionerende Tails naar een reeds geïnstalleerd Tails apparaat. Andere partities die gevonden worden op de stick zijn behouden.</span></p></body></html>"
#: ../liveusb/launcher_ui.py:164
msgid ""
@@ -82,7 +82,7 @@ msgid ""
"p, li { white-space: pre-wrap; }\n"
"</style></head><body style=\" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;\">\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:10pt;\">Upgrade an already installed Tails device from a new ISO image.</span></p></body></html>"
-msgstr ""
+msgstr "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\np, li { white-space: pre-wrap; }\n</style></head><body style=\" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;\">\n<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:10pt;\">Upgrade een reeds geïnstalleerd Tails apparaat vanaf een nieuwe ISO afbeelding.</span></p></body></html>"
#: ../liveusb/dialog.py:163
msgid "Alt+B"
@@ -183,7 +183,7 @@ msgstr "Fout: De SHA1 van jouw Live CD is niet correct. Je kunt dit programma u
#: ../liveusb/creator.py:145
msgid "Extracting live image to the target device..."
-msgstr ""
+msgstr "Live afbeelding naar het doelapparaat overzetten..."
#: ../liveusb/creator.py:1066
#, python-format
@@ -206,7 +206,7 @@ msgstr "Als je geen bestaande Live ISO selecteert, zal de geselecteerde release
#: ../liveusb/dialog.py:174
msgid "Install Tails"
-msgstr ""
+msgstr "Installeer Tails"
#: ../liveusb/gui.py:628
msgid "Installation complete!"
@@ -284,7 +284,7 @@ msgstr "Persistente opslag (0 MB)"
#: ../liveusb/gui.py:700 ../liveusb/gui.py:730
msgid "Please confirm your device selection"
-msgstr ""
+msgstr "Bevestig uw apparaatselectie"
#: ../liveusb/gui.py:465
msgid "Refreshing releases..."
@@ -321,7 +321,7 @@ msgstr "Inrichten OLPC bootbestand..."
msgid ""
"Some partitions of the target device %(device)s are mounted. They will be "
"unmounted before starting the installation process."
-msgstr ""
+msgstr "Sommige partities van het doelapparaat %(device)s zijn gekoppeld. Ze zullen ontkoppeld worden voordat het installatieproces wordt gestart."
#: ../liveusb/creator.py:131
msgid ""
@@ -340,7 +340,7 @@ msgstr "Doelapparaat"
msgid ""
"The Master Boot Record on your device is blank. Pressing 'Install Tails' "
"again will reset the MBR on this device."
-msgstr ""
+msgstr "De Master Boot Record op uw apparaat is leeg. Weer op 'Installeer Tails' drukken zal de MBR op dit apparaat resetten."
#: ../liveusb/gui.py:795
msgid ""
@@ -388,7 +388,7 @@ msgstr "Dit is het statusveld waar alle berichten getoond worden."
#: ../liveusb/creator.py:882
msgid "Trying to continue anyway."
-msgstr ""
+msgstr "Proberen om toch door te gaan."
#: ../liveusb/creator.py:914
#, python-format
@@ -411,7 +411,7 @@ msgstr "Kan geen USB-apparaten vinden"
#: ../liveusb/creator.py:1203
msgid "Unable to find any supported device"
-msgstr ""
+msgstr "Niet in staat ondersteunde apparaten te vinden"
#: ../liveusb/creator.py:1043
msgid "Unable to find partition"
@@ -488,7 +488,7 @@ msgstr "Aangekoppeld bestandssysteem op '%(device)s' afkoppelen"
#: ../liveusb/creator.py:879
#, python-format
msgid "Unsupported device '%(device)s', please report a bug."
-msgstr ""
+msgstr "Niet-ondersteund apparaat '%(device)s', rapporteer alstublieft een bug."
#: ../liveusb/creator.py:773 ../liveusb/creator.py:896
#, python-format
@@ -562,7 +562,7 @@ msgstr "Schreef naar apparaat met %(speed)d MB/sec"
msgid ""
"You are going to install Tails on the %(size)s %(vendor)s %(model)s device "
"(%(device)s). All data on the selected device will be lost. Continue?"
-msgstr ""
+msgstr "U gaat Tails installeren op het %(size)s %(vendor)s %(model)s apparaat (%(device)s). Alle data op het geselecteerde apparaat zal verloren gaan. Doorgaan?"
#: ../liveusb/gui.py:718
#, python-format
@@ -570,7 +570,7 @@ 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 ""
+msgstr "U gaat Tails upgraden op het %(parent_size)s %(vendor)s %(model)s apparaat (%(device)s). Alle persistente volumes op dit apparaat zullen onveranderd blijven. Doorgaan?"
#: ../liveusb/creator.py:607
msgid ""
1
0

[translation/liveusb-creator] Update translations for liveusb-creator
by translation@torproject.org 08 Dec '13
by translation@torproject.org 08 Dec '13
08 Dec '13
commit 4fdb3a4738f247ff1582276f2df2ecd00d035da7
Author: Translation commit bot <translation(a)torproject.org>
Date: Sun Dec 8 19:15:58 2013 +0000
Update translations for liveusb-creator
---
nl/nl.po | 89 +++++++++++++++++++++++++++++++-------------------------------
1 file changed, 45 insertions(+), 44 deletions(-)
diff --git a/nl/nl.po b/nl/nl.po
index 198eabe..55eea06 100644
--- a/nl/nl.po
+++ b/nl/nl.po
@@ -3,6 +3,7 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# cialenhh <c1914502(a)drdrb.com>, 2013
# Geert Warrink <geert.warrink(a)onsnet.nu>, 2009-2010
# Richard E. van der Luit <nippur(a)fedoraproject.org>, 2012
# Shondoit Walker <shondoit(a)gmail.com>, 2013
@@ -12,9 +13,9 @@ msgid ""
msgstr ""
"Project-Id-Version: The Tor Project\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-11-12 13:29+0100\n"
-"PO-Revision-Date: 2013-11-13 09:23+0000\n"
-"Last-Translator: runasand <runa.sandvik(a)gmail.com>\n"
+"POT-Creation-Date: 2013-11-30 15:23+0100\n"
+"PO-Revision-Date: 2013-12-08 19:13+0000\n"
+"Last-Translator: cialenhh <c1914502(a)drdrb.com>\n"
"Language-Team: Dutch (http://www.transifex.com/projects/p/torproject/language/nl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -97,7 +98,7 @@ msgid ""
"will be able to store data and make permanent modifications to your live "
"operating system. Without it, you will not be able to save data that will "
"persist after a reboot."
-msgstr "Door extra ruimte voor persistente opslag op je USB stick toe te wijzen, kun je data en permanente aanpassingen maken op je live besturingssysteem. Zonder dit kun je geen data opslaan dat bewaard blijft na opnieuw opstarten."
+msgstr "Door extra ruimte voor persistente opslag op je USB stick toe te wijzen, kun je data en permanente aanpassingen bewaren op je live besturingssysteem. Zonder dit kun je geen data opslaan die bewaard blijft na opnieuw opstarten."
#: ../liveusb/creator.py:1125 ../liveusb/creator.py:1388
#, python-format
@@ -106,7 +107,7 @@ msgstr "SHA1 berekenen van %s"
#: ../liveusb/creator.py:1336
msgid "Cannot find"
-msgstr "Niet gevonden:"
+msgstr "Niet gevonden"
#: ../liveusb/creator.py:545
#, python-format
@@ -135,7 +136,7 @@ msgstr "%sMb persistente geheugenruimte aanmaken..."
#: ../liveusb/gui.py:565
msgid ""
"Device is not yet mounted, so we cannot determine the amount of free space."
-msgstr "Apparaat is niet aangekoppeld, daarom kunnen we de hoveelheid vrije ruimte niet bepalen."
+msgstr "Apparaat is nog niet aangekoppeld, daarom kunnen we de hoveelheid vrije ruimte niet bepalen."
#: ../liveusb/dialog.py:166
#, python-format
@@ -144,16 +145,16 @@ msgstr "Download %(distribution)s"
#: ../liveusb/gui.py:781
msgid "Download complete!"
-msgstr "Download klaar!"
+msgstr "Download voltooid!"
#: ../liveusb/gui.py:785
msgid "Download failed: "
-msgstr "Download mislukte: "
+msgstr "Download mislukt: "
#: ../liveusb/gui.py:88
#, python-format
msgid "Downloading %s..."
-msgstr "Downloaden %s..."
+msgstr "%s downloaden..."
#: ../liveusb/creator.py:1121
msgid "Drive is a loopback, skipping MBR reset"
@@ -162,7 +163,7 @@ msgstr "Station is een loopback, MBR-reset wordt overgeslagen"
#: ../liveusb/creator.py:816
#, python-format
msgid "Entering unmount_device for '%(device)s'"
-msgstr "Binnengaan unmount_device voor '%(device)s'"
+msgstr "Unmount_device voor '%(device)s' binnengaan"
#: ../liveusb/creator.py:1201
msgid "Error probing device"
@@ -178,7 +179,7 @@ msgstr "Fout: Kan het label niet zetten of de UUID van jouw apparaat niet verkri
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 "Fout: De SHA1 van jouw Live CD is niet correct. Je kunt het programma uitvoeren met het --noverify argument om deze controle over te slaan."
+msgstr "Fout: De SHA1 van jouw Live CD is niet correct. Je kunt dit programma uitvoeren met het --noverify argument om deze controle over te slaan."
#: ../liveusb/creator.py:145
msgid "Extracting live image to the target device..."
@@ -187,7 +188,7 @@ msgstr ""
#: ../liveusb/creator.py:1066
#, python-format
msgid "Formatting %(device)s as FAT32"
-msgstr "Formatteren %(device)s als FAT32"
+msgstr "%(device)s als FAT32 formatteren"
#: ../liveusb/creator.py:140
msgid "ISO MD5 checksum passed"
@@ -201,7 +202,7 @@ msgstr "ISO MD5 checksumverificatie niet gelukt"
msgid ""
"If you do not select an existing Live ISO, the selected release will be "
"downloaded for you."
-msgstr "Als je geen bestaande Live ISO selecteerd, zal de geselecteerde release gedownload worden."
+msgstr "Als je geen bestaande Live ISO selecteert, zal de geselecteerde release voor je gedownload worden."
#: ../liveusb/dialog.py:174
msgid "Install Tails"
@@ -226,18 +227,18 @@ msgstr "Bootloader installeren..."
#: ../liveusb/gui.py:284
msgid "LiveUSB creation failed!"
-msgstr "LiveUSB aanmaken faalde!"
+msgstr "LiveUSB aanmaken mislukt!"
#: ../liveusb/creator.py:1337
msgid ""
"Make sure to extract the entire liveusb-creator zip file before running this"
" program."
-msgstr "Wees er zeker van dat het hele liveusb-creator zip bestand is uitgepakt voordat je dit programma draait."
+msgstr "Wees er zeker van dat het hele liveusb-creator zip bestand is uitgepakt voordat je dit programma uitvoert."
#: ../liveusb/creator.py:1213
msgid ""
"Make sure your USB key is plugged in and formatted with the FAT filesystem"
-msgstr "Verzeker je ervan dat jouw USB stick is aangesloten en geformatteerd met het FAT bestandssysteem"
+msgstr "Verzeker je ervan dat jouw USB-stick is aangesloten en geformatteerd met het FAT bestandssysteem"
#: ../liveusb/creator.py:838
#, python-format
@@ -247,7 +248,7 @@ msgstr "Aankoppeling %s bestaat na afkoppeling"
#: ../liveusb/gui.py:571
#, python-format
msgid "No free space on device %(device)s"
-msgstr "Er is niet genoeg vrije ruimte op apparaat %(device)s"
+msgstr "Er is geen vrije ruimte op apparaat %(device)s"
#: ../liveusb/creator.py:805
msgid "No mount points found"
@@ -258,7 +259,7 @@ msgstr "Geen aankoppelpunten gevonden"
msgid ""
"Not enough free space on device.\n"
"%dMB ISO + %dMB overlay > %dMB free space"
-msgstr "Er is niet genoeg vrije ruimte op het apparaat.\n %dMB ISO + %dMB overlay > %dMB vrije ruimte"
+msgstr "Niet genoeg vrije ruimte op het apparaat.\n %dMB ISO + %dMB overlay > %dMB vrije ruimte"
#: ../liveusb/gui.py:552
msgid "Partition is FAT16; Restricting overlay size to 2G"
@@ -287,7 +288,7 @@ msgstr ""
#: ../liveusb/gui.py:465
msgid "Refreshing releases..."
-msgstr "Bezig met vernieuwen van releases"
+msgstr "Bezig met vernieuwen van releases..."
#: ../liveusb/gui.py:470
msgid "Releases updated!"
@@ -296,16 +297,16 @@ msgstr "Releases zijn bijgewerkt!"
#: ../liveusb/creator.py:942 ../liveusb/creator.py:1260
#, python-format
msgid "Removing %(file)s"
-msgstr "Verwijderen %(file)s"
+msgstr "%(file)s verwijderen"
#: ../liveusb/creator.py:469
msgid "Removing existing Live OS"
-msgstr "Verwijderen bestaand Live OS...."
+msgstr "Bestaand Live OS verwijderen"
#: ../liveusb/creator.py:1115
#, python-format
msgid "Resetting Master Boot Record of %s"
-msgstr "Resetten Master Boot Record van %s"
+msgstr "Master Boot Record van %s resetten"
#: ../liveusb/gui.py:792
msgid "Select Live ISO"
@@ -325,7 +326,7 @@ msgstr ""
#: ../liveusb/creator.py:131
msgid ""
"Source type does not support verification of ISO MD5 checksum, skipping"
-msgstr "Brontype ondersteunt niet het verifiëren van ISO MD5 checksum; wordt overgeslagen"
+msgstr "Brontype ondersteunt het verifiëren van ISO MD5 checksum niet; wordt overgeslagen"
#: ../liveusb/creator.py:1149
msgid "Synchronizing data on disk..."
@@ -333,7 +334,7 @@ msgstr "Data synchroniseren op schijf..."
#: ../liveusb/dialog.py:168
msgid "Target Device"
-msgstr "Doel apparaat"
+msgstr "Doelapparaat"
#: ../liveusb/gui.py:665
msgid ""
@@ -352,7 +353,7 @@ msgstr "Het geselecteerde bestand is onleesbaar. Herstel de rechten of selecteer
msgid ""
"There was a problem executing the following command: `%(command)s`.\n"
"A more detailed error log has been written to '%(filename)s'."
-msgstr "Er is een probleem met het uitvoeren van het volgende commando: `%(command)s`.\nUitgebreidere informatie is geschreven naar '%(filename)s'."
+msgstr "Er was een probleem met het uitvoeren van het volgende commando: `%(command)s`.\nUitgebreidere informatie is geschreven naar '%(filename)s'."
#: ../liveusb/dialog.py:160
msgid ""
@@ -367,7 +368,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 "Deze knop start het proces om de LiveUSB te maken. Dit houdt in dat er indien nodig een uitgave worden gedownload (als er geen reeds bestaande was geselecteerd), de ISO wordt uitgepakt naar een USB apparaat, de persistente geheugenruimte wordt aangemaakt en het installeren van de bootloader."
+msgstr "Deze knop start het proces om de LiveUSB te maken. Dit houdt in dat er indien nodig een uitgave wordt gedownload (als er geen reeds bestaande was geselecteerd), de ISO wordt uitgepakt naar een USB-apparaat, de persistente geheugenruimte wordt aangemaakt en de bootloader wordt geïnstalleerd."
#: ../liveusb/dialog.py:167
msgid ""
@@ -406,7 +407,7 @@ msgstr "Kan %(infile)s niet naar %(outfile)s kopiëren: %(message)s"
#: ../liveusb/gui.py:418
msgid "Unable to find any USB drive"
-msgstr "Kan geen USB apparaten vinden"
+msgstr "Kan geen USB-apparaten vinden"
#: ../liveusb/creator.py:1203
msgid "Unable to find any supported device"
@@ -449,7 +450,7 @@ msgstr "Niet in staat de MBR te resetten. Mogelijk is het `syslinux` pakket niet
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 "Kan geselecteerd bestand niet gebruiken. Je kunt meer geluk hebben als je jouw ISO verplaatst naar het hoogste niveau van jouw schijf (b.v.: C:\\)"
+msgstr "Kan geselecteerd bestand niet gebruiken. Je kunt meer geluk hebben als je jouw ISO verplaatst naar het hoogste niveau van jouw schijf (bijv.: C:\\)"
#: ../liveusb/creator.py:700
#, python-format
@@ -458,31 +459,31 @@ msgstr "Niet in staat te schrijven naar %(device)s; wordt overgeslagen."
#: ../liveusb/creator.py:382
msgid "Unknown ISO, skipping checksum verification"
-msgstr "Onbekende ISO, verificatie checksum wordt overgeslagen"
+msgstr "Onbekende ISO, checksumverificatie wordt overgeslagen"
#: ../liveusb/creator.py:789
#, python-format
msgid "Unknown dbus exception while trying to mount device: %(message)s"
-msgstr "Onbekende dbus-exceptie tijdens aankoppelen van apparaat: %(message)s"
+msgstr "Onbekende dbus-uitzondering tijdens aankoppelen van apparaat: %(message)s"
#: ../liveusb/creator.py:768 ../liveusb/creator.py:893
msgid "Unknown filesystem. Your device may need to be reformatted."
-msgstr "Onbekend bestandssysteem. Het apparaat moet mogelijk geherformatteerd worden."
+msgstr "Onbekend bestandssysteem. Het apparaat moet mogelijk geherformatteerd worden."
#: ../liveusb/gui.py:84
#, python-format
msgid "Unknown release: %s"
-msgstr "Onbekende vrijgave: %s"
+msgstr "Onbekende release: %s"
#: ../liveusb/creator.py:830
#, python-format
msgid "Unmounting '%(udi)s' on '%(device)s'"
-msgstr "Afkoppelen '%(udi)s' op '%(device)s'"
+msgstr "'%(udi)s' op '%(device)s' afkoppelen"
#: ../liveusb/creator.py:826
#, python-format
msgid "Unmounting mounted filesystems on '%(device)s'"
-msgstr "Afkoppelen aangekoppeld bestandssysteem op '%(device)s'"
+msgstr "Aangekoppeld bestandssysteem op '%(device)s' afkoppelen"
#: ../liveusb/creator.py:879
#, python-format
@@ -492,14 +493,14 @@ msgstr ""
#: ../liveusb/creator.py:773 ../liveusb/creator.py:896
#, python-format
msgid "Unsupported filesystem: %s"
-msgstr "Bestandssysteem: %s niet ondersteund"
+msgstr "Bestandssysteem niet ondersteund: %s"
#: ../liveusb/creator.py:771
#, 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 "Het bestandssysteem wordt niet ondersteund: %s\nIn het geval dat u een handmatig geïnstalleerde Tails wilt updaten (dat wilt zeggen dat het zonder deze installer is geïnstalleerd), dan wordt deze optie niet ondersteund. U moet het opnieuw installeren door de \"Kloon & Installeer\" optie te kiezen."
+msgstr "Het bestandssysteem wordt niet ondersteund: %s\nIn het geval dat u een handmatig geïnstalleerde Tails wilt updaten (dat wilt zeggen dat het zonder deze installer is geïnstalleerd), dan wordt deze optie niet ondersteund. U moet het om te beginnen opnieuw installeren, bijvoorbeeld door de \"Kloon & Installeer\" optie te kiezen."
#: ../liveusb/creator.py:1216
#, python-format
@@ -518,15 +519,15 @@ msgstr "Gebruik bestaande Live system ISO"
#: ../liveusb/creator.py:133
msgid "Verifying ISO MD5 checksum"
-msgstr "Verifiëren ISO MD5 checksum"
+msgstr "ISO MD5 checksum verifiëren"
#: ../liveusb/creator.py:356
msgid "Verifying SHA1 checksum of LiveCD image..."
-msgstr "Verifiëren van SHA1 checksum van LiveCD image..."
+msgstr "SHA1 checksum van LiveCD image verifiëren..."
#: ../liveusb/creator.py:360
msgid "Verifying SHA256 checksum of LiveCD image..."
-msgstr "Verifiëren van SHA256 checksum van LiveCD image..."
+msgstr "SHA256 checksum van LiveCD image verifiëren..."
#: ../liveusb/creator.py:890 ../liveusb/creator.py:1209
msgid "Verifying filesystem..."
@@ -535,26 +536,26 @@ msgstr "Bestandssysteem verifiëren..."
#: ../liveusb/gui.py:728
msgid ""
"Warning: Creating a new persistent overlay will delete your existing one."
-msgstr "Waarschuwing: Het maken van persistente geheugenruimte zal jouw bestaande geheugenruimte verwijderen."
+msgstr "Waarschuwing: Het maken van een nieuwe persistente geheugenruimte zal jouw bestaande geheugenruimte verwijderen."
#: ../liveusb/gui.py:679
msgid ""
"Warning: The Master Boot Record on your device does not match your system's "
"syslinux MBR. If you have trouble booting this stick, try running the "
"liveusb-creator with the --reset-mbr option."
-msgstr "Waarschuwing: De Master Boot Record op dit apparaat komt niet overeen met de syslinux MBR van je systeem. Indien er moeilijkheden zijn bij het booten van deze stick, draai dan liveusb-creator met optie --reset-mbr "
+msgstr "Waarschuwing: De Master Boot Record op dit apparaat komt niet overeen met de syslinux MBR van je systeem. Indien je moeilijkheden hebt bij het booten van deze stick, voer dan liveusb-creator uit met de optie --reset-mbr."
#: ../liveusb/gui.py:392
msgid ""
"Warning: This tool needs to be run as an Administrator. To do this, right "
"click on the icon and open the Properties. Under the Compatibility tab, "
"check the \"Run this program as an administrator\" box."
-msgstr "Waarschuwing: Deze tool moet als beheerder worden gestart. Om dat te doen, klik met rechter muisknop op het icoon en open Eigenschappen. onder de Compatibiliteit tab, check de \"Start dit programma als beheerder\" box."
+msgstr "Waarschuwing: Deze tool moet als beheerder worden uitgevoerd. Om dat te doen, klik met rechter muisknop op het icoon en open Eigenschappen. Onder de Compatibiliteit tab, check het \"Start dit programma als beheerder\" selectievakje."
#: ../liveusb/creator.py:152
#, python-format
msgid "Wrote to device at %(speed)d MB/sec"
-msgstr "Schreef naar apparaat met %(speed)d MB/sec"
+msgstr "Schreef naar apparaat met %(speed)d MB/sec"
#: ../liveusb/gui.py:701
#, python-format
@@ -575,7 +576,7 @@ msgstr ""
msgid ""
"You are using an old version of syslinux-extlinux that does not support the "
"ext4 filesystem"
-msgstr "Je gebruikt een oude versie van syslinux-extlinux die het ext4-bestandssysteem niet ondersteund"
+msgstr "Je gebruikt een oude versie van syslinux-extlinux die het ext4-bestandssysteem niet ondersteunt"
#: ../liveusb/gui.py:786
msgid "You can try again to resume your download"
1
0

[translation/https_everywhere_completed] Update translations for https_everywhere_completed
by translation@torproject.org 08 Dec '13
by translation@torproject.org 08 Dec '13
08 Dec '13
commit 2e96c05603880b195dd3c9e5b804cdb5aa2efa1a
Author: Translation commit bot <translation(a)torproject.org>
Date: Sun Dec 8 19:15:56 2013 +0000
Update translations for https_everywhere_completed
---
nl/https-everywhere.properties | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/nl/https-everywhere.properties b/nl/https-everywhere.properties
index e95c874..0d5e56b 100644
--- a/nl/https-everywhere.properties
+++ b/nl/https-everywhere.properties
@@ -2,6 +2,7 @@ https-everywhere.menu.globalEnable = HTTPS Everywhere inschakelen
https-everywhere.menu.globalDisable = HTTPS Everywhere uitschakelen
https-everywhere.menu.enableDisable = Regels in-/uitschakelen
https-everywhere.menu.noRules = (Geen regels voor deze pagina)
-https-everywhere.menu.unknownRules = (Regels voor deze pagina zijn onbekend)
-https-everywhere.toolbar.hint = HTTPS Everywhere is nu geactiveerd. Je kan dit aanpassen door op een site-by-site basis te clicken op het icoon naast de adres bar.
-https-everywhere.migration.notification0 = Om een cruciale oplossing te implementeren, reset deze update je HTTPS Everywhere regel voorkeuren naar de standaard waarden.
+https-everywhere.menu.unknownRules = (Regels voor deze pagina onbekend)
+https-everywhere.toolbar.hint = HTTPS Everywhere is nu actief. Je kunt dit aanpassen door op een site-by-site basis te klikken op het icoon in de adresbalk.
+https-everywhere.migration.notification0 = Om een cruciale oplossing te bewerkstelligen, reset deze update je HTTPS Everywhere regels voorkeuren naar de standaard waarden.
+https-everywhere.menu.ruleset-tests = Voer de HTTPS Everywhere Ruleset Tests uit
1
0

[translation/https_everywhere] Update translations for https_everywhere
by translation@torproject.org 08 Dec '13
by translation@torproject.org 08 Dec '13
08 Dec '13
commit 8c3ac6c3876ab39037e88f278271a0d01652c5e6
Author: Translation commit bot <translation(a)torproject.org>
Date: Sun Dec 8 19:15:52 2013 +0000
Update translations for https_everywhere
---
nl/https-everywhere.properties | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/nl/https-everywhere.properties b/nl/https-everywhere.properties
index cc05806..0d5e56b 100644
--- a/nl/https-everywhere.properties
+++ b/nl/https-everywhere.properties
@@ -2,7 +2,7 @@ https-everywhere.menu.globalEnable = HTTPS Everywhere inschakelen
https-everywhere.menu.globalDisable = HTTPS Everywhere uitschakelen
https-everywhere.menu.enableDisable = Regels in-/uitschakelen
https-everywhere.menu.noRules = (Geen regels voor deze pagina)
-https-everywhere.menu.unknownRules = (Regels voor deze pagina zijn onbekend)
-https-everywhere.toolbar.hint = HTTPS Everywhere is nu geactiveerd. Je kan dit aanpassen door op een site-by-site basis te clicken op het icoon naast de adres bar.
-https-everywhere.migration.notification0 = Om een cruciale oplossing te implementeren, reset deze update je HTTPS Everywhere regel voorkeuren naar de standaard waarden.
-# https-everywhere.menu.ruleset-tests = Run HTTPS Everywhere Ruleset Tests
+https-everywhere.menu.unknownRules = (Regels voor deze pagina onbekend)
+https-everywhere.toolbar.hint = HTTPS Everywhere is nu actief. Je kunt dit aanpassen door op een site-by-site basis te klikken op het icoon in de adresbalk.
+https-everywhere.migration.notification0 = Om een cruciale oplossing te bewerkstelligen, reset deze update je HTTPS Everywhere regels voorkeuren naar de standaard waarden.
+https-everywhere.menu.ruleset-tests = Voer de HTTPS Everywhere Ruleset Tests uit
1
0

[translation/tails-persistence-setup_completed] Update translations for tails-persistence-setup_completed
by translation@torproject.org 08 Dec '13
by translation@torproject.org 08 Dec '13
08 Dec '13
commit 041d578e3c1e66e3d0ba4b9d77c71d539eab035f
Author: Translation commit bot <translation(a)torproject.org>
Date: Sun Dec 8 18:46:02 2013 +0000
Update translations for tails-persistence-setup_completed
---
nl/nl.po | 119 ++++++++++++++++++++++++++++++++------------------------------
1 file changed, 61 insertions(+), 58 deletions(-)
diff --git a/nl/nl.po b/nl/nl.po
index 23dc5f2..f7883e7 100644
--- a/nl/nl.po
+++ b/nl/nl.po
@@ -3,16 +3,17 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# cialenhh <c1914502(a)drdrb.com>, 2013
# Samez <elbachirioussama(a)gmail.com>, 2013
# Richard E. van der Luit <nippur(a)fedoraproject.org>, 2012
# Shondoit Walker <shondoit(a)gmail.com>, 2013
msgid ""
msgstr ""
"Project-Id-Version: The Tor Project\n"
-"Report-Msgid-Bugs-To: https://trac.torproject.org/projects/tor\n"
-"POT-Creation-Date: 2013-09-29 14:53+0200\n"
-"PO-Revision-Date: 2013-10-11 13:00+0000\n"
-"Last-Translator: Samez <elbachirioussama(a)gmail.com>\n"
+"Report-Msgid-Bugs-To: Tails developers <tails(a)boum.org>\n"
+"POT-Creation-Date: 2013-11-15 11:30+0100\n"
+"PO-Revision-Date: 2013-12-08 18:44+0000\n"
+"Last-Translator: cialenhh <c1914502(a)drdrb.com>\n"
"Language-Team: Dutch (http://www.transifex.com/projects/p/torproject/language/nl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -26,7 +27,7 @@ msgstr "Persoonlijke Data"
#: ../lib/Tails/Persistence/Configuration/Presets.pm:50
msgid "Keep files stored in the `Persistent' directory"
-msgstr "Houd bestanden opgeslagen in de 'Duurzaam'-map"
+msgstr "Houd bestanden opgeslagen in de 'Persistent'-map"
#: ../lib/Tails/Persistence/Configuration/Presets.pm:58
msgid "GnuPG"
@@ -34,7 +35,7 @@ msgstr "GnuPG"
#: ../lib/Tails/Persistence/Configuration/Presets.pm:60
msgid "GnuPG keyrings and configuration"
-msgstr "GnuPG sleutelring en configuratie"
+msgstr "GnuPG sleutelringen en configuratie"
#: ../lib/Tails/Persistence/Configuration/Presets.pm:68
msgid "SSH Client"
@@ -58,7 +59,7 @@ msgstr "Claws Mail"
#: ../lib/Tails/Persistence/Configuration/Presets.pm:90
msgid "Claws Mail profiles and locally stored email"
-msgstr "Claws Mail-profielen en lokaal opgeslagen email"
+msgstr "Claws Mail-profielen en lokaal opgeslagen e-mail"
#: ../lib/Tails/Persistence/Configuration/Presets.pm:98
msgid "GNOME Keyring"
@@ -70,11 +71,11 @@ msgstr "Secrets opgeslagen GNOME sleutelring"
#: ../lib/Tails/Persistence/Configuration/Presets.pm:108
msgid "Network Connections"
-msgstr "Netwerkconnecties"
+msgstr "Netwerkverbindingen"
#: ../lib/Tails/Persistence/Configuration/Presets.pm:110
msgid "Configuration of network devices and connections"
-msgstr "Configuratie van netwerkapparaten en connecties"
+msgstr "Configuratie van netwerkapparaten en verbindingen"
#: ../lib/Tails/Persistence/Configuration/Presets.pm:118
msgid "Browser bookmarks"
@@ -90,7 +91,7 @@ msgstr "Printers"
#: ../lib/Tails/Persistence/Configuration/Presets.pm:130
msgid "Printers configuration"
-msgstr "Printer configuratie"
+msgstr "Printers configuratie"
#: ../lib/Tails/Persistence/Configuration/Presets.pm:138
msgid "APT Packages"
@@ -115,84 +116,78 @@ msgstr "Puntbestanden"
#: ../lib/Tails/Persistence/Configuration/Presets.pm:160
msgid ""
"Symlink into $HOME every file or directory found in the `dotfiles' directory"
-msgstr "Symlink naar $HOME elk bestand of map dat gevonden is in de `puntbestanden'-map"
+msgstr "Symlink elk bestand of map dat gevonden is in de `puntbestanden'-map naar $HOME"
-#: ../lib/Tails/Persistence/Setup.pm:257
-msgid ""
-"The device Tails is running from cannot be found. Maybe you used the `toram'"
-" option?"
-msgstr "Het apparaat waarvan Tails is opgestart kan niet worden gevonden. Misschien heb je de optie 'toram' gebruikt?"
-
-#: ../lib/Tails/Persistence/Setup.pm:276
+#: ../lib/Tails/Persistence/Setup.pm:226
msgid "Setup Tails persistent volume"
msgstr "Instellingen Tails persistent volume"
-#: ../lib/Tails/Persistence/Setup.pm:420
+#: ../lib/Tails/Persistence/Setup.pm:330
#, perl-format
msgid "Device %s already has a persistent volume."
msgstr "Apparaat %s heeft al een persistent volume."
-#: ../lib/Tails/Persistence/Setup.pm:428
+#: ../lib/Tails/Persistence/Setup.pm:338
#, perl-format
msgid "Device %s has not enough unallocated space."
-msgstr "Apparaat %s heeft niet genoeg ongealloceerde ruimte."
+msgstr "Apparaat %s heeft niet genoeg niet-toegewezen ruimte."
-#: ../lib/Tails/Persistence/Setup.pm:436 ../lib/Tails/Persistence/Setup.pm:450
+#: ../lib/Tails/Persistence/Setup.pm:346 ../lib/Tails/Persistence/Setup.pm:360
#, perl-format
msgid "Device %s has no persistent volume."
msgstr "Apparaat %s heeft geen persistent volume."
-#: ../lib/Tails/Persistence/Setup.pm:442
+#: ../lib/Tails/Persistence/Setup.pm:352
msgid ""
"Cannot delete the persistent volume while in use. You should restart Tails "
"without persistence."
msgstr "Kan geen persistent volume verwijderen wanneer dat in gebruik is. Je dient Tails op te starten zonder persistentie."
-#: ../lib/Tails/Persistence/Setup.pm:461
+#: ../lib/Tails/Persistence/Setup.pm:371
msgid "Persistence volume is not unlocked."
msgstr "Persistent volume is niet ontsloten."
-#: ../lib/Tails/Persistence/Setup.pm:466
+#: ../lib/Tails/Persistence/Setup.pm:376
msgid "Persistence volume is not mounted."
-msgstr "Persistent volume is niet aangekoppeld."
+msgstr "Persistent volume is niet gekoppeld."
-#: ../lib/Tails/Persistence/Setup.pm:471
+#: ../lib/Tails/Persistence/Setup.pm:381
msgid "Persistence volume is not readable. Permissions or ownership problems?"
msgstr "Persistent volume is niet leesbaar. Permissie- of eigendomsproblemen?"
-#: ../lib/Tails/Persistence/Setup.pm:476
+#: ../lib/Tails/Persistence/Setup.pm:386
msgid "Persistence volume is not writable. Maybe it was mounted read-only?"
msgstr "Persistent volume is niet schrijfbaar. Misschien is het read-only aangekoppeld?"
-#: ../lib/Tails/Persistence/Setup.pm:485
+#: ../lib/Tails/Persistence/Setup.pm:395
#, perl-format
-msgid "Tails is running from non-USB device %s."
-msgstr "Tails draait vanaf niet-USB apparaat %s."
+msgid "Tails is running from non-USB / non-SDIO device %s."
+msgstr "Tails wordt uitgevoerd vanaf het niet-USB / niet-SDIO apparaat %s."
-#: ../lib/Tails/Persistence/Setup.pm:491
+#: ../lib/Tails/Persistence/Setup.pm:401
#, perl-format
msgid "Device %s is optical."
msgstr "Apparaat %s is optisch."
-#: ../lib/Tails/Persistence/Setup.pm:498
+#: ../lib/Tails/Persistence/Setup.pm:408
#, perl-format
msgid "Device %s was not created using Tails USB installer."
msgstr "Apparaat %s is niet aangemaakt met behulp van de Tails USB installer."
-#: ../lib/Tails/Persistence/Setup.pm:532
+#: ../lib/Tails/Persistence/Setup.pm:443
msgid "Error"
msgstr "Fout"
-#: ../lib/Tails/Persistence/Setup.pm:839
+#: ../lib/Tails/Persistence/Setup.pm:658
msgid "Persistence wizard - Finished"
msgstr "Persistentie assistent - Klaar"
-#: ../lib/Tails/Persistence/Setup.pm:842
+#: ../lib/Tails/Persistence/Setup.pm:661
msgid ""
"Any changes you have made will only take effect after restarting Tails.\n"
"\n"
"You may now close this application."
-msgstr "Veranderingen die je hebt gemaakt worden pas effectief na het herstarten van Tails.\n\nJe kan het programma nu afsluiten."
+msgstr "Veranderingen die je hebt gemaakt worden pas effectief na het herstarten van Tails.\n\nJe kunt het programma nu afsluiten."
#: ../lib/Tails/Persistence/Step/Bootstrap.pm:54
msgid "Persistence wizard - Persistent volume creation"
@@ -200,7 +195,7 @@ msgstr "Persistentie assistent - Persistent volume aanmaken"
#: ../lib/Tails/Persistence/Step/Bootstrap.pm:57
msgid "Choose a passphrase to protect the persistent volume"
-msgstr "Kies een wachtzin om het persistente volume te beschermen"
+msgstr "Kies een wachtwoord om het persistente volume te beschermen"
#. TRANSLATORS: size, device vendor, device model
#: ../lib/Tails/Persistence/Step/Bootstrap.pm:61
@@ -208,7 +203,7 @@ msgstr "Kies een wachtzin om het persistente volume te beschermen"
msgid ""
"A %s persistent volume will be created on the <b>%s %s</b> device. Data on "
"this volume will be stored in an encrypted form protected by a passphrase."
-msgstr "Een %s persistent volume zal worden aangemaakt op het <b>%s %s</b> apparaat. Data op dit apparaat zal versleuteld worden opgeslagen en beschermd met een passphrase."
+msgstr "Een %s persistent volume zal worden aangemaakt op het <b>%s %s</b> apparaat. Data op dit apparaat zal versleuteld worden opgeslagen in een gecodeerde vorm, beschermd met een wachtwoord."
#: ../lib/Tails/Persistence/Step/Bootstrap.pm:66
msgid "Create"
@@ -220,73 +215,81 @@ msgid ""
"understood. Tails can't help you if you use it wrong! See <a "
"href='file:///usr/share/doc/tails/website/doc/first_steps/persistence.en.html'>Tails"
" documentation about persistence</a> to learn more."
-msgstr "<b>Opgepast!</b> Persistentie gebruiken heeft consequenties die goed moeten worden begrepen. Tails kan je niet helpen als je het verkeerd toepast! Zie <a href='file:///usr/share/doc/tails/website/doc/first_steps/persistence.en.html'>Tails documentatie over persistentie</a> om er meer over te weten te komen."
+msgstr "<b>Pas op!</b> Persistentie gebruiken heeft consequenties die goed moeten worden begrepen. Tails kan je niet helpen als je het verkeerd toepast! Zie <a href='file:///usr/share/doc/tails/website/doc/first_steps/persistence.en.html'>Tails documentatie over persistentie</a> om er meer over te weten te komen."
#: ../lib/Tails/Persistence/Step/Bootstrap.pm:144
msgid "Passphrase:"
-msgstr "Wachtzin:"
+msgstr "Wachtwoord:"
#: ../lib/Tails/Persistence/Step/Bootstrap.pm:154
msgid "Verify Passphrase:"
-msgstr "Verifieer wachtzin:"
+msgstr "Verifieer wachtwoord:"
#: ../lib/Tails/Persistence/Step/Bootstrap.pm:167
#: ../lib/Tails/Persistence/Step/Bootstrap.pm:231
msgid "Passphrase can't be empty"
-msgstr "Wachtzin kan niet leeg zijn"
+msgstr "Wachtwoord kan niet leeg zijn"
#: ../lib/Tails/Persistence/Step/Bootstrap.pm:222
msgid "Passphrases do not match"
-msgstr "Wachtzinnen komen niet overeen"
+msgstr "Wachtwoorden komen niet overeen"
#: ../lib/Tails/Persistence/Step/Bootstrap.pm:262
-#: ../lib/Tails/Persistence/Step/Configure.pm:123
+#: ../lib/Tails/Persistence/Step/Configure.pm:129
msgid "Failed"
msgstr "Mislukt"
#: ../lib/Tails/Persistence/Step/Bootstrap.pm:271
msgid "Mounting Tails persistence partition."
-msgstr "Aankoppelen Tails persistente partitie."
+msgstr "Aankoppelen van Tails persistente afscheiding."
#: ../lib/Tails/Persistence/Step/Bootstrap.pm:274
msgid "The Tails persistence partition will be mounted."
-msgstr "De persistente partitie van Tails zal worden aangekoppeld."
+msgstr "De persistente afscheiding van Tails zal worden aangekoppeld."
+
+#: ../lib/Tails/Persistence/Step/Bootstrap.pm:283
+msgid "Correcting permissions of the persistent volume."
+msgstr "Machtigingen van het persistent volume aan het verbeteren."
-#: ../lib/Tails/Persistence/Step/Bootstrap.pm:296
+#: ../lib/Tails/Persistence/Step/Bootstrap.pm:286
+msgid "The permissions of the persistent volume will be corrected."
+msgstr "De machtigingen van het persistent volume zullen verbeterd worden."
+
+#: ../lib/Tails/Persistence/Step/Bootstrap.pm:308
msgid "Creating..."
msgstr "Aanmaken..."
-#: ../lib/Tails/Persistence/Step/Bootstrap.pm:299
+#: ../lib/Tails/Persistence/Step/Bootstrap.pm:311
msgid "Creating the persistent volume..."
msgstr "Aanmaken van het persistente volume..."
-#: ../lib/Tails/Persistence/Step/Configure.pm:55
+#: ../lib/Tails/Persistence/Step/Configure.pm:61
msgid "Persistence wizard - Persistent volume configuration"
msgstr "Persistentie-assistent - Persistent volume configuratie"
-#: ../lib/Tails/Persistence/Step/Configure.pm:58
+#: ../lib/Tails/Persistence/Step/Configure.pm:64
msgid "Specify the files that will be saved in the persistent volume"
msgstr "Specificeer de bestanden die in het persistente volume worden opgeslagen"
#. TRANSLATORS: partition, size, device vendor, device model
-#: ../lib/Tails/Persistence/Step/Configure.pm:62
+#: ../lib/Tails/Persistence/Step/Configure.pm:68
#, perl-format
msgid ""
"The selected files will be stored in the encrypted partition %s (%s), on the"
" <b>%s %s</b> device."
msgstr "De geselecteerde bestanden zullen worden opgeslagen op de versleutelde partitie %s (%s), op apparaat <b>%s %s</b>."
-#: ../lib/Tails/Persistence/Step/Configure.pm:68
+#: ../lib/Tails/Persistence/Step/Configure.pm:74
msgid "Save"
msgstr "Opslaan"
-#: ../lib/Tails/Persistence/Step/Configure.pm:137
+#: ../lib/Tails/Persistence/Step/Configure.pm:143
msgid "Saving..."
msgstr "Opslaan..."
-#: ../lib/Tails/Persistence/Step/Configure.pm:140
+#: ../lib/Tails/Persistence/Step/Configure.pm:146
msgid "Saving persistence configuration..."
-msgstr "Opslaan configuratie persistentie..."
+msgstr "Opslaan van configuratie persistentie..."
#: ../lib/Tails/Persistence/Step/Delete.pm:40
msgid "Persistence wizard - Persistent volume deletion"
@@ -306,10 +309,10 @@ msgstr "Het persistent volume %s (%s), op apparaat <b>%s %s</b>, zal worden verw
msgid "Delete"
msgstr "Verwijderen"
-#: ../lib/Tails/Persistence/Step/Delete.pm:91
+#: ../lib/Tails/Persistence/Step/Delete.pm:100
msgid "Deleting..."
msgstr "Verwijderen..."
-#: ../lib/Tails/Persistence/Step/Delete.pm:94
+#: ../lib/Tails/Persistence/Step/Delete.pm:103
msgid "Deleting the persistent volume..."
msgstr "Verwijderen van persistent volume..."
1
0

[translation/tails-persistence-setup] Update translations for tails-persistence-setup
by translation@torproject.org 08 Dec '13
by translation@torproject.org 08 Dec '13
08 Dec '13
commit c12014b8e00926d0bef9a81564293c41853a0119
Author: Translation commit bot <translation(a)torproject.org>
Date: Sun Dec 8 18:45:57 2013 +0000
Update translations for tails-persistence-setup
---
nl/nl.po | 87 +++++++++++++++++++++++++++++++-------------------------------
1 file changed, 44 insertions(+), 43 deletions(-)
diff --git a/nl/nl.po b/nl/nl.po
index 10624db..f7883e7 100644
--- a/nl/nl.po
+++ b/nl/nl.po
@@ -3,6 +3,7 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# cialenhh <c1914502(a)drdrb.com>, 2013
# Samez <elbachirioussama(a)gmail.com>, 2013
# Richard E. van der Luit <nippur(a)fedoraproject.org>, 2012
# Shondoit Walker <shondoit(a)gmail.com>, 2013
@@ -10,9 +11,9 @@ msgid ""
msgstr ""
"Project-Id-Version: The Tor Project\n"
"Report-Msgid-Bugs-To: Tails developers <tails(a)boum.org>\n"
-"POT-Creation-Date: 2013-11-07 16:37+0100\n"
-"PO-Revision-Date: 2013-11-15 09:19+0000\n"
-"Last-Translator: runasand <runa.sandvik(a)gmail.com>\n"
+"POT-Creation-Date: 2013-11-15 11:30+0100\n"
+"PO-Revision-Date: 2013-12-08 18:44+0000\n"
+"Last-Translator: cialenhh <c1914502(a)drdrb.com>\n"
"Language-Team: Dutch (http://www.transifex.com/projects/p/torproject/language/nl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -26,7 +27,7 @@ msgstr "Persoonlijke Data"
#: ../lib/Tails/Persistence/Configuration/Presets.pm:50
msgid "Keep files stored in the `Persistent' directory"
-msgstr "Houd bestanden opgeslagen in de 'Duurzaam'-map"
+msgstr "Houd bestanden opgeslagen in de 'Persistent'-map"
#: ../lib/Tails/Persistence/Configuration/Presets.pm:58
msgid "GnuPG"
@@ -34,7 +35,7 @@ msgstr "GnuPG"
#: ../lib/Tails/Persistence/Configuration/Presets.pm:60
msgid "GnuPG keyrings and configuration"
-msgstr "GnuPG sleutelring en configuratie"
+msgstr "GnuPG sleutelringen en configuratie"
#: ../lib/Tails/Persistence/Configuration/Presets.pm:68
msgid "SSH Client"
@@ -58,7 +59,7 @@ msgstr "Claws Mail"
#: ../lib/Tails/Persistence/Configuration/Presets.pm:90
msgid "Claws Mail profiles and locally stored email"
-msgstr "Claws Mail-profielen en lokaal opgeslagen email"
+msgstr "Claws Mail-profielen en lokaal opgeslagen e-mail"
#: ../lib/Tails/Persistence/Configuration/Presets.pm:98
msgid "GNOME Keyring"
@@ -70,11 +71,11 @@ msgstr "Secrets opgeslagen GNOME sleutelring"
#: ../lib/Tails/Persistence/Configuration/Presets.pm:108
msgid "Network Connections"
-msgstr "Netwerkconnecties"
+msgstr "Netwerkverbindingen"
#: ../lib/Tails/Persistence/Configuration/Presets.pm:110
msgid "Configuration of network devices and connections"
-msgstr "Configuratie van netwerkapparaten en connecties"
+msgstr "Configuratie van netwerkapparaten en verbindingen"
#: ../lib/Tails/Persistence/Configuration/Presets.pm:118
msgid "Browser bookmarks"
@@ -90,7 +91,7 @@ msgstr "Printers"
#: ../lib/Tails/Persistence/Configuration/Presets.pm:130
msgid "Printers configuration"
-msgstr "Printer configuratie"
+msgstr "Printers configuratie"
#: ../lib/Tails/Persistence/Configuration/Presets.pm:138
msgid "APT Packages"
@@ -115,78 +116,78 @@ msgstr "Puntbestanden"
#: ../lib/Tails/Persistence/Configuration/Presets.pm:160
msgid ""
"Symlink into $HOME every file or directory found in the `dotfiles' directory"
-msgstr "Symlink naar $HOME elk bestand of map dat gevonden is in de `puntbestanden'-map"
+msgstr "Symlink elk bestand of map dat gevonden is in de `puntbestanden'-map naar $HOME"
-#: ../lib/Tails/Persistence/Setup.pm:227
+#: ../lib/Tails/Persistence/Setup.pm:226
msgid "Setup Tails persistent volume"
msgstr "Instellingen Tails persistent volume"
-#: ../lib/Tails/Persistence/Setup.pm:331
+#: ../lib/Tails/Persistence/Setup.pm:330
#, perl-format
msgid "Device %s already has a persistent volume."
msgstr "Apparaat %s heeft al een persistent volume."
-#: ../lib/Tails/Persistence/Setup.pm:339
+#: ../lib/Tails/Persistence/Setup.pm:338
#, perl-format
msgid "Device %s has not enough unallocated space."
-msgstr "Apparaat %s heeft niet genoeg ongealloceerde ruimte."
+msgstr "Apparaat %s heeft niet genoeg niet-toegewezen ruimte."
-#: ../lib/Tails/Persistence/Setup.pm:347 ../lib/Tails/Persistence/Setup.pm:361
+#: ../lib/Tails/Persistence/Setup.pm:346 ../lib/Tails/Persistence/Setup.pm:360
#, perl-format
msgid "Device %s has no persistent volume."
msgstr "Apparaat %s heeft geen persistent volume."
-#: ../lib/Tails/Persistence/Setup.pm:353
+#: ../lib/Tails/Persistence/Setup.pm:352
msgid ""
"Cannot delete the persistent volume while in use. You should restart Tails "
"without persistence."
msgstr "Kan geen persistent volume verwijderen wanneer dat in gebruik is. Je dient Tails op te starten zonder persistentie."
-#: ../lib/Tails/Persistence/Setup.pm:372
+#: ../lib/Tails/Persistence/Setup.pm:371
msgid "Persistence volume is not unlocked."
msgstr "Persistent volume is niet ontsloten."
-#: ../lib/Tails/Persistence/Setup.pm:377
+#: ../lib/Tails/Persistence/Setup.pm:376
msgid "Persistence volume is not mounted."
-msgstr "Persistent volume is niet aangekoppeld."
+msgstr "Persistent volume is niet gekoppeld."
-#: ../lib/Tails/Persistence/Setup.pm:382
+#: ../lib/Tails/Persistence/Setup.pm:381
msgid "Persistence volume is not readable. Permissions or ownership problems?"
msgstr "Persistent volume is niet leesbaar. Permissie- of eigendomsproblemen?"
-#: ../lib/Tails/Persistence/Setup.pm:387
+#: ../lib/Tails/Persistence/Setup.pm:386
msgid "Persistence volume is not writable. Maybe it was mounted read-only?"
msgstr "Persistent volume is niet schrijfbaar. Misschien is het read-only aangekoppeld?"
-#: ../lib/Tails/Persistence/Setup.pm:396
+#: ../lib/Tails/Persistence/Setup.pm:395
#, perl-format
msgid "Tails is running from non-USB / non-SDIO device %s."
-msgstr ""
+msgstr "Tails wordt uitgevoerd vanaf het niet-USB / niet-SDIO apparaat %s."
-#: ../lib/Tails/Persistence/Setup.pm:402
+#: ../lib/Tails/Persistence/Setup.pm:401
#, perl-format
msgid "Device %s is optical."
msgstr "Apparaat %s is optisch."
-#: ../lib/Tails/Persistence/Setup.pm:409
+#: ../lib/Tails/Persistence/Setup.pm:408
#, perl-format
msgid "Device %s was not created using Tails USB installer."
msgstr "Apparaat %s is niet aangemaakt met behulp van de Tails USB installer."
-#: ../lib/Tails/Persistence/Setup.pm:444
+#: ../lib/Tails/Persistence/Setup.pm:443
msgid "Error"
msgstr "Fout"
-#: ../lib/Tails/Persistence/Setup.pm:680
+#: ../lib/Tails/Persistence/Setup.pm:658
msgid "Persistence wizard - Finished"
msgstr "Persistentie assistent - Klaar"
-#: ../lib/Tails/Persistence/Setup.pm:683
+#: ../lib/Tails/Persistence/Setup.pm:661
msgid ""
"Any changes you have made will only take effect after restarting Tails.\n"
"\n"
"You may now close this application."
-msgstr "Veranderingen die je hebt gemaakt worden pas effectief na het herstarten van Tails.\n\nJe kan het programma nu afsluiten."
+msgstr "Veranderingen die je hebt gemaakt worden pas effectief na het herstarten van Tails.\n\nJe kunt het programma nu afsluiten."
#: ../lib/Tails/Persistence/Step/Bootstrap.pm:54
msgid "Persistence wizard - Persistent volume creation"
@@ -194,7 +195,7 @@ msgstr "Persistentie assistent - Persistent volume aanmaken"
#: ../lib/Tails/Persistence/Step/Bootstrap.pm:57
msgid "Choose a passphrase to protect the persistent volume"
-msgstr "Kies een wachtzin om het persistente volume te beschermen"
+msgstr "Kies een wachtwoord om het persistente volume te beschermen"
#. TRANSLATORS: size, device vendor, device model
#: ../lib/Tails/Persistence/Step/Bootstrap.pm:61
@@ -202,7 +203,7 @@ msgstr "Kies een wachtzin om het persistente volume te beschermen"
msgid ""
"A %s persistent volume will be created on the <b>%s %s</b> device. Data on "
"this volume will be stored in an encrypted form protected by a passphrase."
-msgstr "Een %s persistent volume zal worden aangemaakt op het <b>%s %s</b> apparaat. Data op dit apparaat zal versleuteld worden opgeslagen en beschermd met een passphrase."
+msgstr "Een %s persistent volume zal worden aangemaakt op het <b>%s %s</b> apparaat. Data op dit apparaat zal versleuteld worden opgeslagen in een gecodeerde vorm, beschermd met een wachtwoord."
#: ../lib/Tails/Persistence/Step/Bootstrap.pm:66
msgid "Create"
@@ -214,24 +215,24 @@ msgid ""
"understood. Tails can't help you if you use it wrong! See <a "
"href='file:///usr/share/doc/tails/website/doc/first_steps/persistence.en.html'>Tails"
" documentation about persistence</a> to learn more."
-msgstr "<b>Opgepast!</b> Persistentie gebruiken heeft consequenties die goed moeten worden begrepen. Tails kan je niet helpen als je het verkeerd toepast! Zie <a href='file:///usr/share/doc/tails/website/doc/first_steps/persistence.en.html'>Tails documentatie over persistentie</a> om er meer over te weten te komen."
+msgstr "<b>Pas op!</b> Persistentie gebruiken heeft consequenties die goed moeten worden begrepen. Tails kan je niet helpen als je het verkeerd toepast! Zie <a href='file:///usr/share/doc/tails/website/doc/first_steps/persistence.en.html'>Tails documentatie over persistentie</a> om er meer over te weten te komen."
#: ../lib/Tails/Persistence/Step/Bootstrap.pm:144
msgid "Passphrase:"
-msgstr "Wachtzin:"
+msgstr "Wachtwoord:"
#: ../lib/Tails/Persistence/Step/Bootstrap.pm:154
msgid "Verify Passphrase:"
-msgstr "Verifieer wachtzin:"
+msgstr "Verifieer wachtwoord:"
#: ../lib/Tails/Persistence/Step/Bootstrap.pm:167
#: ../lib/Tails/Persistence/Step/Bootstrap.pm:231
msgid "Passphrase can't be empty"
-msgstr "Wachtzin kan niet leeg zijn"
+msgstr "Wachtwoord kan niet leeg zijn"
#: ../lib/Tails/Persistence/Step/Bootstrap.pm:222
msgid "Passphrases do not match"
-msgstr "Wachtzinnen komen niet overeen"
+msgstr "Wachtwoorden komen niet overeen"
#: ../lib/Tails/Persistence/Step/Bootstrap.pm:262
#: ../lib/Tails/Persistence/Step/Configure.pm:129
@@ -240,19 +241,19 @@ msgstr "Mislukt"
#: ../lib/Tails/Persistence/Step/Bootstrap.pm:271
msgid "Mounting Tails persistence partition."
-msgstr "Aankoppelen Tails persistente partitie."
+msgstr "Aankoppelen van Tails persistente afscheiding."
#: ../lib/Tails/Persistence/Step/Bootstrap.pm:274
msgid "The Tails persistence partition will be mounted."
-msgstr "De persistente partitie van Tails zal worden aangekoppeld."
+msgstr "De persistente afscheiding van Tails zal worden aangekoppeld."
#: ../lib/Tails/Persistence/Step/Bootstrap.pm:283
msgid "Correcting permissions of the persistent volume."
-msgstr ""
+msgstr "Machtigingen van het persistent volume aan het verbeteren."
#: ../lib/Tails/Persistence/Step/Bootstrap.pm:286
msgid "The permissions of the persistent volume will be corrected."
-msgstr ""
+msgstr "De machtigingen van het persistent volume zullen verbeterd worden."
#: ../lib/Tails/Persistence/Step/Bootstrap.pm:308
msgid "Creating..."
@@ -288,7 +289,7 @@ msgstr "Opslaan..."
#: ../lib/Tails/Persistence/Step/Configure.pm:146
msgid "Saving persistence configuration..."
-msgstr "Opslaan configuratie persistentie..."
+msgstr "Opslaan van configuratie persistentie..."
#: ../lib/Tails/Persistence/Step/Delete.pm:40
msgid "Persistence wizard - Persistent volume deletion"
@@ -308,10 +309,10 @@ msgstr "Het persistent volume %s (%s), op apparaat <b>%s %s</b>, zal worden verw
msgid "Delete"
msgstr "Verwijderen"
-#: ../lib/Tails/Persistence/Step/Delete.pm:91
+#: ../lib/Tails/Persistence/Step/Delete.pm:100
msgid "Deleting..."
msgstr "Verwijderen..."
-#: ../lib/Tails/Persistence/Step/Delete.pm:94
+#: ../lib/Tails/Persistence/Step/Delete.pm:103
msgid "Deleting the persistent volume..."
msgstr "Verwijderen van persistent volume..."
1
0
commit c061c1b51cf8e662a9982fb5dd970fd8be6344b9
Author: Karsten Loesing <karsten.loesing(a)gmx.net>
Date: Sun Dec 8 17:55:32 2013 +0100
Update tools diagram and page.
Changes are:
- There is no separate task-2718 code for users.html anymore, but that
code has been included in the metrics-web repository.
- The previously missing bubbles.html is now contained in the diagram.
- ExoneraTor and DocTor have their own subdomains now. ExoneraTor has
its own Git repository now.
---
web/WEB-INF/tools.jsp | 14 +++++++-------
web/images/tor-metrics-overview.png | Bin 246279 -> 252686 bytes
2 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/web/WEB-INF/tools.jsp b/web/WEB-INF/tools.jsp
index a6ee0ff..dc56751 100644
--- a/web/WEB-INF/tools.jsp
+++ b/web/WEB-INF/tools.jsp
@@ -71,20 +71,20 @@
<h3><a href="#present" class="anchor">Presenting Tor network
data</a></h3>
<br>
- <p>There are currently three main websites and a few additional
- tools presenting Tor network data:
+ <p>There are a few websites and additional tools presenting Tor
+ network data:
<ul>
<li><a href="https://gitweb.torproject.org/metrics-web.git">metrics-web</a>
- is the software behind this website, including a database to
- aggregate most of the presented statistics.</li>
+ is the software behind this website, including aggregation code
+ for the presented statistics.</li>
<li><a href="https://gitweb.torproject.org/metrics-tasks.git/tree/HEAD:/task-6498">task-6498</a>
aggregates data to visualize fast exits in the Tor network.</li>
- <li><a href="https://gitweb.torproject.org/metrics-tasks.git/tree/HEAD:/task-2718">task-2718</a>
- takes the number of daily Tor users as input and attempts to
- find anomalies that might be indicative of censorship.</li>
<li><a href="https://gitweb.torproject.org/metrics-tasks.git/tree/HEAD:/task-8462">task-8462</a>
estimates daily users from reported directory request
statistics.</li>
+ <li><a href="https://gitweb.torproject.org/exonerator.git">ExoneraTor</a>
+ is a website that tells you whether a given IP address was a Tor
+ relay.</li>
<li><a href="https://gitweb.torproject.org/doctor.git">DocTor</a>
is a service that periodically checks the Tor network for
consensus conflicts and other hiccups.</li>
diff --git a/web/images/tor-metrics-overview.png b/web/images/tor-metrics-overview.png
index 8ffaca9..4a7c33a 100644
Binary files a/web/images/tor-metrics-overview.png and b/web/images/tor-metrics-overview.png differ
1
0

08 Dec '13
commit 9fb8d3ff54dcd461a579a39c3487ee5a4a542bf4
Author: Karsten Loesing <karsten.loesing(a)gmx.net>
Date: Thu Dec 5 08:50:19 2013 +0100
Remove more of the old user stats code.
---
db/tordir.sql | 9 -
etc/web.xml | 6 -
rserve/csv.R | 90 ---
rserve/graphs.R | 118 ----
rserve/tables.R | 87 ---
src/org/torproject/ernie/cron/Main.java | 23 -
.../ernie/cron/users/BridgeStatsFileHandler.java | 718 --------------------
.../ernie/web/graphs/RObjectGenerator.java | 12 -
8 files changed, 1063 deletions(-)
diff --git a/db/tordir.sql b/db/tordir.sql
index e62732d..6b31aee 100644
--- a/db/tordir.sql
+++ b/db/tordir.sql
@@ -904,15 +904,6 @@ CREATE TABLE dirreq_stats (
PRIMARY KEY (source, statsend, seconds, country)
);
--- TABLE bridge_stats
--- Contains daily bridge users by country.
-CREATE TABLE bridge_stats (
- "date" DATE NOT NULL,
- country CHARACTER(2) NOT NULL,
- users INTEGER NOT NULL,
- CONSTRAINT bridge_stats_pkey PRIMARY KEY ("date", country)
-);
-
-- TABLE torperf_stats
-- Quantiles and medians of daily torperf results.
CREATE TABLE torperf_stats (
diff --git a/etc/web.xml b/etc/web.xml
index 9b4f23a..3f49001 100644
--- a/etc/web.xml
+++ b/etc/web.xml
@@ -187,12 +187,6 @@
<url-pattern>/dirbytes.png</url-pattern>
<url-pattern>/dirbytes.pdf</url-pattern>
<url-pattern>/dirbytes.svg</url-pattern>
- <url-pattern>/direct-users.png</url-pattern>
- <url-pattern>/direct-users.pdf</url-pattern>
- <url-pattern>/direct-users.svg</url-pattern>
- <url-pattern>/bridge-users.png</url-pattern>
- <url-pattern>/bridge-users.pdf</url-pattern>
- <url-pattern>/bridge-users.svg</url-pattern>
<url-pattern>/torperf.png</url-pattern>
<url-pattern>/torperf.pdf</url-pattern>
<url-pattern>/torperf.svg</url-pattern>
diff --git a/rserve/csv.R b/rserve/csv.R
index e93b90f..8150b17 100644
--- a/rserve/csv.R
+++ b/rserve/csv.R
@@ -138,39 +138,6 @@ export_relayflags <- function(path) {
write.csv(relayflags, path, quote = FALSE, row.names = FALSE)
}
-export_direct_users <- function(path) {
- drv <- dbDriver("PostgreSQL")
- con <- dbConnect(drv, user = dbuser, password = dbpassword, dbname = db)
- q <- paste("SELECT date, country, r, bwp, brn, bwn, brp, bwr, brr",
- "FROM user_stats WHERE date < current_date - 3",
- "ORDER BY date, country")
- rs <- dbSendQuery(con, q)
- u <- fetch(rs, n = -1)
- dbDisconnect(con)
- dbUnloadDriver(drv)
- directusers <- data.frame(date = u$date, country = u$country,
- directusers = floor(u$r * (u$bwp * u$brn / u$bwn - u$brp) /
- (u$bwr * u$brn / u$bwn - u$brr) / 10))
- directusers <- cast(directusers, date ~ country, value = "directusers")
- names(directusers)[names(directusers) == "zy"] <- "all"
- write.csv(directusers, path, quote = FALSE, row.names = FALSE)
-}
-
-export_bridge_users <- function(path) {
- drv <- dbDriver("PostgreSQL")
- con <- dbConnect(drv, user = dbuser, password = dbpassword, dbname = db)
- q <- paste("SELECT date, country, users AS bridgeusers",
- "FROM bridge_stats WHERE date < current_date - 3",
- "ORDER BY date, country")
- rs <- dbSendQuery(con, q)
- bridgeusers <- fetch(rs, n = -1)
- dbDisconnect(con)
- dbUnloadDriver(drv)
- bridgeusers <- cast(bridgeusers, date ~ country, value = "bridgeusers")
- names(bridgeusers)[names(bridgeusers) == "zy"] <- "all"
- write.csv(bridgeusers, path, quote = FALSE, row.names = FALSE)
-}
-
export_torperf <- function(path) {
drv <- dbDriver("PostgreSQL")
con <- dbConnect(drv, user = dbuser, password = dbpassword, dbname = db)
@@ -196,43 +163,6 @@ export_torperf_failures <- function(path) {
write.csv(torperf, path, quote = FALSE, row.names = FALSE)
}
-help_export_monthly_users <- function(path, aggr_fun) {
- drv <- dbDriver("PostgreSQL")
- con <- dbConnect(drv, user = dbuser, password = dbpassword, dbname = db)
- q <- paste("SELECT date, country, r, bwp, brn, bwn, brp, bwr, brr",
- "FROM user_stats WHERE date < current_date - 3",
- "ORDER BY date, country")
- rs <- dbSendQuery(con, q)
- u <- fetch(rs, n = -1)
- direct <- data.frame(date = u$date, country = u$country,
- users = u$r * (u$bwp * u$brn / u$bwn - u$brp) /
- (u$bwr * u$brn / u$bwn - u$brr) / 10)
- q <- paste("SELECT date, country, FLOOR(users) AS users",
- "FROM bridge_stats WHERE date < current_date - 3",
- "ORDER BY date, country")
- rs <- dbSendQuery(con, q)
- bridge <- fetch(rs, n = -1)
- dbDisconnect(con)
- dbUnloadDriver(drv)
- users <- rbind(bridge, direct)
- users <- aggregate(users$users,
- by = list(date = users$date, country = users$country), sum)
- users <- aggregate(users$x, by = list(month = substr(users$date, 1, 7),
- country = users$country), aggr_fun)
- users <- cast(users, country ~ month, value = "x")
- users[users$country == "zy", 1] <- "all"
- users[, 2:length(users)] <- floor(users[, 2:length(users)])
- write.csv(users, path, quote = FALSE, row.names = FALSE)
-}
-
-export_monthly_users_peak <- function(path) {
- help_export_monthly_users(path, max)
-}
-
-export_monthly_users_average <- function(path) {
- help_export_monthly_users(path, mean)
-}
-
export_connbidirect <- function(path) {
drv <- dbDriver("PostgreSQL")
con <- dbConnect(drv, user = dbuser, password = dbpassword, dbname = db)
@@ -248,26 +178,6 @@ export_connbidirect <- function(path) {
quote = FALSE, row.names = FALSE)
}
-export_dirreq_stats <- function(path) {
- drv <- dbDriver("PostgreSQL")
- con <- dbConnect(drv, user = dbuser, password = dbpassword, dbname = db)
- q <- paste("SELECT date, r, bwp, brp, bwn, brn, bwr, brr ",
- "FROM user_stats WHERE date < current_date - 3",
- "AND country = 'zy' ORDER BY date", sep = "")
- rs <- dbSendQuery(con, q)
- u <- fetch(rs, n = -1)
- dbDisconnect(con)
- dbUnloadDriver(drv)
- u <- data.frame(date = u$date,
- requests = u$r,
- fraction = (u$bwr * u$brn / u$bwn - u$brr) /
- (u$bwp * u$brn / u$bwn - u$brp),
- users = u$r * (u$bwp * u$brn / u$bwn - u$brp) /
- (u$bwr * u$brn / u$bwn - u$brr) / 10)
- write.csv(format(u, trim = TRUE, scientific = FALSE), path,
- quote = FALSE, row.names = FALSE)
-}
-
export_bandwidth_flags <- function(path) {
drv <- dbDriver("PostgreSQL")
con <- dbConnect(drv, user = dbuser, password = dbpassword, dbname = db)
diff --git a/rserve/graphs.R b/rserve/graphs.R
index 86eda59..8157d89 100644
--- a/rserve/graphs.R
+++ b/rserve/graphs.R
@@ -636,124 +636,6 @@ plot_relayflags <- function(start, end, flags, path) {
ggsave(filename = path, width = 8, height = 5, dpi = 72)
}
-plot_direct_users <- function(start, end, country, events, path) {
- end <- min(end, as.character(Sys.Date() - 4))
- drv <- dbDriver("PostgreSQL")
- con <- dbConnect(drv, user = dbuser, password = dbpassword, dbname = db)
- q <- paste("SELECT date, r, bwp, brn, bwn, brp, bwr, brr, country ",
- "FROM user_stats WHERE date >= '", start, "' AND date <= '", end,
- "' AND (country = 'zy'", ifelse(country == "all", "",
- paste(" OR country = '", country, "'", sep = "")), ")", sep = "")
- rs <- dbSendQuery(con, q)
- u <- fetch(rs, n = -1)
- dbDisconnect(con)
- dbUnloadDriver(drv)
- a <- u[u$country == "zy", ]
- if (country != "all")
- u <- u[u$country == country, ]
- u <- data.frame(date = u$date,
- users = u$r * (u$bwp * u$brn / u$bwn - u$brp) /
- (u$bwr * u$brn / u$bwn - u$brr) / 10)
- dates <- seq(from = as.Date(start, "%Y-%m-%d"),
- to = as.Date(end, "%Y-%m-%d"), by="1 day")
- missing <- setdiff(dates, a$date)
- if (length(missing) > 0)
- u <- rbind(u,
- data.frame(date = as.Date(missing, origin = "1970-01-01"),
- users = NA))
- missing <- setdiff(dates, u$date)
- if (length(missing) > 0)
- u <- rbind(u,
- data.frame(date = as.Date(missing, origin = "1970-01-01"),
- users = 0))
- title <- ifelse(country == "all",
- "Directly connecting users from all countries\n",
- paste("Directly connecting users from ", countryname(country), "\n",
- sep = ""))
- formatter <- function(x, ...) { format(x, scientific = FALSE, ...) }
- date_breaks <- date_breaks(
- as.numeric(max(as.Date(u$date, "%Y-%m-%d")) -
- min(as.Date(u$date, "%Y-%m-%d"))))
- max_y <- ifelse(length(na.omit(u$users)) == 0, 0,
- max(u$users, na.rm = TRUE))
- plot <- ggplot(u, aes(x = as.Date(date, "%Y-%m-%d"), y = users))
- if (length(na.omit(u$users)) > 0 & events != "off" & country != "all") {
- r <- read.csv(
- "/srv/metrics.torproject.org/web/detector/direct-users-ranges.csv",
- stringsAsFactors = FALSE)
- r <- r[r$date >= start & r$date <= end & r$country == country,
- c("date", "minusers", "maxusers")]
- r <- cast(rbind(melt(u, id.vars = "date"), melt(r, id.vars = "date")))
- upturns <- r[r$users > r$maxusers, 1:2]
- downturns <- r[r$users < r$minusers, 1:2]
- if (events == "on") {
- if (length(r$maxusers) > 0)
- max_y <- max(max_y, max(r$maxusers, na.rm = TRUE))
- r[r$minusers < 0, "minusers"] <- 0
- plot <- plot +
- geom_ribbon(data = r, aes(ymin = minusers,
- ymax = maxusers), fill = "gray")
- }
- if (length(upturns$date) > 0)
- plot <- plot +
- geom_point(data = upturns, aes(x = date, y = users), size = 5,
- colour = "dodgerblue2")
- if (length(downturns$date) > 0)
- plot <- plot +
- geom_point(data = downturns, aes(x = date, y = users), size = 5,
- colour = "firebrick2")
- }
- plot <- plot +
- geom_line(size = 1) +
- scale_x_date(name = paste("\nThe Tor Project - ",
- "https://metrics.torproject.org/", sep = ""),
- format = date_breaks$format, major = date_breaks$major,
- minor = date_breaks$minor) +
- scale_y_continuous(name = "", limits = c(0, max_y),
- formatter = formatter) + opts(title = title)
- print(plot)
- ggsave(filename = path, width = 8, height = 5, dpi = 72)
-}
-
-plot_bridge_users <- function(start, end, country, path) {
- end <- min(end, as.character(Sys.Date() - 4))
- drv <- dbDriver("PostgreSQL")
- con <- dbConnect(drv, user = dbuser, password = dbpassword, dbname = db)
- q <- paste("SELECT date, users FROM bridge_stats ",
- "WHERE date >= '", start, "' AND date <= '", end, "' ",
- "AND country = '", ifelse(country == "all", "zy", country), "'",
- sep = "")
- rs <- dbSendQuery(con, q)
- bridgeusers <- fetch(rs, n = -1)
- dbDisconnect(con)
- dbUnloadDriver(drv)
- dates <- seq(from = as.Date(start, "%Y-%m-%d"),
- to = as.Date(end, "%Y-%m-%d"), by="1 day")
- missing <- setdiff(dates, bridgeusers$date)
- if (length(missing) > 0)
- bridgeusers <- rbind(bridgeusers,
- data.frame(date = as.Date(missing, origin = "1970-01-01"),
- users = NA))
- title <- ifelse(country == "all",
- "Bridge users from all countries\n",
- paste("Bridge users from ", countryname(country), "\n", sep = ""))
- formatter <- function(x, ...) { format(x, scientific = FALSE, ...) }
- date_breaks <- date_breaks(
- as.numeric(max(as.Date(bridgeusers$date, "%Y-%m-%d")) -
- min(as.Date(bridgeusers$date, "%Y-%m-%d"))))
- ggplot(bridgeusers, aes(x = as.Date(date, "%Y-%m-%d"), y = users)) +
- geom_line(size = 1) +
- scale_x_date(name = paste("\nThe Tor Project - ",
- "https://metrics.torproject.org/", sep = ""),
- format = date_breaks$format, major = date_breaks$major,
- minor = date_breaks$minor) +
- scale_y_continuous(name = "", limits = c(0,
- ifelse(length(na.omit(bridgeusers$users)) == 0, 0,
- max(bridgeusers$users, na.rm = TRUE))), formatter = formatter) +
- opts(title = title)
- ggsave(filename = path, width = 8, height = 5, dpi = 72)
-}
-
plot_torperf <- function(start, end, source, filesize, path) {
end <- min(end, as.character(Sys.Date() - 2))
drv <- dbDriver("PostgreSQL")
diff --git a/rserve/tables.R b/rserve/tables.R
index 59593d6..24de947 100644
--- a/rserve/tables.R
+++ b/rserve/tables.R
@@ -2,93 +2,6 @@ countrynames <- function(countries) {
sapply(countries, countryname)
}
-write_direct_users <- function(start, end, path) {
- drv <- dbDriver("PostgreSQL")
- con <- dbConnect(drv, user = dbuser, password = dbpassword, dbname = db)
- q <- paste("SELECT date, country, r, bwp, brn, bwn, brp, bwr, brr ",
- "FROM user_stats WHERE date >= '", start, "' AND date <= '", end,
- "' AND date < current_date - 3 ORDER BY date, country", sep = "")
- rs <- dbSendQuery(con, q)
- u <- fetch(rs, n = -1)
- dbDisconnect(con)
- dbUnloadDriver(drv)
- d <- data.frame(date = u$date, country = u$country,
- directusers = floor(u$r * (u$bwp * u$brn / u$bwn - u$brp) /
- (u$bwr * u$brn / u$bwn - u$brr) / 10))
- d <- aggregate(d$directusers, by = list(country = d$country), mean)
- total <- d[d$country == "zy", "x"]
- d <- d[!(d$country %in% c("zy", "??", "a1", "a2", "o1", "ap", "eu")), ]
- d <- data.frame(country = d$country, directusers = d$x)
- d <- d[order(d$directusers, decreasing = TRUE), ]
- d <- d[1:10, ]
- d <- data.frame(
- cc = as.character(d$country),
- country = sub('the ', '', countrynames(as.character(d$country))),
- abs = round(d$directusers),
- rel = round(100 * d$directusers / total, 2))
- write.csv(d, path, quote = FALSE, row.names = FALSE)
-}
-
-write_censorship_events <- function(start, end, path) {
- drv <- dbDriver("PostgreSQL")
- con <- dbConnect(drv, user = dbuser, password = dbpassword, dbname = db)
- q <- paste("SELECT date, country, r, bwp, brn, bwn, brp, bwr, brr ",
- "FROM user_stats WHERE date >= '", start, "' AND date <= '", end,
- "' AND date < current_date - 3", sep = "")
- rs <- dbSendQuery(con, q)
- u <- fetch(rs, n = -1)
- dbDisconnect(con)
- dbUnloadDriver(drv)
- u <- data.frame(date = u$date, country = u$country,
- users = u$r * (u$bwp * u$brn / u$bwn - u$brp) /
- (u$bwr * u$brn / u$bwn - u$brr) / 10)
- r <- read.csv(
- "/srv/metrics.torproject.org/web/detector/direct-users-ranges.csv",
- stringsAsFactors = FALSE)
- r <- r[r$date >= start & r$date <= end,
- c("date", "country", "minusers", "maxusers")]
- r <- cast(rbind(melt(u, id.vars = c("date", "country")),
- melt(r, id.vars = c("date", "country"))))
- r <- na.omit(r[r$users < r$minusers | r$users > r$maxusers, ])
- r <- data.frame(date = r$date, country = r$country,
- upturn = ifelse(r$users > r$maxusers, 1, 0),
- downturn = ifelse(r$users < r$minusers, 1, 0))
- r <- aggregate(r[, c("upturn", "downturn")],
- by = list(country = r$country), sum)
- r <- r[!(r$country %in% c("zy", "??", "a1", "a2", "o1", "ap", "eu")), ]
- r <- r[order(r$downturn, r$upturn, decreasing = TRUE), ]
- r <- r[1:10, ]
- r <- data.frame(cc = r$country,
- country = sub('the ', '', countrynames(as.character(r$country))),
- downturns = r$downturn,
- upturns = r$upturn)
- write.csv(r, path, quote = FALSE, row.names = FALSE)
-}
-
-write_bridge_users <- function(start, end, path) {
- drv <- dbDriver("PostgreSQL")
- con <- dbConnect(drv, user = dbuser, password = dbpassword, dbname = db)
- q <- paste("SELECT date, country, users AS bridgeusers ",
- "FROM bridge_stats WHERE date >= '", start, "' AND date <= '", end,
- "' AND date < current_date - 3 ORDER BY date, country", sep = "")
- rs <- dbSendQuery(con, q)
- d <- fetch(rs, n = -1)
- dbDisconnect(con)
- dbUnloadDriver(drv)
- d <- aggregate(d$bridgeusers, by = list(country = d$country), mean)
- total <- d[d$country == "zy", "x"]
- d <- d[!(d$country %in% c("zy", "??", "a1", "a2", "o1", "ap", "eu")), ]
- d <- data.frame(country = d$country, bridgeusers = d$x)
- d <- d[order(d$bridgeusers, decreasing = TRUE), ]
- d <- d[1:10, ]
- d <- data.frame(
- cc = as.character(d$country),
- country = sub('the ', '', countrynames(as.character(d$country))),
- abs = round(d$bridgeusers),
- rel = round(100 * d$bridgeusers / total, 2))
- write.csv(d, path, quote = FALSE, row.names = FALSE)
-}
-
write_userstats <- function(start, end, node, path) {
end <- min(end, as.character(Sys.Date()))
u <- read.csv(paste("/srv/metrics.torproject.org/task-8462-graphs/",
diff --git a/src/org/torproject/ernie/cron/Main.java b/src/org/torproject/ernie/cron/Main.java
index c0eb435..5d561a6 100644
--- a/src/org/torproject/ernie/cron/Main.java
+++ b/src/org/torproject/ernie/cron/Main.java
@@ -8,7 +8,6 @@ import java.util.logging.Logger;
import org.torproject.ernie.cron.network.ConsensusStatsFileHandler;
import org.torproject.ernie.cron.performance.PerformanceStatsImporter;
import org.torproject.ernie.cron.performance.TorperfProcessor;
-import org.torproject.ernie.cron.users.BridgeStatsFileHandler;
/**
* Coordinate downloading and parsing of descriptors and extraction of
@@ -37,16 +36,6 @@ public class Main {
// Define stats directory for temporary files
File statsDirectory = new File("stats");
- // Prepare bridge stats file handler
- BridgeStatsFileHandler bsfh = config.getWriteBridgeStats() ?
- new BridgeStatsFileHandler(
- config.getRelayDescriptorDatabaseJDBC(),
- new File(config.getSanitizedBridgesDirectory()),
- statsDirectory, config.getKeepSanitizedBridgesImportHistory(),
- new File(config.getDirectoryArchivesDirectory()),
- config.getKeepDirectoryArchiveImportHistory()) :
- null;
-
// Import relay descriptors
if (config.getImportDirectoryArchives()) {
RelayDescriptorDatabaseImporter rddi =
@@ -63,9 +52,6 @@ public class Main {
if (rddi != null) {
rddi.importRelayDescriptors();
}
- if (bsfh != null) {
- bsfh.importRelayDescriptors();
- }
rddi.closeConnection();
// Import conn-bi-direct statistics.
@@ -81,15 +67,6 @@ public class Main {
psi.closeConnection();
}
- // Import sanitized bridges and write updated stats files to disk
- if (bsfh != null) {
- if (config.getImportSanitizedBridges()) {
- bsfh.importSanitizedBridges();
- }
- bsfh.writeFiles();
- bsfh = null;
- }
-
// Prepare consensus stats file handler (used for stats on running
// bridges only)
ConsensusStatsFileHandler csfh = config.getWriteBridgeStats() ?
diff --git a/src/org/torproject/ernie/cron/users/BridgeStatsFileHandler.java b/src/org/torproject/ernie/cron/users/BridgeStatsFileHandler.java
deleted file mode 100644
index 14795e1..0000000
--- a/src/org/torproject/ernie/cron/users/BridgeStatsFileHandler.java
+++ /dev/null
@@ -1,718 +0,0 @@
-/* Copyright 2011, 2012 The Tor Project
- * See LICENSE for licensing information */
-package org.torproject.ernie.cron.users;
-
-import java.io.BufferedReader;
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.FileReader;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.sql.Connection;
-import java.sql.DriverManager;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Statement;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.SortedMap;
-import java.util.SortedSet;
-import java.util.TimeZone;
-import java.util.TreeMap;
-import java.util.TreeSet;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import org.apache.commons.codec.DecoderException;
-import org.apache.commons.codec.binary.Hex;
-import org.apache.commons.codec.digest.DigestUtils;
-import org.torproject.descriptor.Descriptor;
-import org.torproject.descriptor.DescriptorFile;
-import org.torproject.descriptor.DescriptorReader;
-import org.torproject.descriptor.DescriptorSourceFactory;
-import org.torproject.descriptor.ExtraInfoDescriptor;
-import org.torproject.descriptor.NetworkStatusEntry;
-import org.torproject.descriptor.RelayNetworkStatusConsensus;
-import org.torproject.descriptor.ServerDescriptor;
-
-/**
- * Determines estimates of bridge users per country and day from the
- * extra-info descriptors that bridges publish. In a first step, the
- * number of unique IP addresses that bridges see are normalized to a
- * 24-hour period. In the next step, all bridges are excluded that have
- * been running as a relay. Finally, observations are summed up and
- * written to <code>stats/bridge-stats</code>.
- */
-public class BridgeStatsFileHandler {
-
- /**
- * Two-letter country codes of known countries.
- */
- private SortedSet<String> countries;
-
- /**
- * Intermediate results file containing bridge user numbers by country
- * as seen by single bridges, normalized to 24-hour periods.
- */
- private File bridgeStatsRawFile;
-
- /**
- * Temp file for writing intermediate results.
- */
- private File bridgeStatsRawTempFile;
-
- /**
- * Bridge user numbers by country as seen by single bridges on a given
- * day. Map keys are bridge and date written as "bridge,date", map
- * values are lines as read from <code>stats/bridge-stats-raw</code>.
- */
- private SortedMap<String, Map<String, String>> bridgeUsersRaw;
-
- /**
- * Helper file containing the hashed relay identities of all known
- * relays. These hashes are compared to the bridge identity hashes to
- * exclude bridges that have been known as relays from the statistics.
- */
- private File hashedRelayIdentitiesFile;
-
- /**
- * Known hashed relay identities used to exclude bridges that have been
- * running as relays.
- */
- private SortedSet<String> hashedRelays;
-
- /**
- * Helper file containing extra-info descriptors published by 0.2.2.x
- * bridges. If these descriptors contain geoip-stats, they are not
- * included in the results, because stats are very likely broken.
- */
- private File zeroTwoTwoDescriptorsFile;
-
- /**
- * Extra-info descriptors published by 0.2.2.x bridges. If these
- * descriptors contain geoip-stats, they are not included in the
- * results, because stats are very likely broken.
- */
- private SortedSet<String> zeroTwoTwoDescriptors;
-
- /**
- * Final results file containing the number of bridge users per country
- * and day. This file is not read in during initialization, but
- * overwritten at the end of the execution.
- */
- private File bridgeStatsFile;
-
- /**
- * Logger for this class.
- */
- private Logger logger;
-
- /* Database connection string. */
- private String connectionURL = null;
-
- private SimpleDateFormat dateTimeFormat;
-
- private File bridgesDir;
-
- private File statsDirectory;
-
- private boolean keepBridgeDescriptorImportHistory;
-
- private File archivesDirectory;
-
- private boolean keepRelayDescriptorImportHistory;
-
- /**
- * Initializes this class, including reading in intermediate results
- * files <code>stats/bridge-stats-raw</code> and
- * <code>stats/hashed-relay-identities</code>.
- */
- public BridgeStatsFileHandler(String connectionURL,
- File bridgesDir, File statsDirectory,
- boolean keepBridgeDescriptorImportHistory, File archivesDirectory,
- boolean keepRelayDescriptorImportHistory) {
-
- if (bridgesDir == null || statsDirectory == null ||
- archivesDirectory == null || statsDirectory == null) {
- throw new IllegalArgumentException();
- }
- this.bridgesDir = bridgesDir;
- this.statsDirectory = statsDirectory;
- this.keepBridgeDescriptorImportHistory =
- keepBridgeDescriptorImportHistory;
- this.archivesDirectory = archivesDirectory;
- this.keepRelayDescriptorImportHistory =
- keepRelayDescriptorImportHistory;
-
- /* Initialize set of known countries. */
- this.countries = new TreeSet<String>();
- this.countries.add("zy");
-
- /* Initialize local data structures to hold results. */
- this.bridgeUsersRaw = new TreeMap<String, Map<String, String>>();
- this.hashedRelays = new TreeSet<String>();
- this.zeroTwoTwoDescriptors = new TreeSet<String>();
-
- /* Initialize file names for intermediate and final results. */
- this.bridgeStatsRawFile = new File("stats/bridge-stats-raw");
- this.bridgeStatsRawTempFile = new File("stats/bridge-stats-raw.tmp");
- this.bridgeStatsFile = new File("stats/bridge-stats");
- this.hashedRelayIdentitiesFile = new File(
- "stats/hashed-relay-identities");
- this.zeroTwoTwoDescriptorsFile = new File(
- "stats/v022-bridge-descriptors");
-
- /* Initialize database connection string. */
- this.connectionURL = connectionURL;
-
- this.dateTimeFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
- this.dateTimeFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
-
- /* Initialize logger. */
- this.logger = Logger.getLogger(
- BridgeStatsFileHandler.class.getName());
-
- /* Read in bridge user numbers by country as seen by single bridges,
- * normalized to 24-hour periods. */
- if (this.bridgeStatsRawFile.exists()) {
- try {
- this.logger.fine("Reading file "
- + this.bridgeStatsRawFile.getAbsolutePath() + "...");
- BufferedReader br = new BufferedReader(new FileReader(
- this.bridgeStatsRawFile));
- String line = br.readLine();
- if (line != null) {
- /* The first line should contain headers that we need to parse
- * in order to learn what countries we were interested in when
- * writing this file. */
- if (!line.startsWith("bridge,date,time,")) {
- this.logger.warning("Incorrect first line '" + line + "' in "
- + this.bridgeStatsRawFile.getAbsolutePath() + "! This line "
- + "should contain headers! Aborting to read in this "
- + "file!");
- } else {
- String[] headers = line.split(",");
- for (int i = 3; i < headers.length; i++) {
- if (!headers[i].equals("all")) {
- this.countries.add(headers[i]);
- }
- }
- /* Read in the rest of the file. */
- while ((line = br.readLine()) != null) {
- String[] parts = line.split(",");
- if (parts.length != headers.length) {
- this.logger.warning("Corrupt line '" + line + "' in file "
- + this.bridgeStatsRawFile.getAbsolutePath()
- + "! Aborting to read this file!");
- break;
- }
- String hashedBridgeIdentity = parts[0];
- String date = parts[1];
- String time = parts[2];
- SortedMap<String, String> obs =
- new TreeMap<String, String>();
- for (int i = 3; i < parts.length; i++) {
- if (parts[i].equals("NA")) {
- continue;
- }
- if (headers[i].equals("all")) {
- obs.put("zy", parts[i]);
- } else {
- obs.put(headers[i], parts[i]);
- }
- }
- long dateTimeMillis = dateTimeFormat.parse(date + " "
- + time).getTime();
- this.addObs(hashedBridgeIdentity, dateTimeMillis, obs);
- }
- }
- }
- br.close();
- this.logger.fine("Finished reading file "
- + this.bridgeStatsRawFile.getAbsolutePath() + ".");
- } catch (IOException e) {
- this.logger.log(Level.WARNING, "Failed to read file "
- + this.bridgeStatsRawFile.getAbsolutePath() + "!", e);
- } catch (ParseException e) {
- this.logger.log(Level.WARNING, "Failed to read file "
- + this.bridgeStatsRawFile.getAbsolutePath() + "!", e);
- }
- }
-
- /* Read in known hashed relay identities used to exclude bridges that
- * have been running as relays. */
- if (this.hashedRelayIdentitiesFile.exists()) {
- try {
- this.logger.fine("Reading file "
- + this.hashedRelayIdentitiesFile.getAbsolutePath() + "...");
- BufferedReader br = new BufferedReader(new FileReader(
- this.hashedRelayIdentitiesFile));
- String line = null;
- /* Read in all lines from the file and memorize them. */
- while ((line = br.readLine()) != null) {
- this.hashedRelays.add(line);
- }
- br.close();
- this.logger.fine("Finished reading file "
- + this.hashedRelayIdentitiesFile.getAbsolutePath() + ".");
- } catch (IOException e) {
- this.logger.log(Level.WARNING, "Failed to read file "
- + this.hashedRelayIdentitiesFile.getAbsolutePath() + "!", e);
- }
- }
-
- /* Read in known extra-info descriptors published by 0.2.2.x
- * bridges. */
- if (this.zeroTwoTwoDescriptorsFile.exists()) {
- try {
- this.logger.fine("Reading file "
- + this.zeroTwoTwoDescriptorsFile.getAbsolutePath() + "...");
- BufferedReader br = new BufferedReader(new FileReader(
- this.zeroTwoTwoDescriptorsFile));
- String line = null;
- /* Read in all lines from the file and memorize them. */
- while ((line = br.readLine()) != null) {
- this.zeroTwoTwoDescriptors.add(line);
- }
- br.close();
- this.logger.fine("Finished reading file "
- + this.zeroTwoTwoDescriptorsFile.getAbsolutePath() + ".");
- } catch (IOException e) {
- this.logger.log(Level.WARNING, "Failed to read file "
- + this.zeroTwoTwoDescriptorsFile.getAbsolutePath() + "!", e);
- }
- }
- }
-
- /**
- * Adds a hashed relay identity string to the list of bridges that we
- * are going to ignore in the future. If we counted user numbers from
- * bridges that have been running as relays, our numbers would be far
- * higher than what we think is correct.
- */
- public void addHashedRelay(String hashedRelayIdentity) {
- if (!this.hashedRelays.contains(hashedRelayIdentity)) {
- this.logger.finer("Adding new hashed relay identity: "
- + hashedRelayIdentity);
- this.hashedRelays.add(hashedRelayIdentity);
- }
- }
-
- /**
- * Adds an extra-info descriptor identifier published by an 0.2.2.x
- * bridges. If this extra-info descriptor contains geoip-stats, they are
- * not included in the results, because stats are very likely broken.
- */
- public void addZeroTwoTwoDescriptor(String hashedBridgeIdentity,
- long publishedMillis) {
- String value = hashedBridgeIdentity.toUpperCase() + ","
- + this.dateTimeFormat.format(publishedMillis).
- replaceAll(" ", ",");
- if (!this.zeroTwoTwoDescriptors.contains(value)) {
- this.logger.finer("Adding new bridge 0.2.2.x extra-info "
- + "descriptor: " + value);
- this.zeroTwoTwoDescriptors.add(value);
- }
- }
-
- /**
- * Returns whether the given fingerprint is a known hashed relay
- * identity. <code>BridgeDescriptorParser</code> uses this information
- * to decide whether to continue parsing a bridge extra-descriptor
- * descriptor or not.
- */
- public boolean isKnownRelay(String hashedBridgeIdentity) {
- return this.hashedRelays.contains(hashedBridgeIdentity);
- }
-
- /**
- * Adds bridge user numbers by country as seen by a single bridge on a
- * given date and time. Bridges can publish statistics on unique IP
- * addresses multiple times a day, but we only want to include one
- * observation per day. If we already have an observation from the given
- * bridge and day, we keep the one with the later publication time and
- * discard the other one.
- */
- public void addObs(String hashedIdentity, long publishedMillis,
- Map<String, String> obs) {
- for (String country : obs.keySet()) {
- this.countries.add(country);
- }
- String dateTime = this.dateTimeFormat.format(publishedMillis);
- String date = dateTime.split(" ")[0];
- String time = dateTime.split(" ")[1];
- String shortKey = hashedIdentity + "," + date;
- String longKey = shortKey + "," + time;
- SortedMap<String, Map<String, String>> tailMap =
- this.bridgeUsersRaw.tailMap(shortKey);
- String nextKey = tailMap.isEmpty() ? null : tailMap.firstKey();
- if (nextKey == null || !nextKey.startsWith(shortKey)) {
- this.logger.finer("Adding new bridge user numbers for key "
- + longKey);
- this.bridgeUsersRaw.put(longKey, obs);
- } else if (longKey.compareTo(nextKey) > 0) {
- this.logger.finer("Replacing existing bridge user numbers (" +
- nextKey + " with new numbers: " + longKey);
- this.bridgeUsersRaw.put(longKey, obs);
- } else {
- this.logger.finer("Not replacing existing bridge user numbers (" +
- nextKey + " with new numbers (" + longKey + ").");
- }
- }
-
- public void importSanitizedBridges() {
- if (bridgesDir.exists()) {
- logger.fine("Importing files in directory " + bridgesDir + "/...");
- DescriptorReader reader =
- DescriptorSourceFactory.createDescriptorReader();
- reader.addDirectory(bridgesDir);
- if (keepBridgeDescriptorImportHistory) {
- reader.setExcludeFiles(new File(statsDirectory,
- "bridge-stats-bridge-descriptor-history"));
- }
- Iterator<DescriptorFile> descriptorFiles = reader.readDescriptors();
- while (descriptorFiles.hasNext()) {
- DescriptorFile descriptorFile = descriptorFiles.next();
- if (descriptorFile.getDescriptors() != null) {
- for (Descriptor descriptor : descriptorFile.getDescriptors()) {
- if (descriptor instanceof ServerDescriptor) {
- this.addServerDescriptor((ServerDescriptor) descriptor);
- } else if (descriptor instanceof ExtraInfoDescriptor) {
- this.addExtraInfoDescriptor(
- (ExtraInfoDescriptor) descriptor);
- }
- }
- }
- }
- logger.info("Finished importing bridge descriptors.");
- }
- }
-
- private void addServerDescriptor(ServerDescriptor descriptor) {
- if (descriptor.getPlatform() != null &&
- descriptor.getPlatform().startsWith("Tor 0.2.2")) {
- this.addZeroTwoTwoDescriptor(descriptor.getFingerprint(),
- descriptor.getPublishedMillis());
- }
- }
-
- private void addExtraInfoDescriptor(ExtraInfoDescriptor descriptor) {
- if (!this.isKnownRelay(descriptor.getFingerprint())) {
- if (descriptor.getGeoipStartTimeMillis() >= 0 &&
- descriptor.getGeoipClientOrigins() != null) {
- long seconds = (descriptor.getPublishedMillis()
- - descriptor.getGeoipStartTimeMillis()) / 1000L;
- double allUsers = 0.0D;
- Map<String, String> obs = new HashMap<String, String>();
- for (Map.Entry<String, Integer> e :
- descriptor.getGeoipClientOrigins().entrySet()) {
- String country = e.getKey();
- double users = ((double) e.getValue() - 4) * 86400.0D
- / ((double) seconds);
- allUsers += users;
- obs.put(country, String.format("%.2f", users));
- }
- obs.put("zy", String.format("%.2f", allUsers));
- this.addObs(descriptor.getFingerprint(),
- descriptor.getPublishedMillis(), obs);
- }
- if (descriptor.getBridgeStatsEndMillis() >= 0 &&
- descriptor.getBridgeIps() != null) {
- double allUsers = 0.0D;
- Map<String, String> obs = new HashMap<String, String>();
- for (Map.Entry<String, Integer> e :
- descriptor.getBridgeIps().entrySet()) {
- String country = e.getKey();
- double users = (double) e.getValue() - 4;
- allUsers += users;
- obs.put(country, String.format("%.2f", users));
- }
- obs.put("zy", String.format("%.2f", allUsers));
- this.addObs(descriptor.getFingerprint(),
- descriptor.getBridgeStatsEndMillis(), obs);
- }
- }
- }
-
- public void importRelayDescriptors() {
- if (archivesDirectory.exists()) {
- logger.fine("Importing files in directory " + archivesDirectory
- + "/...");
- DescriptorReader reader =
- DescriptorSourceFactory.createDescriptorReader();
- reader.addDirectory(archivesDirectory);
- if (keepRelayDescriptorImportHistory) {
- reader.setExcludeFiles(new File(statsDirectory,
- "bridge-stats-relay-descriptor-history"));
- }
- Iterator<DescriptorFile> descriptorFiles = reader.readDescriptors();
- while (descriptorFiles.hasNext()) {
- DescriptorFile descriptorFile = descriptorFiles.next();
- if (descriptorFile.getDescriptors() != null) {
- for (Descriptor descriptor : descriptorFile.getDescriptors()) {
- if (descriptor instanceof RelayNetworkStatusConsensus) {
- this.addRelayNetworkStatusConsensus(
- (RelayNetworkStatusConsensus) descriptor);
- }
- }
- }
- }
- }
-
- logger.info("Finished importing relay descriptors.");
- }
-
- private void addRelayNetworkStatusConsensus(
- RelayNetworkStatusConsensus consensus) {
- for (NetworkStatusEntry statusEntry :
- consensus.getStatusEntries().values()) {
- try {
- this.addHashedRelay(DigestUtils.shaHex(Hex.decodeHex(
- statusEntry.getFingerprint().toCharArray())).toUpperCase());
- } catch (DecoderException e) {
- }
- }
- }
-
- /**
- * Writes the list of hashed relay identities and bridge user numbers as
- * observed by single bridges to disk, aggregates per-day statistics for
- * all bridges, and writes those to disk, too.
- */
- public void writeFiles() {
-
- /* Write hashed relay identities to disk. */
- try {
- this.logger.fine("Writing file "
- + this.hashedRelayIdentitiesFile.getAbsolutePath() + "...");
- this.hashedRelayIdentitiesFile.getParentFile().mkdirs();
- BufferedWriter bw = new BufferedWriter(new FileWriter(
- this.hashedRelayIdentitiesFile));
- for (String hashedRelay : this.hashedRelays) {
- bw.append(hashedRelay + "\n");
- }
- bw.close();
- this.logger.fine("Finished writing file "
- + this.hashedRelayIdentitiesFile.getAbsolutePath() + ".");
- } catch (IOException e) {
- this.logger.log(Level.WARNING, "Failed to write "
- + this.hashedRelayIdentitiesFile.getAbsolutePath() + "!", e);
- }
-
- /* Write bridge extra-info descriptor identifiers to disk. */
- try {
- this.logger.fine("Writing file "
- + this.zeroTwoTwoDescriptorsFile.getAbsolutePath() + "...");
- this.zeroTwoTwoDescriptorsFile.getParentFile().mkdirs();
- BufferedWriter bw = new BufferedWriter(new FileWriter(
- this.zeroTwoTwoDescriptorsFile));
- for (String descriptorIdentifier : this.zeroTwoTwoDescriptors) {
- bw.append(descriptorIdentifier + "\n");
- }
- bw.close();
- this.logger.fine("Finished writing file "
- + this.zeroTwoTwoDescriptorsFile.getAbsolutePath() + ".");
- } catch (IOException e) {
- this.logger.log(Level.WARNING, "Failed to write "
- + this.zeroTwoTwoDescriptorsFile.getAbsolutePath() + "!", e);
- }
-
- /* Write observations made by single bridges to disk. */
- try {
- this.logger.fine("Writing file "
- + this.bridgeStatsRawFile.getAbsolutePath() + " (using "
- + this.bridgeStatsRawTempFile.getAbsolutePath() + " as temp "
- + "file)...");
- this.bridgeStatsRawTempFile.getParentFile().mkdirs();
- BufferedWriter bw = new BufferedWriter(new FileWriter(
- this.bridgeStatsRawTempFile));
- bw.append("bridge,date,time");
- for (String c : this.countries) {
- if (c.equals("zy")) {
- bw.append(",all");
- } else {
- bw.append("," + c);
- }
- }
- bw.append("\n");
- for (Map.Entry<String, Map<String, String>> e :
- this.bridgeUsersRaw.entrySet()) {
- String longKey = e.getKey();
- String[] parts = longKey.split(",");
- String hashedBridgeIdentity = parts[0];
- if (!this.hashedRelays.contains(hashedBridgeIdentity) &&
- !this.zeroTwoTwoDescriptors.contains(longKey)) {
- Map<String, String> obs = e.getValue();
- StringBuilder sb = new StringBuilder(longKey);
- for (String c : this.countries) {
- sb.append("," + (obs.containsKey(c) &&
- !obs.get(c).startsWith("-") ? obs.get(c) : "NA"));
- }
- String line = sb.toString();
- bw.append(line + "\n");
- }
- }
- bw.close();
- if (!this.bridgeStatsRawTempFile.renameTo(
- this.bridgeStatsRawFile)) {
- this.logger.fine("Failed to rename "
- + this.bridgeStatsRawTempFile.getAbsolutePath() + " to "
- + this.bridgeStatsRawFile.getAbsolutePath() + ".");
- }
- this.logger.fine("Finished writing file "
- + this.bridgeStatsRawFile.getAbsolutePath() + ".");
- } catch (IOException e) {
- this.logger.log(Level.WARNING, "Failed to write "
- + this.bridgeStatsRawFile.getAbsolutePath() + " (using "
- + this.bridgeStatsRawTempFile.getAbsolutePath() + " as temp "
- + "file)!", e);
- }
-
- /* Aggregate per-day statistics. */
- SortedMap<String, double[]> bridgeUsersPerDay =
- new TreeMap<String, double[]>();
- for (Map.Entry<String, Map<String, String>> e :
- this.bridgeUsersRaw.entrySet()) {
- String longKey = e.getKey();
- String[] parts = longKey.split(",");
- String hashedBridgeIdentity = parts[0];
- String date = parts[1];
- if (!this.hashedRelays.contains(hashedBridgeIdentity) &&
- !this.zeroTwoTwoDescriptors.contains(longKey)) {
- double[] users = bridgeUsersPerDay.get(date);
- Map<String, String> obs = e.getValue();
- if (users == null) {
- users = new double[this.countries.size()];
- bridgeUsersPerDay.put(date, users);
- }
- int i = 0;
- for (String c : this.countries) {
- if (obs.containsKey(c) && !obs.get(c).startsWith("-")) {
- users[i] += Double.parseDouble(obs.get(c));
- }
- i++;
- }
- }
- }
-
- /* Write final results of bridge users per day and country to
- * <code>stats/bridge-stats</code>. */
- try {
- this.logger.fine("Writing file "
- + this.bridgeStatsRawFile.getAbsolutePath() + "...");
- this.bridgeStatsFile.getParentFile().mkdirs();
- BufferedWriter bw = new BufferedWriter(new FileWriter(
- this.bridgeStatsFile));
- bw.append("date");
- for (String c : this.countries) {
- if (c.equals("zy")) {
- bw.append(",all");
- } else {
- bw.append("," + c);
- }
- }
- bw.append("\n");
-
- /* Write current observation. */
- for (Map.Entry<String, double[]> e : bridgeUsersPerDay.entrySet()) {
- String date = e.getKey();
- bw.append(date);
- double[] users = e.getValue();
- for (int i = 0; i < users.length; i++) {
- bw.append("," + String.format("%.2f", users[i]));
- }
- bw.append("\n");
- }
- bw.close();
- this.logger.fine("Finished writing file "
- + this.bridgeStatsFile.getAbsolutePath() + ".");
- } catch (IOException e) {
- this.logger.log(Level.WARNING, "Failed to write "
- + this.bridgeStatsFile.getAbsolutePath() + "!", e);
- }
-
- /* Add daily bridge users to database. */
- if (connectionURL != null) {
- try {
- List<String> countryList = new ArrayList<String>();
- for (String c : this.countries) {
- countryList.add(c);
- }
- Map<String, Integer> insertRows = new HashMap<String, Integer>(),
- updateRows = new HashMap<String, Integer>();
- for (Map.Entry<String, double[]> e :
- bridgeUsersPerDay.entrySet()) {
- String date = e.getKey();
- double[] users = e.getValue();
- for (int i = 0; i < users.length; i++) {
- int usersInt = (int) users[i];
- if (usersInt < 1) {
- continue;
- }
- String country = countryList.get(i);
- String key = date + "," + country;
- insertRows.put(key, usersInt);
- }
- }
- Connection conn = DriverManager.getConnection(connectionURL);
- conn.setAutoCommit(false);
- Statement statement = conn.createStatement();
- ResultSet rs = statement.executeQuery(
- "SELECT date, country, users FROM bridge_stats");
- while (rs.next()) {
- String date = rs.getDate(1).toString();
- String country = rs.getString(2);
- String key = date + "," + country;
- if (insertRows.containsKey(key)) {
- int insertRow = insertRows.remove(key);
- int oldUsers = rs.getInt(3);
- if (oldUsers != insertRow) {
- updateRows.put(key, insertRow);
- }
- }
- }
- rs.close();
- PreparedStatement psU = conn.prepareStatement(
- "UPDATE bridge_stats SET users = ? "
- + "WHERE date = ? AND country = ?");
- for (Map.Entry<String, Integer> e : updateRows.entrySet()) {
- String[] keyParts = e.getKey().split(",");
- java.sql.Date date = java.sql.Date.valueOf(keyParts[0]);
- String country = keyParts[1];
- int users = e.getValue();
- psU.clearParameters();
- psU.setInt(1, users);
- psU.setDate(2, date);
- psU.setString(3, country);
- psU.executeUpdate();
- }
- PreparedStatement psI = conn.prepareStatement(
- "INSERT INTO bridge_stats (users, date, country) "
- + "VALUES (?, ?, ?)");
- for (Map.Entry<String, Integer> e : insertRows.entrySet()) {
- String[] keyParts = e.getKey().split(",");
- java.sql.Date date = java.sql.Date.valueOf(keyParts[0]);
- String country = keyParts[1];
- int users = e.getValue();
- psI.clearParameters();
- psI.setInt(1, users);
- psI.setDate(2, date);
- psI.setString(3, country);
- psI.executeUpdate();
- }
- conn.commit();
- conn.close();
- } catch (SQLException e) {
- logger.log(Level.WARNING, "Failed to add daily bridge users to "
- + "database.", e);
- }
- }
- }
-}
-
diff --git a/src/org/torproject/ernie/web/graphs/RObjectGenerator.java b/src/org/torproject/ernie/web/graphs/RObjectGenerator.java
index 2fa0cc6..927b5c4 100644
--- a/src/org/torproject/ernie/web/graphs/RObjectGenerator.java
+++ b/src/org/torproject/ernie/web/graphs/RObjectGenerator.java
@@ -58,15 +58,10 @@ public class RObjectGenerator implements ServletContextListener {
this.availableCsvFiles = new TreeSet<String>();
this.availableCsvFiles.add("bandwidth");
this.availableCsvFiles.add("bandwidth-flags");
- this.availableCsvFiles.add("bridge-users");
this.availableCsvFiles.add("bwhist-flags");
this.availableCsvFiles.add("connbidirect");
this.availableCsvFiles.add("cloudbridges");
- this.availableCsvFiles.add("direct-users");
- this.availableCsvFiles.add("dirreq-stats");
this.availableCsvFiles.add("dirbytes");
- this.availableCsvFiles.add("monthly-users-average");
- this.availableCsvFiles.add("monthly-users-peak");
this.availableCsvFiles.add("monthly-userstats-average");
this.availableCsvFiles.add("monthly-userstats-peak");
this.availableCsvFiles.add("networksize");
@@ -80,9 +75,6 @@ public class RObjectGenerator implements ServletContextListener {
this.availableCsvFiles.add("versions");
this.availableTables = new HashMap<String, String>();
- this.availableTables.put("direct-users", "start,end,filename");
- this.availableTables.put("censorship-events", "start,end,filename");
- this.availableTables.put("bridge-users", "start,end,filename");
this.availableTables.put("userstats-relay", "start,end,filename");
this.availableTables.put("userstats-bridge", "start,end,filename");
this.availableTables.put("userstats-censorship-events",
@@ -102,10 +94,6 @@ public class RObjectGenerator implements ServletContextListener {
this.availableGraphs.put("bandwidth-flags", "start,end,filename");
this.availableGraphs.put("bwhist-flags", "start,end,filename");
this.availableGraphs.put("dirbytes", "start,end,filename");
- this.availableGraphs.put("direct-users",
- "start,end,country,events,filename");
- this.availableGraphs.put("bridge-users",
- "start,end,country,filename");
this.availableGraphs.put("torperf",
"start,end,source,filesize,filename");
this.availableGraphs.put("torperf-failures",
1
0