trac-customfieldadmin-0.4.0+svn18456/0000755000175500017550000000000014513334361016740 5ustar debacledebacletrac-customfieldadmin-0.4.0+svn18456/customfieldadmin/0000755000175500017550000000000014134311767022273 5ustar debacledebacletrac-customfieldadmin-0.4.0+svn18456/customfieldadmin/tests/0000755000175500017550000000000013677473547023455 5ustar debacledebacletrac-customfieldadmin-0.4.0+svn18456/customfieldadmin/tests/api.py0000644000175500017550000001554313662031141024556 0ustar debacledebacle# -*- coding: utf-8 -*- """ License: BSD (c) 2005-2012 ::: www.CodeResort.com - BV Network AS (simon-code@bvnetwork.no) """ import unittest from trac.core import TracError from trac.test import EnvironmentStub, Mock from trac.util.html import html as tag from customfieldadmin.api import CustomFields, tag_ class CustomFieldApiTestCase(unittest.TestCase): def setUp(self): self.env = EnvironmentStub() self.cf_api = CustomFields(self.env) def tearDown(self): self.env.destroy_db() def test_create(self): for f in ['one', 'two', 'three']: cfield = {'name': f, 'type': 'text'} self.cf_api.create_custom_field(cfield) self.assertEquals([{ 'custom': True, 'name': u'one', 'format': 'plain', 'value': '', 'label': u'One', 'type': u'text', 'order': 1 }, { 'custom': True, 'name': u'two', 'format': 'plain', 'value': '', 'label': u'Two', 'type': u'text', 'order': 2 }, { 'custom': True, 'name': u'three', 'format': 'plain', 'value': '', 'label': u'Three', 'type': u'text', 'order': 3 } ], self.cf_api.get_custom_fields()) def test_update(self): cfield = {'name': 'foo', 'type': 'text'} self.cf_api.create_custom_field(cfield) self.assertEquals({ 'custom': True, 'name': u'foo', 'format': 'plain', 'value': '', 'label': u'Foo', 'type': u'text', 'order': 1 }, cfield) cfield['label'] = 'Answer' cfield['value'] = '42' self.cf_api.update_custom_field(cfield=cfield) self.assertEquals({ 'custom': True, 'name': u'foo', 'format': 'plain', 'value': '42', 'label': u'Answer', 'type': u'text', 'order': 1 }, cfield) def test_update_textarea(self): cfield = {'name': 'foo', 'type': 'textarea'} self.cf_api.create_custom_field(cfield) self.assertEquals({ 'custom': True, 'name': u'foo', 'format': 'plain', 'value': '', 'label': u'Foo', 'type': u'textarea', 'order': 1, 'rows': 5 }, cfield) cfield['rows'] = 3 self.cf_api.update_custom_field(cfield=cfield) self.assertEquals({ 'custom': True, 'name': u'foo', 'format': 'plain', 'value': '', 'label': u'Foo', 'type': u'textarea', 'order': 1, 'rows': 3 }, cfield) def test_update_non_existing(self): with self.assertRaises(Exception) as cm: self.cf_api.update_custom_field(cfield={'name': 'no_field'}) self.assertTrue("'no_field'" in cm.exception.message) self.assertTrue('does not exist' in cm.exception.message) def test_update_non_existing_no_name(self): with self.assertRaises(Exception) as cm: self.cf_api.update_custom_field(cfield={}) self.assertTrue("'(none)'" in cm.exception.message) self.assertTrue('does not exist' in cm.exception.message) def test_delete(self): for f in ['one', 'two', 'three']: cfield = {'name': f, 'type': 'text'} self.cf_api.create_custom_field(cfield) self.assertIn(('two', 'text'), self.env.config.options('ticket-custom')) self.cf_api.delete_custom_field({'name': 'two'}) self.assertNotIn(('two', 'text'), self.env.config.options('ticket-custom')) # Note: Should also reorder higher-ordered items self.assertEquals([{ 'custom': True, 'name': u'one', 'format': 'plain', 'value': '', 'label': u'One', 'type': u'text', 'order': 1 }, { 'custom': True, 'name': u'three', 'format': 'plain', 'value': '', 'label': u'Three', 'type': u'text', 'order': 2 } ], self.cf_api.get_custom_fields()) self.assertIsNone( self.cf_api.get_custom_fields(cfield={'name': 'two'})) def test_delete_unknown_options(self): cf = {'name': 'foo', 'type': 'text', 'label': 'Foo'} self.cf_api.create_custom_field(cf) self.assertEquals('text', self.env.config.get('ticket-custom', 'foo')) self.assertEquals('Foo', self.env.config.get('ticket-custom', 'foo.label')) self.env.config.set('ticket-custom', 'foo.answer', '42') self.cf_api.delete_custom_field(cf, modify=False) self.assertEquals('', self.env.config.get('ticket-custom', 'foo')) self.assertEquals('', self.env.config.get('ticket-custom', 'foo.label')) self.assertEquals('', self.env.config.get('ticket-custom', 'foo.answer')) def test_not_delete_unknown_options_for_modify(self): cf = {'name': 'foo', 'type': 'text', 'label': 'Foo'} self.cf_api.create_custom_field(cf) self.assertEquals('text', self.env.config.get('ticket-custom', 'foo')) self.assertEquals('Foo', self.env.config.get('ticket-custom', 'foo.label')) self.env.config.set('ticket-custom', 'foo.answer', '42') self.cf_api.delete_custom_field(cf, modify=True) self.assertEquals('', self.env.config.get('ticket-custom', 'foo')) self.assertEquals('', self.env.config.get('ticket-custom', 'foo.label')) self.assertEquals('42', self.env.config.get('ticket-custom', 'foo.answer')) def test_verify_unknown_type(self): self.env.config.set('ticket-custom', 'one', 'foo_type') fields = self.cf_api.get_custom_fields() self.assertEquals(1, len(fields)) with self.assertRaises(TracError) as cm: self.cf_api.verify_custom_field(fields[0], create=False) self.assertTrue('foo_type' in cm.exception.message) def test_verify_reserved_names(self): cf = {'name': 'group', 'type': 'text', 'label': 'Group'} with self.assertRaises(TracError): self.cf_api.verify_custom_field(cf) cf = {'name': 'Group', 'type': 'text'} with self.assertRaises(TracError): self.cf_api.verify_custom_field(cf) cf = {'name': 'group_', 'type': 'text', 'label': 'Group'} self.cf_api.verify_custom_field(cf) # no errors class CustomFieldL10NTestCase(unittest.TestCase): def setUp(self): self.env = EnvironmentStub() self.cf_api = CustomFields(self.env) def tearDown(self): self.env.destroy_db() def test_translation_function(self): from customfieldadmin.api import _ self.assertEquals('foo bar', _("foo bar")) self.assertEquals('foo bar', _("foo %(bar)s", bar='bar')) def test_translation_function_tag(self): self.assertEquals('

foo bar

', str(tag_(tag.p('foo bar')))) self.assertEquals('

foo bar

