kuuko pushed a commit to branch master.

http://git.enlightenment.org/apps/epour.git/commit/?id=8fa5289b06db4806b03d152b7b1eea4efd5380e5

commit 8fa5289b06db4806b03d152b7b1eea4efd5380e5
Author: Kai Huuhko <kai.huu...@gmail.com>
Date:   Wed Apr 22 07:31:01 2015 +0300

    Add I18N support to gui with gettext
---
 epour/gui/Preferences.py     |  58 ++---
 epour/gui/TorrentProps.py    |  32 +--
 epour/gui/TorrentSelector.py | 233 +++++++++++++++---
 epour/gui/Widgets.py         |  12 +-
 epour/gui/__init__.py        |  94 ++++----
 po/epour.pot                 | 555 +++++++++++++++++++++++++++++++++++++++++++
 6 files changed, 859 insertions(+), 125 deletions(-)

diff --git a/epour/gui/Preferences.py b/epour/gui/Preferences.py
index 4efeb67..322b1ee 100644
--- a/epour/gui/Preferences.py
+++ b/epour/gui/Preferences.py
@@ -94,7 +94,7 @@ class PreferencesGeneral(PreferencesDialog):
         self.session = session
         conf = session.conf
         PreferencesDialog.__init__(
-            self, "Epour General Preferences")
+            self, _("Epour General Preferences"))
 
         limits = Limits(self, session)
         ports = ListenPorts(self, session)
