tor-commits
Threads by month
- ----- 2025 -----
- 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
July 2014
- 25 participants
- 1533 discussions

[translation/gettor_completed] Update translations for gettor_completed
by translation@torproject.org 19 Jul '14
by translation@torproject.org 19 Jul '14
19 Jul '14
commit a3bbded2df213ca9d19122a0a06ef283d04d3a09
Author: Translation commit bot <translation(a)torproject.org>
Date: Sat Jul 19 09:15:12 2014 +0000
Update translations for gettor_completed
---
fi/gettor.po | 509 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 509 insertions(+)
diff --git a/fi/gettor.po b/fi/gettor.po
new file mode 100644
index 0000000..8531b42
--- /dev/null
+++ b/fi/gettor.po
@@ -0,0 +1,509 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# morso <debris(a)riseup.net>, 2013
+# Jacob Appelbaum <jacob(a)appelbaum.net>, 2009
+# karvjorm <karvonen.jorma(a)gmail.com>, 2014
+# Sami Korkalainen, 2014
+# tonttula, 2013
+# Vesa Nilakari, 2014
+# Finland355 <ville.ehrukainen2(a)gmail.com>, 2014
+msgid ""
+msgstr ""
+"Project-Id-Version: The Tor Project\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2013-01-19 13:40+0100\n"
+"PO-Revision-Date: 2014-07-19 09:11+0000\n"
+"Last-Translator: karvjorm <karvonen.jorma(a)gmail.com>\n"
+"Language-Team: Finnish (http://www.transifex.com/projects/p/torproject/language/fi/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: fi\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: lib/gettor/i18n.py:27
+msgid "Hello, This is the \"GetTor\" robot."
+msgstr "Hei, tämä on ”GetTor”-robotti."
+
+#: lib/gettor/i18n.py:29
+msgid "Thank you for your request."
+msgstr "Kiitos pyynnöstäsi."
+
+#: lib/gettor/i18n.py:31
+msgid ""
+"Unfortunately, we won't answer you at this address. You should make\n"
+"an account with GMAIL.COM, YAHOO.COM or YAHOO.CN and send the mail from\n"
+"one of those."
+msgstr "Ikävä kyllä emme vastaa sinulle tähän osoitteeseen. Sinun pitäisi luoda\nGMAIL.COM-, YAHOO.COM- tai YAHOO.CN-tili ja lähettää sähköpostiviesti\nsiitä osoitteesta."
+
+#: lib/gettor/i18n.py:35
+msgid ""
+"We only process requests from email services that support \"DKIM\",\n"
+"which is an email feature that lets us verify that the address in the\n"
+"\"From\" line is actually the one who sent the mail."
+msgstr "Käsittelemme pyyntöjä vain sähköpostipalveluista, jotka tukevat ”DKIM”-ominaisuutta.\nSe on sähköpostin ominaisuus, joka varmistaa, että viestin lähettäjänä näkyy sen\ntodellinen lähettäjä."
+
+#: lib/gettor/i18n.py:39
+msgid ""
+"(We apologize if you didn't ask for this mail. Since your email is from\n"
+"a service that doesn't use DKIM, we're sending a short explanation,\n"
+"and then we'll ignore this email address for the next day or so.)"
+msgstr "(Pahoittelemme, jos tämä sähköposti on lähetetty pyytämättänne. Koska sähköpostinne on tullut palvelusta, joka ei käyttä DKIM -ominaisuutta, lähetämme lyhyen selityksen, minkä jälkeen tästä osoitteesta tulevia posteja ei oteta huomioon muutamaan päivään.)"
+
+#: lib/gettor/i18n.py:43 lib/gettor/i18n.py:135
+msgid ""
+"If you have any questions or it doesn't work, you can contact a\n"
+"human at this support email address: help(a)rt.torproject.org"
+msgstr "Jos sinulla on mitään kysymyksiä tai ohjelma ei toimi, voit ottaa yhteyttä\nhenkilökohtaisesti tämän tukisähköpostiosoitteen kautta:\nhelp@rt.torproject.org"
+
+#: lib/gettor/i18n.py:46
+msgid ""
+"I will mail you a Tor package, if you tell me which one you want.\n"
+"Please select one of the following package names:\n"
+"\n"
+" windows\n"
+" macos-i386\n"
+" macos-ppc\n"
+" linux-i386\n"
+" linux-x86_64\n"
+" obfs-windows\n"
+" obfs-macos-i386\n"
+" obfs-macos-x86_64\n"
+" obfs-linux-i386\n"
+" obfs-linux-x86_64\n"
+" source"
+msgstr "Lähetän sinulle Tor-pakkauksen, jos kerrot minulle, minkä\nhaluat. Valitse yksi seuraavista pakkausnimistä:\n\n windows\n macos-i386\n macos-ppc\n linux-i386\n linux-x86_64\n obfs-windows\n obfs-macos-i386\n obfs-macos-x86_64\n obfs-linux-i386\n obfs-linux-x86_64\n source"
+
+#: lib/gettor/i18n.py:61
+msgid ""
+"Please reply to this mail, and tell me a single package name anywhere \n"
+"in the body of your email."
+msgstr "Vastaa tähän sähköpostiviestiin ja kerro yksittäisen pakkauksen nimi\nmissä tahansa sähköpostiviestisi runko-osassa."
+
+#: lib/gettor/i18n.py:64
+msgid ""
+"OBTAINING LOCALIZED VERSIONS OF TOR\n"
+"==================================="
+msgstr "HAETAAN LOKALISOITU VERSIO TOR-OHJELMASTA\n==================================="
+
+#: lib/gettor/i18n.py:67
+msgid ""
+"To get a version of Tor translated into your language, specify the\n"
+"language you want in the address you send the mail to:\n"
+"\n"
+" gettor+fa(a)torproject.org"
+msgstr "Saadaksesi omalle kielellesi käännetyn Tor-version, määritä haluamasi kieli osoitteessa, johon lähetät sähköpostiviestin:\n\ngettor+fa@torproject.org"
+
+#: lib/gettor/i18n.py:72
+msgid ""
+"This example will give you the requested package in a localized\n"
+"version for Farsi (Persian). Check below for a list of supported language\n"
+"codes. "
+msgstr "Tämä esimerkki antaa sinulle pyydetyn arkiston alueellisena\nversiona farsin kielellä (Iran). Tarkista alempana sijaitsevasta\nluettelosta tuetut kielikoodit."
+
+#: lib/gettor/i18n.py:76
+msgid " List of supported locales:"
+msgstr "Luettelo tuetuista maa-asetuksista:"
+
+#: lib/gettor/i18n.py:78
+msgid "Here is a list of all available languages:"
+msgstr "Lista kaikista saatavilla olevista kieliversioista:"
+
+#: lib/gettor/i18n.py:80
+msgid ""
+" gettor+ar(a)torproject.org: Arabic\n"
+" gettor+de(a)torproject.org: German\n"
+" gettor+en(a)torproject.org: English\n"
+" gettor+es(a)torproject.org: Spanish\n"
+" gettor+fa(a)torproject.org: Farsi (Iran)\n"
+" gettor+fr(a)torproject.org: French\n"
+" gettor+it(a)torproject.org: Italian\n"
+" gettor+nl(a)torproject.org: Dutch\n"
+" gettor+pl(a)torproject.org: Polish\n"
+" gettor+ru(a)torproject.org: Russian\n"
+" gettor+zh(a)torproject.org: Chinese"
+msgstr "gettor+ar(a)torproject.org: arabia\ngettor+de(a)torproject.org: saksa\ngettor+en(a)torproject.org: englanti\ngettor+es(a)torproject.org: espanja\ngettor+fa(a)torproject.org: farsi (Iran)\ngettor+fr(a)torproject.org: ranska\ngettor+it(a)torproject.org: italia\ngettor+nl(a)torproject.org: hollanti\ngettor+pl(a)torproject.org: puola\ngettor+ru(a)torproject.org: venäjä\ngettor+zh(a)torproject.org: kiina"
+
+#: lib/gettor/i18n.py:92
+msgid "If you select no language, you will receive the English version."
+msgstr "Jos et valitse kieltä, saat englanninkielisen version."
+
+#: lib/gettor/i18n.py:94
+msgid ""
+"SMALLER SIZED PACKAGES\n"
+"======================"
+msgstr "PIENEMPIKOKOISET PAKETIT\n======================"
+
+#: lib/gettor/i18n.py:97
+msgid ""
+"If your bandwith is low or your provider doesn't allow you to\n"
+"receive large attachments in your email, GetTor can send you several\n"
+"small packages instead of one big one."
+msgstr "Jos kaistanleveytesi on pieni tai palveluntarjoajasi ei salli sinun\nvastaanottaa suuria liitetiedostoja sähköposteissasi, GetTor voi\nlähettää useita pieniä paketteja yhden suuren sijasta."
+
+#: lib/gettor/i18n.py:101
+msgid ""
+"Simply include the keyword 'split' in a new line on its own (this part\n"
+"is important!) like so: \n"
+" \n"
+" windows\n"
+" split"
+msgstr "Sisällytä yksinkertaisesti avainsana ’split’ uudelle riville yksinään (tämä\nosa on tärkeää!) kuten:\n\nwindows\nsplit"
+
+#: lib/gettor/i18n.py:107
+msgid ""
+"Sending this text in an email to GetTor will cause it to send you \n"
+"the Tor Browser Bundle in a number of 1,4MB attachments."
+msgstr "Tämän tekstin lähettäminen sähköpostiviestissä GetTor-osoitteeseen\naiheuttaa sen, että sinulle lähetetään Tor Browser Bundle-pakkaus\nlukuisina 1,4 megatavun kokoisina sähköpostiliitteinä."
+
+#: lib/gettor/i18n.py:110
+msgid ""
+"After having received all parts, you need to re-assemble them to \n"
+"one package again. This is done as follows:"
+msgstr "Kun olet vastaanottanut kaikki osatiedostot, sinun on koottava ne\njälleen yhdeksi tiedostoksi. Se tapahtuu näin:\n\n "
+
+#: lib/gettor/i18n.py:113
+msgid "1.) Save all received attachments into one folder on your disk."
+msgstr "1.) Tallenna kaikki liitteet samaan kansioon levyasemassasi."
+
+#: lib/gettor/i18n.py:115
+msgid ""
+"2.) Unzip all files ending in \".z\". If you saved all attachments to\n"
+"a fresh folder before, simply unzip all files in that folder. If you don't\n"
+"know how to unzip the .z files, please see the UNPACKING THE FILES section."
+msgstr "2.) Pura kaikki tiedostot, jotka päättyvä tarkentimeen \".z\". Jos olet\ntallentanut kaikki liitteet puhtaaseen kansioon aiemmin, pura kaikki\ntiedostot yksinkertaisesti tuohon kansioon. Jos et tiedä, kuinka\n.z-tiedostoja puretaan, katso UNPACKING THE FILES-kappaletta."
+
+#: lib/gettor/i18n.py:119
+msgid ""
+"3.) Verify all files as described in the mail you received with \n"
+"each package. (gpg --verify)"
+msgstr "3.) Todenna kaikki tiedostot jokaisen paketin mukana tulleen sähköpostiviestin\nohjeiden mukaisesti. (gpg --verify)"
+
+#: lib/gettor/i18n.py:122
+msgid ""
+"4.) Now unpack the multi-volume archive into one file by double-\n"
+"clicking the file ending in \"..split.part01.exe\". This should start the \n"
+"process automatically."
+msgstr "4.) Pura nyt moniosainen arkisto yhdeksi tiedostoksi\nkaksoisnapsauttamalla tiedostoa, jonka lopussa lukee\n”..split.part01.exe”. Tämän pitäisi aloittaa prosessi\nautomaattisesti."
+
+#: lib/gettor/i18n.py:126
+msgid ""
+"5.) After unpacking is finished, you should find a newly created \n"
+"\".exe\" file in your destination folder. Simply doubleclick\n"
+"that and Tor Browser Bundle should start within a few seconds."
+msgstr "5.) Kun paketit on purettu, löydät uuden ”.exe” -tiedoston kohdekansiosta.\nTor Browser Bundle käynnistyy tiedoston kaksoisnapsautuksella."
+
+#: lib/gettor/i18n.py:130
+msgid "6.) That's it. You're done. Thanks for using Tor and have fun!"
+msgstr "6.) Siinä kaikki. Olet valmis. Kiitos, että käytit Tor:ia, ja pidä hauskaa!"
+
+#: lib/gettor/i18n.py:132
+msgid ""
+"SUPPORT\n"
+"======="
+msgstr "TUKI\n======="
+
+#: lib/gettor/i18n.py:138
+msgid ""
+"Here's your requested software as a zip file. Please unzip the\n"
+"package and verify the signature."
+msgstr "Tässä on pyytämäsi ohjelmisto zip-tiedostona. Pura \npakattu tiedosto ja todenna allekirjoitus."
+
+#: lib/gettor/i18n.py:141
+msgid ""
+"VERIFY SIGNATURE\n"
+"================\n"
+"If your computer has GnuPG installed, use the gpg commandline \n"
+"tool as follows after unpacking the zip file:\n"
+"\n"
+" gpg --verify tor-browser-1.3.24_en-US.exe.asc tor-browser-1.3.24_en-US.exe"
+msgstr "TODENNA ALLEKIRJOITUS\n================\nJos tietokoneessasi on asennettuna GnuPG, käytä gpg-komentorivityökalua\nseuraavalla tavalla zip-tiedostn purkamiseksi:\n\ngpg --verify tor-browser-1.3.24_en-US.exe.asc tor-browser-1.3.24_en-US.exe"
+
+#: lib/gettor/i18n.py:148
+msgid ""
+"The output should look somewhat like this:\n"
+"\n"
+" gpg: Good signature from 'Erinn Clark <...>'"
+msgstr "Tulosteen pitäisi näyttää suunnilleen tältä:\n\ngpg: Good signature from 'Erinn Clark <...>'"
+
+#: lib/gettor/i18n.py:152
+msgid ""
+"If you're not familiar with commandline tools, try looking for\n"
+"a graphical user interface for GnuPG on this website:\n"
+"\n"
+" http://www.gnupg.org/related_software/frontends.html"
+msgstr "Jos komentorivityökalujen käyttö ei ole sinulle tuttua, yritä\netsiä graafista käyttöliittymä GnuPG-ohjelmalle tältä\nwebbisivulta:\n\nhttp://www.gnupg.org/related_software/frontends.html"
+
+#: lib/gettor/i18n.py:157
+msgid ""
+"BLOCKED ACCESS / CENSORSHIP\n"
+"==========================="
+msgstr "PÄÄSY ESTETTY/SENSUROITU"
+
+#: lib/gettor/i18n.py:160
+msgid ""
+"If your Internet connection blocks access to the Tor network, you\n"
+"may need a bridge relay. Bridge relays (or \"bridges\" for short)\n"
+"are Tor relays that aren't listed in the main directory. Since there\n"
+"is no complete public list of them, even if your ISP is filtering\n"
+"connections to all the known Tor relays, they probably won't be able\n"
+"to block all the bridges."
+msgstr "Jos internetyhteyden tarjoajasi estää pääsyn Tor-verkkoon, saatat\ntarvita siltavälittimen. Siltavälittimet (eng. \"bridges\") ovat Tor-välittimiä,\njoita ei ole listattu Tor-päähakemistossa. Koska niistä ei ole täydellistä\nlistaa olemassa, internet-palveluntarjoajat eivät ehkä pysty estämään\nkaikkia siltavälittimiä."
+
+#: lib/gettor/i18n.py:167
+msgid ""
+"You can acquire a bridge by sending an email that contains \"get bridges\"\n"
+"in the body of the email to the following email address:\n"
+"\n"
+" bridges(a)torproject.org"
+msgstr "Voit saada sillat lähettämällä sähköpostiviestin, joka sisältää \"get bridges\"\nsähköpostiviestin runko-osassa seuraavaan sähköpostiosoitteeseen:\n\nbridges@torproject.org"
+
+#: lib/gettor/i18n.py:172
+msgid ""
+"It is also possible to fetch bridges with a web browser at the following\n"
+"url: https://bridges.torproject.org/"
+msgstr "Voit myös pyytää luettelon välittimistä selaimellasi seuraavasta osoitteesta\nhttps://bridges.torproject.org/\n\n "
+
+#: lib/gettor/i18n.py:175
+msgid ""
+"Another censorship circumvention tool you can request from GetTor is\n"
+"the Tor Obfsproxy Browser Bundle. Please read the package descriptions for\n"
+"which package you should request to receive this."
+msgstr "Toinen sensuroinnin kiertotyökalu, jonka voit pyytää GetTor:sta on\nTor Obfsproxy Browser Bundle-pakkaus. Lue tämän vastaanottamiseksi\npakkauskuvaukset, jotta tietäisit mitä pakkausta pyydät."
+
+#: lib/gettor/i18n.py:179
+msgid ""
+"IMPORTANT NOTE:\n"
+"Since this is part of a split-file request, you need to wait for\n"
+"all split files to be received by you before you can save them all\n"
+"into the same directory and unpack them by double-clicking the\n"
+"first file."
+msgstr "TÄRKEÄ HUOMAUTUS:\nKoska tämä on osa split-tiedostopyyntöä, sinun on odotettava,\nkunnes kaikki split-tiedostot on vastaanotettu ennen kuin voit\ntallentaa ne kaikki samaan kansioon ja purkaa ne\nkaksoisnapsauttamalla ensimmäistä tiedostoa."
+
+#: lib/gettor/i18n.py:185
+msgid ""
+"Packages might arrive out of order! Please make sure you received\n"
+"all packages before you attempt to unpack them!"
+msgstr "Pakkaukset saattavat saapua väärässä järjestyksessä! Varmistu, että\nvastaanotit kaikki pakkaukset ennen kuin yrität purkaa ne!"
+
+#: lib/gettor/i18n.py:188
+#, python-format
+msgid ""
+"It was successfully understood. Your request is currently being processed.\n"
+"Your package (%s) should arrive within the next ten minutes."
+msgstr "Sen ymmärtäminen onnistui. Pyytöäsi käsitellään parhaillaan. Pakkauksesi\n(%s) pitäisi saapua seuraavan kymmenen minuutin aikana."
+
+#: lib/gettor/i18n.py:191
+msgid ""
+"If it doesn't arrive, the package might be too big for your mail provider.\n"
+"Try resending the mail from a GMAIL.COM, YAHOO.CN or YAHOO.COM account."
+msgstr "Jos se ei saavu, pakkaus voi olla liian suuri sähköpostitarjoajallesi.\nYritä lähettää sähköpostiviesti uudelleen GMAIL.COM-, YAHOO.CN- tai\nYAHOO.COM-tililtä."
+
+#: lib/gettor/i18n.py:194
+msgid ""
+"Unfortunately we are currently experiencing problems and we can't fulfill\n"
+"your request right now. Please be patient as we try to resolve this issue."
+msgstr "Teknisten pulmien vuoksi emme voi valitettavasti vastata pyyntöösi juuri nyt. Yritämme korjata pulmaa, kärsivällisyyttä, kiitos.\n "
+
+#: lib/gettor/i18n.py:197
+msgid ""
+"Unfortunately there is no split package available for the package you\n"
+"requested. Please send us another package name or request the same package \n"
+"again, but remove the 'split' keyword. In that case we'll send you the whole \n"
+"package. Make sure this is what you want."
+msgstr "Valitettavasti pyytämästäsi pakkauksesta ei ole saatavilla split-pakkausta.\nLähetä meille toinen pakkausnimi tai pyydä sama pakkaus uudelleen,\nmutta poista ’split’-avainsana. Siinä tapauksessa lähetämme sinulle koko\npakkauksen. Varmista, että tämä on sitä mitä haluat."
+
+#: lib/gettor/i18n.py:202
+msgid ""
+"UNPACKING THE FILES\n"
+"==================="
+msgstr "PURETAAN TIEDOSTOJA\n==================="
+
+#: lib/gettor/i18n.py:205
+msgid ""
+"The easiest way to unpack the files you received is to install 7-Zip,\n"
+"a free file compression/uncompression tool. If it isn't installed on\n"
+"your computer yet, you can download it here:\n"
+"\n"
+" http://www.7-zip.org/"
+msgstr "Helpoiten vastaanottamiesi tiedostojen purku tapahtuu 7-Zip:a käyttäen,\nse on ilmainen tiedostojen pakkaus- ja purkuohjelma. Jos sitä ei ole vielä\nasennettu järjestelmääsi, voit ladata sen täältä:\n\nhttp://www.7-zip.org/"
+
+#: lib/gettor/i18n.py:211
+msgid ""
+"When 7-Zip is installed, you can open the .z archive you received from\n"
+"us by double-clicking on it."
+msgstr "Kun 7-Zip on asennettu, voit avata meiltä vastaanottamasi .z-arkiston\nkaksoisnapauttamalla sitä."
+
+#: lib/gettor/i18n.py:214
+msgid ""
+"An alternative way to get the .z files extraced is to rename them to\n"
+".zip. For example, if you recevied a file called \"windows.z\", rename it to \n"
+"\"windows.zip\". You should then be able to extract the archive with common \n"
+"file archiver programs that probably are already installed on your computer."
+msgstr "Vaihtoehtoinen tapa .z -tiedostojen purkamiseksi on nimetä ne uudelleen\n.zip-tarkentimella. Jos esimerkiksi vastaanotat tiedoston, jonka nimi on ”windows.z”,\nnimeä se uuudelleen nimellä ”windows.zip”. Sinun pitäisi kyetä purkamaan arkisto\ntavallisilla arkisto-ohjelmilla, joita on luultavasti jo asennettuna tietokoneellesi."
+
+#: lib/gettor/i18n.py:219
+msgid ""
+"Please reply to this mail, and tell me a single package name anywhere\n"
+"in your reply. Here's a short explanation of what these packages are:"
+msgstr "Vastaa tähän sähköpostiviestiin ja kerro minulle yksittäisen pakkauksen nimi\nmissä tahansa vastauksessasi. Tässä on lyhyt selitys siitä, että mitä nämä\npakkaukset ovat:"
+
+#: lib/gettor/i18n.py:222
+msgid ""
+"windows:\n"
+"The Tor Browser Bundle package for Windows operating systems. If you're \n"
+"running some version of Windows, like Windows XP, Windows Vista or \n"
+"Windows 7, this is the package you should get."
+msgstr "windows:\nThe Tor Browser Bundle-pakkaus Windows-käyttöjärjestelmille. Jos käytät jotain\nWindows-versiota, kuten Windows XP, Windows Vista tai Windows 7, sinun pitäisi\npyytää tämä pakkaus."
+
+#: lib/gettor/i18n.py:227
+msgid ""
+"macos-i386:\n"
+"The Tor Browser Bundle package for OS X, Intel CPU architecture. In \n"
+"general, newer Mac hardware will require you to use this package."
+msgstr "macos-i386:\nTor Browser Bundle-pakkaus OS X-käyttöjärjestelmälle, Intel-prosessoriarkkitehtuuri. Yleensä uudemmat Mac-tietokoneet vaativat tämän pakkauksen käyttöä."
+
+#: lib/gettor/i18n.py:231
+msgid ""
+"macos-ppc:\n"
+"This is an older installer (the \"Vidalia bundle\") for older Macs running\n"
+"OS X on PowerPC CPUs. Note that this package will be deprecated soon."
+msgstr "macos-ppc:\nTämä on vanhempi asennusohjelma (the \"Vidalia bundle\") vanhemmille\nPowerPC-suorittimella varustetuille Mac-tietokoneille, joissa on OS X.\nHuomioi että tämä arkisto merkitään pian vanhentuneeksi."
+
+#: lib/gettor/i18n.py:235
+msgid ""
+"linux-i386:\n"
+"The Tor Browser Bundle package for Linux, 32bit versions."
+msgstr "linux-i386:\nThe Tor Browser Bundle-paketti Linuxille, 32-bittisille versioille."
+
+#: lib/gettor/i18n.py:238
+msgid ""
+"Note that this package is rather large and needs your email provider to \n"
+"allow for attachments of about 30MB in size."
+msgstr "Huomaa, että tämä pakkaus on melko suuri ja tarvitsee sähköpostitarjoajan,\njoka sallii noin 30 megatavun kokoisen sähköpostiviestin liitetiedoston."
+
+#: lib/gettor/i18n.py:241
+msgid ""
+"linux-x86_64:\n"
+"The Tor Browser Bundle package for Linux, 64bit versions."
+msgstr "linux-x86_64:\nTor Browser Bundle-pakkaus Linux-käyttöjärjestelmälle, 64-bittisille versioille."
+
+#: lib/gettor/i18n.py:244
+msgid ""
+"obfs-windows:\n"
+"The Tor Obfsproxy Browser Bundle for Windows operating systems. If you need\n"
+"strong censorship circumvention and you are running some version of the \n"
+"Windows, like Windows XP, Windows Vista or Windows 7, this is the package\n"
+"you should get."
+msgstr "obfs-windows:\nTor Obfsproxy Browser Bundle Windows-käyttöjärjestelmille. Jos tarvitset\nvahvaa sensuroinnin kiertoa ja käytät jotain Windows-versiota, kuten Windows XP,\nWindows Vista tai Windows 7, sinun pitäisi pyytää tämä paketti."
+
+#: lib/gettor/i18n.py:250
+msgid ""
+"obfs-macos-i386:\n"
+"The Tor Obfsproxy Browser Bundle package for OS X, 32bit Intel CPU \n"
+"architecture."
+msgstr "obfs-macos-i386:\nTor Obfsproxy Browser Bundle-pakkaus OS X-käyttöjärjestelmälle, 32-bittinen Intel-prosessoriarkkitehtuuri."
+
+#: lib/gettor/i18n.py:254
+msgid ""
+"obfs-macos-x86_64:\n"
+"The Tor Obfsproxy Browser Bundle package for OS X, 64bit Intel CPU \n"
+"architecture."
+msgstr "obfs-macos-x86_64:\nTor Obfsproxy Browser Bundle-pakkaus OS X-käyttöjärjestelmälle, 64-bittinen Intel-prosessoriarkkitehtuuri."
+
+#: lib/gettor/i18n.py:258
+msgid ""
+"obfs-linux-i386:\n"
+"The Tor Obfsproxy Browser Bundle package for Linux, 32bit Intel CPU \n"
+"architecture."
+msgstr "obfs-linux-i386:\nTor Obfsproxy Browser Bundle-pakkaus Linux-käyttöjärjestelmälle, 32-bittinen Intel -prosessoriarkkitehtuuri."
+
+#: lib/gettor/i18n.py:262
+msgid ""
+"obfs-linux-x86_64:\n"
+"The Tor Obfsproxy Browser Bundle package for Linux, 64bit Intel CPU \n"
+"architecture."
+msgstr "obfs-linux-x86_64:\nTor Obfsproxy Browser Bundle-pakkaus Linux-käyttöjärjestelmälle, 64-bittinen Intel-prosessoriarkkitehtuuri."
+
+#: lib/gettor/i18n.py:266
+msgid ""
+"source:\n"
+"The Tor source code, for experts. Most users do not want this package."
+msgstr "source:\nTor-lähdekoodi asiantuntijoille. Useimmat käyttäjät eivät halua tätä pakkausta."
+
+#: lib/gettor/i18n.py:269
+msgid ""
+"FREQUENTLY ASKED QUESTIONS\n"
+"=========================="
+msgstr "USEIN KYSYTYT KYSYMYKSET\n=========================="
+
+#: lib/gettor/i18n.py:272
+msgid "What is Tor?"
+msgstr "Mikä Tor on?"
+
+#: lib/gettor/i18n.py:274
+msgid "The name \"Tor\" can refer to several different components."
+msgstr "Nimi ”Tor” voi viitata useisiin eri komponentteihin."
+
+#: lib/gettor/i18n.py:276
+msgid ""
+"The Tor software is a program you can run on your computer that helps \n"
+"keep you safe on the Internet. Tor protects you by bouncing your \n"
+"communications around a distributed network of relays run by volunteers \n"
+"all around the world: it prevents somebody watching your Internet connection \n"
+"from learning what sites you visit, and it prevents the sites you visit from \n"
+"learning your physical location. This set of volunteer relays is called the \n"
+"Tor network. You can read more about how Tor works here:\n"
+"\n"
+" https://www.torproject.org/about/overview.html.en"
+msgstr "Tor-ohjelmisto on tietokoneella suoritettava ohjelma, joka auttaa\nsuojaamaan sinua Internetissä. Tor suojaa sinua hyppyttämällä yhteyksiäsi\nhajautetussa vapaaehtoisten ylläpitämässä välitysverkossa kautta maailman:\nse estää ketään seuraamasta Internet-yhteyksiäsi saadakseen selville, että\nmillä webbisivulla vierailet, ja estää sivustoja, joilla vierailet, saamasta selville\nfyysisen sijaintisi. Vapaaehtoisten välitysverkkoa kutsutaan Tor-verkoksi.\nVoit lukea lisää Tor-koneistosta täältä:\n\nhttps://www.torproject.org/about/overview.html.en"
+
+#: lib/gettor/i18n.py:286
+msgid "What is the Tor Browser Bundle?"
+msgstr "Mikä on Tor Browser Bundle-pakkaus?"
+
+#: lib/gettor/i18n.py:288
+msgid ""
+"The Browser Bundle (TBB) is the package we recommend to most users. \n"
+"The bundle comes with everything you need to safely browse the Internet.\n"
+"Just extract it and run."
+msgstr "Browser Bundle (TBB) on pakkaus, jota suosittelemme useimmille käyttäjille. \nPakkauksen mukana tulee kaikki, jota tarvitset turvalliseen Internet-selailuun.\nVain pura se ja suorita."
+
+#: lib/gettor/i18n.py:292
+msgid "What package should I request?"
+msgstr "Mitä pakkausta minun pitäisi pyytää?"
+
+#: lib/gettor/i18n.py:294
+msgid ""
+"This depends on the operating system you use. For instance, if your\n"
+"operating system is Microsoft Windows, you should request \"windows\". Here\n"
+"is a short explanation of all packages to request and what operating \n"
+"systems there are suitable for:"
+msgstr "Tämä riippuu käyttämästäsi käyttöjärjestelmästä. Jos esimerkiksi\nkäyttöjärjestelmäsi on Microsoft Windows, sinun pitäisi pyytää ”windows”.\nTässä on lyhyt selitys kaikista pyydettävistä pakkauksista ja mihin\nkäyttöjärjestelmiin ne ovat sopivia:"
+
+#: lib/gettor/i18n.py:299
+msgid "How do I extract the file(s) you sent me?"
+msgstr "Miten puran minulle lähetetyt tiedosto(t)?"
+
+#: lib/gettor/i18n.py:301
+msgid "QUESTION:"
+msgstr "KYSYMYS:"
+
+#: lib/gettor/i18n.py:303
+msgid "ANSWER:"
+msgstr "VASTAUS:"
+
+#: lib/gettor/i18n.py:305
+#, python-format
+msgid ""
+"Sorry, but the package you requested (%s) is too large for your \n"
+"provider to accept as an attachment. Try using another provider that allows \n"
+"for larger email attachments. Or try one of the following mirrors:\n"
+"\n"
+" https://www.oignon.net/dist/torbrowser/\n"
+" https://tor.beme-it.de/dist/torbrowser/\n"
+" https://www.torservers.net/mirrors/torproject.org/dist/torbrowser/"
+msgstr "Pyytämäsi pakkaus (%s) on liian suuri, jotta sähköpostitarjoajasi\nhyväksyy sen liitetiedostona. Yritä toista sähköpostitarjoajaa, joka\nsallii suuremmat liitetiedostot. Tai yritä jotain seuraavista\npeilipalvelimista:\n\n https://www.oignon.net/dist/torbrowser/\n https://tor.beme-it.de/dist/torbrowser/\n https://www.torservers.net/mirrors/torproject.org/dist/torbrowser/"
1
0

