[tor-commits] [bridgedb/master] Localize templates and configure babel

aagbsn at torproject.org aagbsn at torproject.org
Wed Apr 17 00:26:44 UTC 2013


commit 40746a46c798c10b08f7962766ba957cd7c88510
Author: aagbsn <aagbsn at extc.org>
Date:   Tue Mar 26 19:16:13 2013 +0000

    Localize templates and configure babel
    
    * Add gettext localization for template strings.
    * Add message_extractors to setup.py
    * Add babel command arguments to setup.cfg
    * Remove I18n.py
---
 i18n/templates/bridgedb.pot         |  111 +++++++++++++++++++++-------------
 lib/bridgedb/I18n.py                |   86 ---------------------------
 lib/bridgedb/templates/base.html    |   39 +++++++------
 lib/bridgedb/templates/bridges.html |    5 +-
 lib/bridgedb/templates/captcha.html |   13 ++---
 lib/bridgedb/templates/index.html   |   26 ++++----
 setup.cfg                           |   22 +++++++
 setup.py                            |    8 +-
 8 files changed, 135 insertions(+), 175 deletions(-)

diff --git a/i18n/templates/bridgedb.pot b/i18n/templates/bridgedb.pot
index 34d0510..ab95177 100644
--- a/i18n/templates/bridgedb.pot
+++ b/i18n/templates/bridgedb.pot
@@ -1,73 +1,98 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# Christian Fromme <kaner at strace.org>, 2010
+# Translations template for BridgeDB.
+# Copyright (C) 2013 ORGANIZATION
+# This file is distributed under the same license as the BridgeDB project.
+# FIRST AUTHOR <EMAIL at ADDRESS>, 2013.
 #
 #, fuzzy
 msgid ""
 msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-01-01 07:48-0800\n"
+"Project-Id-Version: BridgeDB 0.1\n"
+"Report-Msgid-Bugs-To: EMAIL at ADDRESS\n"
+"POT-Creation-Date: 2013-03-27 21:41+0000\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
 "Language-Team: LANGUAGE <LL at li.org>\n"
-"Language: \n"
 "MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 0.9.6\n"
 
-#: lib/bridgedb/I18n.py:21
-msgid "Here are your bridge relays: "
+#: lib/bridgedb/templates/base.html:33
+msgid "What are bridges?"
 msgstr ""
 
-#: lib/bridgedb/I18n.py:23
-msgid ""
-"Bridge relays (or \"bridges\" for short) are Tor relays that aren't listed\n"
-"in the main directory. Since there is no complete public list of them,\n"
-"even if your ISP is filtering connections to all the known Tor relays,\n"
-"they probably won't be able to block all the bridges."
+#: lib/bridgedb/templates/base.html:34
+#, python-format
+msgid "%s Bridge relays %s are Tor relays that help you circumvent censorship."
+msgstr ""
+
+#: lib/bridgedb/templates/base.html:39
+msgid "I need an alternative way of getting bridges!"
 msgstr ""
 
-#: lib/bridgedb/I18n.py:28
+#: lib/bridgedb/templates/base.html:40
+#, python-format
 msgid ""
-"To use the above lines, go to Vidalia's Network settings page, and click\n"
-"\"My ISP blocks connections to the Tor network\". Then add each bridge\n"
-"address one at a time."
+"Another way to find public bridge addresses is to send an email (from a %s or"
+" a %s address) to %s with the line 'get bridges' by itself in the body of the"
+" mail."
+msgstr ""
+
+#: lib/bridgedb/templates/base.html:48
+msgid "My bridges don't work! I need help!"
 msgstr ""
 
-#: lib/bridgedb/I18n.py:32
+#: lib/bridgedb/templates/base.html:49
+#, python-format
 msgid ""
-"Configuring more than one bridge address will make your Tor connection\n"
-"more stable, in case some of the bridges become unreachable."
+"If your Tor doesn't work, you should email %s. Try including as much info "
+"about your case as you can, including the list of bridges you used, the "
+"bundle filename/version you used, the messages that Tor gave out, etc."
 msgstr ""
 
-#: lib/bridgedb/I18n.py:35
+#: lib/bridgedb/templates/bridges.html:10
 msgid ""
-"Another way to find public bridge addresses is to send mail to\n"
-"bridges at torproject.org with the line \"get bridges\" by itself in the body\n"
-"of the mail. However, so we can make it harder for an attacker to learn\n"
-"lots of bridge addresses, you must send this request from an email address "
-"at\n"
-"one of the following domains:"
+"To use the above lines, go to Vidalia's Network settings page, and click \"My"
+" ISP blocks connections to the Tor network\". Then add each bridge address "
+"one at a time."
 msgstr ""
 
