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 2012
- 14 participants
- 949 discussions

10 Jul '12
commit a129f69242588fdc679eb33cfcc38288b09d07e5
Author: Arturo Filastò <art(a)torproject.org>
Date: Tue Jul 10 10:07:47 2012 +0200
Code refactoring, restructure directory tree.
---
ooni/config.py | 53 ---------
ooni/date.py | 22 ----
ooni/example_plugins/examplescapy.py | 2 +-
ooni/example_plugins/skel.py | 2 +-
ooni/log.py | 43 -------
ooni/logo.py | 214 ----------------------------------
ooni/ooniprobe.py | 11 +-
ooni/plugins/bridget.py | 2 +-
ooni/plugins/captiveportal.py | 2 +-
ooni/plugins/chinatrigger.py | 2 +-
ooni/plugins/httpt.py | 2 +-
ooni/plugins/tcpconnect.py | 2 +-
ooni/plugoo/nodes.py | 2 +-
ooni/plugoo/reports.py | 2 +-
ooni/plugoo/tests.py | 4 +-
ooni/protocols/http.py | 2 +-
ooni/protocols/scapy.py | 2 +-
ooni/scaffolding.py | 4 +-
ooni/utils.py | 146 -----------------------
ooni/utils/__init__.py | 146 +++++++++++++++++++++++
ooni/utils/config.py | 53 +++++++++
ooni/utils/date.py | 22 ++++
ooni/utils/log.py | 43 +++++++
ooni/utils/logo.py | 214 ++++++++++++++++++++++++++++++++++
24 files changed, 499 insertions(+), 498 deletions(-)
diff --git a/ooni/config.py b/ooni/config.py
deleted file mode 100644
index 42a14f6..0000000
--- a/ooni/config.py
+++ /dev/null
@@ -1,53 +0,0 @@
-import ConfigParser
-from utils import Storage
-
-class Config(Storage):
- """
- A Storage-like class which loads and store each attribute into a portable
- conf file.
- """
- def __init__(self, section, cfgfile="ooni-probe.conf"):
- super(Config, self).__init__()
-
- self._cfgfile = cfgfile
- # setting up confgiparser
- self._cfgparser = ConfigParser.ConfigParser()
- self._cfgparser.read([self._cfgfile])
- self._section = section
-
- def __getattr__(self, name):
- if name.startswith('_'):
- return self.__dict__.get(name, None)
-
- try:
- value = self._cfgparser.get(self._section, name)
- if value.isdigit():
- return int(value)
- elif value.lower() in ('true', 'false'):
- return value.lower() == 'true'
- else:
- return value
- except ConfigParser.NoOptionError:
- return '' # if option doesn't exists return an empty string
-
- def __setattr__(self, name, value):
- # keep an open port with private attributes
- if name.startswith('_'):
- self.__dict__[name] = value
- return
-
- try:
- # XXX: Automagically discover variable type
- self._cfgparser.set(self._section, name, value)
- except ConfigParser.NoOptionError:
- raise NameError(name)
-
- def commit(self):
- """
- Commit changes in config file.
- """
- cfgfile = open(self._cfgfile, 'w')
- try:
- self._cfgparser.write(cfgfile)
- finally:
- cfgfile.close()
diff --git a/ooni/date.py b/ooni/date.py
deleted file mode 100644
index 59ec1f8..0000000
--- a/ooni/date.py
+++ /dev/null
@@ -1,22 +0,0 @@
-from ooni.lib.rfc3339 import rfc3339
-from datetime import datetime
-
-class odate(datetime):
- def __str__(self):
- return rfc3339(self)
-
- def __repr__(self):
- return "'%s'" % rfc3339(self)
-
- def from_rfc(self, datestr):
- pass
-
-def now():
- return odate.utcnow()
-
-def pretty_date():
- cur_time = datetime.utcnow()
- d_format = "%d %B %Y %H:%M:%S"
- pretty = cur_time.strftime(d_format)
- return pretty
-
diff --git a/ooni/example_plugins/examplescapy.py b/ooni/example_plugins/examplescapy.py
index aa6d81b..144afee 100644
--- a/ooni/example_plugins/examplescapy.py
+++ b/ooni/example_plugins/examplescapy.py
@@ -5,7 +5,7 @@ from twisted.plugin import IPlugin
from twisted.internet import protocol, defer
from ooni.plugoo.tests import ITest, OONITest
from ooni.plugoo.assets import Asset
-from ooni import log
+from ooni.utils import log
from ooni.protocols.scapy import ScapyTest
from ooni.lib.txscapy import txsr, txsend
diff --git a/ooni/example_plugins/skel.py b/ooni/example_plugins/skel.py
index de95b48..52c7d4f 100644
--- a/ooni/example_plugins/skel.py
+++ b/ooni/example_plugins/skel.py
@@ -2,7 +2,7 @@ from zope.interface import implements
from twisted.python import usage
from twisted.plugin import IPlugin
from plugoo.tests import ITest, OONITest
-from ooni import log
+from ooni.utils import log
class SkelArgs(usage.Options):
optParameters = [['asset', 'a', None, 'Asset file'],
diff --git a/ooni/log.py b/ooni/log.py
deleted file mode 100644
index 3dc52dd..0000000
--- a/ooni/log.py
+++ /dev/null
@@ -1,43 +0,0 @@
-"""
-OONI logging facility.
-"""
-import sys
-import logging
-import warnings
-
-from twisted.python import log
-
-# Logging levels
-DEBUG = logging.DEBUG
-INFO = logging.INFO
-WARNING = logging.WARNING
-ERROR = logging.ERROR
-CRITICAL = logging.CRITICAL
-
-def _get_log_level(level):
- if not level:
- return INFO
- else:
- return level
-
-def start(logfile=None, loglevel=None, logstdout=True):
- if log.defaultObserver:
- print "%s" % logstdout
- loglevel = _get_log_level(loglevel)
- file = open(logfile, 'a') if logfile else sys.stderr
- observer = log.FileLogObserver(file)
- if logstdout:
- log.startLogging(sys.stdout)
- else:
- log.startLogging()
- log.addObserver(observer.emit)
- msg("Started OONI")
-
-def msg(message, level=INFO, **kw):
- log.msg(message, logLevel=level, **kw)
-
-def err(message, **kw):
- log.err(message, **kw)
-
-def debug(message, **kw):
- log.msg(message, logLevel=DEBUG, **kw)
diff --git a/ooni/logo.py b/ooni/logo.py
deleted file mode 100644
index 8924462..0000000
--- a/ooni/logo.py
+++ /dev/null
@@ -1,214 +0,0 @@
-import random
-def getlogo():
- logo = []
- logo.append("""
- _____ _____ __ _ _____ _____ ______ _____ ______ _______
- | | | | | \ | | |_____] |_____/ | | |_____] |______
- |_____| |_____| | \_| __|__ | | \_ |_____| |_____] |______""")
-
- logo.append("""
- _ _
- (_) | |
- ___ ___ _ __ _ _ __ _ __ ___ | |__ ___
- / _ \ / _ \| '_ \| | '_ \| '__/ _ \| '_ \ / _ \\
-| (_) | (_) | | | | | |_) | | | (_) | |_) | __/
- \___/ \___/|_| |_|_| .__/|_| \___/|_.__/ \___|
- | |
- |_|""")
-
-
- logo.append("""
- .__ ___.
- ____ ____ ____ |__|_____________ ____\_ |__ ____
- / _ \ / _ \ / \| |\____ \_ __ \/ _ \| __ \_/ __ \\
-( <_> | <_> ) | \ || |_> > | \( <_> ) \_\ \ ___/
- \____/ \____/|___| /__|| __/|__| \____/|___ /\___ >
- \/ |__| \/ \/""")
-
-
- logo.append("""
- __ __ __ __ __ __ ___
-/ \ / \ |\ | | |__) |__) / \ |__) |__
-\__/ \__/ | \| | | | \ \__/ |__) |___ """)
-
-
- logo.append("""
- _ _ ._ o ._ ._ _ |_ _
- (_) (_) | | | |_) | (_) |_) (/_
- |
-""")
-
- logo.append("""
- _______ _______ __ _ ___ _______ ______ _______ _______ _______
-| || || | | || | | || _ | | || _ || |
-| _ || _ || |_| || | | _ || | || | _ || |_| || ___|
-| | | || | | || || | | |_| || |_|| | | | || || |___
-| |_| || |_| || _ || | | ___|| __ || |_| || _ | | ___|
-| || || | | || | | | | | ||| || |_| || |___
-|_______||_______||_| |__||___| |___| |___| |||_______||_______||_______|
-""")
-
-
- logo.append("""
- _ _
- ___ ___ _ __ (_)_ __ _ __ ___ | |__ ___
- / _ \ / _ \| '_ \| | '_ \| '__/ _ \| '_ \ / _ \\
-| (_) | (_) | | | | | |_) | | | (_) | |_) | __/
- \___/ \___/|_| |_|_| .__/|_| \___/|_.__/ \___|
- |_|
-""")
-
- logo.append("""
- o
- o O
- O
- o
-.oOo. .oOo. 'OoOo. O .oOo. `OoOo. .oOo. OoOo. .oOo.
-O o O o o O o O o o O o O o OooO'
-o O o O O o O o O O o O o O O
-`OoO' `OoO' o O o' oOoO' o `OoO' `OoO' `OoO'
- O
- o'
-""")
-
-
- logo.append("""
- _____ _____ ____ _ ____ _____ _____ _____ ______ ______
- / \/ \| \ | || || || | / \| >| ___|
- | || || \| || || _|| \ | || < | ___|
- \_____/\_____/|__/\____||____||___| |__|\__\\\\_____/|______>|______|
-""")
-
- logo.append("""
- _ _
- ___ ___ ___|_|___ ___ ___| |_ ___
-| . | . | | | . | _| . | . | -_|
-|___|___|_|_|_| _|_| |___|___|___|
- |_|
-""")
-
- logo.append("""
- _ _
- (_) | |
- ___ ___ ____ _ ____ ____ ___ | |__ _____
- / _ \ / _ \| _ \| | _ \ / ___) _ \| _ \| ___ |
-| |_| | |_| | | | | | |_| | | | |_| | |_) ) ____|
- \___/ \___/|_| |_|_| __/|_| \___/|____/|_____)
- |_|
-""")
- logo.append("""
- _ __
- ____ ____ ____ (_)____ _________ / /_ ___
- / __ \/ __ \/ __ \/ // __ \/ ___/ __ \/ __ \/ _ \\
-/ /_/ / /_/ / / / / // /_/ / / / /_/ / /_/ / __/
-\____/\____/_/ /_/_// .___/_/ \____/_.___/\___/
- /_/
-""")
- logo.append("""
- _) |
- _ \ _ \ \ | _ \ _| _ \ _ \ -_)
- \___/ \___/ _| _| _| .__/ _| \___/ _.__/ \___|
- _|
-""")
- logo.append("""
- _ _
- ___ ___ _ __ (_)_ __ _ __ ___ | |__ ___
- / _ \ / _ \| '_ \| | '_ \| '__/ _ \| '_ \ / _ \\
- | (_) | (_) | | | | | |_) | | | (_) | |_) | __/
- \___/ \___/|_| |_|_| .__/|_| \___/|_.__/ \___|
- |_|
-""")
- logo.append("""
- .-. ( )
- .--. .--. ___ .-. ( __) .-.. ___ .-. .--. | |.-. .--.
- / \ / \ ( ) \ (''") / \ ( ) \ / \ | / \ / \\
-| .-. ; | .-. ; | .-. . | | ' .-, ; | ' .-. ; | .-. ; | .-. | | .-. ;
-| | | | | | | | | | | | | | | | . | | / (___) | | | | | | | | | | | |
-| | | | | | | | | | | | | | | | | | | | | | | | | | | | | |/ |
-| | | | | | | | | | | | | | | | | | | | | | | | | | | | | ' _.'
-| ' | | | ' | | | | | | | | | | ' | | | | ' | | | ' | | | .'.-.
-' `-' / ' `-' / | | | | | | | `-' ' | | ' `-' / ' `-' ; ' `-' /
- `.__.' `.__.' (___)(___) (___) | \__.' (___) `.__.' `.__. `.__.'
- | |
- (___)
-""")
- logo.append("""
- o |
-,---.,---.,---..,---.,---.,---.|---.,---.
-| || || ||| || | || ||---'
-`---'`---'` '`|---'` `---'`---'`---'
- |
-""")
- logo.append("""
- ________________________________________
-/ OONI-PROBE -- WE FIGHT CENSORSHIP LIKE \\
-\ DRAGONS EAT KNIGHTS! /
- ----------------------------------------
- \ ^ /^
- \ / \ // \\
- \ |\___/| / \// .\\
- \ /O O \__ / // | \ \ *----*
- / / \/_/ // | \ \ \ |
- @___@` \/_ // | \ \ \/\ \\
- 0/0/| \/_ // | \ \ \ \\
- 0/0/0/0/| \/// | \ \ | |
- 0/0/0/0/0/_|_ / ( // | \ _\ | /
- 0/0/0/0/0/0/`/,_ _ _/ ) ; -. | _ _\.-~ / /
- ,-} _ *-.|.-~-. .~ ~
- \ \__/ `/\ / ~-. _ .-~ /
- \____(oo) *. } { /
- ( (--) .----~-.\ \-` .~
- //__\\\\ \__ Ack! ///.----..< \ _ -~
- // \\\\ ///-._ _ _ _ _ _ _{^ - - - - ~
-""")
- logo.append("""
- _________________
-| OONI-PROBE |
-| DON'T CENSOR ME |
-|_________________|
-\ . .
- \ / `. .' "
- \ .---. < > < > .---.
- \ | \ \ - ~ ~ - / / |
- _____ ..-~ ~-..-~
- | (A)| \~~~\.' `./~~~/
- --------- \__/ \__/
- .' O \ / / \ "
- (_____, `._.' | } \/~~~/
- `----. / } | / \__/
- `-. | / | / `. ,~~|
- ~-.__| /_ - ~ ^| /- _ `..-'
- | / | / ~-. `-. _ _ _
- |_____| |_____| ~ - . _ _ _ _ _>
-""")
- logo.append("""
- _________________
- ,/~~, | |
- /`` \ /| OONI-PROBE... |
- `( O^O ) / | |
- `\_-_/` | ...DOES THIS |
- ~~~ | EXCITE YOU? |
- __| |__ |_________________|
- | |
- | af |
- | | | |
- | | | \\
- | | |\ \\
- | | | \ \\
- | | | \ \\
- | |___| (((
- (((|/*\|
- | | |
- | | |
- | | |
- | | |
- | | |
- | | |
- | | |
- | | |
- | | |
- | | |
- _| | |_
- (___|___)
-""")
- return random.choice(logo)
diff --git a/ooni/ooniprobe.py b/ooni/ooniprobe.py
index 22299ac..261eb74 100755
--- a/ooni/ooniprobe.py
+++ b/ooni/ooniprobe.py
@@ -17,19 +17,20 @@
#
import sys
+from pprint import pprint
from twisted.python import usage
-from twisted.plugin import getPlugins
from twisted.internet import reactor
+from twisted.plugin import getPlugins
+from zope.interface.verify import verifyObject
from zope.interface.exceptions import BrokenImplementation
from zope.interface.exceptions import BrokenMethodImplementation
-from zope.interface.verify import verifyObject
-from pprint import pprint
from ooni.plugoo import tests, work, assets, reports
-from ooni.logo import getlogo
-from ooni import plugins, log
+from ooni.utils.logo import getlogo
+from ooni.utils import log
+from ooni import plugins
__version__ = "0.0.1-prealpha"
diff --git a/ooni/plugins/bridget.py b/ooni/plugins/bridget.py
index 0614d5d..fa3cb67 100644
--- a/ooni/plugins/bridget.py
+++ b/ooni/plugins/bridget.py
@@ -8,7 +8,7 @@ from twisted.python import usage
from twisted.plugin import IPlugin
from twisted.internet import reactor
-from ooni import log
+from ooni.utils import log
from ooni.plugoo.tests import ITest, OONITest
from ooni.plugoo.assets import Asset
diff --git a/ooni/plugins/captiveportal.py b/ooni/plugins/captiveportal.py
index 4ed00b3..b48f70b 100644
--- a/ooni/plugins/captiveportal.py
+++ b/ooni/plugins/captiveportal.py
@@ -25,7 +25,7 @@ from twisted.plugin import IPlugin
from ooni.plugoo.assets import Asset
from ooni.plugoo.tests import ITest, OONITest
from ooni.protocols import http
-from ooni import log
+from ooni.utils import log
try:
from dns import resolver
diff --git a/ooni/plugins/chinatrigger.py b/ooni/plugins/chinatrigger.py
index 4f2dc8c..538ef0b 100644
--- a/ooni/plugins/chinatrigger.py
+++ b/ooni/plugins/chinatrigger.py
@@ -9,7 +9,7 @@ from twisted.plugin import IPlugin
from twisted.internet import protocol, defer
from ooni.plugoo.tests import ITest, OONITest
from ooni.plugoo.assets import Asset
-from ooni import log
+from ooni.utils import log
from ooni.protocols.scapy import ScapyTest
from ooni.lib.txscapy import txsr, txsend
diff --git a/ooni/plugins/httpt.py b/ooni/plugins/httpt.py
index d0ede0f..4113aef 100644
--- a/ooni/plugins/httpt.py
+++ b/ooni/plugins/httpt.py
@@ -9,7 +9,7 @@ from twisted.plugin import IPlugin
from ooni.plugoo.tests import ITest, OONITest
from ooni.plugoo.assets import Asset
from ooni.protocols import http
-from ooni import log
+from ooni.utils import log
class httptArgs(usage.Options):
optParameters = [['urls', 'f', None, 'Urls file'],
diff --git a/ooni/plugins/tcpconnect.py b/ooni/plugins/tcpconnect.py
index 7c04994..db3d969 100644
--- a/ooni/plugins/tcpconnect.py
+++ b/ooni/plugins/tcpconnect.py
@@ -11,7 +11,7 @@ from twisted.internet.endpoints import TCP4ClientEndpoint
from ooni.plugoo.tests import ITest, OONITest
from ooni.plugoo.assets import Asset
-from ooni import log
+from ooni.utils import log
class tcpconnectArgs(usage.Options):
optParameters = [['asset', 'a', None, 'File containing IP:PORT combinations, one per line.'],
diff --git a/ooni/plugoo/nodes.py b/ooni/plugoo/nodes.py
index 6cdba65..0d01348 100644
--- a/ooni/plugoo/nodes.py
+++ b/ooni/plugoo/nodes.py
@@ -99,7 +99,7 @@ class PlanetLab(CodeExecNode):
def __init__(self, address, auth_creds, ooni):
self.auth_creds = auth_creds
- self.config = ooni.config
+ self.config = ooni.utils.config
self.logger = ooni.logger
self.name = "PlanetLab"
diff --git a/ooni/plugoo/reports.py b/ooni/plugoo/reports.py
index a963f1c..3a9c5d2 100644
--- a/ooni/plugoo/reports.py
+++ b/ooni/plugoo/reports.py
@@ -4,7 +4,7 @@ import os
import yaml
import itertools
-from ooni import log, date
+from ooni.utils import log, date
class Report:
"""This is the ooni-probe reporting mechanism. It allows
diff --git a/ooni/plugoo/tests.py b/ooni/plugoo/tests.py
index 42294d6..a99a144 100644
--- a/ooni/plugoo/tests.py
+++ b/ooni/plugoo/tests.py
@@ -7,8 +7,8 @@ import itertools
from twisted.internet import reactor, defer, threads
from twisted.python import failure
-from ooni import log
-from ooni import date
+from ooni.utils import log
+from ooni.utils import date
from ooni.plugoo import assets, work
from ooni.plugoo.reports import Report
from ooni.plugoo.interface import ITest
diff --git a/ooni/protocols/http.py b/ooni/protocols/http.py
index 1dd2261..100db88 100644
--- a/ooni/protocols/http.py
+++ b/ooni/protocols/http.py
@@ -5,7 +5,7 @@ from twisted.plugin import IPlugin
from twisted.internet import protocol, defer
from ooni.plugoo.tests import ITest, OONITest
from ooni.plugoo.assets import Asset
-from ooni import log
+from ooni.utils import log
useragents = [("Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6", "Firefox 2.0, Windows XP"),
("Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)", "Internet Explorer 7, Windows Vista"),
diff --git a/ooni/protocols/scapy.py b/ooni/protocols/scapy.py
index bacc163..4166146 100644
--- a/ooni/protocols/scapy.py
+++ b/ooni/protocols/scapy.py
@@ -5,7 +5,7 @@ from twisted.plugin import IPlugin
from twisted.internet import protocol, defer
from ooni.plugoo.tests import ITest, OONITest
from ooni.plugoo.assets import Asset
-from ooni import log
+from ooni.utils import log
from ooni.lib.txscapy import txsr, txsend
diff --git a/ooni/scaffolding.py b/ooni/scaffolding.py
index b4c5645..0a832aa 100755
--- a/ooni/scaffolding.py
+++ b/ooni/scaffolding.py
@@ -5,7 +5,7 @@ This script should be used for creating the scaffolding for a test.
"""
import os
import sys
-from ooni import log
+from ooni.utils import log
test_template = """\"\"\"
This is a self genrated test created by scaffolding.py.
@@ -17,7 +17,7 @@ from twisted.python import usage
from twisted.plugin import IPlugin
from ooni.plugoo.tests import ITest, OONITest
from ooni.plugoo.assets import Asset
-from ooni import log
+from ooni.utils import log
class %(testShortname)sArgs(usage.Options):
optParameters = [['asset', 'a', None, 'Asset file'],
diff --git a/ooni/utils.py b/ooni/utils.py
deleted file mode 100644
index e9c55f1..0000000
--- a/ooni/utils.py
+++ /dev/null
@@ -1,146 +0,0 @@
-"""
-
-"""
-
-import imp
-import logging
-try:
- import yaml
-except:
- print "Error in importing YAML"
-
-class Storage(dict):
- """
- A Storage object is like a dictionary except `obj.foo` can be used
- in addition to `obj['foo']`.
-
- >>> o = Storage(a=1)
- >>> o.a
- 1
- >>> o['a']
- 1
- >>> o.a = 2
- >>> o['a']
- 2
- >>> del o.a
- >>> o.a
- None
- """
-
- def __getattr__(self, key):
- try:
- return self[key]
- except KeyError, k:
- return None
-
- def __setattr__(self, key, value):
- self[key] = value
-
- def __delattr__(self, key):
- try:
- del self[key]
- except KeyError, k:
- raise AttributeError, k
-
- def __repr__(self):
- return '<Storage ' + dict.__repr__(self) + '>'
-
- def __getstate__(self):
- return dict(self)
-
- def __setstate__(self, value):
- for (k, v) in value.items():
- self[k] = v
-
-
-def get_logger(config):
- loglevel = getattr(logging, config.loglevel.upper())
- logging.basicConfig(level=loglevel,
- format='%(asctime)s %(name)-12s %(levelname)-8s %(message)s',
- filename=config.logfile,
- filemode='w')
-
- console = logging.StreamHandler()
- console.setLevel(getattr(logging, config.consoleloglevel.upper()))
- # Set the console logger to a different format
- formatter = logging.Formatter('%(name)-12s: %(levelname)-8s %(message)s')
- console.setFormatter(formatter)
- logging.getLogger('').addHandler(console)
-
- return logging.getLogger('ooniprobe')
-
-def parse_asset(asset):
- parsed = Storage()
- try:
- with open(asset, 'r') as f:
- for line in f.readlines():
- # XXX This should be rewritten, if the values contain
- # #: they will be rewritten with blank.
- # should not be an issue but this is not a very good parser
- if line.startswith("#:"):
- n = line.split(' ')[0].replace('#:','')
- v = line.replace('#:'+n+' ', '').strip()
- if n in ('tests', 'files'):
- parsed[n] = v.split(",")
- else:
- parsed[n] = v
-
- elif line.startswith("#"):
- continue
- else:
- break
- finally:
- if not parsed.name:
- parsed.name = asset
- if not parsed.files:
- parsed.files = asset
- return parsed
-
-def import_test(name, config):
- if name.endswith(".py"):
- test = Storage()
- test_name = name.split(".")[0]
- fp, pathname, description = imp.find_module(test_name,
- [config.main.testdir])
- module = imp.load_module(name, fp, pathname, description)
-
- try:
- test.name = module.__name__
- test.desc = module.__desc__
- test.module = module
- except:
- test.name = test_name
- test.desc = ""
- test.module = module
-
- return test_name, test
-
- return None, None
-
-class Log():
- """
- This is a class necessary for parsing YAML log files.
- It is required because pyYaml has a bug in parsing
- log format YAML files.
- """
- def __init__(self, file=None):
- if file:
- self.fh = open(file)
-
- def __iter__(self):
- return self
-
- def next(self):
- lines = []
- try:
- line = self.fh.readline()
- if not line:
- raise StopIteration
- while not line.startswith("---"):
- lines.append(line)
- line = self.fh.readline()
- return lines
- except:
- raise StopIteration
-
-
diff --git a/ooni/utils/__init__.py b/ooni/utils/__init__.py
new file mode 100644
index 0000000..e9c55f1
--- /dev/null
+++ b/ooni/utils/__init__.py
@@ -0,0 +1,146 @@
+"""
+
+"""
+
+import imp
+import logging
+try:
+ import yaml
+except:
+ print "Error in importing YAML"
+
+class Storage(dict):
+ """
+ A Storage object is like a dictionary except `obj.foo` can be used
+ in addition to `obj['foo']`.
+
+ >>> o = Storage(a=1)
+ >>> o.a
+ 1
+ >>> o['a']
+ 1
+ >>> o.a = 2
+ >>> o['a']
+ 2
+ >>> del o.a
+ >>> o.a
+ None
+ """
+
+ def __getattr__(self, key):
+ try:
+ return self[key]
+ except KeyError, k:
+ return None
+
+ def __setattr__(self, key, value):
+ self[key] = value
+
+ def __delattr__(self, key):
+ try:
+ del self[key]
+ except KeyError, k:
+ raise AttributeError, k
+
+ def __repr__(self):
+ return '<Storage ' + dict.__repr__(self) + '>'
+
+ def __getstate__(self):
+ return dict(self)
+
+ def __setstate__(self, value):
+ for (k, v) in value.items():
+ self[k] = v
+
+
+def get_logger(config):
+ loglevel = getattr(logging, config.loglevel.upper())
+ logging.basicConfig(level=loglevel,
+ format='%(asctime)s %(name)-12s %(levelname)-8s %(message)s',
+ filename=config.logfile,
+ filemode='w')
+
+ console = logging.StreamHandler()
+ console.setLevel(getattr(logging, config.consoleloglevel.upper()))
+ # Set the console logger to a different format
+ formatter = logging.Formatter('%(name)-12s: %(levelname)-8s %(message)s')
+ console.setFormatter(formatter)
+ logging.getLogger('').addHandler(console)
+
+ return logging.getLogger('ooniprobe')
+
+def parse_asset(asset):
+ parsed = Storage()
+ try:
+ with open(asset, 'r') as f:
+ for line in f.readlines():
+ # XXX This should be rewritten, if the values contain
+ # #: they will be rewritten with blank.
+ # should not be an issue but this is not a very good parser
+ if line.startswith("#:"):
+ n = line.split(' ')[0].replace('#:','')
+ v = line.replace('#:'+n+' ', '').strip()
+ if n in ('tests', 'files'):
+ parsed[n] = v.split(",")
+ else:
+ parsed[n] = v
+
+ elif line.startswith("#"):
+ continue
+ else:
+ break
+ finally:
+ if not parsed.name:
+ parsed.name = asset
+ if not parsed.files:
+ parsed.files = asset
+ return parsed
+
+def import_test(name, config):
+ if name.endswith(".py"):
+ test = Storage()
+ test_name = name.split(".")[0]
+ fp, pathname, description = imp.find_module(test_name,
+ [config.main.testdir])
+ module = imp.load_module(name, fp, pathname, description)
+
+ try:
+ test.name = module.__name__
+ test.desc = module.__desc__
+ test.module = module
+ except:
+ test.name = test_name
+ test.desc = ""
+ test.module = module
+
+ return test_name, test
+
+ return None, None
+
+class Log():
+ """
+ This is a class necessary for parsing YAML log files.
+ It is required because pyYaml has a bug in parsing
+ log format YAML files.
+ """
+ def __init__(self, file=None):
+ if file:
+ self.fh = open(file)
+
+ def __iter__(self):
+ return self
+
+ def next(self):
+ lines = []
+ try:
+ line = self.fh.readline()
+ if not line:
+ raise StopIteration
+ while not line.startswith("---"):
+ lines.append(line)
+ line = self.fh.readline()
+ return lines
+ except:
+ raise StopIteration
+
+
diff --git a/ooni/utils/config.py b/ooni/utils/config.py
new file mode 100644
index 0000000..42a14f6
--- /dev/null
+++ b/ooni/utils/config.py
@@ -0,0 +1,53 @@
+import ConfigParser
+from utils import Storage
+
+class Config(Storage):
+ """
+ A Storage-like class which loads and store each attribute into a portable
+ conf file.
+ """
+ def __init__(self, section, cfgfile="ooni-probe.conf"):
+ super(Config, self).__init__()
+
+ self._cfgfile = cfgfile
+ # setting up confgiparser
+ self._cfgparser = ConfigParser.ConfigParser()
+ self._cfgparser.read([self._cfgfile])
+ self._section = section
+
+ def __getattr__(self, name):
+ if name.startswith('_'):
+ return self.__dict__.get(name, None)
+
+ try:
+ value = self._cfgparser.get(self._section, name)
+ if value.isdigit():
+ return int(value)
+ elif value.lower() in ('true', 'false'):
+ return value.lower() == 'true'
+ else:
+ return value
+ except ConfigParser.NoOptionError:
+ return '' # if option doesn't exists return an empty string
+
+ def __setattr__(self, name, value):
+ # keep an open port with private attributes
+ if name.startswith('_'):
+ self.__dict__[name] = value
+ return
+
+ try:
+ # XXX: Automagically discover variable type
+ self._cfgparser.set(self._section, name, value)
+ except ConfigParser.NoOptionError:
+ raise NameError(name)
+
+ def commit(self):
+ """
+ Commit changes in config file.
+ """
+ cfgfile = open(self._cfgfile, 'w')
+ try:
+ self._cfgparser.write(cfgfile)
+ finally:
+ cfgfile.close()
diff --git a/ooni/utils/date.py b/ooni/utils/date.py
new file mode 100644
index 0000000..59ec1f8
--- /dev/null
+++ b/ooni/utils/date.py
@@ -0,0 +1,22 @@
+from ooni.lib.rfc3339 import rfc3339
+from datetime import datetime
+
+class odate(datetime):
+ def __str__(self):
+ return rfc3339(self)
+
+ def __repr__(self):
+ return "'%s'" % rfc3339(self)
+
+ def from_rfc(self, datestr):
+ pass
+
+def now():
+ return odate.utcnow()
+
+def pretty_date():
+ cur_time = datetime.utcnow()
+ d_format = "%d %B %Y %H:%M:%S"
+ pretty = cur_time.strftime(d_format)
+ return pretty
+
diff --git a/ooni/utils/log.py b/ooni/utils/log.py
new file mode 100644
index 0000000..3dc52dd
--- /dev/null
+++ b/ooni/utils/log.py
@@ -0,0 +1,43 @@
+"""
+OONI logging facility.
+"""
+import sys
+import logging
+import warnings
+
+from twisted.python import log
+
+# Logging levels
+DEBUG = logging.DEBUG
+INFO = logging.INFO
+WARNING = logging.WARNING
+ERROR = logging.ERROR
+CRITICAL = logging.CRITICAL
+
+def _get_log_level(level):
+ if not level:
+ return INFO
+ else:
+ return level
+
+def start(logfile=None, loglevel=None, logstdout=True):
+ if log.defaultObserver:
+ print "%s" % logstdout
+ loglevel = _get_log_level(loglevel)
+ file = open(logfile, 'a') if logfile else sys.stderr
+ observer = log.FileLogObserver(file)
+ if logstdout:
+ log.startLogging(sys.stdout)
+ else:
+ log.startLogging()
+ log.addObserver(observer.emit)
+ msg("Started OONI")
+
+def msg(message, level=INFO, **kw):
+ log.msg(message, logLevel=level, **kw)
+
+def err(message, **kw):
+ log.err(message, **kw)
+
+def debug(message, **kw):
+ log.msg(message, logLevel=DEBUG, **kw)
diff --git a/ooni/utils/logo.py b/ooni/utils/logo.py
new file mode 100644
index 0000000..8924462
--- /dev/null
+++ b/ooni/utils/logo.py
@@ -0,0 +1,214 @@
+import random
+def getlogo():
+ logo = []
+ logo.append("""
+ _____ _____ __ _ _____ _____ ______ _____ ______ _______
+ | | | | | \ | | |_____] |_____/ | | |_____] |______
+ |_____| |_____| | \_| __|__ | | \_ |_____| |_____] |______""")
+
+ logo.append("""
+ _ _
+ (_) | |
+ ___ ___ _ __ _ _ __ _ __ ___ | |__ ___
+ / _ \ / _ \| '_ \| | '_ \| '__/ _ \| '_ \ / _ \\
+| (_) | (_) | | | | | |_) | | | (_) | |_) | __/
+ \___/ \___/|_| |_|_| .__/|_| \___/|_.__/ \___|
+ | |
+ |_|""")
+
+
+ logo.append("""
+ .__ ___.
+ ____ ____ ____ |__|_____________ ____\_ |__ ____
+ / _ \ / _ \ / \| |\____ \_ __ \/ _ \| __ \_/ __ \\
+( <_> | <_> ) | \ || |_> > | \( <_> ) \_\ \ ___/
+ \____/ \____/|___| /__|| __/|__| \____/|___ /\___ >
+ \/ |__| \/ \/""")
+
+
+ logo.append("""
+ __ __ __ __ __ __ ___
+/ \ / \ |\ | | |__) |__) / \ |__) |__
+\__/ \__/ | \| | | | \ \__/ |__) |___ """)
+
+
+ logo.append("""
+ _ _ ._ o ._ ._ _ |_ _
+ (_) (_) | | | |_) | (_) |_) (/_
+ |
+""")
+
+ logo.append("""
+ _______ _______ __ _ ___ _______ ______ _______ _______ _______
+| || || | | || | | || _ | | || _ || |
+| _ || _ || |_| || | | _ || | || | _ || |_| || ___|
+| | | || | | || || | | |_| || |_|| | | | || || |___
+| |_| || |_| || _ || | | ___|| __ || |_| || _ | | ___|
+| || || | | || | | | | | ||| || |_| || |___
+|_______||_______||_| |__||___| |___| |___| |||_______||_______||_______|
+""")
+
+
+ logo.append("""
+ _ _
+ ___ ___ _ __ (_)_ __ _ __ ___ | |__ ___
+ / _ \ / _ \| '_ \| | '_ \| '__/ _ \| '_ \ / _ \\
+| (_) | (_) | | | | | |_) | | | (_) | |_) | __/
+ \___/ \___/|_| |_|_| .__/|_| \___/|_.__/ \___|
+ |_|
+""")
+
+ logo.append("""
+ o
+ o O
+ O
+ o
+.oOo. .oOo. 'OoOo. O .oOo. `OoOo. .oOo. OoOo. .oOo.
+O o O o o O o O o o O o O o OooO'
+o O o O O o O o O O o O o O O
+`OoO' `OoO' o O o' oOoO' o `OoO' `OoO' `OoO'
+ O
+ o'
+""")
+
+
+ logo.append("""
+ _____ _____ ____ _ ____ _____ _____ _____ ______ ______
+ / \/ \| \ | || || || | / \| >| ___|
+ | || || \| || || _|| \ | || < | ___|
+ \_____/\_____/|__/\____||____||___| |__|\__\\\\_____/|______>|______|
+""")
+
+ logo.append("""
+ _ _
+ ___ ___ ___|_|___ ___ ___| |_ ___
+| . | . | | | . | _| . | . | -_|
+|___|___|_|_|_| _|_| |___|___|___|
+ |_|
+""")
+
+ logo.append("""
+ _ _
+ (_) | |
+ ___ ___ ____ _ ____ ____ ___ | |__ _____
+ / _ \ / _ \| _ \| | _ \ / ___) _ \| _ \| ___ |
+| |_| | |_| | | | | | |_| | | | |_| | |_) ) ____|
+ \___/ \___/|_| |_|_| __/|_| \___/|____/|_____)
+ |_|
+""")
+ logo.append("""
+ _ __
+ ____ ____ ____ (_)____ _________ / /_ ___
+ / __ \/ __ \/ __ \/ // __ \/ ___/ __ \/ __ \/ _ \\
+/ /_/ / /_/ / / / / // /_/ / / / /_/ / /_/ / __/
+\____/\____/_/ /_/_// .___/_/ \____/_.___/\___/
+ /_/
+""")
+ logo.append("""
+ _) |
+ _ \ _ \ \ | _ \ _| _ \ _ \ -_)
+ \___/ \___/ _| _| _| .__/ _| \___/ _.__/ \___|
+ _|
+""")
+ logo.append("""
+ _ _
+ ___ ___ _ __ (_)_ __ _ __ ___ | |__ ___
+ / _ \ / _ \| '_ \| | '_ \| '__/ _ \| '_ \ / _ \\
+ | (_) | (_) | | | | | |_) | | | (_) | |_) | __/
+ \___/ \___/|_| |_|_| .__/|_| \___/|_.__/ \___|
+ |_|
+""")
+ logo.append("""
+ .-. ( )
+ .--. .--. ___ .-. ( __) .-.. ___ .-. .--. | |.-. .--.
+ / \ / \ ( ) \ (''") / \ ( ) \ / \ | / \ / \\
+| .-. ; | .-. ; | .-. . | | ' .-, ; | ' .-. ; | .-. ; | .-. | | .-. ;
+| | | | | | | | | | | | | | | | . | | / (___) | | | | | | | | | | | |
+| | | | | | | | | | | | | | | | | | | | | | | | | | | | | |/ |
+| | | | | | | | | | | | | | | | | | | | | | | | | | | | | ' _.'
+| ' | | | ' | | | | | | | | | | ' | | | | ' | | | ' | | | .'.-.
+' `-' / ' `-' / | | | | | | | `-' ' | | ' `-' / ' `-' ; ' `-' /
+ `.__.' `.__.' (___)(___) (___) | \__.' (___) `.__.' `.__. `.__.'
+ | |
+ (___)
+""")
+ logo.append("""
+ o |
+,---.,---.,---..,---.,---.,---.|---.,---.
+| || || ||| || | || ||---'
+`---'`---'` '`|---'` `---'`---'`---'
+ |
+""")
+ logo.append("""
+ ________________________________________
+/ OONI-PROBE -- WE FIGHT CENSORSHIP LIKE \\
+\ DRAGONS EAT KNIGHTS! /
+ ----------------------------------------
+ \ ^ /^
+ \ / \ // \\
+ \ |\___/| / \// .\\
+ \ /O O \__ / // | \ \ *----*
+ / / \/_/ // | \ \ \ |
+ @___@` \/_ // | \ \ \/\ \\
+ 0/0/| \/_ // | \ \ \ \\
+ 0/0/0/0/| \/// | \ \ | |
+ 0/0/0/0/0/_|_ / ( // | \ _\ | /
+ 0/0/0/0/0/0/`/,_ _ _/ ) ; -. | _ _\.-~ / /
+ ,-} _ *-.|.-~-. .~ ~
+ \ \__/ `/\ / ~-. _ .-~ /
+ \____(oo) *. } { /
+ ( (--) .----~-.\ \-` .~
+ //__\\\\ \__ Ack! ///.----..< \ _ -~
+ // \\\\ ///-._ _ _ _ _ _ _{^ - - - - ~
+""")
+ logo.append("""
+ _________________
+| OONI-PROBE |
+| DON'T CENSOR ME |
+|_________________|
+\ . .
+ \ / `. .' "
+ \ .---. < > < > .---.
+ \ | \ \ - ~ ~ - / / |
+ _____ ..-~ ~-..-~
+ | (A)| \~~~\.' `./~~~/
+ --------- \__/ \__/
+ .' O \ / / \ "
+ (_____, `._.' | } \/~~~/
+ `----. / } | / \__/
+ `-. | / | / `. ,~~|
+ ~-.__| /_ - ~ ^| /- _ `..-'
+ | / | / ~-. `-. _ _ _
+ |_____| |_____| ~ - . _ _ _ _ _>
+""")
+ logo.append("""
+ _________________
+ ,/~~, | |
+ /`` \ /| OONI-PROBE... |
+ `( O^O ) / | |
+ `\_-_/` | ...DOES THIS |
+ ~~~ | EXCITE YOU? |
+ __| |__ |_________________|
+ | |
+ | af |
+ | | | |
+ | | | \\
+ | | |\ \\
+ | | | \ \\
+ | | | \ \\
+ | |___| (((
+ (((|/*\|
+ | | |
+ | | |
+ | | |
+ | | |
+ | | |
+ | | |
+ | | |
+ | | |
+ | | |
+ | | |
+ _| | |_
+ (___|___)
+""")
+ return random.choice(logo)
1
0

10 Jul '12
commit d52e934c24c9d327e277eb60bfee060697cb43ec
Author: Damian Johnson <atagar(a)torproject.org>
Date: Mon Jul 9 11:52:56 2012 -0700
Only consulting major descriptor versions
Minor descriptor version bumps are backward compatable changes. We might not
recognize new additions, but it won't break us either (they'll just be
unrecognized). Pointed out by Karsten on...
https://trac.torproject.org/6257
---
stem/descriptor/__init__.py | 8 ++++----
1 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/stem/descriptor/__init__.py b/stem/descriptor/__init__.py
index f3b40c5..bb6f874 100644
--- a/stem/descriptor/__init__.py
+++ b/stem/descriptor/__init__.py
@@ -81,13 +81,13 @@ def parse_file(path, descriptor_file):
desc_type, major_version, minor_version = metrics_header_match.groups()
major_version, minor_version = int(major_version), int(minor_version)
- if desc_type == "server-descriptor" and major_version == 1 and minor_version == 0:
+ if desc_type == "server-descriptor" and major_version == 1:
desc = stem.descriptor.server_descriptor.RelayDescriptor(descriptor_file.read())
- elif desc_type == "bridge-server-descriptor" and major_version == 1 and minor_version == 0:
+ elif desc_type == "bridge-server-descriptor" and major_version == 1:
desc = stem.descriptor.server_descriptor.BridgeDescriptor(descriptor_file.read())
- elif desc_type == "extra-info" and major_version == 1 and minor_version == 0:
+ elif desc_type == "extra-info" and major_version == 1:
desc = stem.descriptor.extrainfo_descriptor.RelayExtraInfoDescriptor(descriptor_file.read())
- elif desc_type == "bridge-extra-info" and major_version == 1 and minor_version in (0, 1):
+ elif desc_type == "bridge-extra-info" and major_version == 1:
# version 1.1 introduced a 'transport' field...
# https://trac.torproject.org/6257
1
0

10 Jul '12
commit a0f980c996587ef112379891339d463bda3d487a
Author: Damian Johnson <atagar(a)torproject.org>
Date: Mon Jul 9 12:00:08 2012 -0700
Supporting multiple extra-info transport lines
The 'transport' lines being added to extra-info descriptors can appear any
number of times, so storing them as a list. These options are weird in that
they have an "address:port [arglist]" which never appears in the wild since
they both only appear on bridge descriptors and are scrubbed from bridge
descripotrs.
---
stem/descriptor/extrainfo_descriptor.py | 11 +++++++++--
test/unit/descriptor/extrainfo_descriptor.py | 2 +-
2 files changed, 10 insertions(+), 3 deletions(-)
diff --git a/stem/descriptor/extrainfo_descriptor.py b/stem/descriptor/extrainfo_descriptor.py
index b1c7b09..366279c 100644
--- a/stem/descriptor/extrainfo_descriptor.py
+++ b/stem/descriptor/extrainfo_descriptor.py
@@ -743,7 +743,7 @@ class BridgeExtraInfoDescriptor(ExtraInfoDescriptor):
"""
Bridge extra-info descriptor (`specification <https://metrics.torproject.org/formats.html#bridgedesc>`_)
- :var str transport: transport method recognized by the bridge (ex. obfs3)
+ :var list transport: transport method recognized by the bridge (ex. obfs3)
"""
def __init__(self, raw_contents, validate = True):
@@ -764,7 +764,14 @@ class BridgeExtraInfoDescriptor(ExtraInfoDescriptor):
line = "%s %s" % (keyword, value) # original line
if keyword == "transport":
- self.transport = value
+ # "transport" transportname address:port [arglist]
+ # Everything after the transportname is scrubbed in published bridge
+ # descriptors, so we'll never see it in practice.
+
+ if self.transport is None:
+ self.transport = []
+
+ self.transport.append(value)
del entries["transport"]
elif keyword == "router-digest":
if validate and not stem.util.tor_tools.is_hex_digits(value, 40):
diff --git a/test/unit/descriptor/extrainfo_descriptor.py b/test/unit/descriptor/extrainfo_descriptor.py
index e9b06a0..a3590ee 100644
--- a/test/unit/descriptor/extrainfo_descriptor.py
+++ b/test/unit/descriptor/extrainfo_descriptor.py
@@ -529,7 +529,7 @@ class TestExtraInfoDescriptor(unittest.TestCase):
desc_text = _make_descriptor({"transport": "obfs3"}, is_bridge = True)
desc = BridgeExtraInfoDescriptor(desc_text)
- self.assertEquals("obfs3", desc.transport)
+ self.assertEquals(["obfs3"], desc.transport)
self.assertEquals([], desc.get_unrecognized_lines())
def _expect_invalid_attr(self, desc_text, attr = None, expected_value = None):
1
0

[stem/master] Allowing extra-info dirreq-v*-share to be above 100%
by atagar@torproject.org 10 Jul '12
by atagar@torproject.org 10 Jul '12
10 Jul '12
commit 611e75dbeb5a81a655ca0f8ec1b4495850c3459a
Author: Damian Johnson <atagar(a)torproject.org>
Date: Tue Jul 10 08:22:55 2012 -0700
Allowing extra-info dirreq-v*-share to be above 100%
Spotted an extra-info descriptor with dirreq-v2-share and dirreq-v3-share
values over 100%...
https://lists.torproject.org/pipermail/tor-dev/2012-June/003679.html
Karsten suggested simply removing the restriction on this field's upper bound
since it's soon going away.
---
stem/descriptor/extrainfo_descriptor.py | 7 +++++--
test/unit/descriptor/extrainfo_descriptor.py | 1 -
2 files changed, 5 insertions(+), 3 deletions(-)
diff --git a/stem/descriptor/extrainfo_descriptor.py b/stem/descriptor/extrainfo_descriptor.py
index 366279c..be2a6dc 100644
--- a/stem/descriptor/extrainfo_descriptor.py
+++ b/stem/descriptor/extrainfo_descriptor.py
@@ -488,8 +488,11 @@ class ExtraInfoDescriptor(stem.descriptor.Descriptor):
if not value.endswith("%"): raise ValueError()
percentage = float(value[:-1]) / 100
- if validate and (percentage > 1 or percentage < 0):
- raise ValueError()
+ # Bug lets these be above 100%, however they're soon going away...
+ # https://lists.torproject.org/pipermail/tor-dev/2012-June/003679.html
+
+ if validate and percentage < 0:
+ raise ValueError("Negative percentage value: %s" % line)
if keyword == "dirreq-v2-share":
self.dir_v2_share = percentage
diff --git a/test/unit/descriptor/extrainfo_descriptor.py b/test/unit/descriptor/extrainfo_descriptor.py
index a3590ee..c40ac94 100644
--- a/test/unit/descriptor/extrainfo_descriptor.py
+++ b/test/unit/descriptor/extrainfo_descriptor.py
@@ -305,7 +305,6 @@ class TestExtraInfoDescriptor(unittest.TestCase):
("", None),
(" ", None),
("100", None),
- ("100.1%", 1.001),
("-5%", -0.05),
)
1
0

10 Jul '12
commit d5e8ed1bb565f5bc60176bf6731434c4dde552d1
Author: Karsten Loesing <karsten.loesing(a)gmx.net>
Date: Tue Jul 10 12:27:16 2012 +0200
Don't cut off min-max expected users.
Fixes #6272, spotted by asn.
---
rserve/graphs.R | 10 ++++++----
1 files changed, 6 insertions(+), 4 deletions(-)
diff --git a/rserve/graphs.R b/rserve/graphs.R
index 0331750..5322376 100644
--- a/rserve/graphs.R
+++ b/rserve/graphs.R
@@ -701,6 +701,8 @@ plot_direct_users <- function(start, end, country, events, path, nocutoff,
date_breaks <- date_breaks(
as.numeric(max(as.Date(u$date, "%Y-%m-%d")) -
min(as.Date(u$date, "%Y-%m-%d"))))
+ max_y <- ifelse(length(na.omit(u$users)) == 0, 0,
+ max(u$users, na.rm = TRUE))
plot <- ggplot(u, aes(x = as.Date(date, "%Y-%m-%d"), y = users))
if (length(na.omit(u$users)) > 0 & events == "on" & country != "all") {
r <- read.csv(
@@ -708,6 +710,8 @@ plot_direct_users <- function(start, end, country, events, path, nocutoff,
stringsAsFactors = FALSE)
r <- r[r$date >= start & r$date <= end & r$country == country,
c("date", "minusers", "maxusers")]
+ if (length(r$maxusers) > 0)
+ max_y <- max(max_y, max(r$maxusers, na.rm = TRUE))
r <- cast(rbind(melt(u, id.vars = "date"), melt(r, id.vars = "date")))
upturns <- r[r$users > r$maxusers, 1:2]
downturns <- r[r$users < r$minusers, 1:2]
@@ -729,10 +733,8 @@ plot_direct_users <- function(start, end, country, events, path, nocutoff,
"https://metrics.torproject.org/", sep = ""),
format = date_breaks$format, major = date_breaks$major,
minor = date_breaks$minor) +
- scale_y_continuous(name = "", limits = c(0,
- ifelse(length(na.omit(u$users)) == 0, 0,
- max(u$users, na.rm = TRUE))), formatter = formatter) +
- opts(title = title)
+ scale_y_continuous(name = "", limits = c(0, max_y),
+ formatter = formatter) + opts(title = title)
print(plot)
ggsave(filename = path, width = 8, height = 5, dpi = as.numeric(dpi))
}
1
0

[translation/vidalia_help] Update translations for vidalia_help
by translation@torproject.org 10 Jul '12
by translation@torproject.org 10 Jul '12
10 Jul '12
commit f308b81167661967211e2e68e914cc958dca4c05
Author: Translation commit bot <translation(a)torproject.org>
Date: Tue Jul 10 06:45:21 2012 +0000
Update translations for vidalia_help
---
ko/bridges.po | 23 +++++++++++------------
ko/server.po | 7 ++++---
ko/troubleshooting.po | 2 --
3 files changed, 15 insertions(+), 17 deletions(-)
diff --git a/ko/bridges.po b/ko/bridges.po
index 0ba805d..54238de 100644
--- a/ko/bridges.po
+++ b/ko/bridges.po
@@ -1,12 +1,13 @@
#
# Translators:
+# <pcsori(a)gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: The Tor Project\n"
"Report-Msgid-Bugs-To: https://trac.torproject.org/projects/tor\n"
"POT-Creation-Date: 2010-06-26 16:58+0200\n"
-"PO-Revision-Date: 2010-11-30 05:02+0000\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"PO-Revision-Date: 2012-07-10 06:27+0000\n"
+"Last-Translator: pCsOrI <pcsori(a)gmail.com>\n"
"Language-Team: LANGUAGE <LL(a)li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,17 +18,17 @@ msgstr ""
#. type: Content of: <html><body><h1>
#: en/bridges.html:16
msgid "Bridge Relays"
-msgstr ""
+msgstr "브릿지 릴레이"
#. type: Content of: <html><body>
#: en/bridges.html:19
msgid "<a name=\"about\"/>"
-msgstr ""
+msgstr "<a name=\"about\"/>"
#. type: Content of: <html><body><h3>
#: en/bridges.html:20
msgid "What are bridge relays?"
-msgstr ""
+msgstr "브릿지 릴레이란?"
#. type: Content of: <html><body><p>
#: en/bridges.html:22
@@ -45,27 +46,27 @@ msgstr ""
#. type: Content of: <html><body>
#: en/bridges.html:31
msgid "<a name=\"finding\"/>"
-msgstr ""
+msgstr "<a name=\"finding\"/>"
#. type: Content of: <html><body><h3>
#: en/bridges.html:32
msgid "How do I find a bridge relay?"
-msgstr ""
+msgstr "브릿지 릴레이를 찾는 방법?"
#. type: Content of: <html><body><p>
#: en/bridges.html:34
msgid "There are two main ways to learn about a bridge address:"
-msgstr ""
+msgstr "브릿지 주소를 배우는 방법에는 2가지가 있습니다."
#. type: Content of: <html><body><p><ol><li>
#: en/bridges.html:36
msgid "Get some friends to run private bridges for you"
-msgstr ""
+msgstr "귀하를 위한 개인 브릿지를 실행하려면 친구를 가져와야 합니다"
#. type: Content of: <html><body><p><ol><li>
#: en/bridges.html:37
msgid "Use some of the public bridges"
-msgstr ""
+msgstr "공용 브릿지의 일부 사용"
#. type: Content of: <html><body><p>
#: en/bridges.html:42
@@ -98,5 +99,3 @@ msgid ""
"Configuring more than one bridge address will make your Tor connection more "
"stable, in case some of the bridges become unreachable."
msgstr ""
-
-
diff --git a/ko/server.po b/ko/server.po
index cea7c2b..7851504 100644
--- a/ko/server.po
+++ b/ko/server.po
@@ -1,12 +1,13 @@
#
# Translators:
+# <pcsori(a)gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: The Tor Project\n"
"Report-Msgid-Bugs-To: https://trac.torproject.org/projects/tor\n"
"POT-Creation-Date: 2010-06-26 17:00+0200\n"
-"PO-Revision-Date: 2010-11-30 05:03+0000\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"PO-Revision-Date: 2012-07-10 06:32+0000\n"
+"Last-Translator: pCsOrI <pcsori(a)gmail.com>\n"
"Language-Team: LANGUAGE <LL(a)li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,7 +18,7 @@ msgstr ""
#. type: Content of: <html><body><h1>
#: en/server.html:16
msgid "Setting Up a Tor Relay"
-msgstr ""
+msgstr "토르 릴레이 설정"
#. type: Content of: <html><body>
#: en/server.html:19
diff --git a/ko/troubleshooting.po b/ko/troubleshooting.po
index 5c70237..4952675 100644
--- a/ko/troubleshooting.po
+++ b/ko/troubleshooting.po
@@ -241,5 +241,3 @@ msgid ""
"href=\"log.html\">message log</a> to see if Tor reported any errors while "
"trying to exit."
msgstr ""
-
-
1
0

[translation/vidalia_alpha] Update translations for vidalia_alpha
by translation@torproject.org 10 Jul '12
by translation@torproject.org 10 Jul '12
10 Jul '12
commit 74860b187fe6d65cefe758f66f8d30a0fa38d478
Author: Translation commit bot <translation(a)torproject.org>
Date: Tue Jul 10 06:45:12 2012 +0000
Update translations for vidalia_alpha
---
ko/vidalia_ko.po | 100 +++++++++++++++++++++++++++---------------------------
1 files changed, 50 insertions(+), 50 deletions(-)
diff --git a/ko/vidalia_ko.po b/ko/vidalia_ko.po
index c8fdfd8..1f0c7b1 100644
--- a/ko/vidalia_ko.po
+++ b/ko/vidalia_ko.po
@@ -6,7 +6,7 @@ msgstr ""
"Project-Id-Version: The Tor Project\n"
"Report-Msgid-Bugs-To: https://trac.torproject.org/projects/tor\n"
"POT-Creation-Date: 2012-03-21 17:46+0000\n"
-"PO-Revision-Date: 2012-07-10 06:15+0000\n"
+"PO-Revision-Date: 2012-07-10 06:22+0000\n"
"Last-Translator: pCsOrI <pcsori(a)gmail.com>\n"
"Language-Team: translations(a)vidalia-project.net\n"
"MIME-Version: 1.0\n"
@@ -2748,7 +2748,7 @@ msgstr "거부"
msgctxt "QDialogButtonBox"
msgid "OK"
-msgstr ""
+msgstr "확인"
msgctxt "QObject"
msgid "There were some settings that Vidalia wasn't able to apply together"
@@ -2818,31 +2818,31 @@ msgstr "복사"
msgctxt "RouterInfoDialog"
msgid "Hibernating"
-msgstr ""
+msgstr "최대 절전 모드"
msgctxt "RouterInfoDialog"
msgid "Online"
-msgstr ""
+msgstr "온라인"
msgctxt "RouterInfoDialog"
msgid "Offline"
-msgstr ""
+msgstr "오프라인"
msgctxt "RouterInfoDialog"
msgid "Unknown"
-msgstr ""
+msgstr "알 수 없음"
msgctxt "RouterInfoDialog"
msgid "Relay Details"
-msgstr ""
+msgstr "릴레이 세부 정보"
msgctxt "RouterInfoDialog"
msgid "Summary"
-msgstr ""
+msgstr "요약"
msgctxt "RouterInfoDialog"
msgid "Name:"
-msgstr ""
+msgstr "이름:"
msgctxt "RouterInfoDialog"
msgid "Status:"
@@ -3208,15 +3208,15 @@ msgstr ""
msgctxt "ServerPage"
msgid "day"
-msgstr ""
+msgstr "일"
msgctxt "ServerPage"
msgid "week"
-msgstr ""
+msgstr "주"
msgctxt "ServerPage"
msgid "month"
-msgstr ""
+msgstr "월"
msgctxt "ServerPage"
msgid "Enable accounting"
@@ -3224,7 +3224,7 @@ msgstr ""
msgctxt "ServerPage"
msgid "h:mm"
-msgstr ""
+msgstr "h:mm"
msgctxt "ServerPage"
msgid "at"
@@ -3240,19 +3240,19 @@ msgstr ""
msgctxt "ServerPage"
msgid "KB"
-msgstr ""
+msgstr "KB"
msgctxt "ServerPage"
msgid "MB"
-msgstr ""
+msgstr "MB"
msgctxt "ServerPage"
msgid "GB"
-msgstr ""
+msgstr "GB"
msgctxt "ServerPage"
msgid "TB"
-msgstr ""
+msgstr "TB"
msgctxt "ServerPage"
msgid "Push no more than"
@@ -3533,23 +3533,23 @@ msgstr ""
msgctxt "Stream"
msgid "Connecting"
-msgstr ""
+msgstr "연결 중"
msgctxt "Stream"
msgid "Open"
-msgstr ""
+msgstr "열기"
msgctxt "Stream"
msgid "Failed"
-msgstr ""
+msgstr "실패"
msgctxt "Stream"
msgid "Closed"
-msgstr ""
+msgstr "닫힘"
msgctxt "Stream"
msgid "Retrying"
-msgstr ""
+msgstr "재시도"
msgctxt "Stream"
msgid "Remapped"
@@ -3579,7 +3579,7 @@ msgstr ""
msgctxt "TorControl"
msgid "Disconnected"
-msgstr ""
+msgstr "연결 해제"
msgctxt "TorProcess"
msgid "Process %1 failed to stop. [%2]"
@@ -3603,31 +3603,31 @@ msgstr ""
msgctxt "TorrcDialog"
msgid "Cut"
-msgstr ""
+msgstr "잘라내기"
msgctxt "TorrcDialog"
msgid "Copy"
-msgstr ""
+msgstr "복사"
msgctxt "TorrcDialog"
msgid "Paste"
-msgstr ""
+msgstr "붙여넣기"
msgctxt "TorrcDialog"
msgid "Undo"
-msgstr ""
+msgstr "실행 취소"
msgctxt "TorrcDialog"
msgid "Redo"
-msgstr ""
+msgstr "다시 실행"
msgctxt "TorrcDialog"
msgid "Select All"
-msgstr ""
+msgstr "모두 선택"
msgctxt "TorrcDialog"
msgid "Error"
-msgstr ""
+msgstr "오류"
msgctxt "TorrcDialog"
msgid "An error ocurred while opening torrc file"
@@ -3635,31 +3635,31 @@ msgstr ""
msgctxt "TorrcDialog"
msgid "Ctrl+X"
-msgstr ""
+msgstr "Ctrl+X"
msgctxt "TorrcDialog"
msgid "Ctrl+C"
-msgstr ""
+msgstr "Ctrl+C"
msgctxt "TorrcDialog"
msgid "Ctrl+V"
-msgstr ""
+msgstr "Ctrl+V"
msgctxt "TorrcDialog"
msgid "Ctrl+Z"
-msgstr ""
+msgstr "Ctrl+Z"
msgctxt "TorrcDialog"
msgid "Ctrl+Shift+Z"
-msgstr ""
+msgstr "Ctrl+Shift+Z"
msgctxt "TorrcDialog"
msgid "Ctrl+A"
-msgstr ""
+msgstr "Ctrl+A"
msgctxt "UPNPControl"
msgid "Success"
-msgstr ""
+msgstr "성공"
msgctxt "UPNPControl"
msgid "No UPnP-enabled devices found"
@@ -3747,11 +3747,11 @@ msgstr ""
msgctxt "UpdateProgressDialog"
msgid "OK"
-msgstr ""
+msgstr "확인"
msgctxt "UpdateProgressDialog"
msgid "Software Updates"
-msgstr ""
+msgstr "소프트웨어 업데이트"
msgctxt "UpdateProgressDialog"
msgid "Checking for updates..."
@@ -3867,11 +3867,11 @@ msgstr ""
msgctxt "Vidalia"
msgid "Sets Vidalia's language."
-msgstr ""
+msgstr "Vidalia 언어를 설정합니다."
msgctxt "Vidalia"
msgid "Vidalia Usage Information"
-msgstr ""
+msgstr "Vidalia 사용량 정보"
msgctxt "Vidalia"
msgid "Unable to open log file '%1': %2"
@@ -3879,7 +3879,7 @@ msgstr ""
msgctxt "Vidalia"
msgid "Value required for parameter :"
-msgstr ""
+msgstr "매개 변수에 대한 필요한 값:"
msgctxt "Vidalia"
msgid "Invalid language code specified:"
@@ -3902,32 +3902,32 @@ msgstr ""
msgctxt "stringutil.h"
msgid "%1 secs"
-msgstr ""
+msgstr "%1 초"
msgctxt "stringutil.h"
msgid "%1 B/s"
-msgstr ""
+msgstr "%1 B/s"
msgctxt "stringutil.h"
msgid "%1 KB/s"
-msgstr ""
+msgstr "%1 KB/s"
msgctxt "stringutil.h"
msgid "%1 MB/s"
-msgstr ""
+msgstr "%1 MB/s"
msgctxt "stringutil.h"
msgid "%1 GB/s"
-msgstr ""
+msgstr "%1 GB/s"
msgctxt "stringutil.h"
msgid "%1 days"
-msgstr ""
+msgstr "%1 일"
msgctxt "stringutil.h"
msgid "%1 hours"
-msgstr ""
+msgstr "%1 시간"
msgctxt "stringutil.h"
msgid "%1 mins"
-msgstr ""
+msgstr "%1 분"
1
0

[translation/vidalia_alpha] Update translations for vidalia_alpha
by translation@torproject.org 10 Jul '12
by translation@torproject.org 10 Jul '12
10 Jul '12
commit 412b8c29daec16f26209c54dae88c8873ac7889b
Author: Translation commit bot <translation(a)torproject.org>
Date: Tue Jul 10 06:15:11 2012 +0000
Update translations for vidalia_alpha
---
ko/vidalia_ko.po | 352 +++++++++++++++++++++++++++---------------------------
1 files changed, 176 insertions(+), 176 deletions(-)
diff --git a/ko/vidalia_ko.po b/ko/vidalia_ko.po
index 34bbd62..c8fdfd8 100644
--- a/ko/vidalia_ko.po
+++ b/ko/vidalia_ko.po
@@ -6,7 +6,7 @@ msgstr ""
"Project-Id-Version: The Tor Project\n"
"Report-Msgid-Bugs-To: https://trac.torproject.org/projects/tor\n"
"POT-Creation-Date: 2012-03-21 17:46+0000\n"
-"PO-Revision-Date: 2012-07-10 05:45+0000\n"
+"PO-Revision-Date: 2012-07-10 06:15+0000\n"
"Last-Translator: pCsOrI <pcsori(a)gmail.com>\n"
"Language-Team: translations(a)vidalia-project.net\n"
"MIME-Version: 1.0\n"
@@ -281,91 +281,91 @@ msgstr "이후:"
msgctxt "BandwidthGraph"
msgid "Hide Settings"
-msgstr ""
+msgstr "설정 숨기기"
msgctxt "BandwidthGraph"
msgid "Show Settings"
-msgstr ""
+msgstr "설정 보이기"
msgctxt "BandwidthGraph"
msgid "Reset"
-msgstr ""
+msgstr "다시 설정"
msgctxt "BandwidthGraph"
msgid "Receive Rate"
-msgstr ""
+msgstr "수신률"
msgctxt "BandwidthGraph"
msgid "Send Rate"
-msgstr ""
+msgstr "전송률"
msgctxt "BandwidthGraph"
msgid "Always on Top"
-msgstr ""
+msgstr "항상 위에"
msgctxt "BandwidthGraph"
msgid "Style"
-msgstr ""
+msgstr "스타일"
msgctxt "BandwidthGraph"
msgid "Changes the transparency of the Bandwidth Graph"
-msgstr ""
+msgstr "대역폭 그래프의 투명도 변경"
msgctxt "BandwidthGraph"
msgid "100"
-msgstr ""
+msgstr "100"
msgctxt "BandwidthGraph"
msgid "% Opaque"
-msgstr ""
+msgstr "% 불투명"
msgctxt "BandwidthGraph"
msgid "Save"
-msgstr ""
+msgstr "저장"
msgctxt "BandwidthGraph"
msgid "Cancel"
-msgstr ""
+msgstr "취소"
msgctxt "BandwidthGraph"
msgid "Bandwidth Graph"
-msgstr ""
+msgstr "대역폭 그래프"
msgctxt "BridgeDownloader"
msgid "Starting HTTPS bridge request..."
-msgstr ""
+msgstr "HTTP 브릿지 요청 시작..."
msgctxt "BridgeDownloader"
msgid "Connecting to %1:%2..."
-msgstr ""
+msgstr "%1:%2에 연결 중..."
msgctxt "BridgeDownloader"
msgid "Sending an HTTPS request for bridges..."
-msgstr ""
+msgstr "브릿지에 대한 HTTPS 요청을 보내는 중..."
msgctxt "BridgeDownloader"
msgid "Downloading a list of bridges..."
-msgstr ""
+msgstr "브릿지의 목록 다운로드..."
msgctxt "BridgeDownloaderProgressDialog"
msgid "Downloading Bridges"
-msgstr ""
+msgstr "브릿지 다운로드"
msgctxt "BridgeDownloaderProgressDialog"
msgid "Unable to download bridges: %1"
-msgstr ""
+msgstr "브릿지를 다운로드할 수 없음: %1"
msgctxt "BridgeDownloaderProgressDialog"
msgid "Retrying bridge request..."
-msgstr ""
+msgstr "브릿지 요청 재시도 중..."
msgctxt "BridgeUsageDialog"
msgid "Country"
-msgstr ""
+msgstr "국가"
msgctxt "BridgeUsageDialog"
msgid "# Clients"
-msgstr ""
+msgstr "# 클라이언트"
msgctxt "BridgeUsageDialog"
msgid "Clients from the following countries have used your relay since %1"
@@ -373,47 +373,47 @@ msgstr ""
msgctxt "BridgeUsageDialog"
msgid "Bridge Usage Summary"
-msgstr ""
+msgstr "브릿지 사용량 요약"
msgctxt "BridgeUsageDialog"
msgid "Client Summary"
-msgstr ""
+msgstr "클라이언트 요약"
msgctxt "Circuit"
msgid "New"
-msgstr ""
+msgstr "새로 만들기"
msgctxt "Circuit"
msgid "Open"
-msgstr ""
+msgstr "열기"
msgctxt "Circuit"
msgid "Building"
-msgstr ""
+msgstr "빌드"
msgctxt "Circuit"
msgid "Failed"
-msgstr ""
+msgstr "실패"
msgctxt "Circuit"
msgid "Closed"
-msgstr ""
+msgstr "닫힘"
msgctxt "Circuit"
msgid "Unknown"
-msgstr ""
+msgstr "알 수 없음"
msgctxt "CircuitItem"
msgid "<Path Empty>"
-msgstr ""
+msgstr "<경로가 비었음>"
msgctxt "CircuitListWidget"
msgid "Connection"
-msgstr ""
+msgstr "연결"
msgctxt "CircuitListWidget"
msgid "Status"
-msgstr ""
+msgstr "상태"
msgctxt "CircuitListWidget"
msgid "Zoom to Circuit"
@@ -425,59 +425,59 @@ msgstr ""
msgctxt "CircuitListWidget"
msgid "Close Stream (Del)"
-msgstr ""
+msgstr "스트림 닫기 (Del)"
msgctxt "ConfigDialog"
msgid "General"
-msgstr ""
+msgstr "일반"
msgctxt "ConfigDialog"
msgid "Network"
-msgstr ""
+msgstr "네트워크"
msgctxt "ConfigDialog"
msgid "Sharing"
-msgstr ""
+msgstr "공유"
msgctxt "ConfigDialog"
msgid "Appearance"
-msgstr ""
+msgstr "모양"
msgctxt "ConfigDialog"
msgid "Advanced"
-msgstr ""
+msgstr "고급"
msgctxt "ConfigDialog"
msgid "Help"
-msgstr ""
+msgstr "도움말"
msgctxt "ConfigDialog"
msgid "Error Saving Settings"
-msgstr ""
+msgstr "설정 저장 오류"
msgctxt "ConfigDialog"
msgid "Vidalia was unable to save your %1 settings."
-msgstr ""
+msgstr "Vidalia가 %1 설정을 저장할 수 없습니다."
msgctxt "ConfigDialog"
msgid "Error Applying Settings"
-msgstr ""
+msgstr "설정 적용 오류"
msgctxt "ConfigDialog"
msgid "Vidalia was unable to apply your %1 settings to Tor."
-msgstr ""
+msgstr "Vidalia는 %1 설정을 토르에 적용하지 못했습니다."
msgctxt "ConfigDialog"
msgid "Settings"
-msgstr ""
+msgstr "설정"
msgctxt "ControlConnection"
msgid "Vidalia was unable to connect to Tor. (%1)"
-msgstr ""
+msgstr "Vidalia가 토르에 연결하지 못했습니다. (%1)"
msgctxt "ControlConnection"
msgid "Control socket is not connected."
-msgstr ""
+msgstr "제어 소켓이 연결되어 있지 않습니다."
msgctxt "ControlPasswordInputDialog"
msgid "Problem connecting to Tor"
@@ -860,163 +860,163 @@ msgstr "마다가스카르"
msgctxt "CountryInfo"
msgid "Malawi"
-msgstr ""
+msgstr "말라위"
msgctxt "CountryInfo"
msgid "Malaysia"
-msgstr ""
+msgstr "말레이시아"
msgctxt "CountryInfo"
msgid "Mali"
-msgstr ""
+msgstr "말리"
msgctxt "CountryInfo"
msgid "Malta"
-msgstr ""
+msgstr "몰타"
msgctxt "CountryInfo"
msgid "Marshall Islands"
-msgstr ""
+msgstr "마샬 제도"
msgctxt "CountryInfo"
msgid "Mauritania"
-msgstr ""
+msgstr "모리타니"
msgctxt "CountryInfo"
msgid "Mauritius"
-msgstr ""
+msgstr "모리셔스"
msgctxt "CountryInfo"
msgid "Micronesia"
-msgstr ""
+msgstr "미크로네시아"
msgctxt "CountryInfo"
msgid "Moldova"
-msgstr ""
+msgstr "몰도바"
msgctxt "CountryInfo"
msgid "Monaco"
-msgstr ""
+msgstr "모나코"
msgctxt "CountryInfo"
msgid "Mongolia"
-msgstr ""
+msgstr "몽골"
msgctxt "CountryInfo"
msgid "Montenegro"
-msgstr ""
+msgstr "몬테네그로"
msgctxt "CountryInfo"
msgid "Morocco"
-msgstr ""
+msgstr "모로코"
msgctxt "CountryInfo"
msgid "Mozambique"
-msgstr ""
+msgstr "모잠비크"
msgctxt "CountryInfo"
msgid "Namibia"
-msgstr ""
+msgstr "나미비아"
msgctxt "CountryInfo"
msgid "Nauru"
-msgstr ""
+msgstr "나우루"
msgctxt "CountryInfo"
msgid "Nepal"
-msgstr ""
+msgstr "네팔"
msgctxt "CountryInfo"
msgid "Netherlands"
-msgstr ""
+msgstr "네덜란드"
msgctxt "CountryInfo"
msgid "New Zealand"
-msgstr ""
+msgstr "뉴질랜드"
msgctxt "CountryInfo"
msgid "Nicaragua"
-msgstr ""
+msgstr "니카라과"
msgctxt "CountryInfo"
msgid "Niger"
-msgstr ""
+msgstr "니제르"
msgctxt "CountryInfo"
msgid "Nigeria"
-msgstr ""
+msgstr "나이지리아"
msgctxt "CountryInfo"
msgid "Norway"
-msgstr ""
+msgstr "노르웨이"
msgctxt "CountryInfo"
msgid "Oman"
-msgstr ""
+msgstr "오만"
msgctxt "CountryInfo"
msgid "Pakistan"
-msgstr ""
+msgstr "파키스탄"
msgctxt "CountryInfo"
msgid "Palau"
-msgstr ""
+msgstr "팔라우"
msgctxt "CountryInfo"
msgid "Palestine"
-msgstr ""
+msgstr "팔레스타인"
msgctxt "CountryInfo"
msgid "Panama"
-msgstr ""
+msgstr "파나마"
msgctxt "CountryInfo"
msgid "Papua New Guinea"
-msgstr ""
+msgstr "파푸아뉴기니"
msgctxt "CountryInfo"
msgid "Paraguay"
-msgstr ""
+msgstr "파라과이"
msgctxt "CountryInfo"
msgid "Peru"
-msgstr ""
+msgstr "페루"
msgctxt "CountryInfo"
msgid "Philippines"
-msgstr ""
+msgstr "필리핀"
msgctxt "CountryInfo"
msgid "Poland"
-msgstr ""
+msgstr "폴란드"
msgctxt "CountryInfo"
msgid "Portugal"
-msgstr ""
+msgstr "포르투갈"
msgctxt "CountryInfo"
msgid "Qatar"
-msgstr ""
+msgstr "카타르"
msgctxt "CountryInfo"
msgid "Romania"
-msgstr ""
+msgstr "루마니아"
msgctxt "CountryInfo"
msgid "Russia"
-msgstr ""
+msgstr "러시아"
msgctxt "CountryInfo"
msgid "Rwanda"
-msgstr ""
+msgstr "르완다"
msgctxt "CountryInfo"
msgid "Saint Kitts & Nevis"
-msgstr ""
+msgstr "세인트키츠네비스"
msgctxt "CountryInfo"
msgid "Saint Lucia"
-msgstr ""
+msgstr "세인트 루시아"
msgctxt "CountryInfo"
msgid "Saint Vincent & the Grenadines"
@@ -1024,11 +1024,11 @@ msgstr ""
msgctxt "CountryInfo"
msgid "Samoa"
-msgstr ""
+msgstr "사모아"
msgctxt "CountryInfo"
msgid "San Marino"
-msgstr ""
+msgstr "산 마리노"
msgctxt "CountryInfo"
msgid "Sao Tome & Principe"
@@ -1232,91 +1232,91 @@ msgstr "오스트리아"
msgctxt "CountryInfo"
msgid "Bahrain"
-msgstr ""
+msgstr "바레인"
msgctxt "CountryInfo"
msgid "Benin"
-msgstr ""
+msgstr "베냉"
msgctxt "CountryInfo"
msgid "Ethiopia"
-msgstr ""
+msgstr "에티오피아"
msgctxt "CountryInfo"
msgid "Fiji"
-msgstr ""
+msgstr "피지"
msgctxt "CountryInfo"
msgid "Finland"
-msgstr ""
+msgstr "필란드"
msgctxt "CountryInfo"
msgid "Greece"
-msgstr ""
+msgstr "그리스"
msgctxt "CountryInfo"
msgid "Guam"
-msgstr ""
+msgstr "괌"
msgctxt "CountryInfo"
msgid "Hungary"
-msgstr ""
+msgstr "헝가리"
msgctxt "CountryInfo"
msgid "Iceland"
-msgstr ""
+msgstr "아이스란드"
msgctxt "CountryInfo"
msgid "India"
-msgstr ""
+msgstr "인도"
msgctxt "CountryInfo"
msgid "Indonesia"
-msgstr ""
+msgstr "인도네시아"
msgctxt "CountryInfo"
msgid "Iran"
-msgstr ""
+msgstr "이란"
msgctxt "CountryInfo"
msgid "Iraq"
-msgstr ""
+msgstr "이라크"
msgctxt "CountryInfo"
msgid "Ireland"
-msgstr ""
+msgstr "아일랜드"
msgctxt "CountryInfo"
msgid "Korea, North"
-msgstr ""
+msgstr "북한"
msgctxt "CountryInfo"
msgid "Korea, South"
-msgstr ""
+msgstr "대한민국"
msgctxt "CountryInfo"
msgid "Libya"
-msgstr ""
+msgstr "리비아"
msgctxt "CountryInfo"
msgid "Maldives"
-msgstr ""
+msgstr "몰디브"
msgctxt "CountryInfo"
msgid "Mexico"
-msgstr ""
+msgstr "멕시코"
msgctxt "CountryInfo"
msgid "Myanmar"
-msgstr ""
+msgstr "미얀마"
msgctxt "CountryInfo"
msgid "Taiwan"
-msgstr ""
+msgstr "대마"
msgctxt "CrashReportDialog"
msgid "Submit a Crash Report"
-msgstr ""
+msgstr "충돌 보고서 제출"
msgctxt "CrashReportDialog"
msgid "Vidalia encountered an error and needed to close"
@@ -1324,11 +1324,11 @@ msgstr ""
msgctxt "CrashReportDialog"
msgid "Restart Vidalia"
-msgstr ""
+msgstr "Vidalia 다시 시작"
msgctxt "CrashReportDialog"
msgid "Don't Restart"
-msgstr ""
+msgstr "다시 시작 안 함"
msgctxt "CrashReportDialog"
msgid "Unable to restart Vidalia"
@@ -1397,51 +1397,51 @@ msgstr ""
msgctxt "GeneralPage"
msgid "Browse"
-msgstr ""
+msgstr "찾아보기"
msgctxt "GeneralPage"
msgid "Tor"
-msgstr ""
+msgstr "토르"
msgctxt "GeneralPage"
msgid "Software Updates"
-msgstr ""
+msgstr "소프트웨어 업데이트"
msgctxt "GeneralPage"
msgid "Check for new software updates automatically"
-msgstr ""
+msgstr "자동으로 새 소프트웨어 업데이트 검사"
msgctxt "GeneralPage"
msgid "Check Now"
-msgstr ""
+msgstr "지금 확인"
msgctxt "GeneralPage"
msgid "Connect to Tor automatically"
-msgstr ""
+msgstr "자동으로 토르에 연결"
msgctxt "GraphFrame"
msgid "%1 KB/s"
-msgstr ""
+msgstr "%1 KB/s"
msgctxt "GraphFrame"
msgid "%1 KB"
-msgstr ""
+msgstr "%1 KB"
msgctxt "GraphFrame"
msgid "%1 MB"
-msgstr ""
+msgstr "%1 MB"
msgctxt "GraphFrame"
msgid "%1 GB"
-msgstr ""
+msgstr "%1 GB"
msgctxt "GraphFrame"
msgid "Recv:"
-msgstr ""
+msgstr "받음;"
msgctxt "GraphFrame"
msgid "Sent:"
-msgstr ""
+msgstr "보냄;"
msgctxt "HelpBrowser"
msgid "Supplied XML file is not a valid Contents document."
@@ -1465,11 +1465,11 @@ msgstr ""
msgctxt "HelpBrowser"
msgid "Vidalia Help"
-msgstr ""
+msgstr "Vidalia 도움말"
msgctxt "HelpBrowser"
msgid "Back"
-msgstr ""
+msgstr "뒤로"
msgctxt "HelpBrowser"
msgid "Move to previous page (Backspace)"
@@ -1634,75 +1634,75 @@ msgstr "오류"
msgctxt "LogEvent"
msgid "Unknown"
-msgstr ""
+msgstr "알 수 없음"
msgctxt "LogTreeItem"
msgid "Debug"
-msgstr ""
+msgstr "디버그"
msgctxt "LogTreeItem"
msgid "Info"
-msgstr ""
+msgstr "정보"
msgctxt "LogTreeItem"
msgid "Notice"
-msgstr ""
+msgstr "알림"
msgctxt "LogTreeItem"
msgid "Warning"
-msgstr ""
+msgstr "경고"
msgctxt "LogTreeItem"
msgid "Error"
-msgstr ""
+msgstr "오류"
msgctxt "LogTreeItem"
msgid "Unknown"
-msgstr ""
+msgstr "알 수 없음"
msgctxt "MainWindow"
msgid "Start Tor"
-msgstr ""
+msgstr "토르 시작"
msgctxt "MainWindow"
msgid "Exit"
-msgstr ""
+msgstr "종료"
msgctxt "MainWindow"
msgid "Bandwidth Graph"
-msgstr ""
+msgstr "대역폭 그래프"
msgctxt "MainWindow"
msgid "Message Log"
-msgstr ""
+msgstr "메시지 로그"
msgctxt "MainWindow"
msgid "Network Map"
-msgstr ""
+msgstr "네트워크 맵"
msgctxt "MainWindow"
msgid "Control Panel"
-msgstr ""
+msgstr "제어판"
msgctxt "MainWindow"
msgid "Settings"
-msgstr ""
+msgstr "설정"
msgctxt "MainWindow"
msgid "About"
-msgstr ""
+msgstr "정보"
msgctxt "MainWindow"
msgid "Help"
-msgstr ""
+msgstr "도움말"
msgctxt "MainWindow"
msgid "Tor"
-msgstr ""
+msgstr "토르"
msgctxt "MainWindow"
msgid "View"
-msgstr ""
+msgstr "보기"
msgctxt "MainWindow"
msgid "Connecting to a relay directory"
@@ -1882,7 +1882,7 @@ msgstr ""
msgctxt "MainWindow"
msgid "Tor website: %1"
-msgstr ""
+msgstr "토르 웹사이트: %1"
msgctxt "MainWindow"
msgid ""
@@ -2566,19 +2566,19 @@ msgstr ""
msgctxt "NetworkPage"
msgid "Proxy Settings"
-msgstr ""
+msgstr "프록시 설정"
msgctxt "NetworkPage"
msgid "Username:"
-msgstr ""
+msgstr "사용자명:"
msgctxt "NetworkPage"
msgid "Password:"
-msgstr ""
+msgstr "암호:"
msgctxt "NetworkPage"
msgid "Port:"
-msgstr ""
+msgstr "포트:"
msgctxt "NetworkPage"
msgid "Check to only connect to relays using ports allowed by your firewall"
@@ -2590,15 +2590,15 @@ msgstr ""
msgctxt "NetworkPage"
msgid "Firewall Settings"
-msgstr ""
+msgstr "방화벽 설정"
msgctxt "NetworkPage"
msgid "Allowed Ports:"
-msgstr ""
+msgstr "허용된 포트:"
msgctxt "NetworkPage"
msgid "80, 443"
-msgstr ""
+msgstr "80, 443"
msgctxt "NetworkPage"
msgid ""
@@ -2612,23 +2612,23 @@ msgstr ""
msgctxt "NetworkPage"
msgid "Bridge Settings"
-msgstr ""
+msgstr "브릿지 설정"
msgctxt "NetworkPage"
msgid "Add a Bridge:"
-msgstr ""
+msgstr "브릿지 추가:"
msgctxt "NetworkPage"
msgid "Remove the selected bridges from the list"
-msgstr ""
+msgstr "목록에서 선택한 브릿지 제거"
msgctxt "NetworkPage"
msgid "Copy the selected bridges to the clipboard"
-msgstr ""
+msgstr "선택한 브릿지를 클립 보드로 복사"
msgctxt "NetworkPage"
msgid "Find Bridges Now"
-msgstr ""
+msgstr "지금 브릿지 찾기"
msgctxt "NetworkPage"
msgid "<a href=\"bridges.finding\">How else can I find bridges?</a>"
@@ -2650,11 +2650,11 @@ msgstr ""
msgctxt "NetworkPage"
msgid "Address:"
-msgstr ""
+msgstr "주소:"
msgctxt "NetworkPage"
msgid "Type:"
-msgstr ""
+msgstr "유형:"
msgctxt "NetworkPage"
msgid "You must select the proxy type."
@@ -2662,15 +2662,15 @@ msgstr ""
msgctxt "NetworkPage"
msgid "SOCKS 4"
-msgstr ""
+msgstr "SOCKS 4"
msgctxt "NetworkPage"
msgid "SOCKS 5"
-msgstr ""
+msgstr "SOCKS 5"
msgctxt "NetworkPage"
msgid "HTTP / HTTPS"
-msgstr ""
+msgstr "HTTP / HTTPS"
msgctxt "NetworkPage"
msgid "You must specify one or more bridges."
@@ -2740,11 +2740,11 @@ msgstr ""
msgctxt "Policy"
msgid "accept"
-msgstr ""
+msgstr "허용"
msgctxt "Policy"
msgid "reject"
-msgstr ""
+msgstr "거부"
msgctxt "QDialogButtonBox"
msgid "OK"
@@ -2778,43 +2778,43 @@ msgstr ""
msgctxt "RouterDescriptor"
msgid "Online"
-msgstr ""
+msgstr "온라인"
msgctxt "RouterDescriptor"
msgid "Hibernating"
-msgstr ""
+msgstr "최대 절전 모드"
msgctxt "RouterDescriptor"
msgid "Offline"
-msgstr ""
+msgstr "오프라인"
msgctxt "RouterDescriptorView"
msgid "Location:"
-msgstr ""
+msgstr "위치:"
msgctxt "RouterDescriptorView"
msgid "IP Address:"
-msgstr ""
+msgstr "IP 주소:"
msgctxt "RouterDescriptorView"
msgid "Platform:"
-msgstr ""
+msgstr "플랫폼:"
msgctxt "RouterDescriptorView"
msgid "Bandwidth:"
-msgstr ""
+msgstr "대역폭:"
msgctxt "RouterDescriptorView"
msgid "Uptime:"
-msgstr ""
+msgstr "가동 시간:"
msgctxt "RouterDescriptorView"
msgid "Last Updated:"
-msgstr ""
+msgstr "최종 업데이트:"
msgctxt "RouterDescriptorView"
msgid "Copy"
-msgstr ""
+msgstr "복사"
msgctxt "RouterInfoDialog"
msgid "Hibernating"
1
0

[translation/vidalia_alpha] Update translations for vidalia_alpha
by translation@torproject.org 10 Jul '12
by translation@torproject.org 10 Jul '12
10 Jul '12
commit ecfbe6b759223e7f72a0cdaa8e383e542ef413ce
Author: Translation commit bot <translation(a)torproject.org>
Date: Tue Jul 10 05:45:10 2012 +0000
Update translations for vidalia_alpha
---
ko/vidalia_ko.po | 258 +++++++++++++++++++++++++++---------------------------
1 files changed, 129 insertions(+), 129 deletions(-)
diff --git a/ko/vidalia_ko.po b/ko/vidalia_ko.po
index fbee223..34bbd62 100644
--- a/ko/vidalia_ko.po
+++ b/ko/vidalia_ko.po
@@ -6,7 +6,7 @@ msgstr ""
"Project-Id-Version: The Tor Project\n"
"Report-Msgid-Bugs-To: https://trac.torproject.org/projects/tor\n"
"POT-Creation-Date: 2012-03-21 17:46+0000\n"
-"PO-Revision-Date: 2012-07-10 05:07+0000\n"
+"PO-Revision-Date: 2012-07-10 05:45+0000\n"
"Last-Translator: pCsOrI <pcsori(a)gmail.com>\n"
"Language-Team: translations(a)vidalia-project.net\n"
"MIME-Version: 1.0\n"
@@ -688,175 +688,175 @@ msgstr "덴마크"
msgctxt "CountryInfo"
msgid "Djibouti"
-msgstr ""
+msgstr "지부티"
msgctxt "CountryInfo"
msgid "Dominica"
-msgstr ""
+msgstr "도미니카"
msgctxt "CountryInfo"
msgid "Dominican Republic"
-msgstr ""
+msgstr "도미니카 공화국"
msgctxt "CountryInfo"
msgid "Ecuador"
-msgstr ""
+msgstr "에콰도르"
msgctxt "CountryInfo"
msgid "Egypt"
-msgstr ""
+msgstr "이집트"
msgctxt "CountryInfo"
msgid "El Salvador"
-msgstr ""
+msgstr "엘살바도르"
msgctxt "CountryInfo"
msgid "Equatorial Guinea"
-msgstr ""
+msgstr "적도 기니"
msgctxt "CountryInfo"
msgid "Eritrea"
-msgstr ""
+msgstr "에리트레아"
msgctxt "CountryInfo"
msgid "Estonia"
-msgstr ""
+msgstr "에스토니아"
msgctxt "CountryInfo"
msgid "France"
-msgstr ""
+msgstr "프랑스"
msgctxt "CountryInfo"
msgid "Gabon"
-msgstr ""
+msgstr "가봉"
msgctxt "CountryInfo"
msgid "Gambia"
-msgstr ""
+msgstr "감비아"
msgctxt "CountryInfo"
msgid "Georgia"
-msgstr ""
+msgstr "그루지아"
msgctxt "CountryInfo"
msgid "Germany"
-msgstr ""
+msgstr "독일"
msgctxt "CountryInfo"
msgid "Ghana"
-msgstr ""
+msgstr "가나"
msgctxt "CountryInfo"
msgid "Grenada"
-msgstr ""
+msgstr "그레나다"
msgctxt "CountryInfo"
msgid "Guatemala"
-msgstr ""
+msgstr "과테말라"
msgctxt "CountryInfo"
msgid "Guinea"
-msgstr ""
+msgstr "기니"
msgctxt "CountryInfo"
msgid "Guinea-Bissau"
-msgstr ""
+msgstr "기니-비사우"
msgctxt "CountryInfo"
msgid "Guyana"
-msgstr ""
+msgstr "가이아나"
msgctxt "CountryInfo"
msgid "Hong Kong"
-msgstr ""
+msgstr "홍콩"
msgctxt "CountryInfo"
msgid "Haiti"
-msgstr ""
+msgstr "아이티"
msgctxt "CountryInfo"
msgid "Honduras"
-msgstr ""
+msgstr "온두라스"
msgctxt "CountryInfo"
msgid "Israel"
-msgstr ""
+msgstr "이스라엘"
msgctxt "CountryInfo"
msgid "Italy"
-msgstr ""
+msgstr "이탈리아"
msgctxt "CountryInfo"
msgid "Jamaica"
-msgstr ""
+msgstr "자메이카"
msgctxt "CountryInfo"
msgid "Japan"
-msgstr ""
+msgstr "일본"
msgctxt "CountryInfo"
msgid "Jordan"
-msgstr ""
+msgstr "요르단"
msgctxt "CountryInfo"
msgid "Kazakhstan"
-msgstr ""
+msgstr "카자흐스탄"
msgctxt "CountryInfo"
msgid "Kenya"
-msgstr ""
+msgstr "케냐"
msgctxt "CountryInfo"
msgid "Kiribati"
-msgstr ""
+msgstr "키리바시"
msgctxt "CountryInfo"
msgid "Kuwait"
-msgstr ""
+msgstr "쿠웨이트"
msgctxt "CountryInfo"
msgid "Kyrgyzstan"
-msgstr ""
+msgstr "키르기스스탄"
msgctxt "CountryInfo"
msgid "Laos"
-msgstr ""
+msgstr "라오스"
msgctxt "CountryInfo"
msgid "Latvia"
-msgstr ""
+msgstr "라트비아"
msgctxt "CountryInfo"
msgid "Lebanon"
-msgstr ""
+msgstr "레바논"
msgctxt "CountryInfo"
msgid "Lesotho"
-msgstr ""
+msgstr "레소토"
msgctxt "CountryInfo"
msgid "Liberia"
-msgstr ""
+msgstr "라이베리아"
msgctxt "CountryInfo"
msgid "Liechtenstein"
-msgstr ""
+msgstr "리히텐슈타인"
msgctxt "CountryInfo"
msgid "Lithuania"
-msgstr ""
+msgstr "리투아니아"
msgctxt "CountryInfo"
msgid "Luxembourg"
-msgstr ""
+msgstr "룩셈부르크"
msgctxt "CountryInfo"
msgid "Macedonia"
-msgstr ""
+msgstr "마케도니아"
msgctxt "CountryInfo"
msgid "Madagascar"
-msgstr ""
+msgstr "마다가스카르"
msgctxt "CountryInfo"
msgid "Malawi"
@@ -1032,203 +1032,203 @@ msgstr ""
msgctxt "CountryInfo"
msgid "Sao Tome & Principe"
-msgstr ""
+msgstr "상투메프린시페"
msgctxt "CountryInfo"
msgid "Saudi Arabia"
-msgstr ""
+msgstr "사우디 아라비아"
msgctxt "CountryInfo"
msgid "Senegal"
-msgstr ""
+msgstr "세네갈"
msgctxt "CountryInfo"
msgid "Serbia"
-msgstr ""
+msgstr "세르비아"
msgctxt "CountryInfo"
msgid "Seychelles"
-msgstr ""
+msgstr "세이셸"
msgctxt "CountryInfo"
msgid "Sierra Leone"
-msgstr ""
+msgstr "시에라 리온"
msgctxt "CountryInfo"
msgid "Singapore"
-msgstr ""
+msgstr "싱가포르"
msgctxt "CountryInfo"
msgid "Slovakia"
-msgstr ""
+msgstr "슬로바키아"
msgctxt "CountryInfo"
msgid "Slovenia"
-msgstr ""
+msgstr "슬로베니아"
msgctxt "CountryInfo"
msgid "Solomon Islands"
-msgstr ""
+msgstr "소로몬 제도"
msgctxt "CountryInfo"
msgid "Somalia"
-msgstr ""
+msgstr "소말리아"
msgctxt "CountryInfo"
msgid "South Africa"
-msgstr ""
+msgstr "남아프리카 공화국"
msgctxt "CountryInfo"
msgid "Spain"
-msgstr ""
+msgstr "스페인"
msgctxt "CountryInfo"
msgid "Sri Lanka"
-msgstr ""
+msgstr "스리랑카"
msgctxt "CountryInfo"
msgid "Sudan"
-msgstr ""
+msgstr "수단"
msgctxt "CountryInfo"
msgid "Suriname"
-msgstr ""
+msgstr "수리남"
msgctxt "CountryInfo"
msgid "Swaziland"
-msgstr ""
+msgstr "스와질란드"
msgctxt "CountryInfo"
msgid "Sweden"
-msgstr ""
+msgstr "스웨덴"
msgctxt "CountryInfo"
msgid "Switzerland"
-msgstr ""
+msgstr "스위스"
msgctxt "CountryInfo"
msgid "Syria"
-msgstr ""
+msgstr "시리아"
msgctxt "CountryInfo"
msgid "Tajikistan"
-msgstr ""
+msgstr "탄지키스탄"
msgctxt "CountryInfo"
msgid "Tanzania"
-msgstr ""
+msgstr "탄자니아"
msgctxt "CountryInfo"
msgid "Thailand"
-msgstr ""
+msgstr "태국"
msgctxt "CountryInfo"
msgid "Timor-Leste (East Timor)"
-msgstr ""
+msgstr "동 티모르"
msgctxt "CountryInfo"
msgid "Togo"
-msgstr ""
+msgstr "토고"
msgctxt "CountryInfo"
msgid "Tonga"
-msgstr ""
+msgstr "통가"
msgctxt "CountryInfo"
msgid "Trinidad & Tobago"
-msgstr ""
+msgstr "트리니다드 토바고"
msgctxt "CountryInfo"
msgid "Tunisia"
-msgstr ""
+msgstr "튀니지"
msgctxt "CountryInfo"
msgid "Turkey"
-msgstr ""
+msgstr "터키"
msgctxt "CountryInfo"
msgid "Turkmenistan"
-msgstr ""
+msgstr "투르크메니스탄"
msgctxt "CountryInfo"
msgid "Tuvalu"
-msgstr ""
+msgstr "투발루"
msgctxt "CountryInfo"
msgid "Uganda"
-msgstr ""
+msgstr "우간다"
msgctxt "CountryInfo"
msgid "Ukraine"
-msgstr ""
+msgstr "우크라이나"
msgctxt "CountryInfo"
msgid "United Arab Emirates"
-msgstr ""
+msgstr "아랍 에미레이트"
msgctxt "CountryInfo"
msgid "United Kingdom"
-msgstr ""
+msgstr "영국"
msgctxt "CountryInfo"
msgid "United States"
-msgstr ""
+msgstr "미국"
msgctxt "CountryInfo"
msgid "Uruguay"
-msgstr ""
+msgstr "우루과이"
msgctxt "CountryInfo"
msgid "Uzbekistan"
-msgstr ""
+msgstr "우즈베키스탄"
msgctxt "CountryInfo"
msgid "Vanuatu"
-msgstr ""
+msgstr "바누아투"
msgctxt "CountryInfo"
msgid "Vatican"
-msgstr ""
+msgstr "바티칸"
msgctxt "CountryInfo"
msgid "Venezuela"
-msgstr ""
+msgstr "베네수엘라"
msgctxt "CountryInfo"
msgid "Vietnam"
-msgstr ""
+msgstr "베트남"
msgctxt "CountryInfo"
msgid "Western Sahara"
-msgstr ""
+msgstr "서부 사하라"
msgctxt "CountryInfo"
msgid "Yemen"
-msgstr ""
+msgstr "예멘"
msgctxt "CountryInfo"
msgid "Zambia"
-msgstr ""
+msgstr "잠비아"
msgctxt "CountryInfo"
msgid "Zimbabwe"
-msgstr ""
+msgstr "짐바브웨"
msgctxt "CountryInfo"
msgid "Zaire"
-msgstr ""
+msgstr "자이르"
msgctxt "CountryInfo"
msgid "Albania"
-msgstr ""
+msgstr "알바니아"
msgctxt "CountryInfo"
msgid "Algeria"
-msgstr ""
+msgstr "알제리아"
msgctxt "CountryInfo"
msgid "Austria"
-msgstr ""
+msgstr "오스트리아"
msgctxt "CountryInfo"
msgid "Bahrain"
@@ -1473,107 +1473,107 @@ msgstr ""
msgctxt "HelpBrowser"
msgid "Move to previous page (Backspace)"
-msgstr ""
+msgstr "이전 페이지로 이동 (Backspace)"
msgctxt "HelpBrowser"
msgid "Backspace"
-msgstr ""
+msgstr "Backspace"
msgctxt "HelpBrowser"
msgid "Forward"
-msgstr ""
+msgstr "앞으로"
msgctxt "HelpBrowser"
msgid "Move to next page (Shift+Backspace)"
-msgstr ""
+msgstr "다음 페이지로 이동 (Shift+Backspace)"
msgctxt "HelpBrowser"
msgid "Shift+Backspace"
-msgstr ""
+msgstr "Shift+Backspace"
msgctxt "HelpBrowser"
msgid "Home"
-msgstr ""
+msgstr "Home"
msgctxt "HelpBrowser"
msgid "Move to the Home page (Ctrl+H)"
-msgstr ""
+msgstr "홈 페이지로 이동 (Ctrl+H)"
msgctxt "HelpBrowser"
msgid "Ctrl+H"
-msgstr ""
+msgstr "Ctrl+H"
msgctxt "HelpBrowser"
msgid "Find"
-msgstr ""
+msgstr "찾기"
msgctxt "HelpBrowser"
msgid "Search for a word or phrase on current page (Ctrl+F)"
-msgstr ""
+msgstr "현재 페이지에서 단어/구문 검색 (Ctrl+F)"
msgctxt "HelpBrowser"
msgid "Ctrl+F"
-msgstr ""
+msgstr "Ctrl+F"
msgctxt "HelpBrowser"
msgid "Close"
-msgstr ""
+msgstr "닫기"
msgctxt "HelpBrowser"
msgid "Close Vidalia Help"
-msgstr ""
+msgstr "Vidalia 도움말 닫기"
msgctxt "HelpBrowser"
msgid "Esc"
-msgstr ""
+msgstr "Esc"
msgctxt "HelpBrowser"
msgid "Find:"
-msgstr ""
+msgstr "찾기:"
msgctxt "HelpBrowser"
msgid "Find Previous"
-msgstr ""
+msgstr "이전 찾기"
msgctxt "HelpBrowser"
msgid "Find Next"
-msgstr ""
+msgstr "다음 찾기"
msgctxt "HelpBrowser"
msgid "Case sensitive"
-msgstr ""
+msgstr "대소문자 구분"
msgctxt "HelpBrowser"
msgid "Whole words only"
-msgstr ""
+msgstr "단어 단위로"
msgctxt "HelpBrowser"
msgid "Help Topics"
-msgstr ""
+msgstr "도움말 항목"
msgctxt "HelpBrowser"
msgid "Contents"
-msgstr ""
+msgstr "내용"
msgctxt "HelpBrowser"
msgid "Search"
-msgstr ""
+msgstr "검색"
msgctxt "HelpBrowser"
msgid "Searching for:"
-msgstr ""
+msgstr "찾을 내용:"
msgctxt "HelpBrowser"
msgid "Found Documents"
-msgstr ""
+msgstr "문서 발견"
msgctxt "HelpBrowser"
msgid "Error Loading Help Contents:"
-msgstr ""
+msgstr "도움말 내용 로딩 중 오류:"
msgctxt "HelpTextBrowser"
msgid "Opening External Link"
-msgstr ""
+msgstr "외부 링크 열기"
msgctxt "HelpTextBrowser"
msgid ""
@@ -1598,39 +1598,39 @@ msgstr ""
msgctxt "HelpTextBrowser"
msgid "Error opening help file:"
-msgstr ""
+msgstr "도움말 파일을 여는 도중 오류:"
msgctxt "LicenseDialog"
msgid "License Information"
-msgstr ""
+msgstr "라이선스 정보"
msgctxt "LicenseDialog"
msgid "License"
-msgstr ""
+msgstr "라이선스"
msgctxt "LicenseDialog"
msgid "Credits"
-msgstr ""
+msgstr "저작자"
msgctxt "LogEvent"
msgid "Debug"
-msgstr ""
+msgstr "디버그"
msgctxt "LogEvent"
msgid "Info"
-msgstr ""
+msgstr "정보"
msgctxt "LogEvent"
msgid "Notice"
-msgstr ""
+msgstr "알림"
msgctxt "LogEvent"
msgid "Warning"
-msgstr ""
+msgstr "경고"
msgctxt "LogEvent"
msgid "Error"
-msgstr ""
+msgstr "오류"
msgctxt "LogEvent"
msgid "Unknown"
1
0

[translation/vidalia_alpha] Update translations for vidalia_alpha
by translation@torproject.org 10 Jul '12
by translation@torproject.org 10 Jul '12
10 Jul '12
commit c5e378abaf8c2deb9b6d6fcf78529d7ed1449536
Author: Translation commit bot <translation(a)torproject.org>
Date: Tue Jul 10 05:15:11 2012 +0000
Update translations for vidalia_alpha
---
ko/vidalia_ko.po | 82 +++++++++++++++++++++++++++---------------------------
1 files changed, 41 insertions(+), 41 deletions(-)
diff --git a/ko/vidalia_ko.po b/ko/vidalia_ko.po
index 817bc89..fbee223 100644
--- a/ko/vidalia_ko.po
+++ b/ko/vidalia_ko.po
@@ -6,7 +6,7 @@ msgstr ""
"Project-Id-Version: The Tor Project\n"
"Report-Msgid-Bugs-To: https://trac.torproject.org/projects/tor\n"
"POT-Creation-Date: 2012-03-21 17:46+0000\n"
-"PO-Revision-Date: 2012-07-10 04:42+0000\n"
+"PO-Revision-Date: 2012-07-10 05:07+0000\n"
"Last-Translator: pCsOrI <pcsori(a)gmail.com>\n"
"Language-Team: translations(a)vidalia-project.net\n"
"MIME-Version: 1.0\n"
@@ -528,163 +528,163 @@ msgstr "안도라"
msgctxt "CountryInfo"
msgid "Angola"
-msgstr ""
+msgstr "앙골라"
msgctxt "CountryInfo"
msgid "Antigua & Barbuda"
-msgstr ""
+msgstr "안티구아 및 바부다"
msgctxt "CountryInfo"
msgid "Argentina"
-msgstr ""
+msgstr "아르헨티나"
msgctxt "CountryInfo"
msgid "Armenia"
-msgstr ""
+msgstr "아르메니아"
msgctxt "CountryInfo"
msgid "Australia"
-msgstr ""
+msgstr "오스트레일리아"
msgctxt "CountryInfo"
msgid "Azerbaijan"
-msgstr ""
+msgstr "아제르바이잔"
msgctxt "CountryInfo"
msgid "Bahamas"
-msgstr ""
+msgstr "바하마"
msgctxt "CountryInfo"
msgid "Bangladesh"
-msgstr ""
+msgstr "방글라데시"
msgctxt "CountryInfo"
msgid "Barbados"
-msgstr ""
+msgstr "바베이도스"
msgctxt "CountryInfo"
msgid "Belarus"
-msgstr ""
+msgstr "벨로루시"
msgctxt "CountryInfo"
msgid "Belgium"
-msgstr ""
+msgstr "벨기에"
msgctxt "CountryInfo"
msgid "Belize"
-msgstr ""
+msgstr "벨리즈"
msgctxt "CountryInfo"
msgid "Bhutan"
-msgstr ""
+msgstr "부탄"
msgctxt "CountryInfo"
msgid "Bolivia"
-msgstr ""
+msgstr "볼리비아"
msgctxt "CountryInfo"
msgid "Bosnia & Herzegovina"
-msgstr ""
+msgstr "보스니아 & 헤르체고비나"
msgctxt "CountryInfo"
msgid "Botswana"
-msgstr ""
+msgstr "보츠와나"
msgctxt "CountryInfo"
msgid "Brazil"
-msgstr ""
+msgstr "브라질"
msgctxt "CountryInfo"
msgid "Brunei Darussalam"
-msgstr ""
+msgstr "브루나이"
msgctxt "CountryInfo"
msgid "Bulgaria"
-msgstr ""
+msgstr "불가리아"
msgctxt "CountryInfo"
msgid "Burkina Faso"
-msgstr ""
+msgstr "부르키나 파소"
msgctxt "CountryInfo"
msgid "Burundi"
-msgstr ""
+msgstr "부룬디"
msgctxt "CountryInfo"
msgid "Cambodia"
-msgstr ""
+msgstr "캄보디아"
msgctxt "CountryInfo"
msgid "Cameroon"
-msgstr ""
+msgstr "카메룬"
msgctxt "CountryInfo"
msgid "Canada"
-msgstr ""
+msgstr "캐나다"
msgctxt "CountryInfo"
msgid "Cape Verde"
-msgstr ""
+msgstr "카보베르데"
msgctxt "CountryInfo"
msgid "Central African Republic"
-msgstr ""
+msgstr "중앙아프리카 공화국"
msgctxt "CountryInfo"
msgid "Chad"
-msgstr ""
+msgstr "차드"
msgctxt "CountryInfo"
msgid "Chile"
-msgstr ""
+msgstr "칠레"
msgctxt "CountryInfo"
msgid "China"
-msgstr ""
+msgstr "중국"
msgctxt "CountryInfo"
msgid "Colombia"
-msgstr ""
+msgstr "콜롬비아"
msgctxt "CountryInfo"
msgid "Comoros"
-msgstr ""
+msgstr "코모로"
msgctxt "CountryInfo"
msgid "Congo, The Democratic Republic of the"
-msgstr ""
+msgstr "콩고 민주 공화국"
msgctxt "CountryInfo"
msgid "Congo"
-msgstr ""
+msgstr "콩고"
msgctxt "CountryInfo"
msgid "Costa Rica"
-msgstr ""
+msgstr "코스타리카"
msgctxt "CountryInfo"
msgid "Cote dâIvoire"
-msgstr ""
+msgstr "코트디브아르"
msgctxt "CountryInfo"
msgid "Croatia"
-msgstr ""
+msgstr "크로아티아"
msgctxt "CountryInfo"
msgid "Cuba"
-msgstr ""
+msgstr "쿠바"
msgctxt "CountryInfo"
msgid "Cyprus"
-msgstr ""
+msgstr "키프로스"
msgctxt "CountryInfo"
msgid "Czech Republic"
-msgstr ""
+msgstr "체고 공화국"
msgctxt "CountryInfo"
msgid "Denmark"
-msgstr ""
+msgstr "덴마크"
msgctxt "CountryInfo"
msgid "Djibouti"
1
0