19 Jul '14
commit cb1742598165fe1626f4df63b363c87e206a110c
Author: Translation commit bot <translation(a)torproject.org>
Date: Sat Jul 19 09:15:08 2014 +0000
Update translations for gettor
---
fi/gettor.po | 28 ++++++++++++++--------------
1 file changed, 14 insertions(+), 14 deletions(-)
diff --git a/fi/gettor.po b/fi/gettor.po
index 3e459e3..8531b42 100644
--- a/fi/gettor.po
+++ b/fi/gettor.po
@@ -15,7 +15,7 @@ msgstr ""
"Project-Id-Version: The Tor Project\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-01-19 13:40+0100\n"
-"PO-Revision-Date: 2014-07-19 08:43+0000\n"
+"PO-Revision-Date: 2014-07-19 09:11+0000\n"
"Last-Translator: karvjorm <karvonen.jorma(a)gmail.com>\n"
"Language-Team: Finnish (http://www.transifex.com/projects/p/torproject/language/fi/)\n"
"MIME-Version: 1.0\n"
@@ -75,7 +75,7 @@ msgid ""
" obfs-linux-i386\n"
" obfs-linux-x86_64\n"
" source"
-msgstr ""
+msgstr "Lähetän sinulle Tor-pakkauksen, jos kerrot minulle, minkä\nhaluat. Valitse yksi seuraavista pakkausnimistä:\n\n windows\n macos-i386\n macos-ppc\n linux-i386\n linux-x86_64\n obfs-windows\n obfs-macos-i386\n obfs-macos-x86_64\n obfs-linux-i386\n obfs-linux-x86_64\n source"
#: lib/gettor/i18n.py:61
msgid ""
@@ -87,7 +87,7 @@ msgstr "Vastaa tähän sähköpostiviestiin ja kerro yksittäisen pakkauksen nim
msgid ""
"OBTAINING LOCALIZED VERSIONS OF TOR\n"
"==================================="
-msgstr "HAETAAN ALUEELLINEN VERSIO TOR-OHJELMASTA\n==================================="
+msgstr "HAETAAN LOKALISOITU VERSIO TOR-OHJELMASTA\n==================================="
#: lib/gettor/i18n.py:67
msgid ""
@@ -272,7 +272,7 @@ msgid ""
"Another censorship circumvention tool you can request from GetTor is\n"
"the Tor Obfsproxy Browser Bundle. Please read the package descriptions for\n"
"which package you should request to receive this."
-msgstr ""
+msgstr "Toinen sensuroinnin kiertotyökalu, jonka voit pyytää GetTor:sta on\nTor Obfsproxy Browser Bundle-pakkaus. Lue tämän vastaanottamiseksi\npakkauskuvaukset, jotta tietäisit mitä pakkausta pyydät."
#: lib/gettor/i18n.py:179
msgid ""
@@ -281,7 +281,7 @@ msgid ""
"all split files to be received by you before you can save them all\n"
"into the same directory and unpack them by double-clicking the\n"
"first file."
-msgstr ""
+msgstr "TÄRKEÄ HUOMAUTUS:\nKoska tämä on osa split-tiedostopyyntöä, sinun on odotettava,\nkunnes kaikki split-tiedostot on vastaanotettu ennen kuin voit\ntallentaa ne kaikki samaan kansioon ja purkaa ne\nkaksoisnapsauttamalla ensimmäistä tiedostoa."
#: lib/gettor/i18n.py:185
msgid ""
@@ -314,7 +314,7 @@ msgid ""
"requested. Please send us another package name or request the same package \n"
"again, but remove the 'split' keyword. In that case we'll send you the whole \n"
"package. Make sure this is what you want."
-msgstr ""
+msgstr "Valitettavasti pyytämästäsi pakkauksesta ei ole saatavilla split-pakkausta.\nLähetä meille toinen pakkausnimi tai pyydä sama pakkaus uudelleen,\nmutta poista ’split’-avainsana. Siinä tapauksessa lähetämme sinulle koko\npakkauksen. Varmista, että tämä on sitä mitä haluat."
#: lib/gettor/i18n.py:202
msgid ""
@@ -343,13 +343,13 @@ msgid ""
".zip. For example, if you recevied a file called \"windows.z\", rename it to \n"
"\"windows.zip\". You should then be able to extract the archive with common \n"
"file archiver programs that probably are already installed on your computer."
-msgstr ""
+msgstr "Vaihtoehtoinen tapa .z -tiedostojen purkamiseksi on nimetä ne uudelleen\n.zip-tarkentimella. Jos esimerkiksi vastaanotat tiedoston, jonka nimi on ”windows.z”,\nnimeä se uuudelleen nimellä ”windows.zip”. Sinun pitäisi kyetä purkamaan arkisto\ntavallisilla arkisto-ohjelmilla, joita on luultavasti jo asennettuna tietokoneellesi."
#: lib/gettor/i18n.py:219
msgid ""
"Please reply to this mail, and tell me a single package name anywhere\n"
"in your reply. Here's a short explanation of what these packages are:"
-msgstr ""
+msgstr "Vastaa tähän sähköpostiviestiin ja kerro minulle yksittäisen pakkauksen nimi\nmissä tahansa vastauksessasi. Tässä on lyhyt selitys siitä, että mitä nämä\npakkaukset ovat:"
#: lib/gettor/i18n.py:222
msgid ""
@@ -357,14 +357,14 @@ msgid ""
"The Tor Browser Bundle package for Windows operating systems. If you're \n"
"running some version of Windows, like Windows XP, Windows Vista or \n"
"Windows 7, this is the package you should get."
-msgstr ""
+msgstr "windows:\nThe Tor Browser Bundle-pakkaus Windows-käyttöjärjestelmille. Jos käytät jotain\nWindows-versiota, kuten Windows XP, Windows Vista tai Windows 7, sinun pitäisi\npyytää tämä pakkaus."
#: lib/gettor/i18n.py:227
msgid ""
"macos-i386:\n"
"The Tor Browser Bundle package for OS X, Intel CPU architecture. In \n"
"general, newer Mac hardware will require you to use this package."
-msgstr ""
+msgstr "macos-i386:\nTor Browser Bundle-pakkaus OS X-käyttöjärjestelmälle, Intel-prosessoriarkkitehtuuri. Yleensä uudemmat Mac-tietokoneet vaativat tämän pakkauksen käyttöä."
#: lib/gettor/i18n.py:231
msgid ""
@@ -383,7 +383,7 @@ msgstr "linux-i386:\nThe Tor Browser Bundle-paketti Linuxille, 32-bittisille ver
msgid ""
"Note that this package is rather large and needs your email provider to \n"
"allow for attachments of about 30MB in size."
-msgstr ""
+msgstr "Huomaa, että tämä pakkaus on melko suuri ja tarvitsee sähköpostitarjoajan,\njoka sallii noin 30 megatavun kokoisen sähköpostiviestin liitetiedoston."
#: lib/gettor/i18n.py:241
msgid ""
@@ -398,7 +398,7 @@ msgid ""
"strong censorship circumvention and you are running some version of the \n"
"Windows, like Windows XP, Windows Vista or Windows 7, this is the package\n"
"you should get."
-msgstr ""
+msgstr "obfs-windows:\nTor Obfsproxy Browser Bundle Windows-käyttöjärjestelmille. Jos tarvitset\nvahvaa sensuroinnin kiertoa ja käytät jotain Windows-versiota, kuten Windows XP,\nWindows Vista tai Windows 7, sinun pitäisi pyytää tämä paketti."
#: lib/gettor/i18n.py:250
msgid ""
@@ -463,7 +463,7 @@ msgstr "Tor-ohjelmisto on tietokoneella suoritettava ohjelma, joka auttaa\nsuoja
#: lib/gettor/i18n.py:286
msgid "What is the Tor Browser Bundle?"
-msgstr "Mikä on Tor Browser Bundle?"
+msgstr "Mikä on Tor Browser Bundle-pakkaus?"
#: lib/gettor/i18n.py:288
msgid ""
@@ -506,4 +506,4 @@ msgid ""
" https://www.oignon.net/dist/torbrowser/\n"
" https://tor.beme-it.de/dist/torbrowser/\n"
" https://www.torservers.net/mirrors/torproject.org/dist/torbrowser/"
-msgstr ""
+msgstr "Pyytämäsi pakkaus (%s) on liian suuri, jotta sähköpostitarjoajasi\nhyväksyy sen liitetiedostona. Yritä toista sähköpostitarjoajaa, joka\nsallii suuremmat liitetiedostot. Tai yritä jotain seuraavista\npeilipalvelimista:\n\n https://www.oignon.net/dist/torbrowser/\n https://tor.beme-it.de/dist/torbrowser/\n https://www.torservers.net/mirrors/torproject.org/dist/torbrowser/"
1
0