-#: lib/bridgedb/I18n.py:41
-msgid "[This is an automated message; please do not reply.]"
+#: lib/bridgedb/templates/bridges.html:13
+msgid "No bridges currently available"
 msgstr ""
 
-#: lib/bridgedb/I18n.py:43
-msgid ""
-"Another way to find public bridge addresses is to visit\n"
-"https://bridges.torproject.org/. The answers you get from that page\n"
-"will change every few days, so check back periodically if you need more\n"
-"bridge addresses."
+#: lib/bridgedb/templates/captcha.html:6
+msgid "Upgrade your browser to Firefox"
+msgstr ""
+
+#: lib/bridgedb/templates/captcha.html:8
+msgid "Type the two words"
 msgstr ""
 
-#: lib/bridgedb/I18n.py:48
-msgid "(no bridges currently available)"
+#: lib/bridgedb/templates/index.html:6
+msgid "Step 1"
 msgstr ""
 
-#: lib/bridgedb/I18n.py:50
-msgid "(e-mail requests not currently supported)"
+#: lib/bridgedb/templates/index.html:8
+#, python-format
+msgid "Get %s Tor Browser Bundle %s"
 msgstr ""
+
+#: lib/bridgedb/templates/index.html:13
+msgid "Step 2"
+msgstr ""
+
+#: lib/bridgedb/templates/index.html:15
+#, python-format
+msgid "Get %s bridges %s"
+msgstr ""
+
+#: lib/bridgedb/templates/index.html:19
+msgid "Step 3"
+msgstr ""
+
+#: lib/bridgedb/templates/index.html:21
+#, python-format
+msgid "Now %s add the bridges to Tor %s"
+msgstr ""
+
diff --git a/lib/bridgedb/I18n.py b/lib/bridgedb/I18n.py
deleted file mode 100644
index 112b8ae..0000000
--- a/lib/bridgedb/I18n.py
+++ /dev/null
@@ -1,86 +0,0 @@
-# BridgeDB i18n strings & helper routines. The string should go into pootle
-
-import os
-import gettext
-
-def getLang(lang, localedir=os.path.expanduser("~") + "/share/locale"):
-    """Return the Translation instance for a given language. If no Translation
-       instance is found, return the one for 'en'
-    """
-    return gettext.translation("bridgedb", localedir=localedir, 
-                               languages=[lang], fallback="en")
-
-def _(text):
-    """This is necessary because strings are translated when they're imported.
-       Otherwise this would make it impossible to switch languages more than 
-       once
-    """
-    return text
-
-# All text that needs translation goes here
-BRIDGEDB_TEXT = [
- # BRIDGEDB_TEXT[0]
- _("""Here are your bridge relays: """),
- # BRIDGEDB_TEXT[1]
- _("""Bridge relays (or "bridges" for short) are Tor relays that aren't listed
-in the main directory. Since there is no complete public list of them,
-even if your ISP is filtering connections to all the known Tor relays,
-they probably won't be able to block all the bridges."""),
- # BRIDGEDB_TEXT[2]
- _("""To use the above lines, go to Vidalia's Network settings page, and click
-"My ISP blocks connections to the Tor network". Then add each bridge
-address one at a time."""),
- # BRIDGEDB_TEXT[3]
- _("""Configuring more than one bridge address will make your Tor connection
-more stable, in case some of the bridges become unreachable."""),
- # BRIDGEDB_TEXT[4]
- _("""Another way to find public bridge addresses is to send mail to
-bridges at torproject.org with the line "get bridges" by itself in the body
-of the mail. However, so we can make it harder for an attacker to learn
-lots of bridge addresses, you must send this request from an email address at
-one of the following domains:"""),
- # BRIDGEDB_TEXT[5]
- _("""[This is an automated message; please do not reply.]"""),
- # BRIDGEDB_TEXT[6]
- _("""Another way to find public bridge addresses is to visit
-https://bridges.torproject.org/. The answers you get from that page
-will change every few days, so check back periodically if you need more
-bridge addresses."""),
- # BRIDGEDB_TEXT[7]
- _("""(no bridges currently available)"""),
- # BRIDGEDB_TEXT[8]
- _("""(e-mail requests not currently supported)"""),
- # BRIDGEDB_TEXT[9]
- _("""To receive your bridge relays, please prove you are human"""),
- # BRIDGEDB_TEXT[10]
- _("""You have exceeded the rate limit. Please slow down, the minimum time
-between emails is: """),
- # BRIDGEDB_TEXT[11]
- _("""hours"""),
- # BRIDGEDB_TEXT[12]
- _("""All further emails will be ignored."""),
- # BRIDGEDB_TEXT[13]
- _("""Type the two words"""),
- # BRIDGEDB_TEXT[14]
- _("""I am human"""),
- # BRIDGEDB_TEXT[15]
- _("""Upgrade your browser to Firefox"""),
- # BRIDGEDB_TEXT[16]
- _("""(Might be blocked)"""),
- # BRIDGEDB_TEXT[17]
- _("""The following commands are also supported:"""),
- # BRIDGEDB_TEXT[18]
- _("""ipv6 : request ipv6 bridges."""),
- # BRIDGEDB_TEXT[19]
- _("""transport NAME : request transport NAME. Example: 'transport obfs2'"""),
- # BRIDGEDB_TEXT[20]
- _("""Looking for IPv6 bridges?"""),
- # BRIDGEDB_TEXT[21]
- _("""Looking for obfsproxy bridges?"""),
- # BRIDGEDB_TEXT[22]
- _("""Specify transport by name:"""),
- # BRIDGEDB_TEXT[23]
- _("""Submit"""),
- # BRIDGEDB_TEXT[24]
- _("""days at this address""")
-]
diff --git a/lib/bridgedb/templates/base.html b/lib/bridgedb/templates/base.html
index affff60..adbc81c 100644
--- a/lib/bridgedb/templates/base.html
+++ b/lib/bridgedb/templates/base.html
@@ -30,25 +30,28 @@ ${self.body()}
 <div class="faq">
   <div class="row-fluid marketing">
 