@@ -108,7 +108,7 @@ class PreferencesGeneral(PreferencesDialog):
             )
 
         completed_sel_enabled = Check(
-            self, size_hint_align=ALIGN_LEFT, text="Move completed torrents",
+            self, size_hint_align=ALIGN_LEFT, text=_("Move completed 
torrents"),
             )
         completed_sel_enabled.state = conf.getboolean(
             "Settings", "move_completed_enabled"
@@ -116,7 +116,7 @@ class PreferencesGeneral(PreferencesDialog):
 
         completed_sel = StorageSelector(
             self,
-            "Completed torrents",
+            _("Completed torrents"),
             lambda: conf.get("Settings", "move_completed_path"),
             lambda x: conf.set("Settings", "move_completed_path", x),
             size_hint_weight=EXPAND_HORIZ, size_hint_align=FILL_HORIZ
@@ -145,7 +145,7 @@ class PreferencesGeneral(PreferencesDialog):
 
         chk1 = Check(self)
         chk1.size_hint_align = ALIGN_LEFT
-        chk1.text = "Delete original .torrent file when added"
+        chk1.text = _("Delete original .torrent file when added")
         chk1.state = conf.getboolean("Settings", "delete_original")
         chk1.callback_changed_add(lambda x: conf.set(
             "Settings", "delete_original", str(bool(chk1.state))
@@ -153,7 +153,7 @@ class PreferencesGeneral(PreferencesDialog):
 
         chk2 = Check(self)
         chk2.size_hint_align = ALIGN_LEFT
-        chk2.text = "Ask for confirmation on exit"
+        chk2.text = _("Ask for confirmation on exit")
         chk2.state = conf.getboolean("Settings", "confirm_exit")
         chk2.callback_changed_add(lambda x: conf.set(
             "Settings", "confirm_exit", str(bool(chk2.state))
@@ -162,7 +162,7 @@ class PreferencesGeneral(PreferencesDialog):
         chk3 = Check(self)
         chk3.size_hint_align = ALIGN_LEFT
         chk3.text = (
-            "Torrents to be added from dbus or command line open a dialog")
+            _("Torrents to be added from dbus or command line open a dialog"))
         chk3.state = conf.getboolean("Settings", "add_dialog_enabled")
         chk3.callback_changed_add(lambda x: conf.set(
             "Settings", "add_dialog_enabled", str(bool(chk3.state))
@@ -197,7 +197,7 @@ class StorageSelector(Frame):
 
         dlsel = FsButton(
             self, size_hint_align=FILL_HORIZ, inwin_mode=False,
-            text="Change path", folder_only=True, expandable=False
+            text=_("Change path"), folder_only=True, expandable=False
             )
         dlsel.path = read()
 
@@ -234,7 +234,7 @@ class ListenPorts(Frame):
         self.session = session
 
         self.size_hint_align = FILL_HORIZ
-        self.text = "Listen port (range)"
+        self.text = _("Listen port (range)")
 
         #port = session.listen_port()
 
@@ -273,16 +273,16 @@ class PreferencesProxy(PreferencesDialog):
 
     def __init__(self, parent, session):
         PreferencesDialog.__init__(
-            self, "Epour Proxy Preferences")
+            self, _("Epour Proxy Preferences"))
 
         proxies = [
-            ["Proxy for torrent peer connections",
+            [_("Proxy for torrent peer connections"),
                 session.peer_proxy, session.set_peer_proxy],
-            ["Proxy for torrent web seed connections",
+            [_("Proxy for torrent web seed connections"),
                 session.web_seed_proxy, session.set_web_seed_proxy],
-            ["Proxy for tracker connections",
+            [_("Proxy for tracker connections"),
                 session.tracker_proxy, session.set_tracker_proxy],
-            ["Proxy for DHT connections",
+            [_("Proxy for DHT connections"),
                 session.dht_proxy, session.set_dht_proxy],
         ]
 
@@ -317,7 +317,7 @@ class ProxyGroup(Frame):
 
         ps = rfunc()
 
-        l = Label(self, text="Proxy type", size_hint_align=ALIGN_LEFT)
+        l = Label(self, text=_("Proxy type"), size_hint_align=ALIGN_LEFT)
         l.show()
         ptype = Hoversel(parent, size_hint_align=FILL_HORIZ)
         ptype.text = str(lt.proxy_type.values[ps.type])
@@ -327,7 +327,7 @@ class ProxyGroup(Frame):
         t.pack(l, 0, 0, 1, 1)
         t.pack(ptype, 1, 0, 1, 1)
 
-        l = Label(self, text="Hostname", size_hint_align=ALIGN_LEFT)
+        l = Label(self, text=_("Hostname"), size_hint_align=ALIGN_LEFT)
         l.show()
         phost = Entry(
             parent, size_hint_weight=EXPAND_HORIZ, size_hint_align=FILL_HORIZ,
@@ -338,7 +338,7 @@ class ProxyGroup(Frame):
         t.pack(l, 0, 1, 1, 1)
         t.pack(phost, 1, 1, 1, 1)
 
-        l = Label(self, text="Port", size_hint_align=ALIGN_LEFT)
+        l = Label(self, text=_("Port"), size_hint_align=ALIGN_LEFT)
         l.show()
         pport = Spinner(parent, size_hint_align=FILL_HORIZ, min_max=(0, 65535))
         pport.value = ps.port
@@ -346,7 +346,7 @@ class ProxyGroup(Frame):
         t.pack(l, 0, 2, 1, 1)
         t.pack(pport, 1, 2, 1, 1)
 
-        l = Label(self, text="Username", size_hint_align=ALIGN_LEFT)
+        l = Label(self, text=_("Username"), size_hint_align=ALIGN_LEFT)
         l.show()
         puser = Entry(
             parent, size_hint_weight=EXPAND_HORIZ, size_hint_align=FILL_HORIZ,
@@ -357,7 +357,7 @@ class ProxyGroup(Frame):
         t.pack(l, 0, 3, 1, 1)
         t.pack(puser, 1, 3, 1, 1)
 
-        l = Label(self, text="Password", size_hint_align=ALIGN_LEFT)
+        l = Label(self, text=_("Password"), size_hint_align=ALIGN_LEFT)
         l.show()
         ppass = Entry(
             parent, size_hint_weight=EXPAND_HORIZ, size_hint_align=FILL_HORIZ,
@@ -369,7 +369,7 @@ class ProxyGroup(Frame):
         t.pack(ppass, 1, 4, 1, 1)
 
         l = Label(
-            self, text="Proxy hostname lookups", size_hint_align=ALIGN_LEFT)
+            self, text=_("Proxy hostname lookups"), size_hint_align=ALIGN_LEFT)
         l.show()
         phostlu = Check(parent, size_hint_align=ALIGN_RIGHT)
         phostlu.state = ps.proxy_hostnames
@@ -378,7 +378,7 @@ class ProxyGroup(Frame):
         t.pack(phostlu, 1, 5, 1, 1)
 
         l = Label(
-            self, text="Proxy peer connections", size_hint_align=ALIGN_LEFT)
+            self, text=_("Proxy peer connections"), size_hint_align=ALIGN_LEFT)
         l.show()
         ppeer = Check(parent, size_hint_align=ALIGN_RIGHT)
         ppeer.state = ps.proxy_peer_connections
@@ -388,7 +388,7 @@ class ProxyGroup(Frame):
 
         entries = [ptype, phost, pport, puser, ppass, phostlu, ppeer]
 
-        save = Button(parent, text="Apply")
+        save = Button(parent, text=_("Apply"))
         save.callback_clicked_add(self.save_conf, wfunc, entries)
         save.show()
         t.pack(save, 0, 7, 2, 1)
@@ -407,7 +407,7 @@ class ProxyGroup(Frame):
         p.proxy_hostnames = phostlu.state
         p.proxy_peer_connections = ppeer.state
 
-        Information(self.top_widget, "%s settings saved" % (ptype))
+        Information(self.top_widget, _("%s settings saved") % (ptype))
 
         wfunc(p)
 
@@ -419,7 +419,7 @@ class EncryptionSettings(Frame):
 
         Frame.__init__(self, parent)
         self.size_hint_align = FILL_HORIZ
-        self.text = "Encryption settings"
+        self.text = _("Encryption settings")
 
         pes = self.pes = session.get_pe_settings()
 
@@ -431,32 +431,32 @@ class EncryptionSettings(Frame):
             lt.enc_level.both
 
         inc = self.inc = ActSWithLabel(
-            parent, "Incoming encryption", enc_values, pes.in_enc_policy
+            parent, _("Incoming encryption"), enc_values, pes.in_enc_policy
             )
         b.pack_end(inc)
         inc.show()
 
         out = self.out = ActSWithLabel(
-            parent, "Outgoing encryption", enc_values, pes.out_enc_policy
+            parent, _("Outgoing encryption"), enc_values, pes.out_enc_policy
             )
         b.pack_end(out)
         out.show()
 
         lvl = self.lvl = ActSWithLabel(
-            parent, "Allowed encryption level", enc_levels,
+            parent, _("Allowed encryption level"), enc_levels,
             pes.allowed_enc_level
             )
         b.pack_end(lvl)
         lvl.show()
 
         prf = self.prf = Check(
-            parent, style="toggle", text="Prefer RC4 ecryption",
+            parent, style="toggle", text=_("Prefer RC4 ecryption"),
             state=pes.prefer_rc4
             )
         b.pack_end(prf)
         prf.show()
 
-        a_btn = Button(parent, text="Apply")
+        a_btn = Button(parent, text=_("Apply"))
         a_btn.callback_clicked_add(self.apply)
         b.pack_end(a_btn)
         a_btn.show()
@@ -480,7 +480,7 @@ class PreferencesSession(PreferencesDialog):
 
     def __init__(self, parent, session):
         PreferencesDialog.__init__(
-            self, "Epour Session Preferences")
+            self, _("Epour Session Preferences"))
 
         self.session = session
 
diff --git a/epour/gui/TorrentProps.py b/epour/gui/TorrentProps.py
index 45a3d1d..116a231 100644
--- a/epour/gui/TorrentProps.py
+++ b/epour/gui/TorrentProps.py
@@ -84,7 +84,7 @@ class FileClass(GenlistItemClass):
         h = obj.data["handle"]
         if part == "elm.swallow.icon":
             check = Check(obj)
-            check.tooltip_text_set("Enable/disable file download")
+            check.tooltip_text_set(_("Enable/disable file download"))
             check.state = h.file_priority(n)
             check.callback_changed_add(lambda x: h.file_priority(n, x.state))
             return check
@@ -118,7 +118,7 @@ class TorrentProps(StandardWindow):
 
     def __init__(self, h):
         if not h.is_valid():
-            Information(self, "Invalid torrent handle.")
+            Information(self, _("Invalid torrent handle."))
             return
 
         StandardWindow.__init__(
@@ -143,7 +143,7 @@ class TorrentProps(StandardWindow):
         box.pack_end(tname)
 
         if h.has_metadata():
-            f = Frame(self, text="Torrent info", size_hint_align=FILL_HORIZ)
+            f = Frame(self, text=_("Torrent info"), size_hint_align=FILL_HORIZ)
             ti = TorrentInfo(
                 f, h, size_hint_align=FILL_HORIZ)
             f.content = ti
@@ -151,7 +151,7 @@ class TorrentProps(StandardWindow):
             ti.show()
             f.show()
 
-        f = Frame(self, text="Torrent settings", size_hint_align=FILL_HORIZ)
+        f = Frame(self, text=_("Torrent settings"), size_hint_align=FILL_HORIZ)
         ts = TorrentSettings(
             f, h, size_hint_align=FILL_HORIZ)
         f.content = ts
@@ -159,7 +159,7 @@ class TorrentProps(StandardWindow):
         ts.show()
         f.show()
 
-        f = Frame(self, text="Torrent status", size_hint_align=FILL_HORIZ)
+        f = Frame(self, text=_("Torrent status"), size_hint_align=FILL_HORIZ)
         ts = TorrentStatus(f, h, size_hint_align=FILL_HORIZ)
         f.content = ts
         box.pack_end(f)
@@ -168,7 +168,7 @@ class TorrentProps(StandardWindow):
 
         magnet_uri = lt.make_magnet_uri(h)
 
-        f = Frame(self, size_hint_align=FILL_HORIZ, text="Magnet URI")
+        f = Frame(self, size_hint_align=FILL_HORIZ, text=_("Magnet URI"))
         me_box = Box(f, horizontal=True)
         me = Entry(
             me_box, size_hint_align=FILL_HORIZ, size_hint_weight=EXPAND_HORIZ,
@@ -176,7 +176,7 @@ class TorrentProps(StandardWindow):
             )
         me_box.pack_end(me)
         me.show()
-        me_btn = Button(me_box, text="Copy")
+        me_btn = Button(me_box, text=_("Copy"))
         me_btn.callback_clicked_add(
             lambda x: me.top_widget.cnp_selection_set(
                 ELM_SEL_TYPE_CLIPBOARD, ELM_SEL_FORMAT_TEXT, me.text
@@ -203,7 +203,7 @@ class TorrentFiles(StandardWindow):
         StandardWindow.__init__(
             self,
             "epour",
-            "Epour - Files for torrent: %s" % (h.name()),
+            _("Epour - Files for torrent: %s") % (h.name()),
             size=(SCALE * 480, SCALE * 320),
             autodel=True
             )
@@ -245,11 +245,11 @@ class TorrentFiles(StandardWindow):
 
         filelist.show()
 
-        sel_all = Button(self, text="Select all")
+        sel_all = Button(self, text=_("Select all"))
         sel_all.callback_clicked_add(self.select_all_cb, filelist, h, True)
         sel_all.show()
 
-        sel_none = Button(self, text="Select none")
+        sel_none = Button(self, text=_("Select none"))
         sel_none.callback_clicked_add(self.select_all_cb, filelist, h, False)
         sel_none.show()
 
@@ -388,7 +388,7 @@ class TorrentInfo(Box):
 
         tpriv = Check(self)
         tpriv.size_hint_align = 0.0, 0.0
-        tpriv.text = "Private"
+        tpriv.text = _("Private")
         tpriv.tooltip_text_set(
             "Whether this torrent is private,<br>"
             "i.e. it should not be distributed on the<br>"
@@ -439,13 +439,13 @@ class TorrentSettings(Box):
 
         l = Label(t)
         l.size_hint_align = ALIGN_LEFT
-        l.text = "Storage path"
+        l.text = _("Storage path")
         t.pack(l, 0, 0, 1, 1)
         l.show()
 
         fs = FsEntry(t)
         fs.size_hint_align = FILL_HORIZ
-        fs.text = "Select"
+        fs.text = _("Select")
         fs.folder_only = True
         fs.expandable = False
         fs.path = handle.save_path()
@@ -497,7 +497,7 @@ class TorrentSettings(Box):
             l.show()
             w = UnitSpinner(self, "B/s", 1024, UnitSpinner.binary_prefixes)
             w.size_hint_align = FILL_HORIZ
-            w.spinner.special_value_add(0, "disabled")
+            w.spinner.special_value_add(0, _("disabled"))
             w.set_value(getattr(handle, getter)())
             setter = getattr(handle, self.handle_unit_spinners[getter])
             w.callback_changed_add(lambda x, y, z=setter: z(y))
@@ -533,8 +533,8 @@ class TorrentSettings(Box):
 class TorrentStatus(Table):
 
     state_str = (
-        'Queued', 'Checking', 'Downloading metadata', 'Downloading',
-        'Finished', 'Seeding', 'Allocating', 'Checking resume data'
+        _('Queued'), _('Checking'), _('Downloading metadata'), 
_('Downloading'),
+        _('Finished'), _('Seeding'), _('Allocating'), _('Checking resume data')
         )
 
     ignored_keys = (
diff --git a/epour/gui/TorrentSelector.py b/epour/gui/TorrentSelector.py
index 197af88..18b7cee 100644
--- a/epour/gui/TorrentSelector.py
+++ b/epour/gui/TorrentSelector.py
@@ -57,9 +57,164 @@ log = logging.getLogger("epour.gui")
 
 class TorrentSelector(StandardWindow):
 
+    names = {
+        1: _("Seed Mode"),
+        2: "Override Resume Data",
+        4: "Upload Mode",
+        8: _("Share Mode"),
+        16: _("Apply IP Filter"),
+        32: "Start Paused",
+        64: "Auto Managed",
+        128: _("Duplicate Is Error"),
+        256: "Merge Resume Trackers",
+        512: "Updates Subscribe",
+        1024: _("Super Seeding"),
+        2048: _("Sequential Download"),
+        4096: _("Use Resume Save Path"),
+    }
+
+    tooltips = {
+        1: utf8_to_markup(_(
+
+'''If Seed Mode is set, Epour will assume that all files are
+present for this torrent and that they all match the hashes in the
+torrent file. Each time a peer requests to download a block, the
+piece is verified against the hash, unless it has been verified
+already. If a hash fails, the torrent will automatically leave the
+seed mode and recheck all the files. The use case for this mode is
+if a torrent is created and seeded, or if the user already know
+that the files are complete, this is a way to avoid the initial
+file checks, and significantly reduce the startup time.
+
+Setting Seed Mode on a torrent without metadata (a .torrent
+file) is a no-op and will be ignored.'''
+
+            )),
+        2: utf8_to_markup(
+
+'''If Override Resume Data is set, flags set for this torrent in this
+add_torrent_params object will take precedence over whatever states
+are saved in the resume data. For instance, the paused,
+auto_managed, sequential_download, seed_mode, super_seeding,
+max_uploads, max_connections, upload_limit and download_limit are
+all affected by this flag. The intention of this flag is to have
+any field in add_torrent_params configuring the torrent override
+the corresponding configuration from the resume file, with the one
+exception of save resume data, which has its own flag (for historic
+reasons).'''
+
+            ),
+        4: utf8_to_markup(
+
+'''If Upload Mode is set, the torrent will be initialized in upload-
+mode, which means it will not make any piece requests. This state
+is typically entered on disk I/O errors, and if the torrent is also
+auto managed, it will be taken out of this state periodically. This
+mode can be used to avoid race conditions when adjusting priorities
+of pieces before allowing the torrent to start downloading.
+
+If the torrent is auto-managed, the torrent will eventually be
+taken out of upload-mode, regardless of how it got there. If it's
+important to manually control when the torrent leaves upload mode,
+don't make it auto managed.'''
+
+            ),
+        8: utf8_to_markup(_(
+
+'''Determines if the torrent should be added in share mode or not.
+Share mode indicates that we are not interested in downloading the
+torrent, but merely want to improve our share ratio (i.e. increase
+it). A torrent started in share mode will do its best to never
+download more than it uploads to the swarm. If the swarm does not
+have enough demand for upload capacity, the torrent will not
+download anything. This mode is intended to be safe to add any
+number of torrents to, without manual screening, without the risk
+of downloading more than is uploaded.
+
+A torrent in share mode sets the priority to all pieces to 0,
+except for the pieces that are downloaded, when pieces are decided
+to be downloaded. This affects the progress bar, which might be set
+to "100% finished" most of the time. Do not change file or piece
+priorities for torrents in share mode, it will make it not work.
+
+The share mode has one setting, the share ratio target.'''
+
+            )),
+        16: utf8_to_markup(_(
+
+'''Determines if the IP filter should apply to this torrent or not. By
+default all torrents are subject to filtering by the IP filter
+(i.e. this flag is set by default). This is useful if certain
+torrents needs to be excempt for some reason, being an auto-update
+torrent for instance.'''
+
+            )),
+        32: utf8_to_markup(
+
+'''Specifies whether or not the torrent is to be started in a paused
+state. I.e. it won't connect to the tracker or any of the peers
+until it's resumed. This is typically a good way of avoiding race
+conditions when setting configuration options on torrents before
+starting them.'''
+
+            ),
+        64: utf8_to_markup(
+
+'''If the torrent is auto-managed, the torrent may be resumed at any
+point, regardless of how it paused. If it's important to manually
+control when the torrent is paused and resumed, don't make it auto
+managed.
+
+If auto-managed, the torrent will be queued, started and seeded
+automatically by libtorrent. When this is set, the torrent should
+also be started as paused. The default queue order is the order the
+torrents were added. They are all downloaded in that order. For
+more details, see queuing.
+
+If you pass in resume data, the auto-managed state of the torrent
+when the resume data was saved will override the auto-managed state
+you pass in here. You can override this by setting
+Override Resume Data.'''
+
+            ),
+        # 128: _(""),
+        256: utf8_to_markup(
+
+'''Defaults to off and specifies whether tracker URLs loaded from
+resume data should be added to the trackers in the torrent or
+replace the trackers.'''
+
+            ),
+        512: utf8_to_markup(
+
+'''On by default and means that this torrent will be part of state
+updates when calling post_torrent_updates().'''
+
+            ),
+        1024: utf8_to_markup(_(
+
+'''Sets the torrent into super seeding mode. If the torrent is not a
+seed, this flag has no effect.'''
+
+            )),
+        2048: utf8_to_markup(_(
+
+'''Sets the sequential download state for the torrent.'''
+
+            )),
+        4096: utf8_to_markup(_(
+
+'''If this flag is set, the save path from the resume data file,
+if present, is honored. This defaults to not being set, in
+which case the save_path specified in add_torrent_params is
+always used.'''
+
+            )),
+    }
+
     def __init__(self, parent, session, t_uri=None):
         StandardWindow.__init__(
-            self, "epour", "Epour - Add Torrent",
+            self, "addtorrent", _("Add Torrent"),
             size=(scale * 400, scale * 400), autodel=True
             )
 
@@ -75,7 +230,9 @@ class TorrentSelector(StandardWindow):
 
         scrol.content = box
 
-        hbox = Box(box, size_hint_weight=EXPAND_HORIZ, 
size_hint_align=FILL_HORIZ, horizontal=True)
+        hbox = Box(
+            box, size_hint_weight=EXPAND_HORIZ, size_hint_align=FILL_HORIZ,
+            horizontal=True)
         box.pack_end(hbox)
         hbox.show()
 
@@ -83,7 +240,7 @@ class TorrentSelector(StandardWindow):
             box, size_hint_weight=EXPAND_HORIZ, size_hint_align=FILL_HORIZ,
             single_line=True, scrollable=True
             )
-        uri_entry.part_text_set("guide", "Enter file path / magnet URI / info 
hash")
+        uri_entry.part_text_set("guide", _("Enter torrent file path / magnet 
URI / info hash"))
         if t_uri:
             uri_entry.entry = utf8_to_markup(t_uri)
         hbox.pack_end(uri_entry)
@@ -92,14 +249,14 @@ class TorrentSelector(StandardWindow):
         if t_uri:
             uri_entry.entry = t_uri
 
-        fsb = Button(box, text="Select torrent file")
+        fsb = Button(box, text=_("Select file"))
         fsb.callback_clicked_add(lambda x: TorrentFs(self, uri_entry))
         hbox.pack_end(fsb)
         fsb.show()
 
         options = Frame(
             self, size_hint_weight=EXPAND_HORIZ, size_hint_align=FILL_HORIZ,
-            text=u"Advanced Options \u25BA", collapse=True
+            text=_("Advanced Options") + u" \u25BA", collapse=True
             )
         box.pack_end(options)
         options.show()
@@ -121,18 +278,23 @@ class TorrentSelector(StandardWindow):
         def entry_cb(e, key):
             self.add_dict[key] = e.entry
 
-        for n in "name", "trackerid":
+        for v, t in {
+            "name": _("Name"),
+            "trackerid": _("Tracker ID")
+                }.items():
             e = Entry(opt_box, size_hint_align=FILL_HORIZ)
-            e.part_text_set("guide", n)
-            e.callback_changed_user_add(entry_cb, n)
+            e.part_text_set("guide", t)
+            e.callback_changed_user_add(entry_cb, v)
             opt_box.pack_end(e)
             e.show()
 
         def fs_cb(fs, key):
             self.add_dict[key] = fs.path
 
+        # Downloaded data is saved in this path
+        title = _("Data Save Path")
         save_path = FsEntry(
-            opt_box, size_hint_align=FILL_HORIZ, text="Save path",
+            opt_box, size_hint_align=FILL_HORIZ, text=title,
             folder_only=True, expandable=False
             )
         save_path.path = session.conf.get("Settings", "storage_path")
@@ -140,23 +302,35 @@ class TorrentSelector(StandardWindow):
         opt_box.pack_end(save_path)
         save_path.show()
 
-        self.add_dict["flags"] = \
-            add_torrent_params_flags_t.flag_apply_ip_filter + \
-            add_torrent_params_flags_t.flag_update_subscribe + \
-            add_torrent_params_flags_t.flag_duplicate_is_error + \
+        self.add_dict["flags"] = (
+            add_torrent_params_flags_t.flag_apply_ip_filter +
+            add_torrent_params_flags_t.flag_update_subscribe +
+            add_torrent_params_flags_t.flag_duplicate_is_error +
             add_torrent_params_flags_t.flag_auto_managed
+            )
 
         def option_flag_cb(c, flag):
             self.add_dict["flags"] = self.add_dict["flags"] ^ flag
 
         for name, flag in add_torrent_params_flags_t.names.items():
-            if name == "flag_auto_managed" or name == "flag_update_subscribe":
+            if (
+                name == "flag_auto_managed" or
+                name == "flag_update_subscribe" or
+                name == "flag_override_resume_data" or
+                name == "flag_merge_resume_trackers" or
+                name == "flag_paused" or
+                name == "flag_upload_mode" or
+                name == "flag_use_resume_save_path"
+                    ):
                 continue
             c = Check(
                 opt_box, size_hint_align=(0.0, 0.5),
-                text=" ".join(name.split("_")[1:]).capitalize(),
+                text=self.names.get(int(flag), " 
".join(name.split("_")[1:]).capitalize()),
                 state=bool(self.add_dict["flags"] & int(flag))
                 )
+            if int(flag) in self.tooltips:
+                c.tooltip_text_set(self.tooltips[int(flag)])
+                c.tooltip_window_mode_set(True)
             c.callback_changed_add(option_flag_cb, int(flag))
             opt_box.pack_end(c)
             c.show()
@@ -166,29 +340,30 @@ class TorrentSelector(StandardWindow):
         def spin_cb(s, key):
             self.add_dict[key] = s.value
 
-        for n in (
-            "max_uploads", "max_connections"
-                ):
+        for v, t in {
+            "max_uploads": _("Max Uploads"),
+            "max_connections": _("Max Connections")
+                }.items():
             s = Spinner(
-                opt_box, size_hint_align=FILL_HORIZ,
-                text=n.replace("_", " ").capitalize(),
-                min_max=(0, INT_MAX), label_format=n + ": %0.f"
+                opt_box, size_hint_align=FILL_HORIZ, min_max=(0, INT_MAX),
+                label_format=t + ": %0.f"
                 )
-            s.callback_changed_add(spin_cb, n)
+            s.callback_changed_add(spin_cb, v)
             opt_box.pack_end(s)
             s.show()
 
-        for n in (
-            "upload_limit", "download_limit"
-                ):
+        for v, t in {
+            "upload_limit": _("Upload Limit"),
+            "download_limit": _("Download Limit")
+                }.items():
             s = UnitSpinner(opt_box, "B/s", 1024, UnitSpinner.binary_prefixes)
             s.size_hint_weight = EXPAND_HORIZ
             s.size_hint_align = FILL_HORIZ
             s.set_value(0)
             s.callback_changed_add(
-                lambda x, y: self.add_dict.__setitem__(n, y)
+                lambda x, y: self.add_dict.__setitem__(v, y)
                 )
-            s.spinner.label_format = n + ": %0.f"
+            s.spinner.label_format = t + ": %0.f"
             opt_box.pack_end(s)
             s.show()
 
@@ -205,11 +380,11 @@ class TorrentSelector(StandardWindow):
             size_hint_align=FILL_HORIZ, horizontal=True
             )
 
-        ok_btn = Button(bbox, text="Ok", size_hint_align=(1.0, 0.5))
+        ok_btn = Button(bbox, text=_("Ok"), size_hint_align=(1.0, 0.5))
         bbox.pack_end(ok_btn)
         ok_btn.show()
 
-        cancel_btn = Button(bbox, text="Cancel", size_hint_align=(1.0, 0.5))
+        cancel_btn = Button(bbox, text=_("Cancel"), size_hint_align=(1.0, 0.5))
         bbox.pack_end(cancel_btn)
         cancel_btn.show()
 
diff --git a/epour/gui/Widgets.py b/epour/gui/Widgets.py
index b2bd7d9..6e6a178 100644
--- a/epour/gui/Widgets.py
+++ b/epour/gui/Widgets.py
@@ -103,7 +103,7 @@ class Information(Notify):
         l.show()
         self.content = l
         if button:
-            xbtn = Button(b, text="Close")
+            xbtn = Button(b, text=_("Close"))
             xbtn.callback_clicked_add(lambda x: self.delete())
             b.pack_end(xbtn)
         self.timeout = timeout
@@ -116,7 +116,7 @@ class Error(Popup):
         self.part_text_set("title,text", title)
         self.text = text
         b = Button(self)
-        b.text = "OK"
+        b.text = _("OK")
         b.callback_clicked_add(lambda x: self.delete())
         self.part_content_set("button1", b)
         self.show()
@@ -125,14 +125,14 @@ class Error(Popup):
 class ConfirmExit(Popup):
     def __init__(self, parent, exit_func):
         super(self.__class__, self).__init__(parent)
-        self.part_text_set("title,text", "Confirm exit")
-        self.text = "Are you sure you wish to exit Epour?"
+        self.part_text_set("title,text", _("Confirm exit"))
+        self.text = _("Are you sure you wish to exit Epour?")
         b = Button(self)
-        b.text = "Yes"
+        b.text = _("Yes")
         b.callback_clicked_add(lambda x: exit_func())
         self.part_content_set("button1", b)
         b = Button(self)
-        b.text = "No"
+        b.text = _("No")
         b.callback_clicked_add(lambda x: self.delete())
         self.part_content_set("button2", b)
         self.show()
diff --git a/epour/gui/__init__.py b/epour/gui/__init__.py
index 87a131e..37be299 100644
--- a/epour/gui/__init__.py
+++ b/epour/gui/__init__.py
@@ -22,6 +22,8 @@
 import cgi
 import logging
 from datetime import timedelta, datetime
+import gettext
+gettext.install("epour", unicode=True)
 
 import libtorrent as lt
 
@@ -85,7 +87,7 @@ class MainInterface(object):
         tb.menu_parent = win
 
         item = tb.item_append(
-            "document-new", "Add torrent",
+            "document-new", _("Add torrent"),
             lambda x, y: self.add_torrent()
             )
 
@@ -98,11 +100,11 @@ class MainInterface(object):
             del it.state
 
         item = tb.item_append(
-            "media-playback-pause", "Pause Session",
+            "media-playback-pause", _("Pause Session"),
             lambda tb, it: pause_session(it)
             )
         item.state_add(
-            "media-playback-start", "Resume Session",
+            "media-playback-start", _("Resume Session"),
             lambda tb, it: resume_session(it)
             )
 
@@ -118,22 +120,22 @@ class MainInterface(object):
             from .Preferences import PreferencesSession
             PreferencesSession(self, self.session).show()
 
-        item = tb.item_append("preferences-system", "Preferences")
+        item = tb.item_append("preferences-system", _("Preferences"))
         item.menu = True
         item.menu.item_add(
-            None, "General", "preferences-system",
+            None, _("General"), "preferences-system",
             lambda o, i: prefs_general_cb()
             )
         item.menu.item_add(
-            None, "Proxy", "preferences-system",
+            None, _("Proxy"), "preferences-system",
             lambda o, i: prefs_proxy_cb()
             )
         item.menu.item_add(
-            None, "Session", "preferences-system",
+            None, _("Session"), "preferences-system",
             lambda o, i: prefs_session_cb()
             )
 
-        item = tb.item_append("application-exit", "Exit",
+        item = tb.item_append("application-exit", _("Exit"),
                               lambda tb, it: elm.exit())
 
         mbox.pack_start(tb)
@@ -217,7 +219,7 @@ class MainInterface(object):
             "state_changed_alert", state_changed_cb)
 
         def torrent_finished_cb(a):
-            msg = "Torrent {} has finished downloading.".format(
+            msg = _("Torrent {} has finished downloading.").format(
                 cgi.escape(a.handle.name())
             )
             log.info(msg)
@@ -330,7 +332,8 @@ class SessionStatus(Table):
         self.pack(ses_pause_ic, 1, 0, 1, 1)
         ses_pause_ic.show()
 
-        title_l = Label(parent, text="<b>Session</b>")
+        t = _("Session")
+        title_l = Label(parent, text="<b>%s</b>" % t)
         self.pack(title_l, 0, 0, 1, 1)
         title_l.show()
 
@@ -360,7 +363,7 @@ class SessionStatus(Table):
         self.pack(u_l, 1, 2, 1, 1)
         u_l.show()
 
-        peer_t = Label(parent, text="Peer connections")
+        peer_t = Label(parent, text=_("Peer connections"))
         self.pack(peer_t, 0, 3, 1, 1)
         peer_t.show()
 
@@ -368,7 +371,7 @@ class SessionStatus(Table):
         self.pack(peer_l, 1, 3, 1, 1)
         peer_l.show()
 
-        uploads_t = Label(parent, text="Upload slots")
+        uploads_t = Label(parent, text=_("Upload slots"))
         self.pack(uploads_t, 0, 4, 1, 1)
         uploads_t.show()
 
@@ -377,7 +380,7 @@ class SessionStatus(Table):
         self.pack(uploads_l, 1, 4, 1, 1)
         uploads_l.show()
 
-        listen_t = Label(parent, text="Listening")
+        listen_t = Label(parent, text=_("Listening"))
         self.pack(listen_t, 0, 5, 1, 1)
         listen_t.show()
 
@@ -422,8 +425,9 @@ class SessionStatus(Table):
 class TorrentClass(GenlistItemClass):
 
     state_str = (
-        'Queued', 'Checking', 'Downloading metadata', 'Downloading',
-        'Finished', 'Seeding', 'Allocating', 'Checking resume data'
+        _('Queued'), _('Checking'), _('Downloading metadata'),
+        _('Downloading'), _('Finished'), _('Seeding'), _('Allocating'),
+        _('Checking resume data')
         )
 
     log = logging.getLogger("epour.gui.torrent_list")
@@ -443,14 +447,14 @@ class TorrentClass(GenlistItemClass):
             )
         elif part == "elm.text.sub":
             if not h.is_valid():
-                return "Invalid torrent"
+                return _("Invalid torrent")
             s = h.status(0)
             qp = h.queue_position()
             if qp == -1:
                 qp = "seeding"
 
-            return "{:.0%} complete, ETA: {} " \
-                "(Down: {}/s Up: {}/s Queue pos: {})".format(
+            return _("{:.0%} complete, ETA: {} "
+                "(Down: {}/s Up: {}/s Queue pos: {})").format(
                     s.progress,
                     timedelta(seconds=self.get_eta(s)),
                     intrepr(s.download_payload_rate, precision=0),
@@ -530,35 +534,35 @@ class ItemMenu(Menu):
 
         self.item_add(
             None,
-            "Resume" if h.is_paused() else "Pause",
+            _("Resume") if h.is_paused() else _("Pause"),
             None,
             self.resume_torrent_cb if h.is_paused() else self.pause_torrent_cb,
             h
         )
-        q = self.item_add(None, "Queue", None, None)
+        q = self.item_add(None, _("Queue"), None, None)
         self.item_add(
-            q, "Up", None, lambda x, y: h.queue_position_up()
+            q, _("Up"), None, lambda x, y: h.queue_position_up()
             )
         self.item_add(
-            q, "Down", None, lambda x, y: h.queue_position_down()
+            q, _("Down"), None, lambda x, y: h.queue_position_down()
             )
         self.item_add(
-            q, "Top", None, lambda x, y: h.queue_position_top()
+            q, _("Top"), None, lambda x, y: h.queue_position_top()
             )
         self.item_add(
-            q, "Bottom", None, lambda x, y: h.queue_position_bottom()
+            q, _("Bottom"), None, lambda x, y: h.queue_position_bottom()
             )
         rem = self.item_add(
-            None, "Remove torrent", None,
+            None, _("Remove torrent"), None,
             self.remove_torrent_cb, item, session, h, False
             )
         self.item_add(
-            rem, "and data files", None,
+            rem, _("and data files"), None,
             self.remove_torrent_cb, item, session, h, True
             )
         self.item_separator_add(None)
         it = self.item_add(
-            None, "Force reannounce", None, lambda x, y: h.force_reannounce()
+            None, _("Force reannounce"), None, lambda x, y: 
h.force_reannounce()
             )
         it.tooltip_text_set(
             "<b>Force reannounce</b> will force this torrent<br>"
@@ -571,11 +575,11 @@ class ItemMenu(Menu):
             "trackers minimum re-announce interval settings."
             )
         self.item_add(
-            None, "Force DHT reannounce", None,
+            None, _("Force DHT reannounce"), None,
             lambda x, y: h.force_dht_announce()
             )
         it = self.item_add(
-            None, "Scrape tracker", None,
+            None, _("Scrape tracker"), None,
             lambda x, y: h.scrape_tracker()
             )
         it.tooltip_text_set(
@@ -585,7 +589,7 @@ class ItemMenu(Menu):
             "complete peers, number of downloads etc."
             )
         it = self.item_add(
-            None, "Force re-check", None,
+            None, _("Force re-check"), None,
             lambda x, y: h.force_recheck()
             )
         it.tooltip_text_set(
@@ -601,7 +605,7 @@ class ItemMenu(Menu):
             )
         self.item_separator_add(None)
         it = self.item_add(
-            None, "Torrent properties", None,
+            None, _("Torrent properties"), None,
             self.torrent_props_cb, h
             )
 
@@ -641,18 +645,18 @@ class ItemMenu(Menu):
 class TorrentTooltip(Table):
 
     items = (
-        ("Time when added", datetime.fromtimestamp, "added_time"),
-        ("Time when completed", datetime.fromtimestamp, "completed_time"),
-        ("All time downloaded", intrepr, "all_time_download"),
-        ("All time uploaded", intrepr, "all_time_upload"),
-        ("Total wanted done", intrepr, "total_wanted_done"),
-        ("Total wanted", intrepr, "total_wanted"),
-        ("Total downloaded this session",
+        (_("Time when added"), datetime.fromtimestamp, "added_time"),
+        (_("Time when completed"), datetime.fromtimestamp, "completed_time"),
+        (_("All time downloaded"), intrepr, "all_time_download"),
+        (_("All time uploaded"), intrepr, "all_time_upload"),
+        (_("Total wanted done"), intrepr, "total_wanted_done"),
+        (_("Total wanted"), intrepr, "total_wanted"),
+        (_("Total downloaded this session"),
             intrepr, "total_payload_download"),
-        ("Total uploaded this session", intrepr, "total_payload_upload"),
-        ("Total failed", intrepr, "total_failed_bytes"),
-        ("Number of seeds", None, "num_seeds"),
-        ("Number of peers", None, "num_peers"),
+        (_("Total uploaded this session"), intrepr, "total_payload_upload"),
+        (_("Total failed"), intrepr, "total_failed_bytes"),
+        (_("Number of seeds"), None, "num_seeds"),
+        (_("Number of peers"), None, "num_peers"),
         )
 
     bold = "font_weight=Bold"
@@ -671,7 +675,7 @@ class TorrentTooltip(Table):
             v = getattr(s, attr_name)
             if conv:
                 if conv == datetime.fromtimestamp and v == 0:
-                    v = "N/A"
+                    v = _("N/A")
                 else:
                     v = conv(v)
             l2 = Label(self, text=str(v))
@@ -695,7 +699,7 @@ class TorrentTooltip(Table):
 
         l.text = "".join((
             "<font %s>" % (self.bold),
-            "Pieces (scaled 1:%d)" % (g.block_size),
+            _("Pieces (scaled 1:%d)") % (g.block_size),
             "</>"
             ))
 
@@ -714,7 +718,7 @@ class TorrentTooltip(Table):
             v = getattr(s, attr_name)
             if conv:
                 if conv == datetime.fromtimestamp and v == 0:
-                    v = "N/A"
+                    v = _("N/A")
                 else:
                     v = conv(v)
             l.text = str(v)
diff --git a/po/epour.pot b/po/epour.pot
new file mode 100644
index 0000000..ade5380
--- /dev/null
+++ b/po/epour.pot
@@ -0,0 +1,555 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2015-04-22 09:05+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <l...@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ../epour/gui/Widgets.py:106
+msgid "Close"
+msgstr ""
+
+#: ../epour/gui/Widgets.py:119
+msgid "OK"
+msgstr ""
+
+#: ../epour/gui/Widgets.py:128
+msgid "Confirm exit"
+msgstr ""
+
+#: ../epour/gui/Widgets.py:129
+msgid "Are you sure you wish to exit Epour?"
+msgstr ""
+
+#: ../epour/gui/Widgets.py:131
+msgid "Yes"
+msgstr ""
+
+#: ../epour/gui/Widgets.py:135
+msgid "No"
+msgstr ""
+
+#: ../epour/gui/TorrentProps.py:87
+msgid "Enable/disable file download"
+msgstr ""
+
+#: ../epour/gui/TorrentProps.py:121
+msgid "Invalid torrent handle."
+msgstr ""
+
+#: ../epour/gui/TorrentProps.py:146
+msgid "Torrent info"
+msgstr ""
+
+#: ../epour/gui/TorrentProps.py:154
+msgid "Torrent settings"
+msgstr ""
+
+#: ../epour/gui/TorrentProps.py:162
+msgid "Torrent status"
+msgstr ""
+
+#: ../epour/gui/TorrentProps.py:171
+msgid "Magnet URI"
+msgstr ""
+
+#: ../epour/gui/TorrentProps.py:179
+msgid "Copy"
+msgstr ""
+
+#: ../epour/gui/TorrentProps.py:206
+#, python-format
+msgid "Epour - Files for torrent: %s"
+msgstr ""
+
+#: ../epour/gui/TorrentProps.py:248
+msgid "Select all"
+msgstr ""
+
+#: ../epour/gui/TorrentProps.py:252
+msgid "Select none"
+msgstr ""
+
+#: ../epour/gui/TorrentProps.py:391
+msgid "Private"
+msgstr ""
+
+#: ../epour/gui/TorrentProps.py:442
+msgid "Storage path"
+msgstr ""
+
+#: ../epour/gui/TorrentProps.py:448
+msgid "Select"
+msgstr ""
+
+#: ../epour/gui/TorrentProps.py:500
+msgid "disabled"
+msgstr ""
+
+#: ../epour/gui/TorrentProps.py:536 ../epour/gui/__init__.py:428
+msgid "Queued"
+msgstr ""
+
+#: ../epour/gui/TorrentProps.py:536 ../epour/gui/__init__.py:428
+msgid "Checking"
+msgstr ""
+
+#: ../epour/gui/TorrentProps.py:536 ../epour/gui/__init__.py:428
+msgid "Downloading metadata"
+msgstr ""
+
+#: ../epour/gui/TorrentProps.py:536 ../epour/gui/__init__.py:429
+msgid "Downloading"
+msgstr ""
+
+#: ../epour/gui/TorrentProps.py:537 ../epour/gui/__init__.py:429
+msgid "Finished"
+msgstr ""
+
+#: ../epour/gui/TorrentProps.py:537 ../epour/gui/__init__.py:429
+msgid "Seeding"
+msgstr ""
+
+#: ../epour/gui/TorrentProps.py:537 ../epour/gui/__init__.py:429
+msgid "Allocating"
+msgstr ""
+
+#: ../epour/gui/TorrentProps.py:537 ../epour/gui/__init__.py:430
+msgid "Checking resume data"
+msgstr ""
+
+#: ../epour/gui/__init__.py:90
+msgid "Add torrent"
+msgstr ""
+
+#: ../epour/gui/__init__.py:103
+msgid "Pause Session"
+msgstr ""
+
+#: ../epour/gui/__init__.py:107
+msgid "Resume Session"
+msgstr ""
+
+#: ../epour/gui/__init__.py:123
+msgid "Preferences"
+msgstr ""
+
+#: ../epour/gui/__init__.py:126
+msgid "General"
+msgstr ""
+
+#: ../epour/gui/__init__.py:130
+msgid "Proxy"
+msgstr ""
+
+#: ../epour/gui/__init__.py:134 ../epour/gui/__init__.py:335
+msgid "Session"
+msgstr ""
+
+#: ../epour/gui/__init__.py:138
+msgid "Exit"
+msgstr ""
+
+#: ../epour/gui/__init__.py:222
+msgid "Torrent {} has finished downloading."
+msgstr ""
+
+#: ../epour/gui/__init__.py:366
+msgid "Peer connections"
+msgstr ""
+
+#: ../epour/gui/__init__.py:374
+msgid "Upload slots"
+msgstr ""
+
+#: ../epour/gui/__init__.py:383
+msgid "Listening"
+msgstr ""
+
+#: ../epour/gui/__init__.py:450
+msgid "Invalid torrent"
+msgstr ""
+
+#: ../epour/gui/__init__.py:456
+msgid "{:.0%} complete, ETA: {} (Down: {}/s Up: {}/s Queue pos: {})"
+msgstr ""
+
+#: ../epour/gui/__init__.py:537
+msgid "Resume"
+msgstr ""
+
+#: ../epour/gui/__init__.py:537
+msgid "Pause"
+msgstr ""
+
+#: ../epour/gui/__init__.py:542
+msgid "Queue"
+msgstr ""
+
+#: ../epour/gui/__init__.py:544
+msgid "Up"
+msgstr ""
+
+#: ../epour/gui/__init__.py:547
+msgid "Down"
+msgstr ""
+
+#: ../epour/gui/__init__.py:550
+msgid "Top"
+msgstr ""
+
+#: ../epour/gui/__init__.py:553
+msgid "Bottom"
+msgstr ""
+
+#: ../epour/gui/__init__.py:556
+msgid "Remove torrent"
+msgstr ""
+
+#: ../epour/gui/__init__.py:560
+msgid "and data files"
+msgstr ""
+
+#: ../epour/gui/__init__.py:565
+msgid "Force reannounce"
+msgstr ""
+
+#: ../epour/gui/__init__.py:578
+msgid "Force DHT reannounce"
+msgstr ""
+
+#: ../epour/gui/__init__.py:582
+msgid "Scrape tracker"
+msgstr ""
+
+#: ../epour/gui/__init__.py:592
+msgid "Force re-check"
+msgstr ""
+
+#: ../epour/gui/__init__.py:608
+msgid "Torrent properties"
+msgstr ""
+
+#: ../epour/gui/__init__.py:648
+msgid "Time when added"
+msgstr ""
+
+#: ../epour/gui/__init__.py:649
+msgid "Time when completed"
+msgstr ""
+
+#: ../epour/gui/__init__.py:650
+msgid "All time downloaded"
+msgstr ""
+
+#: ../epour/gui/__init__.py:651
+msgid "All time uploaded"
+msgstr ""
+
+#: ../epour/gui/__init__.py:652
+msgid "Total wanted done"
+msgstr ""
+
+#: ../epour/gui/__init__.py:653
+msgid "Total wanted"
+msgstr ""
+
+#: ../epour/gui/__init__.py:654
+msgid "Total downloaded this session"
+msgstr ""
+
+#: ../epour/gui/__init__.py:656
+msgid "Total uploaded this session"
+msgstr ""
+
+#: ../epour/gui/__init__.py:657
+msgid "Total failed"
+msgstr ""
+
+#: ../epour/gui/__init__.py:658
+msgid "Number of seeds"
+msgstr ""
+
+#: ../epour/gui/__init__.py:659
+msgid "Number of peers"
+msgstr ""
+
+#: ../epour/gui/__init__.py:678 ../epour/gui/__init__.py:721
+msgid "N/A"
+msgstr ""
+
+#: ../epour/gui/__init__.py:702
+#, python-format
+msgid "Pieces (scaled 1:%d)"
+msgstr ""
+
+#: ../epour/gui/Preferences.py:97
+msgid "Epour General Preferences"
+msgstr ""
+
+#: ../epour/gui/Preferences.py:111
+msgid "Move completed torrents"
+msgstr ""
+
+#: ../epour/gui/Preferences.py:119
+msgid "Completed torrents"
+msgstr ""
+
+#: ../epour/gui/Preferences.py:148
+msgid "Delete original .torrent file when added"
+msgstr ""
+
+#: ../epour/gui/Preferences.py:156
+msgid "Ask for confirmation on exit"
+msgstr ""
+
+#: ../epour/gui/Preferences.py:165
+msgid "Torrents to be added from dbus or command line open a dialog"
+msgstr ""
+
+#: ../epour/gui/Preferences.py:200
+msgid "Change path"
+msgstr ""
+
+#: ../epour/gui/Preferences.py:237
+msgid "Listen port (range)"
+msgstr ""
+
+#: ../epour/gui/Preferences.py:276
+msgid "Epour Proxy Preferences"
+msgstr ""
+
+#: ../epour/gui/Preferences.py:279
+msgid "Proxy for torrent peer connections"
+msgstr ""
+
+#: ../epour/gui/Preferences.py:281
+msgid "Proxy for torrent web seed connections"
+msgstr ""
+
+#: ../epour/gui/Preferences.py:283
+msgid "Proxy for tracker connections"
+msgstr ""
+
+#: ../epour/gui/Preferences.py:285
+msgid "Proxy for DHT connections"
+msgstr ""
+
+#: ../epour/gui/Preferences.py:320
+msgid "Proxy type"
+msgstr ""
+
+#: ../epour/gui/Preferences.py:330
+msgid "Hostname"
+msgstr ""
+
+#: ../epour/gui/Preferences.py:341
+msgid "Port"
+msgstr ""
+
+#: ../epour/gui/Preferences.py:349
+msgid "Username"
+msgstr ""
+
+#: ../epour/gui/Preferences.py:360
+msgid "Password"
+msgstr ""
+
+#: ../epour/gui/Preferences.py:372
+msgid "Proxy hostname lookups"
+msgstr ""
+
+#: ../epour/gui/Preferences.py:381
+msgid "Proxy peer connections"
+msgstr ""
+
+#: ../epour/gui/Preferences.py:391 ../epour/gui/Preferences.py:459
+msgid "Apply"
+msgstr ""
+
+#: ../epour/gui/Preferences.py:410
+#, python-format
+msgid "%s settings saved"
+msgstr ""
+
+#: ../epour/gui/Preferences.py:422
+msgid "Encryption settings"
+msgstr ""
+
+#: ../epour/gui/Preferences.py:434
+msgid "Incoming encryption"
+msgstr ""
+
+#: ../epour/gui/Preferences.py:440
+msgid "Outgoing encryption"
+msgstr ""
+
+#: ../epour/gui/Preferences.py:446
+msgid "Allowed encryption level"
+msgstr ""
+
+#: ../epour/gui/Preferences.py:453
+msgid "Prefer RC4 ecryption"
+msgstr ""
+
+#: ../epour/gui/Preferences.py:483
+msgid "Epour Session Preferences"
+msgstr ""
+
+#: ../epour/gui/TorrentSelector.py:61
+msgid "Seed Mode"
+msgstr ""
+
+#: ../epour/gui/TorrentSelector.py:64
+msgid "Share Mode"
+msgstr ""
+
+#: ../epour/gui/TorrentSelector.py:65
+msgid "Apply IP Filter"
+msgstr ""
+
+#: ../epour/gui/TorrentSelector.py:68
+msgid "Duplicate Is Error"
+msgstr ""
+
+#: ../epour/gui/TorrentSelector.py:71
+msgid "Super Seeding"
+msgstr ""
+
+#: ../epour/gui/TorrentSelector.py:72
+msgid "Sequential Download"
+msgstr ""
+
+#: ../epour/gui/TorrentSelector.py:73
+msgid "Use Resume Save Path"
+msgstr ""
+
+#: ../epour/gui/TorrentSelector.py:79
+msgid ""
+"If Seed Mode is set, Epour will assume that all files are\n"
+"present for this torrent and that they all match the hashes in the\n"
+"torrent file. Each time a peer requests to download a block, the\n"
+"piece is verified against the hash, unless it has been verified\n"
+"already. If a hash fails, the torrent will automatically leave the\n"
+"seed mode and recheck all the files. The use case for this mode is\n"
+"if a torrent is created and seeded, or if the user already know\n"
+"that the files are complete, this is a way to avoid the initial\n"
+"file checks, and significantly reduce the startup time.\n"
+"\n"
+"Setting Seed Mode on a torrent without metadata (a .torrent\n"
+"file) is a no-op and will be ignored."
+msgstr ""
+
+#: ../epour/gui/TorrentSelector.py:124
+#, python-format
+msgid ""
+"Determines if the torrent should be added in share mode or not.\n"
+"Share mode indicates that we are not interested in downloading the\n"
+"torrent, but merely want to improve our share ratio (i.e. increase\n"
+"it). A torrent started in share mode will do its best to never\n"
+"download more than it uploads to the swarm. If the swarm does not\n"
+"have enough demand for upload capacity, the torrent will not\n"
+"download anything. This mode is intended to be safe to add any\n"
+"number of torrents to, without manual screening, without the risk\n"
+"of downloading more than is uploaded.\n"
+"\n"
+"A torrent in share mode sets the priority to all pieces to 0,\n"
+"except for the pieces that are downloaded, when pieces are decided\n"
+"to be downloaded. This affects the progress bar, which might be set\n"
+"to \"100% finished\" most of the time. Do not change file or piece\n"
+"priorities for torrents in share mode, it will make it not work.\n"
+"\n"
+"The share mode has one setting, the share ratio target."
+msgstr ""
+
+#: ../epour/gui/TorrentSelector.py:145
+msgid ""
+"Determines if the IP filter should apply to this torrent or not. By\n"
+"default all torrents are subject to filtering by the IP filter\n"
+"(i.e. this flag is set by default). This is useful if certain\n"
+"torrents needs to be excempt for some reason, being an auto-update\n"
+"torrent for instance."
+msgstr ""
+
+#: ../epour/gui/TorrentSelector.py:196
+msgid ""
+"Sets the torrent into super seeding mode. If the torrent is not a\n"
+"seed, this flag has no effect."
+msgstr ""
+
+#: ../epour/gui/TorrentSelector.py:202
+msgid "Sets the sequential download state for the torrent."
+msgstr ""
+
+#: ../epour/gui/TorrentSelector.py:207
+msgid ""
+"If this flag is set, the save path from the resume data file,\n"
+"if present, is honored. This defaults to not being set, in\n"
+"which case the save_path specified in add_torrent_params is\n"
+"always used."
+msgstr ""
+
+#: ../epour/gui/TorrentSelector.py:217
+msgid "Add Torrent"
+msgstr ""
+
+#: ../epour/gui/TorrentSelector.py:243
+msgid "Enter torrent file path / magnet URI / info hash"
+msgstr ""
+
+#: ../epour/gui/TorrentSelector.py:252
+msgid "Select file"
+msgstr ""
+
+#: ../epour/gui/TorrentSelector.py:259
+msgid "Advanced Options"
+msgstr ""
+
+#: ../epour/gui/TorrentSelector.py:282
+msgid "Name"
+msgstr ""
+
+#: ../epour/gui/TorrentSelector.py:283
+msgid "Tracker ID"
+msgstr ""
+
+#. Downloaded data is saved in this path
+#: ../epour/gui/TorrentSelector.py:295
+msgid "Data Save Path"
+msgstr ""
+
+#: ../epour/gui/TorrentSelector.py:344
+msgid "Max Uploads"
+msgstr ""
+
+#: ../epour/gui/TorrentSelector.py:345
+msgid "Max Connections"
+msgstr ""
+
+#: ../epour/gui/TorrentSelector.py:356
+msgid "Upload Limit"
+msgstr ""
+
+#: ../epour/gui/TorrentSelector.py:357
+msgid "Download Limit"
+msgstr ""
+
+#: ../epour/gui/TorrentSelector.py:383
+msgid "Ok"
+msgstr ""
+
+#: ../epour/gui/TorrentSelector.py:387
+msgid "Cancel"
+msgstr ""

-- 


Reply via email to