Get l10n working. Anonymous users can choose a language through a form on the sidebar. Authenticated users can set a language in their user settings.

This commit is contained in:
Ricky Zhou (周家杰) 2008-03-03 00:22:15 -05:00
parent 16b80d3257
commit 708506e273
11 changed files with 2016 additions and 478 deletions

1
fas/.gitignore vendored
View file

@ -8,4 +8,5 @@ fas.log
*.pyc *.pyc
*.pyo *.pyo
*.swp *.swp
*.mo
fas.egg-info fas.egg-info

View file

@ -59,6 +59,8 @@ genshi.encoding="utf-8"
# i18n # i18n
session_filter.on = True session_filter.on = True
i18n.run_template_filter = True i18n.run_template_filter = True
i18n.domain = 'fas'
i18n.locale_dir = 'po'
# VISIT TRACKING # VISIT TRACKING
# Each visit to your application will be assigned a unique visit ID tracked via # Each visit to your application will be assigned a unique visit ID tracked via

View file

@ -5,6 +5,7 @@ from cherrypy import request, response
from turbogears import exception_handler from turbogears import exception_handler
import turbogears import turbogears
import cherrypy
import time import time
from fas.user import User from fas.user import User
@ -24,6 +25,17 @@ def add_custom_stdvars(vars):
turbogears.view.variable_providers.append(add_custom_stdvars) turbogears.view.variable_providers.append(add_custom_stdvars)
def get_locale(locale=None):
if locale:
return locale
if turbogears.identity.current.user_name:
person = People.by_username(turbogears.identity.current.user_name)
return person.locale
else:
return turbogears.i18n.utils._get_locale()
config.update({'i18n.get_locale': get_locale})
# from fas import json # from fas import json
# import logging # import logging
# log = logging.getLogger("fas.controllers") # log = logging.getLogger("fas.controllers")
@ -101,6 +113,14 @@ class Root(controllers.RootController):
@expose() @expose()
def logout(self): def logout(self):
identity.current.logout()
turbogears.flash(_('You have successfully logged out.')) turbogears.flash(_('You have successfully logged out.'))
identity.current.logout()
raise redirect(request.headers.get("Referer", "/")) raise redirect(request.headers.get("Referer", "/"))
@expose()
def language(self, locale):
locale_key = config.get("i18n.session_key", "locale")
cherrypy.session[locale_key] = locale
raise redirect(request.headers.get("Referer", "/"))

View file