', unicode(tag_(tag.p('foo %(bar)s' % {'bar': 'bar'})))) trac-customfieldadmin-0.4.0+svn18456/customfieldadmin/tests/__init__.py0000644000175500017550000000076013677473547025571 0ustar debacledebacle# -*- coding: utf-8 -*- """ License: BSD (c) 2005-2011 ::: www.CodeResort.com - BV Network AS (simon-code@bvnetwork.no) """ from unittest import TestSuite, makeSuite def test_suite(): suite = TestSuite() from customfieldadmin.tests import api suite.addTest(makeSuite(api.CustomFieldApiTestCase)) suite.addTest(makeSuite(api.CustomFieldL10NTestCase)) from customfieldadmin.tests import admin suite.addTest(makeSuite(admin.CustomFieldAdminPageTestCase)) return suite trac-customfieldadmin-0.4.0+svn18456/customfieldadmin/tests/admin.py0000644000175500017550000001152113677457056025114 0ustar debacledebacle# -*- coding: utf-8 -*- """ License: BSD (c) 2005-2012 ::: www.CodeResort.com - BV Network AS (simon-code@bvnetwork.no) """ import unittest from trac.perm import PermissionSystem from trac.test import EnvironmentStub, MockRequest from trac.web.api import RequestDone from customfieldadmin.admin import CustomFieldAdminPage from customfieldadmin.api import CustomFields class CustomFieldAdminPageTestCase(unittest.TestCase): def setUp(self): self.env = EnvironmentStub() ps = PermissionSystem(self.env) ps.grant_permission('admin', 'TICKET_ADMIN') self.plugin = CustomFieldAdminPage(self.env) self.api = CustomFields(self.env) def tearDown(self): self.env.destroy_db() def test_create(self): req = MockRequest(self.env, path_info='/admin/customfields', method='POST', authname='admin', args={ 'add': True, 'name': "test", 'type': "textarea", 'label': "testing", 'format': "wiki", 'row': '9', } ) with self.assertRaises(RequestDone): self.plugin.render_admin_panel(req, 'ticket', 'customfields', None) self.assertEquals([ (u'test', u'textarea'), (u'test.format', u'wiki'), (u'test.label', u'testing'), (u'test.order', u'1'), (u'test.rows', u'5'), (u'test.value', u''), ], sorted(list(self.env.config.options('ticket-custom')))) def test_add_optional_select(self): req = MockRequest(self.env, path_info='/admin/customfields', method='POST', authname='admin', args={ 'add': True, 'name': "test", 'type': "select", 'label': "testing", 'options': "\r\none\r\ntwo" } ) with self.assertRaises(RequestDone): self.plugin.render_admin_panel(req, 'ticket', 'customfields', None) self.assertEquals([ (u'test', u'select'), (u'test.label', u'testing'), (u'test.options', u'|one|two'), (u'test.order', u'1'), (u'test.value', u'') ], sorted(list(self.env.config.options('ticket-custom')))) def test_apply_optional_select(self): # Reuse the added custom field that test verified to work self.test_add_optional_select() self.assertEquals('select', self.env.config.get('ticket-custom', 'test')) # Now check that details are maintained across order change # that reads fields, deletes them, and creates them again # http://trac-hacks.org/ticket/1834#comment:5 req = MockRequest(self.env, path_info='/admin/customfields', method='POST', authname='admin', args={ 'apply': True, 'order_test': '2' } ) with self.assertRaises(RequestDone): self.plugin.render_admin_panel(req, 'ticket', 'customfields', None) self.assertEquals([ (u'test', u'select'), (u'test.label', u'testing'), (u'test.options', u'|one|two'), (u'test.order', u'2'), (u'test.value', u'') ], sorted(list(self.env.config.options('ticket-custom')))) def test_edit_optional_select(self): self.test_add_optional_select() self.assertEquals('select', self.env.config.get('ticket-custom', 'test')) req = MockRequest(self.env, path_info='/admin/customfields', method='POST', authname='admin', args={ 'save': True, 'name': u'test', 'label': u'testing', 'type': u'select', 'value': u'', 'options': u'\r\none\r\ntwo' } ) with self.assertRaises(RequestDone): self.plugin.render_admin_panel(req, 'ticket', 'customfields', 'test') self.assertEquals([ (u'test', u'select'), (u'test.label', u'testing'), (u'test.options', u'|one|two'), (u'test.order', u'2'), (u'test.value', u'') ], sorted(list(self.env.config.options('ticket-custom')))) def test_order_with_mismatched_keys(self): # http://trac-hacks.org/ticket/11540 self.api.create_custom_field({ 'name': u'one', 'format': 'plain', 'value': '', 'label': u'One', 'type': u'text', 'order': 1 }) req = MockRequest(self.env, path_info='/admin/customfields', method='POST', authname='admin', args={ 'apply': True, 'order_two': '1' } ) with self.assertRaises(RequestDone): self.plugin.render_admin_panel(req, 'ticket', 'customfields', None) trac-customfieldadmin-0.4.0+svn18456/customfieldadmin/api.py0000644000175500017550000002242114132333132023403 0ustar debacledebacle# -*- coding: utf-8 -*- """ API for administrating custom ticket fields in Trac. Supports creating, getting, updating and deleting custom fields. License: BSD (c) 2005-2012 ::: www.CodeResort.com - BV Network AS (simon-code@bvnetwork.no) """ import pkg_resources import re from trac.core import * from trac.ticket.api import TicketSystem from trac.util.translation import domain_functions add_domain, _, tag_ = \ domain_functions('customfieldadmin', ('add_domain', '_', 'tag_')) class CustomFields(Component): """ These methods should be part of TicketSystem API/Data Model. Adds update_custom_field and delete_custom_field methods. (The get_custom_fields is already part of the API - just redirect here, and add option to only get one named field back.) Input to methods is a 'cfield' dict supporting these keys: name = name of field (ascii alphanumeric only) type = text|checkbox|select|radio|textarea|time label = label description value = default value for field content options = options for select and radio types (list, leave first empty for optional) rows = number of rows for text area order = specify sort order for field format = text|wiki|reference|list (for text) format = text|wiki (for textarea) format = relative|date|datetime (for time) """ config_options = ['label', 'value', 'options', 'rows', 'order', 'format'] field_types = ['text', 'checkbox', 'select', 'radio', 'textarea', 'time'] field_formats = { 'text': ['plain', 'wiki', 'reference', 'list'], 'textarea': ['plain', 'wiki'], 'time': ['relative', 'date', 'datetime'], } def __init__(self): # bind the 'customfieldadmin' catalog to the specified locale directory try: locale_dir = pkg_resources.resource_filename(__name__, 'locale') except KeyError: # No 'locale', hence no compiled message catalogs. Ignore. pass else: add_domain(self.env.path, locale_dir) def get_custom_fields(self, cfield=None): """ Returns the custom fields from TicketSystem component. Use a cfdict with 'name' key set to find a specific custom field only. """ items = TicketSystem(self.env).get_custom_fields() for item in items: if item['type'] == 'textarea': item['rows'] = item.pop('height') if cfield and item['name'] == cfield['name']: return item # only return specific item with cfname if cfield: return None # item not found else: return items # return full list def verify_custom_field(self, cfield, create=True): """ Basic validation of the input for modifying or creating custom fields. """ # Requires 'name' and 'type' if not (cfield.get('name') and cfield.get('type')): raise TracError( _("Custom field requires attributes 'name' and 'type'.")) # Use lowercase custom fieldnames only cfield['name'] = cfield['name'].lower() # Check field name is not reserved tktsys = TicketSystem(self.env) if cfield['name'] in tktsys.reserved_field_names: raise TracError(_("Field name '%(name)s' is reserved", name=cfield['name'])) # Only alphanumeric characters (and [-_]) allowed for custom fieldname if re.search('^[a-z][a-z0-9_]+$', cfield['name']) == None: raise TracError(_("Only alphanumeric characters allowed for " \ "custom field name ('a-z' or '0-9' or '_'), " \ "with 'a-z' as first character.")) # Name must begin with a character - anything else not supported by Trac if not cfield['name'][0].isalpha(): raise TracError( _("Custom field name must begin with a character (a-z).")) # Check that it is a valid field type if not cfield['type'] in self.field_types: raise TracError(_("%(field_type)s is not a valid field type", field_type=cfield['type'])) # Check that field does not already exist # (if modify it should already be deleted) if create and self.config.get('ticket-custom', cfield['name']): raise TracError(_("Can not create as field already exists.")) if create and [f for f in tktsys.fields if f['name'] == cfield['name']]: raise TracError(_("Can't create a custom field with the " "same name as a built-in field.")) def create_custom_field(self, cfield): """ Create the new custom fields (that may just have been deleted as part of 'modify'). In `cfield`, 'name' and 'type' keys are required. Note: Caller is responsible for verifying input before create.""" # Need count pre-create for correct order count_current_fields = len(self.get_custom_fields()) # Set the mandatory items self.config.set('ticket-custom', cfield['name'], cfield['type']) # Label = capitalize fieldname if not present self.config.set('ticket-custom', cfield['name'] + '.label', cfield.get('label') or cfield['name'].capitalize()) # Optional items if 'value' in cfield: self.config.set('ticket-custom', cfield['name'] + '.value', cfield['value']) if cfield['type'] in ('select', 'radio') and \ 'options' in cfield: if cfield.get('optional', False) and '' not in cfield['options']: self.config.set('ticket-custom', cfield['name'] + '.options', '|' + '|'.join(cfield['options'])) else: self.config.set('ticket-custom', cfield['name'] + '.options', '|'.join(cfield['options'])) if 'format' in cfield and \ cfield['type'] in ('text', 'textarea', 'time') and \ cfield['format'] in self.field_formats[cfield['type']]: self.config.set('ticket-custom', cfield['name'] + '.format', cfield['format']) # Textarea if cfield['type'] == 'textarea': rows = cfield.get('rows', 0) and int(cfield.get('rows', 0)) > 0 \ and cfield.get('rows') or 5 self.config.set('ticket-custom', cfield['name'] + '.rows', rows) # Order order = cfield.get('order') or count_current_fields + 1 self.config.set('ticket-custom', cfield['name'] + '.order', order) self._save(cfield) def update_custom_field(self, cfield, create=False): """ Updates a custom field. Option to 'create' is kept in order to keep the API backwards compatible. """ if create: self.verify_custom_field(cfield) self.create_custom_field(cfield) return # Check input, then delete and save new if not self.get_custom_fields(cfield=cfield): raise TracError(_("Custom Field '%(name)s' does not exist. " \ "Cannot update.", name=cfield.get('name') or '(none)')) self.verify_custom_field(cfield, create=False) self.delete_custom_field(cfield, modify=True) self.create_custom_field(cfield) def delete_custom_field(self, cfield, modify=False): """ Deletes a custom field. Input is a dictionary (see update_custom_field), but only ['name'] is required. """ if not self.config.get('ticket-custom', cfield['name']): return # Nothing to do here - cannot find field if not modify: # Permanent delete - reorder later fields to lower order order_to_delete = self.config.getint('ticket-custom', cfield['name']+'.order') cfs = self.get_custom_fields() for field in cfs: if field['order'] > order_to_delete: self.config.set('ticket-custom', field['name'] + '.order', field['order'] - 1 ) supported_options = [cfield['name']] + \ [cfield['name'] + '.' + opt for opt in self.config_options] for option, _value in self.config.options('ticket-custom'): if modify and not option in supported_options: # Only delete supported options when modifying # http://trac-hacks.org/ticket/8188 continue if option == cfield['name'] \ or option.startswith(cfield['name'] + '.'): self.config.remove('ticket-custom', option) # Persist permanent deletes if not modify: self._save(cfield) def _save(self, cfield=None): """ Saves a value, clear caches if needed / supported. """ self.config.save() del TicketSystem(self.env).custom_fields # Re-populate contents of cfield with new values and defaults if cfield: stored = self.get_custom_fields(cfield=cfield) if stored: # created or updated (None for deleted so just ignore) cfield.update(stored) trac-customfieldadmin-0.4.0+svn18456/customfieldadmin/htdocs/0000755000175500017550000000000014124663267023563 5ustar debacledebacletrac-customfieldadmin-0.4.0+svn18456/customfieldadmin/htdocs/css/0000755000175500017550000000000010624306774024351 5ustar debacledebacletrac-customfieldadmin-0.4.0+svn18456/customfieldadmin/htdocs/js/0000755000175500017550000000000014124663267024177 5ustar debacledebacletrac-customfieldadmin-0.4.0+svn18456/customfieldadmin/htdocs/js/customfieldadmin.js0000755000175500017550000000370514124663267030074 0ustar debacledebacle/********** * User Interface function for Trac Custom Field Admin plugin. * License: BSD * (c) 2007-2009 ::: www.Optaros.com (cbalan@optaros.com) **********/ (function($){ function toggle_options(type_element){ function label(property){ return $(property).parents('div.field') } function capitalize(word){ return word[0].toUpperCase()+word.slice(1).toLowerCase(); } function setOptions(type) { var $format = $('#format'); $format.find('option').remove(); var formats = field_formats[type]; for (var i=0; i', { value: formats[i], text: capitalize(formats[i]), })); } } switch (type_element.selectedIndex) { case 0: // text label('#options, #rows').hide(); label('#format').show(); setOptions('text'); break; case 1: // checkbox label('#options, #rows, #format').hide(); break; case 2: // select label('#options').show(); label('#rows, #format').hide(); break; case 3: // radio label('#options').show(); label('#rows, #format').hide(); break; case 4: // textarea label('#options').hide(); label('#rows, #format').show(); setOptions('textarea'); break; case 5: // time label('#options, #rows').hide(); label('#format').show(); setOptions('time'); break; } } $(function(){ $('#type').each(function(){ toggle_options(this); $(this).change(function(){ toggle_options(this); }); }); }); })(jQuery); trac-customfieldadmin-0.4.0+svn18456/customfieldadmin/__init__.py0000644000175500017550000000007213662031141024371 0ustar debacledebacleimport pkg_resources pkg_resources.require('Trac >= 1.2') trac-customfieldadmin-0.4.0+svn18456/customfieldadmin/admin.py0000644000175500017550000001334514134311767023743 0ustar debacledebacle# -*- coding: utf-8 -*- """ Trac WebAdmin plugin for administration of custom fields. License: BSD (c) 2005-2012 ::: www.CodeResort.com - BV Network AS (simon-code@bvnetwork.no) (c) 2007-2009 ::: www.Optaros.com (.....) """ from pkg_resources import get_distribution, parse_version, resource_filename from trac.admin.api import IAdminPanelProvider from trac.config import Option from trac.core import * from trac.web.chrome import ( Chrome, ITemplateProvider, add_script, add_script_data, add_warning) from customfieldadmin.api import CustomFields, _ class CustomFieldAdminPage(Component): implements(ITemplateProvider, IAdminPanelProvider) def __init__(self): CustomFields(self.env) # load our message catalog # IAdminPanelProvider methods def get_admin_panels(self, req): if 'TICKET_ADMIN' in req.perm('admin', 'ticket/customfields'): yield ('ticket', _("Ticket System"), 'customfields', _("Custom Fields")) def render_admin_panel(self, req, cat, page, customfield): req.perm('admin', 'ticket/customfields').require('TICKET_ADMIN') cf_api = CustomFields(self.env) add_script_data(req, field_formats=cf_api.field_formats) add_script(req, 'customfieldadmin/js/customfieldadmin.js') def _customfield_from_req(self, req): cfield = { 'name': req.args.get('name',''), 'label': req.args.get('label',''), 'type': req.args.get('type',''), 'value': req.args.get('value',''), 'options': [x.strip().encode('utf-8') for x in \ req.args.get('options','').split("\n")], 'cols': req.args.get('cols',''), 'rows': req.args.get('rows',''), 'order': req.args.get('order', ''), 'format': req.args.get('format', '') } return cfield cf_admin = {'field_types': cf_api.field_types} # Detail view? if customfield: cfield = None for a_cfield in cf_api.get_custom_fields(): if a_cfield['name'] == customfield: cfield = a_cfield break if not cfield: raise TracError(_("Custom field %(name)s does not exist.", name=customfield)) if req.method == 'POST': if req.args.get('save'): cfield.update(_customfield_from_req(self, req)) cf_api.update_custom_field(cfield) req.redirect(req.href.admin(cat, page)) elif req.args.get('cancel'): req.redirect(req.href.admin(cat, page)) if 'options' in cfield: optional_line = '' if cfield.get('optional', False): optional_line = "\n\n" cfield['options'] = \ optional_line + "\n".join(cfield['options']) cf_admin['cfield'] = cfield cf_admin['cf_display'] = 'detail' else: if req.method == 'POST': # Add Custom Field if req.args.get('add') and req.args.get('name'): cfield = _customfield_from_req(self, req) cf_api.update_custom_field(cfield, create=True) req.redirect(req.href.admin(cat, page)) # Remove Custom Field elif req.args.get('remove') and req.args.get('sel'): sel = req.args.get('sel') sel = isinstance(sel, list) and sel or [sel] if not sel: raise TracError(_("No custom field selected")) for name in sel: cfield = {'name': name} cf_api.delete_custom_field(cfield) req.redirect(req.href.admin(cat, page)) elif req.args.get('apply'): # Change order order = dict([(key[6:], req.args.get(key)) for key in req.args.keys() if key.startswith('order_')]) cfields = cf_api.get_custom_fields() for current_cfield in cfields: new_order = order.get(current_cfield['name'], 0) if new_order: current_cfield['order'] = new_order cf_api.update_custom_field(current_cfield) req.redirect(req.href.admin(cat, page)) cfields = [] orders_in_use = [] for item in cf_api.get_custom_fields(): item['href'] = req.href.admin(cat, page, item['name']) item['registry'] = ('ticket-custom', item['name']) in Option.registry cfields.append(item) orders_in_use.append(int(item.get('order'))) cf_admin['cfields'] = cfields cf_admin['cf_display'] = 'list' if sorted(orders_in_use) != range(1, len(cfields)+1): add_warning(req, _("Custom Fields are not correctly sorted. " \ "This may affect appearance when viewing tickets.")) if hasattr(Chrome(self.env), 'jenv'): cf_admin['domain'] = 'customfieldadmin' return 'customfieldadmin_jinja.html', cf_admin else: return 'customfieldadmin_genshi.html', cf_admin # ITemplateProvider methods def get_templates_dirs(self): return [resource_filename(__name__, 'templates')] def get_htdocs_dirs(self): return [('customfieldadmin', resource_filename(__name__, 'htdocs'))] trac-customfieldadmin-0.4.0+svn18456/customfieldadmin/locale/0000755000175500017550000000000014134311767023532 5ustar debacledebacletrac-customfieldadmin-0.4.0+svn18456/customfieldadmin/locale/ru/0000755000175500017550000000000014134311767024160 5ustar debacledebacletrac-customfieldadmin-0.4.0+svn18456/customfieldadmin/locale/ru/LC_MESSAGES/0000755000175500017550000000000014134311767025745 5ustar debacledebacletrac-customfieldadmin-0.4.0+svn18456/customfieldadmin/locale/ru/LC_MESSAGES/customfieldadmin.po0000644000175500017550000002210114134311767031630 0ustar debacledebacle# Russian translations for TracCustomFieldAdmin. # Copyright (C) 2010 ORGANIZATION # This file is distributed under the same license as the # TracCustomFieldAdmin project. # Dmitri Bogomolov <4glitch@gmail.com>, 2010. # msgid "" msgstr "" "Project-Id-Version: TracCustomFieldAdmin 0.2.5\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2021-10-21 09:22-0700\n" "PO-Revision-Date: 2010-10-04 01:07+0300\n" "Last-Translator: Dmitri Bogomolov <4glitch@gmail.com>\n" "Language: ru\n" "Language-Team: ru \n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.9.1\n" #: customfieldadmin/admin.py:32 msgid "Ticket System" msgstr "Билеты" #: customfieldadmin/admin.py:33 msgid "Custom Fields" msgstr "Дополнительные поля" #: customfieldadmin/admin.py:68 #, python-format msgid "Custom field %(name)s does not exist." msgstr "Дополнительное поле %(name)s не существует." #: customfieldadmin/admin.py:98 msgid "No custom field selected" msgstr "Не выбрано ни одного поля" #: customfieldadmin/admin.py:128 msgid "" "Custom Fields are not correctly sorted. This may affect appearance when " "viewing tickets." msgstr "" #: customfieldadmin/api.py:81 msgid "Custom field requires attributes 'name' and 'type'." msgstr "" #: customfieldadmin/api.py:87 #, python-format msgid "Field name '%(name)s' is reserved" msgstr "" #: customfieldadmin/api.py:91 #, fuzzy msgid "" "Only alphanumeric characters allowed for custom field name ('a-z' or " "'0-9' or '_'), with 'a-z' as first character." msgstr "" "В имени дополнительного поля допустимы только алфавитно-цифровые символы " "(a-z, 0-9 и -_)." #: customfieldadmin/api.py:97 msgid "Custom field name must begin with a character (a-z)." msgstr "Имя дополнительного поля должно начинаться с буквы (a-z." #: customfieldadmin/api.py:100 #, python-format msgid "%(field_type)s is not a valid field type" msgstr "%(field_type)s недопустимый тип поля" #: customfieldadmin/api.py:105 msgid "Can not create as field already exists." msgstr "Не удалось создать, поскольку поле уже существует." #: customfieldadmin/api.py:108 msgid "Can't create a custom field with the same name as a built-in field." msgstr "" #: customfieldadmin/api.py:159 #, fuzzy, python-format msgid "Custom Field '%(name)s' does not exist. Cannot update." msgstr "Дополнительное поле %(name)s не существует." #: customfieldadmin/templates/customfieldadmin_genshi.html:11 msgid "Custom Fields Admin" msgstr "Дополнительные поля" #: customfieldadmin/templates/customfieldadmin_genshi.html:16 #: customfieldadmin/templates/customfieldadmin_jinja.html:7 #: customfieldadmin/templates/customfieldadmin_jinja.html:17 msgid "Manage Custom Fields" msgstr "Управление дополнительными полями" #: customfieldadmin/templates/customfieldadmin_genshi.html:21 #: customfieldadmin/templates/customfieldadmin_jinja.html:24 msgid "Modify Custom Field:" msgstr "Изменить дополнительное поле:" #: customfieldadmin/templates/customfieldadmin_genshi.html:23 #: customfieldadmin/templates/customfieldadmin_jinja.html:26 msgid "Name (cannot modify):" msgstr "Имя (неизменяемое):" #: customfieldadmin/templates/customfieldadmin_genshi.html:28 #: customfieldadmin/templates/customfieldadmin_genshi.html:86 #: customfieldadmin/templates/customfieldadmin_jinja.html:31 #: customfieldadmin/templates/customfieldadmin_jinja.html:94 msgid "Type:" msgstr "Тип:" #: customfieldadmin/templates/customfieldadmin_genshi.html:38 #: customfieldadmin/templates/customfieldadmin_genshi.html:94 #: customfieldadmin/templates/customfieldadmin_jinja.html:42 #: customfieldadmin/templates/customfieldadmin_jinja.html:104 msgid "Label:" msgstr "Описание:" #: customfieldadmin/templates/customfieldadmin_genshi.html:43 #: customfieldadmin/templates/customfieldadmin_jinja.html:48 #, fuzzy msgid "" "Default value\n" " (regular text for Text, Textarea, Radio or Select):" msgstr "По умолчанию (обычный текст для Text, Textarea, Radio или Select):" #: customfieldadmin/templates/customfieldadmin_genshi.html:49 #: customfieldadmin/templates/customfieldadmin_jinja.html:55 msgid "Format (Text or Textarea):" msgstr "Формат (Text или Textarea):" #: customfieldadmin/templates/customfieldadmin_genshi.html:55 #, fuzzy msgid "" "Options for Radio or Select\n" " (for Select, empty first line makes field optional):" msgstr "" "Варианты для Radio или Select (для Select пустой первый вариант делает " "поле необязательным):" #: customfieldadmin/templates/customfieldadmin_genshi.html:66 #: customfieldadmin/templates/customfieldadmin_genshi.html:119 #: customfieldadmin/templates/customfieldadmin_jinja.html:72 #: customfieldadmin/templates/customfieldadmin_jinja.html:130 msgid "Rows:" msgstr "Строки:" #: customfieldadmin/templates/customfieldadmin_genshi.html:71 #: customfieldadmin/templates/customfieldadmin_jinja.html:76 msgid "Save" msgstr "Сохранить" #: customfieldadmin/templates/customfieldadmin_genshi.html:72 #: customfieldadmin/templates/customfieldadmin_jinja.html:77 msgid "Cancel" msgstr "Отмена" #: customfieldadmin/templates/customfieldadmin_genshi.html:79 #: customfieldadmin/templates/customfieldadmin_jinja.html:87 msgid "Add Custom Field:" msgstr "Добавить дополнительное поле:" #: customfieldadmin/templates/customfieldadmin_genshi.html:81 #: customfieldadmin/templates/customfieldadmin_jinja.html:89 msgid "Name:" msgstr "Имя:" #: customfieldadmin/templates/customfieldadmin_genshi.html:99 #: customfieldadmin/templates/customfieldadmin_jinja.html:109 msgid "Default value:" msgstr "Значение по умолчанию:" #: customfieldadmin/templates/customfieldadmin_genshi.html:104 #: customfieldadmin/templates/customfieldadmin_jinja.html:114 msgid "Format:" msgstr "Формат:" #: customfieldadmin/templates/customfieldadmin_genshi.html:111 #: customfieldadmin/templates/customfieldadmin_jinja.html:121 msgid "Options:" msgstr "" #: customfieldadmin/templates/customfieldadmin_genshi.html:124 #: customfieldadmin/templates/customfieldadmin_jinja.html:134 msgid "Add" msgstr "Добавить" #: customfieldadmin/templates/customfieldadmin_genshi.html:130 msgid "No Custom Fields defined for this project." msgstr "В этом проекте не объявлено ни одного дополнительного поля." #: customfieldadmin/templates/customfieldadmin_genshi.html:138 #: customfieldadmin/templates/customfieldadmin_jinja.html:153 msgid "Name" msgstr "Имя" #: customfieldadmin/templates/customfieldadmin_genshi.html:139 #: customfieldadmin/templates/customfieldadmin_jinja.html:154 msgid "Type" msgstr "Тип" #: customfieldadmin/templates/customfieldadmin_genshi.html:140 #: customfieldadmin/templates/customfieldadmin_jinja.html:155 msgid "Label" msgstr "Описание" #: customfieldadmin/templates/customfieldadmin_genshi.html:141 #: customfieldadmin/templates/customfieldadmin_jinja.html:156 msgid "Order" msgstr "Порядок" #: customfieldadmin/templates/customfieldadmin_genshi.html:148 #: customfieldadmin/templates/customfieldadmin_jinja.html:166 msgid "Field cannot be deleted (declared in source code)" msgstr "Поле не может быть удалено (объявлено в исходнике)" #: customfieldadmin/templates/customfieldadmin_genshi.html:162 msgid "Currently outside regular range" msgstr "" #: customfieldadmin/templates/customfieldadmin_genshi.html:171 #: customfieldadmin/templates/customfieldadmin_jinja.html:193 msgid "Remove selected items" msgstr "Удалить выбранные" #: customfieldadmin/templates/customfieldadmin_genshi.html:173 #: customfieldadmin/templates/customfieldadmin_jinja.html:194 msgid "Apply changes" msgstr "Применить изменения" #: customfieldadmin/templates/customfieldadmin_jinja.html:62 #, fuzzy msgid "" "Options for Radio or Select (for Select, empty first line makes field " "optional):" msgstr "" "Варианты для Radio или Select (для Select пустой первый вариант делает " "поле необязательным):" #~ msgid "Custom field needs at least a name, type and label." #~ msgstr "Для создания дополнительного поля требуются имя, тип и описание." #~ msgid "Size of Textarea for entry (Textarea only):" #~ msgstr "Размер поля ввода (только для Textarea):" #~ msgid "Columns:" #~ msgstr "Столбцы:" #~ msgid "Size of Textarea:" #~ msgstr "Размер текстового поля:" #~ msgid "Cols:" #~ msgstr "" trac-customfieldadmin-0.4.0+svn18456/customfieldadmin/locale/customfieldadmin.pot0000644000175500017550000001524714134311767027616 0ustar debacledebacle# Translations template for TracCustomFieldAdmin. # Copyright (C) 2021 CodeResort.com (BV Network AS) # This file is distributed under the same license as the # TracCustomFieldAdmin project. # FIRST AUTHOR , 2021. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: TracCustomFieldAdmin 0.4.0\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2021-10-21 09:22-0700\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.9.1\n" #: customfieldadmin/admin.py:32 msgid "Ticket System" msgstr "" #: customfieldadmin/admin.py:33 msgid "Custom Fields" msgstr "" #: customfieldadmin/admin.py:68 #, python-format msgid "Custom field %(name)s does not exist." msgstr "" #: customfieldadmin/admin.py:98 msgid "No custom field selected" msgstr "" #: customfieldadmin/admin.py:128 msgid "" "Custom Fields are not correctly sorted. This may affect appearance " "when viewing tickets." msgstr "" #: customfieldadmin/api.py:81 msgid "Custom field requires attributes 'name' and 'type'." msgstr "" #: customfieldadmin/api.py:87 #, python-format msgid "Field name '%(name)s' is reserved" msgstr "" #: customfieldadmin/api.py:91 msgid "" "Only alphanumeric characters allowed for custom field name ('a-z' or " "'0-9' or '_'), with 'a-z' as first character." msgstr "" #: customfieldadmin/api.py:97 msgid "Custom field name must begin with a character (a-z)." msgstr "" #: customfieldadmin/api.py:100 #, python-format msgid "%(field_type)s is not a valid field type" msgstr "" #: customfieldadmin/api.py:105 msgid "Can not create as field already exists." msgstr "" #: customfieldadmin/api.py:108 msgid "Can't create a custom field with the same name as a built-in field." msgstr "" #: customfieldadmin/api.py:159 #, python-format msgid "Custom Field '%(name)s' does not exist. Cannot update." msgstr "" #: customfieldadmin/templates/customfieldadmin_genshi.html:11 msgid "Custom Fields Admin" msgstr "" #: customfieldadmin/templates/customfieldadmin_genshi.html:16 #: customfieldadmin/templates/customfieldadmin_jinja.html:7 #: customfieldadmin/templates/customfieldadmin_jinja.html:17 msgid "Manage Custom Fields" msgstr "" #: customfieldadmin/templates/customfieldadmin_genshi.html:21 #: customfieldadmin/templates/customfieldadmin_jinja.html:24 msgid "Modify Custom Field:" msgstr "" #: customfieldadmin/templates/customfieldadmin_genshi.html:23 #: customfieldadmin/templates/customfieldadmin_jinja.html:26 msgid "Name (cannot modify):" msgstr "" #: customfieldadmin/templates/customfieldadmin_genshi.html:28 #: customfieldadmin/templates/customfieldadmin_genshi.html:86 #: customfieldadmin/templates/customfieldadmin_jinja.html:31 #: customfieldadmin/templates/customfieldadmin_jinja.html:94 msgid "Type:" msgstr "" #: customfieldadmin/templates/customfieldadmin_genshi.html:38 #: customfieldadmin/templates/customfieldadmin_genshi.html:94 #: customfieldadmin/templates/customfieldadmin_jinja.html:42 #: customfieldadmin/templates/customfieldadmin_jinja.html:104 msgid "Label:" msgstr "" #: customfieldadmin/templates/customfieldadmin_genshi.html:43 #: customfieldadmin/templates/customfieldadmin_jinja.html:48 msgid "" "Default value\n" " (regular text for Text, Textarea, Radio or Select):" msgstr "" #: customfieldadmin/templates/customfieldadmin_genshi.html:49 #: customfieldadmin/templates/customfieldadmin_jinja.html:55 msgid "Format (Text or Textarea):" msgstr "" #: customfieldadmin/templates/customfieldadmin_genshi.html:55 msgid "" "Options for Radio or Select\n" " (for Select, empty first line makes field optional):" msgstr "" #: customfieldadmin/templates/customfieldadmin_genshi.html:66 #: customfieldadmin/templates/customfieldadmin_genshi.html:119 #: customfieldadmin/templates/customfieldadmin_jinja.html:72 #: customfieldadmin/templates/customfieldadmin_jinja.html:130 msgid "Rows:" msgstr "" #: customfieldadmin/templates/customfieldadmin_genshi.html:71 #: customfieldadmin/templates/customfieldadmin_jinja.html:76 msgid "Save" msgstr "" #: customfieldadmin/templates/customfieldadmin_genshi.html:72 #: customfieldadmin/templates/customfieldadmin_jinja.html:77 msgid "Cancel" msgstr "" #: customfieldadmin/templates/customfieldadmin_genshi.html:79 #: customfieldadmin/templates/customfieldadmin_jinja.html:87 msgid "Add Custom Field:" msgstr "" #: customfieldadmin/templates/customfieldadmin_genshi.html:81 #: customfieldadmin/templates/customfieldadmin_jinja.html:89 msgid "Name:" msgstr "" #: customfieldadmin/templates/customfieldadmin_genshi.html:99 #: customfieldadmin/templates/customfieldadmin_jinja.html:109 msgid "Default value:" msgstr "" #: customfieldadmin/templates/customfieldadmin_genshi.html:104 #: customfieldadmin/templates/customfieldadmin_jinja.html:114 msgid "Format:" msgstr "" #: customfieldadmin/templates/customfieldadmin_genshi.html:111 #: customfieldadmin/templates/customfieldadmin_jinja.html:121 msgid "Options:" msgstr "" #: customfieldadmin/templates/customfieldadmin_genshi.html:124 #: customfieldadmin/templates/customfieldadmin_jinja.html:134 msgid "Add" msgstr "" #: customfieldadmin/templates/customfieldadmin_genshi.html:130 msgid "No Custom Fields defined for this project." msgstr "" #: customfieldadmin/templates/customfieldadmin_genshi.html:138 #: customfieldadmin/templates/customfieldadmin_jinja.html:153 msgid "Name" msgstr "" #: customfieldadmin/templates/customfieldadmin_genshi.html:139 #: customfieldadmin/templates/customfieldadmin_jinja.html:154 msgid "Type" msgstr "" #: customfieldadmin/templates/customfieldadmin_genshi.html:140 #: customfieldadmin/templates/customfieldadmin_jinja.html:155 msgid "Label" msgstr "" #: customfieldadmin/templates/customfieldadmin_genshi.html:141 #: customfieldadmin/templates/customfieldadmin_jinja.html:156 msgid "Order" msgstr "" #: customfieldadmin/templates/customfieldadmin_genshi.html:148 #: customfieldadmin/templates/customfieldadmin_jinja.html:166 msgid "Field cannot be deleted (declared in source code)" msgstr "" #: customfieldadmin/templates/customfieldadmin_genshi.html:162 msgid "Currently outside regular range" msgstr "" #: customfieldadmin/templates/customfieldadmin_genshi.html:171 #: customfieldadmin/templates/customfieldadmin_jinja.html:193 msgid "Remove selected items" msgstr "" #: customfieldadmin/templates/customfieldadmin_genshi.html:173 #: customfieldadmin/templates/customfieldadmin_jinja.html:194 msgid "Apply changes" msgstr "" #: customfieldadmin/templates/customfieldadmin_jinja.html:62 msgid "" "Options for Radio or Select (for Select, empty first line makes field" " optional):" msgstr "" trac-customfieldadmin-0.4.0+svn18456/customfieldadmin/locale/nb/0000755000175500017550000000000014134311767024131 5ustar debacledebacletrac-customfieldadmin-0.4.0+svn18456/customfieldadmin/locale/nb/LC_MESSAGES/0000755000175500017550000000000014134311767025716 5ustar debacledebacletrac-customfieldadmin-0.4.0+svn18456/customfieldadmin/locale/nb/LC_MESSAGES/customfieldadmin.po0000644000175500017550000002040114134311767031602 0ustar debacledebacle# Norwegian Bokmål translations for TracCustomFieldAdmin. # Copyright (C) 2012 CodeResort.com (BV Network AS) # This file is distributed under the same license as the # TracCustomFieldAdmin project. # Odd Simon Simonsen , 2012. # msgid "" msgstr "" "Project-Id-Version: TracCustomFieldAdmin 0.2.8\n" "Report-Msgid-Bugs-To: simon-code@bvnetwork.no\n" "POT-Creation-Date: 2021-10-21 09:22-0700\n" "PO-Revision-Date: 2012-01-19 11:51+0100\n" "Last-Translator: Odd Simon Simonsen \n" "Language: nb\n" "Language-Team: nb \n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.9.1\n" #: customfieldadmin/admin.py:32 msgid "Ticket System" msgstr "Sakssystem" #: customfieldadmin/admin.py:33 msgid "Custom Fields" msgstr "Egendefinerte felt" #: customfieldadmin/admin.py:68 #, python-format msgid "Custom field %(name)s does not exist." msgstr "Egendefinert felt %(name)s eksisterer ikke." #: customfieldadmin/admin.py:98 msgid "No custom field selected" msgstr "Egendefinert felt er ikke valgt" #: customfieldadmin/admin.py:128 msgid "" "Custom Fields are not correctly sorted. This may affect appearance when " "viewing tickets." msgstr "" "Egendefinerte felt er ikke riktig sortert. Dette kan påvirke hvordan " "tickets vises." #: customfieldadmin/api.py:81 msgid "Custom field requires attributes 'name' and 'type'." msgstr "Egendefinerte felt må ha 'name' (navn) og 'type'." #: customfieldadmin/api.py:87 #, python-format msgid "Field name '%(name)s' is reserved" msgstr "" #: customfieldadmin/api.py:91 msgid "" "Only alphanumeric characters allowed for custom field name ('a-z' or " "'0-9' or '_'), with 'a-z' as first character." msgstr "" "Kun ASCII alfa-numeriske tegner er tillat for Egendefinerte \"\n" "\"felt ('a-z' og '0-9' og '_'), og med 'a-z' som første tegn." #: customfieldadmin/api.py:97 msgid "Custom field name must begin with a character (a-z)." msgstr "Egendefinert navn må begynne med et ASCII tegn ('a-z')." #: customfieldadmin/api.py:100 #, python-format msgid "%(field_type)s is not a valid field type" msgstr "%(field_type)s er ikke en gyldig felt type" #: customfieldadmin/api.py:105 msgid "Can not create as field already exists." msgstr "Feltet eksisterer. Kan ikke opprette." #: customfieldadmin/api.py:108 msgid "Can't create a custom field with the same name as a built-in field." msgstr "" #: customfieldadmin/api.py:159 #, python-format msgid "Custom Field '%(name)s' does not exist. Cannot update." msgstr "Egendefinert felt %(name)s eksisterer ikke. Kan ikke oppdatere." #: customfieldadmin/templates/customfieldadmin_genshi.html:11 msgid "Custom Fields Admin" msgstr "Brukerfefinert felt administrasjon" #: customfieldadmin/templates/customfieldadmin_genshi.html:16 #: customfieldadmin/templates/customfieldadmin_jinja.html:7 #: customfieldadmin/templates/customfieldadmin_jinja.html:17 msgid "Manage Custom Fields" msgstr "Administrere Egendefinerte felt" #: customfieldadmin/templates/customfieldadmin_genshi.html:21 #: customfieldadmin/templates/customfieldadmin_jinja.html:24 msgid "Modify Custom Field:" msgstr "Endre Egendefinert felt" #: customfieldadmin/templates/customfieldadmin_genshi.html:23 #: customfieldadmin/templates/customfieldadmin_jinja.html:26 msgid "Name (cannot modify):" msgstr "Navn (kan ikke endres):" #: customfieldadmin/templates/customfieldadmin_genshi.html:28 #: customfieldadmin/templates/customfieldadmin_genshi.html:86 #: customfieldadmin/templates/customfieldadmin_jinja.html:31 #: customfieldadmin/templates/customfieldadmin_jinja.html:94 msgid "Type:" msgstr "Type:" #: customfieldadmin/templates/customfieldadmin_genshi.html:38 #: customfieldadmin/templates/customfieldadmin_genshi.html:94 #: customfieldadmin/templates/customfieldadmin_jinja.html:42 #: customfieldadmin/templates/customfieldadmin_jinja.html:104 msgid "Label:" msgstr "Etikett:" #: customfieldadmin/templates/customfieldadmin_genshi.html:43 #: customfieldadmin/templates/customfieldadmin_jinja.html:48 msgid "" "Default value\n" " (regular text for Text, Textarea, Radio or Select):" msgstr "Standardverdi (vanlig tekst for Text, Textarea, Radio og Select):" #: customfieldadmin/templates/customfieldadmin_genshi.html:49 #: customfieldadmin/templates/customfieldadmin_jinja.html:55 msgid "Format (Text or Textarea):" msgstr "Format (Text og Textarea):" #: customfieldadmin/templates/customfieldadmin_genshi.html:55 msgid "" "Options for Radio or Select\n" " (for Select, empty first line makes field optional):" msgstr "" "Alternativer for Radio og Select (for Select betyr tom \"\n" "\"førsterad at feltet er valgfritt):" #: customfieldadmin/templates/customfieldadmin_genshi.html:66 #: customfieldadmin/templates/customfieldadmin_genshi.html:119 #: customfieldadmin/templates/customfieldadmin_jinja.html:72 #: customfieldadmin/templates/customfieldadmin_jinja.html:130 msgid "Rows:" msgstr "Rader:" #: customfieldadmin/templates/customfieldadmin_genshi.html:71 #: customfieldadmin/templates/customfieldadmin_jinja.html:76 msgid "Save" msgstr "Lagre" #: customfieldadmin/templates/customfieldadmin_genshi.html:72 #: customfieldadmin/templates/customfieldadmin_jinja.html:77 msgid "Cancel" msgstr "Avbryt" #: customfieldadmin/templates/customfieldadmin_genshi.html:79 #: customfieldadmin/templates/customfieldadmin_jinja.html:87 msgid "Add Custom Field:" msgstr "Legg til Egendefinert felt" #: customfieldadmin/templates/customfieldadmin_genshi.html:81 #: customfieldadmin/templates/customfieldadmin_jinja.html:89 msgid "Name:" msgstr "Navn:" #: customfieldadmin/templates/customfieldadmin_genshi.html:99 #: customfieldadmin/templates/customfieldadmin_jinja.html:109 msgid "Default value:" msgstr "Standardverdi:" #: customfieldadmin/templates/customfieldadmin_genshi.html:104 #: customfieldadmin/templates/customfieldadmin_jinja.html:114 msgid "Format:" msgstr "Format:" #: customfieldadmin/templates/customfieldadmin_genshi.html:111 #: customfieldadmin/templates/customfieldadmin_jinja.html:121 msgid "Options:" msgstr "Alternativer:" #: customfieldadmin/templates/customfieldadmin_genshi.html:124 #: customfieldadmin/templates/customfieldadmin_jinja.html:134 msgid "Add" msgstr "Legg til" #: customfieldadmin/templates/customfieldadmin_genshi.html:130 msgid "No Custom Fields defined for this project." msgstr "Ingen Egendefinerte felt definert for dette prosjektet." #: customfieldadmin/templates/customfieldadmin_genshi.html:138 #: customfieldadmin/templates/customfieldadmin_jinja.html:153 msgid "Name" msgstr "Navn" #: customfieldadmin/templates/customfieldadmin_genshi.html:139 #: customfieldadmin/templates/customfieldadmin_jinja.html:154 msgid "Type" msgstr "Type" #: customfieldadmin/templates/customfieldadmin_genshi.html:140 #: customfieldadmin/templates/customfieldadmin_jinja.html:155 msgid "Label" msgstr "Etikett" #: customfieldadmin/templates/customfieldadmin_genshi.html:141 #: customfieldadmin/templates/customfieldadmin_jinja.html:156 msgid "Order" msgstr "Sortering" #: customfieldadmin/templates/customfieldadmin_genshi.html:148 #: customfieldadmin/templates/customfieldadmin_jinja.html:166 msgid "Field cannot be deleted (declared in source code)" msgstr "Felt kan ikke slettes (definert i kode)" #: customfieldadmin/templates/customfieldadmin_genshi.html:162 msgid "Currently outside regular range" msgstr "Utenfor gjeldende verdier" #: customfieldadmin/templates/customfieldadmin_genshi.html:171 #: customfieldadmin/templates/customfieldadmin_jinja.html:193 msgid "Remove selected items" msgstr "Fjern Egendefinert felt" #: customfieldadmin/templates/customfieldadmin_genshi.html:173 #: customfieldadmin/templates/customfieldadmin_jinja.html:194 msgid "Apply changes" msgstr "Lagre endringer" #: customfieldadmin/templates/customfieldadmin_jinja.html:62 #, fuzzy msgid "" "Options for Radio or Select (for Select, empty first line makes field " "optional):" msgstr "" "Alternativer for Radio og Select (for Select betyr tom \"\n" "\"førsterad at feltet er valgfritt):" #~ msgid "Size of Textarea for entry (Textarea only):" #~ msgstr "Størrelse for Textarea felt:" #~ msgid "Columns:" #~ msgstr "Kolonner:" #~ msgid "Size of Textarea:" #~ msgstr "Størrelse for Textarea felt:" #~ msgid "Cols:" #~ msgstr "Kolonner:" trac-customfieldadmin-0.4.0+svn18456/customfieldadmin/locale/ja/0000755000175500017550000000000014134311767024124 5ustar debacledebacletrac-customfieldadmin-0.4.0+svn18456/customfieldadmin/locale/ja/LC_MESSAGES/0000755000175500017550000000000014134311767025711 5ustar debacledebacletrac-customfieldadmin-0.4.0+svn18456/customfieldadmin/locale/ja/LC_MESSAGES/customfieldadmin.po0000644000175500017550000002175314134311767031610 0ustar debacledebacle# Japanese translations for TracCustomFieldAdmin. # Copyright (C) 2012 CodeResort.com (BV Network AS) # This file is distributed under the same license as the # TracCustomFieldAdmin project. # Jun Omae , 2012. # msgid "" msgstr "" "Project-Id-Version: TracCustomFieldAdmin 0.2.13\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2021-10-21 09:22-0700\n" "PO-Revision-Date: 2012-03-21 16:53+0900\n" "Last-Translator: Jun Omae \n" "Language: ja\n" "Language-Team: ja \n" "Plural-Forms: nplurals=1; plural=0\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.9.1\n" #: customfieldadmin/admin.py:32 msgid "Ticket System" msgstr "チケットシステム" #: customfieldadmin/admin.py:33 msgid "Custom Fields" msgstr "カスタムフィールド" #: customfieldadmin/admin.py:68 #, python-format msgid "Custom field %(name)s does not exist." msgstr "カスタムフィールド %(name)s は存在しません。" #: customfieldadmin/admin.py:98 msgid "No custom field selected" msgstr "カスタムフィールドが選択されていません" #: customfieldadmin/admin.py:128 msgid "" "Custom Fields are not correctly sorted. This may affect appearance when " "viewing tickets." msgstr "カスタムフィールドの順序が正しくないため、チケット参照時の見た目に影響がある可能性があります。" #: customfieldadmin/api.py:81 msgid "Custom field requires attributes 'name' and 'type'." msgstr "カスタムフィールドには'名前'と'タイプ'の属性が必要になります。" #: customfieldadmin/api.py:87 #, python-format msgid "Field name '%(name)s' is reserved" msgstr "カスタムフィールド名 '%(name)s' は予約されています。" #: customfieldadmin/api.py:91 msgid "" "Only alphanumeric characters allowed for custom field name ('a-z' or " "'0-9' or '_'), with 'a-z' as first character." msgstr "カスタムフィールド名には、英数字のみ ('a-z', '0-9', '_')、最初の文字には 'a-z' が使えます。" #: customfieldadmin/api.py:97 msgid "Custom field name must begin with a character (a-z)." msgstr "カスタムフィールド名は a から z の文字で始めなけれはなりません。" #: customfieldadmin/api.py:100 #, python-format msgid "%(field_type)s is not a valid field type" msgstr "%(field_type)s は正しいタイプではありません" #: customfieldadmin/api.py:105 msgid "Can not create as field already exists." msgstr "既に存在するフィールドは作成できません。" #: customfieldadmin/api.py:108 msgid "Can't create a custom field with the same name as a built-in field." msgstr "ビルトインのフィールドと同じ名前のものは作成できません。" #: customfieldadmin/api.py:159 #, python-format msgid "Custom Field '%(name)s' does not exist. Cannot update." msgstr "カスタムフィールド '%(name)s' が存在しないため、更新できません。" #: customfieldadmin/templates/customfieldadmin_genshi.html:11 msgid "Custom Fields Admin" msgstr "カスタムフィールド管理" #: customfieldadmin/templates/customfieldadmin_genshi.html:16 #: customfieldadmin/templates/customfieldadmin_jinja.html:7 #: customfieldadmin/templates/customfieldadmin_jinja.html:17 msgid "Manage Custom Fields" msgstr "カスタムフィールドの管理" #: customfieldadmin/templates/customfieldadmin_genshi.html:21 #: customfieldadmin/templates/customfieldadmin_jinja.html:24 msgid "Modify Custom Field:" msgstr "カスタムフィールドの変更:" #: customfieldadmin/templates/customfieldadmin_genshi.html:23 #: customfieldadmin/templates/customfieldadmin_jinja.html:26 msgid "Name (cannot modify):" msgstr "名前 (変更出来ません):" #: customfieldadmin/templates/customfieldadmin_genshi.html:28 #: customfieldadmin/templates/customfieldadmin_genshi.html:86 #: customfieldadmin/templates/customfieldadmin_jinja.html:31 #: customfieldadmin/templates/customfieldadmin_jinja.html:94 msgid "Type:" msgstr "タイプ:" #: customfieldadmin/templates/customfieldadmin_genshi.html:38 #: customfieldadmin/templates/customfieldadmin_genshi.html:94 #: customfieldadmin/templates/customfieldadmin_jinja.html:42 #: customfieldadmin/templates/customfieldadmin_jinja.html:104 msgid "Label:" msgstr "ラベル:" #: customfieldadmin/templates/customfieldadmin_genshi.html:43 #: customfieldadmin/templates/customfieldadmin_jinja.html:48 msgid "" "Default value\n" " (regular text for Text, Textarea, Radio or Select):" msgstr "デフォルト値 (テキスト、テキストエリア、ラジオボタン、ドロップダウンに対する正規の文字列):" #: customfieldadmin/templates/customfieldadmin_genshi.html:49 #: customfieldadmin/templates/customfieldadmin_jinja.html:55 msgid "Format (Text or Textarea):" msgstr "書式 (テキスト、テキストエリア):" #: customfieldadmin/templates/customfieldadmin_genshi.html:55 msgid "" "Options for Radio or Select\n" " (for Select, empty first line makes field optional):" msgstr "ラジオボタン、ドロップダウンで選択させる値 (ドロップダウンの場合、最初の行を空にすると任意の選択になります):" #: customfieldadmin/templates/customfieldadmin_genshi.html:66 #: customfieldadmin/templates/customfieldadmin_genshi.html:119 #: customfieldadmin/templates/customfieldadmin_jinja.html:72 #: customfieldadmin/templates/customfieldadmin_jinja.html:130 msgid "Rows:" msgstr "行数:" #: customfieldadmin/templates/customfieldadmin_genshi.html:71 #: customfieldadmin/templates/customfieldadmin_jinja.html:76 msgid "Save" msgstr "保存" #: customfieldadmin/templates/customfieldadmin_genshi.html:72 #: customfieldadmin/templates/customfieldadmin_jinja.html:77 msgid "Cancel" msgstr "取り消し" #: customfieldadmin/templates/customfieldadmin_genshi.html:79 #: customfieldadmin/templates/customfieldadmin_jinja.html:87 msgid "Add Custom Field:" msgstr "カスタムフィールドの追加:" #: customfieldadmin/templates/customfieldadmin_genshi.html:81 #: customfieldadmin/templates/customfieldadmin_jinja.html:89 msgid "Name:" msgstr "名称:" #: customfieldadmin/templates/customfieldadmin_genshi.html:99 #: customfieldadmin/templates/customfieldadmin_jinja.html:109 msgid "Default value:" msgstr "デフォルト値:" #: customfieldadmin/templates/customfieldadmin_genshi.html:104 #: customfieldadmin/templates/customfieldadmin_jinja.html:114 msgid "Format:" msgstr "書式:" #: customfieldadmin/templates/customfieldadmin_genshi.html:111 #: customfieldadmin/templates/customfieldadmin_jinja.html:121 msgid "Options:" msgstr "選択させる値:" #: customfieldadmin/templates/customfieldadmin_genshi.html:124 #: customfieldadmin/templates/customfieldadmin_jinja.html:134 msgid "Add" msgstr "追加" #: customfieldadmin/templates/customfieldadmin_genshi.html:130 msgid "No Custom Fields defined for this project." msgstr "このプロジェクトにはカスタムフィールドは設定されていません。" #: customfieldadmin/templates/customfieldadmin_genshi.html:138 #: customfieldadmin/templates/customfieldadmin_jinja.html:153 msgid "Name" msgstr "名称" #: customfieldadmin/templates/customfieldadmin_genshi.html:139 #: customfieldadmin/templates/customfieldadmin_jinja.html:154 msgid "Type" msgstr "タイプ" #: customfieldadmin/templates/customfieldadmin_genshi.html:140 #: customfieldadmin/templates/customfieldadmin_jinja.html:155 msgid "Label" msgstr "ラベル" #: customfieldadmin/templates/customfieldadmin_genshi.html:141 #: customfieldadmin/templates/customfieldadmin_jinja.html:156 msgid "Order" msgstr "順序" #: customfieldadmin/templates/customfieldadmin_genshi.html:148 #: customfieldadmin/templates/customfieldadmin_jinja.html:166 msgid "Field cannot be deleted (declared in source code)" msgstr "削除出来ません (ソースコードにて定義されている)" #: customfieldadmin/templates/customfieldadmin_genshi.html:162 msgid "Currently outside regular range" msgstr "現在、正しい範囲から外れています" #: customfieldadmin/templates/customfieldadmin_genshi.html:171 #: customfieldadmin/templates/customfieldadmin_jinja.html:193 msgid "Remove selected items" msgstr "選択した項目を削除" #: customfieldadmin/templates/customfieldadmin_genshi.html:173 #: customfieldadmin/templates/customfieldadmin_jinja.html:194 msgid "Apply changes" msgstr "変更を適用" #: customfieldadmin/templates/customfieldadmin_jinja.html:62 #, fuzzy msgid "" "Options for Radio or Select (for Select, empty first line makes field " "optional):" msgstr "ラジオボタン、ドロップダウンで選択させる値 (ドロップダウンの場合、最初の行を空にすると任意の選択になります):" #~ msgid "Size of Textarea for entry (Textarea only):" #~ msgstr "テキストエリアのサイズ (テキストエリアのみ):" #~ msgid "Columns:" #~ msgstr "幅:" #~ msgid "Size of Textarea:" #~ msgstr "テキストエリアのサイズ:" #~ msgid "Cols:" #~ msgstr "幅:" trac-customfieldadmin-0.4.0+svn18456/customfieldadmin/locale/de/0000755000175500017550000000000014134311767024122 5ustar debacledebacletrac-customfieldadmin-0.4.0+svn18456/customfieldadmin/locale/de/LC_MESSAGES/0000755000175500017550000000000014134311767025707 5ustar debacledebacletrac-customfieldadmin-0.4.0+svn18456/customfieldadmin/locale/de/LC_MESSAGES/customfieldadmin.po0000644000175500017550000002100514134311767031574 0ustar debacledebacle# German translations for TracCustomFieldAdmin. # Copyright (C) 2012 CodeResort.com (BV Network AS) # This file is distributed under the same license as the # TracCustomFieldAdmin project. # Steffen Hoffmann , 2012. # msgid "" msgstr "" "Project-Id-Version: TracCustomFieldAdmin 0.2.8\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2021-10-21 09:22-0700\n" "PO-Revision-Date: 2012-09-22 22:44+0200\n" "Last-Translator: Steffen Hoffmann \n" "Language: de\n" "Language-Team: de \n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.9.1\n" #: customfieldadmin/admin.py:32 msgid "Ticket System" msgstr "Ticket-System" #: customfieldadmin/admin.py:33 msgid "Custom Fields" msgstr "Individuelle Felder" #: customfieldadmin/admin.py:68 #, python-format msgid "Custom field %(name)s does not exist." msgstr "Es gibt kein individuelles Feld %(name)s." #: customfieldadmin/admin.py:98 msgid "No custom field selected" msgstr "Kein individuelles Feld gewählt" #: customfieldadmin/admin.py:128 msgid "" "Custom Fields are not correctly sorted. This may affect appearance when " "viewing tickets." msgstr "" "Die individuellen Felder sind nicht ordnungsgemäß sortiert. Das kann ihre" " Darstellung bei der Ticket-Anzeige beeinflussen." #: customfieldadmin/api.py:81 msgid "Custom field requires attributes 'name' and 'type'." msgstr "Das individuelle Feld benötigt die Attribute 'name' und 'type'." #: customfieldadmin/api.py:87 #, python-format msgid "Field name '%(name)s' is reserved" msgstr "" #: customfieldadmin/api.py:91 msgid "" "Only alphanumeric characters allowed for custom field name ('a-z' or " "'0-9' or '_'), with 'a-z' as first character." msgstr "" "Nur alphanumerischen Zeichen sind als Name eines individuellem Feldes " "zugelassen ('a-z' oder '0-9' oder '_'), und 'a-z' als erstes Zeichen." #: customfieldadmin/api.py:97 msgid "Custom field name must begin with a character (a-z)." msgstr "" "Der Name des individuellen Feldes muss mit einem Kleinbuchstaben (a-z) " "beginnen." #: customfieldadmin/api.py:100 #, python-format msgid "%(field_type)s is not a valid field type" msgstr "%(field_type)s ist kein gültiger Feldtyp" #: customfieldadmin/api.py:105 msgid "Can not create as field already exists." msgstr "Das Feld kann nicht neu erstellt werden, weil es bereits existiert." #: customfieldadmin/api.py:108 msgid "Can't create a custom field with the same name as a built-in field." msgstr "" #: customfieldadmin/api.py:159 #, python-format msgid "Custom Field '%(name)s' does not exist. Cannot update." msgstr "Es gibt kein individuelles Feld '%(name)s'. Aktualisierung unmöglich." #: customfieldadmin/templates/customfieldadmin_genshi.html:11 msgid "Custom Fields Admin" msgstr "Individuelle Felder" #: customfieldadmin/templates/customfieldadmin_genshi.html:16 #: customfieldadmin/templates/customfieldadmin_jinja.html:7 #: customfieldadmin/templates/customfieldadmin_jinja.html:17 msgid "Manage Custom Fields" msgstr "Verwaltung individueller Felder" #: customfieldadmin/templates/customfieldadmin_genshi.html:21 #: customfieldadmin/templates/customfieldadmin_jinja.html:24 msgid "Modify Custom Field:" msgstr "Änderung des individuellen Feldes:" #: customfieldadmin/templates/customfieldadmin_genshi.html:23 #: customfieldadmin/templates/customfieldadmin_jinja.html:26 msgid "Name (cannot modify):" msgstr "Name (unveränderlich):" #: customfieldadmin/templates/customfieldadmin_genshi.html:28 #: customfieldadmin/templates/customfieldadmin_genshi.html:86 #: customfieldadmin/templates/customfieldadmin_jinja.html:31 #: customfieldadmin/templates/customfieldadmin_jinja.html:94 msgid "Type:" msgstr "Typ:" #: customfieldadmin/templates/customfieldadmin_genshi.html:38 #: customfieldadmin/templates/customfieldadmin_genshi.html:94 #: customfieldadmin/templates/customfieldadmin_jinja.html:42 #: customfieldadmin/templates/customfieldadmin_jinja.html:104 msgid "Label:" msgstr "Bezeichnung:" #: customfieldadmin/templates/customfieldadmin_genshi.html:43 #: customfieldadmin/templates/customfieldadmin_jinja.html:48 msgid "" "Default value\n" " (regular text for Text, Textarea, Radio or Select):" msgstr "" "Standardwert (Vorgabetext für Textzeile, Textfeld, Optionsschaltfläche " "oder Auswahllistenfeld):" #: customfieldadmin/templates/customfieldadmin_genshi.html:49 #: customfieldadmin/templates/customfieldadmin_jinja.html:55 msgid "Format (Text or Textarea):" msgstr "Format (Textzeile oder -feld):" #: customfieldadmin/templates/customfieldadmin_genshi.html:55 msgid "" "Options for Radio or Select\n" " (for Select, empty first line makes field optional):" msgstr "" "Wahlmöglichkeiten für Optionsschaltfläche oder Auswahllistenfeld (leere " "erste Zeile macht Auswahllistenfeld optional)" #: customfieldadmin/templates/customfieldadmin_genshi.html:66 #: customfieldadmin/templates/customfieldadmin_genshi.html:119 #: customfieldadmin/templates/customfieldadmin_jinja.html:72 #: customfieldadmin/templates/customfieldadmin_jinja.html:130 msgid "Rows:" msgstr "Zeilen:" #: customfieldadmin/templates/customfieldadmin_genshi.html:71 #: customfieldadmin/templates/customfieldadmin_jinja.html:76 msgid "Save" msgstr "Speichern" #: customfieldadmin/templates/customfieldadmin_genshi.html:72 #: customfieldadmin/templates/customfieldadmin_jinja.html:77 msgid "Cancel" msgstr "Abbrechen" #: customfieldadmin/templates/customfieldadmin_genshi.html:79 #: customfieldadmin/templates/customfieldadmin_jinja.html:87 msgid "Add Custom Field:" msgstr "Individuelles Feld hinzufügen:" #: customfieldadmin/templates/customfieldadmin_genshi.html:81 #: customfieldadmin/templates/customfieldadmin_jinja.html:89 msgid "Name:" msgstr "Name:" #: customfieldadmin/templates/customfieldadmin_genshi.html:99 #: customfieldadmin/templates/customfieldadmin_jinja.html:109 msgid "Default value:" msgstr "Standardwert:" #: customfieldadmin/templates/customfieldadmin_genshi.html:104 #: customfieldadmin/templates/customfieldadmin_jinja.html:114 msgid "Format:" msgstr "Format:" #: customfieldadmin/templates/customfieldadmin_genshi.html:111 #: customfieldadmin/templates/customfieldadmin_jinja.html:121 msgid "Options:" msgstr "Zusatzangaben:" #: customfieldadmin/templates/customfieldadmin_genshi.html:124 #: customfieldadmin/templates/customfieldadmin_jinja.html:134 msgid "Add" msgstr "Hinzufügen" #: customfieldadmin/templates/customfieldadmin_genshi.html:130 msgid "No Custom Fields defined for this project." msgstr "Für dieses Projekt wurden keine individuellen Felder definiert." #: customfieldadmin/templates/customfieldadmin_genshi.html:138 #: customfieldadmin/templates/customfieldadmin_jinja.html:153 msgid "Name" msgstr "Name" #: customfieldadmin/templates/customfieldadmin_genshi.html:139 #: customfieldadmin/templates/customfieldadmin_jinja.html:154 msgid "Type" msgstr "Typ" #: customfieldadmin/templates/customfieldadmin_genshi.html:140 #: customfieldadmin/templates/customfieldadmin_jinja.html:155 msgid "Label" msgstr "Bezeichnung" #: customfieldadmin/templates/customfieldadmin_genshi.html:141 #: customfieldadmin/templates/customfieldadmin_jinja.html:156 msgid "Order" msgstr "Reihenfolge" #: customfieldadmin/templates/customfieldadmin_genshi.html:148 #: customfieldadmin/templates/customfieldadmin_jinja.html:166 msgid "Field cannot be deleted (declared in source code)" msgstr "Feld kann nicht entfernt werden (Quellcode-Vorgabe)" #: customfieldadmin/templates/customfieldadmin_genshi.html:162 msgid "Currently outside regular range" msgstr "Momentan ausserhalb des üblichen Bereichs" #: customfieldadmin/templates/customfieldadmin_genshi.html:171 #: customfieldadmin/templates/customfieldadmin_jinja.html:193 msgid "Remove selected items" msgstr "Ausgewählte Einträge entfernen" #: customfieldadmin/templates/customfieldadmin_genshi.html:173 #: customfieldadmin/templates/customfieldadmin_jinja.html:194 msgid "Apply changes" msgstr "Änderungen übernehmen" #: customfieldadmin/templates/customfieldadmin_jinja.html:62 #, fuzzy msgid "" "Options for Radio or Select (for Select, empty first line makes field " "optional):" msgstr "" "Wahlmöglichkeiten für Optionsschaltfläche oder Auswahllistenfeld (leere " "erste Zeile macht Auswahllistenfeld optional)" #~ msgid "Size of Textarea for entry (Textarea only):" #~ msgstr "Grösse des Textfeldes (nur Textfeld):" #~ msgid "Columns:" #~ msgstr "Spalten:" #~ msgid "Size of Textarea:" #~ msgstr "Grösse des Textfeldes:" #~ msgid "Cols:" #~ msgstr "Spalten:" trac-customfieldadmin-0.4.0+svn18456/customfieldadmin/locale/.placeholder0000644000175500017550000000027111706405111026002 0ustar debacledebacle# DO NOT REMOVE THIS FILE # # This file ensures that 'locale' directory is included in distibutions even # when Babel is not installed. It prevents lookup and reference errors in Trac. trac-customfieldadmin-0.4.0+svn18456/customfieldadmin/templates/0000755000175500017550000000000014134311767024271 5ustar debacledebacletrac-customfieldadmin-0.4.0+svn18456/customfieldadmin/templates/customfieldadmin_genshi.html0000644000175500017550000001417714132333132032041 0ustar debacledebacle Custom Fields Admin

Manage Custom Fields

Modify Custom Field:

Add Custom Field:

No Custom Fields defined for this project.

  Name Type Label Order
${cf.name} ${cf.type} ${cf.label}
trac-customfieldadmin-0.4.0+svn18456/customfieldadmin/templates/customfieldadmin_jinja.html0000644000175500017550000001553314134311767031670 0ustar debacledebacle# extends 'admin.html' # block admintitle ${dgettext(domain, "Manage Custom Fields")} # endblock # block head ${ super() } # endblock head # block adminpanel

${dgettext(domain, "Manage Custom Fields")}

# if cf_display=='detail':
${jmacros.form_token_input()}
${dgettext(domain, "Modify Custom Field:")}

# endif # if cf_display=='list':
${jmacros.form_token_input()}
${dgettext(domain, "Add Custom Field:")}

# endif # if cf_display=='list':
# if not len(cfields):

${('No Custom Fields defined for this project.')}

# endif # if len(cfields):
${jmacros.form_token_input()} # for cf in cfields: # if not cf.registry: # else: # endif # endfor
  ${dgettext(domain, 'Name')} ${dgettext(domain, 'Type')} ${dgettext(domain, 'Label')} ${dgettext(domain, 'Order')}
${cf.name} ${cf.type} ${cf.label}
# endif
# endif # endblock trac-customfieldadmin-0.4.0+svn18456/messages.cfg0000644000175500017550000000063314132333132021222 0ustar debacledebacle[ignore: **/tests/**] [python: **.py] [genshi: **/templates/*_genshi.html] [html: **/templates/*_jinja.html] extensions = jinja2.ext.do, jinja2.ext.with_ variable_start_string = ${ variable_end_string = } line_statement_prefix = # line_comment_prefix = ## trim_blocks = yes lstrip_blocks = yes newstyle_gettext = yes silent = no [extractors] python = trac.dist:extract_python html = trac.dist:extract_html trac-customfieldadmin-0.4.0+svn18456/setup.cfg0000644000175500017550000000112514132333132020550 0ustar debacledebacle[egg_info] tag_build = dev [extract_messages] add_comments = TRANSLATOR: copyright_holder = CodeResort.com (BV Network AS) output_file = customfieldadmin/locale/customfieldadmin.pot keywords = _ tag_ width = 72 mapping_file = messages.cfg [init_catalog] input_file = customfieldadmin/locale/customfieldadmin.pot output_dir = customfieldadmin/locale domain = customfieldadmin [compile_catalog] directory = customfieldadmin/locale domain = customfieldadmin [update_catalog] input_file = customfieldadmin/locale/customfieldadmin.pot output_dir = customfieldadmin/locale domain = customfieldadmin trac-customfieldadmin-0.4.0+svn18456/LICENSE.txt0000644000175500017550000000276711144514242020572 0ustar debacledebacleCopyright (c) 2005-2009, CodeResort.com & Optaros.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. Neither the name of the copyright holder(s) nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. trac-customfieldadmin-0.4.0+svn18456/setup.py0000644000175500017550000000266014132333132020446 0ustar debacledebacle#!/usr/bin/env python from setuptools import setup from trac.dist import get_l10n_cmdclass extra = {} cmdclass = get_l10n_cmdclass() if cmdclass: extra['cmdclass'] = cmdclass setup(name='TracCustomFieldAdmin', version='0.4.0', packages=['customfieldadmin'], author='CodeResort.com & Optaros.com', description='Admin panel for managing Trac ticket custom fields.', url='https://trac-hacks.org/wiki/CustomFieldAdminPlugin', license='BSD', classifiers=[ 'Framework :: Trac', 'Intended Audience :: System Administrators', 'License :: OSI Approved :: BSD License', 'Operating System :: OS Independent', 'Programming Language :: Python :: 2', 'Programming Language :: Python :: 2.7', 'Programming Language :: Python :: 3', ], entry_points={ 'trac.plugins': [ 'customfieldadmin.api = customfieldadmin.api', 'customfieldadmin.admin = customfieldadmin.admin', ] }, exclude_package_data={'': ['tests/*']}, test_suite = 'customfieldadmin.tests.test_suite', tests_require = [], package_data={ 'customfieldadmin' : [ 'htdocs/css/*.css', 'htdocs/js/*.js', 'templates/*.html', 'locale/*/LC_MESSAGES/*.mo' ] }, extras_require = {'Babel': 'Babel>=0.9.6'}, **extra )