19 Jul '14
commit fa7f66d198a38dfd0b2c7d6b9b2ee8ccc1ed5c97
Author: Translation commit bot <translation(a)torproject.org>
Date: Sat Jul 19 08:45:07 2014 +0000
Update translations for gettor
---
fi/gettor.po | 28 ++++++++++++++--------------
1 file changed, 14 insertions(+), 14 deletions(-)
diff --git a/fi/gettor.po b/fi/gettor.po
index febcc55..3e459e3 100644
--- a/fi/gettor.po
+++ b/fi/gettor.po
@@ -15,7 +15,7 @@ msgstr ""
"Project-Id-Version: The Tor Project\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-01-19 13:40+0100\n"
-"PO-Revision-Date: 2014-07-19 08:14+0000\n"
+"PO-Revision-Date: 2014-07-19 08:43+0000\n"
"Last-Translator: karvjorm <karvonen.jorma(a)gmail.com>\n"
"Language-Team: Finnish (http://www.transifex.com/projects/p/torproject/language/fi/)\n"
"MIME-Version: 1.0\n"
@@ -57,7 +57,7 @@ msgstr "(Pahoittelemme, jos tämä sähköposti on lähetetty pyytämättänne.
msgid ""
"If you have any questions or it doesn't work, you can contact a\n"
"human at this support email address: help(a)rt.torproject.org"
-msgstr ""
+msgstr "Jos sinulla on mitään kysymyksiä tai ohjelma ei toimi, voit ottaa yhteyttä\nhenkilökohtaisesti tämän tukisähköpostiosoitteen kautta:\nhelp@rt.torproject.org"
#: lib/gettor/i18n.py:46
msgid ""
@@ -294,13 +294,13 @@ msgstr "Pakkaukset saattavat saapua väärässä järjestyksessä! Varmistu, ett
msgid ""
"It was successfully understood. Your request is currently being processed.\n"
"Your package (%s) should arrive within the next ten minutes."
-msgstr ""
+msgstr "Sen ymmärtäminen onnistui. Pyytöäsi käsitellään parhaillaan. Pakkauksesi\n(%s) pitäisi saapua seuraavan kymmenen minuutin aikana."
#: lib/gettor/i18n.py:191
msgid ""
"If it doesn't arrive, the package might be too big for your mail provider.\n"
"Try resending the mail from a GMAIL.COM, YAHOO.CN or YAHOO.COM account."
-msgstr ""
+msgstr "Jos se ei saavu, pakkaus voi olla liian suuri sähköpostitarjoajallesi.\nYritä lähettää sähköpostiviesti uudelleen GMAIL.COM-, YAHOO.CN- tai\nYAHOO.COM-tililtä."
#: lib/gettor/i18n.py:194
msgid ""
@@ -329,7 +329,7 @@ msgid ""
"your computer yet, you can download it here:\n"
"\n"
" http://www.7-zip.org/"
-msgstr "Helpoiten vastaanottamiesi tiedostojen purku tapahtuu 7-Zip:a käyttäen, se on ilmainen tiedostojen pakkaus- ja purkuohjelma. Jos sitä ei ole vielä asennettu järjestelmääsi,\nvoit ladata sen täältä:\n\nhttp://www.7-zip.org/"
+msgstr "Helpoiten vastaanottamiesi tiedostojen purku tapahtuu 7-Zip:a käyttäen,\nse on ilmainen tiedostojen pakkaus- ja purkuohjelma. Jos sitä ei ole vielä\nasennettu järjestelmääsi, voit ladata sen täältä:\n\nhttp://www.7-zip.org/"
#: lib/gettor/i18n.py:211
msgid ""
@@ -371,13 +371,13 @@ msgid ""
"macos-ppc:\n"
"This is an older installer (the \"Vidalia bundle\") for older Macs running\n"
"OS X on PowerPC CPUs. Note that this package will be deprecated soon."
-msgstr "macos-ppc:\nTämä on vanhempi asennusohjelma (the \"Vidalia bundle\") vanhemmille\nPowerPC-suorittimella varustetuille Mac-tietokoneille, joissa on OS X.\nHuomioi että tämä arkisto merkitään vanhaksi pian."
+msgstr "macos-ppc:\nTämä on vanhempi asennusohjelma (the \"Vidalia bundle\") vanhemmille\nPowerPC-suorittimella varustetuille Mac-tietokoneille, joissa on OS X.\nHuomioi että tämä arkisto merkitään pian vanhentuneeksi."
#: lib/gettor/i18n.py:235
msgid ""
"linux-i386:\n"
"The Tor Browser Bundle package for Linux, 32bit versions."
-msgstr "linux-i386:\nThe Tor Browser Bundle-paketti Linuxille, 32bit versioille."
+msgstr "linux-i386:\nThe Tor Browser Bundle-paketti Linuxille, 32-bittisille versioille."
#: lib/gettor/i18n.py:238
msgid ""
@@ -389,7 +389,7 @@ msgstr ""
msgid ""
"linux-x86_64:\n"
"The Tor Browser Bundle package for Linux, 64bit versions."
-msgstr ""
+msgstr "linux-x86_64:\nTor Browser Bundle-pakkaus Linux-käyttöjärjestelmälle, 64-bittisille versioille."
#: lib/gettor/i18n.py:244
msgid ""
@@ -405,34 +405,34 @@ msgid ""
"obfs-macos-i386:\n"
"The Tor Obfsproxy Browser Bundle package for OS X, 32bit Intel CPU \n"
"architecture."
-msgstr ""
+msgstr "obfs-macos-i386:\nTor Obfsproxy Browser Bundle-pakkaus OS X-käyttöjärjestelmälle, 32-bittinen Intel-prosessoriarkkitehtuuri."
#: lib/gettor/i18n.py:254
msgid ""
"obfs-macos-x86_64:\n"
"The Tor Obfsproxy Browser Bundle package for OS X, 64bit Intel CPU \n"
"architecture."
-msgstr ""
+msgstr "obfs-macos-x86_64:\nTor Obfsproxy Browser Bundle-pakkaus OS X-käyttöjärjestelmälle, 64-bittinen Intel-prosessoriarkkitehtuuri."
#: lib/gettor/i18n.py:258
msgid ""
"obfs-linux-i386:\n"
"The Tor Obfsproxy Browser Bundle package for Linux, 32bit Intel CPU \n"
"architecture."
-msgstr ""
+msgstr "obfs-linux-i386:\nTor Obfsproxy Browser Bundle-pakkaus Linux-käyttöjärjestelmälle, 32-bittinen Intel -prosessoriarkkitehtuuri."
#: lib/gettor/i18n.py:262
msgid ""
"obfs-linux-x86_64:\n"
"The Tor Obfsproxy Browser Bundle package for Linux, 64bit Intel CPU \n"
"architecture."
-msgstr ""
+msgstr "obfs-linux-x86_64:\nTor Obfsproxy Browser Bundle-pakkaus Linux-käyttöjärjestelmälle, 64-bittinen Intel-prosessoriarkkitehtuuri."
#: lib/gettor/i18n.py:266
msgid ""
"source:\n"
"The Tor source code, for experts. Most users do not want this package."
-msgstr ""
+msgstr "source:\nTor-lähdekoodi asiantuntijoille. Useimmat käyttäjät eivät halua tätä pakkausta."
#: lib/gettor/i18n.py:269
msgid ""
@@ -459,7 +459,7 @@ msgid ""
"Tor network. You can read more about how Tor works here:\n"
"\n"
" https://www.torproject.org/about/overview.html.en"
-msgstr "Tor ohjelmisto on ohjelma, jonka voit suorittaa tietokoneella, joka auttaa \npitämään sinut turvassa Internetissä. Tor suojaa sinua pomppimalla \nviestinnän ympärille jaetulla tiedotuspisteverkon vapaaehtoisvoimin \nympäri maailmaa: se estää jonkun katselemasta internet-yhteyttäsi. \n ja estää oppimasta millaisilla sivustoilla vierailet, ja se estää web-sivuilla olevia \n fyysisen sijainnin jäljityksiä. Tämä joukko vapaaehtoisten suorittamat releet ovat \nTor-verkko. Voit lukea lisää siitä, miten Tor toimii tässä: https://www.torproject.org/about/overview.html.en"
+msgstr "Tor-ohjelmisto on tietokoneella suoritettava ohjelma, joka auttaa\nsuojaamaan sinua Internetissä. Tor suojaa sinua hyppyttämällä yhteyksiäsi\nhajautetussa vapaaehtoisten ylläpitämässä välitysverkossa kautta maailman:\nse estää ketään seuraamasta Internet-yhteyksiäsi saadakseen selville, että\nmillä webbisivulla vierailet, ja estää sivustoja, joilla vierailet, saamasta selville\nfyysisen sijaintisi. Vapaaehtoisten välitysverkkoa kutsutaan Tor-verkoksi.\nVoit lukea lisää Tor-koneistosta täältä:\n\nhttps://www.torproject.org/about/overview.html.en"
#: lib/gettor/i18n.py:286
msgid "What is the Tor Browser Bundle?"
1
0

19 Jul '14
commit 3467a68efec87b8ba7d70965da4d98420c470ce4
Author: Translation commit bot <translation(a)torproject.org>
Date: Sat Jul 19 08:15:05 2014 +0000
Update translations for gettor
---
fi/gettor.po | 40 ++++++++++++++++++++--------------------
1 file changed, 20 insertions(+), 20 deletions(-)
diff --git a/fi/gettor.po b/fi/gettor.po
index 499a7c8..febcc55 100644
--- a/fi/gettor.po
+++ b/fi/gettor.po
@@ -15,7 +15,7 @@ msgstr ""
"Project-Id-Version: The Tor Project\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-01-19 13:40+0100\n"
-"PO-Revision-Date: 2014-07-19 07:44+0000\n"
+"PO-Revision-Date: 2014-07-19 08:14+0000\n"
"Last-Translator: karvjorm <karvonen.jorma(a)gmail.com>\n"
"Language-Team: Finnish (http://www.transifex.com/projects/p/torproject/language/fi/)\n"
"MIME-Version: 1.0\n"
@@ -37,7 +37,7 @@ msgid ""
"Unfortunately, we won't answer you at this address. You should make\n"
"an account with GMAIL.COM, YAHOO.COM or YAHOO.CN and send the mail from\n"
"one of those."
-msgstr "Ikävä kyllä emme vastaa sinulle tähän osoitteeseen. Sinulla tulee olla GMAIL.COM, YAHOO.COM tai YAHOO.CN osoite ja lähettää viesti siitä."
+msgstr "Ikävä kyllä emme vastaa sinulle tähän osoitteeseen. Sinun pitäisi luoda\nGMAIL.COM-, YAHOO.COM- tai YAHOO.CN-tili ja lähettää sähköpostiviesti\nsiitä osoitteesta."
#: lib/gettor/i18n.py:35
msgid ""
@@ -81,7 +81,7 @@ msgstr ""
msgid ""
"Please reply to this mail, and tell me a single package name anywhere \n"
"in the body of your email."
-msgstr ""
+msgstr "Vastaa tähän sähköpostiviestiin ja kerro yksittäisen pakkauksen nimi\nmissä tahansa sähköpostiviestisi runko-osassa."
#: lib/gettor/i18n.py:64
msgid ""
@@ -95,14 +95,14 @@ msgid ""
"language you want in the address you send the mail to:\n"
"\n"
" gettor+fa(a)torproject.org"
-msgstr "Jotta saat torin version käännettyä omalla kielellesi, tai kielen jonka haluat lähetä se kieli jonka haluat osoitteeseen: gettor+fa(a)torproject.org"
+msgstr "Saadaksesi omalle kielellesi käännetyn Tor-version, määritä haluamasi kieli osoitteessa, johon lähetät sähköpostiviestin:\n\ngettor+fa@torproject.org"
#: lib/gettor/i18n.py:72
msgid ""
"This example will give you the requested package in a localized\n"
"version for Farsi (Persian). Check below for a list of supported language\n"
"codes. "
-msgstr "Tämä esimerkki antaa sinulle pyydetyn arkiston alueellisena\nversiona suomeksi (finnish). Tarkista alempana sijaitsevasta listasta tuetut kieli-\nkoodit."
+msgstr "Tämä esimerkki antaa sinulle pyydetyn arkiston alueellisena\nversiona farsin kielellä (Iran). Tarkista alempana sijaitsevasta\nluettelosta tuetut kielikoodit."
#: lib/gettor/i18n.py:76
msgid " List of supported locales:"
@@ -151,7 +151,7 @@ msgid ""
" \n"
" windows\n"
" split"
-msgstr ""
+msgstr "Sisällytä yksinkertaisesti avainsana ’split’ uudelle riville yksinään (tämä\nosa on tärkeää!) kuten:\n\nwindows\nsplit"
#: lib/gettor/i18n.py:107
msgid ""
@@ -163,38 +163,38 @@ msgstr "Tämän tekstin lähettäminen sähköpostiviestissä GetTor-osoitteesee
msgid ""
"After having received all parts, you need to re-assemble them to \n"
"one package again. This is done as follows:"
-msgstr "Kun olet vastaanottanut kaikki osatiedostot, sinun on koottava ne jälleen yhdeksi tiedostoksi. Se tapahtuu näin:\n\n "
+msgstr "Kun olet vastaanottanut kaikki osatiedostot, sinun on koottava ne\njälleen yhdeksi tiedostoksi. Se tapahtuu näin:\n\n "
#: lib/gettor/i18n.py:113
msgid "1.) Save all received attachments into one folder on your disk."
-msgstr "1.) Tallenna kaikki liitteet samaan kansioon kovalevylläsi."
+msgstr "1.) Tallenna kaikki liitteet samaan kansioon levyasemassasi."
#: lib/gettor/i18n.py:115
msgid ""
"2.) Unzip all files ending in \".z\". If you saved all attachments to\n"
"a fresh folder before, simply unzip all files in that folder. If you don't\n"
"know how to unzip the .z files, please see the UNPACKING THE FILES section."
-msgstr ""
+msgstr "2.) Pura kaikki tiedostot, jotka päättyvä tarkentimeen \".z\". Jos olet\ntallentanut kaikki liitteet puhtaaseen kansioon aiemmin, pura kaikki\ntiedostot yksinkertaisesti tuohon kansioon. Jos et tiedä, kuinka\n.z-tiedostoja puretaan, katso UNPACKING THE FILES-kappaletta."
#: lib/gettor/i18n.py:119
msgid ""
"3.) Verify all files as described in the mail you received with \n"
"each package. (gpg --verify)"
-msgstr "3.) Tarkista kaikki tiedostot jokaisen paketin mukana tulleen sähköpostin ohjeiden mukaisesti. (gpg --verify)"
+msgstr "3.) Todenna kaikki tiedostot jokaisen paketin mukana tulleen sähköpostiviestin\nohjeiden mukaisesti. (gpg --verify)"
#: lib/gettor/i18n.py:122
msgid ""
"4.) Now unpack the multi-volume archive into one file by double-\n"
"clicking the file ending in \"..split.part01.exe\". This should start the \n"
"process automatically."
-msgstr ""
+msgstr "4.) Pura nyt moniosainen arkisto yhdeksi tiedostoksi\nkaksoisnapsauttamalla tiedostoa, jonka lopussa lukee\n”..split.part01.exe”. Tämän pitäisi aloittaa prosessi\nautomaattisesti."
#: lib/gettor/i18n.py:126
msgid ""
"5.) After unpacking is finished, you should find a newly created \n"
"\".exe\" file in your destination folder. Simply doubleclick\n"
"that and Tor Browser Bundle should start within a few seconds."
-msgstr "5.) Kun paketit on purettu, löydät uuden .exe -tiedoston kohdekansiosta. Tor Browser Bundle käynnistyy tuplaklikkaamalla tiedostoa."
+msgstr "5.) Kun paketit on purettu, löydät uuden ”.exe” -tiedoston kohdekansiosta.\nTor Browser Bundle käynnistyy tiedoston kaksoisnapsautuksella."
#: lib/gettor/i18n.py:130
msgid "6.) That's it. You're done. Thanks for using Tor and have fun!"
@@ -210,7 +210,7 @@ msgstr "TUKI\n======="
msgid ""
"Here's your requested software as a zip file. Please unzip the\n"
"package and verify the signature."
-msgstr "Tässä on pyytämäsi ohjelmisto zip-tiedostona. Pura \npakattu tiedosto ja tarkista allekirjoitus."
+msgstr "Tässä on pyytämäsi ohjelmisto zip-tiedostona. Pura \npakattu tiedosto ja todenna allekirjoitus."
#: lib/gettor/i18n.py:141
msgid ""
@@ -220,14 +220,14 @@ msgid ""
"tool as follows after unpacking the zip file:\n"
"\n"
" gpg --verify tor-browser-1.3.24_en-US.exe.asc tor-browser-1.3.24_en-US.exe"
-msgstr ""
+msgstr "TODENNA ALLEKIRJOITUS\n================\nJos tietokoneessasi on asennettuna GnuPG, käytä gpg-komentorivityökalua\nseuraavalla tavalla zip-tiedostn purkamiseksi:\n\ngpg --verify tor-browser-1.3.24_en-US.exe.asc tor-browser-1.3.24_en-US.exe"
#: lib/gettor/i18n.py:148
msgid ""
"The output should look somewhat like this:\n"
"\n"
" gpg: Good signature from 'Erinn Clark <...>'"
-msgstr ""
+msgstr "Tulosteen pitäisi näyttää suunnilleen tältä:\n\ngpg: Good signature from 'Erinn Clark <...>'"
#: lib/gettor/i18n.py:152
msgid ""
@@ -235,7 +235,7 @@ msgid ""
"a graphical user interface for GnuPG on this website:\n"
"\n"
" http://www.gnupg.org/related_software/frontends.html"
-msgstr ""
+msgstr "Jos komentorivityökalujen käyttö ei ole sinulle tuttua, yritä\netsiä graafista käyttöliittymä GnuPG-ohjelmalle tältä\nwebbisivulta:\n\nhttp://www.gnupg.org/related_software/frontends.html"
#: lib/gettor/i18n.py:157
msgid ""
@@ -251,7 +251,7 @@ msgid ""
"is no complete public list of them, even if your ISP is filtering\n"
"connections to all the known Tor relays, they probably won't be able\n"
"to block all the bridges."
-msgstr "Jos internetyhteyden tarjoajasi estää pääsyn Tor-verkkoon, saatat\ntarvita siltavälittimen. Siltavälittimet (eng. \"bridges\") ovat Tor välittimiä,\njoita ei ole listattu Tor-päähakemistossa. Koska niistä ei ole täydellistä\nlistaa olemassa, internet palveluntarjoajat eivät ehkä pysty estämään\nkaikkia siltavälittimiä."
+msgstr "Jos internetyhteyden tarjoajasi estää pääsyn Tor-verkkoon, saatat\ntarvita siltavälittimen. Siltavälittimet (eng. \"bridges\") ovat Tor-välittimiä,\njoita ei ole listattu Tor-päähakemistossa. Koska niistä ei ole täydellistä\nlistaa olemassa, internet-palveluntarjoajat eivät ehkä pysty estämään\nkaikkia siltavälittimiä."
#: lib/gettor/i18n.py:167
msgid ""
@@ -259,13 +259,13 @@ msgid ""
"in the body of the email to the following email address:\n"
"\n"
" bridges(a)torproject.org"
-msgstr ""
+msgstr "Voit saada sillat lähettämällä sähköpostiviestin, joka sisältää \"get bridges\"\nsähköpostiviestin runko-osassa seuraavaan sähköpostiosoitteeseen:\n\nbridges@torproject.org"
#: lib/gettor/i18n.py:172
msgid ""
"It is also possible to fetch bridges with a web browser at the following\n"
"url: https://bridges.torproject.org/"
-msgstr "Voit myös pyytää listan välittimistä selaimellasi seuraavasta osoitteesta\nhttps://bridges.torproject.org/\n\n "
+msgstr "Voit myös pyytää luettelon välittimistä selaimellasi seuraavasta osoitteesta\nhttps://bridges.torproject.org/\n\n "
#: lib/gettor/i18n.py:175
msgid ""
@@ -287,7 +287,7 @@ msgstr ""
msgid ""
"Packages might arrive out of order! Please make sure you received\n"
"all packages before you attempt to unpack them!"
-msgstr ""
+msgstr "Pakkaukset saattavat saapua väärässä järjestyksessä! Varmistu, että\nvastaanotit kaikki pakkaukset ennen kuin yrität purkaa ne!"
#: lib/gettor/i18n.py:188
#, python-format
1
0