@ -189,6 +189,21 @@ a
background: #082C59; background: #082C59;
} }
#language
{
padding: 1ex;
}
#language label
{
color: #FFFFFF;
}
#language input
{
width: 4ex;
}
#content #content
{ {
margin-left: 22ex; margin-left: 22ex;

View file

@ -64,6 +64,13 @@
<li><a href="${tg.url('/group/list/A*')}">${_('Apply For a new Group')}</a></li> <li><a href="${tg.url('/group/list/A*')}">${_('Apply For a new Group')}</a></li>
<li><a href="http://fedoraproject.org/wiki/FWN/LatestIssue">${_('News')}</a></li> <li><a href="http://fedoraproject.org/wiki/FWN/LatestIssue">${_('News')}</a></li>
</ul> </ul>
<div py:if="tg.identity.anonymous" id="language">
<form action="${tg.url('/language')}" method="get">
<label for="locale">${_('Locale:')}</label>
<input type="text" name="locale" id="locale" />
<input type="submit" value="${_('OK')}" />
</form>
</div>
</div> </div>
<div id="content"> <div id="content">
<div py:if="tg_flash" class="flash"> <div py:if="tg_flash" class="flash">

View file

@ -7,9 +7,9 @@
<title>${_('Fedora Accounts System')}</title> <title>${_('Fedora Accounts System')}</title>
</head> </head>
<body> <body>
<h2>${_{'Fedora Project OpenID Provider')}</h2> <h2>${_('Fedora Project OpenID Provider')}</h2>
<p> <p>
${Markup_('Description goes here, &lt;a href="http://username.fedorapeople.org/"&gt;username.fedorapeople.org&lt;/a&gt;'))} ${Markup_('Description goes here, &lt;a href="http://username.fedorapeople.org/"&gt;username.fedorapeople.org&lt;/a&gt;')}
</p> </p>
</body> </body>
</html> </html>

View file

@ -13,7 +13,7 @@
<input type="hidden" id="url" name="url" value="${url}" /> <input type="hidden" id="url" name="url" value="${url}" />
<input type="checkbox" id="trusted" name="trusted" value="allow" /> <input type="checkbox" id="trusted" name="trusted" value="allow" />
<label for="trusted">${Markup(_('Allow &lt;strong&gt;%s&lt;/strong&gt; to authenticate to your OpenID identity?') % url)}</label><br /> <label for="trusted">${Markup(_('Allow &lt;strong&gt;%s&lt;/strong&gt; to authenticate to your OpenID identity?') % url)}</label><br />
<input type="submit" value="${_('Submit'}" /> <input type="submit" value="${_('Submit')}" />
</div> </div>
</form> </form>
</body> </body>

View file

@ -54,6 +54,16 @@
</select> </select>
<script type="text/javascript">var hb7 = new HelpBalloon({dataURL: '/fas/help/get_help/user_timezone'});</script> <script type="text/javascript">var hb7 = new HelpBalloon({dataURL: '/fas/help/get_help/user_timezone'});</script>
</div> </div>
<div class="field">
<label for="locale">${_('Locale')}:</label>
<input type="text" id="locale" name="locale" value="${target.locale}" />
<!--
<select id="locale" name="locale">
option py:for="locale in available_locales" value="${locale}" py:attrs="{'selected': target.locale == locale and 'selected' or None}">${locale}</option>
</select>
-->
<!--<script type="text/javascript">var hb7 = new HelpBalloon({dataURL: '/fas/help/get_help/locale'});</script>-->
</div>
<div class="field"> <div class="field">
<label for="comments ">${_('Comments')}:</label> <label for="comments ">${_('Comments')}:</label>
<textarea id="comments" name="comments">${target.comments}</textarea> <textarea id="comments" name="comments">${target.comments}</textarea>

View file

@ -203,7 +203,7 @@ class User(controllers.Controller):
@validate(validators=UserSave()) @validate(validators=UserSave())
@error_handler(error) @error_handler(error)
@expose(template='fas.templates.user.edit') @expose(template='fas.templates.user.edit')
def save(self, targetname, human_name, telephone, postal_address, email, ircnick=None, gpg_keyid=None, comments='', timezone='UTC'): def save(self, targetname, human_name, telephone, postal_address, email, ircnick=None, gpg_keyid=None, comments='', locale='en', timezone='UTC'):
username = turbogears.identity.current.user_name username = turbogears.identity.current.user_name
target = targetname target = targetname
person = People.by_username(username) person = People.by_username(username)
@ -222,6 +222,7 @@ class User(controllers.Controller):
target.telephone = telephone target.telephone = telephone
target.postal_address = postal_address target.postal_address = postal_address
target.comments = comments target.comments = comments
target.locale = locale
target.timezone = timezone target.timezone = timezone
except TypeError: except TypeError:
turbogears.flash(_('Your account details could not be saved: %s' % e)) turbogears.flash(_('Your account details could not be saved: %s' % e))
@ -375,6 +376,7 @@ class User(controllers.Controller):
# TODO: Move this out to a single function (same as # TODO: Move this out to a single function (same as
# CLA one), think of how to make sure this doesn't get # CLA one), think of how to make sure this doesn't get
# full of random keys (keep a clean Fedora keyring) # full of random keys (keep a clean Fedora keyring)
# TODO: MIME stuff?
try: try:
subprocess.check_call([config.get('gpgexec'), '--keyserver', config.get('gpg_keyserver'), '--recv-keys', person.gpg_keyid]) subprocess.check_call([config.get('gpgexec'), '--keyserver', config.get('gpg_keyserver'), '--recv-keys', person.gpg_keyid])
except subprocess.CalledProcessError: except subprocess.CalledProcessError:

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff