TracL10N: trac-0.9.0-20051108-gettext_support.patch
| File trac-0.9.0-20051108-gettext_support.patch, 83.0 KB (added by sto@…, 7 years ago) |
|---|
-
trac/core.py
16 16 # Author: Jonas Borgström <jonas@edgewall.com> 17 17 # Christopher Lenz <cmlenz@gmx.de> 18 18 19 import trac.l10n 20 19 21 from trac.util import TracError 20 22 21 23 __all__ = ['Component', 'ExtensionPoint', 'implements', 'Interface', … … 162 164 cls = self.__class__.__name__ 163 165 if hasattr(self, '__module__'): 164 166 cls = '.'.join((self.__module__, cls)) 165 raise AttributeError, "'%s' object has no attribute '%s'"% (cls, name)167 raise AttributeError, _("'%s' object has no attribute '%s'") % (cls, name) 166 168 167 169 168 170 class ComponentManager(object): … … 186 188 if not self.is_component_enabled(cls): 187 189 return None 188 190 if cls not in ComponentMeta._components: 189 raise TracError, 'Component "%s" not registered'% cls.__name__191 raise TracError, _('Component "%s" not registered') % cls.__name__ 190 192 try: 191 193 component = cls(self) 192 194 except TypeError, e: 193 raise TracError, 'Unable to instantiate component "%s" (%s)'\195 raise TracError, _('Unable to instantiate component "%s" (%s)') \ 194 196 % (cls.__name__, e) 195 197 return component 196 198 -
trac/env.py
18 18 19 19 import os 20 20 21 import trac.l10n 22 21 23 from trac import db, db_default, util 22 24 from trac.config import Configuration 23 25 from trac.core import Component, ComponentManager, implements, Interface, \ … … 155 157 from trac.versioncontrol.svn_fs import SubversionRepository 156 158 repos_dir = self.config.get('trac', 'repository_dir') 157 159 if not repos_dir: 158 raise EnvironmentError, 'Path to repository not configured'160 raise EnvironmentError, _('Path to repository not configured') 159 161 authz = None 160 162 if authname: 161 163 authz = SubversionAuthorizer(self, authname) … … 268 270 269 271 db_str = self.config.get('trac', 'database') 270 272 if not db_str.startswith('sqlite:'): 271 raise EnvironmentError, 'Can only backup sqlite databases'273 raise EnvironmentError, _('Can only backup sqlite databases') 272 274 db_name = os.path.join(self.path, db_str[7:]) 273 275 if not dest: 274 276 dest = '%s.%i.bak' % (db_name, self.get_version()) … … 335 337 if dbver == db_default.db_version: 336 338 return False 337 339 elif dbver > db_default.db_version: 338 raise TracError, 'Database newer than Trac version'340 raise TracError, _('Database newer than Trac version') 339 341 return True 340 342 341 343 def upgrade_environment(self, db): … … 347 349 upgrades = __import__('upgrades', globals(), locals(), [name]) 348 350 script = getattr(upgrades, name) 349 351 except AttributeError: 350 err = 'No upgrade module for version %i (%s.py)'% (i, name)352 err = _('No upgrade module for version %i (%s.py)') % (i, name) 351 353 raise TracError, err 352 354 script.do_upgrade(self.env, i, cursor) 353 355 cursor.execute("UPDATE system SET value=%s WHERE " … … 367 369 if not env_path: 368 370 env_path = os.getenv('TRAC_ENV') 369 371 if not env_path: 370 raise TracError, 'Missing environment variable "TRAC_ENV". Trac ' \372 raise TracError, _('Missing environment variable "TRAC_ENV". Trac ' \ 371 373 'requires this variable to point to a valid Trac ' \ 372 'environment.' 374 'environment.') 373 375 374 376 env = Environment(env_path) 375 377 if env.needs_upgrade(): 376 raise TracError, 'The Trac Environment needs to be upgraded. Run ' \377 'trac-admin %s upgrade"' % env_path378 raise TracError, _('The Trac Environment needs to be upgraded. Run ' \ 379 'trac-admin %s upgrade"') % env_path 378 380 return env -
trac/attachment.py
23 23 import time 24 24 import urllib 25 25 26 import trac.l10n 27 26 28 from trac import perm, util 27 29 from trac.core import * 28 30 from trac.env import IEnvironmentSetupParticipant … … 60 62 cursor.close() 61 63 if not row: 62 64 self.filename = filename 63 raise TracError( 'Attachment %s does not exist.'% (self.title),64 'Invalid Attachment')65 raise TracError(_('Attachment %s does not exist.') % (self.title), 66 _('Invalid Attachment')) 65 67 self.filename = row[0] 66 68 self.description = row[1] 67 69 self.size = row[2] and int(row[2]) or 0 … … 110 112 self.path, exc_info=True) 111 113 if handle_ta: 112 114 db.rollback() 113 raise TracError, 'Could not delete attachment'115 raise TracError, _('Could not delete attachment') 114 116 115 117 self.env.log.info('Attachment removed: %s' % self.title) 116 118 if handle_ta: … … 126 128 # Maximum attachment size (in bytes) 127 129 max_size = int(self.env.config.get('attachment', 'max_size')) 128 130 if max_size >= 0 and size > max_size: 129 raise TracError( 'Maximum attachment size: %d bytes'% max_size,130 'Upload failed')131 raise TracError(_('Maximum attachment size: %d bytes') % max_size, 132 _('Upload failed')) 131 133 self.size = size 132 134 self.time = t or time.time() 133 135 … … 186 188 try: 187 189 fd = open(self.path, 'rb') 188 190 except IOError: 189 raise TracError( 'Attachment %s not found'% self.filename)191 raise TracError(_('Attachment %s not found') % self.filename) 190 192 return fd 191 193 192 194 … … 247 249 parent_type = req.args.get('type') 248 250 path = req.args.get('path') 249 251 if not parent_type or not path: 250 raise TracError( 'Bad request')252 raise TracError(_('Bad request')) 251 253 if not parent_type in ['ticket', 'wiki']: 252 raise TracError( 'Unknown attachment type')254 raise TracError(_('Unknown attachment type')) 253 255 254 256 action = req.args.get('action', 'view') 255 257 if action == 'new': … … 294 296 295 297 upload = req.args['attachment'] 296 298 if not upload.filename: 297 raise TracError, 'No file uploaded'299 raise TracError, _('No file uploaded') 298 300 if hasattr(upload.file, 'fileno'): 299 301 size = os.fstat(upload.file.fileno())[6] 300 302 else: 301 303 size = upload.file.len 302 304 if size == 0: 303 raise TracError, 'No file uploaded'305 raise TracError, _('No file uploaded') 304 306 305 307 filename = upload.filename.replace('\\', '/').replace(':', '/') 306 308 filename = os.path.basename(filename) 307 assert filename, 'No file uploaded'309 assert filename, _('No file uploaded') 308 310 309 311 # We try to normalize the filename to utf-8 NFC if we can. 310 312 # Files uploaded from OS X might be in NFD. … … 425 427 426 428 if not is_binary(data): 427 429 add_link(req, 'alternate', attachment.href(format='txt'), 428 'Plain Text', mimetype)430 _('Plain Text'), mimetype) 429 431 430 432 hdf = mimeview.preview_to_hdf(req, mimetype, None, data, 431 433 attachment.filename, None, … … 457 459 params = link[idx:] 458 460 try: 459 461 attachment = Attachment(self.env, parent_type, parent_id, filename) 460 return '<a class="attachment" title="Attachment %s" href="%s">%s</a>'\462 return _('<a class="attachment" title="Attachment %s" href="%s">%s</a>') \ 461 463 % (util.escape(attachment.title), 462 464 util.escape(attachment.href() + params), 463 465 util.escape(label)) -
trac/db_default.py
14 14 # 15 15 # Author: Daniel Lundin <daniel@edgewall.com> 16 16 17 import trac.l10n 18 17 19 from trac.config import default_dir 18 20 from trac.db import Table, Column, Index 19 21 … … 158 160 ## 159 161 160 162 reports = ( 161 ( 'Active Tickets',162 """163 (_('Active Tickets'), 164 _(""" 163 165 * List all active tickets by priority. 164 166 * Color each row based on priority. 165 167 * If a ticket has been accepted, a '*' is appended after the owner's name 166 """ ,168 """), 167 169 """ 168 170 SELECT p.value AS __color__, 169 171 id AS ticket, summary, component, version, milestone, t.type AS type, … … 177 179 ORDER BY p.value, milestone, t.type, time 178 180 """), 179 181 #---------------------------------------------------------------------------- 180 ( 'Active Tickets by Version',181 """182 (_('Active Tickets by Version'), 183 _(""" 182 184 This report shows how to color results by priority, 183 185 while grouping results by version. 184 186 185 187 Last modification time, description and reporter are included as hidden fields 186 188 for useful RSS export. 187 """ ,189 """), 188 190 """ 189 191 SELECT p.value AS __color__, 190 192 version AS __group__, … … 199 201 ORDER BY (version IS NULL),version, p.value, t.type, time 200 202 """), 201 203 #---------------------------------------------------------------------------- 202 ( 'All Tickets by Milestone',203 """204 (_('All Tickets by Milestone'), 205 _(""" 204 206 This report shows how to color results by priority, 205 207 while grouping results by milestone. 206 208 207 209 Last modification time, description and reporter are included as hidden fields 208 210 for useful RSS export. 209 """ ,211 """), 210 212 """ 211 213 SELECT p.value AS __color__, 212 214 milestone||' Release' AS __group__, … … 221 223 ORDER BY (milestone IS NULL),milestone, p.value, t.type, time 222 224 """), 223 225 #---------------------------------------------------------------------------- 224 ( 'Assigned, Active Tickets by Owner',225 """226 (_('Assigned, Active Tickets by Owner'), 227 _(""" 226 228 List assigned tickets, group by ticket owner, sorted by priority. 227 """ ,229 """), 228 230 """ 229 231 230 232 SELECT p.value AS __color__, … … 238 240 ORDER BY owner, p.value, t.type, time 239 241 """), 240 242 #---------------------------------------------------------------------------- 241 ( 'Assigned, Active Tickets by Owner (Full Description)',242 """243 (_('Assigned, Active Tickets by Owner (Full Description)'), 244 _(""" 243 245 List tickets assigned, group by ticket owner. 244 246 This report demonstrates the use of full-row display. 245 """ ,247 """), 246 248 """ 247 249 SELECT p.value AS __color__, 248 250 owner AS __group__, … … 255 257 ORDER BY owner, p.value, t.type, time 256 258 """), 257 259 #---------------------------------------------------------------------------- 258 ( 'All Tickets By Milestone (Including closed)',259 """260 (_('All Tickets By Milestone (Including closed)'), 261 _(""" 260 262 A more complex example to show how to make advanced reports. 261 """ ,263 """), 262 264 """ 263 265 SELECT p.value AS __color__, 264 266 t.milestone AS __group__, … … 277 279 (CASE status WHEN 'closed' THEN modified ELSE (-1)*p.value END) DESC 278 280 """), 279 281 #---------------------------------------------------------------------------- 280 ( 'My Tickets',281 """282 (_('My Tickets'), 283 _(""" 282 284 This report demonstrates the use of the automatically set 283 285 $USER dynamic variable, replaced with the username of the 284 286 logged in user when executed. 285 """ ,287 """), 286 288 """ 287 289 SELECT p.value AS __color__, 288 290 (CASE status WHEN 'assigned' THEN 'Assigned' ELSE 'Owned' END) AS __group__, … … 296 298 ORDER BY (status = 'assigned') DESC, p.value, milestone, t.type, time 297 299 """), 298 300 #---------------------------------------------------------------------------- 299 ( 'Active Tickets, Mine first',300 """301 (_('Active Tickets, Mine first'), 302 _(""" 301 303 * List all active tickets by priority. 302 304 * Show all tickets owned by the logged in user in a group first. 303 """ ,305 """), 304 306 """ 305 307 SELECT p.value AS __color__, 306 308 (CASE owner -
trac/mimeview/rst.py
81 81 from docutils.parsers import rst 82 82 from docutils import __version__ 83 83 except ImportError: 84 raise TracError, 'Docutils not found'84 raise TracError, _('Docutils not found') 85 85 if StrictVersion(__version__) < StrictVersion('0.3.3'): 86 raise TracError, 'Docutils version >= %s required, %s found'\86 raise TracError, _('Docutils version >= %s required, %s found') \ 87 87 % ('0.3.3', __version__) 88 88 89 89 def trac_get_reference(rawtext, link, text): -
trac/mimeview/api.py
24 24 except ImportError: 25 25 from StringIO import StringIO 26 26 27 import trac.l10n 28 27 29 from trac.core import * 28 30 from trac.util import enum, escape, to_utf8 29 31 … … 339 341 # ITextAnnotator methods 340 342 341 343 def get_annotation_type(self): 342 return 'lineno', 'Line', 'Line numbers'344 return 'lineno', _('Line'), _('Line numbers') 343 345 344 346 def annotate_line(self, number, content): 345 347 return '<th id="L%s"><a href="#L%s">%s</a></th>' % (number, number, -
trac/mimeview/silvercity.py
86 86 except IndexError: 87 87 pass 88 88 except (KeyError, AttributeError): 89 err = "No SilverCity lexer found for mime-type '%s'."% mimetype89 err = _("No SilverCity lexer found for mime-type '%s'.") % mimetype 90 90 raise Exception, err 91 91 92 92 # SilverCity generates extra empty line against some types of -
trac/mimeview/patch.py
15 15 # Author: Christopher Lenz <cmlenz@gmx.de> 16 16 # Ludvig Strigeus 17 17 18 import trac.l10n 19 18 20 from trac.core import * 19 21 from trac.mimeview.api import IHTMLPreviewRenderer 20 22 from trac.util import escape … … 31 33 32 34 implements(IHTMLPreviewRenderer) 33 35 34 diff_cs = """36 diff_cs = _(""" 35 37 <?cs include:'macros.cs' ?> 36 38 <div class="diff"><ul class="entries"><?cs 37 39 each:file = diff.files ?><li class="entry"> … … 54 56 </table> 55 57 </li><?cs /each ?> 56 58 </ul></div> 57 """ # diff_cs59 """) # diff_cs 58 60 59 61 # IHTMLPreviewRenderer methods 60 62 … … 69 71 tabwidth = int(self.config.get('diff', 'tab_width')) 70 72 d = self._diff_to_hdf(content.splitlines(), tabwidth) 71 73 if not d: 72 raise TracError, 'Invalid unified diff content'74 raise TracError, _('Invalid unified diff content') 73 75 hdf = HDFWrapper(loadpaths=[self.env.get_templates_dir(), 74 76 self.config.get('trac', 'templates_dir')]) 75 77 hdf['diff.files'] = d -
trac/mimeview/enscript.py
17 17 18 18 from __future__ import generators 19 19 20 import trac.l10n 21 20 22 from trac.core import * 21 23 from trac.mimeview.api import IHTMLPreviewRenderer 22 24 from trac.util import escape, NaivePopen, Deuglifier … … 110 112 111 113 np = NaivePopen(cmdline, content, capturestderr=1) 112 114 if np.errorlevel or np.err: 113 err = 'Running (%s) failed: %s, %s.'% (cmdline, np.errorlevel,115 err = _('Running (%s) failed: %s, %s.') % (cmdline, np.errorlevel, 114 116 np.err) 115 117 raise Exception, err 116 118 odata = np.out -
trac/mimeview/php.py
18 18 19 19 from __future__ import generators 20 20 21 import trac.l10n 22 21 23 from trac.core import * 22 24 from trac.mimeview.api import IHTMLPreviewRenderer 23 25 from trac.util import Deuglifier, NaivePopen … … 61 63 62 64 np = NaivePopen(cmdline, content, capturestderr=1) 63 65 if np.errorlevel or np.err: 64 err = 'Running (%s) failed: %s, %s.'% (cmdline, np.errorlevel,66 err = _('Running (%s) failed: %s, %s.') % (cmdline, np.errorlevel, 65 67 np.err) 66 68 raise Exception, err 67 69 odata = ''.join(np.out.splitlines()[1:-1]) 68 70 if odata.startswith('X-Powered-By'): 69 raise TracError, 'You appear to be using the PHP CGI binary. ' \71 raise TracError, _('You appear to be using the PHP CGI binary. ' \ 70 72 'Trac requires the CLI version for syntax ' \ 71 'highlighting.' 73 'highlighting.') 72 74 73 75 html = PhpDeuglifier().format(odata) 74 76 for line in html.split('<br />'): -
trac/ticket/api.py
16 16 17 17 from __future__ import generators 18 18 19 import trac.l10n 20 19 21 from trac import util 20 22 from trac.core import * 21 23 from trac.perm import IPermissionRequestor … … 49 51 fields = [] 50 52 51 53 # Basic text fields 54 bflabel = { 'summary': _('Summary'), 'reporter': _('Reporter') } 52 55 for name in ('summary', 'reporter'): 53 field = {'name': name, 'type': 'text', 'label': name.title()}56 field = {'name': name, 'type': 'text', 'label': bflabel[name] } 54 57 fields.append(field) 55 58 56 59 # Owner field, can be text or drop-down depending on configuration 57 field = {'name': 'owner', 'label': 'Owner'}60 field = {'name': 'owner', 'label': _('Owner') } 58 61 if self.config.get('ticket', 'restrict_owner').lower() in util.TRUE: 59 62 field['type'] = 'select' 60 63 users = [] … … 68 71 69 72 # Description 70 73 fields.append({'name': 'description', 'type': 'textarea', 71 'label': 'Description'})74 'label': _('Description')}) 72 75 73 76 # Default select and radio fields 77 slabel = { 78 'type': _('Type'), 'status': _('Status'), 79 'priority': _('Priority'), 'milestone': _('Milestone'), 80 'component': _('Component'), 'version': _('Version'), 81 'severity': _('Severity'), 'resolution': _('Resolution'), 82 } 74 83 selects = [('type', model.Type), ('status', model.Status), 75 84 ('priority', model.Priority), ('milestone', model.Milestone), 76 85 ('component', model.Component), ('version', model.Version), … … 81 90 # Fields without possible values are treated as if they didn't 82 91 # exist 83 92 continue 84 field = {'name': name, 'type': 'select', 'label': name.title(),93 field = {'name': name, 'type': 'select', 'label': slabel[name], 85 94 'value': self.config.get('ticket', 'default_' + name), 86 95 'options': options} 87 96 if name in ('status', 'resolution'): … … 91 100 fields.append(field) 92 101 93 102 # Advanced text fields 103 aflabel = { 'keywords': _('Keywords'), 'cc': _('Cc')} 94 104 for name in ('keywords', 'cc', ): 95 field = {'name': name, 'type': 'text', 'label': name.title()}105 field = {'name': name, 'type': 'text', 'label': aflabel[name]} 96 106 fields.append(field) 97 107 98 108 custom_fields = self.get_custom_fields() … … 162 172 163 173 def get_search_filters(self, req): 164 174 if req.perm.has_permission('TICKET_VIEW'): 165 yield ('ticket', 'Tickets')175 yield ('ticket', _('Tickets')) 166 176 167 177 def get_search_results(self, req, query, filters): 168 178 if not 'ticket' in filters: -
trac/ticket/web_ui.py
19 19 import re 20 20 import time 21 21 22 import trac.l10n 23 22 24 from trac import util 23 25 from trac.attachment import attachment_to_hdf, Attachment 24 26 from trac.core import * … … 67 69 if not req.perm.has_permission('TICKET_CREATE'): 68 70 return 69 71 yield 'mainnav', 'newticket', \ 70 '<a href="%s" accesskey="7">New Ticket</a>'\72 _('<a href="%s" accesskey="7">New Ticket</a>') \ 71 73 % (self.env.href.newticket()) 72 74 73 75 # IRequestHandler methods … … 91 93 description = wiki_to_html(ticket['description'], self.env, req, db) 92 94 req.hdf['newticket.description_preview'] = description 93 95 94 req.hdf['title'] = 'New Ticket'96 req.hdf['title'] = _('New Ticket') 95 97 req.hdf['newticket'] = dict(zip(ticket.values.keys(), 96 98 [util.escape(value) for value 97 99 in ticket.values.values()])) … … 115 117 'resolution'): 116 118 field['skip'] = True 117 119 elif name == 'owner': 118 field['label'] = 'Assign to'120 field['label'] = _('Assign to') 119 121 elif name == 'milestone': 120 122 # Don't make completed milestones available for selection 121 123 options = field['options'][:] … … 133 135 134 136 def _do_create(self, req, db): 135 137 if not req.args.get('summary'): 136 raise TracError( 'Tickets must contain a summary.')138 raise TracError(_('Tickets must contain a summary.')) 137 139 138 140 ticket = Ticket(self.env, db=db) 139 141 ticket.values.setdefault('reporter', util.get_reporter_id(req)) … … 220 222 if str(id) in tickets: 221 223 idx = tickets.index(str(ticket.id)) 222 224 if idx > 0: 223 add_link(req, 'first', self.env.href.ticket(tickets[0]),224 'Ticket #%s'% tickets[0])225 add_link(req, 'prev', self.env.href.ticket(tickets[idx - 1]),226 'Ticket #%s'% tickets[idx - 1])225 add_link(req, _('first'), self.env.href.ticket(tickets[0]), 226 _('Ticket #%s') % tickets[0]) 227 add_link(req, _('prev'), self.env.href.ticket(tickets[idx - 1]), 228 _('Ticket #%s') % tickets[idx - 1]) 227 229 if idx < len(tickets) - 1: 228 add_link(req, 'next', self.env.href.ticket(tickets[idx + 1]),229 'Ticket #%s'% tickets[idx + 1])230 add_link(req, 'last', self.env.href.ticket(tickets[-1]),231 'Ticket #%s'% tickets[-1])232 add_link(req, 'up', req.session['query_href'])230 add_link(req, _('next'), self.env.href.ticket(tickets[idx + 1]), 231 _('Ticket #%s') % tickets[idx + 1]) 232 add_link(req, _('last'), self.env.href.ticket(tickets[-1]), 233 _('Ticket #%s') % tickets[-1]) 234 add_link(req, _('up'), req.session['query_href']) 233 235 234 236 add_stylesheet(req, 'common/css/ticket.css') 235 237 return 'ticket.cs', None … … 238 240 239 241 def get_timeline_filters(self, req): 240 242 if req.perm.has_permission('TICKET_VIEW'): 241 yield ('ticket', 'Ticket changes')243 yield ('ticket', _('Ticket changes')) 242 244 243 245 def get_timeline_events(self, req, start, stop, filters): 244 246 if 'ticket' in filters: … … 276 278 cursor = db.cursor() 277 279 cursor.execute(" UNION ALL ".join(sql), (start, stop, start, stop, 278 280 start, stop)) 279 kinds = {'new': 'newticket', 'reopened': 'newticket',280 'closed': 'closedticket'}281 verbs = {'new': 'created', 'reopened': 'reopened',282 'closed': 'closed'}281 kinds = {'new': _('newticket'), 'reopened': _('newticket'), 282 'closed': _('closedticket') } 283 verbs = {'new': _('created'), 'reopened': _('reopened'), 284 'closed': _('closed')} 283 285 for t, id, resolution, status, type, message, author, summary \ 284 286 in cursor: 285 title = 'Ticket <em title="%s">#%s</em> (%s) %s by %s'% (287 title = _('Ticket <em title="%s">#%s</em> (%s) %s by %s') % ( 286 288 util.escape(summary), id, type, verbs[status], 287 289 util.escape(author)) 288 290 if format == 'rss': … … 310 312 if req.perm.has_permission('TICKET_CHGPROP'): 311 313 # TICKET_CHGPROP gives permission to edit the ticket 312 314 if not req.args.get('summary'): 313 raise TracError( 'Tickets must contain summary.')315 raise TracError(_('Tickets must contain summary.')) 314 316 315 317 if req.args.has_key('description') or req.args.has_key('reporter'): 316 318 req.perm.assert_permission('TICKET_ADMIN') … … 321 323 322 324 # Mid air collision? 323 325 if int(req.args.get('ts')) != ticket.time_changed: 324 raise TracError( "Sorry, can not save your changes. "326 raise TracError(_("Sorry, can not save your changes. " 325 327 "This ticket has been modified by someone else " 326 "since you started" , 'Mid Air Collision')328 "since you started"), _('Mid Air Collision')) 327 329 328 330 # Do any action on the ticket? 329 331 action = req.args.get('action') 330 332 actions = TicketSystem(self.env).get_available_actions(ticket, req.perm) 331 333 if action not in actions: 332 raise TracError( 'Invalid action')334 raise TracError(_('Invalid action')) 333 335 334 336 # TODO: this should not be hard-coded like this 335 337 if action == 'accept': … … 443 445 if self.config.get('timeline', 'ticket_show_details') in util.FALSE: 444 446 return 445 447 if req.perm.has_permission('TICKET_VIEW'): 446 yield ('ticket_details', 'Ticket details', False)448 yield ('ticket_details', _('Ticket details'), False) 447 449 448 450 def get_timeline_events(self, req, start, stop, filters): 449 451 if 'ticket_details' in filters: … … 481 483 href = self.env.abs_href.ticket(id) 482 484 else: 483 485 href = self.env.href.ticket(id) 484 title = 'Ticket <em title="%s">#%s</em> (%s) updated by %s'\486 title = _('Ticket <em title="%s">#%s</em> (%s) updated by %s') \ 485 487 % (util.escape(summary), id, type, util.escape(author)) 486 488 message = '' 487 489 if len(field_changes) > 0: 488 message = ', '.join(field_changes) + ' changed.<br />'490 message = ', '.join(field_changes) + _(' changed.<br />') 489 491 message += wiki_to_oneliner(comment, self.env, db, 490 492 shorten=True, absurls=absurls) 491 493 yield 'editedticket', href, title, t, author, message -
trac/ticket/report.py
19 19 import types 20 20 import urllib 21 21 22 import trac.l10n 23 22 24 from trac import util 23 25 from trac.core import * 24 26 from trac.perm import IPermissionRequestor … … 73 75 def get_navigation_items(self, req): 74 76 if not req.perm.has_permission('REPORT_VIEW'): 75 77 return 76 yield 'mainnav', 'tickets', '<a href="%s">View Tickets</a>'\78 yield 'mainnav', 'tickets', _('<a href="%s">View Tickets</a>') \ 77 79 % util.escape(self.env.href.report()) 78 80 79 81 # IPermissionRequestor methods … … 121 123 return resp 122 124 123 125 if id != -1 or action == 'new': 124 add_link(req, 'up', self.env.href.report(), 'Available Reports')126 add_link(req, 'up', self.env.href.report(), _('Available Reports')) 125 127 126 128 # Kludge: Reset session vars created by query module so that the 127 129 # query navigation links on the ticket page don't confuse the user … … 191 193 cursor.execute("SELECT title FROM report WHERE id = %s", (id,)) 192 194 row = cursor.fetchone() 193 195 if not row: 194 raise util.TracError( 'Report %s does not exist.'% id,195 'Invalid Report Number')196 req.hdf['title'] = 'Delete Report {%s} %s'% (id, row[0])196 raise util.TracError(_('Report %s does not exist.') % id, 197 _('Invalid Report Number')) 198 req.hdf['title'] = _('Delete Report {%s} %s') % (id, row[0]) 197 199 req.hdf['report'] = { 198 200 'id': id, 199 201 'mode': 'delete', … … 222 224 title += ' (copy)' 223 225 224 226 if copy or id == -1: 225 req.hdf['title'] = 'Create New Report'227 req.hdf['title'] = _('Create New Report') 226 228 req.hdf['report.href'] = self.env.href.report() 227 229 req.hdf['report.action'] = 'new' 228 230 else: 229 req.hdf['title'] = 'Edit Report {%d} %s'% (id, title)231 req.hdf['title'] = _('Edit Report {%d} %s') % (id, title) 230 232 req.hdf['report.href'] = self.env.href.report(id) 231 233 req.hdf['report.action'] = 'edit' 232 234 … … 272 274 try: 273 275 cols, rows = self.execute_report(req, db, id, sql, args) 274 276 except Exception, e: 275 req.hdf['report.message'] = 'Report execution failed: %s'% e277 req.hdf['report.message'] = _('Report execution failed: %s') % e 276 278 return 'report.cs', None 277 279 278 280 # Convert the header info to HDF-format … … 386 388 href = '' 387 389 if params: 388 390 href = '&' + urllib.urlencode(params) 389 add_link(req, 'alternate', '?format=rss' + href, 'RSS Feed',391 add_link(req, 'alternate', '?format=rss' + href, _('RSS Feed'), 390 392 'application/rss+xml', 'rss') 391 393 add_link(req, 'alternate', '?format=csv' + href, 392 'Comma-delimited Text', 'text/plain')394 _('Comma-delimited Text'), 'text/plain') 393 395 add_link(req, 'alternate', '?format=tab' + href, 394 'Tab-delimited Text', 'text/plain')396 _('Tab-delimited Text'), 'text/plain') 395 397 if req.perm.has_permission('REPORT_SQL_VIEW'): 396 add_link(req, 'alternate', '?format=sql', 'SQL Query',398 add_link(req, 'alternate', '?format=sql', _('SQL Query'), 397 399 'text/plain') 398 400 399 401 def execute_report(self, req, db, id, sql, args): … … 418 420 if id == -1: 419 421 # If no particular report was requested, display 420 422 # a list of available reports instead 421 title = 'Available Reports'423 title = _('Available Reports') 422 424 sql = 'SELECT id AS report, title FROM report ORDER BY report' 423 description = 'This is a list of reports available.'425 description = _('This is a list of reports available.') 424 426 else: 425 427 cursor = db.cursor() 426 428 cursor.execute("SELECT title,sql,description from report " -
trac/ticket/model.py
74 74 % ','.join(std_fields), (tkt_id,)) 75 75 row = cursor.fetchone() 76 76 if not row: 77 raise TracError( 'Ticket %d does not exist.'% tkt_id,78 'Invalid Ticket Number')77 raise TracError(_('Ticket %d does not exist.') % tkt_id, 78 _('Invalid Ticket Number')) 79 79 80 80 self.id = tkt_id 81 81 for i in range(len(std_fields)): … … 410 410 "WHERE name=%s", (name,)) 411 411 row = cursor.fetchone() 412 412 if not row: 413 raise TracError, 'Component %s does not exist.'% name413 raise TracError, _('Component %s does not exist.') % name 414 414 self.name = self._old_name = name 415 415 self.owner = row[0] or None 416 416 self.description = row[1] or '' … … 517 517 "FROM milestone WHERE name=%s", (name,)) 518 518 row = cursor.fetchone() 519 519 if not row: 520 raise TracError( 'Milestone %s does not exist.'% name,521 'Invalid Milestone Name')520 raise TracError(_('Milestone %s does not exist.') % name, 521 _('Invalid Milestone Name')) 522 522 self.name = row[0] 523 523 self.due = row[1] and int(row[1]) or 0 524 524 self.completed = row[2] and int(row[2]) or 0 … … 625 625 "WHERE name=%s", (name,)) 626 626 row = cursor.fetchone() 627 627 if not row: 628 raise TracError, 'Version %s does not exist.'% name628 raise TracError, _('Version %s does not exist.') % name 629 629 self.name = self._old_name = name 630 630 self.time = row[0] and int(row[0]) or None 631 631 self.description = row[1] or '' -
trac/ticket/roadmap.py
18 18 import re 19 19 from time import localtime, strftime, time 20 20 21 import trac.l10n 22 21 23 from trac import __version__ 22 24 from trac.core import * 23 25 from trac.perm import IPermissionRequestor … … 128 130 def get_navigation_items(self, req): 129 131 if not req.perm.has_permission('ROADMAP_VIEW'): 130 132 return 131 yield 'mainnav', 'roadmap', '<a href="%s" accesskey="3">Roadmap</a>'\133 yield 'mainnav', 'roadmap', _('<a href="%s" accesskey="3">Roadmap</a>') \ 132 134 % self.env.href.roadmap() 133 135 134 136 # IPermissionRequestor methods … … 143 145 144 146 def process_request(self, req): 145 147 req.perm.assert_permission('ROADMAP_VIEW') 146 req.hdf['title'] = 'Roadmap'148 req.hdf['title'] = _('Roadmap') 147 149 148 150 showall = req.args.get('show') == 'all' 149 151 req.hdf['roadmap.showall'] = showall … … 301 303 302 304 def get_timeline_filters(self, req): 303 305 if req.perm.has_permission('MILESTONE_VIEW'): 304 yield ('milestone', 'Milestones')306 yield ('milestone', _('Milestones')) 305 307 306 308 def get_timeline_events(self, req, start, stop, filters): 307 309 if 'milestone' in filters: … … 312 314 "WHERE completed>=%s AND completed<=%s", 313 315 (start, stop,)) 314 316 for completed,name,description in cursor: 315 title = 'Milestone <em>%s</em> completed'% escape(name)317 title = _('Milestone <em>%s</em> completed') % escape(name) 316 318 if format == 'rss': 317 319 href = self.env.abs_href.milestone(name) 318 320 message = wiki_to_html(description or '--', self.env, db, … … 382 384 req.perm.assert_permission('MILESTONE_CREATE') 383 385 384 386 if not req.args.has_key('name'): 385 raise TracError( 'You must provide a name for the milestone.',386 'Required Field Missing')387 raise TracError(_('You must provide a name for the milestone.'), 388 _('Required Field Missing')) 387 389 milestone.name = req.args.get('name') 388 390 389 391 due = req.args.get('duedate', '') 390 392 try: 391 393 milestone.due = due and parse_date(due) or 0 392 394 except ValueError, e: 393 raise TracError(e, 'Invalid Date Format')395 raise TracError(e, _('Invalid Date Format')) 394 396 if req.args.has_key('completed'): 395 397 completed = req.args.get('completeddate', '') 396 398 try: 397 399 milestone.completed = completed and parse_date(completed) or 0 398 400 except ValueError, e: 399 raise TracError(e, 'Invalid Date Format')401 raise TracError(e, _('Invalid Date Format')) 400 402 if milestone.completed > time(): 401 raise TracError( 'Completion date may not be in the future',402 'Invalid Completion Date')403 raise TracError(_('Completion date may not be in the future'), 404 _('Invalid Completion Date')) 403 405 else: 404 406 milestone.completed = 0 405 407 … … 417 419 def _render_confirm(self, req, db, milestone): 418 420 req.perm.assert_permission('MILESTONE_DELETE') 419 421 420 req.hdf['title'] = 'Milestone %s'% milestone.name422 req.hdf['title'] = _('Milestone %s') % milestone.name 421 423 req.hdf['milestone'] = milestone_to_hdf(self.env, db, req, milestone) 422 424 req.hdf['milestone.mode'] = 'delete' 423 425 … … 429 431 def _render_editor(self, req, db, milestone): 430 432 if milestone.exists: 431 433 req.perm.assert_permission('MILESTONE_MODIFY') 432 req.hdf['title'] = 'Milestone %s'% milestone.name434 req.hdf['title'] = _('Milestone %s') % milestone.name 433 435 req.hdf['milestone.mode'] = 'edit' 434 436 else: 435 437 req.perm.assert_permission('MILESTONE_CREATE') 436 req.hdf['title'] = 'New Milestone'438 req.hdf['title'] = _('New Milestone') 437 439 req.hdf['milestone.mode'] = 'new' 438 440 439 441 from trac.util import get_date_format_hint, get_datetime_format_hint … … 443 445 req.hdf['milestone.datetime_now'] = format_datetime() 444 446 445 447 def _render_view(self, req, db, milestone): 446 req.hdf['title'] = 'Milestone %s'% milestone.name448 req.hdf['title'] = _('Milestone %s') % milestone.name 447 449 req.hdf['milestone.mode'] = 'view' 448 450 449 451 req.hdf['milestone'] = milestone_to_hdf(self.env, db, req, milestone) -
trac/ticket/query.py
18 18 import re 19 19 import time 20 20 21 import trac.l10n 22 21 23 from trac.core import * 22 24 from trac.perm import IPermissionRequestor 23 25 from trac.ticket import Ticket, TicketSystem … … 58 60 for filter in filters: 59 61 filter = filter.split('=') 60 62 if len(filter) != 2: 61 raise QuerySyntaxError, 'Query filter requires field and ' \62 'constraints separated by a "="' 63 raise QuerySyntaxError, _('Query filter requires field and ' \ 64 'constraints separated by a "="') 63 65 field,values = filter 64 66 if not field: 65 raise QuerySyntaxError, 'Query filter requires field name'67 raise QuerySyntaxError, _('Query filter requires field name') 66 68 values = values.split('|') 67 69 mode, neg = '', '' 68 70 if field[-1] in ('~', '^', '$'): … … 322 324 from trac.ticket.report import ReportModule 323 325 if req.perm.has_permission('TICKET_VIEW') and \ 324 326 not self.env.is_component_enabled(ReportModule): 325 yield 'mainnav', 'tickets', '<a href="%s">View Tickets</a>'\327 yield 'mainnav', 'tickets', _('<a href="%s">View Tickets</a>') \ 326 328 % escape(self.env.href.query()) 327 329 328 330 # IRequestHandler methods … … 359 361 del req.session[var] 360 362 req.redirect(query.get_href()) 361 363 362 add_link(req, 'alternate', query.get_href('rss'), 'RSS Feed',364 add_link(req, 'alternate', query.get_href('rss'), _('RSS Feed'), 363 365 'application/rss+xml', 'rss') 364 366 add_link(req, 'alternate', query.get_href('csv'), 365 'Comma-delimited Text', 'text/plain')366 add_link(req, 'alternate', query.get_href('tab'), 'Tab-delimited Text',367 _('Comma-delimited Text'), 'text/plain') 368 add_link(req, 'alternate', query.get_href('tab'), _('Tab-delimited Text'), 367 369 'text/plain') 368 370 369 371 constraints = {} … … 436 438 def _get_constraint_modes(self): 437 439 modes = {} 438 440 modes['text'] = [ 439 {'name': "contains", 'value': "~"},440 {'name': "doesn't contain", 'value': "!~"},441 {'name': "begins with", 'value': "^"},442 {'name': "ends with", 'value': "$"},443 {'name': "is", 'value': ""},444 {'name': "is not", 'value': "!"}441 {'name': _("contains"), 'value': "~"}, 442 {'name': _("doesn't contain"), 'value': "!~"}, 443 {'name': _("begins with"), 'value': "^"}, 444 {'name': _("ends with"), 'value': "$"}, 445 {'name': _("is"), 'value': ""}, 446 {'name': _("is not"), 'value': "!"} 445 447 ] 446 448 modes['select'] = [ 447 {'name': "is", 'value': ""},448 {'name': "is not", 'value': "!"}449 {'name': _("is"), 'value': ""}, 450 {'name': _("is not"), 'value': "!"} 449 451 ] 450 452 return modes 451 453 452 454 def display_html(self, req, query): 453 req.hdf['title'] = 'Custom Query'455 req.hdf['title'] = _('Custom Query') 454 456 add_stylesheet(req, 'common/css/report.css') 455 457 456 458 db = self.env.get_db_cnx() … … 619 621 implements(IWikiMacroProvider) 620 622 621 623 def get_macros(self): 622 yield 'TicketQuery'624 yield _('TicketQuery') 623 625 624 626 def get_macro_description(self, name): 625 627 import inspect -
trac/versioncontrol/svn_fs.py
16 16 17 17 from __future__ import generators 18 18 19 import trac.l10n 20 19 21 from trac.util import TracError 20 22 from trac.versioncontrol import Changeset, Node, Repository 21 23 … … 179 181 def __init__(self, path, authz, log): 180 182 if core.SVN_VER_MAJOR < 1: 181 183 raise TracError, \ 182 "Subversion >= 1.0 required: Found %d.%d.%d"% \184 _("Subversion >= 1.0 required: Found %d.%d.%d") % \ 183 185 (core.SVN_VER_MAJOR, core.SVN_VER_MINOR, core.SVN_VER_MICRO) 184 186 185 187 self.pool = Pool() … … 190 192 self.path = repos.svn_repos_find_root_path(path, self.pool()) 191 193 if self.path is None: 192 194 raise TracError, \ 193 "%s does not appear to be a Subversion repository."% path195 _("%s does not appear to be a Subversion repository.") % path 194 196 195 197 self.repos = repos.svn_repos_open(self.path, self.pool()) 196 198 self.fs_ptr = repos.svn_repos_fs(self.repos) … … 239 241 if rev is None: 240 242 rev = self.youngest_rev 241 243 elif rev > self.youngest_rev: 242 raise TracError, "Revision %s doesn't exist yet"% rev244 raise TracError, _("Revision %s doesn't exist yet") % rev 243 245 return rev 244 246 245 247 def close(self): … … 366 368 self.root = fs.revision_root(fs_ptr, rev, self.pool()) 367 369 node_type = fs.check_path(self.root, self.scoped_path, self.pool()) 368 370 if not node_type in _kindmap: 369 raise TracError, "No node at %s in revision %s"% (path, rev)371 raise TracError, _("No node at %s in revision %s") % (path, rev) 370 372 self.created_rev = fs.node_created_rev(self.root, self.scoped_path, 371 373 self.pool()) 372 374 self.created_path = fs.node_created_path(self.root, self.scoped_path, -
trac/versioncontrol/cache.py
16 16 17 17 from __future__ import generators 18 18 19 import trac.l10n 20 19 21 from trac.util import TracError 20 22 from trac.versioncontrol import Changeset, Node, Repository, Authorizer 21 23 … … 57 59 previous_repository_dir = self.name 58 60 59 61 if self.name != previous_repository_dir: 60 raise TracError, ( "The 'repository_dir' has changed, "61 "a 'trac-admin resync' operation is needed.") 62 raise TracError, (_("The 'repository_dir' has changed, " 63 "a 'trac-admin resync' operation is needed.")) 62 64 63 65 youngest_stored = self.repos.get_youngest_rev_in_cache(self.db) 64 66 … … 139 141 date, author, message = row 140 142 Changeset.__init__(self, rev, message, author, int(date)) 141 143 else: 142 raise TracError, "No changeset %s in the repository"% rev144 raise TracError, _("No changeset %s in the repository") % rev 143 145 144 146 def get_changes(self): 145 147 cursor = self.db.cursor() -
trac/versioncontrol/web_ui/util.py
17 17 import re 18 18 import urllib 19 19 20 import trac.l10n 21 20 22 from trac.util import escape, format_datetime, pretty_timedelta, shorten_line, \ 21 23 TracError 22 24 from trac.wiki import wiki_to_html, wiki_to_oneliner … … 86 88 try: 87 89 return repos.get_node(path, rev) 88 90 except TracError, e: 89 raise TracError(e.message + '<br><p>You can <a href="%s">search</a> '91 raise TracError(e.message + _('<br><p>You can <a href="%s">search</a> ' 90 92 'in the repository history to see if that path ' 91 'existed but was later removed.</p>' 93 'existed but was later removed.</p>') 92 94 % escape(env.href.log(path, rev=rev, 93 95 mode='path_history'))) -
trac/versioncontrol/web_ui/changeset.py
20 20 import time 21 21 import re 22 22 23 import trac.l10n 24 23 25 from trac import mimeview, util 24 26 from trac.core import * 25 27 from trac.perm import IPermissionRequestor … … 97 99 98 100 def get_timeline_filters(self, req): 99 101 if req.perm.has_permission('CHANGESET_VIEW'): 100 yield ('changeset', 'Repository checkins')102 yield ('changeset', _('Repository checkins')) 101 103 102 104 def get_timeline_events(self, req, start, stop, filters): 103 105 if 'changeset' in filters: … … 119 121 if chgset.date < stop: 120 122 message = chgset.message or '--' 121 123 if format == 'rss': 122 title = 'Changeset <em>[%s]</em>: %s'\124 title = _('Changeset <em>[%s]</em>: %s') \ 123 125 % (util.escape(chgset.rev), 124 126 util.escape(util.shorten_line(message))) 125 127 href = self.env.abs_href.changeset(chgset.rev) 126 128 message = wiki_to_html(message, self.env, db, 127 129 absurls=True) 128 130 else: 129 title = 'Changeset <em>[%s]</em> by %s'\131 title = _('Changeset <em>[%s]</em> by %s') \ 130 132 % (util.escape(chgset.rev), 131 133 util.escape(chgset.author)) 132 134 href = self.env.href.changeset(chgset.rev) … … 378 380 379 381 def get_search_filters(self, req): 380 382 if req.perm.has_permission('CHANGESET_VIEW'): 381 yield ('changeset', 'Changesets')383 yield ('changeset', _('Changesets')) 382 384 383 385 def get_search_results(self, req, query, filters): 384 386 if not 'changeset' in filters: -
trac/versioncontrol/web_ui/log.py
19 19 import re 20 20 import urllib 21 21 22 import trac.l10n 23 22 24 from trac import util 23 25 from trac.core import * 24 26 from trac.perm import IPermissionRequestor … … 124 126 previous_path = old_path 125 127 if info == []: 126 128 # FIXME: we should send a 404 error here 127 raise TracError( "The file or directory '%s' doesn't exist "128 "at revision %s or at any previous revision." 129 % (path, rev), 'Nonexistent path')129 raise TracError(_("The file or directory '%s' doesn't exist " 130 "at revision %s or at any previous revision.") 131 % (path, rev), _('Nonexistent path')) 130 132 131 133 def make_log_href(path, **args): 132 134 link_rev = rev -
trac/versioncontrol/web_ui/browser.py
18 18 import re 19 19 import urllib 20 20 21 import trac.l10n 22 21 23 from trac import util 22 24 from trac.core import * 23 25 from trac.mimeview import get_mimetype, is_binary, detect_unicode, Mimeview … … 61 63 def get_navigation_items(self, req): 62 64 if not req.perm.has_permission('BROWSER_VIEW'): 63 65 return 64 yield 'mainnav', 'browser', '<a href="%s">Browse Source</a>'\66 yield 'mainnav', 'browser', _('<a href="%s">Browse Source</a>') \ 65 67 % util.escape(self.env.href.browser()) 66 68 67 69 # IPermissionRequestor methods -
trac/Settings.py
16 16 17 17 from __future__ import generators 18 18 19 import trac.l10n 20 19 21 from trac.core import * 20 22 from trac.util import escape 21 23 from trac.web import IRequestHandler … … 33 35 return 'settings' 34 36 35 37 def get_navigation_items(self, req): 36 yield 'metanav', 'settings', '<a href="%s">Settings</a>'\38 yield 'metanav', 'settings', _('<a href="%s">Settings</a>') \ 37 39 % escape(self.env.href.settings()) 38 40 39 41 # IRequestHandler methods … … 50 52 elif action == 'load': 51 53 self._do_load(req) 52 54 53 req.hdf['title'] = 'Settings'55 req.hdf['title'] = _('Settings') 54 56 req.hdf['settings'] = req.session 55 57 if req.authname == 'anonymous': 56 58 req.hdf['settings.session_id'] = req.session.sid -
trac/scripts/admin.py
27 27 import urllib 28 28 29 29 import trac 30 31 import trac.l10n 32 30 33 from trac import perm, util, db_default 31 34 from trac.config import default_dir 32 35 from trac.env import Environment … … 730 733 731 734 def _do_wiki_import(self, filename, title, cursor=None): 732 735 if not os.path.isfile(filename): 733 raise Exception, '%s is not a file'% filename736 raise Exception, _('%s is not a file') % filename 734 737 735 738 f = open(filename,'r') 736 739 data = util.to_utf8(f.read()) … … 766 769 print text 767 770 else: 768 771 if os.path.isfile(filename): 769 raise Exception( "File '%s' exists"% filename)772 raise Exception(_("File '%s' exists") % filename) 770 773 f = open(filename,'w') 771 774 f.write(text) 772 775 f.close() -
trac/perm.py
18 18 19 19 """Management of permissions.""" 20 20 21 import trac.l10n 22 21 23 from trac.core import * 22 24 23 25 … … 86 88 """Grant the user with the given name permission to perform to specified 87 89 action.""" 88 90 if action.isupper() and action not in self.get_actions(): 89 raise TracError, '%s is not a valid action.'% action91 raise TracError, _('%s is not a valid action.') % action 90 92 91 93 self.store.grant_permission(username, action) 92 94 … … 94 96 """Revokes the permission of the specified user to perform an action.""" 95 97 # TODO: Validate that this permission does in fact exist 96 98 if action.isupper() and action not in self.get_actions(): 97 raise TracError, '%s is not a valid action.'% action99 raise TracError, _('%s is not a valid action.') % action 98 100 99 101 self.store.revoke_permission(username, action) 100 102 … … 169 171 for store in self.stores: 170 172 if store.__class__.__name__ == selected_store: 171 173 return store 172 raise TracError, 'Invalid permission store "%s"'% selected_store174 raise TracError, _('Invalid permission store "%s"') % selected_store 173 175 store = property(fget=lambda self: self._get_store()) 174 176 175 177 -
trac/Search.py
18 18 import re 19 19 import time 20 20 21 import trac.l10n 22 21 23 from trac.core import * 22 24 from trac.perm import IPermissionRequestor 23 25 from trac.util import TracError, escape, format_datetime … … 107 109 def get_navigation_items(self, req): 108 110 if not req.perm.has_permission('SEARCH_VIEW'): 109 111 return 110 yield 'mainnav', 'search', '<a href="%s" accesskey="4">Search</a>'\112 yield 'mainnav', 'search', _('<a href="%s" accesskey="4">Search</a>') \ 111 113 % (self.env.href.search()) 112 114 113 115 # IPermissionRequestor methods … … 149 151 query = query[1:] 150 152 # Refuse queries that obviously would result in a huge result set 151 153 if len(query) < 3 and len(query.split()) == 1: 152 raise TracError( 'Search query too short. '153 'Query must be at least 3 characters long.' ,154 'Search Error')154 raise TracError(_('Search query too short. ' 155 'Query must be at least 3 characters long.'), 156 _('Search Error')) 155 157 results = [] 156 158 for source in self.search_sources: 157 159 results += list(source.get_search_results(req, query, filters)) … … 161 163 n_pages = n / page_size + 1 162 164 results = results[(page-1) * page_size: page * page_size] 163 165 164 req.hdf['title'] = 'Search Results'166 req.hdf['title'] = _('Search Results') 165 167 req.hdf['search.q'] = req.args.get('q').replace('"', """) 166 168 req.hdf['search.page'] = page 167 169 req.hdf['search.n_hits'] = n … … 171 173 next_href = self.env.href.search(zip(filters, 172 174 ['on'] * len(filters)), 173 175 q=query, page=page + 1) 174 add_link(req, 'next', next_href, 'Next Page')176 add_link(req, 'next', next_href, _('Next Page')) 175 177 if page > 1: 176 178 prev_href = self.env.href.search(zip(filters, 177 179 ['on'] * len(filters)), 178 180 q=query, page=page - 1) 179 add_link(req, 'prev', prev_href, 'Previous Page')181 add_link(req, 'prev', prev_href, _('Previous Page')) 180 182 req.hdf['search.page_href'] = escape( 181 183 self.env.href.search(zip(filters, ['on'] * len(filters)), 182 184 q=query)) -
trac/Timeline.py
20 20 import re 21 21 import time 22 22 23 import trac.l10n 24 23 25 from trac.core import * 24 26 from trac.perm import IPermissionRequestor 25 27 from trac.util import enum, escape, format_date, format_time, http_date … … 70 72 def get_navigation_items(self, req): 71 73 if not req.perm.has_permission('TIMELINE_VIEW'): 72 74 return 73 yield 'mainnav', 'timeline', '<a href="%s" accesskey="2">Timeline</a>'\75 yield 'mainnav', 'timeline', _('<a href="%s" accesskey="2">Timeline</a>') \ 74 76 % self.env.href.timeline() 75 77 76 78 # IPermissionRequestor methods … … 140 142 if maxrows and len(events) > maxrows: 141 143 del events[maxrows:] 142 144 143 req.hdf['title'] = 'Timeline'145 req.hdf['title'] = _('Timeline') 144 146 145 147 # Get the email addresses of all known users 146 148 email_map = {} -
trac/Notify.py
14 14 # 15 15 # Author: Daniel Lundin <daniel@edgewall.com> 16 16 17 import trac.l10n 18 17 19 from trac.__init__ import __version__ 18 20 from trac.core import TracError 19 21 from trac.util import CRLF, TRUE, FALSE, enum, wrap … … 96 98 self.replyto_email = self.config.get('notification', 'smtp_replyto') 97 99 self.from_email = self.from_email or self.replyto_email 98 100 if not self.from_email and not self.replyto_email: 99 raise TracError( 'Unable to send email due to identity crisis. <br />'101 raise TracError(_('Unable to send email due to identity crisis. <br />' 100 102 'Both <b>notification.from</b> and' 101 103 ' <b>notification.reply_to</b> are unspecified' 102 ' in configuration.' ,103 'SMTP Notification Error')104 ' in configuration.'), 105 _('SMTP Notification Error')) 104 106 105 107 # Authentication info (optional) 106 108 self.user_name = self.config.get('notification', 'smtp_user') … … 127 129 msg = MIMEMultipart() 128 130 msg.attach(MIMEText(body, 'plain', 'utf-8')) 129 131 msg.epilogue = '' 130 msg['X-Mailer'] = 'Trac %s, by Edgewall Software'% __version__132 msg['X-Mailer'] = _('Trac %s, by Edgewall Software') % __version__ 131 133 msg['X-Trac-Version'] = __version__ 132 134 projname = self.config.get('project','name') 133 135 msg['X-Trac-Project'] = projname … … 192 194 old_descr = wrap(old, self.COLS, '> ', '> ', CRLF) 193 195 old_descr = old_descr.replace(2*CRLF, CRLF + '>' + CRLF) 194 196 cdescr = CRLF 195 cdescr += 'Old description:'+ 2*CRLF + old_descr + 2*CRLF196 cdescr += 'New description:'+ 2*CRLF + new_descr + CRLF197 cdescr += _('Old description:') + 2*CRLF + old_descr + 2*CRLF 198 cdescr += _('New description:') + 2*CRLF + new_descr + CRLF 197 199 self.hdf['email.changes_descr'] = cdescr 198 200 else: 199 201 newv = new -
trac/About.py
20 20 from __future__ import generators 21 21 import re 22 22 23 import trac.l10n 24 23 25 from trac.core import * 24 26 from trac.perm import IPermissionRequestor 25 27 from trac.web import IRequestHandler … … 31 33 32 34 implements(INavigationContributor, IPermissionRequestor, IRequestHandler) 33 35 34 about_cs = """36 about_cs = _(""" 35 37 <?cs include "header.cs"?> 36 38 <div id="ctxtnav" class="nav"> 37 39 <h2>About Navigation</h2> … … 131 133 <?cs /if ?> 132 134 </div> 133 135 <?cs include "footer.cs"?> 134 """ # about_cs136 """) # about_cs 135 137 136 138 # INavigationContributor methods 137 139 … … 139 141 return 'about' 140 142 141 143 def get_navigation_items(self, req): 142 yield 'metanav', 'about', '<a href="%s" accesskey="9">About Trac</a>'\144 yield 'metanav', 'about', _('<a href="%s" accesskey="9">About Trac</a>') \ 143 145 % self.env.href.about() 144 146 145 147 # IPermissionRequestor methods … … 158 160 159 161 def process_request(self, req): 160 162 page = req.args.get('page', 'default') 161 req.hdf['title'] = 'About Trac'163 req.hdf['title'] = _('About Trac') 162 164 if req.perm.has_permission('CONFIG_VIEW'): 163 165 req.hdf['about.config_href'] = self.env.href.about('config') 164 166 req.hdf['about.plugins_href'] = self.env.href.about('plugins') -
trac/wiki/web_ui.py
20 20 import re 21 21 import StringIO 22 22 23 import trac.l10n 24 23 25 from trac.attachment import attachment_to_hdf, Attachment 24 26 from trac.core import * 25 27 from trac.perm import IPermissionRequestor … … 47 49 def get_navigation_items(self, req): 48 50 if not req.perm.has_permission('WIKI_VIEW'): 49 51 return 50 yield 'metanav', 'help', '<a href="%s" accesskey="6">Help/Guide</a>'\52 yield 'metanav', 'help', _('<a href="%s" accesskey="6">Help/Guide</a>') \ 51 53 % escape(self.env.href.wiki('TracGuide')) 52 yield 'mainnav', 'wiki', '<a href="%s" accesskey="1">Wiki</a>'\54 yield 'mainnav', 'wiki', _('<a href="%s" accesskey="1">Wiki</a>') \ 53 55 % escape(self.env.href.wiki()) 54 56 55 57 # IPermissionRequestor methods … … 122 124 123 125 def get_timeline_filters(self, req): 124 126 if req.perm.has_permission('WIKI_VIEW'): 125 yield ('wiki', 'Wiki changes')127 yield ('wiki', _('Wiki changes')) 126 128 127 129 def get_timeline_events(self, req, start, stop, filters): 128 130 if 'wiki' in filters: … … 133 135 "FROM wiki WHERE time>=%s AND time<=%s", 134 136 (start, stop)) 135 137 for t,name,comment,author in cursor: 136 title = '<em>%s</em> edited by %s'% (138 title = _('<em>%s</em> edited by %s') % ( 137 139 escape(name), escape(author)) 138 140 if format == 'rss': 139 141 href = self.env.abs_href.wiki(name) … … 211 213 req.perm.assert_permission('WIKI_VIEW') 212 214 213 215 if not page.exists: 214 raise TracError, "Version %s of page %s does not exist"\216 raise TracError, _("Version %s of page %s does not exist") \ 215 217 % (req.args.get('version'), page.name) 216 218 217 219 add_stylesheet(req, 'common/css/diff.css') … … 293 295 else: 294 296 editrows = req.session.get('wiki_editrows', '20') 295 297 296 req.hdf['title'] = escape(page.name) + ' (edit)'298 req.hdf['title'] = escape(page.name) + _(' (edit)') 297 299 info = { 298 300 'page_source': escape(page.text), 299 301 'version': page.version, … … 321 323 req.perm.assert_permission('WIKI_VIEW') 322 324 323 325 if not page.exists: 324 raise TracError, "Page %s does not exist"% page.name326 raise TracError, _("Page %s does not exist") % page.name 325 327 326 req.hdf['title'] = escape(page.name) + ' (history)'328 req.hdf['title'] = escape(page.name) + _(' (history)') 327 329 328 330 history = [] 329 331 for version, t, author, comment, ipnr in page.get_history(): … … 355 357 req.hdf['html.norobots'] = 1 356 358 357 359 txt_href = self.env.href.wiki(page.name, version=version, format='txt') 358 add_link(req, 'alternate', txt_href, 'Plain Text', 'text/plain')360 add_link(req, 'alternate', txt_href, _('Plain Text'), 'text/plain') 359 361 360 362 req.hdf['wiki'] = {'page_name': page.name, 'exists': page.exists, 361 363 'version': page.version, 'readonly': page.readonly} … … 365 367 req.hdf['wiki.history_href'] = escape(history_href) 366 368 else: 367 369 if not req.perm.has_permission('WIKI_CREATE'): 368 raise TracError( 'Page %s not found'% page.name)369 req.hdf['wiki.page_html'] = '<p>Describe "%s" here</p>'% page.name370 raise TracError(_('Page %s not found') % page.name) 371 req.hdf['wiki.page_html'] = _('<p>Describe "%s" here</p>') % page.name 370 372 371 373 # Show attachments 372 374 attachments = [] -
trac/wiki/tests/formatter.py
4 4 import StringIO 5 5 import unittest 6 6 7 import trac.l10n 8 7 9 from trac.core import * 8 10 from trac.wiki.formatter import Formatter, OneLinerFormatter 9 11 from trac.wiki.api import IWikiMacroProvider … … 83 85 try: 84 86 self.assertEquals(self.correct, v) 85 87 except AssertionError, e: 86 raise AssertionError( '%s\n\n%s:%s: for the input '87 '(formatter flavor was "%s")' \88 raise AssertionError(_('%s\n\n%s:%s: for the input ' 89 '(formatter flavor was "%s")') \ 88 90 % (str(e), self.file, self.line, 89 91 formatter.flavor)) 90 92 -
trac/wiki/model.py
19 19 from __future__ import generators 20 20 import time 21 21 22 import trac.l10n 23 22 24 from trac.core import * 23 25 from trac.wiki.api import WikiSystem 24 26 … … 122 124 cursor.execute("UPDATE wiki SET readonly=%s WHERE name=%s", 123 125 (self.readonly, self.name)) 124 126 else: 125 raise TracError( 'Page not modified')127 raise TracError(_('Page not modified')) 126 128 127 129 if handle_ta: 128 130 db.commit() -
trac/wiki/macros.py
25 25 except ImportError: 26 26 from StringIO import StringIO 27 27 28 import trac.l10n 29 28 30 from trac.config import default_dir 29 31 from trac.core import * 30 32 from trac.util import escape, format_date … … 258 260 # we expect the 1st argument to be a filename (filespec) 259 261 args = content.split(',') 260 262 if len(args) == 0: 261 raise Exception( "No argument.")263 raise Exception(_("No argument.")) 262 264 filespec = args[0] 263 265 size_re = re.compile('^[0-9]+%?$') 264 266 align_re = re.compile('^(?:left|right|top|bottom)$') … … 300 302 if parts[0] in ['wiki', 'ticket']: 301 303 module, id, file = parts 302 304 else: 303 raise Exception( "%s module can't have attachments"% parts[0])305 raise Exception(_("%s module can't have attachments") % parts[0]) 304 306 elif len(parts) == 2: 305 307 from trac.versioncontrol.web_ui import BrowserModule 306 308 try: … … 336 338 if len(path_info) > 2: 337 339 id = path_info[2] 338 340 if module not in ['wiki', 'ticket']: 339 raise Exception( 'Cannot reference local attachment from here')341 raise Exception(_('Cannot reference local attachment from here')) 340 342 else: 341 raise Exception( 'No filespec given')343 raise Exception(_('No filespec given')) 342 344 if not url: # this is an attachment 343 345 from trac.attachment import Attachment 344 346 attachment = Attachment(self.env, module, id, file) … … 445 447 macro_file = os.path.join(path, name + '.py') 446 448 if os.path.isfile(macro_file): 447 449 return imp.load_source(name, macro_file) 448 raise TracError, 'Macro %s not found'% name450 raise TracError, _('Macro %s not found') % name -
trac/util.py
23 23 import re 24 24 import md5 25 25 26 import trac.l10n 27 26 28 TRUE = ['yes', '1', 1, 'true', 'on', 'aye'] 27 29 FALSE = ['no', '0', 0, 'false', 'off', 'nay'] 28 30 … … 121 123 122 124 jump = 512 123 125 if size < jump: 124 return '%d bytes'% size126 return _('%d bytes') % size 125 127 126 128 units = ['kB', 'MB', 'GB', 'TB'] 127 129 i = 0 … … 138 140 if not time2: time2 = time.time() 139 141 if time1 > time2: 140 142 time2, time1 = time1, time2 141 units = ((3600 * 24 * 365, 'year', 'years'),142 (3600 * 24 * 30, 'month', 'months'),143 (3600 * 24 * 7, 'week', 'weeks'),144 (3600 * 24, 'day', 'days'),145 (3600, 'hour', 'hours'),146 (60, 'minute', 'minutes'))143 units = ((3600 * 24 * 365, _('year'), _('years')), 144 (3600 * 24 * 30, _('month'), _('months')), 145 (3600 * 24 * 7, _('week'), _('weeks')), 146 (3600 * 24, _('day'), _('days')), 147 (3600, _('hour'), _('hours')), 148 (60, _('minute'), _('minutes'))) 147 149 age_s = int(time2 - time1) 148 150 if age_s < 60: 149 return '%i second%s'% (age_s, age_s != 1 and 's' or '')151 return _('%i second%s') % (age_s, age_s != 1 and 's' or '') 150 152 for u, unit, unit_plural in units: 151 153 r = float(age_s) / float(u) 152 154 if r >= 0.9: 153 155 r = int(round(r)) 154 return '%d %s' % (r, r == 1 and unit or unit_plural)156 return '%d %s' % (r, r == 1 and _(unit) or _(unit_plural)) 155 157 return '' 156 158 157 159 def create_unique_file(path): … … 168 170 idx += 1 169 171 # A sanity check 170 172 if idx > 100: 171 raise Exception( 'Failed to create unique name: '+ path)173 raise Exception(_('Failed to create unique name: ') + path) 172 174 path = '%s.%d%s' % (parts[0], idx, parts[1]) 173 175 174 176 def get_reporter_id(req): … … 226 228 t = time.time() 227 229 if not isinstance(t, (list, tuple, time.struct_time)): 228 230 t = time.gmtime(int(t)) 229 weekdays = [ 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']230 months = [ 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',231 'Oct', 'Nov', 'Dec']231 weekdays = [_('Mon'), _('Tue'), _('Wed'), _('Thu'), _('Fri'), _('Sat'), _('Sun')] 232 months = [_('Jan'), _('Feb'), _('Mar'), _('Apr'), _('May'), _('Jun'), _('Jul'), _('Aug'), _('Sep'), 233 _('Oct'), _('Nov'), _('Dec')] 232 234 return '%s, %d %s %04d %02d:%02d:%02d GMT' % ( 233 235 weekdays[t.tm_wday], t.tm_mday, months[t.tm_mon - 1], t.tm_year, 234 236 t.tm_hour, t.tm_min, t.tm_sec) … … 245 247 except ValueError: 246 248 continue 247 249 if seconds == None: 248 raise ValueError, '%s is not a known date format.'% text250 raise ValueError, _('%s is not a known date format.') % text 249 251 return seconds 250 252 251 253 -
trac/db.py
26 26 threading._get_ident = lambda: 0 27 27 import weakref 28 28 29 import trac.l10n 29 30 from trac.core import TracError 30 31 31 32 __all__ = ['get_cnx_pool', 'init_db'] … … 161 162 if timeout: 162 163 self._available.wait(timeout) 163 164 if (time.time() - start) >= timeout: 164 raise TimeoutError, 'Unable to get database ' \165 'connection within %d seconds' \165 raise TimeoutError, _('Unable to get database ' \ 166 'connection within %d seconds') \ 166 167 % timeout 167 168 else: 168 169 self._available.wait() … … 257 258 self.cnx = None 258 259 if path != ':memory:': 259 260 if not os.access(path, os.F_OK): 260 raise TracError, 'Database "%s" not found.'% path261 raise TracError, _('Database "%s" not found.') % path 261 262 262 263 dbdir = os.path.dirname(path) 263 264 if not os.access(path, os.R_OK + os.W_OK) or \ 264 265 not os.access(dbdir, os.R_OK + os.W_OK): 265 266 from getpass import getuser 266 raise TracError, 'The user %s requires read _and_ write ' \267 raise TracError, _('The user %s requires read _and_ write ' \ 267 268 'permission to the database file %s and the ' \ 268 'directory it is located in.' \269 'directory it is located in.') \ 269 270 % (getuser(), path) 270 271 271 272 if have_pysqlite == 2: … … 316 317 if path != ':memory:': 317 318 # make the directory to hold the database 318 319 if os.path.exists(path): 319 raise TracError, 'Database already exists at %s'% path320 raise TracError, _('Database already exists at %s') % path 320 321 os.makedirs(os.path.split(path)[0]) 321 322 cnx = sqlite.connect(path, timeout=int(params.get('timeout', 10000))) 322 323 cursor = cnx.cursor() … … 446 447 def _get_cnx_class(env_path, db_str): 447 448 scheme, args = _parse_db_str(db_str) 448 449 if not scheme in _cnx_map: 449 raise TracError, 'Unsupported database type "%s"'% scheme450 raise TracError, _('Unsupported database type "%s"') % scheme 450 451 451 452 if scheme == 'sqlite': 452 453 # Special case for SQLite to support a path relative to the … … 465 466 host = None 466 467 path = rest 467 468 else: 468 raise TracError, 'Database connection string %s must start with ' \469 'scheme:/' % db_str469 raise TracError, _('Database connection string %s must start with ' \ 470 'scheme:/') % db_str 470 471 else: 471 472 if rest.startswith('/') and not rest.startswith('//'): 472 473 host = None -
trac/web/standalone.py
19 19 # Todo: 20 20 # - External auth using mod_proxy / squid. 21 21 22 import trac.l10n 23 22 24 from trac import util, __version__ 23 25 from trac.env import open_environment 24 26 from trac.web.api import Request … … 291 293 if path_info == '/login': 292 294 auth = self.server.auths.get(project_name) 293 295 if not auth: 294 raise util.TracError( 'Authentication not enabled. '295 'Please use the tracd --auth option.\n') 296 raise util.TracError(_('Authentication not enabled. ' 297 'Please use the tracd --auth option.\n')) 296 298 req.remote_user = auth.do_auth(self) 297 299 if not req.remote_user: 298 300 return -
trac/web/clearsilver.py
14 14 # 15 15 # Author: Christopher Lenz <cmlenz@gmx.de> 16 16 17 import trac.l10n 17 18 from trac.util import enum, TracError 18 19 19 20 … … 128 129 import neo_util 129 130 self.hdf = neo_util.HDF() 130 131 except ImportError, e: 131 raise TracError, "ClearSilver not installed (%s)"% e132 raise TracError, _("ClearSilver not installed (%s)") % e 132 133 133 134 self['hdf.loadpaths'] = loadpaths 134 135 -
trac/web/chrome.py
18 18 import os.path 19 19 import re 20 20 21 import trac.l10n 22 21 23 from trac import mimeview, util 22 24 from trac.core import * 23 25 from trac.env import IEnvironmentSetupParticipant … … 173 175 174 176 # FIXME: Should return a 404 error 175 177 self.log.warning('File %s not found in any of %s', filename, dirs) 176 raise TracError, 'File not found'178 raise TracError, _('File not found') 177 179 178 180 # ITemplateProvider methods 179 181 -
trac/web/modpython_frontend.py
28 28 29 29 from mod_python import apache, util 30 30 31 import trac.l10n 32 31 33 from trac.util import http_date 32 34 from trac.web.api import Request, RequestDone 33 35 from trac.web.main import dispatch_request, get_environment, \ 34 36 send_pretty_error, send_project_index 35 37 36 37 38 class ModPythonRequest(Request): 38 39 39 40 idx_location = None … … 62 63 root_uri = options['TracUriRoot'].rstrip('/') 63 64 if self.req.uri[:len(root_uri)] != root_uri: 64 65 raise ValueError, \ 65 'TracRootUri set to %s but request URL starts with %s'\66 _('TracRootUri set to %s but request URL starts with %s') \ 66 67 % (root_uri, self.req.uri[:len(root_uri)]) 67 68 self.path_info = self.req.uri[len(root_uri):] 68 69 else: … … 179 180 result[dest] = orig[src] 180 181 return result 181 182 183 import os 182 184 def handler(req): 183 185 options = req.get_options() 184 186 if options.has_key('TracLocale'): 185 187 locale.setlocale(locale.LC_ALL, options['TracLocale']) 188 trac.l10n.updateLocale() 186 189 else: 187 190 locale.setlocale(locale.LC_ALL, '') 188 191 -
trac/web/auth.py
18 18 import re 19 19 import time 20 20 21 import trac.l10n 22 21 23 from trac.core import * 22 24 from trac.web.api import IAuthenticator, IRequestHandler 23 25 from trac.web.chrome import INavigationContributor … … 64 66 65 67 def get_navigation_items(self, req): 66 68 if req.authname and req.authname != 'anonymous': 67 yield 'metanav', 'login', 'logged in as %s'% escape(req.authname)68 yield 'metanav', 'logout', '<a href="%s">Logout</a>'\69 yield 'metanav', 'login', _('logged in as %s') % escape(req.authname) 70 yield 'metanav', 'logout', _('<a href="%s">Logout</a>') \ 69 71 % escape(self.env.href.logout()) 70 72 else: 71 yield 'metanav', 'login', '<a href="%s">Login</a>'\73 yield 'metanav', 'login', _('<a href="%s">Login</a>') \ 72 74 % escape(self.env.href.login()) 73 75 74 76 # IRequestHandler methods -
trac/web/session.py
16 16 # Author: Daniel Lundin <daniel@edgewall.com> 17 17 # Christopher Lenz <cmlenz@gmx.de> 18 18 19 import trac.l10n 20 19 21 from trac.util import hex_entropy, TracError 20 22 21 23 import time … … 86 88 cursor.execute("SELECT sid FROM session WHERE sid=%s " 87 89 "AND authenticated=0", (new_sid,)) 88 90 if cursor.fetchone(): 89 raise TracError( "Session '%s' already exists.<br />"90 "Please choose a different session id." % new_sid,91 "Error renaming session")91 raise TracError(_("Session '%s' already exists.<br />" 92 "Please choose a different session id.") % new_sid, 93 _("Error renaming session")) 92 94 self.env.log.debug('Changing session ID %s to %s' % (self.sid, new_sid)) 93 95 cursor.execute("UPDATE session SET sid=%s WHERE sid=%s " 94 96 "AND authenticated=0", (new_sid, self.sid)) -
trac/web/main.py
18 18 19 19 import os 20 20 21 import trac.l10n 22 21 23 from trac.core import * 22 24 from trac.env import open_environment 23 25 from trac.perm import PermissionCache, PermissionError … … 101 103 102 104 if not chosen_handler: 103 105 # FIXME: Should return '404 Not Found' to the client 104 raise TracError, 'No handler matched request to %s'% req.path_info106 raise TracError, _('No handler matched request to %s') % req.path_info 105 107 106 108 try: 107 109 resp = chosen_handler.process_request(req) … … 175 177 'name_encoded': escape(env.config.get('project', 'name')), 176 178 'descr': env.config.get('project', 'descr'), 177 179 'footer': env.config.get('project', 'footer', 178 'Visit the Trac open source project at<br />'179 '<a href="http://trac.edgewall.com/">'180 'http://trac.edgewall.com/</a>'),180 _('Visit the Trac open source project at<br />' 181 '<a href="http://trac.edgewall.com/">' 182 'http://trac.edgewall.com/</a>')), 181 183 'url': env.config.get('project', 'url') 182 184 } 183 185 … … 218 220 populate_hdf(req.hdf, env, req) 219 221 220 222 if isinstance(e, TracError): 221 req.hdf['title'] = e.title or 'Error'222 req.hdf['error.title'] = e.title or 'Error'223 req.hdf['title'] = e.title or _('Error') 224 req.hdf['error.title'] = e.title or _('Error') 223 225 req.hdf['error.type'] = 'TracError' 224 226 req.hdf['error.message'] = e.message 225 227 if e.show_traceback: … … 227 229 req.display('error.cs', response=500) 228 230 229 231 elif isinstance(e, PermissionError): 230 req.hdf['title'] = 'Permission Denied'232 req.hdf['title'] = _('Permission Denied') 231 233 req.hdf['error.type'] = 'permission' 232 234 req.hdf['error.action'] = e.action 233 235 req.hdf['error.message'] = e 234 236 req.display('error.cs', response=403) 235 237 236 238 else: 237 req.hdf['title'] = 'Oops'239 req.hdf['title'] = _('Oops') 238 240 req.hdf['error.type'] = 'internal' 239 241 req.hdf['error.message'] = escape(str(e)) 240 242 req.hdf['error.traceback'] = escape(tb.getvalue()) … … 250 252 req.send_response(500) 251 253 req.send_header('Content-Type', 'text/plain') 252 254 req.end_headers() 253 req.write( 'Oops...\n\nTrac detected an internal error:\n\n')255 req.write(_('Oops...\n\nTrac detected an internal error:\n\n')) 254 256 req.write(str(e)) 255 257 req.write('\n') 256 258 req.write(tb.getvalue()) … … 274 276 req.hdf[key] = val 275 277 else: 276 278 req.hdf = HDFWrapper() 277 template = req.hdf.parse( '''<html>279 template = req.hdf.parse(_('''<html> 278 280 <head><title>Available Projects</title></head> 279 281 <body><h1>Available Projects</h1><ul><?cs 280 282 each:project = projects ?><li><?cs … … 287 289 /if ?> 288 290 </li><?cs 289 291 /each ?></ul></body> 290 </html>''') 292 </html>''')) 291 293 292 294 if not env_paths and 'TRAC_ENV_PARENT_DIR' in options: 293 295 dir = options['TRAC_ENV_PARENT_DIR'] … … 330 332 return None 331 333 else: 332 334 raise TracError, \ 333 'The environment options "TRAC_ENV" or "TRAC_ENV_PARENT_DIR" ' \335 _('The environment options "TRAC_ENV" or "TRAC_ENV_PARENT_DIR" ' \ 334 336 'or the mod_python options "TracEnv" or "TracEnvParentDir" ' \ 335 337 'are missing. Trac requires one of these options to locate ' \ 336 'the Trac environment(s).' 338 'the Trac environment(s).') 337 339 338 340 return _open_environment(env_path, threaded)