19 Jul '14
commit 79d1bec3d03c8a240ab4ab66435f68660f7950e2
Author: Translation commit bot <translation(a)torproject.org>
Date: Sat Jul 19 07:45:08 2014 +0000
Update translations for gettor
---
fi/gettor.po | 18 +++++++++---------
1 file changed, 9 insertions(+), 9 deletions(-)
diff --git a/fi/gettor.po b/fi/gettor.po
index f86205b..499a7c8 100644
--- a/fi/gettor.po
+++ b/fi/gettor.po
@@ -15,8 +15,8 @@ msgstr ""
"Project-Id-Version: The Tor Project\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-01-19 13:40+0100\n"
-"PO-Revision-Date: 2014-07-08 21:40+0000\n"
-"Last-Translator: Vesa Nilakari\n"
+"PO-Revision-Date: 2014-07-19 07:44+0000\n"
+"Last-Translator: karvjorm <karvonen.jorma(a)gmail.com>\n"
"Language-Team: Finnish (http://www.transifex.com/projects/p/torproject/language/fi/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -44,7 +44,7 @@ msgid ""
"We only process requests from email services that support \"DKIM\",\n"
"which is an email feature that lets us verify that the address in the\n"
"\"From\" line is actually the one who sent the mail."
-msgstr "Käsittelemme pyyntöjä vain sähköpostipalveluista, jotka tukevat DKIM-ominaisuutta.\nSe on sähköpostin ominaisuus, joka varmistaa, että viestin lähettäjänä näkyy sen todellinen lähettäjä."
+msgstr "Käsittelemme pyyntöjä vain sähköpostipalveluista, jotka tukevat ”DKIM”-ominaisuutta.\nSe on sähköpostin ominaisuus, joka varmistaa, että viestin lähettäjänä näkyy sen\ntodellinen lähettäjä."
#: lib/gettor/i18n.py:39
msgid ""
@@ -157,7 +157,7 @@ msgstr ""
msgid ""
"Sending this text in an email to GetTor will cause it to send you \n"
"the Tor Browser Bundle in a number of 1,4MB attachments."
-msgstr "Lähettämällä tämän tekstin sähköpostiin (ALKU)"
+msgstr "Tämän tekstin lähettäminen sähköpostiviestissä GetTor-osoitteeseen\naiheuttaa sen, että sinulle lähetetään Tor Browser Bundle-pakkaus\nlukuisina 1,4 megatavun kokoisina sähköpostiliitteinä."
#: lib/gettor/i18n.py:110
msgid ""
@@ -446,7 +446,7 @@ msgstr "Mikä Tor on?"
#: lib/gettor/i18n.py:274
msgid "The name \"Tor\" can refer to several different components."
-msgstr ""
+msgstr "Nimi ”Tor” voi viitata useisiin eri komponentteihin."
#: lib/gettor/i18n.py:276
msgid ""
@@ -470,11 +470,11 @@ msgid ""
"The Browser Bundle (TBB) is the package we recommend to most users. \n"
"The bundle comes with everything you need to safely browse the Internet.\n"
"Just extract it and run."
-msgstr ""
+msgstr "Browser Bundle (TBB) on pakkaus, jota suosittelemme useimmille käyttäjille. \nPakkauksen mukana tulee kaikki, jota tarvitset turvalliseen Internet-selailuun.\nVain pura se ja suorita."
#: lib/gettor/i18n.py:292
msgid "What package should I request?"
-msgstr ""
+msgstr "Mitä pakkausta minun pitäisi pyytää?"
#: lib/gettor/i18n.py:294
msgid ""
@@ -482,11 +482,11 @@ msgid ""
"operating system is Microsoft Windows, you should request \"windows\". Here\n"
"is a short explanation of all packages to request and what operating \n"
"systems there are suitable for:"
-msgstr ""
+msgstr "Tämä riippuu käyttämästäsi käyttöjärjestelmästä. Jos esimerkiksi\nkäyttöjärjestelmäsi on Microsoft Windows, sinun pitäisi pyytää ”windows”.\nTässä on lyhyt selitys kaikista pyydettävistä pakkauksista ja mihin\nkäyttöjärjestelmiin ne ovat sopivia:"
#: lib/gettor/i18n.py:299
msgid "How do I extract the file(s) you sent me?"
-msgstr "Miten puran tiedoston(t) jotka lähetätte minulle?"
+msgstr "Miten puran minulle lähetetyt tiedosto(t)?"
#: lib/gettor/i18n.py:301
msgid "QUESTION:"
1
0

[translation/bridgedb_completed] Update translations for bridgedb_completed
by translation@torproject.org 19 Jul '14
by translation@torproject.org 19 Jul '14
19 Jul '14
commit 1ad1f73bfbc4a0158beda7dd21c3f8deb934c716
Author: Translation commit bot <translation(a)torproject.org>
Date: Sat Jul 19 07:45:05 2014 +0000
Update translations for bridgedb_completed
---
fi/LC_MESSAGES/bridgedb.po | 362 +++++++++++++++++++++++++++++++++++++-------
1 file changed, 310 insertions(+), 52 deletions(-)
diff --git a/fi/LC_MESSAGES/bridgedb.po b/fi/LC_MESSAGES/bridgedb.po
index 356eaa7..e859271 100644
--- a/fi/LC_MESSAGES/bridgedb.po
+++ b/fi/LC_MESSAGES/bridgedb.po
@@ -1,17 +1,18 @@
# Translations template for BridgeDB.
-# Copyright (C) 2013 ORGANIZATION
+# Copyright (C) 2014 'The Tor Project, Inc.'
# This file is distributed under the same license as the BridgeDB project.
#
# Translators:
-# Translators:
# karvjorm <karvonen.jorma(a)gmail.com>, 2014
-# kalossi <ossikallunki(a)gmail.com>, 2013
+# Ossi Kallunki <ossikallunki(a)gmail.com>, 2013
+# viljaminojonen <Viljami.Nojonen(a)live.com>, 2014
+# Finland355 <ville.ehrukainen2(a)gmail.com>, 2014
msgid ""
msgstr ""
"Project-Id-Version: The Tor Project\n"
-"Report-Msgid-Bugs-To: https://trac.torproject.org/projects/tor\n"
-"POT-Creation-Date: 2013-03-27 21:41+0000\n"
-"PO-Revision-Date: 2014-02-16 11:50+0000\n"
+"Report-Msgid-Bugs-To: 'https://trac.torproject.org/projects/tor/newticket?component=BridgeDB&keywo…'\n"
+"POT-Creation-Date: 2014-06-06 21:46+0000\n"
+"PO-Revision-Date: 2014-07-19 07:40+0000\n"
"Last-Translator: karvjorm <karvonen.jorma(a)gmail.com>\n"
"Language-Team: Finnish (http://www.transifex.com/projects/p/torproject/language/fi/)\n"
"MIME-Version: 1.0\n"
@@ -21,82 +22,339 @@ msgstr ""
"Language: fi\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: lib/bridgedb/templates/base.html:33
+#. TRANSLATORS: Please DO NOT translate the following words and/or phrases in
+#. any string (regardless of capitalization and/or punctuation):
+#. "BridgeDB"
+#. "pluggable transport"
+#. "pluggable transports"
+#. "obfs2"
+#. "obfs3"
+#. "scramblesuit"
+#. "fteproxy"
+#. "Tor"
+#. "Tor Browser"
+#: lib/bridgedb/HTTPServer.py:121
+msgid "Sorry! Something went wrong with your request."
+msgstr "Pyyntösi epäonnistui jostain syystä."
+
+#: lib/bridgedb/strings.py:18
+msgid "[This is an automated message; please do not reply.]"
+msgstr "[Tämä on automaattinen viesti; älä vastaa tähän.]"
+
+#: lib/bridgedb/strings.py:20
+msgid "Here are your bridges:"
+msgstr "Tässä ovat sinun siltasi."
+
+#: lib/bridgedb/strings.py:22
+#, python-format
+msgid ""
+"You have exceeded the rate limit. Please slow down! The minimum time between\n"
+"emails is %s hours. All further emails during this time period will be ignored."
+msgstr "Olet ylittänyt nopeusrajan. Hidasta hiukan! Minimiaika viestien välillä on %s tunnissa. Kaikki lisäviestit tämän ajan jälkeen ohitetaan."
+
+#: lib/bridgedb/strings.py:25
+msgid ""
+"COMMANDs: (combine COMMANDs to specify multiple options simultaneously)"
+msgstr "KOMENNOT: (yhdistä KOMENNOT määritelläksesi useita valitsimia samanaikaisesti)"
+
+#. TRANSLATORS: Please DO NOT translate the word "BridgeDB".
+#: lib/bridgedb/strings.py:28
+msgid "Welcome to BridgeDB!"
+msgstr "Tervetuloa BridgeDB :hen!"
+
+#. TRANSLATORS: Please DO NOT translate the words "transport" or "TYPE".
+#: lib/bridgedb/strings.py:30
+msgid "Currently supported transport TYPEs:"
+msgstr "Nykyiset tuetut transport TYPE-siirtotyypit:"
+
+#: lib/bridgedb/strings.py:31
+#, python-format
+msgid "Hey, %s!"
+msgstr "Hei, %s!"
+
+#: lib/bridgedb/strings.py:32
+msgid "Hello, friend!"
+msgstr "Hei ystävä!"
+
+#: lib/bridgedb/strings.py:33 lib/bridgedb/templates/base.html:100
+msgid "Public Keys"
+msgstr "Julkiset avaimet"
+
+#. TRANSLATORS: This string will end up saying something like:
+#. "This email was generated with rainbows, unicorns, and sparkles
+#. for alice(a)example.com on Friday, 09 May, 2014 at 18:59:39."
+#: lib/bridgedb/strings.py:37
+#, python-format
+msgid ""
+"This email was generated with rainbows, unicorns, and sparkles\n"
+"for %s on %s at %s."
+msgstr "Tämä sähköposti tuotettiin käyttäjälle %s %s klo %s"
+
+#. TRANSLATORS: Please DO NOT translate "BridgeDB".
+#. TRANSLATORS: Please DO NOT translate "Pluggable Transports".
+#. TRANSLATORS: Please DO NOT translate "Tor".
+#. TRANSLATORS: Please DO NOT translate "Tor Network".
+#: lib/bridgedb/strings.py:47
+#, python-format
+msgid ""
+"BridgeDB can provide bridges with several %stypes of Pluggable Transports%s,\n"
+"which can help obfuscate your connections to the Tor Network, making it more\n"
+"difficult for anyone watching your internet traffic to determine that you are\n"
+"using Tor.\n"
+"\n"
+msgstr "BridgeDB voi tarjota usean %styyppisiä irrotettavia Pluggable Transports%s-siirtoja,\njotka voivat auttaa peittämään yhteytesi Tor Network-verkkoon, mikä tekee vaikeammaksi\nkenellekään seurata internet-liikennettäsi ottaakseen selvää, että käytätkö Tor-palvelua.\n\n"
+
+#. TRANSLATORS: Please DO NOT translate "Pluggable Transports".
+#: lib/bridgedb/strings.py:54
+msgid ""
+"Some bridges with IPv6 addresses are also available, though some Pluggable\n"
+"Transports aren't IPv6 compatible.\n"
+"\n"
+msgstr "Myös joitakin siltoja IPv6-osoitteilla on saatavilla, vaikka jotkut irrotettavat Pluggable\nTransports-siirrot eivät ole IPv6-yhteensopivia.\n"
+
+#. TRANSLATORS: Please DO NOT translate "BridgeDB".
+#. TRANSLATORS: The phrase "plain-ol'-vanilla" means "plain, boring,
+#. regular, or unexciting". Like vanilla ice cream. It refers to bridges
+#. which do not have Pluggable Transports, and only speak the regular,
+#. boring Tor protocol. Translate it as you see fit. Have fun with it.
+#: lib/bridgedb/strings.py:63
+#, python-format
+msgid ""
+"Additionally, BridgeDB has plenty of plain-ol'-vanilla bridges %s without any\n"
+"Pluggable Transports %s which maybe doesn't sound as cool, but they can still\n"
+"help to circumvent internet censorship in many cases.\n"
+"\n"
+msgstr "Lisäksi BridgeDB:llä on useita tavallisia siltoja %s ilman mitään irrotettavia\nPluggable Transports %s-siirtoja, jotka eivät ehkä kuulosta herkullisilta, mutta\nne voivat silti auttaa kiertämään internet-sensuuria monissa tapauksissa.\n"
+
+#: lib/bridgedb/strings.py:76
msgid "What are bridges?"
msgstr "Mitä ovat sillat?"
-#: lib/bridgedb/templates/base.html:34
+#: lib/bridgedb/strings.py:77
#, python-format
-msgid ""
-"%s Bridge relays %s are Tor relays that help you circumvent censorship."
-msgstr "%s Siltareitittimet %s ovat Tor-reitittimiä, jotka auttavat sinua kiertämään sensuuria."
+msgid "%s Bridges %s are Tor relays that help you circumvent censorship."
+msgstr "%s-sillat %s ovat Tor-välitysjärjestelmiä, jotka auttavat kiertämään sensurointia."
-#: lib/bridgedb/templates/base.html:39
+#: lib/bridgedb/strings.py:82
msgid "I need an alternative way of getting bridges!"
msgstr "Tarvitsen vaihtoehtoisen tavan tavoittaa sillat!"
-#: lib/bridgedb/templates/base.html:40
+#: lib/bridgedb/strings.py:83
#, python-format
msgid ""
-"Another way to find public bridge addresses is to send an email (from a %s "
-"or a %s address) to %s with the line 'get bridges' by itself in the body of "
-"the mail."
-msgstr "Toinen tapa löytää julkinen siltaosoite on lähettää sähköpostiosoite (osoitteesta %s tai %s) osoitteeseen %s rivillä 'get bridges' itse viestin rungossa."
+"Another way to get bridges is to send an email to %s. Please note that you must\n"
+"send the email using an address from one of the following email providers:\n"
+"%s or %s."
+msgstr "Toinen tapa siltojen hankkimiseen on lähettää sähköpostia osoitteeseen %s. Huomaa,\nettä sinun on lähetettävä sähköpostiviesti käyttäen yhtä seuraavien sähköpostitarjoajien\nosoitetta:\n%s tai %s."
-#: lib/bridgedb/templates/base.html:48
+#: lib/bridgedb/strings.py:90
msgid "My bridges don't work! I need help!"
msgstr "Siltani ei toimi! Tarvitsen apua!"
-#: lib/bridgedb/templates/base.html:49
+#. TRANSLATORS: Please DO NOT translate "Tor".
+#: lib/bridgedb/strings.py:92
#, python-format
+msgid "If your Tor doesn't work, you should email %s."
+msgstr "Jos Tor ei toimi sinulla, sinun pitäisi sähköpostittaa %s."
+
+#. TRANSLATORS: Please DO NOT translate "Pluggable Transports".
+#. TRANSLATORS: Please DO NOT translate "Tor Browser".
+#. TRANSLATORS: Please DO NOT translate "Tor".
+#: lib/bridgedb/strings.py:96
msgid ""
-"If your Tor doesn't work, you should email %s. Try including as much info "
-"about your case as you can, including the list of bridges you used, the "
-"bundle filename/version you used, the messages that Tor gave out, etc."
-msgstr "Jos Tor-ohjelmasi ei toimi, sinun pitäisi lähettää sähköpostia osoitteeseen %s. Sisällytä viestiin mahdollisimman paljon tietoa tapauksesta mukaanlukien luettelo käyttämistäsi silloista, käyttämästäsi ohjelmistopaketin tiedostonimestä/versiosta, saamasi Tor-virheilmoitukset, jne."
+"Try including as much info about your case as you can, including the list of\n"
+"bridges and Pluggable Transports you tried to use, your Tor Browser version,\n"
+"and any messages which Tor gave out, etc."
+msgstr "Yritä sisällyttää niin paljon tietoa tapauksestasi kuin voit, mukaanlukien siltojen\nluettelo ja irrotettavat Pluggable Transport-siirrot, joita yritit käyttää,\nTor Browser-versio, ja kaikki viestit, jotka Tor ilmoitti, jne."
+
+#: lib/bridgedb/strings.py:103
+msgid "Here are your bridge lines:"
+msgstr "Tässä ovat siltarivisi:"
+
+#: lib/bridgedb/strings.py:104
+msgid "Get Bridges!"
+msgstr "Hae sillat!"
+
+#: lib/bridgedb/strings.py:108
+msgid "Please select options for bridge type:"
+msgstr "Valitse valitsimet siltatyypille:"
+
+#: lib/bridgedb/strings.py:109
+msgid "Do you need IPv6 addresses?"
+msgstr "Tarvitsetko IPv6 osoitteita?"
+
+#: lib/bridgedb/strings.py:110
+#, python-format
+msgid "Do you need a %s?"
+msgstr "Tarvitsetko %s?"
-#: lib/bridgedb/templates/bridges.html:10
+#: lib/bridgedb/strings.py:114
+msgid "Your browser is not displaying images properly."
+msgstr "Selaimesi ei näytä kuvia oikein."
+
+#: lib/bridgedb/strings.py:115
+msgid "Enter the characters from the image above..."
+msgstr "Syötä merkit yläpuolella olevasta kuvasta..."
+
+#: lib/bridgedb/strings.py:119
+msgid "How to start using your bridges"
+msgstr "Kuinka aloitat siltojesi käytön"
+
+#. TRANSLATORS: Please DO NOT translate "Tor Browser".
+#: lib/bridgedb/strings.py:121
+#, python-format
msgid ""
-"To use the above lines, go to Vidalia's Network settings page, and click "
-"\"My ISP blocks connections to the Tor network\". Then add each bridge "
-"address one at a time."
-msgstr "Yllä olevien rivien käyttämiseksi siirry Vidalia-verkon asetussivulle ja napsauta \"Palvelutarjoajani estää yhteyden Tor-verkkoon\". Lisää sitten jokainen siltaosoite yksi kerrallaan."
+"To enter bridges into Tor Browser, follow the instructions on the %s Tor\n"
+"Browser download page %s to start Tor Browser."
+msgstr "Siltojen lisäämiseksi Tor Browseriin, seuraa ohjeita %s Tor\nBrowser-lataussivulla %s Tor Browserin käynnistämiseksi."
+
+#. TRANSLATORS: Please DO NOT translate "Tor".
+#: lib/bridgedb/strings.py:125
+msgid ""
+"When the 'Tor Network Settings' dialogue pops up, click 'Configure' and follow\n"
+"the wizard until it asks:"
+msgstr "Kun ’Tor-verkkoasetukset’-valintaikkuna ponnahtaa näkyviin, napsauta ’Configure’ ja seuraa asetusvelhoa, kunnes se kysyy:"
+
+#. TRANSLATORS: Please DO NOT translate "Tor".
+#: lib/bridgedb/strings.py:129
+msgid ""
+"Does your Internet Service Provider (ISP) block or otherwise censor connections\n"
+"to the Tor network?"
+msgstr "Estääkö tai sensuroiko Internet-palvelutarjoajasi (ISP) muuten yhteyksiä\nTor-verkkoon?"
+
+#. TRANSLATORS: Please DO NOT translate "Tor".
+#: lib/bridgedb/strings.py:133
+msgid ""
+"Select 'Yes' and then click 'Next'. To configure your new bridges, copy and\n"
+"paste the bridge lines into the text input box. Finally, click 'Connect', and\n"
+"you should be good to go! If you experience trouble, try clicking the 'Help'\n"
+"button in the 'Tor Network Settings' wizard for further assistance."
+msgstr "Valitse ’Kyllä’ ja napsauta sitten ’Seuraava’. Uusien siltojen konfiguroimiseksi kopioi ja\nliitä siltarivit tekstisyöteikkunaan. Napsauta lopuksi ’Yhdistä’, ja siirtymisen pitäisi\nonnistua! Jos kohtaat pulmia, yritä saada lisäapua napsauttamalla ’Opaste’-\npainiketta ’Tor-verkkoasetukset’-asetusvelhossa."
+
+#: lib/bridgedb/strings.py:141
+msgid "Displays this message."
+msgstr "Näyttää tämän viestin."
+
+#. TRANSLATORS: Please try to make it clear that "vanilla" here refers to the
+#. same non-Pluggable Transport bridges described above as being
+#. "plain-ol'-vanilla" bridges.
+#: lib/bridgedb/strings.py:145
+msgid "Request vanilla bridges."
+msgstr "Pyydä tavallisia siltoja."
+
+#: lib/bridgedb/strings.py:146
+msgid "Request IPv6 bridges."
+msgstr "Pyydä IPv6-siltoja."
+
+#. TRANSLATORS: Please DO NOT translate the word the word "TYPE".
+#: lib/bridgedb/strings.py:148
+msgid "Request a Pluggable Transport by TYPE."
+msgstr "Pyydä TYPE-tyyppistä irrotettavaa Pluggable Transport-siirtoa."
+
+#. TRANSLATORS: Please DO NOT translate "BridgeDB".
+#. TRANSLATORS: Please DO NOT translate "GnuPG".
+#: lib/bridgedb/strings.py:151
+msgid "Get a copy of BridgeDB's public GnuPG key."
+msgstr "Hae kopio BridgeDB:n julkisesta GnuPG-avaimesta."
+
+#: lib/bridgedb/templates/base.html:91
+msgid "Report a Bug"
+msgstr "Ilmoita ohjelmointivirheestä"
+
+#: lib/bridgedb/templates/base.html:93
+msgid "Source Code"
+msgstr "Lähdekoodi"
-#: lib/bridgedb/templates/bridges.html:13
-msgid "No bridges currently available"
-msgstr "Siltoja ei ole tällä hetkellä saatavilla"
+#: lib/bridgedb/templates/base.html:96
+msgid "Changelog"
+msgstr "Muutosloki"
-#: lib/bridgedb/templates/captcha.html:6
-msgid "Upgrade your browser to Firefox"
-msgstr "Päivitä selaimesi Firefoxiin"
+#: lib/bridgedb/templates/base.html:98
+msgid "Contact"
+msgstr "Yhteystieto"
-#: lib/bridgedb/templates/captcha.html:8
-msgid "Type the two words"
-msgstr "Kirjoita kaksi sanaa"
+#. TRANSLATORS: Please translate this into some silly way to say
+#. "There was a problem!" in your language. For example,
+#. for Italian, you might translate this into "Mama mia!",
+#. or for French: "Sacrebleu!". :)
+#: lib/bridgedb/templates/bridges.html:66
+msgid "Uh oh, spaghettios!"
+msgstr "Jossain on pulma!"
-#: lib/bridgedb/templates/index.html:6
-msgid "Step 1"
-msgstr "Vaihe 1"
+#: lib/bridgedb/templates/bridges.html:72
+msgid "There currently aren't any bridges available..."
+msgstr "Tällä hetkellä ei ole yhtään siltaa saatavilla..."
-#: lib/bridgedb/templates/index.html:8
+#: lib/bridgedb/templates/bridges.html:73
#, python-format
-msgid "Get %s Tor Browser Bundle %s"
-msgstr "Hanki %s Tor-selainpaketti %s"
+msgid ""
+" Perhaps you should try %s going back %s and choosing a different bridge "
+"type!"
+msgstr "Ehkä sinun pitäisi yrittää %s palaamalla %s ja valitsemalla eri siltatyyppi!"
+
+#: lib/bridgedb/templates/index.html:11
+#, python-format
+msgid "Step %s1%s"
+msgstr "Vaihe %s1%s"
#: lib/bridgedb/templates/index.html:13
-msgid "Step 2"
-msgstr "Vaihe 2"
+#, python-format
+msgid "Download %s Tor Browser %s"
+msgstr "Lataa %s Tor Browser %s"
-#: lib/bridgedb/templates/index.html:15
+#: lib/bridgedb/templates/index.html:25
+#, python-format
+msgid "Step %s2%s"
+msgstr "Vaihe %s2%s"
+
+#: lib/bridgedb/templates/index.html:27
#, python-format
msgid "Get %s bridges %s"
msgstr "Hanki %s sillat %s"
-#: lib/bridgedb/templates/index.html:19
-msgid "Step 3"
-msgstr "Vaihe 3"
+#: lib/bridgedb/templates/index.html:36
+#, python-format
+msgid "Step %s3%s"
+msgstr "Vaihe %s3%s"
+
+#: lib/bridgedb/templates/index.html:38
+#, python-format
+msgid "Now %s add the bridges to Tor Browser %s"
+msgstr "Nyt %s lisää sillat Tor Browseriin %s"
+
+#. TRANSLATORS: Please make sure the '%s' surrounding single letters at the
+#. beginning of words are present in your final translation. Thanks!
+#. (These are used to insert HTML5 underlining tags, to mark accesskeys
+#. for disabled users.)
+#: lib/bridgedb/templates/options.html:38
+#, python-format
+msgid "%sJ%sust give me bridges!"
+msgstr "%sA%snna minulle vain sillat!"
+
+#: lib/bridgedb/templates/options.html:52
+msgid "Advanced Options"
+msgstr "Lisävalitsimet"
+
+#: lib/bridgedb/templates/options.html:88
+msgid "No"
+msgstr "Ei"
+
+#: lib/bridgedb/templates/options.html:89
+msgid "none"
+msgstr "ei mitään"
+
+#. TRANSLATORS: Please make sure the '%s' surrounding single letters at the
+#. beginning of words are present in your final translation. Thanks!
+#. TRANSLATORS: Translate "Yes!" as in "Yes! I do need IPv6 addresses."
+#: lib/bridgedb/templates/options.html:130
+#, python-format
+msgid "%sY%ses!"
+msgstr "%sK%syllä!"
-#: lib/bridgedb/templates/index.html:21
+#. TRANSLATORS: Please make sure the '%s' surrounding single letters at the
+#. beginning of words are present in your final translation. Thanks!
+#. TRANSLATORS: Please do NOT translate the word "bridge"!
+#: lib/bridgedb/templates/options.html:154
#, python-format
-msgid "Now %s add the bridges to Tor %s"
-msgstr "Nyt %s lisää sillat Toriin %s"
+msgid "%sG%set Bridges"
+msgstr "%sH%sae sillat"
1
0

