Edgewall Software

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)

Patch to add gettext support for the python code

  • trac/core.py

     
    1616# Author: Jonas Borgström <jonas@edgewall.com> 
    1717#         Christopher Lenz <cmlenz@gmx.de> 
    1818 
     19import trac.l10n 
     20 
    1921from trac.util import TracError 
    2022 
    2123__all__ = ['Component', 'ExtensionPoint', 'implements', 'Interface', 
     
    162164        cls = self.__class__.__name__ 
    163165        if hasattr(self, '__module__'): 
    164166            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) 
    166168 
    167169 
    168170class ComponentManager(object): 
     
    186188            if not self.is_component_enabled(cls): 
    187189                return None 
    188190            if cls not in ComponentMeta._components: 
    189                 raise TracError, 'Component "%s" not registered' % cls.__name__ 
     191                raise TracError, _('Component "%s" not registered') % cls.__name__ 
    190192            try: 
    191193                component = cls(self) 
    192194            except TypeError, e: 
    193                 raise TracError, 'Unable to instantiate component "%s" (%s)' \ 
     195                raise TracError, _('Unable to instantiate component "%s" (%s)') \ 
    194196                                 % (cls.__name__, e) 
    195197        return component 
    196198 
  • trac/env.py

     
    1818 
    1919import os 
    2020 
     21import trac.l10n 
     22 
    2123from trac import db, db_default, util 
    2224from trac.config import Configuration 
    2325from trac.core import Component, ComponentManager, implements, Interface, \ 
     
    155157        from trac.versioncontrol.svn_fs import SubversionRepository 
    156158        repos_dir = self.config.get('trac', 'repository_dir') 
    157159        if not repos_dir: 
    158             raise EnvironmentError, 'Path to repository not configured' 
     160            raise EnvironmentError, _('Path to repository not configured') 
    159161        authz = None 
    160162        if authname: 
    161163            authz = SubversionAuthorizer(self, authname) 
     
    268270 
    269271        db_str = self.config.get('trac', 'database') 
    270272        if not db_str.startswith('sqlite:'): 
    271             raise EnvironmentError, 'Can only backup sqlite databases' 
     273            raise EnvironmentError, _('Can only backup sqlite databases') 
    272274        db_name = os.path.join(self.path, db_str[7:]) 
    273275        if not dest: 
    274276            dest = '%s.%i.bak' % (db_name, self.get_version()) 
     
    335337        if dbver == db_default.db_version: 
    336338            return False 
    337339        elif dbver > db_default.db_version: 
    338             raise TracError, 'Database newer than Trac version' 
     340            raise TracError, _('Database newer than Trac version') 
    339341        return True 
    340342 
    341343    def upgrade_environment(self, db): 
     
    347349                upgrades = __import__('upgrades', globals(), locals(), [name]) 
    348350                script = getattr(upgrades, name) 
    349351            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) 
    351353                raise TracError, err 
    352354            script.do_upgrade(self.env, i, cursor) 
    353355        cursor.execute("UPDATE system SET value=%s WHERE " 
     
    367369    if not env_path: 
    368370        env_path = os.getenv('TRAC_ENV') 
    369371    if not env_path: 
    370         raise TracError, 'Missing environment variable "TRAC_ENV". Trac ' \ 
     372        raise TracError, _('Missing environment variable "TRAC_ENV". Trac ' \ 
    371373                         'requires this variable to point to a valid Trac ' \ 
    372                          'environment.' 
     374                         'environment.') 
    373375 
    374376    env = Environment(env_path) 
    375377    if env.needs_upgrade(): 
    376         raise TracError, 'The Trac Environment needs to be upgraded. Run ' \ 
    377                          'trac-admin %s upgrade"' % env_path 
     378        raise TracError, _('The Trac Environment needs to be upgraded. Run ' \ 
     379                         'trac-admin %s upgrade"') % env_path 
    378380    return env 
  • trac/attachment.py

     
    2323import time 
    2424import urllib 
    2525 
     26import trac.l10n 
     27 
    2628from trac import perm, util 
    2729from trac.core import * 
    2830from trac.env import IEnvironmentSetupParticipant 
     
    6062        cursor.close() 
    6163        if not row: 
    6264            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')) 
    6567        self.filename = row[0] 
    6668        self.description = row[1] 
    6769        self.size = row[2] and int(row[2]) or 0 
     
    110112                                   self.path, exc_info=True) 
    111113                if handle_ta: 
    112114                    db.rollback() 
    113                 raise TracError, 'Could not delete attachment' 
     115                raise TracError, _('Could not delete attachment') 
    114116 
    115117        self.env.log.info('Attachment removed: %s' % self.title) 
    116118        if handle_ta: 
     
    126128        # Maximum attachment size (in bytes) 
    127129        max_size = int(self.env.config.get('attachment', 'max_size')) 
    128130        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')) 
    131133        self.size = size 
    132134        self.time = t or time.time() 
    133135 
     
    186188        try: 
    187189            fd = open(self.path, 'rb') 
    188190        except IOError: 
    189             raise TracError('Attachment %s not found' % self.filename) 
     191            raise TracError(_('Attachment %s not found') % self.filename) 
    190192        return fd 
    191193 
    192194 
     
    247249        parent_type = req.args.get('type') 
    248250        path = req.args.get('path') 
    249251        if not parent_type or not path: 
    250             raise TracError('Bad request') 
     252            raise TracError(_('Bad request')) 
    251253        if not parent_type in ['ticket', 'wiki']: 
    252             raise TracError('Unknown attachment type') 
     254            raise TracError(_('Unknown attachment type')) 
    253255 
    254256        action = req.args.get('action', 'view') 
    255257        if action == 'new': 
     
    294296 
    295297        upload = req.args['attachment'] 
    296298        if not upload.filename: 
    297             raise TracError, 'No file uploaded' 
     299            raise TracError, _('No file uploaded') 
    298300        if hasattr(upload.file, 'fileno'): 
    299301            size = os.fstat(upload.file.fileno())[6] 
    300302        else: 
    301303            size = upload.file.len 
    302304        if size == 0: 
    303             raise TracError, 'No file uploaded' 
     305            raise TracError, _('No file uploaded') 
    304306 
    305307        filename = upload.filename.replace('\\', '/').replace(':', '/') 
    306308        filename = os.path.basename(filename) 
    307         assert filename, 'No file uploaded' 
     309        assert filename, _('No file uploaded') 
    308310 
    309311        # We try to normalize the filename to utf-8 NFC if we can. 
    310312        # Files uploaded from OS X might be in NFD. 
     
    425427             
    426428            if not is_binary(data): 
    427429                add_link(req, 'alternate', attachment.href(format='txt'), 
    428                          'Plain Text', mimetype) 
     430                         _('Plain Text'), mimetype) 
    429431 
    430432            hdf = mimeview.preview_to_hdf(req, mimetype, None, data, 
    431433                                          attachment.filename, None, 
     
    457459                params = link[idx:] 
    458460        try: 
    459461            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>') \ 
    461463                   % (util.escape(attachment.title), 
    462464                      util.escape(attachment.href() + params), 
    463465                      util.escape(label)) 
  • trac/db_default.py

     
    1414# 
    1515# Author: Daniel Lundin <daniel@edgewall.com> 
    1616 
     17import trac.l10n 
     18 
    1719from trac.config import default_dir 
    1820from trac.db import Table, Column, Index 
    1921 
     
    158160## 
    159161 
    160162reports = ( 
    161 ('Active Tickets', 
    162 """ 
     163(_('Active Tickets'), 
     164_(""" 
    163165 * List all active tickets by priority. 
    164166 * Color each row based on priority. 
    165167 * If a ticket has been accepted, a '*' is appended after the owner's name 
    166 """, 
     168"""), 
    167169""" 
    168170SELECT p.value AS __color__, 
    169171   id AS ticket, summary, component, version, milestone, t.type AS type,  
     
    177179  ORDER BY p.value, milestone, t.type, time 
    178180"""), 
    179181#---------------------------------------------------------------------------- 
    180  ('Active Tickets by Version', 
    181 """ 
     182 (_('Active Tickets by Version'), 
     183_(""" 
    182184This report shows how to color results by priority, 
    183185while grouping results by version. 
    184186 
    185187Last modification time, description and reporter are included as hidden fields 
    186188for useful RSS export. 
    187 """, 
     189"""), 
    188190""" 
    189191SELECT p.value AS __color__, 
    190192   version AS __group__, 
     
    199201  ORDER BY (version IS NULL),version, p.value, t.type, time 
    200202"""), 
    201203#---------------------------------------------------------------------------- 
    202 ('All Tickets by Milestone', 
    203 """ 
     204(_('All Tickets by Milestone'), 
     205_(""" 
    204206This report shows how to color results by priority, 
    205207while grouping results by milestone. 
    206208 
    207209Last modification time, description and reporter are included as hidden fields 
    208210for useful RSS export. 
    209 """, 
     211"""), 
    210212""" 
    211213SELECT p.value AS __color__, 
    212214   milestone||' Release' AS __group__, 
     
    221223  ORDER BY (milestone IS NULL),milestone, p.value, t.type, time 
    222224"""), 
    223225#---------------------------------------------------------------------------- 
    224 ('Assigned, Active Tickets by Owner', 
    225 """ 
     226(_('Assigned, Active Tickets by Owner'), 
     227_(""" 
    226228List assigned tickets, group by ticket owner, sorted by priority. 
    227 """, 
     229"""), 
    228230""" 
    229231 
    230232SELECT p.value AS __color__, 
     
    238240  ORDER BY owner, p.value, t.type, time 
    239241"""), 
    240242#---------------------------------------------------------------------------- 
    241 ('Assigned, Active Tickets by Owner (Full Description)', 
    242 """ 
     243(_('Assigned, Active Tickets by Owner (Full Description)'), 
     244_(""" 
    243245List tickets assigned, group by ticket owner. 
    244246This report demonstrates the use of full-row display. 
    245 """, 
     247"""), 
    246248""" 
    247249SELECT p.value AS __color__, 
    248250   owner AS __group__, 
     
    255257  ORDER BY owner, p.value, t.type, time 
    256258"""), 
    257259#---------------------------------------------------------------------------- 
    258 ('All Tickets By Milestone  (Including closed)', 
    259 """ 
     260(_('All Tickets By Milestone  (Including closed)'), 
     261_(""" 
    260262A more complex example to show how to make advanced reports. 
    261 """, 
     263"""), 
    262264""" 
    263265SELECT p.value AS __color__, 
    264266   t.milestone AS __group__, 
     
    277279        (CASE status WHEN 'closed' THEN modified ELSE (-1)*p.value END) DESC 
    278280"""), 
    279281#---------------------------------------------------------------------------- 
    280 ('My Tickets', 
    281 """ 
     282(_('My Tickets'), 
     283_(""" 
    282284This report demonstrates the use of the automatically set  
    283285$USER dynamic variable, replaced with the username of the 
    284286logged in user when executed. 
    285 """, 
     287"""), 
    286288""" 
    287289SELECT p.value AS __color__, 
    288290   (CASE status WHEN 'assigned' THEN 'Assigned' ELSE 'Owned' END) AS __group__, 
     
    296298  ORDER BY (status = 'assigned') DESC, p.value, milestone, t.type, time 
    297299"""), 
    298300#---------------------------------------------------------------------------- 
    299 ('Active Tickets, Mine first', 
    300 """ 
     301(_('Active Tickets, Mine first'), 
     302_(""" 
    301303 * List all active tickets by priority. 
    302304 * Show all tickets owned by the logged in user in a group first. 
    303 """, 
     305"""), 
    304306""" 
    305307SELECT p.value AS __color__, 
    306308   (CASE owner  
  • trac/mimeview/rst.py

     
    8181            from docutils.parsers import rst 
    8282            from docutils import __version__ 
    8383        except ImportError: 
    84             raise TracError, 'Docutils not found' 
     84            raise TracError, _('Docutils not found') 
    8585        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') \ 
    8787                             % ('0.3.3', __version__) 
    8888 
    8989        def trac_get_reference(rawtext, link, text): 
  • trac/mimeview/api.py

     
    2424except ImportError: 
    2525    from StringIO import StringIO 
    2626 
     27import trac.l10n 
     28 
    2729from trac.core import * 
    2830from trac.util import enum, escape, to_utf8 
    2931 
     
    339341    # ITextAnnotator methods 
    340342 
    341343    def get_annotation_type(self): 
    342         return 'lineno', 'Line', 'Line numbers' 
     344        return 'lineno', _('Line'), _('Line numbers') 
    343345 
    344346    def annotate_line(self, number, content): 
    345347        return '<th id="L%s"><a href="#L%s">%s</a></th>' % (number, number, 
  • trac/mimeview/silvercity.py

     
    8686            except IndexError: 
    8787                pass 
    8888        except (KeyError, AttributeError): 
    89             err = "No SilverCity lexer found for mime-type '%s'." % mimetype 
     89            err = _("No SilverCity lexer found for mime-type '%s'.") % mimetype 
    9090            raise Exception, err 
    9191 
    9292        # SilverCity generates extra empty line against some types of 
  • trac/mimeview/patch.py

     
    1515# Author: Christopher Lenz <cmlenz@gmx.de> 
    1616#         Ludvig Strigeus 
    1717 
     18import trac.l10n 
     19 
    1820from trac.core import * 
    1921from trac.mimeview.api import IHTMLPreviewRenderer 
    2022from trac.util import escape 
     
    3133 
    3234    implements(IHTMLPreviewRenderer) 
    3335 
    34     diff_cs = """ 
     36    diff_cs = _(""" 
    3537<?cs include:'macros.cs' ?> 
    3638<div class="diff"><ul class="entries"><?cs 
    3739 each:file = diff.files ?><li class="entry"> 
     
    5456  </table> 
    5557 </li><?cs /each ?> 
    5658</ul></div> 
    57 """ # diff_cs 
     59""") # diff_cs 
    5860 
    5961    # IHTMLPreviewRenderer methods 
    6062 
     
    6971        tabwidth = int(self.config.get('diff', 'tab_width')) 
    7072        d = self._diff_to_hdf(content.splitlines(), tabwidth) 
    7173        if not d: 
    72             raise TracError, 'Invalid unified diff content' 
     74            raise TracError, _('Invalid unified diff content') 
    7375        hdf = HDFWrapper(loadpaths=[self.env.get_templates_dir(), 
    7476                                    self.config.get('trac', 'templates_dir')]) 
    7577        hdf['diff.files'] = d 
  • trac/mimeview/enscript.py

     
    1717 
    1818from __future__ import generators 
    1919 
     20import trac.l10n 
     21 
    2022from trac.core import * 
    2123from trac.mimeview.api import IHTMLPreviewRenderer 
    2224from trac.util import escape, NaivePopen, Deuglifier 
     
    110112 
    111113        np = NaivePopen(cmdline, content, capturestderr=1) 
    112114        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, 
    114116                                                    np.err) 
    115117            raise Exception, err 
    116118        odata = np.out 
  • trac/mimeview/php.py

     
    1818 
    1919from __future__ import generators 
    2020 
     21import trac.l10n 
     22 
    2123from trac.core import * 
    2224from trac.mimeview.api import IHTMLPreviewRenderer 
    2325from trac.util import Deuglifier, NaivePopen 
     
    6163 
    6264        np = NaivePopen(cmdline, content, capturestderr=1) 
    6365        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, 
    6567                                                    np.err) 
    6668            raise Exception, err 
    6769        odata = ''.join(np.out.splitlines()[1:-1]) 
    6870        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.  ' \ 
    7072                             'Trac requires the CLI version for syntax ' \ 
    71                              'highlighting.' 
     73                             'highlighting.') 
    7274 
    7375        html = PhpDeuglifier().format(odata) 
    7476        for line in html.split('<br />'): 
  • trac/ticket/api.py

     
    1616 
    1717from __future__ import generators 
    1818 
     19import trac.l10n 
     20 
    1921from trac import util 
    2022from trac.core import * 
    2123from trac.perm import IPermissionRequestor 
     
    4951        fields = [] 
    5052 
    5153        # Basic text fields 
     54        bflabel = { 'summary': _('Summary'), 'reporter': _('Reporter') } 
    5255        for name in ('summary', 'reporter'): 
    53             field = {'name': name, 'type': 'text', 'label': name.title()} 
     56            field = {'name': name, 'type': 'text', 'label': bflabel[name] } 
    5457            fields.append(field) 
    5558 
    5659        # Owner field, can be text or drop-down depending on configuration 
    57         field = {'name': 'owner', 'label': 'Owner'} 
     60        field = {'name': 'owner', 'label': _('Owner') } 
    5861        if self.config.get('ticket', 'restrict_owner').lower() in util.TRUE: 
    5962            field['type'] = 'select' 
    6063            users = [] 
     
    6871 
    6972        # Description 
    7073        fields.append({'name': 'description', 'type': 'textarea', 
    71                        'label': 'Description'}) 
     74                       'label': _('Description')}) 
    7275 
    7376        # 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        } 
    7483        selects = [('type', model.Type), ('status', model.Status), 
    7584                   ('priority', model.Priority), ('milestone', model.Milestone), 
    7685                   ('component', model.Component), ('version', model.Version), 
     
    8190                # Fields without possible values are treated as if they didn't 
    8291                # exist 
    8392                continue 
    84             field = {'name': name, 'type': 'select', 'label': name.title(), 
     93            field = {'name': name, 'type': 'select', 'label': slabel[name], 
    8594                     'value': self.config.get('ticket', 'default_' + name), 
    8695                     'options': options} 
    8796            if name in ('status', 'resolution'): 
     
    91100            fields.append(field) 
    92101 
    93102        # Advanced text fields 
     103        aflabel = { 'keywords': _('Keywords'), 'cc': _('Cc')} 
    94104        for name in ('keywords', 'cc', ): 
    95             field = {'name': name, 'type': 'text', 'label': name.title()} 
     105            field = {'name': name, 'type': 'text', 'label': aflabel[name]} 
    96106            fields.append(field) 
    97107 
    98108        custom_fields = self.get_custom_fields() 
     
    162172 
    163173    def get_search_filters(self, req): 
    164174        if req.perm.has_permission('TICKET_VIEW'): 
    165             yield ('ticket', 'Tickets') 
     175            yield ('ticket', _('Tickets')) 
    166176 
    167177    def get_search_results(self, req, query, filters): 
    168178        if not 'ticket' in filters: 
  • trac/ticket/web_ui.py

     
    1919import re 
    2020import time 
    2121 
     22import trac.l10n 
     23 
    2224from trac import util 
    2325from trac.attachment import attachment_to_hdf, Attachment 
    2426from trac.core import * 
     
    6769        if not req.perm.has_permission('TICKET_CREATE'): 
    6870            return 
    6971        yield 'mainnav', 'newticket', \ 
    70               '<a href="%s" accesskey="7">New Ticket</a>' \ 
     72              _('<a href="%s" accesskey="7">New Ticket</a>') \ 
    7173              % (self.env.href.newticket()) 
    7274 
    7375    # IRequestHandler methods 
     
    9193            description = wiki_to_html(ticket['description'], self.env, req, db) 
    9294            req.hdf['newticket.description_preview'] = description 
    9395 
    94         req.hdf['title'] = 'New Ticket' 
     96        req.hdf['title'] = _('New Ticket') 
    9597        req.hdf['newticket'] = dict(zip(ticket.values.keys(), 
    9698                                        [util.escape(value) for value 
    9799                                         in ticket.values.values()])) 
     
    115117                        'resolution'): 
    116118                field['skip'] = True 
    117119            elif name == 'owner': 
    118                 field['label'] = 'Assign to' 
     120                field['label'] = _('Assign to') 
    119121            elif name == 'milestone': 
    120122                # Don't make completed milestones available for selection 
    121123                options = field['options'][:] 
     
    133135 
    134136    def _do_create(self, req, db): 
    135137        if not req.args.get('summary'): 
    136             raise TracError('Tickets must contain a summary.') 
     138            raise TracError(_('Tickets must contain a summary.')) 
    137139 
    138140        ticket = Ticket(self.env, db=db) 
    139141        ticket.values.setdefault('reporter', util.get_reporter_id(req)) 
     
    220222            if str(id) in tickets: 
    221223                idx = tickets.index(str(ticket.id)) 
    222224                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]) 
    227229                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']) 
    233235 
    234236        add_stylesheet(req, 'common/css/ticket.css') 
    235237        return 'ticket.cs', None 
     
    238240 
    239241    def get_timeline_filters(self, req): 
    240242        if req.perm.has_permission('TICKET_VIEW'): 
    241             yield ('ticket', 'Ticket changes') 
     243            yield ('ticket', _('Ticket changes')) 
    242244 
    243245    def get_timeline_events(self, req, start, stop, filters): 
    244246        if 'ticket' in filters: 
     
    276278            cursor = db.cursor() 
    277279            cursor.execute(" UNION ALL ".join(sql), (start, stop, start, stop, 
    278280                           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')} 
    283285            for t, id, resolution, status, type, message, author, summary \ 
    284286                    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') % ( 
    286288                        util.escape(summary), id, type, verbs[status], 
    287289                        util.escape(author)) 
    288290                if format == 'rss': 
     
    310312        if req.perm.has_permission('TICKET_CHGPROP'): 
    311313            # TICKET_CHGPROP gives permission to edit the ticket 
    312314            if not req.args.get('summary'): 
    313                 raise TracError('Tickets must contain summary.') 
     315                raise TracError(_('Tickets must contain summary.')) 
    314316 
    315317            if req.args.has_key('description') or req.args.has_key('reporter'): 
    316318                req.perm.assert_permission('TICKET_ADMIN') 
     
    321323 
    322324        # Mid air collision? 
    323325        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. " 
    325327                            "This ticket has been modified by someone else " 
    326                             "since you started", 'Mid Air Collision') 
     328                            "since you started"), _('Mid Air Collision')) 
    327329 
    328330        # Do any action on the ticket? 
    329331        action = req.args.get('action') 
    330332        actions = TicketSystem(self.env).get_available_actions(ticket, req.perm) 
    331333        if action not in actions: 
    332             raise TracError('Invalid action') 
     334            raise TracError(_('Invalid action')) 
    333335 
    334336        # TODO: this should not be hard-coded like this 
    335337        if action == 'accept': 
     
    443445        if self.config.get('timeline', 'ticket_show_details') in util.FALSE: 
    444446            return 
    445447        if req.perm.has_permission('TICKET_VIEW'): 
    446             yield ('ticket_details', 'Ticket details', False) 
     448            yield ('ticket_details', _('Ticket details'), False) 
    447449 
    448450    def get_timeline_events(self, req, start, stop, filters): 
    449451        if 'ticket_details' in filters: 
     
    481483                    href = self.env.abs_href.ticket(id) 
    482484                else: 
    483485                    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') \ 
    485487                        % (util.escape(summary), id, type, util.escape(author)) 
    486488                message = '' 
    487489                if len(field_changes) > 0: 
    488                     message = ', '.join(field_changes) + ' changed.<br />' 
     490                    message = ', '.join(field_changes) + _(' changed.<br />') 
    489491                message += wiki_to_oneliner(comment, self.env, db, 
    490492                                            shorten=True, absurls=absurls) 
    491493                yield 'editedticket', href, title, t, author, message 
  • trac/ticket/report.py

     
    1919import types 
    2020import urllib 
    2121 
     22import trac.l10n 
     23 
    2224from trac import util 
    2325from trac.core import * 
    2426from trac.perm import IPermissionRequestor 
     
    7375    def get_navigation_items(self, req): 
    7476        if not req.perm.has_permission('REPORT_VIEW'): 
    7577            return 
    76         yield 'mainnav', 'tickets', '<a href="%s">View Tickets</a>' \ 
     78        yield 'mainnav', 'tickets', _('<a href="%s">View Tickets</a>') \ 
    7779              % util.escape(self.env.href.report()) 
    7880 
    7981    # IPermissionRequestor methods   
     
    121123               return resp 
    122124 
    123125        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')) 
    125127 
    126128            # Kludge: Reset session vars created by query module so that the 
    127129            # query navigation links on the ticket page don't confuse the user 
     
    191193        cursor.execute("SELECT title FROM report WHERE id = %s", (id,)) 
    192194        row = cursor.fetchone() 
    193195        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]) 
    197199        req.hdf['report'] = { 
    198200            'id': id, 
    199201            'mode': 'delete', 
     
    222224            title += ' (copy)' 
    223225 
    224226        if copy or id == -1: 
    225             req.hdf['title'] = 'Create New Report' 
     227            req.hdf['title'] = _('Create New Report') 
    226228            req.hdf['report.href'] = self.env.href.report() 
    227229            req.hdf['report.action'] = 'new' 
    228230        else: 
    229             req.hdf['title'] = 'Edit Report {%d} %s' % (id, title) 
     231            req.hdf['title'] = _('Edit Report {%d} %s') % (id, title) 
    230232            req.hdf['report.href'] = self.env.href.report(id) 
    231233            req.hdf['report.action'] = 'edit' 
    232234 
     
    272274        try: 
    273275            cols, rows = self.execute_report(req, db, id, sql, args) 
    274276        except Exception, e: 
    275             req.hdf['report.message'] = 'Report execution failed: %s' % e 
     277            req.hdf['report.message'] = _('Report execution failed: %s') % e 
    276278            return 'report.cs', None 
    277279 
    278280        # Convert the header info to HDF-format 
     
    386388        href = '' 
    387389        if params: 
    388390            href = '&' + urllib.urlencode(params) 
    389         add_link(req, 'alternate', '?format=rss' + href, 'RSS Feed', 
     391        add_link(req, 'alternate', '?format=rss' + href, _('RSS Feed'), 
    390392                 'application/rss+xml', 'rss') 
    391393        add_link(req, 'alternate', '?format=csv' + href, 
    392                  'Comma-delimited Text', 'text/plain') 
     394                 _('Comma-delimited Text'), 'text/plain') 
    393395        add_link(req, 'alternate', '?format=tab' + href, 
    394                  'Tab-delimited Text', 'text/plain') 
     396                 _('Tab-delimited Text'), 'text/plain') 
    395397        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'), 
    397399                     'text/plain') 
    398400 
    399401    def execute_report(self, req, db, id, sql, args): 
     
    418420        if id == -1: 
    419421            # If no particular report was requested, display 
    420422            # a list of available reports instead 
    421             title = 'Available Reports' 
     423            title = _('Available Reports') 
    422424            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.') 
    424426        else: 
    425427            cursor = db.cursor() 
    426428            cursor.execute("SELECT title,sql,description from report " 
  • trac/ticket/model.py

     
    7474                       % ','.join(std_fields), (tkt_id,)) 
    7575        row = cursor.fetchone() 
    7676        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')) 
    7979 
    8080        self.id = tkt_id 
    8181        for i in range(len(std_fields)): 
     
    410410                           "WHERE name=%s", (name,)) 
    411411            row = cursor.fetchone() 
    412412            if not row: 
    413                 raise TracError, 'Component %s does not exist.' % name 
     413                raise TracError, _('Component %s does not exist.') % name 
    414414            self.name = self._old_name = name 
    415415            self.owner = row[0] or None 
    416416            self.description = row[1] or '' 
     
    517517                       "FROM milestone WHERE name=%s", (name,)) 
    518518        row = cursor.fetchone() 
    519519        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')) 
    522522        self.name = row[0] 
    523523        self.due = row[1] and int(row[1]) or 0 
    524524        self.completed = row[2] and int(row[2]) or 0 
     
    625625                           "WHERE name=%s", (name,)) 
    626626            row = cursor.fetchone() 
    627627            if not row: 
    628                 raise TracError, 'Version %s does not exist.' % name 
     628                raise TracError, _('Version %s does not exist.') % name 
    629629            self.name = self._old_name = name 
    630630            self.time = row[0] and int(row[0]) or None 
    631631            self.description = row[1] or '' 
  • trac/ticket/roadmap.py

     
    1818import re 
    1919from time import localtime, strftime, time 
    2020 
     21import trac.l10n 
     22 
    2123from trac import __version__ 
    2224from trac.core import * 
    2325from trac.perm import IPermissionRequestor 
     
    128130    def get_navigation_items(self, req): 
    129131        if not req.perm.has_permission('ROADMAP_VIEW'): 
    130132            return 
    131         yield 'mainnav', 'roadmap', '<a href="%s" accesskey="3">Roadmap</a>' \ 
     133        yield 'mainnav', 'roadmap', _('<a href="%s" accesskey="3">Roadmap</a>') \ 
    132134                                    % self.env.href.roadmap() 
    133135 
    134136    # IPermissionRequestor methods 
     
    143145 
    144146    def process_request(self, req): 
    145147        req.perm.assert_permission('ROADMAP_VIEW') 
    146         req.hdf['title'] = 'Roadmap' 
     148        req.hdf['title'] = _('Roadmap') 
    147149 
    148150        showall = req.args.get('show') == 'all' 
    149151        req.hdf['roadmap.showall'] = showall 
     
    301303 
    302304    def get_timeline_filters(self, req): 
    303305        if req.perm.has_permission('MILESTONE_VIEW'): 
    304             yield ('milestone', 'Milestones') 
     306            yield ('milestone', _('Milestones')) 
    305307 
    306308    def get_timeline_events(self, req, start, stop, filters): 
    307309        if 'milestone' in filters: 
     
    312314                           "WHERE completed>=%s AND completed<=%s", 
    313315                           (start, stop,)) 
    314316            for completed,name,description in cursor: 
    315                 title = 'Milestone <em>%s</em> completed' % escape(name) 
     317                title = _('Milestone <em>%s</em> completed') % escape(name) 
    316318                if format == 'rss': 
    317319                    href = self.env.abs_href.milestone(name) 
    318320                    message = wiki_to_html(description or '--', self.env, db, 
     
    382384            req.perm.assert_permission('MILESTONE_CREATE') 
    383385 
    384386        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')) 
    387389        milestone.name = req.args.get('name') 
    388390 
    389391        due = req.args.get('duedate', '') 
    390392        try: 
    391393            milestone.due = due and parse_date(due) or 0 
    392394        except ValueError, e: 
    393             raise TracError(e, 'Invalid Date Format') 
     395            raise TracError(e, _('Invalid Date Format')) 
    394396        if req.args.has_key('completed'): 
    395397            completed = req.args.get('completeddate', '') 
    396398            try: 
    397399                milestone.completed = completed and parse_date(completed) or 0 
    398400            except ValueError, e: 
    399                 raise TracError(e, 'Invalid Date Format') 
     401                raise TracError(e, _('Invalid Date Format')) 
    400402            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')) 
    403405        else: 
    404406            milestone.completed = 0 
    405407 
     
    417419    def _render_confirm(self, req, db, milestone): 
    418420        req.perm.assert_permission('MILESTONE_DELETE') 
    419421 
    420         req.hdf['title'] = 'Milestone %s' % milestone.name 
     422        req.hdf['title'] = _('Milestone %s') % milestone.name 
    421423        req.hdf['milestone'] = milestone_to_hdf(self.env, db, req, milestone) 
    422424        req.hdf['milestone.mode'] = 'delete' 
    423425 
     
    429431    def _render_editor(self, req, db, milestone): 
    430432        if milestone.exists: 
    431433            req.perm.assert_permission('MILESTONE_MODIFY') 
    432             req.hdf['title'] = 'Milestone %s' % milestone.name 
     434            req.hdf['title'] = _('Milestone %s') % milestone.name 
    433435            req.hdf['milestone.mode'] = 'edit' 
    434436        else: 
    435437            req.perm.assert_permission('MILESTONE_CREATE') 
    436             req.hdf['title'] = 'New Milestone' 
     438            req.hdf['title'] = _('New Milestone') 
    437439            req.hdf['milestone.mode'] = 'new' 
    438440 
    439441        from trac.util import get_date_format_hint, get_datetime_format_hint 
     
    443445        req.hdf['milestone.datetime_now'] = format_datetime() 
    444446 
    445447    def _render_view(self, req, db, milestone): 
    446         req.hdf['title'] = 'Milestone %s' % milestone.name 
     448        req.hdf['title'] = _('Milestone %s') % milestone.name 
    447449        req.hdf['milestone.mode'] = 'view' 
    448450 
    449451        req.hdf['milestone'] = milestone_to_hdf(self.env, db, req, milestone) 
  • trac/ticket/query.py

     
    1818import re 
    1919import time 
    2020 
     21import trac.l10n 
     22 
    2123from trac.core import * 
    2224from trac.perm import IPermissionRequestor 
    2325from trac.ticket import Ticket, TicketSystem 
     
    5860        for filter in filters: 
    5961            filter = filter.split('=') 
    6062            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 "="') 
    6365            field,values = filter 
    6466            if not field: 
    65                 raise QuerySyntaxError, 'Query filter requires field name' 
     67                raise QuerySyntaxError, _('Query filter requires field name') 
    6668            values = values.split('|') 
    6769            mode, neg = '', '' 
    6870            if field[-1] in ('~', '^', '$'): 
     
    322324        from trac.ticket.report import ReportModule 
    323325        if req.perm.has_permission('TICKET_VIEW') and \ 
    324326           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>') \ 
    326328                  % escape(self.env.href.query()) 
    327329 
    328330    # IRequestHandler methods 
     
    359361                    del req.session[var] 
    360362            req.redirect(query.get_href()) 
    361363 
    362         add_link(req, 'alternate', query.get_href('rss'), 'RSS Feed', 
     364        add_link(req, 'alternate', query.get_href('rss'), _('RSS Feed'), 
    363365                 'application/rss+xml', 'rss') 
    364366        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'), 
    367369                 'text/plain') 
    368370 
    369371        constraints = {} 
     
    436438    def _get_constraint_modes(self): 
    437439        modes = {} 
    438440        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': "!"} 
    445447        ] 
    446448        modes['select'] = [ 
    447             {'name': "is", 'value': ""}, 
    448             {'name': "is not", 'value': "!"} 
     449            {'name': _("is"), 'value': ""}, 
     450            {'name': _("is not"), 'value': "!"} 
    449451        ] 
    450452        return modes 
    451453 
    452454    def display_html(self, req, query): 
    453         req.hdf['title'] = 'Custom Query' 
     455        req.hdf['title'] = _('Custom Query') 
    454456        add_stylesheet(req, 'common/css/report.css') 
    455457 
    456458        db = self.env.get_db_cnx() 
     
    619621    implements(IWikiMacroProvider) 
    620622 
    621623    def get_macros(self): 
    622         yield 'TicketQuery' 
     624        yield _('TicketQuery') 
    623625 
    624626    def get_macro_description(self, name): 
    625627        import inspect 
  • trac/versioncontrol/svn_fs.py

     
    1616 
    1717from __future__ import generators 
    1818 
     19import trac.l10n 
     20 
    1921from trac.util import TracError 
    2022from trac.versioncontrol import Changeset, Node, Repository 
    2123 
     
    179181    def __init__(self, path, authz, log): 
    180182        if core.SVN_VER_MAJOR < 1: 
    181183            raise TracError, \ 
    182                   "Subversion >= 1.0 required: Found %d.%d.%d" % \ 
     184                  _("Subversion >= 1.0 required: Found %d.%d.%d") % \ 
    183185                  (core.SVN_VER_MAJOR, core.SVN_VER_MINOR, core.SVN_VER_MICRO) 
    184186 
    185187        self.pool = Pool() 
     
    190192        self.path = repos.svn_repos_find_root_path(path, self.pool()) 
    191193        if self.path is None: 
    192194            raise TracError, \ 
    193                   "%s does not appear to be a Subversion repository." % path 
     195                  _("%s does not appear to be a Subversion repository.") % path 
    194196 
    195197        self.repos = repos.svn_repos_open(self.path, self.pool()) 
    196198        self.fs_ptr = repos.svn_repos_fs(self.repos) 
     
    239241        if rev is None: 
    240242            rev = self.youngest_rev 
    241243        elif rev > self.youngest_rev: 
    242             raise TracError, "Revision %s doesn't exist yet" % rev 
     244            raise TracError, _("Revision %s doesn't exist yet") % rev 
    243245        return rev 
    244246 
    245247    def close(self): 
     
    366368        self.root = fs.revision_root(fs_ptr, rev, self.pool()) 
    367369        node_type = fs.check_path(self.root, self.scoped_path, self.pool()) 
    368370        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) 
    370372        self.created_rev = fs.node_created_rev(self.root, self.scoped_path, 
    371373                                               self.pool()) 
    372374        self.created_path = fs.node_created_path(self.root, self.scoped_path, 
  • trac/versioncontrol/cache.py

     
    1616 
    1717from __future__ import generators 
    1818 
     19import trac.l10n 
     20 
    1921from trac.util import TracError 
    2022from trac.versioncontrol import Changeset, Node, Repository, Authorizer 
    2123 
     
    5759            previous_repository_dir = self.name 
    5860 
    5961        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.")) 
    6264 
    6365        youngest_stored = self.repos.get_youngest_rev_in_cache(self.db) 
    6466 
     
    139141            date, author, message = row 
    140142            Changeset.__init__(self, rev, message, author, int(date)) 
    141143        else: 
    142             raise TracError, "No changeset %s in the repository" % rev 
     144            raise TracError, _("No changeset %s in the repository") % rev 
    143145 
    144146    def get_changes(self): 
    145147        cursor = self.db.cursor() 
  • trac/versioncontrol/web_ui/util.py

     
    1717import re 
    1818import urllib 
    1919 
     20import trac.l10n 
     21 
    2022from trac.util import escape, format_datetime, pretty_timedelta, shorten_line, \ 
    2123                      TracError 
    2224from trac.wiki import wiki_to_html, wiki_to_oneliner 
     
    8688    try:  
    8789        return repos.get_node(path, rev)  
    8890    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> '  
    9092                        'in the repository history to see if that path ' 
    91                         'existed but was later removed.</p>' 
     93                        'existed but was later removed.</p>') 
    9294                        % escape(env.href.log(path, rev=rev, 
    9395                                              mode='path_history'))) 
  • trac/versioncontrol/web_ui/changeset.py

     
    2020import time 
    2121import re 
    2222 
     23import trac.l10n 
     24 
    2325from trac import mimeview, util 
    2426from trac.core import * 
    2527from trac.perm import IPermissionRequestor 
     
    9799 
    98100    def get_timeline_filters(self, req): 
    99101        if req.perm.has_permission('CHANGESET_VIEW'): 
    100             yield ('changeset', 'Repository checkins') 
     102            yield ('changeset', _('Repository checkins')) 
    101103 
    102104    def get_timeline_events(self, req, start, stop, filters): 
    103105        if 'changeset' in filters: 
     
    119121                if chgset.date < stop: 
    120122                    message = chgset.message or '--' 
    121123                    if format == 'rss': 
    122                         title = 'Changeset <em>[%s]</em>: %s' \ 
     124                        title = _('Changeset <em>[%s]</em>: %s') \ 
    123125                                % (util.escape(chgset.rev), 
    124126                                   util.escape(util.shorten_line(message))) 
    125127                        href = self.env.abs_href.changeset(chgset.rev) 
    126128                        message = wiki_to_html(message, self.env, db, 
    127129                                               absurls=True) 
    128130                    else: 
    129                         title = 'Changeset <em>[%s]</em> by %s' \ 
     131                        title = _('Changeset <em>[%s]</em> by %s') \ 
    130132                                % (util.escape(chgset.rev), 
    131133                                   util.escape(chgset.author)) 
    132134                        href = self.env.href.changeset(chgset.rev) 
     
    378380 
    379381    def get_search_filters(self, req): 
    380382        if req.perm.has_permission('CHANGESET_VIEW'): 
    381             yield ('changeset', 'Changesets') 
     383            yield ('changeset', _('Changesets')) 
    382384 
    383385    def get_search_results(self, req, query, filters): 
    384386        if not 'changeset' in filters: 
  • trac/versioncontrol/web_ui/log.py

     
    1919import re 
    2020import urllib 
    2121 
     22import trac.l10n 
     23 
    2224from trac import util 
    2325from trac.core import * 
    2426from trac.perm import IPermissionRequestor 
     
    124126            previous_path = old_path 
    125127        if info == []: 
    126128            # 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')) 
    130132 
    131133        def make_log_href(path, **args): 
    132134            link_rev = rev 
  • trac/versioncontrol/web_ui/browser.py

     
    1818import re 
    1919import urllib 
    2020 
     21import trac.l10n 
     22 
    2123from trac import util 
    2224from trac.core import * 
    2325from trac.mimeview import get_mimetype, is_binary, detect_unicode, Mimeview 
     
    6163    def get_navigation_items(self, req): 
    6264        if not req.perm.has_permission('BROWSER_VIEW'): 
    6365            return 
    64         yield 'mainnav', 'browser', '<a href="%s">Browse Source</a>' \ 
     66        yield 'mainnav', 'browser', _('<a href="%s">Browse Source</a>') \ 
    6567              % util.escape(self.env.href.browser()) 
    6668 
    6769    # IPermissionRequestor methods 
  • trac/Settings.py

     
    1616 
    1717from __future__ import generators 
    1818 
     19import trac.l10n 
     20 
    1921from trac.core import * 
    2022from trac.util import escape 
    2123from trac.web import IRequestHandler 
     
    3335        return 'settings' 
    3436 
    3537    def get_navigation_items(self, req): 
    36         yield 'metanav', 'settings', '<a href="%s">Settings</a>' \ 
     38        yield 'metanav', 'settings', _('<a href="%s">Settings</a>') \ 
    3739              % escape(self.env.href.settings()) 
    3840 
    3941    # IRequestHandler methods 
     
    5052            elif action == 'load': 
    5153                self._do_load(req) 
    5254 
    53         req.hdf['title'] = 'Settings' 
     55        req.hdf['title'] = _('Settings') 
    5456        req.hdf['settings'] = req.session 
    5557        if req.authname == 'anonymous': 
    5658            req.hdf['settings.session_id'] = req.session.sid 
  • trac/scripts/admin.py

     
    2727import urllib 
    2828 
    2929import trac 
     30 
     31import trac.l10n 
     32 
    3033from trac import perm, util, db_default 
    3134from trac.config import default_dir 
    3235from trac.env import Environment 
     
    730733 
    731734    def _do_wiki_import(self, filename, title, cursor=None): 
    732735        if not os.path.isfile(filename): 
    733             raise Exception, '%s is not a file' % filename 
     736            raise Exception, _('%s is not a file') % filename 
    734737 
    735738        f = open(filename,'r') 
    736739        data = util.to_utf8(f.read()) 
     
    766769            print text 
    767770        else: 
    768771            if os.path.isfile(filename): 
    769                 raise Exception("File '%s' exists" % filename) 
     772                raise Exception(_("File '%s' exists") % filename) 
    770773            f = open(filename,'w') 
    771774            f.write(text) 
    772775            f.close() 
  • trac/perm.py

     
    1818 
    1919"""Management of permissions.""" 
    2020 
     21import trac.l10n 
     22 
    2123from trac.core import * 
    2224 
    2325 
     
    8688        """Grant the user with the given name permission to perform to specified 
    8789        action.""" 
    8890        if action.isupper() and action not in self.get_actions(): 
    89             raise TracError, '%s is not a valid action.' % action 
     91            raise TracError, _('%s is not a valid action.') % action 
    9092 
    9193        self.store.grant_permission(username, action) 
    9294 
     
    9496        """Revokes the permission of the specified user to perform an action.""" 
    9597        # TODO: Validate that this permission does in fact exist 
    9698        if action.isupper() and action not in self.get_actions(): 
    97             raise TracError, '%s is not a valid action.' % action 
     99            raise TracError, _('%s is not a valid action.') % action 
    98100 
    99101        self.store.revoke_permission(username, action) 
    100102 
     
    169171        for store in self.stores: 
    170172            if store.__class__.__name__ == selected_store: 
    171173                return store 
    172         raise TracError, 'Invalid permission store "%s"' % selected_store 
     174        raise TracError, _('Invalid permission store "%s"') % selected_store 
    173175    store = property(fget=lambda self: self._get_store()) 
    174176 
    175177 
  • trac/Search.py

     
    1818import re 
    1919import time 
    2020 
     21import trac.l10n 
     22 
    2123from trac.core import * 
    2224from trac.perm import IPermissionRequestor 
    2325from trac.util import TracError, escape, format_datetime 
     
    107109    def get_navigation_items(self, req): 
    108110        if not req.perm.has_permission('SEARCH_VIEW'): 
    109111            return 
    110         yield 'mainnav', 'search', '<a href="%s" accesskey="4">Search</a>' \ 
     112        yield 'mainnav', 'search', _('<a href="%s" accesskey="4">Search</a>') \ 
    111113              % (self.env.href.search()) 
    112114 
    113115    # IPermissionRequestor methods 
     
    149151                query = query[1:] 
    150152            # Refuse queries that obviously would result in a huge result set 
    151153            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')) 
    155157            results = [] 
    156158            for source in self.search_sources: 
    157159                results += list(source.get_search_results(req, query, filters)) 
     
    161163            n_pages = n / page_size + 1 
    162164            results = results[(page-1) * page_size: page * page_size] 
    163165 
    164             req.hdf['title'] = 'Search Results' 
     166            req.hdf['title'] = _('Search Results') 
    165167            req.hdf['search.q'] = req.args.get('q').replace('"', "&#34;") 
    166168            req.hdf['search.page'] = page 
    167169            req.hdf['search.n_hits'] = n 
     
    171173                next_href = self.env.href.search(zip(filters, 
    172174                                                     ['on'] * len(filters)), 
    173175                                                 q=query, page=page + 1) 
    174                 add_link(req, 'next', next_href, 'Next Page') 
     176                add_link(req, 'next', next_href, _('Next Page')) 
    175177            if page > 1: 
    176178                prev_href = self.env.href.search(zip(filters, 
    177179                                                     ['on'] * len(filters)), 
    178180                                                 q=query, page=page - 1) 
    179                 add_link(req, 'prev', prev_href, 'Previous Page') 
     181                add_link(req, 'prev', prev_href, _('Previous Page')) 
    180182            req.hdf['search.page_href'] = escape( 
    181183                self.env.href.search(zip(filters, ['on'] * len(filters)), 
    182184                                     q=query)) 
  • trac/Timeline.py

     
    2020import re 
    2121import time 
    2222 
     23import trac.l10n 
     24 
    2325from trac.core import * 
    2426from trac.perm import IPermissionRequestor 
    2527from trac.util import enum, escape, format_date, format_time, http_date 
     
    7072    def get_navigation_items(self, req): 
    7173        if not req.perm.has_permission('TIMELINE_VIEW'): 
    7274            return 
    73         yield 'mainnav', 'timeline', '<a href="%s" accesskey="2">Timeline</a>' \ 
     75        yield 'mainnav', 'timeline', _('<a href="%s" accesskey="2">Timeline</a>') \ 
    7476                                     % self.env.href.timeline() 
    7577 
    7678    # IPermissionRequestor methods 
     
    140142        if maxrows and len(events) > maxrows: 
    141143            del events[maxrows:] 
    142144 
    143         req.hdf['title'] = 'Timeline' 
     145        req.hdf['title'] = _('Timeline') 
    144146 
    145147        # Get the email addresses of all known users 
    146148        email_map = {} 
  • trac/Notify.py

     
    1414# 
    1515# Author: Daniel Lundin <daniel@edgewall.com> 
    1616 
     17import trac.l10n 
     18 
    1719from trac.__init__ import __version__ 
    1820from trac.core import TracError 
    1921from trac.util import CRLF, TRUE, FALSE, enum, wrap 
     
    9698        self.replyto_email = self.config.get('notification', 'smtp_replyto') 
    9799        self.from_email = self.from_email or self.replyto_email 
    98100        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 />' 
    100102                            'Both <b>notification.from</b> and' 
    101103                            ' <b>notification.reply_to</b> are unspecified' 
    102                             ' in configuration.', 
    103                             'SMTP Notification Error') 
     104                            ' in configuration.'), 
     105                            _('SMTP Notification Error')) 
    104106 
    105107        # Authentication info (optional) 
    106108        self.user_name = self.config.get('notification', 'smtp_user') 
     
    127129        msg = MIMEMultipart() 
    128130        msg.attach(MIMEText(body, 'plain', 'utf-8')) 
    129131        msg.epilogue = '' 
    130         msg['X-Mailer'] = 'Trac %s, by Edgewall Software' % __version__ 
     132        msg['X-Mailer'] = _('Trac %s, by Edgewall Software') % __version__ 
    131133        msg['X-Trac-Version'] =  __version__ 
    132134        projname = self.config.get('project','name') 
    133135        msg['X-Trac-Project'] =  projname 
     
    192194                    old_descr = wrap(old, self.COLS, '> ', '> ', CRLF) 
    193195                    old_descr = old_descr.replace(2*CRLF, CRLF + '>' + CRLF) 
    194196                    cdescr = CRLF 
    195                     cdescr += 'Old description:' + 2*CRLF + old_descr + 2*CRLF 
    196                     cdescr += 'New description:' + 2*CRLF + new_descr + CRLF 
     197                    cdescr += _('Old description:') + 2*CRLF + old_descr + 2*CRLF 
     198                    cdescr += _('New description:') + 2*CRLF + new_descr + CRLF 
    197199                    self.hdf['email.changes_descr'] = cdescr 
    198200                else: 
    199201                    newv = new 
  • trac/About.py

     
    2020from __future__ import generators 
    2121import re 
    2222 
     23import trac.l10n 
     24 
    2325from trac.core import * 
    2426from trac.perm import IPermissionRequestor 
    2527from trac.web import IRequestHandler 
     
    3133 
    3234    implements(INavigationContributor, IPermissionRequestor, IRequestHandler) 
    3335 
    34     about_cs = """ 
     36    about_cs = _(""" 
    3537<?cs include "header.cs"?> 
    3638<div id="ctxtnav" class="nav"> 
    3739 <h2>About Navigation</h2> 
     
    131133 <?cs /if ?> 
    132134</div> 
    133135<?cs include "footer.cs"?> 
    134 """ # about_cs 
     136""") # about_cs 
    135137 
    136138    # INavigationContributor methods 
    137139 
     
    139141        return 'about' 
    140142 
    141143    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>') \ 
    143145              % self.env.href.about() 
    144146 
    145147    # IPermissionRequestor methods 
     
    158160 
    159161    def process_request(self, req): 
    160162        page = req.args.get('page', 'default') 
    161         req.hdf['title'] = 'About Trac' 
     163        req.hdf['title'] = _('About Trac') 
    162164        if req.perm.has_permission('CONFIG_VIEW'): 
    163165            req.hdf['about.config_href'] = self.env.href.about('config') 
    164166            req.hdf['about.plugins_href'] = self.env.href.about('plugins') 
  • trac/wiki/web_ui.py

     
    2020import re 
    2121import StringIO 
    2222 
     23import trac.l10n 
     24 
    2325from trac.attachment import attachment_to_hdf, Attachment 
    2426from trac.core import * 
    2527from trac.perm import IPermissionRequestor 
     
    4749    def get_navigation_items(self, req): 
    4850        if not req.perm.has_permission('WIKI_VIEW'): 
    4951            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>') \ 
    5153              % 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>') \ 
    5355              % escape(self.env.href.wiki()) 
    5456 
    5557    # IPermissionRequestor methods 
     
    122124 
    123125    def get_timeline_filters(self, req): 
    124126        if req.perm.has_permission('WIKI_VIEW'): 
    125             yield ('wiki', 'Wiki changes') 
     127            yield ('wiki', _('Wiki changes')) 
    126128 
    127129    def get_timeline_events(self, req, start, stop, filters): 
    128130        if 'wiki' in filters: 
     
    133135                           "FROM wiki WHERE time>=%s AND time<=%s", 
    134136                           (start, stop)) 
    135137            for t,name,comment,author in cursor: 
    136                 title = '<em>%s</em> edited by %s' % ( 
     138                title = _('<em>%s</em> edited by %s') % ( 
    137139                        escape(name), escape(author)) 
    138140                if format == 'rss': 
    139141                    href = self.env.abs_href.wiki(name) 
     
    211213        req.perm.assert_permission('WIKI_VIEW') 
    212214 
    213215        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") \ 
    215217                             % (req.args.get('version'), page.name) 
    216218 
    217219        add_stylesheet(req, 'common/css/diff.css') 
     
    293295        else: 
    294296            editrows = req.session.get('wiki_editrows', '20') 
    295297 
    296         req.hdf['title'] = escape(page.name) + ' (edit)' 
     298        req.hdf['title'] = escape(page.name) + _(' (edit)') 
    297299        info = { 
    298300            'page_source': escape(page.text), 
    299301            'version': page.version, 
     
    321323        req.perm.assert_permission('WIKI_VIEW') 
    322324 
    323325        if not page.exists: 
    324             raise TracError, "Page %s does not exist" % page.name 
     326            raise TracError, _("Page %s does not exist") % page.name 
    325327 
    326         req.hdf['title'] = escape(page.name) + ' (history)' 
     328        req.hdf['title'] = escape(page.name) + _(' (history)') 
    327329 
    328330        history = [] 
    329331        for version, t, author, comment, ipnr in page.get_history(): 
     
    355357            req.hdf['html.norobots'] = 1 
    356358 
    357359        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') 
    359361 
    360362        req.hdf['wiki'] = {'page_name': page.name, 'exists': page.exists, 
    361363                           'version': page.version, 'readonly': page.readonly} 
     
    365367            req.hdf['wiki.history_href'] = escape(history_href) 
    366368        else: 
    367369            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.name 
     370                raise TracError(_('Page %s not found') % page.name) 
     371            req.hdf['wiki.page_html'] = _('<p>Describe "%s" here</p>') % page.name 
    370372 
    371373        # Show attachments 
    372374        attachments = [] 
  • trac/wiki/tests/formatter.py

     
    44import StringIO 
    55import unittest 
    66 
     7import trac.l10n 
     8 
    79from trac.core import * 
    810from trac.wiki.formatter import Formatter, OneLinerFormatter 
    911from trac.wiki.api import IWikiMacroProvider 
     
    8385        try: 
    8486            self.assertEquals(self.correct, v) 
    8587        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")') \ 
    8890                                 % (str(e), self.file, self.line, 
    8991                                    formatter.flavor)) 
    9092         
  • trac/wiki/model.py

     
    1919from __future__ import generators 
    2020import time 
    2121 
     22import trac.l10n 
     23 
    2224from trac.core import * 
    2325from trac.wiki.api import WikiSystem 
    2426 
     
    122124            cursor.execute("UPDATE wiki SET readonly=%s WHERE name=%s", 
    123125                           (self.readonly, self.name)) 
    124126        else: 
    125             raise TracError('Page not modified') 
     127            raise TracError(_('Page not modified')) 
    126128 
    127129        if handle_ta: 
    128130            db.commit() 
  • trac/wiki/macros.py

     
    2525except ImportError: 
    2626    from StringIO import StringIO 
    2727 
     28import trac.l10n 
     29 
    2830from trac.config import default_dir 
    2931from trac.core import * 
    3032from trac.util import escape, format_date 
     
    258260        # we expect the 1st argument to be a filename (filespec) 
    259261        args = content.split(',') 
    260262        if len(args) == 0: 
    261             raise Exception("No argument.") 
     263            raise Exception(_("No argument.")) 
    262264        filespec = args[0] 
    263265        size_re = re.compile('^[0-9]+%?$') 
    264266        align_re = re.compile('^(?:left|right|top|bottom)$') 
     
    300302            if parts[0] in ['wiki', 'ticket']: 
    301303                module, id, file = parts 
    302304            else: 
    303                 raise Exception("%s module can't have attachments" % parts[0]) 
     305                raise Exception(_("%s module can't have attachments") % parts[0]) 
    304306        elif len(parts) == 2: 
    305307            from trac.versioncontrol.web_ui import BrowserModule 
    306308            try: 
     
    336338            if len(path_info) > 2: 
    337339                id = path_info[2] 
    338340            if module not in ['wiki', 'ticket']: 
    339                 raise Exception('Cannot reference local attachment from here') 
     341                raise Exception(_('Cannot reference local attachment from here')) 
    340342        else: 
    341             raise Exception('No filespec given') 
     343            raise Exception(_('No filespec given')) 
    342344        if not url: # this is an attachment 
    343345            from trac.attachment import Attachment 
    344346            attachment = Attachment(self.env, module, id, file) 
     
    445447            macro_file = os.path.join(path, name + '.py') 
    446448            if os.path.isfile(macro_file): 
    447449                return imp.load_source(name, macro_file) 
    448         raise TracError, 'Macro %s not found' % name 
     450        raise TracError, _('Macro %s not found') % name 
  • trac/util.py

     
    2323import re 
    2424import md5 
    2525 
     26import trac.l10n 
     27 
    2628TRUE =  ['yes', '1', 1, 'true',  'on',  'aye'] 
    2729FALSE = ['no',  '0', 0, 'false', 'off', 'nay'] 
    2830 
     
    121123 
    122124    jump = 512 
    123125    if size < jump: 
    124         return '%d bytes' % size 
     126        return _('%d bytes') % size 
    125127 
    126128    units = ['kB', 'MB', 'GB', 'TB'] 
    127129    i = 0 
     
    138140    if not time2: time2 = time.time() 
    139141    if time1 > time2: 
    140142        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'))) 
    147149    age_s = int(time2 - time1) 
    148150    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 '') 
    150152    for u, unit, unit_plural in units: 
    151153        r = float(age_s) / float(u) 
    152154        if r >= 0.9: 
    153155            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)) 
    155157    return '' 
    156158 
    157159def create_unique_file(path): 
     
    168170            idx += 1 
    169171            # A sanity check 
    170172            if idx > 100: 
    171                 raise Exception('Failed to create unique name: ' + path) 
     173                raise Exception(_('Failed to create unique name: ') + path) 
    172174            path = '%s.%d%s' % (parts[0], idx, parts[1]) 
    173175 
    174176def get_reporter_id(req): 
     
    226228        t = time.time() 
    227229    if not isinstance(t, (list, tuple, time.struct_time)): 
    228230        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')] 
    232234    return '%s, %d %s %04d %02d:%02d:%02d GMT' % ( 
    233235           weekdays[t.tm_wday], t.tm_mday, months[t.tm_mon - 1], t.tm_year, 
    234236           t.tm_hour, t.tm_min, t.tm_sec) 
     
    245247        except ValueError: 
    246248            continue 
    247249    if seconds == None: 
    248         raise ValueError, '%s is not a known date format.' % text 
     250        raise ValueError, _('%s is not a known date format.') % text 
    249251    return seconds 
    250252 
    251253 
  • trac/db.py

     
    2626    threading._get_ident = lambda: 0 
    2727import weakref 
    2828 
     29import trac.l10n 
    2930from trac.core import TracError 
    3031 
    3132__all__ = ['get_cnx_pool', 'init_db'] 
     
    161162                    if timeout: 
    162163                        self._available.wait(timeout) 
    163164                        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') \ 
    166167                                                % timeout 
    167168                    else: 
    168169                        self._available.wait() 
     
    257258        self.cnx = None 
    258259        if path != ':memory:': 
    259260            if not os.access(path, os.F_OK): 
    260                 raise TracError, 'Database "%s" not found.' % path 
     261                raise TracError, _('Database "%s" not found.') % path 
    261262 
    262263            dbdir = os.path.dirname(path) 
    263264            if not os.access(path, os.R_OK + os.W_OK) or \ 
    264265                   not os.access(dbdir, os.R_OK + os.W_OK): 
    265266                from getpass import getuser 
    266                 raise TracError, 'The user %s requires read _and_ write ' \ 
     267                raise TracError, _('The user %s requires read _and_ write ' \ 
    267268                                 'permission to the database file %s and the ' \ 
    268                                  'directory it is located in.' \ 
     269                                 'directory it is located in.') \ 
    269270                                 % (getuser(), path) 
    270271 
    271272        if have_pysqlite == 2: 
     
    316317        if path != ':memory:': 
    317318            # make the directory to hold the database 
    318319            if os.path.exists(path): 
    319                 raise TracError, 'Database already exists at %s' % path 
     320                raise TracError, _('Database already exists at %s') % path 
    320321            os.makedirs(os.path.split(path)[0]) 
    321322        cnx = sqlite.connect(path, timeout=int(params.get('timeout', 10000))) 
    322323        cursor = cnx.cursor() 
     
    446447def _get_cnx_class(env_path, db_str): 
    447448    scheme, args = _parse_db_str(db_str) 
    448449    if not scheme in _cnx_map: 
    449         raise TracError, 'Unsupported database type "%s"' % scheme 
     450        raise TracError, _('Unsupported database type "%s"') % scheme 
    450451 
    451452    if scheme == 'sqlite': 
    452453        # Special case for SQLite to support a path relative to the 
     
    465466            host = None 
    466467            path = rest 
    467468        else: 
    468             raise TracError, 'Database connection string %s must start with ' \ 
    469                              'scheme:/' % db_str 
     469            raise TracError, _('Database connection string %s must start with ' \ 
     470                             'scheme:/') % db_str 
    470471    else: 
    471472        if rest.startswith('/') and not rest.startswith('//'): 
    472473            host = None 
  • trac/web/standalone.py

     
    1919# Todo: 
    2020# - External auth using mod_proxy / squid. 
    2121 
     22import trac.l10n 
     23 
    2224from trac import util, __version__ 
    2325from trac.env import open_environment 
    2426from trac.web.api import Request 
     
    291293        if path_info == '/login': 
    292294            auth = self.server.auths.get(project_name) 
    293295            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')) 
    296298            req.remote_user = auth.do_auth(self) 
    297299            if not req.remote_user: 
    298300                return 
  • trac/web/clearsilver.py

     
    1414# 
    1515# Author: Christopher Lenz <cmlenz@gmx.de> 
    1616 
     17import trac.l10n 
    1718from trac.util import enum, TracError 
    1819 
    1920 
     
    128129            import neo_util 
    129130            self.hdf = neo_util.HDF() 
    130131        except ImportError, e: 
    131             raise TracError, "ClearSilver not installed (%s)" % e 
     132            raise TracError, _("ClearSilver not installed (%s)") % e 
    132133         
    133134        self['hdf.loadpaths'] = loadpaths 
    134135 
  • trac/web/chrome.py

     
    1818import os.path 
    1919import re 
    2020 
     21import trac.l10n 
     22 
    2123from trac import mimeview, util 
    2224from trac.core import * 
    2325from trac.env import IEnvironmentSetupParticipant 
     
    173175 
    174176        # FIXME: Should return a 404 error 
    175177        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') 
    177179 
    178180    # ITemplateProvider methods 
    179181 
  • trac/web/modpython_frontend.py

     
    2828 
    2929from mod_python import apache, util 
    3030 
     31import trac.l10n 
     32 
    3133from trac.util import http_date 
    3234from trac.web.api import Request, RequestDone 
    3335from trac.web.main import dispatch_request, get_environment, \ 
    3436                          send_pretty_error, send_project_index 
    3537 
    36  
    3738class ModPythonRequest(Request): 
    3839 
    3940    idx_location = None 
     
    6263            root_uri = options['TracUriRoot'].rstrip('/') 
    6364            if self.req.uri[:len(root_uri)] != root_uri: 
    6465                raise ValueError, \ 
    65                      'TracRootUri set to %s but request URL starts with %s' \ 
     66                     _('TracRootUri set to %s but request URL starts with %s') \ 
    6667                     % (root_uri, self.req.uri[:len(root_uri)]) 
    6768            self.path_info = self.req.uri[len(root_uri):] 
    6869        else: 
     
    179180            result[dest] = orig[src] 
    180181    return result 
    181182 
     183import os 
    182184def handler(req): 
    183185    options = req.get_options() 
    184186    if options.has_key('TracLocale'): 
    185187        locale.setlocale(locale.LC_ALL, options['TracLocale']) 
     188        trac.l10n.updateLocale() 
    186189    else: 
    187190        locale.setlocale(locale.LC_ALL, '') 
    188191 
  • trac/web/auth.py

     
    1818import re 
    1919import time 
    2020 
     21import trac.l10n 
     22 
    2123from trac.core import * 
    2224from trac.web.api import IAuthenticator, IRequestHandler 
    2325from trac.web.chrome import INavigationContributor 
     
    6466 
    6567    def get_navigation_items(self, req): 
    6668        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>') \ 
    6971                  % escape(self.env.href.logout()) 
    7072        else: 
    71             yield 'metanav', 'login', '<a href="%s">Login</a>' \ 
     73            yield 'metanav', 'login', _('<a href="%s">Login</a>') \ 
    7274                  % escape(self.env.href.login()) 
    7375 
    7476    # IRequestHandler methods 
  • trac/web/session.py

     
    1616# Author: Daniel Lundin <daniel@edgewall.com> 
    1717#         Christopher Lenz <cmlenz@gmx.de> 
    1818 
     19import trac.l10n 
     20 
    1921from trac.util import hex_entropy, TracError 
    2022 
    2123import time 
     
    8688        cursor.execute("SELECT sid FROM session WHERE sid=%s " 
    8789                       "AND authenticated=0", (new_sid,)) 
    8890        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")) 
    9294        self.env.log.debug('Changing session ID %s to %s' % (self.sid, new_sid)) 
    9395        cursor.execute("UPDATE session SET sid=%s WHERE sid=%s " 
    9496                       "AND authenticated=0", (new_sid, self.sid)) 
  • trac/web/main.py

     
    1818 
    1919import os 
    2020 
     21import trac.l10n 
     22 
    2123from trac.core import * 
    2224from trac.env import open_environment 
    2325from trac.perm import PermissionCache, PermissionError 
     
    101103 
    102104        if not chosen_handler: 
    103105            # FIXME: Should return '404 Not Found' to the client 
    104             raise TracError, 'No handler matched request to %s' % req.path_info 
     106            raise TracError, _('No handler matched request to %s') % req.path_info 
    105107 
    106108        try: 
    107109            resp = chosen_handler.process_request(req) 
     
    175177        'name_encoded': escape(env.config.get('project', 'name')), 
    176178        'descr': env.config.get('project', 'descr'), 
    177179        '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>')), 
    181183        'url': env.config.get('project', 'url') 
    182184    } 
    183185 
     
    218220        populate_hdf(req.hdf, env, req) 
    219221 
    220222        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') 
    223225            req.hdf['error.type'] = 'TracError' 
    224226            req.hdf['error.message'] = e.message 
    225227            if e.show_traceback: 
     
    227229            req.display('error.cs', response=500) 
    228230 
    229231        elif isinstance(e, PermissionError): 
    230             req.hdf['title'] = 'Permission Denied' 
     232            req.hdf['title'] = _('Permission Denied') 
    231233            req.hdf['error.type'] = 'permission' 
    232234            req.hdf['error.action'] = e.action 
    233235            req.hdf['error.message'] = e 
    234236            req.display('error.cs', response=403) 
    235237 
    236238        else: 
    237             req.hdf['title'] = 'Oops' 
     239            req.hdf['title'] = _('Oops') 
    238240            req.hdf['error.type'] = 'internal' 
    239241            req.hdf['error.message'] = escape(str(e)) 
    240242            req.hdf['error.traceback'] = escape(tb.getvalue()) 
     
    250252            req.send_response(500) 
    251253            req.send_header('Content-Type', 'text/plain') 
    252254            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')) 
    254256            req.write(str(e)) 
    255257            req.write('\n') 
    256258            req.write(tb.getvalue()) 
     
    274276                req.hdf[key] = val 
    275277    else: 
    276278        req.hdf = HDFWrapper() 
    277         template = req.hdf.parse('''<html> 
     279        template = req.hdf.parse(_('''<html> 
    278280<head><title>Available Projects</title></head> 
    279281<body><h1>Available Projects</h1><ul><?cs 
    280282 each:project = projects ?><li><?cs 
     
    287289  /if ?> 
    288290  </li><?cs 
    289291 /each ?></ul></body> 
    290 </html>''') 
     292</html>''')) 
    291293 
    292294    if not env_paths and 'TRAC_ENV_PARENT_DIR' in options: 
    293295        dir = options['TRAC_ENV_PARENT_DIR'] 
     
    330332            return None 
    331333    else: 
    332334        raise TracError, \ 
    333               'The environment options "TRAC_ENV" or "TRAC_ENV_PARENT_DIR" ' \ 
     335              _('The environment options "TRAC_ENV" or "TRAC_ENV_PARENT_DIR" ' \ 
    334336              'or the mod_python options "TracEnv" or "TracEnvParentDir" ' \ 
    335337              'are missing.  Trac requires one of these options to locate ' \ 
    336               'the Trac environment(s).' 
     338              'the Trac environment(s).') 
    337339 
    338340    return _open_environment(env_path, threaded)