
commit 40746a46c798c10b08f7962766ba957cd7c88510 Author: aagbsn <aagbsn@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@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@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@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@ADDRESS>\n" "Language-Team: LANGUAGE <LL@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@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@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@torproject.org">bridges@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@rt.torproject.org">help@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@bridges.torproject.org"> + bridges@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@rt.torproject.org"> + help@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)]}, )