-    <h4>What are bridges?</h4>
-    <p><a href="https://www.torproject.org/docs/bridges">Bridge
-        relays</a> are Tor relays that help you circumvent censorship.</p>
-
-    <h4>I need an alternative way of getting bridges!</h4>
-    <p>Another way to find public bridge addresses is to send an email (from
-      a <a href="https://mail.google.com/">gmail</a> or a <a
-        href="https://mail.yahoo.com/"> yahoo</a> address) to <a
-        href="mailto:bridges at torproject.org">bridges at torproject.org</a>
-      with the line "get bridges" by itself in the body of the
-      mail.</p>
-
-    <h4>My bridges don't work! I need help!</h4>
-    <p>If your Tor doesn't work, you should email
-      <a href="mailto:help at rt.torproject.org">help at rt.torproject.org</a>. Try
-      including as much info about your case as you can, including the
-      list of bridges you used, the bundle filename/version you used, the
-      messages that Tor gave out, etc.</p>
+    <h4>${_("What are bridges?")}</h4>
+    <p>${_("%s Bridge relays %s are Tor relays that help you circumvent "
+           "censorship.") % \
+           ("""<a href="https://www.torproject.org/docs/bridges">""", "</a>")}
+    </p>
 
+    <h4>${_("I need an alternative way of getting bridges!")}</h4>
+    <p>${_("Another way to find public bridge addresses is to send an email "
+           "(from a %s or a %s address) to %s with the line 'get bridges' by "
+           "itself in the body of the mail.""") % \
+            ("""<a href="https://mail.google.com/">gmail</a>""",
+             """<a href="https://mail.yahoo.com/">yahoo</a>""",
+             """<a href="mailto:bridges at bridges.torproject.org">
+             bridges at bridges.torproject.org</a>""")}</p>
+
+    <h4>${_("My bridges don't work! I need help!")}</h4>
+    <p>${_("If your Tor doesn't work, you should email %s. Try including as "
+           "much info about your case as you can, including the list of "
+           "bridges you used, the bundle filename/version you used, the "
+           "messages that Tor gave out, etc.") \
+                % ("""<a href="mailto:help at rt.torproject.org">
+                   help at rt.torproject.org</a>""")}</p>
   </div>
 </div>
 </div>
diff --git a/lib/bridgedb/templates/bridges.html b/lib/bridgedb/templates/bridges.html
index bf6f7d6..71e3050 100644
--- a/lib/bridgedb/templates/bridges.html
+++ b/lib/bridgedb/templates/bridges.html
@@ -7,10 +7,9 @@
 ${answer}
 </pre>
 <br />
-<p >To use the above lines, go to Vidalia's Network settings page, and click "My ISP blocks connections to the Tor network". Then add each bridge address one at a time.
+<p >${_("""To use the above lines, go to Vidalia's Network settings page, and click "My ISP blocks connections to the Tor network". Then add each bridge address one at a time.""")}
 </p>
-</pre>
 % else:
-<h3> No bridges currently available </h3>
+<h3> ${_("No bridges currently available")} </h3>
 % endif
 <hr>
diff --git a/lib/bridgedb/templates/captcha.html b/lib/bridgedb/templates/captcha.html
index b037eed..1504b54 100644
--- a/lib/bridgedb/templates/captcha.html
+++ b/lib/bridgedb/templates/captcha.html
@@ -1,17 +1,14 @@
 <%inherit file="base.html"/>
-
 <div class="captcha">
 <form action="" method="POST">
   <input type="hidden" name="recaptcha_challenge_field"
     id="recaptcha_challenge_field" value="${challenge_field}">
-  <img width="300" height="57" alt="Upgrade your browser to Firefox" src="${imgstr}">
+  <img width="300" height="57" alt="${_('Upgrade your browser to Firefox')}" src="${imgstr}">
   <div class="recaptcha_input_area">
-    <label for="recaptcha_response_field">Type the two words</label>
-  </div>
-
-    <input name="recaptcha_response_field" id="recaptcha_response_field"
+    <label for="recaptcha_response_field">${_("Type the two words")}</label></div>
+  <input name="recaptcha_response_field" id="recaptcha_response_field"
     type="text" autocomplete="off">
-    <input class="btn btn-success" type="submit" name="submit" value="I am human">
-</div>
+  <input class="btn btn-success" type="submit" name="submit" value="I am human">
 </form>
+</div>
 <hr>
diff --git a/lib/bridgedb/templates/index.html b/lib/bridgedb/templates/index.html
index 1114418..ae1f0e5 100644
--- a/lib/bridgedb/templates/index.html
+++ b/lib/bridgedb/templates/index.html
@@ -2,22 +2,22 @@
 
 <div class="main-steps">
 <div class="step row">
-<div class="span1">
-  <p class="lead"> <span class="step-title"> Step 1 </span></div><div
-    class="span5 step-text">Get <a
-    href="#">Tor Browser Bundle</a></p></div>
+  <div class="span1">
+    <p class="lead"><span class="step-title"> ${_("Step 1")} </span></p></div>
+  <div class="span5 step-text">
+    ${_("Get %s Tor Browser Bundle %s") % ("""<a href="#">""", "</a>")}</div>
 </div>
 <div class="step row">
   <div class="span1">
-    <p class="lead"><span class="step-title">Step 2 </span></div>
-  <div class="span5 step-text">Get <a
-    href="#">bridges</a></p></div>
-</div>
-<div class="step row"><div class="span1">
-    <p class="lead"><span class="step-title"> Step 3
-  </span></div><div class="span5 step-text">Now <a href="#">add
-      the bridges to
-      Vidalia</a></p>
+    <p class="lead"><span class="step-title"> ${_("Step 2")} </span></p></div>
+  <div class="span5 step-text">
+    ${_("Get %s bridges %s") % ("""<a href="/bridges">""", "</a>")}</div>
 </div>
+<div class="step row">
+  <div class="span1">
+    <p class="lead"><span class="step-title"> ${_("Step 3")} </span></p></div>
+  <div class="span5 step-text">
+    ${_("Now %s add the bridges to Vidalia %s") % ("""<a href="#">""", "</a>")}
+  </div>
 </div>
 <hr>
diff --git a/setup.cfg b/setup.cfg
index 9fa8c68..2cbb8b2 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -1,3 +1,25 @@
 [install]
 prefix=$HOME
 install-data=$HOME
+
+[compile_catalog]
+domain = bridgedb
+directory = i18n
+statistics = true
+
+[extract_messages]
+add_comments = TRANSLATORS:
+output_file = i18n/templates/bridgedb.pot
+width = 80
+
+[init_catalog]
+domain = torcheck
+input_file = i18n/templates/bridgedb.pot
+output_dir = i18n
+
+[update_catalog]
+domain = torcheck
+input_file = i18n/templates/torcheck.pot
+output_dir = i18n
+previous = true
+
diff --git a/setup.py b/setup.py
index 6e994d1..a3289c9 100644
--- a/setup.py
+++ b/setup.py
@@ -10,7 +10,7 @@ from babel.messages import frontend as babel
 import os
 import sys
 
-from distutils.core import setup, Command
+from setuptools import setup, Command, find_packages
 
 class installData(_install_data):
     def run(self):
@@ -56,7 +56,7 @@ setup(name='BridgeDB',
       author_email='nickm at torproject dot org',
       url='https://www.torproject.org',
       package_dir= {'' : 'lib'},
-      packages=['bridgedb'],
+      packages=find_packages('lib'),
       py_modules=['TorBridgeDB'],
       cmdclass={'test' : runTests,
                 'compile_catalog': babel.compile_catalog,
@@ -68,8 +68,8 @@ setup(name='BridgeDB',
       package_data={'bridgedb': ['i18n/*/LC_MESSAGES/*.mo',
                                  'templates/*.html',
                                  'templates/assets/*']},
-      message_extractors = {'bridgedb': [
+      message_extractors = {'lib/bridgedb': [
               ('**.py', 'python', None),
               ('templates/**.html', 'mako', None),
-              ('public/**', 'ignore', None)]},
+              ('public/**', 'ignore', None)]},  
 )





More information about the tor-commits mailing list