19 Jul '14
commit 65395ae2d3bce518e5d241f685733d3d5b771c3a
Author: Translation commit bot <translation(a)torproject.org>
Date: Sat Jul 19 07:45:02 2014 +0000
Update translations for bridgedb
---
fi/LC_MESSAGES/bridgedb.po | 18 +++++++++---------
1 file changed, 9 insertions(+), 9 deletions(-)
diff --git a/fi/LC_MESSAGES/bridgedb.po b/fi/LC_MESSAGES/bridgedb.po
index 5786e9f..e859271 100644
--- a/fi/LC_MESSAGES/bridgedb.po
+++ b/fi/LC_MESSAGES/bridgedb.po
@@ -12,7 +12,7 @@ msgstr ""
"Project-Id-Version: The Tor Project\n"
"Report-Msgid-Bugs-To: 'https://trac.torproject.org/projects/tor/newticket?component=BridgeDB&keywo…'\n"
"POT-Creation-Date: 2014-06-06 21:46+0000\n"
-"PO-Revision-Date: 2014-07-19 07:10+0000\n"
+"PO-Revision-Date: 2014-07-19 07:40+0000\n"
"Last-Translator: karvjorm <karvonen.jorma(a)gmail.com>\n"
"Language-Team: Finnish (http://www.transifex.com/projects/p/torproject/language/fi/)\n"
"MIME-Version: 1.0\n"
@@ -35,7 +35,7 @@ msgstr ""
#. "Tor Browser"
#: lib/bridgedb/HTTPServer.py:121
msgid "Sorry! Something went wrong with your request."
-msgstr "Anteeksi! Jotain meni vikaan pyyntösi kanssa."
+msgstr "Pyyntösi epäonnistui jostain syystä."
#: lib/bridgedb/strings.py:18
msgid "[This is an automated message; please do not reply.]"
@@ -102,7 +102,7 @@ msgid ""
"difficult for anyone watching your internet traffic to determine that you are\n"
"using Tor.\n"
"\n"
-msgstr ""
+msgstr "BridgeDB voi tarjota usean %styyppisiä irrotettavia Pluggable Transports%s-siirtoja,\njotka voivat auttaa peittämään yhteytesi Tor Network-verkkoon, mikä tekee vaikeammaksi\nkenellekään seurata internet-liikennettäsi ottaakseen selvää, että käytätkö Tor-palvelua.\n\n"
#. TRANSLATORS: Please DO NOT translate "Pluggable Transports".
#: lib/bridgedb/strings.py:54
@@ -110,7 +110,7 @@ msgid ""
"Some bridges with IPv6 addresses are also available, though some Pluggable\n"
"Transports aren't IPv6 compatible.\n"
"\n"
-msgstr ""
+msgstr "Myös joitakin siltoja IPv6-osoitteilla on saatavilla, vaikka jotkut irrotettavat Pluggable\nTransports-siirrot eivät ole IPv6-yhteensopivia.\n"
#. TRANSLATORS: Please DO NOT translate "BridgeDB".
#. TRANSLATORS: The phrase "plain-ol'-vanilla" means "plain, boring,
@@ -124,7 +124,7 @@ msgid ""
"Pluggable Transports %s which maybe doesn't sound as cool, but they can still\n"
"help to circumvent internet censorship in many cases.\n"
"\n"
-msgstr ""
+msgstr "Lisäksi BridgeDB:llä on useita tavallisia siltoja %s ilman mitään irrotettavia\nPluggable Transports %s-siirtoja, jotka eivät ehkä kuulosta herkullisilta, mutta\nne voivat silti auttaa kiertämään internet-sensuuria monissa tapauksissa.\n"
#: lib/bridgedb/strings.py:76
msgid "What are bridges?"
@@ -133,7 +133,7 @@ msgstr "Mitä ovat sillat?"
#: lib/bridgedb/strings.py:77
#, python-format
msgid "%s Bridges %s are Tor relays that help you circumvent censorship."
-msgstr ""
+msgstr "%s-sillat %s ovat Tor-välitysjärjestelmiä, jotka auttavat kiertämään sensurointia."
#: lib/bridgedb/strings.py:82
msgid "I need an alternative way of getting bridges!"
@@ -145,7 +145,7 @@ msgid ""
"Another way to get bridges is to send an email to %s. Please note that you must\n"
"send the email using an address from one of the following email providers:\n"
"%s or %s."
-msgstr ""
+msgstr "Toinen tapa siltojen hankkimiseen on lähettää sähköpostia osoitteeseen %s. Huomaa,\nettä sinun on lähetettävä sähköpostiviesti käyttäen yhtä seuraavien sähköpostitarjoajien\nosoitetta:\n%s tai %s."
#: lib/bridgedb/strings.py:90
msgid "My bridges don't work! I need help!"
@@ -165,7 +165,7 @@ msgid ""
"Try including as much info about your case as you can, including the list of\n"
"bridges and Pluggable Transports you tried to use, your Tor Browser version,\n"
"and any messages which Tor gave out, etc."
-msgstr "Yritä sisällyttää niin paljon tietoa tapauksestasi kuin voit, mukaanlukien siltojen\nluettelo ja irrotettavat siirrot, joita yritit käyttää, Tor Browser-versio, ja kaikki\nviestit, jotka Tor ilmoitti, jne."
+msgstr "Yritä sisällyttää niin paljon tietoa tapauksestasi kuin voit, mukaanlukien siltojen\nluettelo ja irrotettavat Pluggable Transport-siirrot, joita yritit käyttää,\nTor Browser-versio, ja kaikki viestit, jotka Tor ilmoitti, jne."
#: lib/bridgedb/strings.py:103
msgid "Here are your bridge lines:"
@@ -249,7 +249,7 @@ msgstr "Pyydä IPv6-siltoja."
#. TRANSLATORS: Please DO NOT translate the word the word "TYPE".
#: lib/bridgedb/strings.py:148
msgid "Request a Pluggable Transport by TYPE."
-msgstr "Pyydä TYPE-tyyppistä irrotettavaa siirtoa."
+msgstr "Pyydä TYPE-tyyppistä irrotettavaa Pluggable Transport-siirtoa."
#. TRANSLATORS: Please DO NOT translate "BridgeDB".
#. TRANSLATORS: Please DO NOT translate "GnuPG".
1
0

19 Jul '14
commit cd35d196996454eb5b920ad5384a144dbd0e87af
Author: Translation commit bot <translation(a)torproject.org>
Date: Sat Jul 19 07:15:03 2014 +0000
Update translations for bridgedb
---
fi/LC_MESSAGES/bridgedb.po | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/fi/LC_MESSAGES/bridgedb.po b/fi/LC_MESSAGES/bridgedb.po
index c103743..5786e9f 100644
--- a/fi/LC_MESSAGES/bridgedb.po
+++ b/fi/LC_MESSAGES/bridgedb.po
@@ -12,7 +12,7 @@ msgstr ""
"Project-Id-Version: The Tor Project\n"
"Report-Msgid-Bugs-To: 'https://trac.torproject.org/projects/tor/newticket?component=BridgeDB&keywo…'\n"
"POT-Creation-Date: 2014-06-06 21:46+0000\n"
-"PO-Revision-Date: 2014-07-19 06:40+0000\n"
+"PO-Revision-Date: 2014-07-19 07:10+0000\n"
"Last-Translator: karvjorm <karvonen.jorma(a)gmail.com>\n"
"Language-Team: Finnish (http://www.transifex.com/projects/p/torproject/language/fi/)\n"
"MIME-Version: 1.0\n"
@@ -165,7 +165,7 @@ msgid ""
"Try including as much info about your case as you can, including the list of\n"
"bridges and Pluggable Transports you tried to use, your Tor Browser version,\n"
"and any messages which Tor gave out, etc."
-msgstr ""
+msgstr "Yritä sisällyttää niin paljon tietoa tapauksestasi kuin voit, mukaanlukien siltojen\nluettelo ja irrotettavat siirrot, joita yritit käyttää, Tor Browser-versio, ja kaikki\nviestit, jotka Tor ilmoitti, jne."
#: lib/bridgedb/strings.py:103
msgid "Here are your bridge lines:"
@@ -206,21 +206,21 @@ msgstr "Kuinka aloitat siltojesi käytön"
msgid ""
"To enter bridges into Tor Browser, follow the instructions on the %s Tor\n"
"Browser download page %s to start Tor Browser."
-msgstr ""
+msgstr "Siltojen lisäämiseksi Tor Browseriin, seuraa ohjeita %s Tor\nBrowser-lataussivulla %s Tor Browserin käynnistämiseksi."
#. TRANSLATORS: Please DO NOT translate "Tor".
#: lib/bridgedb/strings.py:125
msgid ""
"When the 'Tor Network Settings' dialogue pops up, click 'Configure' and follow\n"
"the wizard until it asks:"
-msgstr ""
+msgstr "Kun ’Tor-verkkoasetukset’-valintaikkuna ponnahtaa näkyviin, napsauta ’Configure’ ja seuraa asetusvelhoa, kunnes se kysyy:"
#. TRANSLATORS: Please DO NOT translate "Tor".
#: lib/bridgedb/strings.py:129
msgid ""
"Does your Internet Service Provider (ISP) block or otherwise censor connections\n"
"to the Tor network?"
-msgstr ""
+msgstr "Estääkö tai sensuroiko Internet-palvelutarjoajasi (ISP) muuten yhteyksiä\nTor-verkkoon?"
#. TRANSLATORS: Please DO NOT translate "Tor".
#: lib/bridgedb/strings.py:133
@@ -229,7 +229,7 @@ msgid ""
"paste the bridge lines into the text input box. Finally, click 'Connect', and\n"
"you should be good to go! If you experience trouble, try clicking the 'Help'\n"
"button in the 'Tor Network Settings' wizard for further assistance."
-msgstr ""
+msgstr "Valitse ’Kyllä’ ja napsauta sitten ’Seuraava’. Uusien siltojen konfiguroimiseksi kopioi ja\nliitä siltarivit tekstisyöteikkunaan. Napsauta lopuksi ’Yhdistä’, ja siirtymisen pitäisi\nonnistua! Jos kohtaat pulmia, yritä saada lisäapua napsauttamalla ’Opaste’-\npainiketta ’Tor-verkkoasetukset’-asetusvelhossa."
#: lib/bridgedb/strings.py:141
msgid "Displays this message."
@@ -240,7 +240,7 @@ msgstr "Näyttää tämän viestin."
#. "plain-ol'-vanilla" bridges.
#: lib/bridgedb/strings.py:145
msgid "Request vanilla bridges."
-msgstr ""
+msgstr "Pyydä tavallisia siltoja."
#: lib/bridgedb/strings.py:146
msgid "Request IPv6 bridges."
1
0
commit d03d3fea6661c95691419b11523e4f3b7d29c4e6
Author: Karsten Loesing <karsten.loesing(a)gmx.net>
Date: Thu Jul 17 09:14:31 2014 +0200
Simplify NodeDetailsStatusUpdater.
---
.../onionoo/NodeDetailsStatusUpdater.java | 38 ++++++--------------
1 file changed, 11 insertions(+), 27 deletions(-)
diff --git a/src/org/torproject/onionoo/NodeDetailsStatusUpdater.java b/src/org/torproject/onionoo/NodeDetailsStatusUpdater.java
index 2859063..5c253bd 100644
--- a/src/org/torproject/onionoo/NodeDetailsStatusUpdater.java
+++ b/src/org/torproject/onionoo/NodeDetailsStatusUpdater.java
@@ -1,4 +1,4 @@
-/* Copyright 2011, 2012 The Tor Project
+/* Copyright 2011--2014 The Tor Project
* See LICENSE for licensing information */
package org.torproject.onionoo;
@@ -110,11 +110,6 @@ public class NodeDetailsStatusUpdater implements DescriptorListener,
Logger.printStatusTime("Finished reverse domain name lookups");
this.writeStatusSummary();
Logger.printStatusTime("Wrote status summary");
- /* TODO Does anything break if we take the following out?
- * Like, does DocumentStore make sure there's a status/summary with
- * all node statuses and an out/summary with only recent ones?
- this.writeOutSummary();
- Logger.printStatusTime("Wrote out summary");*/
this.updateDetailsStatuses();
Logger.printStatusTime("Updated exit addresses in details statuses");
}
@@ -291,28 +286,9 @@ public class NodeDetailsStatusUpdater implements DescriptorListener,
}
private void writeStatusSummary() {
- this.writeSummary(true);
- }
-
- private void writeSummary(boolean includeArchive) {
- SortedMap<String, NodeStatus> nodes = includeArchive
- ? this.knownNodes : this.getCurrentNodes();
- for (Map.Entry<String, NodeStatus> e : nodes.entrySet()) {
- this.documentStore.store(e.getValue(), e.getKey());
- }
- }
-
- private SortedMap<String, NodeStatus> getCurrentNodes() {
- long cutoff = Math.max(this.relaysLastValidAfterMillis,
- this.bridgesLastPublishedMillis) - 7L * 24L * 60L * 60L * 1000L;
- SortedMap<String, NodeStatus> currentNodes =
- new TreeMap<String, NodeStatus>();
for (Map.Entry<String, NodeStatus> e : this.knownNodes.entrySet()) {
- if (e.getValue().getLastSeenMillis() >= cutoff) {
- currentNodes.put(e.getKey(), e.getValue());
- }
+ this.documentStore.store(e.getValue(), e.getKey());
}
- return currentNodes;
}
private void processRelayServerDescriptor(
@@ -411,7 +387,15 @@ public class NodeDetailsStatusUpdater implements DescriptorListener,
}
private void setCurrentNodes() {
- SortedMap<String, NodeStatus> currentNodes = this.getCurrentNodes();
+ long cutoff = Math.max(this.relaysLastValidAfterMillis,
+ this.bridgesLastPublishedMillis) - 7L * 24L * 60L * 60L * 1000L;
+ SortedMap<String, NodeStatus> currentNodes =
+ new TreeMap<String, NodeStatus>();
+ for (Map.Entry<String, NodeStatus> e : this.knownNodes.entrySet()) {
+ if (e.getValue().getLastSeenMillis() >= cutoff) {
+ currentNodes.put(e.getKey(), e.getValue());
+ }
+ }
this.relays = new TreeMap<String, NodeStatus>();
this.bridges = new TreeMap<String, NodeStatus>();
for (Map.Entry<String, NodeStatus> e : currentNodes.entrySet()) {
1
0

19 Jul '14
commit 96b098c0c345b83a8dfd276bf0a2e2ae6d749f1d
Author: Karsten Loesing <karsten.loesing(a)gmx.net>
Date: Thu Jul 17 09:20:09 2014 +0200
Reorder methods in NodeDetailsStatusUpdater.
---
.../onionoo/NodeDetailsStatusUpdater.java | 456 ++++++++++----------
1 file changed, 228 insertions(+), 228 deletions(-)
diff --git a/src/org/torproject/onionoo/NodeDetailsStatusUpdater.java b/src/org/torproject/onionoo/NodeDetailsStatusUpdater.java
index 5c253bd..e898638 100644
--- a/src/org/torproject/onionoo/NodeDetailsStatusUpdater.java
+++ b/src/org/torproject/onionoo/NodeDetailsStatusUpdater.java
@@ -77,41 +77,95 @@ public class NodeDetailsStatusUpdater implements DescriptorListener,
}
public void processDescriptor(Descriptor descriptor, boolean relay) {
- if (descriptor instanceof RelayNetworkStatusConsensus) {
+ if (descriptor instanceof ServerDescriptor && relay) {
+ this.processRelayServerDescriptor((ServerDescriptor) descriptor);
+ } else if (descriptor instanceof ExitList) {
+ this.processExitList((ExitList) descriptor);
+ } else if (descriptor instanceof RelayNetworkStatusConsensus) {
this.processRelayNetworkStatusConsensus(
(RelayNetworkStatusConsensus) descriptor);
- } else if (descriptor instanceof ServerDescriptor && relay) {
- this.processRelayServerDescriptor((ServerDescriptor) descriptor);
- } else if (descriptor instanceof BridgeNetworkStatus) {
- this.processBridgeNetworkStatus((BridgeNetworkStatus) descriptor);
} else if (descriptor instanceof ServerDescriptor && !relay) {
this.processBridgeServerDescriptor((ServerDescriptor) descriptor);
} else if (descriptor instanceof BridgePoolAssignment) {
this.processBridgePoolAssignment((BridgePoolAssignment) descriptor);
- } else if (descriptor instanceof ExitList) {
- this.processExitList((ExitList) descriptor);
+ } else if (descriptor instanceof BridgeNetworkStatus) {
+ this.processBridgeNetworkStatus((BridgeNetworkStatus) descriptor);
}
}
- public void updateStatuses() {
- this.readStatusSummary();
- Logger.printStatusTime("Read status summary");
- this.setCurrentNodes();
- Logger.printStatusTime("Set current node fingerprints");
- this.startReverseDomainNameLookups();
- Logger.printStatusTime("Started reverse domain name lookups");
- this.lookUpCitiesAndASes();
- Logger.printStatusTime("Looked up cities and ASes");
- this.setDescriptorPartsOfNodeStatus();
- Logger.printStatusTime("Set descriptor parts of node statuses.");
- this.calculatePathSelectionProbabilities();
- Logger.printStatusTime("Calculated path selection probabilities");
- this.finishReverseDomainNameLookups();
- Logger.printStatusTime("Finished reverse domain name lookups");
- this.writeStatusSummary();
- Logger.printStatusTime("Wrote status summary");
- this.updateDetailsStatuses();
- Logger.printStatusTime("Updated exit addresses in details statuses");
+ private void processRelayServerDescriptor(
+ ServerDescriptor descriptor) {
+ String fingerprint = descriptor.getFingerprint();
+ DetailsStatus detailsStatus = this.documentStore.retrieve(
+ DetailsStatus.class, true, fingerprint);
+ String publishedDateTime =
+ DateTimeHelper.format(descriptor.getPublishedMillis());
+ if (detailsStatus == null) {
+ detailsStatus = new DetailsStatus();
+ } else if (detailsStatus.getDescPublished() != null &&
+ publishedDateTime.compareTo(
+ detailsStatus.getDescPublished()) < 0) {
+ return;
+ }
+ String lastRestartedString = DateTimeHelper.format(
+ descriptor.getPublishedMillis() - descriptor.getUptime()
+ * DateTimeHelper.ONE_SECOND);
+ int bandwidthRate = descriptor.getBandwidthRate();
+ int bandwidthBurst = descriptor.getBandwidthBurst();
+ int observedBandwidth = descriptor.getBandwidthObserved();
+ int advertisedBandwidth = Math.min(bandwidthRate,
+ Math.min(bandwidthBurst, observedBandwidth));
+ detailsStatus.setDescPublished(publishedDateTime);
+ detailsStatus.setLastRestarted(lastRestartedString);
+ detailsStatus.setBandwidthRate(bandwidthRate);
+ detailsStatus.setBandwidthBurst(bandwidthBurst);
+ detailsStatus.setObservedBandwidth(observedBandwidth);
+ detailsStatus.setAdvertisedBandwidth(advertisedBandwidth);
+ detailsStatus.setExitPolicy(descriptor.getExitPolicyLines());
+ detailsStatus.setContact(descriptor.getContact());
+ detailsStatus.setPlatform(descriptor.getPlatform());
+ detailsStatus.setFamily(descriptor.getFamilyEntries());
+ if (descriptor.getIpv6DefaultPolicy() != null &&
+ (descriptor.getIpv6DefaultPolicy().equals("accept") ||
+ descriptor.getIpv6DefaultPolicy().equals("reject")) &&
+ descriptor.getIpv6PortList() != null) {
+ Map<String, List<String>> exitPolicyV6Summary =
+ new HashMap<String, List<String>>();
+ List<String> portsOrPortRanges = Arrays.asList(
+ descriptor.getIpv6PortList().split(","));
+ exitPolicyV6Summary.put(descriptor.getIpv6DefaultPolicy(),
+ portsOrPortRanges);
+ detailsStatus.setExitPolicyV6Summary(exitPolicyV6Summary);
+ }
+ if (descriptor.isHibernating()) {
+ detailsStatus.setHibernating(true);
+ }
+ this.documentStore.store(detailsStatus, fingerprint);
+ }
+
+ private Map<String, Map<String, Long>> exitListEntries =
+ new HashMap<String, Map<String, Long>>();
+
+ private void processExitList(ExitList exitList) {
+ for (ExitListEntry exitListEntry : exitList.getExitListEntries()) {
+ String fingerprint = exitListEntry.getFingerprint();
+ if (exitListEntry.getScanMillis() <
+ this.now - DateTimeHelper.ONE_DAY) {
+ continue;
+ }
+ if (!this.exitListEntries.containsKey(fingerprint)) {
+ this.exitListEntries.put(fingerprint,
+ new HashMap<String, Long>());
+ }
+ String exitAddress = exitListEntry.getExitAddress();
+ long scanMillis = exitListEntry.getScanMillis();
+ if (!this.exitListEntries.get(fingerprint).containsKey(exitAddress)
+ || this.exitListEntries.get(fingerprint).get(exitAddress)
+ < scanMillis) {
+ this.exitListEntries.get(fingerprint).put(exitAddress,
+ scanMillis);
+ }
+ }
}
private void processRelayNetworkStatusConsensus(
@@ -161,6 +215,51 @@ public class NodeDetailsStatusUpdater implements DescriptorListener,
}
}
+ private void processBridgeServerDescriptor(
+ ServerDescriptor descriptor) {
+ String fingerprint = descriptor.getFingerprint();
+ DetailsStatus detailsStatus = this.documentStore.retrieve(
+ DetailsStatus.class, true, fingerprint);
+ String publishedDateTime =
+ DateTimeHelper.format(descriptor.getPublishedMillis());
+ if (detailsStatus == null) {
+ detailsStatus = new DetailsStatus();
+ } else if (detailsStatus.getDescPublished() != null &&
+ publishedDateTime.compareTo(
+ detailsStatus.getDescPublished()) < 0) {
+ return;
+ }
+ String lastRestartedString = DateTimeHelper.format(
+ descriptor.getPublishedMillis() - descriptor.getUptime()
+ * DateTimeHelper.ONE_SECOND);
+ int advertisedBandwidth = Math.min(descriptor.getBandwidthRate(),
+ Math.min(descriptor.getBandwidthBurst(),
+ descriptor.getBandwidthObserved()));
+ detailsStatus.setDescPublished(publishedDateTime);
+ detailsStatus.setLastRestarted(lastRestartedString);
+ detailsStatus.setAdvertisedBandwidth(advertisedBandwidth);
+ detailsStatus.setPlatform(descriptor.getPlatform());
+ this.documentStore.store(detailsStatus, fingerprint);
+ }
+
+ private void processBridgePoolAssignment(
+ BridgePoolAssignment bridgePoolAssignment) {
+ for (Map.Entry<String, String> e :
+ bridgePoolAssignment.getEntries().entrySet()) {
+ String fingerprint = e.getKey();
+ String details = e.getValue();
+ DetailsStatus detailsStatus = this.documentStore.retrieve(
+ DetailsStatus.class, true, fingerprint);
+ if (detailsStatus == null) {
+ detailsStatus = new DetailsStatus();
+ } else if (details.equals(detailsStatus.getPoolAssignment())) {
+ continue;
+ }
+ detailsStatus.setPoolAssignment(details);
+ this.documentStore.store(detailsStatus, fingerprint);
+ }
+ }
+
private void processBridgeNetworkStatus(BridgeNetworkStatus status) {
long publishedMillis = status.getPublishedMillis();
if (publishedMillis > this.bridgesLastPublishedMillis) {
@@ -188,6 +287,27 @@ public class NodeDetailsStatusUpdater implements DescriptorListener,
this.bridgeStatusesProcessed++;
}
+ public void updateStatuses() {
+ this.readStatusSummary();
+ Logger.printStatusTime("Read status summary");
+ this.setCurrentNodes();
+ Logger.printStatusTime("Set current node fingerprints");
+ this.startReverseDomainNameLookups();
+ Logger.printStatusTime("Started reverse domain name lookups");
+ this.lookUpCitiesAndASes();
+ Logger.printStatusTime("Looked up cities and ASes");
+ this.setDescriptorPartsOfNodeStatus();
+ Logger.printStatusTime("Set descriptor parts of node statuses.");
+ this.calculatePathSelectionProbabilities();
+ Logger.printStatusTime("Calculated path selection probabilities");
+ this.finishReverseDomainNameLookups();
+ Logger.printStatusTime("Finished reverse domain name lookups");
+ this.writeStatusSummary();
+ Logger.printStatusTime("Wrote status summary");
+ this.updateDetailsStatuses();
+ Logger.printStatusTime("Updated exit addresses in details statuses");
+ }
+
private void readStatusSummary() {
SortedSet<String> fingerprints = this.documentStore.list(
NodeStatus.class, true);
@@ -209,49 +329,38 @@ public class NodeDetailsStatusUpdater implements DescriptorListener,
}
}
- private void setDescriptorPartsOfNodeStatus() {
+ private void setCurrentNodes() {
+ long cutoff = Math.max(this.relaysLastValidAfterMillis,
+ this.bridgesLastPublishedMillis) - 7L * 24L * 60L * 60L * 1000L;
+ SortedMap<String, NodeStatus> currentNodes =
+ new TreeMap<String, NodeStatus>();
for (Map.Entry<String, NodeStatus> e : this.knownNodes.entrySet()) {
- String fingerprint = e.getKey();
- NodeStatus node = e.getValue();
- if (node.isRelay()) {
- if (node.getRelayFlags().contains("Running") &&
- node.getLastSeenMillis() == this.relaysLastValidAfterMillis) {
- node.setRunning(true);
- }
- DetailsStatus detailsStatus = this.documentStore.retrieve(
- DetailsStatus.class, true, fingerprint);
- if (detailsStatus != null) {
- node.setContact(detailsStatus.getContact());
- if (detailsStatus.getExitAddresses() != null) {
- for (Map.Entry<String, Long> ea :
- detailsStatus.getExitAddresses().entrySet()) {
- if (ea.getValue() >= this.now - DateTimeHelper.ONE_DAY) {
- node.addExitAddress(ea.getKey());
- }
- }
- }
- if (detailsStatus.getFamily() != null &&
- !detailsStatus.getFamily().isEmpty()) {
- SortedSet<String> familyFingerprints = new TreeSet<String>();
- for (String familyMember : detailsStatus.getFamily()) {
- if (familyMember.startsWith("$") &&
- familyMember.length() == 41) {
- familyFingerprints.add(familyMember.substring(1));
- }
- }
- if (!familyFingerprints.isEmpty()) {
- node.setFamilyFingerprints(familyFingerprints);
- }
- }
- }
+ if (e.getValue().getLastSeenMillis() >= cutoff) {
+ currentNodes.put(e.getKey(), e.getValue());
}
- if (!node.isRelay() && node.getRelayFlags().contains("Running") &&
- node.getLastSeenMillis() == this.bridgesLastPublishedMillis) {
- node.setRunning(true);
+ }
+ this.relays = new TreeMap<String, NodeStatus>();
+ this.bridges = new TreeMap<String, NodeStatus>();
+ for (Map.Entry<String, NodeStatus> e : currentNodes.entrySet()) {
+ if (e.getValue().isRelay()) {
+ this.relays.put(e.getKey(), e.getValue());
+ } else {
+ this.bridges.put(e.getKey(), e.getValue());
}
}
}
+ private void startReverseDomainNameLookups() {
+ Map<String, Long> addressLastLookupTimes =
+ new HashMap<String, Long>();
+ for (NodeStatus relay : relays.values()) {
+ addressLastLookupTimes.put(relay.getAddress(),
+ relay.getLastRdnsLookup());
+ }
+ this.reverseDomainNameResolver.setAddresses(addressLastLookupTimes);
+ this.reverseDomainNameResolver.startReverseDomainNameLookups();
+ }
+
private void lookUpCitiesAndASes() {
SortedSet<String> addressStrings = new TreeSet<String>();
for (NodeStatus node : this.knownNodes.values()) {
@@ -285,174 +394,45 @@ public class NodeDetailsStatusUpdater implements DescriptorListener,
}
}
- private void writeStatusSummary() {
+ private void setDescriptorPartsOfNodeStatus() {
for (Map.Entry<String, NodeStatus> e : this.knownNodes.entrySet()) {
- this.documentStore.store(e.getValue(), e.getKey());
- }
- }
-
- private void processRelayServerDescriptor(
- ServerDescriptor descriptor) {
- String fingerprint = descriptor.getFingerprint();
- DetailsStatus detailsStatus = this.documentStore.retrieve(
- DetailsStatus.class, true, fingerprint);
- String publishedDateTime =
- DateTimeHelper.format(descriptor.getPublishedMillis());
- if (detailsStatus == null) {
- detailsStatus = new DetailsStatus();
- } else if (detailsStatus.getDescPublished() != null &&
- publishedDateTime.compareTo(
- detailsStatus.getDescPublished()) < 0) {
- return;
- }
- String lastRestartedString = DateTimeHelper.format(
- descriptor.getPublishedMillis() - descriptor.getUptime()
- * DateTimeHelper.ONE_SECOND);
- int bandwidthRate = descriptor.getBandwidthRate();
- int bandwidthBurst = descriptor.getBandwidthBurst();
- int observedBandwidth = descriptor.getBandwidthObserved();
- int advertisedBandwidth = Math.min(bandwidthRate,
- Math.min(bandwidthBurst, observedBandwidth));
- detailsStatus.setDescPublished(publishedDateTime);
- detailsStatus.setLastRestarted(lastRestartedString);
- detailsStatus.setBandwidthRate(bandwidthRate);
- detailsStatus.setBandwidthBurst(bandwidthBurst);
- detailsStatus.setObservedBandwidth(observedBandwidth);
- detailsStatus.setAdvertisedBandwidth(advertisedBandwidth);
- detailsStatus.setExitPolicy(descriptor.getExitPolicyLines());
- detailsStatus.setContact(descriptor.getContact());
- detailsStatus.setPlatform(descriptor.getPlatform());
- detailsStatus.setFamily(descriptor.getFamilyEntries());
- if (descriptor.getIpv6DefaultPolicy() != null &&
- (descriptor.getIpv6DefaultPolicy().equals("accept") ||
- descriptor.getIpv6DefaultPolicy().equals("reject")) &&
- descriptor.getIpv6PortList() != null) {
- Map<String, List<String>> exitPolicyV6Summary =
- new HashMap<String, List<String>>();
- List<String> portsOrPortRanges = Arrays.asList(
- descriptor.getIpv6PortList().split(","));
- exitPolicyV6Summary.put(descriptor.getIpv6DefaultPolicy(),
- portsOrPortRanges);
- detailsStatus.setExitPolicyV6Summary(exitPolicyV6Summary);
- }
- if (descriptor.isHibernating()) {
- detailsStatus.setHibernating(true);
- }
- this.documentStore.store(detailsStatus, fingerprint);
- }
-
- private void processBridgeServerDescriptor(
- ServerDescriptor descriptor) {
- String fingerprint = descriptor.getFingerprint();
- DetailsStatus detailsStatus = this.documentStore.retrieve(
- DetailsStatus.class, true, fingerprint);
- String publishedDateTime =
- DateTimeHelper.format(descriptor.getPublishedMillis());
- if (detailsStatus == null) {
- detailsStatus = new DetailsStatus();
- } else if (detailsStatus.getDescPublished() != null &&
- publishedDateTime.compareTo(
- detailsStatus.getDescPublished()) < 0) {
- return;
- }
- String lastRestartedString = DateTimeHelper.format(
- descriptor.getPublishedMillis() - descriptor.getUptime()
- * DateTimeHelper.ONE_SECOND);
- int advertisedBandwidth = Math.min(descriptor.getBandwidthRate(),
- Math.min(descriptor.getBandwidthBurst(),
- descriptor.getBandwidthObserved()));
- detailsStatus.setDescPublished(publishedDateTime);
- detailsStatus.setLastRestarted(lastRestartedString);
- detailsStatus.setAdvertisedBandwidth(advertisedBandwidth);
- detailsStatus.setPlatform(descriptor.getPlatform());
- this.documentStore.store(detailsStatus, fingerprint);
- }
-
- private void processBridgePoolAssignment(
- BridgePoolAssignment bridgePoolAssignment) {
- for (Map.Entry<String, String> e :
- bridgePoolAssignment.getEntries().entrySet()) {
String fingerprint = e.getKey();
- String details = e.getValue();
- DetailsStatus detailsStatus = this.documentStore.retrieve(
- DetailsStatus.class, true, fingerprint);
- if (detailsStatus == null) {
- detailsStatus = new DetailsStatus();
- } else if (details.equals(detailsStatus.getPoolAssignment())) {
- continue;
- }
- detailsStatus.setPoolAssignment(details);
- this.documentStore.store(detailsStatus, fingerprint);
- }
- }
-
- private void setCurrentNodes() {
- long cutoff = Math.max(this.relaysLastValidAfterMillis,
- this.bridgesLastPublishedMillis) - 7L * 24L * 60L * 60L * 1000L;
- SortedMap<String, NodeStatus> currentNodes =
- new TreeMap<String, NodeStatus>();
- for (Map.Entry<String, NodeStatus> e : this.knownNodes.entrySet()) {
- if (e.getValue().getLastSeenMillis() >= cutoff) {
- currentNodes.put(e.getKey(), e.getValue());
- }
- }
- this.relays = new TreeMap<String, NodeStatus>();
- this.bridges = new TreeMap<String, NodeStatus>();
- for (Map.Entry<String, NodeStatus> e : currentNodes.entrySet()) {
- if (e.getValue().isRelay()) {
- this.relays.put(e.getKey(), e.getValue());
- } else {
- this.bridges.put(e.getKey(), e.getValue());
- }
- }
- }
-
- private Map<String, Map<String, Long>> exitListEntries =
- new HashMap<String, Map<String, Long>>();
-
- private void processExitList(ExitList exitList) {
- for (ExitListEntry exitListEntry : exitList.getExitListEntries()) {
- String fingerprint = exitListEntry.getFingerprint();
- if (exitListEntry.getScanMillis() <
- this.now - DateTimeHelper.ONE_DAY) {
- continue;
- }
- if (!this.exitListEntries.containsKey(fingerprint)) {
- this.exitListEntries.put(fingerprint,
- new HashMap<String, Long>());
- }
- String exitAddress = exitListEntry.getExitAddress();
- long scanMillis = exitListEntry.getScanMillis();
- if (!this.exitListEntries.get(fingerprint).containsKey(exitAddress)
- || this.exitListEntries.get(fingerprint).get(exitAddress)
- < scanMillis) {
- this.exitListEntries.get(fingerprint).put(exitAddress,
- scanMillis);
+ NodeStatus node = e.getValue();
+ if (node.isRelay()) {
+ if (node.getRelayFlags().contains("Running") &&
+ node.getLastSeenMillis() == this.relaysLastValidAfterMillis) {
+ node.setRunning(true);
+ }
+ DetailsStatus detailsStatus = this.documentStore.retrieve(
+ DetailsStatus.class, true, fingerprint);
+ if (detailsStatus != null) {
+ node.setContact(detailsStatus.getContact());
+ if (detailsStatus.getExitAddresses() != null) {
+ for (Map.Entry<String, Long> ea :
+ detailsStatus.getExitAddresses().entrySet()) {
+ if (ea.getValue() >= this.now - DateTimeHelper.ONE_DAY) {
+ node.addExitAddress(ea.getKey());
+ }
+ }
+ }
+ if (detailsStatus.getFamily() != null &&
+ !detailsStatus.getFamily().isEmpty()) {
+ SortedSet<String> familyFingerprints = new TreeSet<String>();
+ for (String familyMember : detailsStatus.getFamily()) {
+ if (familyMember.startsWith("$") &&
+ familyMember.length() == 41) {
+ familyFingerprints.add(familyMember.substring(1));
+ }
+ }
+ if (!familyFingerprints.isEmpty()) {
+ node.setFamilyFingerprints(familyFingerprints);
+ }
+ }
+ }
}
- }
- }
-
- private void startReverseDomainNameLookups() {
- Map<String, Long> addressLastLookupTimes =
- new HashMap<String, Long>();
- for (NodeStatus relay : relays.values()) {
- addressLastLookupTimes.put(relay.getAddress(),
- relay.getLastRdnsLookup());
- }
- this.reverseDomainNameResolver.setAddresses(addressLastLookupTimes);
- this.reverseDomainNameResolver.startReverseDomainNameLookups();
- }
-
- private void finishReverseDomainNameLookups() {
- this.reverseDomainNameResolver.finishReverseDomainNameLookups();
- Map<String, String> lookupResults =
- this.reverseDomainNameResolver.getLookupResults();
- long startedRdnsLookups =
- this.reverseDomainNameResolver.getLookupStartMillis();
- for (NodeStatus relay : relays.values()) {
- if (lookupResults.containsKey(relay.getAddress())) {
- relay.setHostName(lookupResults.get(relay.getAddress()));
- relay.setLastRdnsLookup(startedRdnsLookups);
+ if (!node.isRelay() && node.getRelayFlags().contains("Running") &&
+ node.getLastSeenMillis() == this.bridgesLastPublishedMillis) {
+ node.setRunning(true);
}
}
}
@@ -570,6 +550,26 @@ public class NodeDetailsStatusUpdater implements DescriptorListener,
}
}
+ private void finishReverseDomainNameLookups() {
+ this.reverseDomainNameResolver.finishReverseDomainNameLookups();
+ Map<String, String> lookupResults =
+ this.reverseDomainNameResolver.getLookupResults();
+ long startedRdnsLookups =
+ this.reverseDomainNameResolver.getLookupStartMillis();
+ for (NodeStatus relay : relays.values()) {
+ if (lookupResults.containsKey(relay.getAddress())) {
+ relay.setHostName(lookupResults.get(relay.getAddress()));
+ relay.setLastRdnsLookup(startedRdnsLookups);
+ }
+ }
+ }
+
+ private void writeStatusSummary() {
+ for (Map.Entry<String, NodeStatus> e : this.knownNodes.entrySet()) {
+ this.documentStore.store(e.getValue(), e.getKey());
+ }
+ }
+
private void updateDetailsStatuses() {
SortedSet<String> fingerprints = new TreeSet<String>();
fingerprints.addAll(this.exitListEntries.keySet());
1
0