From e3da4e6ad57db72b48a015903faebe28cb10cb91 Mon Sep 17 00:00:00 2001 From: jhermann Date: Wed, 21 Nov 2001 22:57:29 +0000 Subject: [PATCH] Added dummy hooks for I18N and some preliminary (test) markup of translatable messages git-svn-id: http://svn.roundup-tracker.org/svnroot/roundup/trunk@410 57a73879-2fb5-44c3-a270-3262357dd7e2 --- CHANGES.txt | 2 ++ roundup/cgi_client.py | 20 ++++++++++------- roundup/i18n.py | 50 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 64 insertions(+), 8 deletions(-) create mode 100644 roundup/i18n.py diff --git a/CHANGES.txt b/CHANGES.txt index 6bb1a52..8686a36 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -16,6 +16,8 @@ Feature: . incorporated patch from Roch'e Compaan implementing attachments in nosy e-mail . added a target version field to the extended issue schema + . added dummy hooks for I18N and some preliminary (test) markup of + translatable messages Fixed: . Fixed a bug in HTMLTemplate changes. diff --git a/roundup/cgi_client.py b/roundup/cgi_client.py index a17e05e..4875f95 100644 --- a/roundup/cgi_client.py +++ b/roundup/cgi_client.py @@ -15,12 +15,13 @@ # BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE, # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. # -# $Id: cgi_client.py,v 1.59 2001-11-21 03:21:13 richard Exp $ +# $Id: cgi_client.py,v 1.60 2001-11-21 22:57:28 jhermann Exp $ import os, cgi, pprint, StringIO, urlparse, re, traceback, mimetypes import binascii, Cookie, time import roundupdb, htmltemplate, date, hyperdb, password +from roundup.i18n import _ class Unauthorised(ValueError): pass @@ -106,7 +107,7 @@ class Client: My Details | Logout '''%(userid, userid) else: - user_info = 'Login' + user_info = _('Login') if self.user is not None: add_links = ''' | Add @@ -274,7 +275,7 @@ class Client: ''' cn = self.classname - self.pagehead('Index of %s'%cn) + self.pagehead(_('Index of %(classname)s')%{'classname': cn}) if sort is None: sort = self.index_arg(':sort') if group is None: group = self.index_arg(':group') if filter is None: filter = self.index_arg(':filter') @@ -372,7 +373,7 @@ class Client: # # now the display # - self.pagehead('User: %s'%node_user, message) + self.pagehead(_('User: %(user)s')%{'user': node_user}, message) # use the template to display the item item = htmltemplate.ItemTemplate(self, self.TEMPLATES, 'user') @@ -581,7 +582,7 @@ class Client: ''' display a list of all the classes in the database ''' if self.user == 'admin': - self.pagehead('Table of classes', message) + self.pagehead(_('Table of classes'), message) classnames = self.db.classes.keys() classnames.sort() self.write('\n') @@ -599,7 +600,7 @@ class Client: raise Unauthorised def login(self, message=None, newuser_form=None): - self.pagehead('Login to roundup', message) + self.pagehead(_('Login to roundup'), message) self.write('''
@@ -661,13 +662,13 @@ class Client: except KeyError: name = self.user self.make_user_anonymous() - return self.login(message='No such user "%s"'%name) + return self.login(message=_('No such user "%(name)s"')%locals()) # and that the password is correct pw = self.db.user.get(uid, 'password') if password != self.db.user.get(uid, 'password'): self.make_user_anonymous() - return self.login(message='Incorrect password') + return self.login(message=_('Incorrect password')) self.set_cookie(self.user, password) return self.index() @@ -977,6 +978,9 @@ def parsePropsFromForm(db, cl, form, nodeid=0): # # $Log: not supported by cvs2svn $ +# Revision 1.59 2001/11/21 03:21:13 richard +# oops +# # Revision 1.58 2001/11/21 03:11:28 richard # Better handling of new properties. # diff --git a/roundup/i18n.py b/roundup/i18n.py new file mode 100644 index 0000000..81edf78 --- /dev/null +++ b/roundup/i18n.py @@ -0,0 +1,50 @@ +# +# Copyright (c) 2001 Bizar Software Pty Ltd (http://www.bizarsoftware.com.au/) +# This module is free software, and you may redistribute it and/or modify +# under the same terms as Python, so long as this copyright message and +# disclaimer are retained in their original form. +# +# IN NO EVENT SHALL BIZAR SOFTWARE PTY LTD BE LIABLE TO ANY PARTY FOR +# DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING +# OUT OF THE USE OF THIS CODE, EVEN IF THE AUTHOR HAS BEEN ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# +# BIZAR SOFTWARE PTY LTD SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +# BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE. THE CODE PROVIDED HEREUNDER IS ON AN "AS IS" +# BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE, +# SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +# +# $Id: i18n.py,v 1.1 2001-11-21 22:57:29 jhermann Exp $ + +""" +RoundUp Internationalization (I18N) + +To use this module, the following code should be used: + + from roundup.i18n import _ + ... + print _("Some text that can be translated") + +Note that to enable re-ordering of inserted texts in formatting strings +(which can easily happen if a sentence has to be re-ordered due to +grammatical changes), translatable formats should use named format specs: + + ... _('Index of %(classname)s') % {'classname': cn} ... + +Also, this eases the job of translators since they have some context what +the dynamic portion of a message really means. + +""" + +# first, we try to import gettext; this probably never fails, but we make +# sure we survive this anyway +try: + import gettext +except ImportError: + # fall-back to dummy on errors (returning the english text) + _ = lambda text: text +else: + # and for now, we JUST implement the dummy in any case + _ = lambda text: text + -- 2.30.2
Existing User Login