trac-customfieldadmin-0.4.0+svn18456/ 0000755 0001755 0001755 00000000000 14513334361 016740 5 ustar debacle debacle trac-customfieldadmin-0.4.0+svn18456/customfieldadmin/ 0000755 0001755 0001755 00000000000 14134311767 022273 5 ustar debacle debacle trac-customfieldadmin-0.4.0+svn18456/customfieldadmin/tests/ 0000755 0001755 0001755 00000000000 13677473547 023455 5 ustar debacle debacle trac-customfieldadmin-0.4.0+svn18456/customfieldadmin/tests/api.py 0000644 0001755 0001755 00000015543 13662031141 024556 0 ustar debacle debacle # -*- 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__.py 0000644 0001755 0001755 00000000760 13677473547 025571 0 ustar debacle debacle # -*- 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.py 0000644 0001755 0001755 00000011521 13677457056 025114 0 ustar debacle debacle # -*- 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.py 0000644 0001755 0001755 00000022421 14132333132 023403 0 ustar debacle debacle # -*- 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/ 0000755 0001755 0001755 00000000000 14124663267 023563 5 ustar debacle debacle trac-customfieldadmin-0.4.0+svn18456/customfieldadmin/htdocs/css/ 0000755 0001755 0001755 00000000000 10624306774 024351 5 ustar debacle debacle trac-customfieldadmin-0.4.0+svn18456/customfieldadmin/htdocs/js/ 0000755 0001755 0001755 00000000000 14124663267 024177 5 ustar debacle debacle trac-customfieldadmin-0.4.0+svn18456/customfieldadmin/htdocs/js/customfieldadmin.js 0000755 0001755 0001755 00000003705 14124663267 030074 0 ustar debacle debacle /**********
* 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__.py 0000644 0001755 0001755 00000000072 13662031141 024371 0 ustar debacle debacle import pkg_resources
pkg_resources.require('Trac >= 1.2')
trac-customfieldadmin-0.4.0+svn18456/customfieldadmin/admin.py 0000644 0001755 0001755 00000013345 14134311767 023743 0 ustar debacle debacle # -*- 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/ 0000755 0001755 0001755 00000000000 14134311767 023532 5 ustar debacle debacle trac-customfieldadmin-0.4.0+svn18456/customfieldadmin/locale/ru/ 0000755 0001755 0001755 00000000000 14134311767 024160 5 ustar debacle debacle trac-customfieldadmin-0.4.0+svn18456/customfieldadmin/locale/ru/LC_MESSAGES/ 0000755 0001755 0001755 00000000000 14134311767 025745 5 ustar debacle debacle trac-customfieldadmin-0.4.0+svn18456/customfieldadmin/locale/ru/LC_MESSAGES/customfieldadmin.po 0000644 0001755 0001755 00000022101 14134311767 031630 0 ustar debacle debacle # 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.pot 0000644 0001755 0001755 00000015247 14134311767 027616 0 ustar debacle debacle # 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/ 0000755 0001755 0001755 00000000000 14134311767 024131 5 ustar debacle debacle trac-customfieldadmin-0.4.0+svn18456/customfieldadmin/locale/nb/LC_MESSAGES/ 0000755 0001755 0001755 00000000000 14134311767 025716 5 ustar debacle debacle trac-customfieldadmin-0.4.0+svn18456/customfieldadmin/locale/nb/LC_MESSAGES/customfieldadmin.po 0000644 0001755 0001755 00000020401 14134311767 031602 0 ustar debacle debacle # 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/ 0000755 0001755 0001755 00000000000 14134311767 024124 5 ustar debacle debacle trac-customfieldadmin-0.4.0+svn18456/customfieldadmin/locale/ja/LC_MESSAGES/ 0000755 0001755 0001755 00000000000 14134311767 025711 5 ustar debacle debacle trac-customfieldadmin-0.4.0+svn18456/customfieldadmin/locale/ja/LC_MESSAGES/customfieldadmin.po 0000644 0001755 0001755 00000021753 14134311767 031610 0 ustar debacle debacle # 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/ 0000755 0001755 0001755 00000000000 14134311767 024122 5 ustar debacle debacle trac-customfieldadmin-0.4.0+svn18456/customfieldadmin/locale/de/LC_MESSAGES/ 0000755 0001755 0001755 00000000000 14134311767 025707 5 ustar debacle debacle trac-customfieldadmin-0.4.0+svn18456/customfieldadmin/locale/de/LC_MESSAGES/customfieldadmin.po 0000644 0001755 0001755 00000021005 14134311767 031574 0 ustar debacle debacle # 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/.placeholder 0000644 0001755 0001755 00000000271 11706405111 026002 0 ustar debacle debacle # 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/ 0000755 0001755 0001755 00000000000 14134311767 024271 5 ustar debacle debacle trac-customfieldadmin-0.4.0+svn18456/customfieldadmin/templates/customfieldadmin_genshi.html 0000644 0001755 0001755 00000014177 14132333132 032041 0 ustar debacle debacle
Custom Fields Admin
Manage Custom Fields
Add Custom Field:
Name:
Type:
${value.capitalize()}
Label:
Default value:
Format:
Rows:
trac-customfieldadmin-0.4.0+svn18456/customfieldadmin/templates/customfieldadmin_jinja.html 0000644 0001755 0001755 00000015533 14134311767 031670 0 ustar debacle debacle # 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:")}
${dgettext(domain, "Name (cannot modify):")} ${cfield.name}
${dgettext(domain, "Type:")}
# for value in field_types:
${value.capitalize()}
# endfor
${dgettext(domain, "Label:")}
${dgettext(domain, "Default value
(regular text for Text, Textarea, Radio or Select):")}
${dgettext(domain, "Format (Text or Textarea):")}
${dgettext(domain, "Options for Radio or Select (for Select, empty first line makes field optional):")}
${cfield.options}
${dgettext(domain, "Rows:")}
# endif
# if cf_display=='list':
${jmacros.form_token_input()}
${dgettext(domain, "Add Custom Field:")}
${dgettext(domain, 'Name:')}
${dgettext(domain, 'Type:')}
# for value in field_types:
${value.capitalize()}
# endfor
${dgettext(domain, 'Label:')}
${dgettext(domain, 'Default value:')}
${dgettext(domain, 'Format:')}
${dgettext(domain, 'Options:')}
${dgettext(domain, 'Rows:')}
# endif
# if cf_display=='list':
# endif
# endblock
trac-customfieldadmin-0.4.0+svn18456/messages.cfg 0000644 0001755 0001755 00000000633 14132333132 021222 0 ustar debacle debacle [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.cfg 0000644 0001755 0001755 00000001125 14132333132 020550 0 ustar debacle debacle [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.txt 0000644 0001755 0001755 00000002767 11144514242 020572 0 ustar debacle debacle Copyright (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.py 0000644 0001755 0001755 00000002660 14132333132 020446 0 ustar debacle debacle #!/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
)