Merge branch 'release/0.5.0'

* release/0.5.0: (55 commits)
  Bump version
  Update translations, reference Weblate instead of Transifex
  Update dependencies
  Remove the alioth fileserver
  Fix parameters for the lists search service
  Fix subdirectory for the duck service
  Use https and .org for the debtags service
  Use https for search.debian.org
  Use https for planet-search.debian.org
  Fix unused arguments, remove Pylons websetup
  Translated using Weblate (Chinese (Simplified))
  Translated using Weblate (Dutch)
  Translated using Weblate (German)
  Update translation catalogs
  Switch to Weblate, update Copyright years
  Fix deprecation warning
  Ignore PyCharm files
  Update dependencies to current Debian stretch versions
  Translated using Weblate (Dutch)
  Added translation using Weblate (Dutch)
  ...
This commit is contained in:
Jan Dittberner 2017-09-10 11:41:11 +02:00
commit 77a23cce88
62 changed files with 2399 additions and 2225 deletions

3
.gitignore vendored
View file

@ -6,3 +6,6 @@ data/
.ropeproject/ .ropeproject/
*.mo *.mo
*.pot *.pot
tags
debianmemberportfolio/model/keyringcache.db
.idea/

View file

@ -1,3 +1,6 @@
2015-11-12 Jan Dittberner <jan@dittberner.info>
* port to Python 3 and Flask
2015-03-09 Jan Dittberner <jan@dittberner.info> 2015-03-09 Jan Dittberner <jan@dittberner.info>
* apply patch for DMD link by Paul Wise * apply patch for DMD link by Paul Wise

View file

@ -1,3 +1,2 @@
include debianmemberportfolio/config/deployment.ini_tmpl recursive-include debianmemberportfolio/static *
recursive-include debianmemberportfolio/public *
recursive-include debianmemberportfolio/templates * recursive-include debianmemberportfolio/templates *

3
babel.cfg Normal file
View file

@ -0,0 +1,3 @@
[python: **.py]
[jinja2: **/templates/**.html]
extensions=jinja2.ext.autoescape,jinja2.ext.with_

View file

@ -1,9 +1,9 @@
# -*- python -*- # -*- python -*-
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# #
# Debian Member Portfolio Service functional tests package # Debian Member Portfolio Service Flask configuration
# #
# Copyright © 2009-2014 Jan Dittberner <jan@dittberner.info> # Copyright © 2015 Jan Dittberner <jan@dittberner.info>
# #
# This file is part of the Debian Member Portfolio Service. # This file is part of the Debian Member Portfolio Service.
# #
@ -20,3 +20,14 @@
# You should have received a copy of the GNU Affero General Public License # You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>. # along with this program. If not, see <https://www.gnu.org/licenses/>.
# #
WTF_CSRF_ENABLED = False
# available languages
LANGUAGES = {
'en': 'English',
'de': 'Deutsch',
'fr': 'Français',
'id': 'Bahasa Indonesia',
'pt_BR': 'Portuguese (Brazil)'
}

View file

@ -3,7 +3,7 @@
# #
# Debian Member Portfolio Service package # Debian Member Portfolio Service package
# #
# Copyright © 2009-2014 Jan Dittberner <jan@dittberner.info> # Copyright © 2009-2015 Jan Dittberner <jan@dittberner.info>
# #
# This file is part of the Debian Member Portfolio Service. # This file is part of the Debian Member Portfolio Service.
# #
@ -20,3 +20,12 @@
# You should have received a copy of the GNU Affero General Public License # You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>. # along with this program. If not, see <https://www.gnu.org/licenses/>.
# #
from flask import Flask
from flask_babel import Babel
app = Flask(__name__)
babel = Babel(app)
app.config.from_object('config')
from debianmemberportfolio import views

View file

@ -1,60 +0,0 @@
#
# Debian Member Portfolio Service - Pylons configuration
#
# The %(here)s variable will be replaced with the parent directory of this file
#
[DEFAULT]
debug = true
email_to = you@yourdomain.com
smtp_server = localhost
error_email_from = paste@localhost
[server:main]
use = egg:Paste#http
host = 0.0.0.0
port = 5000
[app:main]
use = egg:debianmemberportfolio
full_stack = true
static_files = true
cache_dir = %(here)s/data
beaker.session.key = debianmemberportfolio
beaker.session.secret = ${app_instance_secret}
app_instance_uuid = ${app_instance_uuid}
# If you'd like to fine-tune the individual locations of the cache data dirs
# for the Cache data, or the Session saves, un-comment the desired settings
# here:
#beaker.cache.data_dir = %(here)s/data/cache
#beaker.session.data_dir = %(here)s/data/sessions
# WARNING: *THE LINE BELOW MUST BE UNCOMMENTED ON A PRODUCTION ENVIRONMENT*
# Debug mode will enable the interactive debugging tool, allowing ANYONE to
# execute malicious code after an exception is raised.
set debug = false
# Logging configuration
[loggers]
keys = root
[handlers]
keys = console
[formatters]
keys = generic
[logger_root]
level = INFO
handlers = console
[handler_console]
class = StreamHandler
args = (sys.stderr,)
level = NOTSET
formatter = generic
[formatter_generic]
format = %(asctime)s %(levelname)-5.5s [%(name)s] [%(threadName)s] %(message)s

View file

@ -1,75 +0,0 @@
# -*- python -*-
# -*- coding: utf-8 -*-
#
# Debian Member Portfolio Service environment configuration
#
# Copyright © 2009-2014 Jan Dittberner <jan@dittberner.info>
#
# This file is part of the Debian Member Portfolio Service.
#
# Debian Member Portfolio Service is free software: you can redistribute it
# and/or modify it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the License,
# or (at your option) any later version.
#
# Debian Member Portfolio Service is distributed in the hope that it will be
# useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero
# General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
#
"""
Pylons environment configuration
"""
import os
from mako.lookup import TemplateLookup
from pylons.configuration import PylonsConfig
from pylons.error import handle_mako_error
import debianmemberportfolio.lib.app_globals as app_globals
import debianmemberportfolio.lib.helpers
from debianmemberportfolio.config.routing import make_map
def load_environment(global_conf, app_conf):
"""
Configures the Pylons environment via the ``pylons.config`` object.
"""
config = PylonsConfig()
# Pylons paths
root = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
paths = dict(root=root,
controllers=os.path.join(root, 'controllers'),
static_files=os.path.join(root, 'public'),
templates=[os.path.join(root, 'templates')])
# Initialize config with the basic options
config.init_app(
global_conf, app_conf, package='debianmemberportfolio', paths=paths)
config['routes.map'] = make_map(config)
config['pylons.app_globals'] = app_globals.Globals(config)
config['pylons.h'] = debianmemberportfolio.lib.helpers
# Setup cache object as early as possible
import pylons
pylons.cache._push_object(config['pylons.app_globals'].cache)
# Create the Mako TemplateLookup, with the default auto-escaping
config['pylons.app_globals'].mako_lookup = TemplateLookup(
directories=paths['templates'],
error_handler=handle_mako_error,
module_directory=os.path.join(app_conf['cache_dir'], 'templates'),
input_encoding='utf-8', default_filters=['escape'],
imports=['from webhelpers.html import escape'])
# CONFIGURATION OPTIONS HERE (note: all config options will override
# any Pylons config options)
return config

View file

@ -1,95 +0,0 @@
# -*- python -*-
# -*- coding: utf-8 -*-
#
# Debian Member Portfolio Service middleware configuration
#
# Copyright © 2009-2014 Jan Dittberner <jan@dittberner.info>
#
# This file is part of the Debian Member Portfolio Service.
#
# Debian Member Portfolio Service is free software: you can redistribute it
# and/or modify it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the License,
# or (at your option) any later version.
#
# Debian Member Portfolio Service is distributed in the hope that it will be
# useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero
# General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
#
"""
Pylons middleware initialization
"""
from beaker.middleware import SessionMiddleware
from paste.cascade import Cascade
from paste.registry import RegistryManager
from paste.urlparser import StaticURLParser
from paste.deploy.converters import asbool
from pylons.middleware import ErrorHandler, StatusCodeRedirect
from pylons.wsgiapp import PylonsApp
from routes.middleware import RoutesMiddleware
from debianmemberportfolio.config.environment import load_environment
def make_app(global_conf, full_stack=True, static_files=True, **app_conf):
"""
Create a Pylons WSGI application and return it
``global_conf``
The inherited configuration for this application. Normally from
the [DEFAULT] section of the Paste ini file.
``full_stack``
Whether this application provides a full WSGI stack (by default,
meaning it handles its own exceptions and errors). Disable
full_stack when this application is "managed" by another WSGI
middleware.
``static_files``
Whether this application serves its own static files; disable
when another web server is responsible for serving them.
``app_conf``
The application's local configuration. Normally specified in
the [app:<name>] section of the Paste ini file (where <name>
defaults to main).
"""
# Configure the Pylons environment
config = load_environment(global_conf, app_conf)
# The Pylons WSGI app
app = PylonsApp(config=config)
# Routing/Session/Cache Middleware
app = RoutesMiddleware(app, config['routes.map'])
app = SessionMiddleware(app, config)
# CUSTOM MIDDLEWARE HERE (filtered by error handling middlewares)
if asbool(full_stack):
# Handle Python exceptions
app = ErrorHandler(app, global_conf, **config['pylons.errorware'])
# Display error documents for 401, 403, 404 status codes (and
# 500 when debug is disabled)
if asbool(config['debug']):
app = StatusCodeRedirect(app)
else:
app = StatusCodeRedirect(app, [400, 401, 403, 404, 500])
# Establish the Registry for this application
app = RegistryManager(app)
if asbool(static_files):
# Serve static files
static_app = StaticURLParser(config['pylons.paths']['static_files'])
app = Cascade([static_app, app])
app.config = config
return app

View file

@ -1,58 +0,0 @@
# -*- python -*-
# -*- coding: utf-8 -*-
#
# Debian Member Portfolio Service routing configuration
#
# Copyright © 2009-2014 Jan Dittberner <jan@dittberner.info>
#
# This file is part of the Debian Member Portfolio Service.
#
# Debian Member Portfolio Service is free software: you can redistribute it
# and/or modify it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the License,
# or (at your option) any later version.
#
# Debian Member Portfolio Service is distributed in the hope that it will be
# useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero
# General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
#
"""
Routes configuration
The more specific and detailed routes should be defined first so they
may take precedent over the more generic routes. For more information
refer to the routes manual at https://routes.readthedocs.org/
"""
from routes import Mapper
def make_map(config):
"""
Create, configure and return the routes Mapper
"""
map = Mapper(directory=config['pylons.paths']['controllers'],
always_scan=config['debug'], explicit=True)
map.minimization = False
# The ErrorController route (handles 404/500 error pages); it should
# likely stay at the top, ensuring it can always be resolved
map.connect('/error/{action}', controller='error')
map.connect('/error/{action}/{id}', controller='error')
# CUSTOM ROUTES HERE
map.connect('/', controller='portfolio', action='index')
map.connect('/result', controller='portfolio', action='urllist')
map.connect('/htmlformhelper.js', controller='showformscripts',
action='index')
map.connect('/{controller}/{action}')
map.connect('/{controller}/{action}/{id}')
return map

View file

@ -1,22 +0,0 @@
# -*- python -*-
# -*- coding: utf-8 -*-
#
# Debian Member Portfolio Service controllers package
#
# Copyright © 2009-2014 Jan Dittberner <jan@dittberner.info>
#
# This file is part of the Debian Member Portfolio Service.
#
# Debian Member Portfolio Service is free software: you can redistribute it
# and/or modify it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the License,
# or (at your option) any later version.
#
# Debian Member Portfolio Service is distributed in the hope that it will be
# useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero
# General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
#

View file

@ -1,70 +0,0 @@
# -*- python -*-
# -*- coding: utf-8 -*-
#
# Debian Member Portfolio Service ErrorController
#
# Copyright © 2009-2014 Jan Dittberner <jan@dittberner.info>
#
# This file is part of the Debian Member Portfolio Service.
#
# Debian Member Portfolio Service is free software: you can redistribute it
# and/or modify it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the License,
# or (at your option) any later version.
#
# Debian Member Portfolio Service is distributed in the hope that it will be
# useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero
# General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
#
import cgi
from paste.urlparser import PkgResourcesParser
from pylons import request
from pylons.controllers.util import forward
from pylons.middleware import error_document_template
from webhelpers.html.builder import literal
from debianmemberportfolio.lib.base import BaseController
class ErrorController(BaseController):
"""Generates error documents as and when they are required.
The ErrorDocuments middleware forwards to ErrorController when error
related status codes are returned from the application.
This behaviour can be altered by changing the parameters to the
ErrorDocuments middleware in your config/middleware.py file.
"""
def document(self):
"""Render the error document"""
resp = request.environ.get('pylons.original_response')
content = literal(resp.body) or cgi.escape(
request.GET.get('message', ''))
page = error_document_template % \
dict(prefix=request.environ.get('SCRIPT_NAME', ''),
code=cgi.escape(
request.GET.get('code', str(resp.status_int))),
message=content)
return page
def img(self, id):
"""Serve Pylons' stock images"""
return self._serve_file('/'.join(['media/img', id]))
def style(self, id):
"""Serve Pylons' stock stylesheets"""
return self._serve_file('/'.join(['media/style', id]))
def _serve_file(self, path):
"""
Call Paste's FileApp (a WSGI application) to serve the file at
the specified path
"""
request.environ['PATH_INFO'] = '/%s' % path
return forward(PkgResourcesParser('pylons', 'pylons'))

View file

@ -1,212 +0,0 @@
# -*- python -*-
# -*- coding: utf-8 -*-
#
# Debian Member Portfolio Service PortfolioController
#
# Copyright © 2009-2014 Jan Dittberner <jan@dittberner.info>
#
# This file is part of the Debian Member Portfolio Service.
#
# Debian Member Portfolio Service is free software: you can redistribute it
# and/or modify it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the License,
# or (at your option) any later version.
#
# Debian Member Portfolio Service is distributed in the hope that it will be
# useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero
# General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
#
"""
This module defines the PortfolioController class used to render the portfolio
of a person.
"""
import logging
import simplejson
from pylons import request, response, tmpl_context as c
from pylons.i18n import N_, _
import formencode.api
import formencode.validators
from debianmemberportfolio.lib.base import BaseController, render
from debianmemberportfolio.model.form import DDDataRequest, DeveloperData
from debianmemberportfolio.model.urlbuilder import build_urls
from debianmemberportfolio.model import dddatabuilder
log = logging.getLogger(__name__)
class PortfolioController(BaseController):
"""
Main controller for the Debian Member Portfolio Service.
"""
#: This dictionary defines groups of labeled portfolio items.
_LABELS = {
'overview': {
'label': N_('Overview'),
'ddpo': N_("Debian Member's Package Overview"),
'alladdresses': N_("""Debian Member's Package Overview
... showing all email addresses"""),
},
'bugs': {
'label': N_('Bugs'),
'received': N_('''bugs received
(note: co-maintainers not listed, see \
<a href="https://bugs.debian.org/cgi-bin/bugreport.cgi?\
bug=430986">#430986</a>)'''),
'reported': N_('bugs reported'),
'usertags': N_('user tags'),
'searchall': N_('all messages (i.e., full text search for \
developer name on all bug logs)'),
'wnpp': N_('<a href="https://wiki.debian.org/WNPP">WNPP</a>'),
'correspondent': N_('correspondent for bugs'),
'graph': N_('one year open bug history graph'),
},
'build': {
'label': N_('Build'),
'buildd': N_('buildd.d.o'),
'igloo': N_('igloo'),
},
'qa': {
'label': N_('Quality Assurance'),
'dmd': N_('maintainer dashboard'),
'lintian': N_('lintian reports'),
'lintianfull': N_('full lintian reports (i.e. including \
"info"-level messages)'),
'piuparts': N_('piuparts'),
'patchtracker': N_('Debian patch tracking system'),
'duck': N_('Debian Url ChecKer'),
},
'lists': {
'label': N_('Mailing Lists'),
'dolists': N_('lists.d.o'),
'adolists': N_('lists.a.d.o'),
'gmane': N_('gmane'),
},
'files': {
'label': N_('Files'),
'people': N_('people.d.o'),
'oldpeople': N_('oldpeople'),
'alioth': N_('Alioth'),
},
'membership': {
'label': N_('Membership'),
'nm': N_('NM'),
'dbfinger': N_('DB information via finger'),
'db': N_('DB information via HTTP'),
'webid': N_('FOAF profile'),
'alioth': N_('Alioth'),
'wiki': N_('Wiki'),
'forum': N_('Forum'),
},
'miscellaneous': {
'label': N_('Miscellaneous'),
'debtags': N_('debtags'),
'planetname': N_('Planet Debian (name)'),
'planetuser': N_('Planet Debian (username)'),
'links': N_('links'),
'website': N_('Debian website'),
'search': N_('Debian search'),
'gpgfinger': N_('GPG public key via finger'),
'gpgweb': N_('GPG public key via HTTP'),
'nm': N_('NM, AM participation'),
'contrib': N_('Contribution information'),
},
'ssh': {
'label': N_('Information reachable via ssh (for Debian Members)'),
'owndndoms': N_('owned debian.net domains'),
'miainfo': N_('<a href="https://wiki.debian.org/qa.debian.org/'
'MIATeam">MIA</a> database information'),
'groupinfo': N_('Group membership information'),
},
'ubuntu': {
'label': N_('Ubuntu'),
'ubuntudiff': N_('Available patches from Ubuntu'),
},
}
#: list of field name tuples for Debian Maintainers
DM_TUPLES = (('name', 'name'),
('gpgfp', 'gpgfp'),
('nonddemail', 'email'))
#: list of field name tuples for Debian Developers
DD_TUPLES = (('username', 'username'),
('aliothusername', 'username'))
def _get_label(self, section, url=None):
if section in self._LABELS:
if url:
if url in self._LABELS[section]:
return self._LABELS[section][url]
elif 'label' in self._LABELS[section]:
return self._LABELS[section]['label']
if url:
return "%s.%s" % (section, url)
return section
def index(self):
"""
Render the input form.
"""
return render('/showform.mako')
def _build_request_params(self):
schema = DDDataRequest()
formencode.api.set_stdtranslation(
domain="FormEncode",
languages=[lang[0:2] for lang in request.languages])
form_result = schema.to_python(request.params)
fields = dddatabuilder.build_data(form_result['email'])
rp = request.params.copy()
if fields['type'] in (dddatabuilder.TYPE_DD, dddatabuilder.TYPE_DM):
for tuple in self.DM_TUPLES:
if not tuple[0] in rp or not rp[tuple[0]]:
rp[tuple[0]] = fields[tuple[1]]
if fields['type'] == dddatabuilder.TYPE_DD:
for tuple in self.DD_TUPLES:
if not tuple[0] in rp or not rp[tuple[0]]:
rp[tuple[0]] = fields[tuple[1]]
return rp
def urllist(self):
"""Handle the actual data."""
try:
rp = self._build_request_params()
except formencode.validators.Invalid as error:
c.messages = {'errors': error.unpack_errors()}
return render('/showform.mako')
schema = DeveloperData()
try:
formencode.api.set_stdtranslation(
domain="FormEncode",
languages=[lang[0:2] for lang in request.languages])
form_result = schema.to_python(rp)
except formencode.validators.Invalid, error:
c.messages = {'errors': error.unpack_errors()}
return render('/showform.mako')
if form_result['wikihomepage'] is None:
log.debug('generate wikihomepage from name')
form_result['wikihomepage'] = "".join(
[part.capitalize() for part in form_result['name'].split()])
data = build_urls(form_result)
if form_result['mode'] == 'json':
response.headers['Content-Type'] = 'text/javascript'
return simplejson.dumps(
dict([("%s.%s" % (entry[1], entry[2].name), entry[3])
for entry in data if entry[0] == 'url']))
for entry in data:
if entry[0] in ('url', 'error'):
entry.append(_(self._get_label(entry[1], entry[2].name)))
elif entry[0] == 'section':
entry.append(_(self._get_label(entry[1])))
c.urldata = data
return render('/showurls.mako')

View file

@ -1,75 +0,0 @@
# -*- python -*-
# -*- coding: utf-8 -*-
#
# Debian Member Portfolio Service ShowformscriptsController.
#
# Copyright © 2009-2014 Jan Dittberner <jan@dittberner.info>
#
# This file is part of the Debian Member Portfolio Service.
#
# Debian Member Portfolio Service is free software: you can redistribute it
# and/or modify it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the License,
# or (at your option) any later version.
#
# Debian Member Portfolio Service is distributed in the hope that it will be
# useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero
# General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
#
"""
This file defines the ShowformscriptsController used to generate the JavaScript
code in forms.
"""
import logging
import simplejson
from pylons import request, response
from pylons.controllers.util import abort
import formencode.api
import formencode.validators
from debianmemberportfolio.lib.base import BaseController, render
from debianmemberportfolio.model.form import DDDataRequest
from debianmemberportfolio.model import dddatabuilder
log = logging.getLogger(__name__)
class ShowformscriptsController(BaseController):
"""This controller is used to support data entry in showform.
It provides code for generating JavaScript as well as JSON
responses for autocompletion of fields."""
def index(self):
"""
This action generates the helper script for the showform page.
"""
response.headers['Content-Type'] = 'text/javascript; charset=utf-8'
return render('/showformscript.mako')
def fetchdddata(self):
"""
This action fetches the data for a given mail address and
returns them as JSON.
"""
schema = DDDataRequest()
try:
formencode.api.set_stdtranslation(
domain="FormEncode",
languages=[lang[0:2] for lang in request.languages])
form_result = schema.to_python(request.params)
except formencode.validators.Invalid, error:
errors = error.unpack_errors()
abort(400, "\n".join(
["%s: %s" % (key, errors[key]) for key in errors]))
fields = dddatabuilder.build_data(form_result['email'])
log.debug(fields)
response.headers['Content-Type'] = 'text/plain'
return simplejson.dumps(fields)

View file

@ -1,55 +0,0 @@
# -*- python -*-
# -*- coding: utf-8 -*-
#
# Debian Member Portfolio Service TemplateController
#
# Copyright © 2009-2014 Jan Dittberner <jan@dittberner.info>
#
# This file is part of the Debian Member Portfolio Service.
#
# Debian Member Portfolio Service is free software: you can redistribute it
# and/or modify it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the License,
# or (at your option) any later version.
#
# Debian Member Portfolio Service is distributed in the hope that it will be
# useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero
# General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
#
"""
This file contains the TemplateController used to render templates.
"""
from debianmemberportfolio.lib.base import BaseController
from pylons.controllers.util import abort
class TemplateController(BaseController):
def view(self, url):
"""By default, the final controller tried to fulfill the request
when no other routes match. It may be used to display a template
when all else fails, e.g.::
def view(self, url):
return render('/%s' % url)
Or if you're using Mako and want to explicitly send a 404 (Not
Found) response code when the requested template doesn't exist::
import mako.exceptions
def view(self, url):
try:
return render('/%s' % url)
except mako.exceptions.TopLevelLookupException:
abort(404)
By default this controller aborts the request with a 404 (Not
Found)
"""
abort(404)

View file

@ -0,0 +1,42 @@
from __future__ import unicode_literals
from flask_babel import gettext as _
from flask_wtf import Form
from wtforms import IntegerField, StringField, RadioField
from wtforms.validators import (
AnyOf, DataRequired, Email, Length, Optional, Regexp
)
class FingerPrint(Regexp):
def __init__(self, **kwargs):
super(FingerPrint, self).__init__(r'^[a-fA-F0-9]*$', **kwargs)
class PlainText(Regexp):
def __init__(self):
super(PlainText, self).__init__(r'^[a-zA-Z\-0-9]*$')
class DeveloperData(Form):
email = StringField('email', validators=[DataRequired(), Email()])
name = StringField('name', validators=[DataRequired()])
gpgfp = StringField('gpgfp', validators=[
FingerPrint(),
Length(min=32, max=40)
])
username = StringField('username', validators=[PlainText()])
nonddemail = StringField('nonddemail', validators=[Email()])
aliothusername = StringField('aliothusername', validators=[PlainText()])
mode = RadioField(
'mode', default='html', choices=[
('json', _('JSON')), ('html', _('HTML'))
], validators=[AnyOf(['json', 'html'])]
)
forumsid = IntegerField('forumsid', default=None, validators=[Optional()])
wikihomepage = StringField('wikihomepage', default=None, validators=[
Optional()])
class DeveloperDataRequest(Form):
email = StringField('email', validators=[DataRequired(), Email()])

View file

@ -1,22 +0,0 @@
# -*- python -*-
# -*- coding: utf-8 -*-
#
# Debian Member Portfolio Service lib package
#
# Copyright © 2009-2014 Jan Dittberner <jan@dittberner.info>
#
# This file is part of the Debian Member Portfolio Service.
#
# Debian Member Portfolio Service is free software: you can redistribute it
# and/or modify it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the License,
# or (at your option) any later version.
#
# Debian Member Portfolio Service is distributed in the hope that it will be
# useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero
# General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
#

View file

@ -1,43 +0,0 @@
# -*- python -*-
# -*- coding: utf-8 -*-
#
# Debian Member Portfolio Service application Globals
#
# Copyright © 2009-2014 Jan Dittberner <jan@dittberner.info>
#
# This file is part of the Debian Member Portfolio Service.
#
# Debian Member Portfolio Service is free software: you can redistribute it
# and/or modify it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the License,
# or (at your option) any later version.
#
# Debian Member Portfolio Service is distributed in the hope that it will be
# useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero
# General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
#
"""
The application's Globals object
"""
from beaker.cache import CacheManager
from beaker.util import parse_cache_config_options
class Globals(object):
"""
Globals acts as a container for objects available throughout the
life of the application
"""
def __init__(self, config):
"""
One instance of Globals is created during application
initialization and is available during requests via the
'app_globals' variable
"""
self.cache = CacheManager(**parse_cache_config_options(config))

View file

@ -1,55 +0,0 @@
# -*- python -*-
# -*- coding: utf-8 -*-
#
# Debian Member Portfolio Service base controller
#
# Copyright © 2009-2014 Jan Dittberner <jan@dittberner.info>
#
# This file is part of the Debian Member Portfolio Service.
#
# Debian Member Portfolio Service is free software: you can redistribute it
# and/or modify it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the License,
# or (at your option) any later version.
#
# Debian Member Portfolio Service is distributed in the hope that it will be
# useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero
# General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
#
"""
The base Controller API
Provides the BaseController class for subclassing.
"""
from pylons import tmpl_context as c, request
from pylons.controllers import WSGIController
from pylons.i18n import add_fallback
from pylons.templating import render_mako as render
class BaseController(WSGIController):
def __call__(self, environ, start_response):
"""Invoke the Controller"""
# WSGIController.__call__ dispatches to the Controller method
# the request is routed to. This routing information is
# available in environ['pylons.routes_dict']
# set language environment
try:
languages = request.languages
for lang in languages:
try:
add_fallback(lang.replace('-', '_'))
except:
pass
except:
pass
c.messages = {'errors': [], 'messages': []}
return WSGIController.__call__(self, environ, start_response)
__all__ = ['BaseController', 'render']

View file

@ -1,35 +0,0 @@
# -*- python -*-
# -*- coding: utf-8 -*-
#
# Debian Member Portfolio Service webhelpers
#
# Copyright © 2009-2014 Jan Dittberner <jan@dittberner.info>
#
# This file is part of the Debian Member Portfolio Service.
#
# Debian Member Portfolio Service is free software: you can redistribute it
# and/or modify it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the License,
# or (at your option) any later version.
#
# Debian Member Portfolio Service is distributed in the hope that it will be
# useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero
# General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
#
# pymode:lint_ignore=W0611
#
"""Helper functions
Consists of functions to typically be used within templates, but also
available to Controllers. This module is available to templates as 'h'.
"""
from webhelpers.html.builder import escape, literal
from webhelpers.html.tags import stylesheet_link, javascript_link, image, \
form, text, radio, submit, end_form, link_to, checkbox
from webhelpers.text import truncate
from webhelpers.textile import textile
from pylons import url

View file

@ -3,7 +3,7 @@
# #
# Debian Member Portfolio Service data builder # Debian Member Portfolio Service data builder
# #
# Copyright © 2009-2014 Jan Dittberner <jan@dittberner.info> # Copyright © 2009-2015 Jan Dittberner <jan@dittberner.info>
# #
# This file is part of the Debian Member Portfolio Service. # This file is part of the Debian Member Portfolio Service.
# #

View file

@ -1,51 +0,0 @@
# -*- python -*-
# -*- coding: utf-8 -*-
#
# Debian Member Portfolio Service form handling model
#
# Copyright © 2009-2014 Jan Dittberner <jan@dittberner.info>
#
# This file is part of the Debian Member Portfolio Service.
#
# Debian Member Portfolio Service is free software: you can redistribute it
# and/or modify it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the License,
# or (at your option) any later version.
#
# Debian Member Portfolio Service is distributed in the hope that it will be
# useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero
# General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
#
"""
This file contains the form definitions used in the controllers.
"""
import formencode
class DeveloperData(formencode.Schema):
"""Validation schema for DeveloperData."""
allow_extra_fields = True
filter_extra_fields = True
email = formencode.validators.Email(not_empty=True)
name = formencode.validators.String(not_empty=True)
gpgfp = formencode.All(formencode.validators.PlainText(),
formencode.validators.MinLength(32),
formencode.validators.MaxLength(40))
username = formencode.validators.PlainText()
nonddemail = formencode.validators.Email()
aliothusername = formencode.validators.PlainText()
mode = formencode.validators.OneOf([u'json', u'html'], if_missing=u'html')
forumsid = formencode.validators.Int(if_missing=None)
wikihomepage = formencode.validators.String(if_missing=None)
class DDDataRequest(formencode.Schema):
"""Validation schema for DDData request."""
allow_extra_fields = True
filter_extra_fields = False
email = formencode.validators.Email(not_empty=True)

View file

@ -3,7 +3,7 @@
# #
# Debian Member Portfolio Service key finder module # Debian Member Portfolio Service key finder module
# #
# Copyright © 2009-2014 Jan Dittberner <jan@dittberner.info> # Copyright © 2009-2015 Jan Dittberner <jan@dittberner.info>
# #
# This file is part of the Debian Member Portfolio Service. # This file is part of the Debian Member Portfolio Service.
# #
@ -36,14 +36,17 @@ cachetimestamp = 0
def _get_keyring_cache(): def _get_keyring_cache():
global db, cachetimestamp global db, cachetimestamp
if db is None or (time.time() - cachetimestamp) > 86300: if db is None or (time.time() - cachetimestamp) > 86300:
import anydbm import dbm
import pkg_resources import pkg_resources
import os.path import os.path
filename = pkg_resources.resource_filename(__name__, filename = pkg_resources.resource_filename(__name__,
'keyringcache') 'keyringcache')
logging.debug('reading cache data from %s', filename) logging.debug('reading cache data from %s', filename)
assert os.path.exists(filename) and os.path.isfile(filename) assert (
db = anydbm.open(filename, 'r') os.path.exists(filename + '.db') and
os.path.isfile(filename + '.db')
)
db = dbm.open(filename, 'r')
cachetimestamp = time.time() cachetimestamp = time.time()
return db return db
@ -53,7 +56,7 @@ def _get_cached(cachekey):
logging.debug('cache lookup for %s', cachekey) logging.debug('cache lookup for %s', cachekey)
if cachekey in cache: if cachekey in cache:
logging.debug('found entry %s', cache[cachekey]) logging.debug('found entry %s', cache[cachekey])
return cache[cachekey] return cache[cachekey].decode('utf8')
return None return None
@ -91,7 +94,7 @@ def getLoginByFingerprint(fpr):
def _dump_cache(): def _dump_cache():
cache = _get_keyring_cache() cache = _get_keyring_cache()
fprs = [] fprs = []
for key in cache.keys(): for key in [key.decode('utf8') for key in list(cache.keys())]:
if key.startswith('email:fpr:'): if key.startswith('email:fpr:'):
fpr = key.replace('email:fpr:', '') fpr = key.replace('email:fpr:', '')
if not fpr in fprs: if not fpr in fprs:
@ -102,8 +105,8 @@ def _dump_cache():
email = _get_cached('email:fpr:%s' % fpr) email = _get_cached('email:fpr:%s' % fpr)
name = _get_cached('name:fpr:%s' % fpr) name = _get_cached('name:fpr:%s' % fpr)
print fpr, login, ':' print(fpr, login, ':')
print ' ', name, email print(' ', name, email)
if __name__ == '__main__': if __name__ == '__main__':

View file

@ -3,7 +3,7 @@
# #
# Debian Member Portfolio Service application key ring analyzer tool # Debian Member Portfolio Service application key ring analyzer tool
# #
# Copyright © 2009-2014 Jan Dittberner <jan@dittberner.info> # Copyright © 2009-2015 Jan Dittberner <jan@dittberner.info>
# #
# This file is part of the Debian Member Portfolio Service. # This file is part of the Debian Member Portfolio Service.
# #
@ -26,10 +26,10 @@ retrieved data in a file database. The tool was inspired by Debian
qa's carnivore. qa's carnivore.
""" """
import anydbm import dbm
import pkg_resources import pkg_resources
import glob import glob
import ConfigParser import configparser
import os import os
import os.path import os.path
import logging import logging
@ -38,7 +38,7 @@ import sys
import email.utils import email.utils
CONFIG = ConfigParser.SafeConfigParser() CONFIG = configparser.ConfigParser()
def _get_keyrings(): def _get_keyrings():
@ -160,11 +160,15 @@ def process_keyrings():
stdout=subprocess.PIPE) stdout=subprocess.PIPE)
fpr = None fpr = None
for line in proc.stdout.readlines(): for line in proc.stdout.readlines():
try:
line = line.decode('utf8')
except UnicodeDecodeError:
line = line.decode('iso8859-1')
fpr = process_gpg_list_keys_line(line, fpr) fpr = process_gpg_list_keys_line(line, fpr)
retcode = proc.wait() retcode = proc.wait()
if retcode != 0: if retcode != 0:
logging.error("subprocess ended with return code %d", retcode) logging.error("subprocess ended with return code %d", retcode)
db = anydbm.open(pkg_resources.resource_filename(__name__, db = dbm.open(pkg_resources.resource_filename(__name__,
'keyringcache'), 'c') 'keyringcache'), 'c')
for key in resultdict: for key in resultdict:
db[key] = ":".join(resultdict[key]) db[key] = ":".join(resultdict[key])
@ -173,9 +177,9 @@ def process_keyrings():
if __name__ == '__main__': if __name__ == '__main__':
logging.basicConfig(stream=sys.stderr, level=logging.WARNING) logging.basicConfig(stream=sys.stderr, level=logging.WARNING)
CONFIG.readfp(pkg_resources.resource_stream( CONFIG.read_string(pkg_resources.resource_string(
__name__, 'portfolio.ini')) __name__, 'portfolio.ini').decode('utf8'))
gpghome = os.path.expanduser(CONFIG.get('DEFAULT', 'gnupghome')) gpghome = os.path.expanduser(CONFIG.get('DEFAULT', 'gnupghome'))
if not os.path.isdir(gpghome): if not os.path.isdir(gpghome):
os.makedirs(gpghome, 0700) os.makedirs(gpghome, 0o700)
process_keyrings() process_keyrings()

View file

@ -50,11 +50,11 @@ lintian.pattern=https://lintian.debian.org/maintainer/%(email)s.html
lintianfull.pattern=https://lintian.debian.org/full/%(email)s.html lintianfull.pattern=https://lintian.debian.org/full/%(email)s.html
piuparts.pattern=https://piuparts.debian.org/sid/maintainer/%(firstchar)s/%(email)s.html piuparts.pattern=https://piuparts.debian.org/sid/maintainer/%(firstchar)s/%(email)s.html
patchtracker.pattern=http://patch-tracker.debian.org/email/%(email)s patchtracker.pattern=http://patch-tracker.debian.org/email/%(email)s
duck.pattern=http://duck.debian.net/static/maintainer/%(email)s.html duck.pattern=http://duck.debian.net/persons/%(email)s.html
[lists] [lists]
urls=dolists,adolists,gmane urls=dolists,adolists,gmane
dolists.pattern=https://lists.debian.org/cgi-bin/search?author=%(name)s&sort=date dolists.pattern=https://lists.debian.org/cgi-bin/search?P="%%22%(name)s%%22&SORT=0
adolists.pattern=https://www.google.com/search?q=site%%3Alists.alioth.debian.org+%%22%(name)s%%22 adolists.pattern=https://www.google.com/search?q=site%%3Alists.alioth.debian.org+%%22%(name)s%%22
gmane.pattern=http://search.gmane.org/?email=%(name)s&group=gmane.linux.debian.* gmane.pattern=http://search.gmane.org/?email=%(name)s&group=gmane.linux.debian.*
# debconf list search has a tricky URL format # debconf list search has a tricky URL format
@ -64,11 +64,9 @@ gmane.pattern=http://search.gmane.org/?email=%(name)s&group=gmane.linux.debian.*
# maybe this could be implemented using some custom formatter function # maybe this could be implemented using some custom formatter function
[files] [files]
urls=people,alioth urls=people
people.pattern=https://people.debian.org/~%(username)s/ people.pattern=https://people.debian.org/~%(username)s/
people.optional=true people.optional=true
alioth.pattern=https://alioth.debian.org/~%(aliothusername)s/
alioth.optional=true
[membership] [membership]
urls=nm,dbfinger,db,webid,alioth,wiki,forum urls=nm,dbfinger,db,webid,alioth,wiki,forum
@ -83,18 +81,18 @@ webid.optional=true
alioth.pattern=https://alioth.debian.org/users/%(aliothusername)s/ alioth.pattern=https://alioth.debian.org/users/%(aliothusername)s/
alioth.optional=true alioth.optional=true
wiki.pattern=https://wiki.debian.org/%(wikihomepage)s wiki.pattern=https://wiki.debian.org/%(wikihomepage)s
forum.pattern=http://forums.debian.net/memberlist.php?mode=viewprofile&u=%(forumsid)d forum.pattern=http://forums.debian.net/memberlist.php?mode=viewprofile&u=%(forumsid)s
forum.optional=true forum.optional=true
[miscellaneous] [miscellaneous]
urls=debtags,links,planetname,planetuser,website,search,gpgfinger,gpgweb,contrib urls=debtags,links,planetname,planetuser,website,search,gpgfinger,gpgweb,contrib
debtags.pattern=http://debtags.debian.net/reports/maint/%(email)s debtags.pattern=https://debtags.debian.org/reports/maint/%(email)s
planetname.pattern=http://planet-search.debian.org/cgi-bin/search.cgi?terms=%%22%(name)s%%22 planetname.pattern=https://planet-search.debian.org/cgi-bin/search.cgi?terms=%%22%(name)s%%22
planetuser.pattern=http://planet-search.debian.org/cgi-bin/search.cgi?terms=%%22%(username)s%%22 planetuser.pattern=https://planet-search.debian.org/cgi-bin/search.cgi?terms=%%22%(username)s%%22
planetuser.optional=true planetuser.optional=true
links.pattern=https://www.google.com/search?hl=en&lr=&q=site%%3Adebian.org+%%22%(name)s%%22+-site%%3Anm.debian.org+-site%%3Alintian.debian.org+-site%%3Abugs.debian.org+-site%%3Alists.debian.org+-site%%3Apackages.debian.org+-site%%3Alists.alioth.debian.org+-site%%3Aftp.debian.org++-site%%3Apackages.qa.debian.org++-site%%3Aftp*.*.debian.org+-inurl%%3Adebian.org%%2Fdevel%%2Fpeople.+-inurl%%3Aindices%%2FMaintainers+-inurl%%3Adebian.org%%2Fdebian%%2Fproject++-inurl%%3A%%2Fdists%%2F&btnG=Search links.pattern=https://www.google.com/search?hl=en&lr=&q=site%%3Adebian.org+%%22%(name)s%%22+-site%%3Anm.debian.org+-site%%3Alintian.debian.org+-site%%3Abugs.debian.org+-site%%3Alists.debian.org+-site%%3Apackages.debian.org+-site%%3Alists.alioth.debian.org+-site%%3Aftp.debian.org++-site%%3Apackages.qa.debian.org++-site%%3Aftp*.*.debian.org+-inurl%%3Adebian.org%%2Fdevel%%2Fpeople.+-inurl%%3Aindices%%2FMaintainers+-inurl%%3Adebian.org%%2Fdebian%%2Fproject++-inurl%%3A%%2Fdists%%2F&btnG=Search
website.pattern=https://www.google.com/search?q=site:www.debian.org+%(name)s website.pattern=https://www.google.com/search?q=site:www.debian.org+%(name)s
search.pattern=http://search.debian.org/cgi-bin/omega?P=%%22%(name)s%%22 search.pattern=https://search.debian.org/cgi-bin/omega?P=%%22%(name)s%%22
gpgfinger.pattern=finger %(username)s/key@db.debian.org gpgfinger.pattern=finger %(username)s/key@db.debian.org
gpgfinger.type=finger gpgfinger.type=finger
gpgfinger.optional=true gpgfinger.optional=true

View file

@ -3,7 +3,7 @@
# #
# Debian Member Portfolio Service url builder # Debian Member Portfolio Service url builder
# #
# Copyright © 2009-2014 Jan Dittberner <jan@dittberner.info> # Copyright © 2009-2015 Jan Dittberner <jan@dittberner.info>
# #
# This file is part of the Debian Member Portfolio Service. # This file is part of the Debian Member Portfolio Service.
# #
@ -26,15 +26,18 @@ URLs using the given information and the URL patterns defined in
portfolio.ini. portfolio.ini.
""" """
from ConfigParser import ConfigParser, InterpolationMissingOptionError from configparser import ConfigParser, InterpolationMissingOptionError
from encodings.utf_8 import StreamReader as UTF8StreamReader
import pkg_resources import pkg_resources
from debianmemberportfolio.model import keyfinder from debianmemberportfolio.model import keyfinder
from urllib import quote_plus from urllib.parse import quote_plus
from pylons.i18n.translation import _, N_ from flask_babel import gettext as _, lazy_gettext as N_
my_config = ConfigParser() my_config = ConfigParser()
my_config.readfp(pkg_resources.resource_stream(__name__, 'portfolio.ini')) my_config.read_file(UTF8StreamReader(
pkg_resources.resource_stream(__name__, 'portfolio.ini')))
_FIELDNAMES_MAP = { _FIELDNAMES_MAP = {
'email': N_('Email address'), 'email': N_('Email address'),
@ -62,14 +65,15 @@ def _build_quoted_fields(fields):
Take a dictionary of raw field values and quote the values if required. Take a dictionary of raw field values and quote the values if required.
""" """
qfields = {} qfields = {}
for key, value in fields.iteritems(): for key, value in fields.items():
if value is not None: if value is not None:
if isinstance(value, unicode): if isinstance(value, str):
qfields[key] = quote_plus(value.encode('utf8')) qfields[key] = quote_plus(value.encode('utf8'))
elif isinstance(value, str): elif isinstance(value, str):
qfields[key] = quote_plus(value) qfields[key] = quote_plus(value)
else: else:
qfields[key] = value qfields[key] = value
qfields[key] = qfields[key].replace('%', '%%')
if 'gpgfp' not in qfields: if 'gpgfp' not in qfields:
fpr = keyfinder.getFingerprintByEmail(fields['email'].encode('utf8')) fpr = keyfinder.getFingerprintByEmail(fields['email'].encode('utf8'))
@ -97,8 +101,8 @@ def build_urls(fields):
data.append( data.append(
['url', section, entry, ['url', section, entry,
my_config.get(section, entry.name + '.pattern', my_config.get(section, entry.name + '.pattern',
False, qfields)]) raw=False, vars=qfields)])
except InterpolationMissingOptionError, e: except InterpolationMissingOptionError as e:
if not entry.optional: if not entry.optional:
if e.reference in _FIELDNAMES_MAP: if e.reference in _FIELDNAMES_MAP:
data.append(['error', section, entry, data.append(['error', section, entry,

View file

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

View file

Before

Width:  |  Height:  |  Size: 8.2 KiB

After

Width:  |  Height:  |  Size: 8.2 KiB

View file

@ -0,0 +1,48 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
{# vim: ft=jinja
Base template for XHTML templates.
Copyright © 2009-2017 Jan Dittberner <jan@dittberner.info>
This file is part of the Debian Member Portfolio service.
Debian Member Portfolio service is free software: you can redistribute it
and/or modify it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Debian Member Portfolio service is distributed in the hope that it will be
useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero
General Public License for more details.
You should have received a copy of the GNU Affero General Public License along
with this program. If not, see <https://www.gnu.org/licenses/>.
#}
<html>
<head>
<title>{% block title %}{{ _('Debian Member Portfolio Service') }}{% endblock %}</title>
<link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='stylesheets/style.css') }}" />
{% block extrahead %}{% endblock %}
</head>
<body>
<div id="header">
<img alt="{{ _('Debian Logo') }}" id="debianlogo" src="{{ url_for('static', filename='images/openlogo-100.jpg') }}" height="100" width="100" />
<h1>{{ _('Debian Member Portfolio Service') }}</h1>
<p>{% trans %}This service has been inspired by Stefano Zacchiroli's <a href="https://wiki.debian.org/DDPortfolio">DDPortfolio page in the Debian Wiki</a>. You can create a set of customized links leading to a Debian Member's or package maintainer's information regarding Debian.{% endtrans %}</p>
<p><a class="FlattrButton" style="display:none" title="Debian Member Portfolio Service" href="{{ request.scheme }}://portfolio.debian.net/">Debian Member Portfolio Service</a></p>
</div>
<div id="content">
{% block body %}{% endblock %}
</div>
<div id="footer">
<img alt="{{ _('AGPL - Free Software') }}" id="agpllogo" src="{{ url_for('static', filename='images/agplv3-88x31.png') }}" width="88" height="31" />
<p>{% trans browseurl='https://debianstuff.dittberner.info/gitweb/?p=debianmemberportfolio.git;a=summary', cloneurl='https://debianstuff.dittberner.info/git/debianmemberportfolio.git', weblateurl='https://hosted.weblate.org/projects/debian-member-portfolio-service/' %}The service is available under the terms of the <a href="https://www.gnu.org/licenses/agpl.html">GNU Affero General Public License</a> as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. You can <a href="{{ browseurl }}" title="Gitweb repository browser URL">browse the source code</a> or clone it from <a href="{{ cloneurl }}" title="git clone URL">{{ cloneurl }}</a> using <a href="https://git-scm.com/">git</a>. If you want to translate this service to your language you can contribute at <a href="{{ weblateurl }}" title="Debian Member Portfolio Service at Weblate">Weblate</a>.{% endtrans %}</p>
<p>{{ _('Copyright © 2009-2017 Jan Dittberner') }}</p>
</div>
<script type="text/javascript">
var flattr_url = '{{ request.scheme }}://portfolio.debian.net/';
</script>
<script src="{{ request.scheme }}://api.flattr.com/js/0.6/load.js?mode=auto&amp;button=compact" type="text/javascript"></script>
</body>
</html>

View file

@ -1,52 +0,0 @@
## -*- coding: utf-8 -*- \
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<%doc>
Base template for XHTML templates.
Copyright © 2009-2014 Jan Dittberner <jan@dittberner.info>
This file is part of the Debian Member Portfolio service.
Debian Member Portfolio service is free software: you can redistribute it
and/or modify it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Debian Member Portfolio service is distributed in the hope that it will be
useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero
General Public License for more details.
You should have received a copy of the GNU Affero General Public License along
with this program. If not, see <https://www.gnu.org/licenses/>.
</%doc>
<html>
<head>
<title>${_('Debian Member Portfolio Service')}${self.titleaddon()}</title>
${h.stylesheet_link(h.url('/stylesheets/style.css'))}
${self.extrahead()}
</head>
<body>
<div id="header">
${h.image(h.url('/images/openlogo-100.jpg'), _('Debian Logo'), 100, 100,
id='debianlogo')}
<h1>${_('Debian Member Portfolio Service')}</h1>
<p>${h.literal(_('''This service has been inspired by Stefano Zacchiroli's <a href="https://wiki.debian.org/DDPortfolio">DDPortfolio page in the Debian Wiki</a>. You can create a set of customized links leading to a Debian Member's or package maintainer's information regarding Debian.'''))}</p>
<p><a class="FlattrButton" style="display:none" title="Debian Member Portfolio Service" href="${request.scheme}://portfolio.debian.net/">Debian Member Portfolio Service</a></p>
</div>
<div id="content">
${self.body()}
</div>
<div id="footer">
${h.image(h.url('/images/agplv3-88x31.png'), _('AGPL - Free Software'), 88, 31,
id='agpllogo')}
<p>${h.literal(_('''The service is available under the terms of the <a href="https://www.gnu.org/licenses/agpl.html">GNU Affero General Public License</a> as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. You can <a href="%(browseurl)s" title="Gitweb repository browser URL">browse the source code</a> or clone it from <a href="%(cloneurl)s" title="git clone URL">%(cloneurl)s</a> using <a href="http://git-scm.com/">git</a>. If you want to translate this service to your language you can contribute at <a href="%(transifexurl)s" title="Debian Member Portfolio Service at Transifex">Transifex</a>.''') % dict((('browseurl', 'http://debianstuff.dittberner.info/gitweb/?p=debianmemberportfolio.git;a=summary'), ('cloneurl', 'http://debianstuff.dittberner.info/git/debianmemberportfolio.git'), ('transifexurl', 'https://www.transifex.com/projects/p/debportfolioservice/'))))}</p>
<p>${_(u'''Copyright © 2009-2014 Jan Dittberner''')}</p>
</div>
<script type="text/javascript">
var flattr_url = '${request.scheme}://portfolio.debian.net/';
</script>
<script src="${request.scheme}://api.flattr.com/js/0.6/load.js?mode=auto&amp;button=compact" type="text/javascript"></script>
</body>
</html>
<%def name="extrahead()"></%def>

View file

@ -0,0 +1,103 @@
{% extends "base.html" %}
{#
Template for the data input form.
Copyright © 2009-2015 Jan Dittberner <jan@dittberner.info>
This file is part of the Debian Member Portfolio service.
Debian Member Portfolio service is free software: you can redistribute it
and/or modify it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Debian Member Portfolio service is distributed in the hope that it will be
useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero
General Public License for more details.
You should have received a copy of the GNU Affero General Public License along
with this program. If not, see <https://www.gnu.org/licenses/>.
#}
{% block title %}{{ super()}} - {{ _('Enter your personal information') }}{% endblock %}
{% block extrahead %}{{ super() }}<script type="text/javascript" src="{{ url_for('static', filename='javascript/jquery/jquery.js') }}"></script>
<script type="text/javascript" src="{{ url_for('formhelper_js') }}"></script>
{% endblock %}
{% block body %}{{ super() }}
<form action="{{ url_for('urllist') }}" method="get">
<fieldset id="portfolio">
<legend>{{ _('Debian Member Portfolio') }}</legend>
<div id="emailfield"{% if form.email.errors %} class="witherrors"{% endif %}>
<label for="email">{{ _('Email address:') }}
{% if form.email.errors %}<br />
<span class="errormsg">{{ form.email.errors|join(', ') }}</span>
{% endif %}
</label><br />
{{ form.email }}<br />
</div>
<div id="showallfield" class="hidden">
<input type="checkbox" id="showall" name="showall"/>
<label for="showall">{{ _('Show all form fields') }}</label><br />
</div>
<div id="namefield"{% if form.name.errors %} class="witherrors"{% endif %}>
<label for="name">{{ _('Name:') }}{% if form.name.errors %}<br />
<span class="errormsg">{{ form.name.errors|join(', ') }}</span>
{% endif %}
</label><br />
{{ form.name }}
</div>
<div id="gpgfpfield"{% if form.gpgfp.errors %} class="witherrors"{% endif %}>
<label for="gpgfp">{{ _('GPG fingerprint:') }}{% if form.gpgfp.errors %}<br />
<span class="errormsg">{{ form.gpgfp.errors|join(', ') }}</span>
{% endif %}
</label><br />
{{ form.gpgfp }}
</div>
<div id="usernamefield"{% if form.username.errors %} class="witherrors"{% endif %}>
<label for="username">{{ _('Debian user name:') }}{% if form.username.errors %}<br />
<span class="errormsg">{{ form.username.errors|join(', ') }}</span>
{% endif %}
</label><br />
{{ form.username }}
</div>
<div id="nonddemailfield"{% if form.nonddemail.errors %} class="witherrors"{% endif %}>
<label for="nonddemail">{{ _('Non Debian email address:') }}{% if form.nonddemail.errors %}<br />
<span class="errormsg">{{ form.nonddemail.errors|join(', ') }}</span>
{% endif %}
</label><br />
{{ form.nonddemail }}
</div>
<div id="aliothusernamefield"{% if form.aliothusername.errors %} class="witherrors"{% endif %}>
<label for="aliothusername">{{ _('Alioth user name:') }}{% if form.aliothusername.errors %}<br />
<span class="errormsg">{{ form.aliothusername.errors|join(', ') }}</span>
{% endif %}
</label><br />
{{ form.aliothusername }}
</div>
<div id="wikihomepagefield"{% if form.wikihomepage.errors %} class="witherrors"{% endif %}>
<label for="wikihomepage">{{ _('Wiki user name:') }}{% if form.wikihomepage.errors %}<br />
<span class="errormsg">{{ form.wikihomepage.errors|join(', ') }}</span>
{% endif %}
</label><br />
{{ form.wikihomepage }}
</div>
<div id="forumsidfield"{% if form.forumsid.errors %} class="witherrors"{% endif %}>
<label for="forumsid">{{ _('Forum user id:') }}{% if form.forumsid.erros %}<br />
<span class="errormsg">{{ form.forumsid.errors|join(', ') }}</span>
{% endif %}
</label><br />
{{ form.forumsid }}
</div>
<div id="modefield"{% if form.mode.errors %} class="witherrors"{% endif %}>
<label for="mode">{{ _('Output format:') }}{% if form.mode.errors %}<br />
<span class="errormsg">{{ form.mode.errors|join(', ') }}</span>
{% endif %}
</label><br />
{% for subfield in form.mode %}
{{ subfield.label }}&#160;{{ subfield }}
{% endfor %}<br />
<input type="submit" value="{{ _('Build Debian Member Portfolio URLs') }}" />
</div>
</fieldset>
</form>
{% endblock %}

View file

@ -1,164 +0,0 @@
## -- coding: utf-8 -- \
<%inherit file="base.mako" />
<%doc>
Template for the data input form.
Copyright © 2009-2014 Jan Dittberner <jan@dittberner.info>
This file is part of the Debian Member Portfolio service.
Debian Member Portfolio service is free software: you can redistribute it
and/or modify it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Debian Member Portfolio service is distributed in the hope that it will be
useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero
General Public License for more details.
You should have received a copy of the GNU Affero General Public License along
with this program. If not, see <https://www.gnu.org/licenses/>.
</%doc>
<%def name="titleaddon()">
- ${_('Enter your personal information')}
</%def>
<%def name="extrahead()">${h.javascript_link('/javascript/jquery/jquery.js',
h.url(controller='showformscripts', action='index'))}</%def>
${h.form(h.url(action='urllist', controller='portfolio'), method='get')}
<fieldset id="portfolio">
<legend>${_('Debian Member Portfolio')}</legend>
<div id="emailfield" \
% if 'email' in c.messages['errors']:
class="witherrors" \
% endif
>
<label for="email">${_('Email address:')}
% if 'email' in c.messages['errors']:
<br />
<span class="errormsg">${c.messages['errors']['email'] | h}</span>
% endif
</label><br />
${h.text('email',
h.escape(request.params.get('email', None)), id='email')}<br />
</div>
<div id="showallfield" class="hidden">
${h.checkbox('showall', value='1', checked=False, id='showall')}
<label for="showall">${_(u'Show all form fields')}</label><br />
</div>
<div id="namefield" \
% if 'name' in c.messages['errors']:
class="witherrors" \
% endif
>
<label for="name">${_('Name:')}
% if 'name' in c.messages['errors']:
<br />
<span class="errormsg">${c.messages['errors']['name'] | h}</span>
% endif
</label><br />
${h.text('name',
h.escape(request.params.get('name', None)), id='name')}<br />
</div>
<div id="gpgfpfield">
<label for="gpgfp">${_('GPG fingerprint:')}
% if 'gpgfp' in c.messages['errors']:
<br />
<span class="errormsg">${c.messages['errors']['gpgfp'] | h}</span>
% endif
</label><br />
${h.text('gpgfp',
h.escape(request.params.get('gpgfp', None)),
id='gpgfp')}<br />
</div>
<div id="usernamefield" \
% if 'username' in c.messages['errors']:
class="witherrors" \
% endif
>
<label for="username">${_('Debian user name:')}
% if 'username' in c.messages['errors']:
<br />
<span class="errormsg">${c.messages['errors']['username'] | h}</span>
% endif
</label><br />
${h.text('username',
h.escape(request.params.get('username', None)),
id='username')}<br />
</div>
<div id="nonddemailfield" \
% if 'nonddemail' in c.messages['errors']:
class="witherrors" \
% endif
>
<label for="nonddemail">${_('Non Debian email address:') | h}
% if 'nonddemail' in c.messages['errors']:
<br />
<span class="errormsg">${c.messages['errors']['nonddemail'] | h}</span>
% endif
</label><br />
${h.text('nonddemail',
h.escape(request.params.get('nonddemail', None)),
id='nonddemail')}<br />
</div>
<div id="aliothusernamefield" \
% if 'aliothusername' in c.messages['errors']:
class="witherrors"
% endif
>
<label for="aliothusername">${_('Alioth user name:')}
% if 'aliothusername' in c.messages['errors']:
<br />
<span
class="errormsg">${c.messages['errors']['aliothusername'] | h}</span>
% endif
</label><br />
${h.text('aliothusername',
h.escape(request.params.get('username', None)),
id='aliothusername')}<br />
</div>
<div id="wikihomepagefield" \
% if 'wikihomepage' in c.messages['errors']:
class="witherrors"
% endif
>
<label for="wikihomepage">${_('Wiki user name:')}
% if 'wikihomepage' in c.messages['errors']:
<br />
<span class="errormsg">${c.messages['errors']['wikihomepage'] | h}</span>
% endif
</label><br />
${h.text('wikihomepage',
h.escape(request.params.get('wikihomepage', None)),
id='wikihomepage')}<br />
</div>
<div id="forumsidfield" \
% if 'forumsid' in c.messages['errors']:
class="witherrors"
% endif
>
<label for="forumsid">${_('Forum user id:')}
% if 'forumsid' in c.messages['errors']:
<br />
<span class="errormsg">${c.messages['errors']['forumsid'] | h}</span>
% endif
</label><br />
${h.text('forumsid',
h.escape(request.params.get('forumsid', None)),
id='forumsid')}<br />
</div>
<div id="modefield">
<label for="mode_html">${_('Output format:')}
% if 'mode' in c.messages['errors']:
<br />
<span class="errormsg">${c.messages['errors']['mode'] | h}</span>
% endif
</label><br />
${_('HTML')}&#160;${h.radio('mode', 'html',
checked=(request.params.get('mode',
'html') == 'html'))}&#160;${_('JSON')}&#160;${h.radio('mode',
'json', checked=(request.params.get('mode', 'html') == 'json'))}<br />
${h.submit('submit', value=_('Build Debian Member Portfolio URLs'))}
</div>
</fieldset>
${h.end_form()}

View file

@ -1,25 +1,22 @@
## -*- coding: utf-8 -*- \ {# vim: ft=jinja
<%doc>
Helper JavaScript for the data input form. Helper JavaScript for the data input form.
Copyright © 2009, 2010 Jan Dittberner <jan@dittberner.info> Copyright © 2009, 2010, 2015 Jan Dittberner <jan@dittberner.info>
This file is part of DDPortfolio service. This file is part of the Debian Member Portfolio service.
DDPortfolio service is free software: you can redistribute it and/or Debian Member Portfolio service is free software: you can redistribute it
modify it under the terms of the GNU Affero General Public License as and/or modify it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the published by the Free Software Foundation, either version 3 of the License, or
License, or (at your option) any later version. (at your option) any later version.
DDPortfolio service is distributed in the hope that it will be useful, Debian Member Portfolio service is distributed in the hope that it will be
but WITHOUT ANY WARRANTY; without even the implied warranty of useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero
Affero General Public License for more details. General Public License for more details.
You should have received a copy of the GNU Affero General Public
License along with this program. If not, see
<https://www.gnu.org/licenses/>.
</%doc>\
You should have received a copy of the GNU Affero General Public License along
with this program. If not, see <https://www.gnu.org/licenses/>.
#}
var defaulthiddendivs = new Array( var defaulthiddendivs = new Array(
'#namefield', '#gpgfpfield', '#usernamefield', '#nonddemailfield', '#namefield', '#gpgfpfield', '#usernamefield', '#nonddemailfield',
'#aliothusernamefield', '#wikihomepagefield', '#forumsidfield'); '#aliothusernamefield', '#wikihomepagefield', '#forumsidfield');
@ -32,13 +29,13 @@ var allfielddivs = new Array(
function updateFields(data, textStatus) { function updateFields(data, textStatus) {
if (data.type == 2) { // DD if (data.type == 2) { // DD
$('#name').attr('value', data.name).attr('readonly', 'readonly'); $('#name').prop('value', data.name).prop('readonly', 'readonly');
$('#gpgfp').attr('value', data.gpgfp); $('#gpgfp').prop('value', data.gpgfp);
$('#username').attr('value', data.username).attr( $('#username').prop('value', data.username).prop(
'readonly', 'readonly'); 'readonly', 'readonly');
$('#nonddemail').attr('value', data.email).focus(); $('#nonddemail').prop('value', data.email).focus();
$('#aliothusername').attr('value', data.username); $('#aliothusername').prop('value', data.username);
$('#wikihomepage').attr('value', data.wikihomepage); $('#wikihomepage').prop('value', data.wikihomepage);
$('#namefield').show(); $('#namefield').show();
$('#gpgfpfield').show(); $('#gpgfpfield').show();
@ -50,11 +47,11 @@ function updateFields(data, textStatus) {
$('#nonddemail').focus().select(); $('#nonddemail').focus().select();
} else if (data.type == 1) { // DM } else if (data.type == 1) { // DM
$('#name').attr('value', data.name).attr('readonly', 'readonly'); $('#name').prop('value', data.name).prop('readonly', 'readonly');
$('#gpgfp').attr('value', data.gpgfp); $('#gpgfp').prop('value', data.gpgfp);
$('#username').attr('value', ''); $('#username').prop('value', '');
$('#nonddemail').attr('value', data.email).focus(); $('#nonddemail').prop('value', data.email).focus();
$('#wikihomepage').attr('value', data.wikihomepage); $('#wikihomepage').prop('value', data.wikihomepage);
$('#namefield').show(); $('#namefield').show();
$('#gpgfpfield').show(); $('#gpgfpfield').show();
@ -66,10 +63,10 @@ function updateFields(data, textStatus) {
$('#aliothusername').focus().select(); $('#aliothusername').focus().select();
} else { } else {
$('#nonddemail').attr('value', data.email); $('#nonddemail').prop('value', data.email);
$('#name').removeAttr('readonly'); $('#name').removeAttr('readonly');
$('#username').removeAttr('readonly').attr('value', ''); $('#username').removeAttr('readonly').prop('value', '');
$('#gpgfp').attr('value', ''); $('#gpgfp').prop('value', '');
$('#usernamefield').hide(); $('#usernamefield').hide();
$('#gpgfpfield').hide(); $('#gpgfpfield').hide();
@ -84,7 +81,7 @@ function updateFields(data, textStatus) {
} }
function onChangeShowAll(event) { function onChangeShowAll(event) {
if ($('#showall').attr('checked')) { if ($('#showall').prop('checked')) {
for (var fielddiv in allfielddivs) { for (var fielddiv in allfielddivs) {
$(allfielddivs[fielddiv]).show(); $(allfielddivs[fielddiv]).show();
} }
@ -96,10 +93,10 @@ function onChangeShowAll(event) {
} }
function onBlurEmail() { function onBlurEmail() {
if ($.trim($('#email').attr('value')).length > 0) { if ($.trim($('#email').prop('value')).length > 0) {
$.ajax({ $.ajax({
'url' : '${h.url(controller="showformscripts", action="fetchdddata")}', 'url' : '{{ url_for("fetchdddata") }}',
'data' : {'email' : $('#email').attr('value')}, 'data' : {'email' : $('#email').prop('value')},
'dataType' : 'json', 'dataType' : 'json',
'success' : updateFields, 'success' : updateFields,
'error' : function(request, textStatus, errorThrown) { 'error' : function(request, textStatus, errorThrown) {
@ -116,7 +113,7 @@ $(document).ready(function() {
} }
} }
$('#showall').attr('checked', false).change(onChangeShowAll); $('#showall').prop('checked', false).change(onChangeShowAll);
$('#showallfield').show(); $('#showallfield').show();
$('#email').blur(onBlurEmail).focus(); $('#email').blur(onBlurEmail).focus();
}); });

View file

@ -0,0 +1,61 @@
{% extends "base.html" %}
{#
Template for the url output page.
Copyright © 2009-2015 Jan Dittberner <jan@dittberner.info>
This file is part of Debian Member Portfolio Service.
Debian Member Portfolio Service is free software: you can redistribute it
and/or modify it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Debian Member Portfolio Service is distributed in the hope that it will be
useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero
General Public License for more details.
You should have received a copy of the GNU Affero General Public License along
with this program. If not, see <https://www.gnu.org/licenses/>.
#}
{% block title %}{{ super() }} - {{ _('Your personal links') }}{% endblock %}
{% block body %}{{ super() }}
{% if urldata %}
<fieldset id="portfolio">
<legend>{{ _('Debian Member Porfolio') }}</legend>
<table id="urltable">
<thead>
<tr><th>{{ _('Usage') }}</th><th>{{ _('URL') }}</th></tr>
</thead>
<tbody>
{% for row in urldata %}
{% if row[0] == 'section' %}
<tr class="section"><th class="sectionlabel" colspan="2">{{ row[2] }}</th></tr>
{% set urlclass = 'odd' %}
{% elif row[0] == 'error' %}
<tr class="error">
<td>{{ row[4] }}</td>
<td>{{ _('Error during URL creation:') }}
<span class="errormsg">{{ row[3]|replace("\n", "<br />") }}</span></td>
</tr>
{% else %}
<tr class="url {{ urlclass }}">
<td>{{ row[4]|safe }}</td>
<td>
{% if row[2].type == 'url' %}
<a href="{{ row[3] }}">{{ row[3]|truncate(120) }}</a>
{% else %}
<tt>{{ row[3] }}</tt>
{% endif %}
</td>
</tr>
{% if urlclass == "odd" %}{% set urlclass = "even" %}{% else %}{% set urlclass = "odd" %}{% endif %}
{% endif %}
{% endfor %}
</tbody>
</table>
</fieldset>
{% endif %}
<p><a href="{{ url_for('urllist') }}">{{ _('Restart') }}</a></p>
{% endblock body %}

View file

@ -1,67 +0,0 @@
## -*- coding: utf-8 -*-
<%inherit file="base.mako" />\
<%doc>
Template for the url output page.
Copyright © 2009-2014 Jan Dittberner <jan@dittberner.info>
This file is part of Debian Member Portfolio Service.
Debian Member Portfolio Service is free software: you can redistribute it
and/or modify it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Debian Member Portfolio Service is distributed in the hope that it will be
useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero
General Public License for more details.
You should have received a copy of the GNU Affero General Public License along
with this program. If not, see <https://www.gnu.org/licenses/>.
</%doc>\
<%def name="titleaddon()">
- ${_('Your personal links')}
</%def>
% if c.urldata:
<fieldset id="portfolio">
<legend>${_('Debian Member Portfolio')}</legend>
<table id="urltable">
<thead>
<tr><th>${_('Usage')}</th><th>${_('URL')}</th></tr>
</thead>
<tbody>
% for row in c.urldata:
% if row[0] == 'section':
<tr class="section"><th class="sectionlabel" colspan="2">${row[2]}</th></tr>
<% urlclass = 'odd' %>
% elif row[0] == 'error':
<tr class="error">
<td>${h.literal(h.textile(row[4]))}</td>
<td>${_('Error during URL creation:')}
<span class="errormsg">${row[3].replace("\n",
'<br />')}</span></td>
</tr>
% else:
<tr class="url ${urlclass}">
<td>${h.literal(h.textile(row[4]))}</td>
<td>
% if row[2].type == 'url':
${h.link_to(h.truncate(row[3], length=120), row[3])}
% else:
<tt>${row[3]}</tt>
% endif
</td>
</tr>
<%
if urlclass == 'odd':
urlclass = 'even'
else:
urlclass = 'odd'
%>
% endif
% endfor
</tbody>
</table>
</fieldset>
% endif
<p>${h.link_to(_('Restart'), h.url(controller='portfolio', action='index'))}</p>

View file

@ -1,59 +0,0 @@
# -*- python -*-
# -*- coding: utf-8 -*-
#
# Debian Member Portfolio Service tests package
#
# Copyright © 2009-2014 Jan Dittberner <jan@dittberner.info>
#
# This file is part of the Debian Member Portfolio Service.
#
# Debian Member Portfolio Service is free software: you can redistribute it
# and/or modify it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the License,
# or (at your option) any later version.
#
# Debian Member Portfolio Service is distributed in the hope that it will be
# useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero
# General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
#
"""
Pylons application test package
When the test runner finds and executes tests within this directory, this file
will be loaded to setup the test environment.
It registers the root directory of the project in sys.path and pkg_resources,
in case the project hasn't been installed with setuptools. It also initializes
the application via websetup (paster setup-app) with the project's test.ini
configuration file.
"""
from unittest import TestCase
from paste.script.appinstall import SetupCommand
from pylons import url
from routes.util import URLGenerator
from webtest import TestApp
import pylons.test
__all__ = ['environ', 'url', 'TestController']
# Invoke websetup with the current config file
SetupCommand('setup-app').run([pylons.test.pylonsapp.config['__file__']])
environ = {}
class TestController(TestCase):
def __init__(self, *args, **kwargs):
wsgiapp = pylons.test.pylonsapp
config = wsgiapp.config
self.app = TestApp(wsgiapp)
url._push_object(URLGenerator(config['routes.map'], environ))
TestCase.__init__(self, *args, **kwargs)

View file

@ -1,43 +0,0 @@
# -*- python -*-
# -*- coding: utf-8 -*-
#
# Debian Member Portfolio Service PortfolioController test
#
# Copyright © 2009-2014 Jan Dittberner <jan@dittberner.info>
#
# This file is part of the Debian Member Portfolio Service.
#
# Debian Member Portfolio Service is free software: you can redistribute it
# and/or modify it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the License,
# or (at your option) any later version.
#
# Debian Member Portfolio Service is distributed in the hope that it will be
# useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero
# General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
#
"""
This module defines test cases for the PortfolioController.
"""
from debianmemberportfolio.tests import TestController, url
class TestPortfolioController(TestController):
"""
Test cases for PortfolioController.
"""
def test_index(self):
"""
Test for the controller's index action.
"""
response = self.app.get(url(controller='portfolio', action='index'))
# Test response...
assert response.status_int == 200
assert response.content_type == "text/html"
assert "Debian Member Portfolio Service" in response

View file

@ -1,44 +0,0 @@
# -*- python -*-
# -*- coding: utf-8 -*-
#
# Debian Member Portfolio Service ShowformscriptsController test
#
# Copyright © 2009-2014 Jan Dittberner <jan@dittberner.info>
#
# This file is part of the Debian Member Portfolio Service.
#
# Debian Member Portfolio Service is free software: you can redistribute it
# and/or modify it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the License,
# or (at your option) any later version.
#
# Debian Member Portfolio Service is distributed in the hope that it will be
# useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero
# General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
#
"""
This module defines test cases for the ShowformscriptsController.
"""
from debianmemberportfolio.tests import TestController, url
class TestShowformscriptsController(TestController):
"""
Test cases for ShowformscriptsController.
"""
def test_index(self):
"""
Test for the controller's index action.
"""
response = self.app.get(
url(controller='showformscripts', action='index'))
# Test response...
assert response.status_int == 200
assert response.content_type == "text/javascript"
assert "function updateField" in response

View file

@ -1,22 +0,0 @@
# -*- python -*-
# -*- coding: utf-8 -*-
#
# Debian Member Portfolio Service model tests
#
# Copyright © 2009-2014 Jan Dittberner <jan@dittberner.info>
#
# This file is part of the Debian Member Portfolio Service.
#
# Debian Member Portfolio Service is free software: you can redistribute it
# and/or modify it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the License,
# or (at your option) any later version.
#
# Debian Member Portfolio Service is distributed in the hope that it will be
# useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero
# General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
#

View file

@ -9,25 +9,35 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Debian Member Portfolio Service 0.3.1\n" "Project-Id-Version: Debian Member Portfolio Service 0.3.1\n"
"Report-Msgid-Bugs-To: jan@dittberner.info\n" "Report-Msgid-Bugs-To: jan@dittberner.info\n"
"POT-Creation-Date: 2014-02-08 18:14+0100\n" "POT-Creation-Date: 2017-09-10 10:49+0200\n"
"PO-Revision-Date: 2014-02-08 18:03+0100\n" "PO-Revision-Date: 2017-02-17 11:19+0000\n"
"Last-Translator: Jan Dittberner <jan@dittberner.info>\n" "Last-Translator: Jan Dittberner <jandd@debian.org>\n"
"Language-Team: de <de@li.org>\n" "Language: de\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n" "Language-Team: German <https://hosted.weblate.org/projects/debian-member-"
"portfolio-service/translations/de/>\n"
"Plural-Forms: nplurals=2; plural=n != 1\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n" "Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 0.9.6\n" "Generated-By: Babel 2.5.0\n"
#: debianmemberportfolio/controllers/portfolio.py:45 #: debianmemberportfolio/forms.py:33
msgid "JSON"
msgstr "JSON"
#: debianmemberportfolio/forms.py:33
msgid "HTML"
msgstr "HTML"
#: debianmemberportfolio/views.py:40
msgid "Overview" msgid "Overview"
msgstr "Überblick" msgstr "Überblick"
#: debianmemberportfolio/controllers/portfolio.py:46 #: debianmemberportfolio/views.py:41
msgid "Debian Member's Package Overview" msgid "Debian Member's Package Overview"
msgstr "Paketübersicht des Debian-Mitglieds" msgstr "Paketübersicht des Debian-Mitglieds"
#: debianmemberportfolio/controllers/portfolio.py:47 #: debianmemberportfolio/views.py:42
msgid "" msgid ""
"Debian Member's Package Overview\n" "Debian Member's Package Overview\n"
"... showing all email addresses" "... showing all email addresses"
@ -35,11 +45,11 @@ msgstr ""
"Paketübersicht des Debian-Mitglieds\n" "Paketübersicht des Debian-Mitglieds\n"
"... mit allen E-Mailadressen" "... mit allen E-Mailadressen"
#: debianmemberportfolio/controllers/portfolio.py:51 #: debianmemberportfolio/views.py:46
msgid "Bugs" msgid "Bugs"
msgstr "Fehler" msgstr "Fehler"
#: debianmemberportfolio/controllers/portfolio.py:52 #: debianmemberportfolio/views.py:47
msgid "" msgid ""
"bugs received\n" "bugs received\n"
"(note: co-maintainers not listed, see <a href=\"https://bugs.debian.org" "(note: co-maintainers not listed, see <a href=\"https://bugs.debian.org"
@ -50,247 +60,246 @@ msgstr ""
"href=\"https://bugs.debian.org/cgi-" "href=\"https://bugs.debian.org/cgi-"
"bin/bugreport.cgi?bug=430986\">#430986</a>)" "bin/bugreport.cgi?bug=430986\">#430986</a>)"
#: debianmemberportfolio/controllers/portfolio.py:56 #: debianmemberportfolio/views.py:51
msgid "bugs reported" msgid "bugs reported"
msgstr "Berichtete Fehler" msgstr "Berichtete Fehler"
#: debianmemberportfolio/controllers/portfolio.py:57 #: debianmemberportfolio/views.py:52
msgid "user tags" msgid "user tags"
msgstr "User Tags" msgstr "User Tags"
#: debianmemberportfolio/controllers/portfolio.py:58 #: debianmemberportfolio/views.py:53
msgid "all messages (i.e., full text search for developer name on all bug logs)" msgid "all messages (i.e., full text search for developer name on all bug logs)"
msgstr "" msgstr ""
"Alle Nachrichten (d.h. Volltextsuche nach dem Entwicklernamen in allen " "Alle Nachrichten (d.h. Volltextsuche nach dem Entwicklernamen in allen "
"Fehlerlogs)" "Fehlerlogs)"
#: debianmemberportfolio/controllers/portfolio.py:60 #: debianmemberportfolio/views.py:55
msgid "<a href=\"https://wiki.debian.org/WNPP\">WNPP</a>" msgid "<a href=\"https://wiki.debian.org/WNPP\">WNPP</a>"
msgstr "<a href=\"https://wiki.debian.org/WNPP\">WNPP</a>" msgstr "<a href=\"https://wiki.debian.org/WNPP\">WNPP</a>"
#: debianmemberportfolio/controllers/portfolio.py:61 #: debianmemberportfolio/views.py:56
msgid "correspondent for bugs" msgid "correspondent for bugs"
msgstr "Beitragender zu Fehlern" msgstr "Beitragender zu Fehlern"
#: debianmemberportfolio/controllers/portfolio.py:62 #: debianmemberportfolio/views.py:57
msgid "one year open bug history graph" msgid "one year open bug history graph"
msgstr "Graph der Entwicklung offener Fehlerberichte über ein Jahr" msgstr "Graph der Entwicklung offener Fehlerberichte über ein Jahr"
#: debianmemberportfolio/controllers/portfolio.py:65 #: debianmemberportfolio/views.py:60
msgid "Build" msgid "Build"
msgstr "Build" msgstr "Build"
#: debianmemberportfolio/controllers/portfolio.py:66 #: debianmemberportfolio/views.py:61
msgid "buildd.d.o" msgid "buildd.d.o"
msgstr "buildd.d.o" msgstr "buildd.d.o"
#: debianmemberportfolio/controllers/portfolio.py:67 #: debianmemberportfolio/views.py:62
msgid "igloo" msgid "igloo"
msgstr "Igloo" msgstr "Igloo"
#: debianmemberportfolio/controllers/portfolio.py:70 #: debianmemberportfolio/views.py:65
msgid "Quality Assurance" msgid "Quality Assurance"
msgstr "Qualitätssicherung" msgstr "Qualitätssicherung"
#: debianmemberportfolio/controllers/portfolio.py:71 #: debianmemberportfolio/views.py:66
msgid "maintainer dashboard" msgid "maintainer dashboard"
msgstr "Maintainer Dashboard" msgstr "Maintainer Dashboard"
#: debianmemberportfolio/controllers/portfolio.py:72 #: debianmemberportfolio/views.py:67
msgid "lintian reports" msgid "lintian reports"
msgstr "Lintian-Berichte" msgstr "Lintian-Berichte"
#: debianmemberportfolio/controllers/portfolio.py:73 #: debianmemberportfolio/views.py:68
msgid "full lintian reports (i.e. including \"info\"-level messages)" msgid "full lintian reports (i.e. including \"info\"-level messages)"
msgstr "" msgstr ""
"vollständige Lintian-Berichte (d.h. inklusive Meldungen der Stufe " "vollständige Lintian-Berichte (d.h. inklusive Meldungen der Stufe "
"\"info\")" "\"info\")"
#: debianmemberportfolio/controllers/portfolio.py:75 #: debianmemberportfolio/views.py:70
msgid "piuparts" msgid "piuparts"
msgstr "piuparts" msgstr "piuparts"
#: debianmemberportfolio/controllers/portfolio.py:76 #: debianmemberportfolio/views.py:71
msgid "Debian patch tracking system" msgid "Debian patch tracking system"
msgstr "Debian Nachverfolgungssystem für Patches" msgstr "Debian Nachverfolgungssystem für Patches"
#: debianmemberportfolio/controllers/portfolio.py:77 #: debianmemberportfolio/views.py:72
msgid "Debian Url ChecKer" msgid "Debian Url ChecKer"
msgstr "Debian URL-Prüfer" msgstr "Debian URL-Prüfer"
#: debianmemberportfolio/controllers/portfolio.py:80 #: debianmemberportfolio/views.py:75
msgid "Mailing Lists" msgid "Mailing Lists"
msgstr "Mailinglisten" msgstr "Mailinglisten"
#: debianmemberportfolio/controllers/portfolio.py:81 #: debianmemberportfolio/views.py:76
msgid "lists.d.o" msgid "lists.d.o"
msgstr "lists.d.o" msgstr "lists.d.o"
#: debianmemberportfolio/controllers/portfolio.py:82 #: debianmemberportfolio/views.py:77
msgid "lists.a.d.o" msgid "lists.a.d.o"
msgstr "lists.a.d.o" msgstr "lists.a.d.o"
#: debianmemberportfolio/controllers/portfolio.py:83 #: debianmemberportfolio/views.py:78
msgid "gmane" msgid "gmane"
msgstr "Gmane" msgstr "Gmane"
#: debianmemberportfolio/controllers/portfolio.py:86 #: debianmemberportfolio/views.py:81
msgid "Files" msgid "Files"
msgstr "Dateien" msgstr "Dateien"
#: debianmemberportfolio/controllers/portfolio.py:87 #: debianmemberportfolio/views.py:82
msgid "people.d.o" msgid "people.d.o"
msgstr "people.d.o" msgstr "people.d.o"
#: debianmemberportfolio/controllers/portfolio.py:88 #: debianmemberportfolio/views.py:83
msgid "oldpeople" msgid "oldpeople"
msgstr "oldpeople" msgstr "oldpeople"
#: debianmemberportfolio/controllers/portfolio.py:89 #: debianmemberportfolio/views.py:84 debianmemberportfolio/views.py:92
#: debianmemberportfolio/controllers/portfolio.py:97
msgid "Alioth" msgid "Alioth"
msgstr "Alioth" msgstr "Alioth"
#: debianmemberportfolio/controllers/portfolio.py:92 #: debianmemberportfolio/views.py:87
msgid "Membership" msgid "Membership"
msgstr "Mitgliedschaft" msgstr "Mitgliedschaft"
#: debianmemberportfolio/controllers/portfolio.py:93 #: debianmemberportfolio/views.py:88
msgid "NM" msgid "NM"
msgstr "NM" msgstr "NM"
#: debianmemberportfolio/controllers/portfolio.py:94 #: debianmemberportfolio/views.py:89
msgid "DB information via finger" msgid "DB information via finger"
msgstr "DB-Informationen per finger" msgstr "DB-Informationen per finger"
#: debianmemberportfolio/controllers/portfolio.py:95 #: debianmemberportfolio/views.py:90
msgid "DB information via HTTP" msgid "DB information via HTTP"
msgstr "DB-Informationen per HTTP" msgstr "DB-Informationen per HTTP"
#: debianmemberportfolio/controllers/portfolio.py:96 #: debianmemberportfolio/views.py:91
msgid "FOAF profile" msgid "FOAF profile"
msgstr "FOAF-Profil" msgstr "FOAF-Profil"
#: debianmemberportfolio/controllers/portfolio.py:98 #: debianmemberportfolio/views.py:93
msgid "Wiki" msgid "Wiki"
msgstr "Wiki" msgstr "Wiki"
#: debianmemberportfolio/controllers/portfolio.py:99 #: debianmemberportfolio/views.py:94
msgid "Forum" msgid "Forum"
msgstr "Forum" msgstr "Forum"
#: debianmemberportfolio/controllers/portfolio.py:102 #: debianmemberportfolio/views.py:97
msgid "Miscellaneous" msgid "Miscellaneous"
msgstr "Sonstiges" msgstr "Sonstiges"
#: debianmemberportfolio/controllers/portfolio.py:103 #: debianmemberportfolio/views.py:98
msgid "debtags" msgid "debtags"
msgstr "debtags" msgstr "debtags"
#: debianmemberportfolio/controllers/portfolio.py:104 #: debianmemberportfolio/views.py:99
msgid "Planet Debian (name)" msgid "Planet Debian (name)"
msgstr "Planet Debian (Name)" msgstr "Planet Debian (Name)"
#: debianmemberportfolio/controllers/portfolio.py:105 #: debianmemberportfolio/views.py:100
msgid "Planet Debian (username)" msgid "Planet Debian (username)"
msgstr "Planet Debian (Benutzername)" msgstr "Planet Debian (Benutzername)"
#: debianmemberportfolio/controllers/portfolio.py:106 #: debianmemberportfolio/views.py:101
msgid "links" msgid "links"
msgstr "Links" msgstr "Links"
#: debianmemberportfolio/controllers/portfolio.py:107 #: debianmemberportfolio/views.py:102
msgid "Debian website" msgid "Debian website"
msgstr "Debian Webseite" msgstr "Debian Webseite"
#: debianmemberportfolio/controllers/portfolio.py:108 #: debianmemberportfolio/views.py:103
msgid "Debian search" msgid "Debian search"
msgstr "Debian-Suche" msgstr "Debian-Suche"
#: debianmemberportfolio/controllers/portfolio.py:109 #: debianmemberportfolio/views.py:104
msgid "GPG public key via finger" msgid "GPG public key via finger"
msgstr "öffentlicher GPG-Schlüssel per finger" msgstr "öffentlicher GPG-Schlüssel per finger"
#: debianmemberportfolio/controllers/portfolio.py:110 #: debianmemberportfolio/views.py:105
msgid "GPG public key via HTTP" msgid "GPG public key via HTTP"
msgstr "öffentlicher GPG-Schlüssel per HTTP" msgstr "öffentlicher GPG-Schlüssel per HTTP"
#: debianmemberportfolio/controllers/portfolio.py:111 #: debianmemberportfolio/views.py:106
msgid "NM, AM participation" msgid "NM, AM participation"
msgstr "NM-, AM-Mitwirkung" msgstr "NM-, AM-Mitwirkung"
#: debianmemberportfolio/controllers/portfolio.py:112 #: debianmemberportfolio/views.py:107
msgid "Contribution information" msgid "Contribution information"
msgstr "Debian Contributor-Informationen" msgstr "Debian Contributor-Informationen"
#: debianmemberportfolio/controllers/portfolio.py:115 #: debianmemberportfolio/views.py:110
msgid "Information reachable via ssh (for Debian Members)" msgid "Information reachable via ssh (for Debian Members)"
msgstr "Per ssh erreichbare Informationen (für Debian Mitglieder)" msgstr "Per ssh erreichbare Informationen (für Debian Mitglieder)"
#: debianmemberportfolio/controllers/portfolio.py:116 #: debianmemberportfolio/views.py:111
msgid "owned debian.net domains" msgid "owned debian.net domains"
msgstr "Besitz von debian.net-Domains" msgstr "Besitz von debian.net-Domains"
#: debianmemberportfolio/controllers/portfolio.py:117 #: debianmemberportfolio/views.py:112
msgid "" msgid ""
"<a href=\"https://wiki.debian.org/qa.debian.org/MIATeam\">MIA</a> database" "<a href=\"https://wiki.debian.org/qa.debian.org/MIATeam\">MIA</a> "
" information" "database information"
msgstr "" msgstr ""
"Informationen in der <a " "Informationen in der <a "
"href=\"https://wiki.debian.org/qa.debian.org/MIATeam\">MIA</a>-Datenbank" "href=\"https://wiki.debian.org/qa.debian.org/MIATeam\">MIA</a>-Datenbank"
#: debianmemberportfolio/controllers/portfolio.py:119 #: debianmemberportfolio/views.py:114
msgid "Group membership information" msgid "Group membership information"
msgstr "Information über Gruppenmitgliedschaften" msgstr "Information über Gruppenmitgliedschaften"
#: debianmemberportfolio/controllers/portfolio.py:122 #: debianmemberportfolio/views.py:117
msgid "Ubuntu" msgid "Ubuntu"
msgstr "Ubuntu" msgstr "Ubuntu"
#: debianmemberportfolio/controllers/portfolio.py:123 #: debianmemberportfolio/views.py:118
msgid "Available patches from Ubuntu" msgid "Available patches from Ubuntu"
msgstr "Verfügbare Patches aus Ubuntu" msgstr "Verfügbare Patches aus Ubuntu"
#: debianmemberportfolio/model/urlbuilder.py:40 #: debianmemberportfolio/model/urlbuilder.py:43
msgid "Email address" msgid "Email address"
msgstr "E-Mailadresse" msgstr "E-Mailadresse"
#: debianmemberportfolio/model/urlbuilder.py:41 #: debianmemberportfolio/model/urlbuilder.py:44
msgid "Name" msgid "Name"
msgstr "Name" msgstr "Name"
#: debianmemberportfolio/model/urlbuilder.py:42 #: debianmemberportfolio/model/urlbuilder.py:45
msgid "GPG fingerprint" msgid "GPG fingerprint"
msgstr "GPG-Fingerabdruck" msgstr "GPG-Fingerabdruck"
#: debianmemberportfolio/model/urlbuilder.py:43 #: debianmemberportfolio/model/urlbuilder.py:46
msgid "Debian user name" msgid "Debian user name"
msgstr "Debian-Benutzername" msgstr "Debian-Benutzername"
#: debianmemberportfolio/model/urlbuilder.py:44 #: debianmemberportfolio/model/urlbuilder.py:47
msgid "Non Debian email address" msgid "Non Debian email address"
msgstr "Nicht-Debian-E-Mailadresse" msgstr "Nicht-Debian-E-Mailadresse"
#: debianmemberportfolio/model/urlbuilder.py:45 #: debianmemberportfolio/model/urlbuilder.py:48
msgid "Alioth user name" msgid "Alioth user name"
msgstr "Alioth-Benutzername" msgstr "Alioth-Benutzername"
#: debianmemberportfolio/model/urlbuilder.py:97 #: debianmemberportfolio/model/urlbuilder.py:109
#: debianmemberportfolio/model/urlbuilder.py:101 #: debianmemberportfolio/model/urlbuilder.py:113
#, python-format #, python-format
msgid "Missing input: %s" msgid "Missing input: %s"
msgstr "Fehlende Eingabe: %s" msgstr "Fehlende Eingabe: %s"
#: debianmemberportfolio/templates/base.mako:25 #: debianmemberportfolio/templates/base.html:24
#: debianmemberportfolio/templates/base.mako:33 #: debianmemberportfolio/templates/base.html:31
msgid "Debian Member Portfolio Service" msgid "Debian Member Portfolio Service"
msgstr "Debian-Mitglieder-Portfolioservice" msgstr "Debian-Mitglieder-Portfolioservice"
#: debianmemberportfolio/templates/base.mako:31 #: debianmemberportfolio/templates/base.html:30
msgid "Debian Logo" msgid "Debian Logo"
msgstr "Debian-Logo" msgstr "Debian-Logo"
#: debianmemberportfolio/templates/base.mako:34 #: debianmemberportfolio/templates/base.html:32
msgid "" msgid ""
"This service has been inspired by Stefano Zacchiroli's <a " "This service has been inspired by Stefano Zacchiroli's <a "
"href=\"https://wiki.debian.org/DDPortfolio\">DDPortfolio page in the " "href=\"https://wiki.debian.org/DDPortfolio\">DDPortfolio page in the "
@ -298,31 +307,31 @@ msgid ""
"Debian Member's or package maintainer's information regarding Debian." "Debian Member's or package maintainer's information regarding Debian."
msgstr "" msgstr ""
"Dieser Dienst wurde durch Stefano Zacchirolis <a " "Dieser Dienst wurde durch Stefano Zacchirolis <a "
"href=\"https://wiki.debian.org/DDPortfolio\">DDPortfolio-Seite im Debian " "href=\"http://wiki.debian.org/DDPortfolio\">DDPortfolio-Seite im Debian "
"Wiki</a> inspiriert. Mit dem Dienst können personalisierte Links zu " "Wiki</a> inspiriert. Mit dem Dienst können personalisierte Links zu "
"Informationen im Bezug auf Debian für Debian-Mitglieder und Paketbetreuer" "Informationen im Bezug auf Debian für Debian-Mitglieder und Paketbetreuer"
" erzeugt werden." " erzeugt werden."
#: debianmemberportfolio/templates/base.mako:41 #: debianmemberportfolio/templates/base.html:39
msgid "AGPL - Free Software" msgid "AGPL - Free Software"
msgstr "AGPL - Freie Software" msgstr "AGPL - Freie Software"
#: debianmemberportfolio/templates/base.mako:43 #: debianmemberportfolio/templates/base.html:40
#, python-format #, python-format
msgid "" msgid ""
"The service is available under the terms of the <a " "The service is available under the terms of the <a "
"href=\"https://www.gnu.org/licenses/agpl.html\">GNU Affero General Public " "href=\"https://www.gnu.org/licenses/agpl.html\">GNU Affero General Public"
"License</a> as published by the Free Software Foundation, either version " " License</a> as published by the Free Software Foundation, either version"
"3 of the License, or (at your option) any later version. You can <a " " 3 of the License, or (at your option) any later version. You can <a "
"href=\"%(browseurl)s\" title=\"Gitweb repository browser URL\">browse the" "href=\"%(browseurl)s\" title=\"Gitweb repository browser URL\">browse the"
" source code</a> or clone it from <a href=\"%(cloneurl)s\" title=\"git " " source code</a> or clone it from <a href=\"%(cloneurl)s\" title=\"git "
"clone URL\">%(cloneurl)s</a> using <a href=\"http://git-" "clone URL\">%(cloneurl)s</a> using <a href=\"https://git-"
"scm.com/\">git</a>. If you want to translate this service to your " "scm.com/\">git</a>. If you want to translate this service to your "
"language you can contribute at <a href=\"%(transifexurl)s\" " "language you can contribute at <a href=\"%(weblateurl)s\" title=\"Debian "
"title=\"Debian Member Portfolio Service at Transifex\">Transifex</a>." "Member Portfolio Service at Weblate\">Weblate</a>."
msgstr "" msgstr ""
"Dieser Dienst wird unter den Bedingungen der <a " "Dieser Dienst wird unter den Bedingungen der <a "
"href=\"https://www.gnu.org/licenses/agpl.html\">GNU Affero General Public " "href=\"http://www.gnu.org/licenses/agpl.html\">GNU Affero General Public "
"License</a>, so wie sie von der Free Software Foundation veröffentlicht " "License</a>, so wie sie von der Free Software Foundation veröffentlicht "
"ist, bereitgestellt. Sie können entweder Version 3 oder (auf Ihren Wunsch" "ist, bereitgestellt. Sie können entweder Version 3 oder (auf Ihren Wunsch"
" hin) jede spätere Version der Lizenz verwenden. Sie können sich <a " " hin) jede spätere Version der Lizenz verwenden. Sie können sich <a "
@ -330,91 +339,86 @@ msgstr ""
"Quelltext ansehen</a> oder mit <a href=\"http://git-scm.com\">git</a> von" "Quelltext ansehen</a> oder mit <a href=\"http://git-scm.com\">git</a> von"
" <a href=\"%(cloneurl)s\" title=\"Git Clone-URL\">%(cloneurl)s</a> " " <a href=\"%(cloneurl)s\" title=\"Git Clone-URL\">%(cloneurl)s</a> "
"klonen. Wenn Sie diesen Service in Ihre Sprache übersetzen möchten, " "klonen. Wenn Sie diesen Service in Ihre Sprache übersetzen möchten, "
"können Sie auf <a href=\"%(transifexurl)s\" title=\"Debian Member " "können Sie auf <a href=\"%(weblateurl)s\" title=\"Debian Member Portfolio"
"Portfolio Service bei Transifex\">Transifex</a> dazu beitragen." " Service bei Weblate\">Weblate</a> dazu beitragen."
#: debianmemberportfolio/templates/base.mako:44 #: debianmemberportfolio/templates/base.html:41
msgid "Copyright © 2009-2014 Jan Dittberner" msgid "Copyright © 2009-2017 Jan Dittberner"
msgstr "Copyright © 2009-2014 Jan Dittberner" msgstr "Copyright © 2009-2017 Jan Dittberner"
#: debianmemberportfolio/templates/showform.mako:24 #: debianmemberportfolio/templates/showform.html:22
msgid "Enter your personal information" msgid "Enter your personal information"
msgstr "Eingabe der persönlichen Informationen" msgstr "Eingabe der persönlichen Informationen"
#: debianmemberportfolio/templates/showform.mako:30 #: debianmemberportfolio/templates/showform.html:29
#: debianmemberportfolio/templates/showurls.mako:27
msgid "Debian Member Portfolio" msgid "Debian Member Portfolio"
msgstr "Debian-Mitgliederportfolio" msgstr "Debian-Mitglieder-Portfolioservice"
#: debianmemberportfolio/templates/showform.mako:36 #: debianmemberportfolio/templates/showform.html:31
msgid "Email address:" msgid "Email address:"
msgstr "E-Mailadresse:" msgstr "E-Mailadresse:"
#: debianmemberportfolio/templates/showform.mako:47 #: debianmemberportfolio/templates/showform.html:40
msgid "Show all form fields" msgid "Show all form fields"
msgstr "Alle Formularfelder anzeigen" msgstr "Alle Formularfelder anzeigen"
#: debianmemberportfolio/templates/showform.mako:54 #: debianmemberportfolio/templates/showform.html:43
msgid "Name:" msgid "Name:"
msgstr "Name:" msgstr "Name:"
#: debianmemberportfolio/templates/showform.mako:64 #: debianmemberportfolio/templates/showform.html:50
msgid "GPG fingerprint:" msgid "GPG fingerprint:"
msgstr "GPG-Fingerabdruck:" msgstr "GPG-Fingerabdruck:"
#: debianmemberportfolio/templates/showform.mako:79 #: debianmemberportfolio/templates/showform.html:57
msgid "Debian user name:" msgid "Debian user name:"
msgstr "Debian-Benutzername:" msgstr "Debian-Benutzername:"
#: debianmemberportfolio/templates/showform.mako:94 #: debianmemberportfolio/templates/showform.html:64
msgid "Non Debian email address:" msgid "Non Debian email address:"
msgstr "Nicht-Debian-E-Mailadresse" msgstr "Nicht-Debian-E-Mailadresse:"
#: debianmemberportfolio/templates/showform.mako:109 #: debianmemberportfolio/templates/showform.html:71
msgid "Alioth user name:" msgid "Alioth user name:"
msgstr "Alioth-Benutzername:" msgstr "Alioth-Benutzername:"
#: debianmemberportfolio/templates/showform.mako:125 #: debianmemberportfolio/templates/showform.html:78
msgid "Wiki user name:" msgid "Wiki user name:"
msgstr "Wiki-Benutzername:" msgstr "Wiki-Benutzername:"
#: debianmemberportfolio/templates/showform.mako:140 #: debianmemberportfolio/templates/showform.html:85
msgid "Forum user id:" msgid "Forum user id:"
msgstr "Forumsbenutzernummer:" msgstr "Forumsbenutzernummer:"
#: debianmemberportfolio/templates/showform.mako:151 #: debianmemberportfolio/templates/showform.html:92
msgid "Output format:" msgid "Output format:"
msgstr "Ausgabeformat:" msgstr "Ausgabeformat:"
#: debianmemberportfolio/templates/showform.mako:157 #: debianmemberportfolio/templates/showform.html:99
msgid "HTML"
msgstr "HTML"
#: debianmemberportfolio/templates/showform.mako:159
msgid "JSON"
msgstr "JSON"
#: debianmemberportfolio/templates/showform.mako:161
msgid "Build Debian Member Portfolio URLs" msgid "Build Debian Member Portfolio URLs"
msgstr "Debian-Mitgliedsportfolio-URLs bauen" msgstr "Debian-Mitgliedsportfolio-URLs bauen"
#: debianmemberportfolio/templates/showurls.mako:23 #: debianmemberportfolio/templates/showurls.html:21
msgid "Your personal links" msgid "Your personal links"
msgstr "Ihre personalisierten Links" msgstr "Ihre personalisierten Links"
#: debianmemberportfolio/templates/showurls.mako:30 #: debianmemberportfolio/templates/showurls.html:25
msgid "Debian Member Porfolio"
msgstr "Debian-Mitgliederportfolio"
#: debianmemberportfolio/templates/showurls.html:28
msgid "Usage" msgid "Usage"
msgstr "Verwendung" msgstr "Verwendung"
#: debianmemberportfolio/templates/showurls.mako:30 #: debianmemberportfolio/templates/showurls.html:28
msgid "URL" msgid "URL"
msgstr "URL" msgstr "URL"
#: debianmemberportfolio/templates/showurls.mako:40 #: debianmemberportfolio/templates/showurls.html:38
msgid "Error during URL creation:" msgid "Error during URL creation:"
msgstr "Fehler bei der URL-Erzeugung:" msgstr "Fehler bei der URL-Erzeugung:"
#: debianmemberportfolio/templates/showurls.mako:67 #: debianmemberportfolio/templates/showurls.html:59
msgid "Restart" msgid "Restart"
msgstr "Neu beginnen" msgstr "Neu beginnen"

View file

@ -9,26 +9,35 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Debian Member Portfolio Service\n" "Project-Id-Version: Debian Member Portfolio Service\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2014-02-08 18:14+0100\n" "POT-Creation-Date: 2017-09-10 10:49+0200\n"
"PO-Revision-Date: 2014-01-11 01:29+0100\n" "PO-Revision-Date: 2014-01-11 01:29+0100\n"
"Last-Translator: Jan Dittberner <jan@dittberner.info>\n" "Last-Translator: Jan Dittberner <jan@dittberner.info>\n"
"Language: fr\n"
"Language-Team: French " "Language-Team: French "
"(https://www.transifex.com/projects/p/debportfolioservice/language/fr/)\n" "(https://www.transifex.com/projects/p/debportfolioservice/language/fr/)\n"
"Plural-Forms: nplurals=2; plural=(n > 1)\n" "Plural-Forms: nplurals=2; plural=(n > 1)\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n" "Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 0.9.6\n" "Generated-By: Babel 2.5.0\n"
#: debianmemberportfolio/controllers/portfolio.py:45 #: debianmemberportfolio/forms.py:33
msgid "JSON"
msgstr "JSON"
#: debianmemberportfolio/forms.py:33
msgid "HTML"
msgstr "HTML"
#: debianmemberportfolio/views.py:40
msgid "Overview" msgid "Overview"
msgstr "Vue d'ensemble" msgstr "Vue d'ensemble"
#: debianmemberportfolio/controllers/portfolio.py:46 #: debianmemberportfolio/views.py:41
msgid "Debian Member's Package Overview" msgid "Debian Member's Package Overview"
msgstr "Vue d'ensemble des paquets du membre Debian" msgstr "Vue d'ensemble des paquets du membre Debian"
#: debianmemberportfolio/controllers/portfolio.py:47 #: debianmemberportfolio/views.py:42
msgid "" msgid ""
"Debian Member's Package Overview\n" "Debian Member's Package Overview\n"
"... showing all email addresses" "... showing all email addresses"
@ -36,261 +45,261 @@ msgstr ""
"Vue d'ensemble des paquets du membre Debian\n" "Vue d'ensemble des paquets du membre Debian\n"
"... affichage de tous les courriels" "... affichage de tous les courriels"
#: debianmemberportfolio/controllers/portfolio.py:51 #: debianmemberportfolio/views.py:46
msgid "Bugs" msgid "Bugs"
msgstr "Bogues" msgstr "Bogues"
#: debianmemberportfolio/controllers/portfolio.py:52 #: debianmemberportfolio/views.py:47
msgid "" msgid ""
"bugs received\n" "bugs received\n"
"(note: co-maintainers not listed, see <a href=\"https://bugs.debian.org" "(note: co-maintainers not listed, see <a href=\"https://bugs.debian.org"
"/cgi-bin/bugreport.cgi?bug=430986\">#430986</a>)" "/cgi-bin/bugreport.cgi?bug=430986\">#430986</a>)"
msgstr "" msgstr ""
"Bogues reçus\n" "Bogues reçus\n"
"(note : co-responsables non listés, voir <a href=\"https://bugs.debian.org" "(note : co-responsables non listés, voir <a "
"/cgi-bin/bugreport.cgi?bug=430986\">#430986</a>)" "href=\"https://bugs.debian.org/cgi-"
"bin/bugreport.cgi?bug=430986\">#430986</a>)"
#: debianmemberportfolio/controllers/portfolio.py:56 #: debianmemberportfolio/views.py:51
msgid "bugs reported" msgid "bugs reported"
msgstr "Bogues rapportés" msgstr "Bogues rapportés"
#: debianmemberportfolio/controllers/portfolio.py:57 #: debianmemberportfolio/views.py:52
msgid "user tags" msgid "user tags"
msgstr "Tags utilisateur" msgstr "Tags utilisateur"
#: debianmemberportfolio/controllers/portfolio.py:58 #: debianmemberportfolio/views.py:53
msgid "all messages (i.e., full text search for developer name on all bug logs)" msgid "all messages (i.e., full text search for developer name on all bug logs)"
msgstr "" msgstr ""
"Tous les messages (c-à-d, recherche plein texte sur le nom du développeur" "Tous les messages (c-à-d, recherche plein texte sur le nom du développeur"
" dans tous les journaux de bogue)" " dans tous les journaux de bogue)"
#: debianmemberportfolio/controllers/portfolio.py:60 #: debianmemberportfolio/views.py:55
msgid "<a href=\"https://wiki.debian.org/WNPP\">WNPP</a>" msgid "<a href=\"https://wiki.debian.org/WNPP\">WNPP</a>"
msgstr "<a href=\"https://wiki.debian.org/WNPP\">WNPP</a>" msgstr "<a href=\"https://wiki.debian.org/WNPP\">WNPP</a>"
#: debianmemberportfolio/controllers/portfolio.py:61 #: debianmemberportfolio/views.py:56
msgid "correspondent for bugs" msgid "correspondent for bugs"
msgstr "Correspondant pour les bogues" msgstr "Correspondant pour les bogues"
#: debianmemberportfolio/controllers/portfolio.py:62 #: debianmemberportfolio/views.py:57
msgid "one year open bug history graph" msgid "one year open bug history graph"
msgstr "Graphique de l'évolution des bogues ouverts sur l'année écoulée" msgstr "Graphique de l'évolution des bogues ouverts sur l'année écoulée"
#: debianmemberportfolio/controllers/portfolio.py:65 #: debianmemberportfolio/views.py:60
msgid "Build" msgid "Build"
msgstr "Build" msgstr "Build"
#: debianmemberportfolio/controllers/portfolio.py:66 #: debianmemberportfolio/views.py:61
msgid "buildd.d.o" msgid "buildd.d.o"
msgstr "buildd.d.o" msgstr "buildd.d.o"
#: debianmemberportfolio/controllers/portfolio.py:67 #: debianmemberportfolio/views.py:62
msgid "igloo" msgid "igloo"
msgstr "igloo" msgstr "igloo"
#: debianmemberportfolio/controllers/portfolio.py:70 #: debianmemberportfolio/views.py:65
msgid "Quality Assurance" msgid "Quality Assurance"
msgstr "Assurance qualité" msgstr "Assurance qualité"
#: debianmemberportfolio/controllers/portfolio.py:71 #: debianmemberportfolio/views.py:66
msgid "maintainer dashboard" msgid "maintainer dashboard"
msgstr "" msgstr ""
#: debianmemberportfolio/controllers/portfolio.py:72 #: debianmemberportfolio/views.py:67
msgid "lintian reports" msgid "lintian reports"
msgstr "Rapports lintian" msgstr "Rapports lintian"
#: debianmemberportfolio/controllers/portfolio.py:73 #: debianmemberportfolio/views.py:68
msgid "full lintian reports (i.e. including \"info\"-level messages)" msgid "full lintian reports (i.e. including \"info\"-level messages)"
msgstr "Rapports lintian complets (c-à-d incluant les messages de niveau \"info\")" msgstr "Rapports lintian complets (c-à-d incluant les messages de niveau \"info\")"
#: debianmemberportfolio/controllers/portfolio.py:75 #: debianmemberportfolio/views.py:70
msgid "piuparts" msgid "piuparts"
msgstr "Piuparts" msgstr "Piuparts"
#: debianmemberportfolio/controllers/portfolio.py:76 #: debianmemberportfolio/views.py:71
msgid "Debian patch tracking system" msgid "Debian patch tracking system"
msgstr "Système de suivi des patchs de Debian" msgstr "Système de suivi des patchs de Debian"
#: debianmemberportfolio/controllers/portfolio.py:77 #: debianmemberportfolio/views.py:72
msgid "Debian Url ChecKer" msgid "Debian Url ChecKer"
msgstr "" msgstr ""
#: debianmemberportfolio/controllers/portfolio.py:80 #: debianmemberportfolio/views.py:75
msgid "Mailing Lists" msgid "Mailing Lists"
msgstr "Listes de diffusion" msgstr "Listes de diffusion"
#: debianmemberportfolio/controllers/portfolio.py:81 #: debianmemberportfolio/views.py:76
msgid "lists.d.o" msgid "lists.d.o"
msgstr "lists.d.o" msgstr "lists.d.o"
#: debianmemberportfolio/controllers/portfolio.py:82 #: debianmemberportfolio/views.py:77
msgid "lists.a.d.o" msgid "lists.a.d.o"
msgstr "lists.a.d.o" msgstr "lists.a.d.o"
#: debianmemberportfolio/controllers/portfolio.py:83 #: debianmemberportfolio/views.py:78
msgid "gmane" msgid "gmane"
msgstr "Gmane" msgstr "Gmane"
#: debianmemberportfolio/controllers/portfolio.py:86 #: debianmemberportfolio/views.py:81
msgid "Files" msgid "Files"
msgstr "Fichiers" msgstr "Fichiers"
#: debianmemberportfolio/controllers/portfolio.py:87 #: debianmemberportfolio/views.py:82
msgid "people.d.o" msgid "people.d.o"
msgstr "people.d.o" msgstr "people.d.o"
#: debianmemberportfolio/controllers/portfolio.py:88 #: debianmemberportfolio/views.py:83
msgid "oldpeople" msgid "oldpeople"
msgstr "oldpeople" msgstr "oldpeople"
#: debianmemberportfolio/controllers/portfolio.py:89 #: debianmemberportfolio/views.py:84 debianmemberportfolio/views.py:92
#: debianmemberportfolio/controllers/portfolio.py:97
msgid "Alioth" msgid "Alioth"
msgstr "Alioth" msgstr "Alioth"
#: debianmemberportfolio/controllers/portfolio.py:92 #: debianmemberportfolio/views.py:87
msgid "Membership" msgid "Membership"
msgstr "Adhésion" msgstr "Adhésion"
#: debianmemberportfolio/controllers/portfolio.py:93 #: debianmemberportfolio/views.py:88
msgid "NM" msgid "NM"
msgstr "NM" msgstr "NM"
#: debianmemberportfolio/controllers/portfolio.py:94 #: debianmemberportfolio/views.py:89
msgid "DB information via finger" msgid "DB information via finger"
msgstr "BD d'informations via finger" msgstr "BD d'informations via finger"
#: debianmemberportfolio/controllers/portfolio.py:95 #: debianmemberportfolio/views.py:90
msgid "DB information via HTTP" msgid "DB information via HTTP"
msgstr "BD d'informations via HTTP" msgstr "BD d'informations via HTTP"
#: debianmemberportfolio/controllers/portfolio.py:96 #: debianmemberportfolio/views.py:91
msgid "FOAF profile" msgid "FOAF profile"
msgstr "" msgstr ""
#: debianmemberportfolio/controllers/portfolio.py:98 #: debianmemberportfolio/views.py:93
msgid "Wiki" msgid "Wiki"
msgstr "Wiki" msgstr "Wiki"
#: debianmemberportfolio/controllers/portfolio.py:99 #: debianmemberportfolio/views.py:94
msgid "Forum" msgid "Forum"
msgstr "Forum" msgstr "Forum"
#: debianmemberportfolio/controllers/portfolio.py:102 #: debianmemberportfolio/views.py:97
msgid "Miscellaneous" msgid "Miscellaneous"
msgstr "Divers" msgstr "Divers"
#: debianmemberportfolio/controllers/portfolio.py:103 #: debianmemberportfolio/views.py:98
msgid "debtags" msgid "debtags"
msgstr "Debtags" msgstr "Debtags"
#: debianmemberportfolio/controllers/portfolio.py:104 #: debianmemberportfolio/views.py:99
msgid "Planet Debian (name)" msgid "Planet Debian (name)"
msgstr "" msgstr ""
#: debianmemberportfolio/controllers/portfolio.py:105 #: debianmemberportfolio/views.py:100
#, fuzzy #, fuzzy
msgid "Planet Debian (username)" msgid "Planet Debian (username)"
msgstr "Nom d'utilisateur Debian" msgstr "Nom d'utilisateur Debian"
#: debianmemberportfolio/controllers/portfolio.py:106 #: debianmemberportfolio/views.py:101
msgid "links" msgid "links"
msgstr "Liens" msgstr "Liens"
#: debianmemberportfolio/controllers/portfolio.py:107 #: debianmemberportfolio/views.py:102
msgid "Debian website" msgid "Debian website"
msgstr "Site web de Debian" msgstr "Site web de Debian"
#: debianmemberportfolio/controllers/portfolio.py:108 #: debianmemberportfolio/views.py:103
msgid "Debian search" msgid "Debian search"
msgstr "Recherche Debian" msgstr "Recherche Debian"
#: debianmemberportfolio/controllers/portfolio.py:109 #: debianmemberportfolio/views.py:104
msgid "GPG public key via finger" msgid "GPG public key via finger"
msgstr "Clef GPG publique via finger" msgstr "Clef GPG publique via finger"
#: debianmemberportfolio/controllers/portfolio.py:110 #: debianmemberportfolio/views.py:105
msgid "GPG public key via HTTP" msgid "GPG public key via HTTP"
msgstr "Clef GPG publique via HTTP" msgstr "Clef GPG publique via HTTP"
#: debianmemberportfolio/controllers/portfolio.py:111 #: debianmemberportfolio/views.py:106
msgid "NM, AM participation" msgid "NM, AM participation"
msgstr "NM, AM participation" msgstr "NM, AM participation"
#: debianmemberportfolio/controllers/portfolio.py:112 #: debianmemberportfolio/views.py:107
#, fuzzy #, fuzzy
msgid "Contribution information" msgid "Contribution information"
msgstr "Saisissez vos informations personnelles" msgstr "Saisissez vos informations personnelles"
#: debianmemberportfolio/controllers/portfolio.py:115 #: debianmemberportfolio/views.py:110
msgid "Information reachable via ssh (for Debian Members)" msgid "Information reachable via ssh (for Debian Members)"
msgstr "Informations accessibles via ssh (pour les membres de Debian)" msgstr "Informations accessibles via ssh (pour les membres de Debian)"
#: debianmemberportfolio/controllers/portfolio.py:116 #: debianmemberportfolio/views.py:111
msgid "owned debian.net domains" msgid "owned debian.net domains"
msgstr "Propriété des domaines debian.net" msgstr "Propriété des domaines debian.net"
#: debianmemberportfolio/controllers/portfolio.py:117 #: debianmemberportfolio/views.py:112
msgid "" msgid ""
"<a href=\"https://wiki.debian.org/qa.debian.org/MIATeam\">MIA</a> database" "<a href=\"https://wiki.debian.org/qa.debian.org/MIATeam\">MIA</a> "
" information" "database information"
msgstr "" msgstr ""
"Informations de la base de données <a " "Informations de la base de données <a "
"href=\"https://wiki.debian.org/qa.debian.org/MIATeam\">MIA</a>" "href=\"https://wiki.debian.org/qa.debian.org/MIATeam\">MIA</a>"
#: debianmemberportfolio/controllers/portfolio.py:119 #: debianmemberportfolio/views.py:114
msgid "Group membership information" msgid "Group membership information"
msgstr "Information sur l'adhésion de groupe" msgstr "Information sur l'adhésion de groupe"
#: debianmemberportfolio/controllers/portfolio.py:122 #: debianmemberportfolio/views.py:117
msgid "Ubuntu" msgid "Ubuntu"
msgstr "Ubuntu" msgstr "Ubuntu"
#: debianmemberportfolio/controllers/portfolio.py:123 #: debianmemberportfolio/views.py:118
msgid "Available patches from Ubuntu" msgid "Available patches from Ubuntu"
msgstr "Patchs disponibles pour Ubuntu" msgstr "Patchs disponibles pour Ubuntu"
#: debianmemberportfolio/model/urlbuilder.py:40 #: debianmemberportfolio/model/urlbuilder.py:43
msgid "Email address" msgid "Email address"
msgstr "Courriel" msgstr "Courriel"
#: debianmemberportfolio/model/urlbuilder.py:41 #: debianmemberportfolio/model/urlbuilder.py:44
msgid "Name" msgid "Name"
msgstr "Nom" msgstr "Nom"
#: debianmemberportfolio/model/urlbuilder.py:42 #: debianmemberportfolio/model/urlbuilder.py:45
msgid "GPG fingerprint" msgid "GPG fingerprint"
msgstr "Empreinte GPG" msgstr "Empreinte GPG"
#: debianmemberportfolio/model/urlbuilder.py:43 #: debianmemberportfolio/model/urlbuilder.py:46
msgid "Debian user name" msgid "Debian user name"
msgstr "Nom d'utilisateur Debian" msgstr "Nom d'utilisateur Debian"
#: debianmemberportfolio/model/urlbuilder.py:44 #: debianmemberportfolio/model/urlbuilder.py:47
msgid "Non Debian email address" msgid "Non Debian email address"
msgstr "Courriel hors Debian" msgstr "Courriel hors Debian"
#: debianmemberportfolio/model/urlbuilder.py:45 #: debianmemberportfolio/model/urlbuilder.py:48
msgid "Alioth user name" msgid "Alioth user name"
msgstr "Nom d'utilisateur Alioth" msgstr "Nom d'utilisateur Alioth"
#: debianmemberportfolio/model/urlbuilder.py:97 #: debianmemberportfolio/model/urlbuilder.py:109
#: debianmemberportfolio/model/urlbuilder.py:101 #: debianmemberportfolio/model/urlbuilder.py:113
#, python-format #, python-format
msgid "Missing input: %s" msgid "Missing input: %s"
msgstr "Entrée manquante : %s" msgstr "Entrée manquante : %s"
#: debianmemberportfolio/templates/base.mako:25 #: debianmemberportfolio/templates/base.html:24
#: debianmemberportfolio/templates/base.mako:33 #: debianmemberportfolio/templates/base.html:31
msgid "Debian Member Portfolio Service" msgid "Debian Member Portfolio Service"
msgstr "Service de portefeuille des membres de Debian" msgstr "Service de portefeuille des membres de Debian"
#: debianmemberportfolio/templates/base.mako:31 #: debianmemberportfolio/templates/base.html:30
msgid "Debian Logo" msgid "Debian Logo"
msgstr "Logo Debian" msgstr "Logo Debian"
#: debianmemberportfolio/templates/base.mako:34 #: debianmemberportfolio/templates/base.html:32
msgid "" msgid ""
"This service has been inspired by Stefano Zacchiroli's <a " "This service has been inspired by Stefano Zacchiroli's <a "
"href=\"https://wiki.debian.org/DDPortfolio\">DDPortfolio page in the " "href=\"https://wiki.debian.org/DDPortfolio\">DDPortfolio page in the "
@ -303,115 +312,112 @@ msgstr ""
"personnalisé de liens fournissant des informations sur un membre ou un " "personnalisé de liens fournissant des informations sur un membre ou un "
"mainteneur de paquet de Debian." "mainteneur de paquet de Debian."
#: debianmemberportfolio/templates/base.mako:41 #: debianmemberportfolio/templates/base.html:39
msgid "AGPL - Free Software" msgid "AGPL - Free Software"
msgstr "AGPL - Logiciel libre" msgstr "AGPL - Logiciel libre"
#: debianmemberportfolio/templates/base.mako:43 #: debianmemberportfolio/templates/base.html:40
#, fuzzy, python-format #, fuzzy, python-format
msgid "" msgid ""
"The service is available under the terms of the <a " "The service is available under the terms of the <a "
"href=\"https://www.gnu.org/licenses/agpl.html\">GNU Affero General Public " "href=\"https://www.gnu.org/licenses/agpl.html\">GNU Affero General Public"
"License</a> as published by the Free Software Foundation, either version " " License</a> as published by the Free Software Foundation, either version"
"3 of the License, or (at your option) any later version. You can <a " " 3 of the License, or (at your option) any later version. You can <a "
"href=\"%(browseurl)s\" title=\"Gitweb repository browser URL\">browse the" "href=\"%(browseurl)s\" title=\"Gitweb repository browser URL\">browse the"
" source code</a> or clone it from <a href=\"%(cloneurl)s\" title=\"git " " source code</a> or clone it from <a href=\"%(cloneurl)s\" title=\"git "
"clone URL\">%(cloneurl)s</a> using <a href=\"http://git-" "clone URL\">%(cloneurl)s</a> using <a href=\"https://git-"
"scm.com/\">git</a>. If you want to translate this service to your " "scm.com/\">git</a>. If you want to translate this service to your "
"language you can contribute at <a href=\"%(transifexurl)s\" " "language you can contribute at <a href=\"%(weblateurl)s\" title=\"Debian "
"title=\"Debian Member Portfolio Service at Transifex\">Transifex</a>." "Member Portfolio Service at Weblate\">Weblate</a>."
msgstr "" msgstr ""
"Ce service est disponible sous les termes de la licence <a " "Ce service est disponible sous les termes de la licence <a "
"href=\"https://www.gnu.org/licenses/agpl.html\">GNU Affero General Public " "href=\"https://www.gnu.org/licenses/agpl.html\">GNU Affero General Public"
"License</a> telle que publiée par la Free Software Foundation, soit la " " License</a> telle que publiée par la Free Software Foundation, soit la "
"version 3 de la licence, ou (à votre choix) toute version ultérieure. " "version 3 de la licence, ou (à votre choix) toute version ultérieure. "
"Vous pouvez <a href=\"%(browseurl)s\" title=\"Gitweb repository browser " "Vous pouvez <a href=\"%(browseurl)s\" title=\"Gitweb repository browser "
"URL\">parcourir le code source</a> ou le cloner depuis <a " "URL\">parcourir le code source</a> ou le cloner depuis <a "
"href=\"%(cloneurl)s\" title=\"git clone URL\">%(cloneurl)s</a> en " "href=\"%(cloneurl)s\" title=\"git clone URL\">%(cloneurl)s</a> en "
"utilisant <a href=\"http://git-scm.com/\">git</a>." "utilisant <a href=\"http://git-scm.com/\">git</a>."
#: debianmemberportfolio/templates/base.mako:44 #: debianmemberportfolio/templates/base.html:41
msgid "Copyright © 2009-2014 Jan Dittberner" #, fuzzy
msgid "Copyright © 2009-2017 Jan Dittberner"
msgstr "Copyright © 2009-2014 Jan Dittberner" msgstr "Copyright © 2009-2014 Jan Dittberner"
#: debianmemberportfolio/templates/showform.mako:24 #: debianmemberportfolio/templates/showform.html:22
msgid "Enter your personal information" msgid "Enter your personal information"
msgstr "Saisissez vos informations personnelles" msgstr "Saisissez vos informations personnelles"
#: debianmemberportfolio/templates/showform.mako:30 #: debianmemberportfolio/templates/showform.html:29
#: debianmemberportfolio/templates/showurls.mako:27
msgid "Debian Member Portfolio" msgid "Debian Member Portfolio"
msgstr "Portefeuille d'un Membre de Debian" msgstr "Portefeuille d'un Membre de Debian"
#: debianmemberportfolio/templates/showform.mako:36 #: debianmemberportfolio/templates/showform.html:31
msgid "Email address:" msgid "Email address:"
msgstr "Courriel :" msgstr "Courriel :"
#: debianmemberportfolio/templates/showform.mako:47 #: debianmemberportfolio/templates/showform.html:40
msgid "Show all form fields" msgid "Show all form fields"
msgstr "Afficher tous les champs du formulaire" msgstr "Afficher tous les champs du formulaire"
#: debianmemberportfolio/templates/showform.mako:54 #: debianmemberportfolio/templates/showform.html:43
msgid "Name:" msgid "Name:"
msgstr "Nom :" msgstr "Nom :"
#: debianmemberportfolio/templates/showform.mako:64 #: debianmemberportfolio/templates/showform.html:50
msgid "GPG fingerprint:" msgid "GPG fingerprint:"
msgstr "Empreinte GPG :" msgstr "Empreinte GPG :"
#: debianmemberportfolio/templates/showform.mako:79 #: debianmemberportfolio/templates/showform.html:57
msgid "Debian user name:" msgid "Debian user name:"
msgstr "Nom d'utilisateur Debian :" msgstr "Nom d'utilisateur Debian :"
#: debianmemberportfolio/templates/showform.mako:94 #: debianmemberportfolio/templates/showform.html:64
msgid "Non Debian email address:" msgid "Non Debian email address:"
msgstr "Courriel hors Debian :" msgstr "Courriel hors Debian :"
#: debianmemberportfolio/templates/showform.mako:109 #: debianmemberportfolio/templates/showform.html:71
msgid "Alioth user name:" msgid "Alioth user name:"
msgstr "Nom d'utilisateur Alioth :" msgstr "Nom d'utilisateur Alioth :"
#: debianmemberportfolio/templates/showform.mako:125 #: debianmemberportfolio/templates/showform.html:78
msgid "Wiki user name:" msgid "Wiki user name:"
msgstr "Nom d'utilisateur Wiki :" msgstr "Nom d'utilisateur Wiki :"
#: debianmemberportfolio/templates/showform.mako:140 #: debianmemberportfolio/templates/showform.html:85
msgid "Forum user id:" msgid "Forum user id:"
msgstr "Numéro d'utilisateur Forum :" msgstr "Numéro d'utilisateur Forum :"
#: debianmemberportfolio/templates/showform.mako:151 #: debianmemberportfolio/templates/showform.html:92
msgid "Output format:" msgid "Output format:"
msgstr "Format de sortie :" msgstr "Format de sortie :"
#: debianmemberportfolio/templates/showform.mako:157 #: debianmemberportfolio/templates/showform.html:99
msgid "HTML"
msgstr "HTML"
#: debianmemberportfolio/templates/showform.mako:159
msgid "JSON"
msgstr "JSON"
#: debianmemberportfolio/templates/showform.mako:161
msgid "Build Debian Member Portfolio URLs" msgid "Build Debian Member Portfolio URLs"
msgstr "Construire les URLs du portefeuille du membre de Debian" msgstr "Construire les URLs du portefeuille du membre de Debian"
#: debianmemberportfolio/templates/showurls.mako:23 #: debianmemberportfolio/templates/showurls.html:21
msgid "Your personal links" msgid "Your personal links"
msgstr "Vos liens personnels" msgstr "Vos liens personnels"
#: debianmemberportfolio/templates/showurls.mako:30 #: debianmemberportfolio/templates/showurls.html:25
#, fuzzy
msgid "Debian Member Porfolio"
msgstr "Portefeuille d'un Membre de Debian"
#: debianmemberportfolio/templates/showurls.html:28
msgid "Usage" msgid "Usage"
msgstr "Utilisation" msgstr "Utilisation"
#: debianmemberportfolio/templates/showurls.mako:30 #: debianmemberportfolio/templates/showurls.html:28
msgid "URL" msgid "URL"
msgstr "URL" msgstr "URL"
#: debianmemberportfolio/templates/showurls.mako:40 #: debianmemberportfolio/templates/showurls.html:38
msgid "Error during URL creation:" msgid "Error during URL creation:"
msgstr "Erreur durant la création de l'URL :" msgstr "Erreur durant la création de l'URL :"
#: debianmemberportfolio/templates/showurls.mako:67 #: debianmemberportfolio/templates/showurls.html:59
msgid "Restart" msgid "Restart"
msgstr "Recommencer" msgstr "Recommencer"

View file

@ -9,26 +9,35 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Debian Member Portfolio Service\n" "Project-Id-Version: Debian Member Portfolio Service\n"
"Report-Msgid-Bugs-To: atoz.chevara@yahoo.com\n" "Report-Msgid-Bugs-To: atoz.chevara@yahoo.com\n"
"POT-Creation-Date: 2014-02-08 18:14+0100\n" "POT-Creation-Date: 2017-09-10 10:49+0200\n"
"PO-Revision-Date: 2014-01-11 01:28+0100\n" "PO-Revision-Date: 2016-08-27 20:15+0000\n"
"Last-Translator: Jan Dittberner <jan@dittberner.info>\n" "Last-Translator: Izharul Haq <atoz.chevara.2013@gmail.com>\n"
"Language-Team: Indonesian " "Language: id\n"
"(https://www.transifex.com/projects/p/debportfolioservice/language/id/)\n" "Language-Team: Indonesian <https://hosted.weblate.org/projects/debian-"
"member-portfolio-service/translations/id/>\n"
"Plural-Forms: nplurals=1; plural=0\n" "Plural-Forms: nplurals=1; plural=0\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n" "Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 0.9.6\n" "Generated-By: Babel 2.5.0\n"
#: debianmemberportfolio/controllers/portfolio.py:45 #: debianmemberportfolio/forms.py:33
msgid "JSON"
msgstr "JSON"
#: debianmemberportfolio/forms.py:33
msgid "HTML"
msgstr "HTML"
#: debianmemberportfolio/views.py:40
msgid "Overview" msgid "Overview"
msgstr "Gambaran Umum" msgstr "Gambaran Umum"
#: debianmemberportfolio/controllers/portfolio.py:46 #: debianmemberportfolio/views.py:41
msgid "Debian Member's Package Overview" msgid "Debian Member's Package Overview"
msgstr "Gambaran Umum Paket Anggota Debian" msgstr "Gambaran Umum Paket Anggota Debian"
#: debianmemberportfolio/controllers/portfolio.py:47 #: debianmemberportfolio/views.py:42
msgid "" msgid ""
"Debian Member's Package Overview\n" "Debian Member's Package Overview\n"
"... showing all email addresses" "... showing all email addresses"
@ -36,11 +45,11 @@ msgstr ""
"Gambaran Umum Paket Anggota Debian\n" "Gambaran Umum Paket Anggota Debian\n"
"... tampilkan semua alamat email" "... tampilkan semua alamat email"
#: debianmemberportfolio/controllers/portfolio.py:51 #: debianmemberportfolio/views.py:46
msgid "Bugs" msgid "Bugs"
msgstr "Bugs" msgstr "Kutu"
#: debianmemberportfolio/controllers/portfolio.py:52 #: debianmemberportfolio/views.py:47
msgid "" msgid ""
"bugs received\n" "bugs received\n"
"(note: co-maintainers not listed, see <a href=\"https://bugs.debian.org" "(note: co-maintainers not listed, see <a href=\"https://bugs.debian.org"
@ -51,247 +60,246 @@ msgstr ""
"href=\"https://bugs.debian.org/cgi-" "href=\"https://bugs.debian.org/cgi-"
"bin/bugreport.cgi?bug=430986\">#430986</a>)" "bin/bugreport.cgi?bug=430986\">#430986</a>)"
#: debianmemberportfolio/controllers/portfolio.py:56 #: debianmemberportfolio/views.py:51
msgid "bugs reported" msgid "bugs reported"
msgstr "melaporkan bug" msgstr "melaporkan bug"
#: debianmemberportfolio/controllers/portfolio.py:57 #: debianmemberportfolio/views.py:52
msgid "user tags" msgid "user tags"
msgstr "label pengguna" msgstr "label pengguna"
#: debianmemberportfolio/controllers/portfolio.py:58 #: debianmemberportfolio/views.py:53
msgid "all messages (i.e., full text search for developer name on all bug logs)" msgid "all messages (i.e., full text search for developer name on all bug logs)"
msgstr "" msgstr ""
"semua pesan (yaitu, pencarian teks lengkap untuk nama pengembang pada " "semua pesan (yaitu, pencarian teks lengkap untuk nama pengembang pada "
"semua catatan bug)" "semua catatan bug)"
#: debianmemberportfolio/controllers/portfolio.py:60 #: debianmemberportfolio/views.py:55
msgid "<a href=\"https://wiki.debian.org/WNPP\">WNPP</a>" msgid "<a href=\"https://wiki.debian.org/WNPP\">WNPP</a>"
msgstr "<a href=\"https://wiki.debian.org/WNPP\">WNPP</a>" msgstr "<a href=\"https://wiki.debian.org/WNPP\">WNPP</a>"
#: debianmemberportfolio/controllers/portfolio.py:61 #: debianmemberportfolio/views.py:56
msgid "correspondent for bugs" msgid "correspondent for bugs"
msgstr "koresponden untuk bug" msgstr "koresponden untuk bug"
#: debianmemberportfolio/controllers/portfolio.py:62 #: debianmemberportfolio/views.py:57
msgid "one year open bug history graph" msgid "one year open bug history graph"
msgstr "grafik perkembangan laporan bug terbuka lebih dari setahun" msgstr "grafik perkembangan laporan bug terbuka lebih dari setahun"
#: debianmemberportfolio/controllers/portfolio.py:65 #: debianmemberportfolio/views.py:60
msgid "Build" msgid "Build"
msgstr "Bangun" msgstr "Bangun"
#: debianmemberportfolio/controllers/portfolio.py:66 #: debianmemberportfolio/views.py:61
msgid "buildd.d.o" msgid "buildd.d.o"
msgstr "buildd.d.o" msgstr "buildd.d.o"
#: debianmemberportfolio/controllers/portfolio.py:67 #: debianmemberportfolio/views.py:62
msgid "igloo" msgid "igloo"
msgstr "igloo" msgstr "igloo"
#: debianmemberportfolio/controllers/portfolio.py:70 #: debianmemberportfolio/views.py:65
msgid "Quality Assurance" msgid "Quality Assurance"
msgstr "Jaminan Mutu" msgstr "Jaminan Mutu"
#: debianmemberportfolio/controllers/portfolio.py:71 #: debianmemberportfolio/views.py:66
msgid "maintainer dashboard" msgid "maintainer dashboard"
msgstr "" msgstr "dasbor maintainer"
#: debianmemberportfolio/controllers/portfolio.py:72 #: debianmemberportfolio/views.py:67
msgid "lintian reports" msgid "lintian reports"
msgstr "laporan lintian" msgstr "laporan lintian"
#: debianmemberportfolio/controllers/portfolio.py:73 #: debianmemberportfolio/views.py:68
msgid "full lintian reports (i.e. including \"info\"-level messages)" msgid "full lintian reports (i.e. including \"info\"-level messages)"
msgstr "seluruh pesan lintian (i.e. termasuk pesan \"info\"-level)" msgstr "seluruh pesan lintian (i.e. termasuk pesan \"info\"-level)"
#: debianmemberportfolio/controllers/portfolio.py:75 #: debianmemberportfolio/views.py:70
msgid "piuparts" msgid "piuparts"
msgstr "piuparts" msgstr "piuparts"
#: debianmemberportfolio/controllers/portfolio.py:76 #: debianmemberportfolio/views.py:71
msgid "Debian patch tracking system" msgid "Debian patch tracking system"
msgstr "sistem pelacakan patch Debian" msgstr "sistem pelacakan patch Debian"
#: debianmemberportfolio/controllers/portfolio.py:77 #: debianmemberportfolio/views.py:72
msgid "Debian Url ChecKer" msgid "Debian Url ChecKer"
msgstr "" msgstr "Debian Url ChecKer"
#: debianmemberportfolio/controllers/portfolio.py:80 #: debianmemberportfolio/views.py:75
msgid "Mailing Lists" msgid "Mailing Lists"
msgstr "Milis" msgstr "Milis"
#: debianmemberportfolio/controllers/portfolio.py:81 #: debianmemberportfolio/views.py:76
msgid "lists.d.o" msgid "lists.d.o"
msgstr "lists.d.o" msgstr "lists.d.o"
#: debianmemberportfolio/controllers/portfolio.py:82 #: debianmemberportfolio/views.py:77
msgid "lists.a.d.o" msgid "lists.a.d.o"
msgstr "lists.a.d.o" msgstr "lists.a.d.o"
#: debianmemberportfolio/controllers/portfolio.py:83 #: debianmemberportfolio/views.py:78
msgid "gmane" msgid "gmane"
msgstr "gmane" msgstr "gmane"
#: debianmemberportfolio/controllers/portfolio.py:86 #: debianmemberportfolio/views.py:81
msgid "Files" msgid "Files"
msgstr "Berkas-berkas" msgstr "Berkas-berkas"
#: debianmemberportfolio/controllers/portfolio.py:87 #: debianmemberportfolio/views.py:82
msgid "people.d.o" msgid "people.d.o"
msgstr "people.d.o" msgstr "people.d.o"
#: debianmemberportfolio/controllers/portfolio.py:88 #: debianmemberportfolio/views.py:83
msgid "oldpeople" msgid "oldpeople"
msgstr "oldpeople" msgstr "oldpeople"
#: debianmemberportfolio/controllers/portfolio.py:89 #: debianmemberportfolio/views.py:84 debianmemberportfolio/views.py:92
#: debianmemberportfolio/controllers/portfolio.py:97
msgid "Alioth" msgid "Alioth"
msgstr "Alioth" msgstr "Alioth"
#: debianmemberportfolio/controllers/portfolio.py:92 #: debianmemberportfolio/views.py:87
msgid "Membership" msgid "Membership"
msgstr "Keanggotaan" msgstr "Keanggotaan"
#: debianmemberportfolio/controllers/portfolio.py:93 #: debianmemberportfolio/views.py:88
msgid "NM" msgid "NM"
msgstr "NM" msgstr "NM"
#: debianmemberportfolio/controllers/portfolio.py:94 #: debianmemberportfolio/views.py:89
msgid "DB information via finger" msgid "DB information via finger"
msgstr "informasi DB melalui finger" msgstr "informasi DB melalui finger"
#: debianmemberportfolio/controllers/portfolio.py:95 #: debianmemberportfolio/views.py:90
msgid "DB information via HTTP" msgid "DB information via HTTP"
msgstr "informasi DB melalui HTTP" msgstr "informasi DB melalui HTTP"
#: debianmemberportfolio/controllers/portfolio.py:96 #: debianmemberportfolio/views.py:91
msgid "FOAF profile" msgid "FOAF profile"
msgstr "" msgstr "profil FOAF"
#: debianmemberportfolio/controllers/portfolio.py:98 #: debianmemberportfolio/views.py:93
msgid "Wiki" msgid "Wiki"
msgstr "Wiki" msgstr "Wiki"
#: debianmemberportfolio/controllers/portfolio.py:99 #: debianmemberportfolio/views.py:94
msgid "Forum" msgid "Forum"
msgstr "Forum" msgstr "Forum"
#: debianmemberportfolio/controllers/portfolio.py:102 #: debianmemberportfolio/views.py:97
msgid "Miscellaneous" msgid "Miscellaneous"
msgstr "Lain-Lain" msgstr "Lain-Lain"
#: debianmemberportfolio/controllers/portfolio.py:103 #: debianmemberportfolio/views.py:98
msgid "debtags" msgid "debtags"
msgstr "debtags" msgstr "debtags"
#: debianmemberportfolio/controllers/portfolio.py:104 #: debianmemberportfolio/views.py:99
msgid "Planet Debian (name)" msgid "Planet Debian (name)"
msgstr "" msgstr "Planet Debian (nama)"
#: debianmemberportfolio/controllers/portfolio.py:105 #: debianmemberportfolio/views.py:100
#, fuzzy #, fuzzy
msgid "Planet Debian (username)" msgid "Planet Debian (username)"
msgstr "nama pengguna Debian" msgstr "Planet Debian (nama pengguna)"
#: debianmemberportfolio/controllers/portfolio.py:106 #: debianmemberportfolio/views.py:101
msgid "links" msgid "links"
msgstr "tautan" msgstr "tautan"
#: debianmemberportfolio/controllers/portfolio.py:107 #: debianmemberportfolio/views.py:102
msgid "Debian website" msgid "Debian website"
msgstr "website Debian" msgstr "website Debian"
#: debianmemberportfolio/controllers/portfolio.py:108 #: debianmemberportfolio/views.py:103
msgid "Debian search" msgid "Debian search"
msgstr "pencarian Debian" msgstr "pencarian Debian"
#: debianmemberportfolio/controllers/portfolio.py:109 #: debianmemberportfolio/views.py:104
msgid "GPG public key via finger" msgid "GPG public key via finger"
msgstr "kunci publik GPG melalui finger" msgstr "kunci publik GPG melalui finger"
#: debianmemberportfolio/controllers/portfolio.py:110 #: debianmemberportfolio/views.py:105
msgid "GPG public key via HTTP" msgid "GPG public key via HTTP"
msgstr "kunci publik GPG melalui HTTP" msgstr "kunci publik GPG melalui HTTP"
#: debianmemberportfolio/controllers/portfolio.py:111 #: debianmemberportfolio/views.py:106
msgid "NM, AM participation" msgid "NM, AM participation"
msgstr "partisipasi NM, AM" msgstr "partisipasi NM, AM"
#: debianmemberportfolio/controllers/portfolio.py:112 #: debianmemberportfolio/views.py:107
#, fuzzy #, fuzzy
msgid "Contribution information" msgid "Contribution information"
msgstr "Masukkan informasi data pribadi anda" msgstr "Informasi kontribusi"
#: debianmemberportfolio/controllers/portfolio.py:115 #: debianmemberportfolio/views.py:110
msgid "Information reachable via ssh (for Debian Members)" msgid "Information reachable via ssh (for Debian Members)"
msgstr "Informasi dicapai melalui ssh (untuk Anggota Debian)" msgstr "Informasi dicapai melalui ssh (untuk Anggota Debian)"
#: debianmemberportfolio/controllers/portfolio.py:116 #: debianmemberportfolio/views.py:111
msgid "owned debian.net domains" msgid "owned debian.net domains"
msgstr "domain debian.net sendiri" msgstr "domain debian.net sendiri"
#: debianmemberportfolio/controllers/portfolio.py:117 #: debianmemberportfolio/views.py:112
msgid "" msgid ""
"<a href=\"https://wiki.debian.org/qa.debian.org/MIATeam\">MIA</a> database" "<a href=\"https://wiki.debian.org/qa.debian.org/MIATeam\">MIA</a> "
" information" "database information"
msgstr "" msgstr ""
"informasi database <a " "informasi database <a "
"href=\"https://wiki.debian.org/qa.debian.org/MIATeam\">MIA</a>" "href=\"https://wiki.debian.org/qa.debian.org/MIATeam\">MIA</a>"
#: debianmemberportfolio/controllers/portfolio.py:119 #: debianmemberportfolio/views.py:114
msgid "Group membership information" msgid "Group membership information"
msgstr "Informasi keanggotaan kelompok" msgstr "Informasi keanggotaan kelompok"
#: debianmemberportfolio/controllers/portfolio.py:122 #: debianmemberportfolio/views.py:117
msgid "Ubuntu" msgid "Ubuntu"
msgstr "Ubuntu" msgstr "Ubuntu"
#: debianmemberportfolio/controllers/portfolio.py:123 #: debianmemberportfolio/views.py:118
msgid "Available patches from Ubuntu" msgid "Available patches from Ubuntu"
msgstr "Tambalan dari Ubuntu yang tersedia" msgstr "Tambalan dari Ubuntu yang tersedia"
#: debianmemberportfolio/model/urlbuilder.py:40 #: debianmemberportfolio/model/urlbuilder.py:43
msgid "Email address" msgid "Email address"
msgstr "Alamat Email" msgstr "Alamat Email"
#: debianmemberportfolio/model/urlbuilder.py:41 #: debianmemberportfolio/model/urlbuilder.py:44
msgid "Name" msgid "Name"
msgstr "Nama" msgstr "Nama"
#: debianmemberportfolio/model/urlbuilder.py:42 #: debianmemberportfolio/model/urlbuilder.py:45
msgid "GPG fingerprint" msgid "GPG fingerprint"
msgstr "sidik jari GPG" msgstr "sidik jari GPG"
#: debianmemberportfolio/model/urlbuilder.py:43 #: debianmemberportfolio/model/urlbuilder.py:46
msgid "Debian user name" msgid "Debian user name"
msgstr "nama pengguna Debian" msgstr "nama pengguna Debian"
#: debianmemberportfolio/model/urlbuilder.py:44 #: debianmemberportfolio/model/urlbuilder.py:47
msgid "Non Debian email address" msgid "Non Debian email address"
msgstr "Selain alamat email Debian" msgstr "Selain alamat email Debian"
#: debianmemberportfolio/model/urlbuilder.py:45 #: debianmemberportfolio/model/urlbuilder.py:48
msgid "Alioth user name" msgid "Alioth user name"
msgstr "nama pengguna Alioth" msgstr "nama pengguna Alioth"
#: debianmemberportfolio/model/urlbuilder.py:97 #: debianmemberportfolio/model/urlbuilder.py:109
#: debianmemberportfolio/model/urlbuilder.py:101 #: debianmemberportfolio/model/urlbuilder.py:113
#, python-format #, python-format
msgid "Missing input: %s" msgid "Missing input: %s"
msgstr "Tidak ada masukan: %s" msgstr "Tidak ada masukan: %s"
#: debianmemberportfolio/templates/base.mako:25 #: debianmemberportfolio/templates/base.html:24
#: debianmemberportfolio/templates/base.mako:33 #: debianmemberportfolio/templates/base.html:31
msgid "Debian Member Portfolio Service" msgid "Debian Member Portfolio Service"
msgstr "Layanan Portfolio Anggota Debian" msgstr "Layanan Portfolio Anggota Debian"
#: debianmemberportfolio/templates/base.mako:31 #: debianmemberportfolio/templates/base.html:30
msgid "Debian Logo" msgid "Debian Logo"
msgstr "Logo Debian" msgstr "Logo Debian"
#: debianmemberportfolio/templates/base.mako:34 #: debianmemberportfolio/templates/base.html:32
msgid "" msgid ""
"This service has been inspired by Stefano Zacchiroli's <a " "This service has been inspired by Stefano Zacchiroli's <a "
"href=\"https://wiki.debian.org/DDPortfolio\">DDPortfolio page in the " "href=\"https://wiki.debian.org/DDPortfolio\">DDPortfolio page in the "
@ -304,115 +312,114 @@ msgstr ""
" mengarah ke Anggota Debian atau informasi mengenai pengelola paket " " mengarah ke Anggota Debian atau informasi mengenai pengelola paket "
"Debian." "Debian."
#: debianmemberportfolio/templates/base.mako:41 #: debianmemberportfolio/templates/base.html:39
msgid "AGPL - Free Software" msgid "AGPL - Free Software"
msgstr "AGPL - Free Software" msgstr "AGPL - Free Software"
#: debianmemberportfolio/templates/base.mako:43 #: debianmemberportfolio/templates/base.html:40
#, fuzzy, python-format #, fuzzy, python-format
msgid "" msgid ""
"The service is available under the terms of the <a " "The service is available under the terms of the <a "
"href=\"https://www.gnu.org/licenses/agpl.html\">GNU Affero General Public " "href=\"https://www.gnu.org/licenses/agpl.html\">GNU Affero General Public"
"License</a> as published by the Free Software Foundation, either version " " License</a> as published by the Free Software Foundation, either version"
"3 of the License, or (at your option) any later version. You can <a " " 3 of the License, or (at your option) any later version. You can <a "
"href=\"%(browseurl)s\" title=\"Gitweb repository browser URL\">browse the" "href=\"%(browseurl)s\" title=\"Gitweb repository browser URL\">browse the"
" source code</a> or clone it from <a href=\"%(cloneurl)s\" title=\"git " " source code</a> or clone it from <a href=\"%(cloneurl)s\" title=\"git "
"clone URL\">%(cloneurl)s</a> using <a href=\"http://git-" "clone URL\">%(cloneurl)s</a> using <a href=\"https://git-"
"scm.com/\">git</a>. If you want to translate this service to your " "scm.com/\">git</a>. If you want to translate this service to your "
"language you can contribute at <a href=\"%(transifexurl)s\" " "language you can contribute at <a href=\"%(weblateurl)s\" title=\"Debian "
"title=\"Debian Member Portfolio Service at Transifex\">Transifex</a>." "Member Portfolio Service at Weblate\">Weblate</a>."
msgstr "" msgstr ""
"Layanan ini tersedia di bawah persyaratan <a " "Layanan ini tersedia di bawah persyaratan <a "
"href=\"https://www.gnu.org/licenses/agpl.html\">GNU Affero General Public " "href=\"https://www.gnu.org/licenses/agpl.html\">GNU Affero General Public"
"License</a> seperti yang diterbitkan oleh Free Software Foundation, baik " " License</a> seperti yang diterbitkan oleh Free Software Foundation, baik"
"versi 3 dari Lisensi, atau (dengan pilihan Anda) versi lainnya. Anda " " versi 3 dari Lisensi, atau (dengan pilihan Anda) versi lainnya. Anda "
"dapat <a href=\"%(browseurl)s\" title=\"Gitweb repository browser " "dapat <a href=\"%(browseurl)s\" title=\"Gitweb repository browser "
"URL\">menelusuri kode sumber</a> atau klon dari <a href=\"%(cloneurl)s\" " "URL\">menelusuri kode sumber</a> atau klon dari <a href=\"%(cloneurl)s\" "
"title=\"git clone URL\">%(cloneurl)s</a> menggunakan <a href=\"http" "title=\"git clone URL\">%(cloneurl)s</a> menggunakan <a href=\"http"
"://git-scm.com/\">git</a>." "://git-scm.com/\">git</a>.\n"
"Jika anda ingin menerjemahkan layanan ini ke dalam bahasa anda, anda "
"dapat berkontribusi di <a href=\"%(weblateurl)s\" title=\"Debian Member"
" Portfolio Service at Weblate\">Weblate</a>."
#: debianmemberportfolio/templates/base.mako:44 #: debianmemberportfolio/templates/base.html:41
msgid "Copyright © 2009-2014 Jan Dittberner" msgid "Copyright © 2009-2017 Jan Dittberner"
msgstr "Hak Cipta © 2009-2014 Jan Dittberner" msgstr "Hak Cipta © 2009-2017 Jan Dittberner"
#: debianmemberportfolio/templates/showform.mako:24 #: debianmemberportfolio/templates/showform.html:22
msgid "Enter your personal information" msgid "Enter your personal information"
msgstr "Masukkan informasi data pribadi anda" msgstr "Masukkan informasi data pribadi anda"
#: debianmemberportfolio/templates/showform.mako:30 #: debianmemberportfolio/templates/showform.html:29
#: debianmemberportfolio/templates/showurls.mako:27
msgid "Debian Member Portfolio" msgid "Debian Member Portfolio"
msgstr "Portfolio Anggota Debian" msgstr "Portfolio Anggota Debian"
#: debianmemberportfolio/templates/showform.mako:36 #: debianmemberportfolio/templates/showform.html:31
msgid "Email address:" msgid "Email address:"
msgstr "Alamat surel:" msgstr "Alamat surel:"
#: debianmemberportfolio/templates/showform.mako:47 #: debianmemberportfolio/templates/showform.html:40
msgid "Show all form fields" msgid "Show all form fields"
msgstr "Tampilkan semua bagian formulir" msgstr "Tampilkan semua bagian formulir"
#: debianmemberportfolio/templates/showform.mako:54 #: debianmemberportfolio/templates/showform.html:43
msgid "Name:" msgid "Name:"
msgstr "Nama:" msgstr "Nama:"
#: debianmemberportfolio/templates/showform.mako:64 #: debianmemberportfolio/templates/showform.html:50
msgid "GPG fingerprint:" msgid "GPG fingerprint:"
msgstr "sidik jari GPG" msgstr "sidik jari GPG:"
#: debianmemberportfolio/templates/showform.mako:79 #: debianmemberportfolio/templates/showform.html:57
msgid "Debian user name:" msgid "Debian user name:"
msgstr "Nama pengguna Debian:" msgstr "Nama pengguna Debian:"
#: debianmemberportfolio/templates/showform.mako:94 #: debianmemberportfolio/templates/showform.html:64
msgid "Non Debian email address:" msgid "Non Debian email address:"
msgstr "Selain alamat email Debian:" msgstr "Selain alamat email Debian:"
#: debianmemberportfolio/templates/showform.mako:109 #: debianmemberportfolio/templates/showform.html:71
msgid "Alioth user name:" msgid "Alioth user name:"
msgstr "Nama pengguna Alioth:" msgstr "Nama pengguna Alioth:"
#: debianmemberportfolio/templates/showform.mako:125 #: debianmemberportfolio/templates/showform.html:78
msgid "Wiki user name:" msgid "Wiki user name:"
msgstr "Nama pengguna Wiki" msgstr "Nama pengguna Wiki:"
#: debianmemberportfolio/templates/showform.mako:140 #: debianmemberportfolio/templates/showform.html:85
msgid "Forum user id:" msgid "Forum user id:"
msgstr "ID pengguna Forum:" msgstr "ID pengguna Forum:"
#: debianmemberportfolio/templates/showform.mako:151 #: debianmemberportfolio/templates/showform.html:92
msgid "Output format:" msgid "Output format:"
msgstr "Format Keluaran:" msgstr "Format Keluaran:"
#: debianmemberportfolio/templates/showform.mako:157 #: debianmemberportfolio/templates/showform.html:99
msgid "HTML"
msgstr "HTML"
#: debianmemberportfolio/templates/showform.mako:159
msgid "JSON"
msgstr "JSON"
#: debianmemberportfolio/templates/showform.mako:161
msgid "Build Debian Member Portfolio URLs" msgid "Build Debian Member Portfolio URLs"
msgstr "Membangun URL Portfolio Anggota Debian" msgstr "Membangun URL Portfolio Anggota Debian"
#: debianmemberportfolio/templates/showurls.mako:23 #: debianmemberportfolio/templates/showurls.html:21
msgid "Your personal links" msgid "Your personal links"
msgstr "Tautan pribadi anda" msgstr "Tautan pribadi anda"
#: debianmemberportfolio/templates/showurls.mako:30 #: debianmemberportfolio/templates/showurls.html:25
#, fuzzy
msgid "Debian Member Porfolio"
msgstr "Portfolio Anggota Debian"
#: debianmemberportfolio/templates/showurls.html:28
msgid "Usage" msgid "Usage"
msgstr "Penggunaan" msgstr "Penggunaan"
#: debianmemberportfolio/templates/showurls.mako:30 #: debianmemberportfolio/templates/showurls.html:28
msgid "URL" msgid "URL"
msgstr "URL" msgstr "URL"
#: debianmemberportfolio/templates/showurls.mako:40 #: debianmemberportfolio/templates/showurls.html:38
msgid "Error during URL creation:" msgid "Error during URL creation:"
msgstr "Kesalahan selama pembuatan URL:" msgstr "Kesalahan selama pembuatan URL:"
#: debianmemberportfolio/templates/showurls.mako:67 #: debianmemberportfolio/templates/showurls.html:59
msgid "Restart" msgid "Restart"
msgstr "Mulai ulang" msgstr "Mulai ulang"

View file

@ -0,0 +1,402 @@
# German translations for the Debian Member Portfolio Service.
#
# Copyright (C) 2009-2014 Jan Dittberner
# This file is distributed under the same license as the Debian Member
# Portfolio Service project.
# Translators:
# Jan Dittberner <jan@dittberner.info>, 2009-2014
msgid ""
msgstr ""
"Project-Id-Version: Debian Member Portfolio Service 0.3.1\n"
"Report-Msgid-Bugs-To: jan@dittberner.info\n"
"POT-Creation-Date: 2017-09-10 10:49+0200\n"
"PO-Revision-Date: 2017-09-10 10:52+0200\n"
"Last-Translator: Petter Reinholdtsen <pere-weblate@hungry.com>\n"
"Language: nb\n"
"Language-Team: Norwegian Bokmål <https://hosted.weblate.org/projects"
"/debian-member-portfolio-service/translations/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.5.0\n"
#: debianmemberportfolio/forms.py:33
msgid "JSON"
msgstr "JSON"
#: debianmemberportfolio/forms.py:33
msgid "HTML"
msgstr "HTML"
#: debianmemberportfolio/views.py:40
msgid "Overview"
msgstr "Oversikt"
#: debianmemberportfolio/views.py:41
msgid "Debian Member's Package Overview"
msgstr "Debian-medlemmers pakkeoversikt"
#: debianmemberportfolio/views.py:42
msgid ""
"Debian Member's Package Overview\n"
"... showing all email addresses"
msgstr ""
"Debianmedlemmers pakkeoversikt\n"
"... viser alle epostadresser"
#: debianmemberportfolio/views.py:46
msgid "Bugs"
msgstr "Feil"
#: debianmemberportfolio/views.py:47
msgid ""
"bugs received\n"
"(note: co-maintainers not listed, see <a href=\"https://bugs.debian.org"
"/cgi-bin/bugreport.cgi?bug=430986\">#430986</a>)"
msgstr ""
"feilrapporter mottatt\n"
"(merk: med-vedlikeholdere er ikke listet opp, se <a "
"href=\"https://bugs.debian.org/430986\">#430986</a>)"
#: debianmemberportfolio/views.py:51
msgid "bugs reported"
msgstr "feil rapportert"
#: debianmemberportfolio/views.py:52
msgid "user tags"
msgstr "brukermerker"
#: debianmemberportfolio/views.py:53
msgid "all messages (i.e., full text search for developer name on all bug logs)"
msgstr ""
"alle meldinger (med andre ord, fulltekstsøk etter utviklernavnet i alle "
"feilrapporter)"
#: debianmemberportfolio/views.py:55
msgid "<a href=\"https://wiki.debian.org/WNPP\">WNPP</a>"
msgstr "<a href=\"https://wiki.debian.org/WNPP\">WNPP</a>"
#: debianmemberportfolio/views.py:56
msgid "correspondent for bugs"
msgstr "korrespondent for feilrapporter"
#: debianmemberportfolio/views.py:57
msgid "one year open bug history graph"
msgstr ""
#: debianmemberportfolio/views.py:60
msgid "Build"
msgstr "Bygg"
#: debianmemberportfolio/views.py:61
msgid "buildd.d.o"
msgstr "buildd.d.o"
#: debianmemberportfolio/views.py:62
msgid "igloo"
msgstr "iglo"
#: debianmemberportfolio/views.py:65
msgid "Quality Assurance"
msgstr "Kvalitetssikring"
#: debianmemberportfolio/views.py:66
msgid "maintainer dashboard"
msgstr ""
#: debianmemberportfolio/views.py:67
msgid "lintian reports"
msgstr "lintian-rapporter"
#: debianmemberportfolio/views.py:68
msgid "full lintian reports (i.e. including \"info\"-level messages)"
msgstr ""
#: debianmemberportfolio/views.py:70
msgid "piuparts"
msgstr "piuparts"
#: debianmemberportfolio/views.py:71
msgid "Debian patch tracking system"
msgstr ""
#: debianmemberportfolio/views.py:72
msgid "Debian Url ChecKer"
msgstr ""
#: debianmemberportfolio/views.py:75
msgid "Mailing Lists"
msgstr "Epostlister"
#: debianmemberportfolio/views.py:76
msgid "lists.d.o"
msgstr "lists.d.o"
#: debianmemberportfolio/views.py:77
msgid "lists.a.d.o"
msgstr "lists.a.d.o"
#: debianmemberportfolio/views.py:78
msgid "gmane"
msgstr "gmane"
#: debianmemberportfolio/views.py:81
msgid "Files"
msgstr "Filer"
#: debianmemberportfolio/views.py:82
msgid "people.d.o"
msgstr "people.d.o"
#: debianmemberportfolio/views.py:83
msgid "oldpeople"
msgstr ""
#: debianmemberportfolio/views.py:84 debianmemberportfolio/views.py:92
msgid "Alioth"
msgstr "Alioth"
#: debianmemberportfolio/views.py:87
msgid "Membership"
msgstr "Medlemskap"
#: debianmemberportfolio/views.py:88
msgid "NM"
msgstr "NM"
#: debianmemberportfolio/views.py:89
msgid "DB information via finger"
msgstr "DB-informasjon via finger"
#: debianmemberportfolio/views.py:90
msgid "DB information via HTTP"
msgstr "DB-informasjon via HTTP"
#: debianmemberportfolio/views.py:91
msgid "FOAF profile"
msgstr "FOAF-profil"
#: debianmemberportfolio/views.py:93
msgid "Wiki"
msgstr "Wiki"
#: debianmemberportfolio/views.py:94
msgid "Forum"
msgstr "Forum"
#: debianmemberportfolio/views.py:97
msgid "Miscellaneous"
msgstr "Diverse"
#: debianmemberportfolio/views.py:98
msgid "debtags"
msgstr "debtags"
#: debianmemberportfolio/views.py:99
msgid "Planet Debian (name)"
msgstr ""
#: debianmemberportfolio/views.py:100
msgid "Planet Debian (username)"
msgstr ""
#: debianmemberportfolio/views.py:101
msgid "links"
msgstr "lenker"
#: debianmemberportfolio/views.py:102
msgid "Debian website"
msgstr ""
#: debianmemberportfolio/views.py:103
msgid "Debian search"
msgstr "Debian-søk"
#: debianmemberportfolio/views.py:104
msgid "GPG public key via finger"
msgstr "Offentlig GPG-nøkkel via finger"
#: debianmemberportfolio/views.py:105
msgid "GPG public key via HTTP"
msgstr "Offentlig GPG-nøkkel via HTTP"
#: debianmemberportfolio/views.py:106
msgid "NM, AM participation"
msgstr ""
#: debianmemberportfolio/views.py:107
msgid "Contribution information"
msgstr "Bidragsinformasjon"
#: debianmemberportfolio/views.py:110
msgid "Information reachable via ssh (for Debian Members)"
msgstr "Informasjon tilgjengelig via ssh (for Debian-medlemmer)"
#: debianmemberportfolio/views.py:111
msgid "owned debian.net domains"
msgstr ""
#: debianmemberportfolio/views.py:112
msgid ""
"<a href=\"https://wiki.debian.org/qa.debian.org/MIATeam\">MIA</a> "
"database information"
msgstr ""
#: debianmemberportfolio/views.py:114
msgid "Group membership information"
msgstr "Gruppemedlemskapsinformasjon"
#: debianmemberportfolio/views.py:117
msgid "Ubuntu"
msgstr "Ubuntu"
#: debianmemberportfolio/views.py:118
msgid "Available patches from Ubuntu"
msgstr ""
#: debianmemberportfolio/model/urlbuilder.py:43
msgid "Email address"
msgstr "Epostadresse"
#: debianmemberportfolio/model/urlbuilder.py:44
msgid "Name"
msgstr "Navn"
#: debianmemberportfolio/model/urlbuilder.py:45
msgid "GPG fingerprint"
msgstr "GPG-fingeravtrykk"
#: debianmemberportfolio/model/urlbuilder.py:46
msgid "Debian user name"
msgstr "Debian-brukernavn"
#: debianmemberportfolio/model/urlbuilder.py:47
msgid "Non Debian email address"
msgstr "Epostadresser utenom Debian"
#: debianmemberportfolio/model/urlbuilder.py:48
msgid "Alioth user name"
msgstr "Alioth-brukernavn"
#: debianmemberportfolio/model/urlbuilder.py:109
#: debianmemberportfolio/model/urlbuilder.py:113
#, python-format
msgid "Missing input: %s"
msgstr ""
#: debianmemberportfolio/templates/base.html:24
#: debianmemberportfolio/templates/base.html:31
msgid "Debian Member Portfolio Service"
msgstr ""
#: debianmemberportfolio/templates/base.html:30
msgid "Debian Logo"
msgstr "Debian-logo"
#: debianmemberportfolio/templates/base.html:32
msgid ""
"This service has been inspired by Stefano Zacchiroli's <a "
"href=\"https://wiki.debian.org/DDPortfolio\">DDPortfolio page in the "
"Debian Wiki</a>. You can create a set of customized links leading to a "
"Debian Member's or package maintainer's information regarding Debian."
msgstr ""
#: debianmemberportfolio/templates/base.html:39
msgid "AGPL - Free Software"
msgstr "AGPL - Fri programvare"
#: debianmemberportfolio/templates/base.html:40
#, python-format
msgid ""
"The service is available under the terms of the <a "
"href=\"https://www.gnu.org/licenses/agpl.html\">GNU Affero General Public"
" License</a> as published by the Free Software Foundation, either version"
" 3 of the License, or (at your option) any later version. You can <a "
"href=\"%(browseurl)s\" title=\"Gitweb repository browser URL\">browse the"
" source code</a> or clone it from <a href=\"%(cloneurl)s\" title=\"git "
"clone URL\">%(cloneurl)s</a> using <a href=\"https://git-"
"scm.com/\">git</a>. If you want to translate this service to your "
"language you can contribute at <a href=\"%(weblateurl)s\" title=\"Debian "
"Member Portfolio Service at Weblate\">Weblate</a>."
msgstr ""
#: debianmemberportfolio/templates/base.html:41
msgid "Copyright © 2009-2017 Jan Dittberner"
msgstr ""
#: debianmemberportfolio/templates/showform.html:22
msgid "Enter your personal information"
msgstr "Skriv inn informasjon om deg selv"
#: debianmemberportfolio/templates/showform.html:29
msgid "Debian Member Portfolio"
msgstr ""
#: debianmemberportfolio/templates/showform.html:31
msgid "Email address:"
msgstr "Epostadresse:"
#: debianmemberportfolio/templates/showform.html:40
msgid "Show all form fields"
msgstr "Vis alle felt i skjema"
#: debianmemberportfolio/templates/showform.html:43
msgid "Name:"
msgstr "Navn:"
#: debianmemberportfolio/templates/showform.html:50
msgid "GPG fingerprint:"
msgstr "GPG-fingeravtrykk:"
#: debianmemberportfolio/templates/showform.html:57
msgid "Debian user name:"
msgstr "Debian-brukernavn:"
#: debianmemberportfolio/templates/showform.html:64
msgid "Non Debian email address:"
msgstr "Epostadresse utenom Debian:"
#: debianmemberportfolio/templates/showform.html:71
msgid "Alioth user name:"
msgstr "Alioth-brukernavn:"
#: debianmemberportfolio/templates/showform.html:78
msgid "Wiki user name:"
msgstr "Wiki-brukernavn:"
#: debianmemberportfolio/templates/showform.html:85
msgid "Forum user id:"
msgstr "Forum-brukerid:"
#: debianmemberportfolio/templates/showform.html:92
msgid "Output format:"
msgstr "Fremvisningsformat:"
#: debianmemberportfolio/templates/showform.html:99
msgid "Build Debian Member Portfolio URLs"
msgstr ""
#: debianmemberportfolio/templates/showurls.html:21
msgid "Your personal links"
msgstr "Dine personlige lenker"
#: debianmemberportfolio/templates/showurls.html:25
msgid "Debian Member Porfolio"
msgstr ""
#: debianmemberportfolio/templates/showurls.html:28
msgid "Usage"
msgstr "Bruk"
#: debianmemberportfolio/templates/showurls.html:28
msgid "URL"
msgstr "URL"
#: debianmemberportfolio/templates/showurls.html:38
msgid "Error during URL creation:"
msgstr "Feil under oppretting av URL:"
#: debianmemberportfolio/templates/showurls.html:59
msgid "Restart"
msgstr "Start om igjen"

View file

@ -0,0 +1,427 @@
# German translations for the Debian Member Portfolio Service.
#
# Copyright (C) 2009-2014 Jan Dittberner
# This file is distributed under the same license as the Debian Member
# Portfolio Service project.
# Translators:
# Jan Dittberner <jan@dittberner.info>, 2009-2014
msgid ""
msgstr ""
"Project-Id-Version: Debian Member Portfolio Service 0.3.1\n"
"Report-Msgid-Bugs-To: jan@dittberner.info\n"
"POT-Creation-Date: 2017-09-10 10:49+0200\n"
"PO-Revision-Date: 2017-09-10 10:53+0200\n"
"Last-Translator: Heimen Stoffels <vistausss@outlook.com>\n"
"Language: nl\n"
"Language-Team: Dutch <https://hosted.weblate.org/projects/debian-member-"
"portfolio-service/translations/nl/>\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"
"X-Generator: Weblate 2.12-dev\n"
"Generated-By: Babel 2.5.0\n"
#: debianmemberportfolio/forms.py:33
msgid "JSON"
msgstr "JSON"
#: debianmemberportfolio/forms.py:33
msgid "HTML"
msgstr "HTML"
#: debianmemberportfolio/views.py:40
msgid "Overview"
msgstr "Overzicht"
#: debianmemberportfolio/views.py:41
msgid "Debian Member's Package Overview"
msgstr "Debian-ledenpakket - Overzicht"
#: debianmemberportfolio/views.py:42
msgid ""
"Debian Member's Package Overview\n"
"... showing all email addresses"
msgstr ""
"Debian-ledenpakket - Overzicht\n"
"... alle e-mailadressen worden weergegeven"
#: debianmemberportfolio/views.py:46
msgid "Bugs"
msgstr "Fouten"
#: debianmemberportfolio/views.py:47
msgid ""
"bugs received\n"
"(note: co-maintainers not listed, see <a href=\"https://bugs.debian.org"
"/cgi-bin/bugreport.cgi?bug=430986\">#430986</a>)"
msgstr ""
"fouten ontvangen\n"
"(let op: mede-beheerders staan niet op de lijst, zie <a "
"href=\"https://bugs.debian.org/cgi-"
"bin/bugreport.cgi?bug=430986\">#430986</a>"
#: debianmemberportfolio/views.py:51
msgid "bugs reported"
msgstr "fouten gemeld"
#: debianmemberportfolio/views.py:52
msgid "user tags"
msgstr "gebruikerslabels"
#: debianmemberportfolio/views.py:53
msgid "all messages (i.e., full text search for developer name on all bug logs)"
msgstr ""
"alle berichten (zoals zoeken in volledige tekst voor naam van "
"ontwikkelaar in alle foutlogs)"
#: debianmemberportfolio/views.py:55
msgid "<a href=\"https://wiki.debian.org/WNPP\">WNPP</a>"
msgstr "<a href=\"https://wiki.debian.org/WNPP\">WNPP</a>"
#: debianmemberportfolio/views.py:56
msgid "correspondent for bugs"
msgstr "correspondent voor fouten"
#: debianmemberportfolio/views.py:57
msgid "one year open bug history graph"
msgstr "geschiedenisgrafiek voor fouten die één jaar openstaan"
#: debianmemberportfolio/views.py:60
msgid "Build"
msgstr "Bouwen"
#: debianmemberportfolio/views.py:61
msgid "buildd.d.o"
msgstr "buildd.d.o"
#: debianmemberportfolio/views.py:62
msgid "igloo"
msgstr "iglo"
#: debianmemberportfolio/views.py:65
msgid "Quality Assurance"
msgstr "Kwaliteitszekerheid"
#: debianmemberportfolio/views.py:66
msgid "maintainer dashboard"
msgstr "beheerdersdashboard"
#: debianmemberportfolio/views.py:67
msgid "lintian reports"
msgstr "lintian-meldingen"
#: debianmemberportfolio/views.py:68
msgid "full lintian reports (i.e. including \"info\"-level messages)"
msgstr "volledige lintian-rapporten (bijv. inclusief \"info\"-niveauberichten)"
#: debianmemberportfolio/views.py:70
msgid "piuparts"
msgstr "piuparts"
#: debianmemberportfolio/views.py:71
msgid "Debian patch tracking system"
msgstr "Debian-patchtrackingsysteem"
#: debianmemberportfolio/views.py:72
msgid "Debian Url ChecKer"
msgstr "Debian URL-controleerder"
#: debianmemberportfolio/views.py:75
msgid "Mailing Lists"
msgstr "Mailinglijsten"
#: debianmemberportfolio/views.py:76
msgid "lists.d.o"
msgstr "lists.d.o"
#: debianmemberportfolio/views.py:77
msgid "lists.a.d.o"
msgstr "lists.a.d.o"
#: debianmemberportfolio/views.py:78
msgid "gmane"
msgstr "gmane"
#: debianmemberportfolio/views.py:81
msgid "Files"
msgstr "Bestanden"
#: debianmemberportfolio/views.py:82
msgid "people.d.o"
msgstr "people.d.o"
#: debianmemberportfolio/views.py:83
msgid "oldpeople"
msgstr "oudemensen"
#: debianmemberportfolio/views.py:84 debianmemberportfolio/views.py:92
msgid "Alioth"
msgstr "Alioth"
#: debianmemberportfolio/views.py:87
msgid "Membership"
msgstr "Lidmaatschap"
#: debianmemberportfolio/views.py:88
msgid "NM"
msgstr "NM"
#: debianmemberportfolio/views.py:89
msgid "DB information via finger"
msgstr "DB-informatie via finger"
#: debianmemberportfolio/views.py:90
msgid "DB information via HTTP"
msgstr "DB-informatie over HTTP"
#: debianmemberportfolio/views.py:91
msgid "FOAF profile"
msgstr "FOAF-profiel"
#: debianmemberportfolio/views.py:93
msgid "Wiki"
msgstr "Wiki"
#: debianmemberportfolio/views.py:94
msgid "Forum"
msgstr "Forum"
#: debianmemberportfolio/views.py:97
msgid "Miscellaneous"
msgstr "Diversen"
#: debianmemberportfolio/views.py:98
msgid "debtags"
msgstr "deblabels"
#: debianmemberportfolio/views.py:99
msgid "Planet Debian (name)"
msgstr "Planet Debian (naam)"
#: debianmemberportfolio/views.py:100
msgid "Planet Debian (username)"
msgstr "Planet Debian (gebruikersnaam)"
#: debianmemberportfolio/views.py:101
msgid "links"
msgstr "links"
#: debianmemberportfolio/views.py:102
msgid "Debian website"
msgstr "Debian-website"
#: debianmemberportfolio/views.py:103
msgid "Debian search"
msgstr "Debian-zoeken"
#: debianmemberportfolio/views.py:104
msgid "GPG public key via finger"
msgstr "GPG openbare sleutel via finger"
#: debianmemberportfolio/views.py:105
msgid "GPG public key via HTTP"
msgstr "GPG openbare sleutel over HTTP"
#: debianmemberportfolio/views.py:106
msgid "NM, AM participation"
msgstr "NM, AM-deelname"
#: debianmemberportfolio/views.py:107
msgid "Contribution information"
msgstr "Bijdraaginformatie"
#: debianmemberportfolio/views.py:110
msgid "Information reachable via ssh (for Debian Members)"
msgstr "Informatie is bereikbaar over ssh (voor Debian-leden)"
#: debianmemberportfolio/views.py:111
msgid "owned debian.net domains"
msgstr "debian.net-domeinnamen in eigendom"
#: debianmemberportfolio/views.py:112
msgid ""
"<a href=\"https://wiki.debian.org/qa.debian.org/MIATeam\">MIA</a> "
"database information"
msgstr ""
"<a href=\"https://wiki.debian.org/qa.debian.org/MIATeam\">MIA</a"
">-database-informatie"
#: debianmemberportfolio/views.py:114
msgid "Group membership information"
msgstr "Groepslidmaatschap-informatie"
#: debianmemberportfolio/views.py:117
msgid "Ubuntu"
msgstr "Ubuntu"
#: debianmemberportfolio/views.py:118
msgid "Available patches from Ubuntu"
msgstr "Beschikbare patches van Ubuntu"
#: debianmemberportfolio/model/urlbuilder.py:43
msgid "Email address"
msgstr "E-mailadres"
#: debianmemberportfolio/model/urlbuilder.py:44
msgid "Name"
msgstr "Naam"
#: debianmemberportfolio/model/urlbuilder.py:45
msgid "GPG fingerprint"
msgstr "GPG-vingerafdruk"
#: debianmemberportfolio/model/urlbuilder.py:46
msgid "Debian user name"
msgstr "Debian-gebruikersnaam"
#: debianmemberportfolio/model/urlbuilder.py:47
msgid "Non Debian email address"
msgstr "Geen Debian-e-mailadres"
#: debianmemberportfolio/model/urlbuilder.py:48
msgid "Alioth user name"
msgstr "Alioth-gebruikersnaam"
#: debianmemberportfolio/model/urlbuilder.py:109
#: debianmemberportfolio/model/urlbuilder.py:113
#, python-format
msgid "Missing input: %s"
msgstr "Ontbrekende invoer: %s"
#: debianmemberportfolio/templates/base.html:24
#: debianmemberportfolio/templates/base.html:31
msgid "Debian Member Portfolio Service"
msgstr "Debian-ledenportfoliodienst"
#: debianmemberportfolio/templates/base.html:30
msgid "Debian Logo"
msgstr "Debian-logo"
#: debianmemberportfolio/templates/base.html:32
msgid ""
"This service has been inspired by Stefano Zacchiroli's <a "
"href=\"https://wiki.debian.org/DDPortfolio\">DDPortfolio page in the "
"Debian Wiki</a>. You can create a set of customized links leading to a "
"Debian Member's or package maintainer's information regarding Debian."
msgstr ""
"Deze dienst is geïnspireerd op Stefano Zacchiroli's <a "
"href=\"https://wiki.debian.org/DDPortfolio\">DDPortfolio-pagina op de "
"Debian-wiki</a>. U kunt een set aangepaste links creëren die leiden naar "
"een Debian-lid of pakketbeheerder-informatie aangaande Debian."
#: debianmemberportfolio/templates/base.html:39
msgid "AGPL - Free Software"
msgstr "AGPL - Vrije software"
#: debianmemberportfolio/templates/base.html:40
#, python-format
msgid ""
"The service is available under the terms of the <a "
"href=\"https://www.gnu.org/licenses/agpl.html\">GNU Affero General Public"
" License</a> as published by the Free Software Foundation, either version"
" 3 of the License, or (at your option) any later version. You can <a "
"href=\"%(browseurl)s\" title=\"Gitweb repository browser URL\">browse the"
" source code</a> or clone it from <a href=\"%(cloneurl)s\" title=\"git "
"clone URL\">%(cloneurl)s</a> using <a href=\"https://git-"
"scm.com/\">git</a>. If you want to translate this service to your "
"language you can contribute at <a href=\"%(weblateurl)s\" title=\"Debian "
"Member Portfolio Service at Weblate\">Weblate</a>."
msgstr ""
"Deze dienst is beschikbaar onder de voorwaarden van de <a "
"href=\"https://www.gnu.org/licenses/agpl.html\">GNU Affero General Public"
" License</a>, zoals gepubliceerd door de Free Software Foundation, zowel "
"versie 3, als (optioneel) een hogere versie. U kunt <a "
"href=\"%(browseurl)s\" title=\"Gitweb repository browser URL\">door de "
"broncode bladeren</a> of deze klonen <a href=\"%(cloneurl)s\" title=\"git"
" clone URL\">%(cloneurl)s</a> m.b.v. <a href=\"http://git-"
"scm.com/\">git</a>. Als u deze dienst wilt vertalen naar uw eigen taal, "
"dan kunt u bijdragen op <a href=\"%(weblateurl)s\" title=\"Debian "
"Member Portfolio Service at Weblate\">Weblate</a>."
#: debianmemberportfolio/templates/base.html:41
msgid "Copyright © 2009-2017 Jan Dittberner"
msgstr "Copyright © 2009-2017 Jan Dittberner"
#: debianmemberportfolio/templates/showform.html:22
msgid "Enter your personal information"
msgstr "Voer uw persoonlijke informatie in"
#: debianmemberportfolio/templates/showform.html:29
msgid "Debian Member Portfolio"
msgstr "Debian-lidportfolio"
#: debianmemberportfolio/templates/showform.html:31
msgid "Email address:"
msgstr "E-mailadres:"
#: debianmemberportfolio/templates/showform.html:40
msgid "Show all form fields"
msgstr "Alle formuliervelden weergeven"
#: debianmemberportfolio/templates/showform.html:43
msgid "Name:"
msgstr "Naam:"
#: debianmemberportfolio/templates/showform.html:50
msgid "GPG fingerprint:"
msgstr "GPG-vingerafdruk:"
#: debianmemberportfolio/templates/showform.html:57
msgid "Debian user name:"
msgstr "Debian-gebruikersnaam:"
#: debianmemberportfolio/templates/showform.html:64
msgid "Non Debian email address:"
msgstr "Geen Debian-e-mailadres:"
#: debianmemberportfolio/templates/showform.html:71
msgid "Alioth user name:"
msgstr "Alioth-gebruikersnaam:"
#: debianmemberportfolio/templates/showform.html:78
msgid "Wiki user name:"
msgstr "Wiki-gebruikersnaam:"
#: debianmemberportfolio/templates/showform.html:85
msgid "Forum user id:"
msgstr "Forum-gebruikersid:"
#: debianmemberportfolio/templates/showform.html:92
msgid "Output format:"
msgstr "Uitvoerformaat:"
#: debianmemberportfolio/templates/showform.html:99
msgid "Build Debian Member Portfolio URLs"
msgstr "Debian-ledenportfolio URL's bouwen"
#: debianmemberportfolio/templates/showurls.html:21
msgid "Your personal links"
msgstr "Uw persoonlijke links"
#: debianmemberportfolio/templates/showurls.html:25
msgid "Debian Member Porfolio"
msgstr "Debian-lidportfolio"
#: debianmemberportfolio/templates/showurls.html:28
msgid "Usage"
msgstr "Gebruik"
#: debianmemberportfolio/templates/showurls.html:28
msgid "URL"
msgstr "URL"
#: debianmemberportfolio/templates/showurls.html:38
msgid "Error during URL creation:"
msgstr "Er is een fout opgetreden tijdens de URL-creatie:"
#: debianmemberportfolio/templates/showurls.html:59
msgid "Restart"
msgstr "Herstarten"
#~ msgid ""
#~ msgstr ""
#~ msgid "Copyright © 2009-2014 Jan Dittberner"
#~ msgstr "Copyright © 2009-2014 Jan Dittberner"

View file

@ -9,9 +9,10 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Debian Member Portfolio Service\n" "Project-Id-Version: Debian Member Portfolio Service\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2014-02-08 18:14+0100\n" "POT-Creation-Date: 2017-09-10 10:49+0200\n"
"PO-Revision-Date: 2014-01-11 01:27+0100\n" "PO-Revision-Date: 2014-01-11 01:27+0100\n"
"Last-Translator: Jan Dittberner <jan@dittberner.info>\n" "Last-Translator: Jan Dittberner <jan@dittberner.info>\n"
"Language: pt_BR\n"
"Language-Team: Portuguese (Brazil) " "Language-Team: Portuguese (Brazil) "
"(https://www.transifex.com/projects/p/debportfolioservice/language/pt_BR/)" "(https://www.transifex.com/projects/p/debportfolioservice/language/pt_BR/)"
"\n" "\n"
@ -19,17 +20,25 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n" "Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 0.9.6\n" "Generated-By: Babel 2.5.0\n"
#: debianmemberportfolio/controllers/portfolio.py:45 #: debianmemberportfolio/forms.py:33
msgid "JSON"
msgstr "JSON"
#: debianmemberportfolio/forms.py:33
msgid "HTML"
msgstr "HTML"
#: debianmemberportfolio/views.py:40
msgid "Overview" msgid "Overview"
msgstr "Visão Geral" msgstr "Visão Geral"
#: debianmemberportfolio/controllers/portfolio.py:46 #: debianmemberportfolio/views.py:41
msgid "Debian Member's Package Overview" msgid "Debian Member's Package Overview"
msgstr "Visão geral de Pacote de membros Debian" msgstr "Visão geral de Pacote de membros Debian"
#: debianmemberportfolio/controllers/portfolio.py:47 #: debianmemberportfolio/views.py:42
msgid "" msgid ""
"Debian Member's Package Overview\n" "Debian Member's Package Overview\n"
"... showing all email addresses" "... showing all email addresses"
@ -37,11 +46,11 @@ msgstr ""
"Visão geral de Pacote de membros Debian\n" "Visão geral de Pacote de membros Debian\n"
"... mostrando todos os endereços de email" "... mostrando todos os endereços de email"
#: debianmemberportfolio/controllers/portfolio.py:51 #: debianmemberportfolio/views.py:46
msgid "Bugs" msgid "Bugs"
msgstr "Bugs" msgstr "Bugs"
#: debianmemberportfolio/controllers/portfolio.py:52 #: debianmemberportfolio/views.py:47
msgid "" msgid ""
"bugs received\n" "bugs received\n"
"(note: co-maintainers not listed, see <a href=\"https://bugs.debian.org" "(note: co-maintainers not listed, see <a href=\"https://bugs.debian.org"
@ -52,247 +61,246 @@ msgstr ""
"href=\"https://bugs.debian.org/cgi-" "href=\"https://bugs.debian.org/cgi-"
"bin/bugreport.cgi?bug=430986\">#430986</a>)" "bin/bugreport.cgi?bug=430986\">#430986</a>)"
#: debianmemberportfolio/controllers/portfolio.py:56 #: debianmemberportfolio/views.py:51
msgid "bugs reported" msgid "bugs reported"
msgstr "Bugs reportados" msgstr "Bugs reportados"
#: debianmemberportfolio/controllers/portfolio.py:57 #: debianmemberportfolio/views.py:52
msgid "user tags" msgid "user tags"
msgstr "Tags de usuário" msgstr "Tags de usuário"
#: debianmemberportfolio/controllers/portfolio.py:58 #: debianmemberportfolio/views.py:53
msgid "all messages (i.e., full text search for developer name on all bug logs)" msgid "all messages (i.e., full text search for developer name on all bug logs)"
msgstr "" msgstr ""
"Todas as mensagens (Ex. pesquisa completa de texto para nome de " "Todas as mensagens (Ex. pesquisa completa de texto para nome de "
"desenvovedor em todos os logs de bug)" "desenvovedor em todos os logs de bug)"
#: debianmemberportfolio/controllers/portfolio.py:60 #: debianmemberportfolio/views.py:55
msgid "<a href=\"https://wiki.debian.org/WNPP\">WNPP</a>" msgid "<a href=\"https://wiki.debian.org/WNPP\">WNPP</a>"
msgstr "<a href=\"https://wiki.debian.org/WNPP\">WNPP</a>" msgstr "<a href=\"https://wiki.debian.org/WNPP\">WNPP</a>"
#: debianmemberportfolio/controllers/portfolio.py:61 #: debianmemberportfolio/views.py:56
msgid "correspondent for bugs" msgid "correspondent for bugs"
msgstr "correspondente para bugs" msgstr "correspondente para bugs"
#: debianmemberportfolio/controllers/portfolio.py:62 #: debianmemberportfolio/views.py:57
msgid "one year open bug history graph" msgid "one year open bug history graph"
msgstr "Gráfico histórico de bug aberto há um ano " msgstr "Gráfico histórico de bug aberto há um ano "
#: debianmemberportfolio/controllers/portfolio.py:65 #: debianmemberportfolio/views.py:60
msgid "Build" msgid "Build"
msgstr "Construção" msgstr "Construção"
#: debianmemberportfolio/controllers/portfolio.py:66 #: debianmemberportfolio/views.py:61
msgid "buildd.d.o" msgid "buildd.d.o"
msgstr "buildd.d.o" msgstr "buildd.d.o"
#: debianmemberportfolio/controllers/portfolio.py:67 #: debianmemberportfolio/views.py:62
msgid "igloo" msgid "igloo"
msgstr "Iglu" msgstr "Iglu"
#: debianmemberportfolio/controllers/portfolio.py:70 #: debianmemberportfolio/views.py:65
msgid "Quality Assurance" msgid "Quality Assurance"
msgstr "Garantia de qualidade" msgstr "Garantia de qualidade"
#: debianmemberportfolio/controllers/portfolio.py:71 #: debianmemberportfolio/views.py:66
msgid "maintainer dashboard" msgid "maintainer dashboard"
msgstr "" msgstr ""
#: debianmemberportfolio/controllers/portfolio.py:72 #: debianmemberportfolio/views.py:67
msgid "lintian reports" msgid "lintian reports"
msgstr "relatórios lintian" msgstr "relatórios lintian"
#: debianmemberportfolio/controllers/portfolio.py:73 #: debianmemberportfolio/views.py:68
msgid "full lintian reports (i.e. including \"info\"-level messages)" msgid "full lintian reports (i.e. including \"info\"-level messages)"
msgstr "relatórios lintian completos (Ex. incluíndo mensagens \"info\"-level)" msgstr "relatórios lintian completos (Ex. incluíndo mensagens \"info\"-level)"
#: debianmemberportfolio/controllers/portfolio.py:75 #: debianmemberportfolio/views.py:70
msgid "piuparts" msgid "piuparts"
msgstr "piuparts" msgstr "piuparts"
#: debianmemberportfolio/controllers/portfolio.py:76 #: debianmemberportfolio/views.py:71
msgid "Debian patch tracking system" msgid "Debian patch tracking system"
msgstr "Sistema de patch tracking Debian" msgstr "Sistema de patch tracking Debian"
#: debianmemberportfolio/controllers/portfolio.py:77 #: debianmemberportfolio/views.py:72
msgid "Debian Url ChecKer" msgid "Debian Url ChecKer"
msgstr "" msgstr ""
#: debianmemberportfolio/controllers/portfolio.py:80 #: debianmemberportfolio/views.py:75
msgid "Mailing Lists" msgid "Mailing Lists"
msgstr "Listas de discussão" msgstr "Listas de discussão"
#: debianmemberportfolio/controllers/portfolio.py:81 #: debianmemberportfolio/views.py:76
msgid "lists.d.o" msgid "lists.d.o"
msgstr "lists.d.o" msgstr "lists.d.o"
#: debianmemberportfolio/controllers/portfolio.py:82 #: debianmemberportfolio/views.py:77
msgid "lists.a.d.o" msgid "lists.a.d.o"
msgstr "lists.a.d.o" msgstr "lists.a.d.o"
#: debianmemberportfolio/controllers/portfolio.py:83 #: debianmemberportfolio/views.py:78
msgid "gmane" msgid "gmane"
msgstr "gmane" msgstr "gmane"
#: debianmemberportfolio/controllers/portfolio.py:86 #: debianmemberportfolio/views.py:81
msgid "Files" msgid "Files"
msgstr "Arquivos" msgstr "Arquivos"
#: debianmemberportfolio/controllers/portfolio.py:87 #: debianmemberportfolio/views.py:82
msgid "people.d.o" msgid "people.d.o"
msgstr "people.d.o" msgstr "people.d.o"
#: debianmemberportfolio/controllers/portfolio.py:88 #: debianmemberportfolio/views.py:83
msgid "oldpeople" msgid "oldpeople"
msgstr "oldpeople" msgstr "oldpeople"
#: debianmemberportfolio/controllers/portfolio.py:89 #: debianmemberportfolio/views.py:84 debianmemberportfolio/views.py:92
#: debianmemberportfolio/controllers/portfolio.py:97
msgid "Alioth" msgid "Alioth"
msgstr "Alioth" msgstr "Alioth"
#: debianmemberportfolio/controllers/portfolio.py:92 #: debianmemberportfolio/views.py:87
msgid "Membership" msgid "Membership"
msgstr "Associação" msgstr "Associação"
#: debianmemberportfolio/controllers/portfolio.py:93 #: debianmemberportfolio/views.py:88
msgid "NM" msgid "NM"
msgstr "NM" msgstr "NM"
#: debianmemberportfolio/controllers/portfolio.py:94 #: debianmemberportfolio/views.py:89
msgid "DB information via finger" msgid "DB information via finger"
msgstr "Infomações DB via finger" msgstr "Infomações DB via finger"
#: debianmemberportfolio/controllers/portfolio.py:95 #: debianmemberportfolio/views.py:90
msgid "DB information via HTTP" msgid "DB information via HTTP"
msgstr "Informações DB via HTTP" msgstr "Informações DB via HTTP"
#: debianmemberportfolio/controllers/portfolio.py:96 #: debianmemberportfolio/views.py:91
msgid "FOAF profile" msgid "FOAF profile"
msgstr "" msgstr ""
#: debianmemberportfolio/controllers/portfolio.py:98 #: debianmemberportfolio/views.py:93
msgid "Wiki" msgid "Wiki"
msgstr "Wiki" msgstr "Wiki"
#: debianmemberportfolio/controllers/portfolio.py:99 #: debianmemberportfolio/views.py:94
msgid "Forum" msgid "Forum"
msgstr "Fórum" msgstr "Fórum"
#: debianmemberportfolio/controllers/portfolio.py:102 #: debianmemberportfolio/views.py:97
msgid "Miscellaneous" msgid "Miscellaneous"
msgstr "Miscelânea" msgstr "Miscelânea"
#: debianmemberportfolio/controllers/portfolio.py:103 #: debianmemberportfolio/views.py:98
msgid "debtags" msgid "debtags"
msgstr "debtags" msgstr "debtags"
#: debianmemberportfolio/controllers/portfolio.py:104 #: debianmemberportfolio/views.py:99
msgid "Planet Debian (name)" msgid "Planet Debian (name)"
msgstr "" msgstr ""
#: debianmemberportfolio/controllers/portfolio.py:105 #: debianmemberportfolio/views.py:100
#, fuzzy #, fuzzy
msgid "Planet Debian (username)" msgid "Planet Debian (username)"
msgstr "Nome de usuário Debian" msgstr "Nome de usuário Debian"
#: debianmemberportfolio/controllers/portfolio.py:106 #: debianmemberportfolio/views.py:101
msgid "links" msgid "links"
msgstr "links" msgstr "links"
#: debianmemberportfolio/controllers/portfolio.py:107 #: debianmemberportfolio/views.py:102
msgid "Debian website" msgid "Debian website"
msgstr "Site do Debian" msgstr "Site do Debian"
#: debianmemberportfolio/controllers/portfolio.py:108 #: debianmemberportfolio/views.py:103
msgid "Debian search" msgid "Debian search"
msgstr "Pesquisa Debian" msgstr "Pesquisa Debian"
#: debianmemberportfolio/controllers/portfolio.py:109 #: debianmemberportfolio/views.py:104
msgid "GPG public key via finger" msgid "GPG public key via finger"
msgstr "Chave pública GPG via finger" msgstr "Chave pública GPG via finger"
#: debianmemberportfolio/controllers/portfolio.py:110 #: debianmemberportfolio/views.py:105
msgid "GPG public key via HTTP" msgid "GPG public key via HTTP"
msgstr "Chave pública GPG via HTTP" msgstr "Chave pública GPG via HTTP"
#: debianmemberportfolio/controllers/portfolio.py:111 #: debianmemberportfolio/views.py:106
msgid "NM, AM participation" msgid "NM, AM participation"
msgstr "Participação NM, AM" msgstr "Participação NM, AM"
#: debianmemberportfolio/controllers/portfolio.py:112 #: debianmemberportfolio/views.py:107
#, fuzzy #, fuzzy
msgid "Contribution information" msgid "Contribution information"
msgstr "Insira suas informações pessoais" msgstr "Insira suas informações pessoais"
#: debianmemberportfolio/controllers/portfolio.py:115 #: debianmemberportfolio/views.py:110
msgid "Information reachable via ssh (for Debian Members)" msgid "Information reachable via ssh (for Debian Members)"
msgstr "Informação alcançável via ssh (para membros Debian)" msgstr "Informação alcançável via ssh (para membros Debian)"
#: debianmemberportfolio/controllers/portfolio.py:116 #: debianmemberportfolio/views.py:111
msgid "owned debian.net domains" msgid "owned debian.net domains"
msgstr "domínios debian.net adquiridos" msgstr "domínios debian.net adquiridos"
#: debianmemberportfolio/controllers/portfolio.py:117 #: debianmemberportfolio/views.py:112
msgid "" msgid ""
"<a href=\"https://wiki.debian.org/qa.debian.org/MIATeam\">MIA</a> database" "<a href=\"https://wiki.debian.org/qa.debian.org/MIATeam\">MIA</a> "
" information" "database information"
msgstr "" msgstr ""
"<a href=\"https://wiki.debian.org/qa.debian.org/MIATeam\">MIA</a> " "<a href=\"https://wiki.debian.org/qa.debian.org/MIATeam\">MIA</a> "
"informações de banco de dados" "informações de banco de dados"
#: debianmemberportfolio/controllers/portfolio.py:119 #: debianmemberportfolio/views.py:114
msgid "Group membership information" msgid "Group membership information"
msgstr "Informações de Grupos associados" msgstr "Informações de Grupos associados"
#: debianmemberportfolio/controllers/portfolio.py:122 #: debianmemberportfolio/views.py:117
msgid "Ubuntu" msgid "Ubuntu"
msgstr "Ubuntu" msgstr "Ubuntu"
#: debianmemberportfolio/controllers/portfolio.py:123 #: debianmemberportfolio/views.py:118
msgid "Available patches from Ubuntu" msgid "Available patches from Ubuntu"
msgstr "Patches disponíveis para Ubuntu" msgstr "Patches disponíveis para Ubuntu"
#: debianmemberportfolio/model/urlbuilder.py:40 #: debianmemberportfolio/model/urlbuilder.py:43
msgid "Email address" msgid "Email address"
msgstr "Endereços de email" msgstr "Endereços de email"
#: debianmemberportfolio/model/urlbuilder.py:41 #: debianmemberportfolio/model/urlbuilder.py:44
msgid "Name" msgid "Name"
msgstr "Nome" msgstr "Nome"
#: debianmemberportfolio/model/urlbuilder.py:42 #: debianmemberportfolio/model/urlbuilder.py:45
msgid "GPG fingerprint" msgid "GPG fingerprint"
msgstr "Fingerprint GPG" msgstr "Fingerprint GPG"
#: debianmemberportfolio/model/urlbuilder.py:43 #: debianmemberportfolio/model/urlbuilder.py:46
msgid "Debian user name" msgid "Debian user name"
msgstr "Nome de usuário Debian" msgstr "Nome de usuário Debian"
#: debianmemberportfolio/model/urlbuilder.py:44 #: debianmemberportfolio/model/urlbuilder.py:47
msgid "Non Debian email address" msgid "Non Debian email address"
msgstr "Endereço de email não Debian" msgstr "Endereço de email não Debian"
#: debianmemberportfolio/model/urlbuilder.py:45 #: debianmemberportfolio/model/urlbuilder.py:48
msgid "Alioth user name" msgid "Alioth user name"
msgstr "Nome de usuário Alioth" msgstr "Nome de usuário Alioth"
#: debianmemberportfolio/model/urlbuilder.py:97 #: debianmemberportfolio/model/urlbuilder.py:109
#: debianmemberportfolio/model/urlbuilder.py:101 #: debianmemberportfolio/model/urlbuilder.py:113
#, python-format #, python-format
msgid "Missing input: %s" msgid "Missing input: %s"
msgstr "Entrada restante: %s" msgstr "Entrada restante: %s"
#: debianmemberportfolio/templates/base.mako:25 #: debianmemberportfolio/templates/base.html:24
#: debianmemberportfolio/templates/base.mako:33 #: debianmemberportfolio/templates/base.html:31
msgid "Debian Member Portfolio Service" msgid "Debian Member Portfolio Service"
msgstr "Membro do Serviço de Portfolio Debian" msgstr "Membro do Serviço de Portfolio Debian"
#: debianmemberportfolio/templates/base.mako:31 #: debianmemberportfolio/templates/base.html:30
msgid "Debian Logo" msgid "Debian Logo"
msgstr "Logo Debian" msgstr "Logo Debian"
#: debianmemberportfolio/templates/base.mako:34 #: debianmemberportfolio/templates/base.html:32
msgid "" msgid ""
"This service has been inspired by Stefano Zacchiroli's <a " "This service has been inspired by Stefano Zacchiroli's <a "
"href=\"https://wiki.debian.org/DDPortfolio\">DDPortfolio page in the " "href=\"https://wiki.debian.org/DDPortfolio\">DDPortfolio page in the "
@ -300,28 +308,28 @@ msgid ""
"Debian Member's or package maintainer's information regarding Debian." "Debian Member's or package maintainer's information regarding Debian."
msgstr "" msgstr ""
"Este serviço tem sido inspirado por Stefano Zacchiroli's <a " "Este serviço tem sido inspirado por Stefano Zacchiroli's <a "
"href=\"https://wiki.debian.org/DDPortfolio\">Página DDPortfolio na Debian " "href=\"https://wiki.debian.org/DDPortfolio\">Página DDPortfolio na Debian"
"Wiki</a>. Você pode criar um conjunto de links customizados apontando " " Wiki</a>. Você pode criar um conjunto de links customizados apontando "
"para informações, ou de membro Debian, ou de mantenedor de pacotes a " "para informações, ou de membro Debian, ou de mantenedor de pacotes a "
"respeito de Debian." "respeito de Debian."
#: debianmemberportfolio/templates/base.mako:41 #: debianmemberportfolio/templates/base.html:39
msgid "AGPL - Free Software" msgid "AGPL - Free Software"
msgstr "AGPL - Sofware Livre" msgstr "AGPL - Sofware Livre"
#: debianmemberportfolio/templates/base.mako:43 #: debianmemberportfolio/templates/base.html:40
#, fuzzy, python-format #, fuzzy, python-format
msgid "" msgid ""
"The service is available under the terms of the <a " "The service is available under the terms of the <a "
"href=\"https://www.gnu.org/licenses/agpl.html\">GNU Affero General Public " "href=\"https://www.gnu.org/licenses/agpl.html\">GNU Affero General Public"
"License</a> as published by the Free Software Foundation, either version " " License</a> as published by the Free Software Foundation, either version"
"3 of the License, or (at your option) any later version. You can <a " " 3 of the License, or (at your option) any later version. You can <a "
"href=\"%(browseurl)s\" title=\"Gitweb repository browser URL\">browse the" "href=\"%(browseurl)s\" title=\"Gitweb repository browser URL\">browse the"
" source code</a> or clone it from <a href=\"%(cloneurl)s\" title=\"git " " source code</a> or clone it from <a href=\"%(cloneurl)s\" title=\"git "
"clone URL\">%(cloneurl)s</a> using <a href=\"http://git-" "clone URL\">%(cloneurl)s</a> using <a href=\"https://git-"
"scm.com/\">git</a>. If you want to translate this service to your " "scm.com/\">git</a>. If you want to translate this service to your "
"language you can contribute at <a href=\"%(transifexurl)s\" " "language you can contribute at <a href=\"%(weblateurl)s\" title=\"Debian "
"title=\"Debian Member Portfolio Service at Transifex\">Transifex</a>." "Member Portfolio Service at Weblate\">Weblate</a>."
msgstr "" msgstr ""
"O serviço está disponível sob os termos da <a " "O serviço está disponível sob os termos da <a "
"href=\"https://www.gnu.org/licenses/agpl.html\">Licença Pública Geral " "href=\"https://www.gnu.org/licenses/agpl.html\">Licença Pública Geral "
@ -332,88 +340,85 @@ msgstr ""
"href=\"%(cloneurl)s\" title=\"git clone URL\">%(cloneurl)s</a> usando <a " "href=\"%(cloneurl)s\" title=\"git clone URL\">%(cloneurl)s</a> usando <a "
"href=\"http://git-scm.com/\">git</a>." "href=\"http://git-scm.com/\">git</a>."
#: debianmemberportfolio/templates/base.mako:44 #: debianmemberportfolio/templates/base.html:41
msgid "Copyright © 2009-2014 Jan Dittberner" #, fuzzy
msgid "Copyright © 2009-2017 Jan Dittberner"
msgstr "Direitos Autorais © 2009-2014 Jan Dittberner" msgstr "Direitos Autorais © 2009-2014 Jan Dittberner"
#: debianmemberportfolio/templates/showform.mako:24 #: debianmemberportfolio/templates/showform.html:22
msgid "Enter your personal information" msgid "Enter your personal information"
msgstr "Insira suas informações pessoais" msgstr "Insira suas informações pessoais"
#: debianmemberportfolio/templates/showform.mako:30 #: debianmemberportfolio/templates/showform.html:29
#: debianmemberportfolio/templates/showurls.mako:27
msgid "Debian Member Portfolio" msgid "Debian Member Portfolio"
msgstr "Portfolio de Membro Debian" msgstr "Portfolio de Membro Debian"
#: debianmemberportfolio/templates/showform.mako:36 #: debianmemberportfolio/templates/showform.html:31
msgid "Email address:" msgid "Email address:"
msgstr "Endereço de email:" msgstr "Endereço de email:"
#: debianmemberportfolio/templates/showform.mako:47 #: debianmemberportfolio/templates/showform.html:40
msgid "Show all form fields" msgid "Show all form fields"
msgstr "Mostrar todos os campos" msgstr "Mostrar todos os campos"
#: debianmemberportfolio/templates/showform.mako:54 #: debianmemberportfolio/templates/showform.html:43
msgid "Name:" msgid "Name:"
msgstr "Nome:" msgstr "Nome:"
#: debianmemberportfolio/templates/showform.mako:64 #: debianmemberportfolio/templates/showform.html:50
msgid "GPG fingerprint:" msgid "GPG fingerprint:"
msgstr "Fingerprint GPG:" msgstr "Fingerprint GPG:"
#: debianmemberportfolio/templates/showform.mako:79 #: debianmemberportfolio/templates/showform.html:57
msgid "Debian user name:" msgid "Debian user name:"
msgstr "Nome de usuário Debian:" msgstr "Nome de usuário Debian:"
#: debianmemberportfolio/templates/showform.mako:94 #: debianmemberportfolio/templates/showform.html:64
msgid "Non Debian email address:" msgid "Non Debian email address:"
msgstr "Endereço de email não Debian:" msgstr "Endereço de email não Debian:"
#: debianmemberportfolio/templates/showform.mako:109 #: debianmemberportfolio/templates/showform.html:71
msgid "Alioth user name:" msgid "Alioth user name:"
msgstr "Nome de usuário Alioth:" msgstr "Nome de usuário Alioth:"
#: debianmemberportfolio/templates/showform.mako:125 #: debianmemberportfolio/templates/showform.html:78
msgid "Wiki user name:" msgid "Wiki user name:"
msgstr "Nome de usuário Wiki:" msgstr "Nome de usuário Wiki:"
#: debianmemberportfolio/templates/showform.mako:140 #: debianmemberportfolio/templates/showform.html:85
msgid "Forum user id:" msgid "Forum user id:"
msgstr "Id de usuário do fórum:" msgstr "Id de usuário do fórum:"
#: debianmemberportfolio/templates/showform.mako:151 #: debianmemberportfolio/templates/showform.html:92
msgid "Output format:" msgid "Output format:"
msgstr "Formato de saída:" msgstr "Formato de saída:"
#: debianmemberportfolio/templates/showform.mako:157 #: debianmemberportfolio/templates/showform.html:99
msgid "HTML"
msgstr "HTML"
#: debianmemberportfolio/templates/showform.mako:159
msgid "JSON"
msgstr "JSON"
#: debianmemberportfolio/templates/showform.mako:161
msgid "Build Debian Member Portfolio URLs" msgid "Build Debian Member Portfolio URLs"
msgstr "URLs de Portfolio de Membros Debian em Construção" msgstr "URLs de Portfolio de Membros Debian em Construção"
#: debianmemberportfolio/templates/showurls.mako:23 #: debianmemberportfolio/templates/showurls.html:21
msgid "Your personal links" msgid "Your personal links"
msgstr "Seus links pessoais" msgstr "Seus links pessoais"
#: debianmemberportfolio/templates/showurls.mako:30 #: debianmemberportfolio/templates/showurls.html:25
#, fuzzy
msgid "Debian Member Porfolio"
msgstr "Portfolio de Membro Debian"
#: debianmemberportfolio/templates/showurls.html:28
msgid "Usage" msgid "Usage"
msgstr "MOdo de uso" msgstr "MOdo de uso"
#: debianmemberportfolio/templates/showurls.mako:30 #: debianmemberportfolio/templates/showurls.html:28
msgid "URL" msgid "URL"
msgstr "URL" msgstr "URL"
#: debianmemberportfolio/templates/showurls.mako:40 #: debianmemberportfolio/templates/showurls.html:38
msgid "Error during URL creation:" msgid "Error during URL creation:"
msgstr "Erro durante criação de URL:" msgstr "Erro durante criação de URL:"
#: debianmemberportfolio/templates/showurls.mako:67 #: debianmemberportfolio/templates/showurls.html:59
msgid "Restart" msgid "Restart"
msgstr "Reiniciar" msgstr "Reiniciar"

View file

@ -0,0 +1,413 @@
# German translations for the Debian Member Portfolio Service.
# Copyright (C) 2009-2014 Jan Dittberner
# This file is distributed under the same license as the Debian Member
# Portfolio Service project.
# Translators:
# Jan Dittberner <jan@dittberner.info>, 2009-2014
msgid ""
msgstr ""
"Project-Id-Version: Debian Member Portfolio Service 0.3.1\n"
"Report-Msgid-Bugs-To: jan@dittberner.info\n"
"POT-Creation-Date: 2017-09-10 10:49+0200\n"
"PO-Revision-Date: 2016-08-18 03:24+0000\n"
"Last-Translator: chimez <chimez@163.com>\n"
"Language: zh_Hans_CN\n"
"Language-Team: Chinese (China) <https://hosted.weblate.org/projects"
"/debian-member-portfolio-service/translations/zh_CN/>\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"
"X-Generator: Weblate 2.13-dev\n"
"Generated-By: Babel 2.5.0\n"
#: debianmemberportfolio/forms.py:33
msgid "JSON"
msgstr "JSON"
#: debianmemberportfolio/forms.py:33
msgid "HTML"
msgstr "HTML"
#: debianmemberportfolio/views.py:40
msgid "Overview"
msgstr "概述"
#: debianmemberportfolio/views.py:41
msgid "Debian Member's Package Overview"
msgstr "Debian 成员的软件包概览"
#: debianmemberportfolio/views.py:42
msgid ""
"Debian Member's Package Overview\n"
"... showing all email addresses"
msgstr ""
"Debian 成员的软件包概览\n"
"... 显示所有邮件地址"
#: debianmemberportfolio/views.py:46
msgid "Bugs"
msgstr "缺陷"
#: debianmemberportfolio/views.py:47
msgid ""
"bugs received\n"
"(note: co-maintainers not listed, see <a href=\"https://bugs.debian.org"
"/cgi-bin/bugreport.cgi?bug=430986\">#430986</a>)"
msgstr ""
"bugs 接收\n"
"(注意: 合作维护者未列入, 详见 <a href=\"https://bugs.debian.org/cgi-"
"bin/bugreport.cgi?bug=430986\">#430986</a>)"
#: debianmemberportfolio/views.py:51
msgid "bugs reported"
msgstr "bugs 报告"
#: debianmemberportfolio/views.py:52
msgid "user tags"
msgstr "用户标签"
#: debianmemberportfolio/views.py:53
msgid "all messages (i.e., full text search for developer name on all bug logs)"
msgstr "所有信息 (即,开发者名下所有缺陷日志的全文搜索)"
#: debianmemberportfolio/views.py:55
msgid "<a href=\"https://wiki.debian.org/WNPP\">WNPP</a>"
msgstr "<a href=\"https://wiki.debian.org/WNPP\">需要支持的和未来应有的包WNPP</a>"
#: debianmemberportfolio/views.py:56
msgid "correspondent for bugs"
msgstr "bug的通信者"
#: debianmemberportfolio/views.py:57
msgid "one year open bug history graph"
msgstr "一年处理Bug历史图表"
#: debianmemberportfolio/views.py:60
msgid "Build"
msgstr "构建"
#: debianmemberportfolio/views.py:61
msgid "buildd.d.o"
msgstr "buildd.d.o"
#: debianmemberportfolio/views.py:62
msgid "igloo"
msgstr "冰屋(igloo)"
#: debianmemberportfolio/views.py:65
msgid "Quality Assurance"
msgstr "质量保证"
#: debianmemberportfolio/views.py:66
msgid "maintainer dashboard"
msgstr "维护者面板"
#: debianmemberportfolio/views.py:67
msgid "lintian reports"
msgstr "Lintian报告"
#: debianmemberportfolio/views.py:68
msgid "full lintian reports (i.e. including \"info\"-level messages)"
msgstr "全部Lintian报告(即包括\"info\"级信息)"
#: debianmemberportfolio/views.py:70
msgid "piuparts"
msgstr "piuparts"
#: debianmemberportfolio/views.py:71
msgid "Debian patch tracking system"
msgstr "Debian补丁追踪系统(Debian patch tracking system)"
#: debianmemberportfolio/views.py:72
msgid "Debian Url ChecKer"
msgstr "Debian链接检查器(Debian Url Checker)"
#: debianmemberportfolio/views.py:75
msgid "Mailing Lists"
msgstr "邮件列表"
#: debianmemberportfolio/views.py:76
msgid "lists.d.o"
msgstr "lists.d.o"
#: debianmemberportfolio/views.py:77
msgid "lists.a.d.o"
msgstr "lists.a.d.o"
#: debianmemberportfolio/views.py:78
msgid "gmane"
msgstr "gmane"
#: debianmemberportfolio/views.py:81
msgid "Files"
msgstr "文件"
#: debianmemberportfolio/views.py:82
msgid "people.d.o"
msgstr "people.d.o"
#: debianmemberportfolio/views.py:83
msgid "oldpeople"
msgstr "老人"
#: debianmemberportfolio/views.py:84 debianmemberportfolio/views.py:92
msgid "Alioth"
msgstr "北斗五(Alioth)"
#: debianmemberportfolio/views.py:87
msgid "Membership"
msgstr "成员关系"
#: debianmemberportfolio/views.py:88
msgid "NM"
msgstr "NM"
#: debianmemberportfolio/views.py:89
msgid "DB information via finger"
msgstr "DB信息,通过finger"
#: debianmemberportfolio/views.py:90
msgid "DB information via HTTP"
msgstr "DB信息,通过HTTP"
#: debianmemberportfolio/views.py:91
msgid "FOAF profile"
msgstr "FOAF档案"
#: debianmemberportfolio/views.py:93
msgid "Wiki"
msgstr "Wiki"
#: debianmemberportfolio/views.py:94
msgid "Forum"
msgstr "论坛"
#: debianmemberportfolio/views.py:97
msgid "Miscellaneous"
msgstr "杂项"
#: debianmemberportfolio/views.py:98
msgid "debtags"
msgstr "包标签"
#: debianmemberportfolio/views.py:99
msgid "Planet Debian (name)"
msgstr "Planet Debian (名字)"
#: debianmemberportfolio/views.py:100
msgid "Planet Debian (username)"
msgstr "Planet Debian (用户名)"
#: debianmemberportfolio/views.py:101
msgid "links"
msgstr "链接"
#: debianmemberportfolio/views.py:102
msgid "Debian website"
msgstr "Debian网站"
#: debianmemberportfolio/views.py:103
msgid "Debian search"
msgstr "Debian搜索"
#: debianmemberportfolio/views.py:104
msgid "GPG public key via finger"
msgstr "GPG公钥,通过finger"
#: debianmemberportfolio/views.py:105
msgid "GPG public key via HTTP"
msgstr "GPG公钥,通过HTTP"
#: debianmemberportfolio/views.py:106
msgid "NM, AM participation"
msgstr "NM, AM 参加"
#: debianmemberportfolio/views.py:107
msgid "Contribution information"
msgstr "贡献信息"
#: debianmemberportfolio/views.py:110
msgid "Information reachable via ssh (for Debian Members)"
msgstr "信息可获取,通过ssh(DM专用)"
#: debianmemberportfolio/views.py:111
msgid "owned debian.net domains"
msgstr "拥有 debian.net 领域"
#: debianmemberportfolio/views.py:112
msgid ""
"<a href=\"https://wiki.debian.org/qa.debian.org/MIATeam\">MIA</a> "
"database information"
msgstr "<a href=\"https://wiki.debian.org/qa.debian.org/MIATeam\">MIA</a> 数据库信息"
#: debianmemberportfolio/views.py:114
msgid "Group membership information"
msgstr "群组会员信息"
#: debianmemberportfolio/views.py:117
msgid "Ubuntu"
msgstr "Ubuntu"
#: debianmemberportfolio/views.py:118
msgid "Available patches from Ubuntu"
msgstr "来自Ubuntu的可用补丁"
#: debianmemberportfolio/model/urlbuilder.py:43
msgid "Email address"
msgstr "邮件地址"
#: debianmemberportfolio/model/urlbuilder.py:44
msgid "Name"
msgstr "姓名"
#: debianmemberportfolio/model/urlbuilder.py:45
msgid "GPG fingerprint"
msgstr "GPG指纹"
#: debianmemberportfolio/model/urlbuilder.py:46
msgid "Debian user name"
msgstr "Debian用户名"
#: debianmemberportfolio/model/urlbuilder.py:47
msgid "Non Debian email address"
msgstr "非Debian邮件地址"
#: debianmemberportfolio/model/urlbuilder.py:48
msgid "Alioth user name"
msgstr "Alioth用户名"
#: debianmemberportfolio/model/urlbuilder.py:109
#: debianmemberportfolio/model/urlbuilder.py:113
#, python-format
msgid "Missing input: %s"
msgstr "缺少输入: %s"
#: debianmemberportfolio/templates/base.html:24
#: debianmemberportfolio/templates/base.html:31
msgid "Debian Member Portfolio Service"
msgstr "Debian Member Portfolio 服务"
#: debianmemberportfolio/templates/base.html:30
msgid "Debian Logo"
msgstr "Debian Logo"
#: debianmemberportfolio/templates/base.html:32
msgid ""
"This service has been inspired by Stefano Zacchiroli's <a "
"href=\"https://wiki.debian.org/DDPortfolio\">DDPortfolio page in the "
"Debian Wiki</a>. You can create a set of customized links leading to a "
"Debian Member's or package maintainer's information regarding Debian."
msgstr ""
"这个服务由 Stefano Zacchiroli的 <a "
"href=\"https://wiki.debian.org/DDPortfolio\">DDPortfolio 的 Debian "
"Wiki页面</a> 得到灵感. 你可以创建一个指向 Debian Member 的或包维护者的关于Debian的信息的定制链接集合."
#: debianmemberportfolio/templates/base.html:39
msgid "AGPL - Free Software"
msgstr "AGPL - 自由软件"
#: debianmemberportfolio/templates/base.html:40
#, python-format
msgid ""
"The service is available under the terms of the <a "
"href=\"https://www.gnu.org/licenses/agpl.html\">GNU Affero General Public"
" License</a> as published by the Free Software Foundation, either version"
" 3 of the License, or (at your option) any later version. You can <a "
"href=\"%(browseurl)s\" title=\"Gitweb repository browser URL\">browse the"
" source code</a> or clone it from <a href=\"%(cloneurl)s\" title=\"git "
"clone URL\">%(cloneurl)s</a> using <a href=\"https://git-"
"scm.com/\">git</a>. If you want to translate this service to your "
"language you can contribute at <a href=\"%(weblateurl)s\" title=\"Debian "
"Member Portfolio Service at Weblate\">Weblate</a>."
msgstr ""
"这个服务在由自由软件基金会(FSF)发布的 <a "
"href=\"https://www.gnu.org/licenses/agpl.html\">GNU Affero General Public"
" License</a> 第三版或(可选)更高版本协议下可用 你可以点击 <a href=\"%(browseurl)s\" "
"title=\"Gitweb repository browser URL\">查看源代码</a> 或从 <a "
"href=\"%(cloneurl)s\" title=\"git clone URL\">%(cloneurl)s</a> 使用 <a "
"href=\"http://git-scm.com/\">git</a> clone . 如果你想翻译这个服务到你的语言 你可以在这里投稿 <a "
"href=\"%(weblateurl)s\" title=\"Debian Member Portfolio Service at "
"Weblate\">Weblate</a>."
#: debianmemberportfolio/templates/base.html:41
msgid "Copyright © 2009-2017 Jan Dittberner"
msgstr "Copyright © 2009-2017 Jan Dittberner"
#: debianmemberportfolio/templates/showform.html:22
msgid "Enter your personal information"
msgstr "输入你的个人信息"
#: debianmemberportfolio/templates/showform.html:29
msgid "Debian Member Portfolio"
msgstr "Debian Member Portfolio"
#: debianmemberportfolio/templates/showform.html:31
msgid "Email address:"
msgstr "邮件地址:"
#: debianmemberportfolio/templates/showform.html:40
msgid "Show all form fields"
msgstr "显示所有字段"
#: debianmemberportfolio/templates/showform.html:43
msgid "Name:"
msgstr "姓名:"
#: debianmemberportfolio/templates/showform.html:50
msgid "GPG fingerprint:"
msgstr "GPG指纹:"
#: debianmemberportfolio/templates/showform.html:57
msgid "Debian user name:"
msgstr "Debian用户名:"
#: debianmemberportfolio/templates/showform.html:64
msgid "Non Debian email address:"
msgstr "非Debian邮件地址:"
#: debianmemberportfolio/templates/showform.html:71
msgid "Alioth user name:"
msgstr "Alioth用户名:"
#: debianmemberportfolio/templates/showform.html:78
msgid "Wiki user name:"
msgstr "Wiki用户名:"
#: debianmemberportfolio/templates/showform.html:85
msgid "Forum user id:"
msgstr "论坛用户id:"
#: debianmemberportfolio/templates/showform.html:92
msgid "Output format:"
msgstr "输出格式:"
#: debianmemberportfolio/templates/showform.html:99
msgid "Build Debian Member Portfolio URLs"
msgstr "构建Debian Member Prortfolio链接"
#: debianmemberportfolio/templates/showurls.html:21
msgid "Your personal links"
msgstr "你的个人链接"
#: debianmemberportfolio/templates/showurls.html:25
#, fuzzy
msgid "Debian Member Porfolio"
msgstr "Debian Member Porfolio"
#: debianmemberportfolio/templates/showurls.html:28
msgid "Usage"
msgstr "使用"
#: debianmemberportfolio/templates/showurls.html:28
msgid "URL"
msgstr "URL"
#: debianmemberportfolio/templates/showurls.html:38
msgid "Error during URL creation:"
msgstr "在 URL 创建过程中的错误:"
#: debianmemberportfolio/templates/showurls.html:59
msgid "Restart"
msgstr "重启"

View file

@ -0,0 +1,219 @@
# -*- python -*-
# -*- coding: utf-8 -*-
#
# Debian Member Portfolio Service views
#
# Copyright © 2015 Jan Dittberner <jan@dittberner.info>
#
# This file is part of the Debian Member Portfolio Service.
#
# Debian Member Portfolio Service is free software: you can redistribute it
# and/or modify it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the License,
# or (at your option) any later version.
#
# Debian Member Portfolio Service is distributed in the hope that it will be
# useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero
# General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
#
import json
import logging
from debianmemberportfolio import app, babel
from flask import g, make_response, request, render_template, abort
# noinspection PyPep8Naming
from flask_babel import lazy_gettext as N_
from config import LANGUAGES
from .forms import DeveloperData, DeveloperDataRequest
from .model import dddatabuilder
from .model.urlbuilder import build_urls
log = logging.getLogger(__name__)
#: This dictionary defines groups of labeled portfolio items.
_LABELS = {
'overview': {
'label': N_('Overview'),
'ddpo': N_("Debian Member's Package Overview"),
'alladdresses': N_("""Debian Member's Package Overview
... showing all email addresses"""),
},
'bugs': {
'label': N_('Bugs'),
'received': N_('''bugs received
(note: co-maintainers not listed, see \
<a href="https://bugs.debian.org/cgi-bin/bugreport.cgi?\
bug=430986">#430986</a>)'''),
'reported': N_('bugs reported'),
'usertags': N_('user tags'),
'searchall': N_('all messages (i.e., full text search for \
developer name on all bug logs)'),
'wnpp': N_('<a href="https://wiki.debian.org/WNPP">WNPP</a>'),
'correspondent': N_('correspondent for bugs'),
'graph': N_('one year open bug history graph'),
},
'build': {
'label': N_('Build'),
'buildd': N_('buildd.d.o'),
'igloo': N_('igloo'),
},
'qa': {
'label': N_('Quality Assurance'),
'dmd': N_('maintainer dashboard'),
'lintian': N_('lintian reports'),
'lintianfull': N_('full lintian reports (i.e. including \
"info"-level messages)'),
'piuparts': N_('piuparts'),
'patchtracker': N_('Debian patch tracking system'),
'duck': N_('Debian Url ChecKer'),
},
'lists': {
'label': N_('Mailing Lists'),
'dolists': N_('lists.d.o'),
'adolists': N_('lists.a.d.o'),
'gmane': N_('gmane'),
},
'files': {
'label': N_('Files'),
'people': N_('people.d.o'),
'oldpeople': N_('oldpeople'),
'alioth': N_('Alioth'),
},
'membership': {
'label': N_('Membership'),
'nm': N_('NM'),
'dbfinger': N_('DB information via finger'),
'db': N_('DB information via HTTP'),
'webid': N_('FOAF profile'),
'alioth': N_('Alioth'),
'wiki': N_('Wiki'),
'forum': N_('Forum'),
},
'miscellaneous': {
'label': N_('Miscellaneous'),
'debtags': N_('debtags'),
'planetname': N_('Planet Debian (name)'),
'planetuser': N_('Planet Debian (username)'),
'links': N_('links'),
'website': N_('Debian website'),
'search': N_('Debian search'),
'gpgfinger': N_('GPG public key via finger'),
'gpgweb': N_('GPG public key via HTTP'),
'nm': N_('NM, AM participation'),
'contrib': N_('Contribution information'),
},
'ssh': {
'label': N_('Information reachable via ssh (for Debian Members)'),
'owndndoms': N_('owned debian.net domains'),
'miainfo': N_('<a href="https://wiki.debian.org/qa.debian.org/'
'MIATeam">MIA</a> database information'),
'groupinfo': N_('Group membership information'),
},
'ubuntu': {
'label': N_('Ubuntu'),
'ubuntudiff': N_('Available patches from Ubuntu'),
},
}
#: list of field name tuples for Debian Maintainers
DM_TUPLES = (('name', 'name'),
('gpgfp', 'gpgfp'),
('nonddemail', 'email'))
#: list of field name tuples for Debian Developers
DD_TUPLES = (('username', 'username'),
('aliothusername', 'username'))
def _get_label(section, url=None):
if section in _LABELS:
if url:
if url in _LABELS[section]:
return _LABELS[section][url]
elif 'label' in _LABELS[section]:
return _LABELS[section]['label']
if url:
return "%s.%s" % (section, url)
return section
@babel.localeselector
def get_locale():
return request.accept_languages.best_match(LANGUAGES.keys())
@app.before_request
def before_request():
g.locale = get_locale()
@app.route('/')
def index():
form = DeveloperData()
return render_template('showform.html', form=form)
@app.route('/result')
def urllist():
form = DeveloperData(request.values)
if form.validate():
fields = dddatabuilder.build_data(form.data['email'])
rp = request.values
if fields['type'] in (dddatabuilder.TYPE_DD, dddatabuilder.TYPE_DM):
for dmtuple in DM_TUPLES:
if not dmtuple[0] in rp or not rp[dmtuple[0]]:
rp[dmtuple[0]] = fields[dmtuple[1]]
if fields['type'] == dddatabuilder.TYPE_DD:
for ddtuple in DD_TUPLES:
if not ddtuple[0] in rp or not rp[ddtuple[0]]:
rp[ddtuple[0]] = fields[ddtuple[1]]
if form.data['wikihomepage'] is None:
log.debug('generate wikihomepage from name')
form.data['wikihomepage'] = "".join([
part.capitalize() for part in form.data['name'].split()
])
data = build_urls(form.data)
if form.data['mode'] == 'json':
response = make_response(json.dumps(dict(
[("{}.{}".format(entry[1], entry[2].name), entry[3])
for entry in data if entry[0] == 'url'])))
response.headers['Content-Type'] = 'application/json'
return response
for entry in data:
if entry[0] in ('url', 'error'):
entry.append(_get_label(entry[1], entry[2].name))
elif entry[0] == 'section':
entry.append(_get_label(entry[1]))
return render_template('showurls.html', urldata=data)
return render_template('showform.html', form=form)
@app.route('/htmlformhelper.js')
def formhelper_js():
response = make_response(render_template('showformscript.js'))
response.headers['Content-Type'] = 'text/javascript; charset=utf-8'
return response
@app.route('/showformscripts/fetchdddata/')
def fetchdddata():
form = DeveloperDataRequest(request.values)
if form.validate():
fields = dddatabuilder.build_data(form.data['email'])
log.debug(fields)
response = make_response(json.dumps(fields))
response.headers['Content-Type'] = 'application/json'
return response
abort(
400,
"\n".join(["%s: %s" % (key, form.errors[key]) for key in form.errors])
)

View file

@ -1,46 +0,0 @@
# -*- python -*-
# -*- coding: utf-8 -*-
#
# Debian Member Portfolio Service websetup
#
# Copyright © 2009-2014 Jan Dittberner <jan@dittberner.info>
#
# This file is part of the Debian Member Portfolio Service.
#
# Debian Member Portfolio Service is free software: you can redistribute it
# and/or modify it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the License,
# or (at your option) any later version.
#
# Debian Member Portfolio Service is distributed in the hope that it will be
# useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero
# General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
#
"""
Setup the debianmemberportfolio application
"""
import logging
from paste.deploy import appconfig
import pylons.test
from debianmemberportfolio.config.environment import load_environment
log = logging.getLogger(__name__)
def setup_config(command, filename, section, vars):
"""
Place any commands to setup debianmemberportfolio here
"""
conf = appconfig('config:' + filename)
if not pylons.test.pylonsapp:
load_environment(conf.global_conf, conf.local_conf)

View file

@ -1,73 +0,0 @@
#
# Debian Member Portfolio Service - Pylons development environment
# configuration
#
# The %(here)s variable will be replaced with the parent directory of this file
#
[DEFAULT]
debug = true
# Uncomment and replace with the address which should receive any error reports
#email_to = you@yourdomain.com
smtp_server = localhost
error_email_from = paste@localhost
[server:main]
use = egg:Paste#http
host = 127.0.0.1
port = 5000
[app:main]
use = egg:debianmemberportfolio
full_stack = true
static_files = true
cache_dir = %(here)s/data
beaker.session.key = debianmemberportfolio
beaker.session.secret = somesecret
# If you'd like to fine-tune the individual locations of the cache data dirs
# for the Cache data, or the Session saves, un-comment the desired settings
# here:
#beaker.cache.data_dir = %(here)s/data/cache
#beaker.session.data_dir = %(here)s/data/sessions
# WARNING: *THE LINE BELOW MUST BE UNCOMMENTED ON A PRODUCTION ENVIRONMENT*
# Debug mode will enable the interactive debugging tool, allowing ANYONE to
# execute malicious code after an exception is raised.
#set debug = false
# Logging configuration
[loggers]
keys = root, routes, debianmemberportfolio
[handlers]
keys = console
[formatters]
keys = generic
[logger_root]
level = INFO
handlers = console
[logger_routes]
level = INFO
handlers =
qualname = routes.middleware
# "level = DEBUG" logs the route matched and routing variables.
[logger_debianmemberportfolio]
level = DEBUG
handlers =
qualname = debianmemberportfolio
[handler_console]
class = StreamHandler
args = (sys.stderr,)
level = NOTSET
formatter = generic
[formatter_generic]
format = %(asctime)s,%(msecs)03d %(levelname)-5.5s [%(name)s] [%(threadName)s] %(message)s
datefmt = %H:%M:%S

View file

@ -1,16 +1,15 @@
Development of Debian Member Portfolio Service Development of Debian Member Portfolio Service
============================================== ==============================================
The Debian Member Portfolio Service is implemented in `Python The Debian Member Portfolio Service is implemented in `Python 3
<https://www.python.org>`_ using the `Pylons <https://www.python.org>`_ using the `Flask <http://flask.pocoo.org/>`_ web
<https://pylons.readthedocs.org/en/latest/>`_ web application application framework.
framework.
The following sections describe how to setup a local development environment The following sections describe how to setup a local development environment
for the Debian Member Portfolio Service. for the Debian Member Portfolio Service.
All instructions assume that you work on a Debian system. You should use Python All instructions assume that you work on a Debian system. You should use Python
2.7 for development. 3 for development.
Setup of a local development Setup of a local development
---------------------------- ----------------------------
@ -22,53 +21,48 @@ To start working on the source code you need to have `git`_ installed::
.. _git: http://www.git-scm.com/ .. _git: http://www.git-scm.com/
The canonical git repository for the Debian Member Portfolio Service is The canonical git repository for the Debian Member Portfolio Service is
available at http://debianstuff.dittberner.info/git/debianmemberportfolio.git. available at https://debianstuff.dittberner.info/git/debianmemberportfolio.git.
To get a clone of the source code you change to a directory of your choice and To get a clone of the source code you change to a directory of your choice and
invoke git clone:: invoke git clone::
cd ~/src cd ~/src
git clone http://debianstuff.dittberner.info/git/debianmemberportfolio.git git clone https://debianstuff.dittberner.info/git/debianmemberportfolio.git
You should use `virtualenv`_ to separate the development environment from your You should use `venv`_ to separate the development environment from your
system wide Python installation. You can install virtualenv using:: system wide Python installation. You can install virtualenv using::
sudo aptitude install python-virtualenv sudo aptitude install python3-venv
.. _virtualenv: https://pypi.python.org/pypi/virtualenv .. _venv: https://docs.python.org/3/library/venv.html
When you have :command:`virtualenv` installed you should create a virtual When you have :command:`pyvenv` installed you should create a virtual
environment for Debian Member Portfolio Service development and install the environment for Debian Member Portfolio Service development and install the
requirements using `pip <https://pypi.python.org/pypi/pip>`_:: requirements using `pip <https://pypi.python.org/pypi/pip>`_::
mkdir ~/.virtualenvs mkdir ~/.virtualenvs
virtualenv --distribute ~/.virtualenvs/dmportfolio pyvenv ~/.virtualenvs/dmportfolio
. ~/.virtualenvs/dmportfolio/bin/activate . ~/.virtualenvs/dmportfolio/bin/activate
cd ~/src/debianmemberportfolio cd ~/src/debianmemberportfolio
pip install -r jessiereq.pip pip install -r stretchreq.pip
.. note:: .. note::
The Debian Member Portfolio Service instance at http://portfolio.debian.net/ The Debian Member Portfolio Service instance at http://portfolio.debian.net/
is running on a Debian Jessie server, therefore :file:`jessiereq.pip` is running on a Debian Stretch server, therefore :file:`stretchreq.pip`
contains dependency versions matching that Debian release. contains dependency versions matching that Debian release.
The dependency download and installation into the virtual environment takes The dependency download and installation into the virtual environment takes
some time. some time.
After you have your virtual environment ready you need to setup the project for
development::
python setup.py develop
Debian Member Portfolio Service needs the JQuery JavaScript library to function Debian Member Portfolio Service needs the JQuery JavaScript library to function
properly. The JQuery library is not included in the git clone and must be properly. The JQuery library is not included in the git clone and must be
copied into the subdirectory copied into the subdirectory
:file:`debianmemberportfolio/public/javascript/jquery`. On Debian systems you :file:`debianmemberportfolio/static/javascript/jquery`. On Debian systems you
can install the package libjs-jquery and place a symlink to the directory can install the package libjs-jquery and place a symlink to the directory
:file:`/usr/share/javascript` into :file:`debianmemberportfolio/public`: :: :file:`/usr/share/javascript` into :file:`debianmemberportfolio/static`: ::
sudo aptitude install libjs-jquery sudo aptitude install libjs-jquery
ln -s /usr/share/javascript debianmemberportfolio/public ln -s /usr/share/javascript debianmemberportfolio/static
Prepare for first startup Prepare for first startup
~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~
@ -93,21 +87,19 @@ When you have both installed you can run::
The first synchronizes the keyrings in :file:`$HOME/debian/keyring.debian.org` The first synchronizes the keyrings in :file:`$HOME/debian/keyring.debian.org`
with files on the `keyring.debian.org <http://keyring.debian.org>`_ host. And with files on the `keyring.debian.org <http://keyring.debian.org>`_ host. And
the second generates a key/value database in the second generates a key/value database in
:file:`debianmemberportfolio/model/keyringcache` that is used by the code. :file:`debianmemberportfolio/model/keyringcache.db` that is used by the code.
Run a development server Run a development server
~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~
Pylons uses PasteScript to run a development server. You can run a development You can run a development server using::
server using::
paster serve --reload development.ini python3 run.py
The output of this command should look like the following:: The output of this command should look like the following::
Starting subprocess with file monitor * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
Starting server in PID 31377. * Restarting with stat
serving on http://127.0.0.1:5000
You can now access your development server at the URL that is printed by the command. You can now access your development server at the URL that is printed by the command.
@ -122,21 +114,17 @@ Add new URL
Debian Member Portfolio Service uses a ini style configuration file Debian Member Portfolio Service uses a ini style configuration file
:file:`debianmemberportfolio/model/portfolio.ini` to configure the generated URL :file:`debianmemberportfolio/model/portfolio.ini` to configure the generated URL
patterns. The actual URL generation is done in patterns. The actual URL generation is done in
:py:class:`~debianmemberportfolio.controllers.portfolio.DdportfolioController` :py:func:`~debianmemberportfolio.views.urllist`.
in the
:py:meth:`~debianmemberportfolio.controllers.portfolio.DdportfolioController.urllist`
method.
If you want to add a new URL type you have to add a line in If you want to add a new URL type you have to add a line in
:file:`portfolio.ini` and an entry in :file:`portfolio.ini` and an entry in :py:mod:`~debianmemberportfolio.views`'s
:py:class:`~debianmemberportfolio.controllers.portfolio.DdportfolioController`'s :py:attr:`~debianmemberportfolio.views._LABELS` dictionary. The top level
:py:attr:`~debianmemberportfolio.controllers.portfolio.DdportfolioController._LABELS` dictionary keys correspond to sections in the ini file. The dictionary values
dictionary. The top level dictionary keys correspond to sections in the ini are dictionaries themselves that contain a special key ``label`` that defines
file. The dictionary values are dictionaries themselves that contain a special the label of the section in the output and keys for each entry to be rendered
key ``label`` that defines the label of the section in the output and keys for in that section. The values in these sub-dictionaries are strings marked for
each entry to be rendered in that section. The values in these sub-dictionaries translation using the :py:func:`~flask_babel.lazy_gettext` function from
are strings marked for translation using the :py:func:`~pylons.i18n._` function from :py:mod:`flask_babel`.
:py:mod:`pylons.i18n`.
The patterns in :file:`portfolio.ini` can contain the following placeholders The patterns in :file:`portfolio.ini` can contain the following placeholders
that are filled at runtime: that are filled at runtime:
@ -148,7 +136,7 @@ Placeholder Replacement
%(email)s email address (URL encoded) %(email)s email address (URL encoded)
%(emailnoq)s email address %(emailnoq)s email address
%(firstchar)s first character of the email address %(firstchar)s first character of the email address
%(forumsid)d forum user id %(forumsid)s forum user id
%(gpgfp)s GNUPG/PGP key fingerprint %(gpgfp)s GNUPG/PGP key fingerprint
%(name)s full name (i.e. John Smith) %(name)s full name (i.e. John Smith)
%(username)s Debian user name %(username)s Debian user name
@ -158,10 +146,9 @@ Placeholder Replacement
.. _alioth.debian.org: https://alioth.debian.org/ .. _alioth.debian.org: https://alioth.debian.org/
The replacement of placeholders is performed in the The replacement of placeholders is performed in the
:py:meth:`~debianmemberportfolio.controllers.portfolio.DdportfolioController.urllist` :py:func:`~debianmemberportfolio.views.urllist` function. And uses data from
method. And uses data from the Debian keyring. Access to the pre-parsed keyring the Debian keyring. Access to the pre-parsed keyring data is performed using
data is performed using the the :py:func:`~debianmemberportfolio.model.dddatabuilder.build_data` function
:py:func:`~debianmemberportfolio.model.dddatabuilder.build_data` function of of the module :py:mod:`debianmemberportfolio.model.dddatabuilder`, which uses
the module :py:mod:`debianmemberportfolio.model.dddatabuilder`, which uses
several helper functions from :py:mod:`debianmemberportfolio.model.keyfinder` several helper functions from :py:mod:`debianmemberportfolio.model.keyfinder`
to access the key information. to access the key information.

View file

@ -4,58 +4,16 @@ Source documentation
The sections below contain mostly autogenerated documentation of the source The sections below contain mostly autogenerated documentation of the source
code of the Debian Member Portfolio Service. code of the Debian Member Portfolio Service.
Controllers Forms
----------- -----
.. automodule:: debianmemberportfolio.controllers .. automodule:: debianmemberportfolio.forms
:members: :members:
portfolio controller Views
~~~~~~~~~~~~~~~~~~~~ -----
.. automodule:: debianmemberportfolio.controllers.portfolio .. automodule:: debianmemberportfolio.views
:members:
error controller
~~~~~~~~~~~~~~~~
.. automodule:: debianmemberportfolio.controllers.error
:members:
showformscripts controller
~~~~~~~~~~~~~~~~~~~~~~~~~~
.. automodule:: debianmemberportfolio.controllers.showformscripts
:members:
template controller
~~~~~~~~~~~~~~~~~~~
.. automodule:: debianmemberportfolio.controllers.template
:members:
Library code
------------
.. automodule:: debianmemberportfolio.lib
:members:
app_globals
~~~~~~~~~~~
.. automodule:: debianmemberportfolio.lib.app_globals
:members:
base
~~~~
.. automodule:: debianmemberportfolio.lib.base
:members:
helpers
~~~~~~~
.. automodule:: debianmemberportfolio.lib.helpers
:members: :members:
Model Model
@ -70,12 +28,6 @@ dddatabuilder
.. automodule:: debianmemberportfolio.model.dddatabuilder .. automodule:: debianmemberportfolio.model.dddatabuilder
:members: :members:
form
~~~~
.. automodule:: debianmemberportfolio.model.form
:members:
keyfinder keyfinder
~~~~~~~~~ ~~~~~~~~~

View file

@ -1,18 +0,0 @@
Babel==1.3
Beaker==1.6.4
FormEncode==1.2.6
Mako==1.0.0
MarkupSafe==0.23
Paste==1.7.5.1
PasteDeploy==1.5.2
PasteScript==1.7.5
Pygments==2.0.1
Pylons==1.0.1
Routes==2.0
Tempita==0.5.2
WebError==0.10.3
WebHelpers==1.3
WebOb==1.4
WebTest==2.0.16
nose==1.3.4
simplejson==3.6.5

11
requirements.txt Normal file
View file

@ -0,0 +1,11 @@
Flask==0.12.2
Jinja2==2.9.6
MarkupSafe==1.0
Werkzeug==0.12.2
itsdangerous==0.24
Babel==2.5.0
Flask-Babel==0.11.2
pytz==2017.2
speaklater==1.3
Flask-WTF==0.14.2
WTForms==2.1

12
debianmemberportfolio/config/__init__.py → run.py Normal file → Executable file
View file

@ -1,9 +1,10 @@
# -*- python -*- #!/usr/bin/env python3
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# -*- python -*-
# #
# Debian Member Portfolio Service config package # Debian Member Portfolio Service Flask runner
# #
# Copyright © 2009-2014 Jan Dittberner <jan@dittberner.info> # Copyright © 2015 Jan Dittberner <jan@dittberner.info>
# #
# This file is part of the Debian Member Portfolio Service. # This file is part of the Debian Member Portfolio Service.
# #
@ -20,3 +21,8 @@
# You should have received a copy of the GNU Affero General Public License # You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>. # along with this program. If not, see <https://www.gnu.org/licenses/>.
# #
from debianmemberportfolio import app
if __name__ == '__main__':
app.debug = True
app.run()

View file

@ -12,29 +12,28 @@ doc-dir=docs/html
make-dirs=1 make-dirs=1
[nosetests] [nosetests]
with-pylons = test.ini
cover-package = debianmemberportfolio cover-package = debianmemberportfolio
# Babel configuration # Babel configuration
[compile_catalog] [compile_catalog]
domain = debianmemberportfolio domain = messages
directory = debianmemberportfolio/i18n directory = debianmemberportfolio/translations
statistics = true statistics = true
[extract_messages] [extract_messages]
charset = UTF-8 charset = UTF-8
add_comments = TRANSLATORS: add_comments = TRANSLATORS:
output_file = debianmemberportfolio/i18n/debianmemberportfolio.pot output_file = messages.pot
width = 80 width = 80
msgid_bugs_address = jan@dittberner.info msgid_bugs_address = jan@dittberner.info
[init_catalog] [init_catalog]
domain = debianmemberportfolio domain = messages
input_file = debianmemberportfolio/i18n/debianmemberportfolio.pot input_file = messages.pot
output_dir = debianmemberportfolio/i18n output_dir = debianmemberportfolio/translations
[update_catalog] [update_catalog]
domain = debianmemberportfolio domain = messages
input_file = debianmemberportfolio/i18n/debianmemberportfolio.pot input_file = messages.pot
output_dir = debianmemberportfolio/i18n output_dir = debianmemberportfolio/translations
previous = true previous = true

View file

@ -2,7 +2,7 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# #
# Debian Member Portfolio Service setup # Debian Member Portfolio Service setup
# Copyright © 2009-2015 Jan Dittberner <jan@dittberner.info> # Copyright © 2009-2017 Jan Dittberner <jan@dittberner.info>
# #
# This file is part of the Debian Member Portfolio Service. # This file is part of the Debian Member Portfolio Service.
# #
@ -22,13 +22,14 @@
try: try:
from setuptools import setup, find_packages from setuptools import setup, find_packages
except ImportError: except ImportError:
# noinspection PyUnresolvedReferences
from ez_setup import use_setuptools from ez_setup import use_setuptools
use_setuptools() use_setuptools()
from setuptools import setup, find_packages from setuptools import setup, find_packages
setup( setup(
name='debianmemberportfolio', name='debianmemberportfolio',
version='0.4.2', version='0.5.0',
description='service to create Debian Member Portfolio URLs', description='service to create Debian Member Portfolio URLs',
long_description="""This is a service implementation that returns a set of long_description="""This is a service implementation that returns a set of
personalized URLs as outlined in https://wiki.debian.org/DDPortfolio. It personalized URLs as outlined in https://wiki.debian.org/DDPortfolio. It
@ -46,22 +47,16 @@ setup(
author_email='jan@dittberner.info', author_email='jan@dittberner.info',
url='http://debian-stuff.dittberner.info/debianmemberportfolio', url='http://debian-stuff.dittberner.info/debianmemberportfolio',
license='AGPL-3.0+', license='AGPL-3.0+',
install_requires=["Pylons>=1.0", 'babel>=0.9.6'], install_requires=["Flask>=0.12.2", 'Babel>=2.5.0', 'Flask-Babel>=0.11.2', 'wtforms'],
packages=find_packages(exclude=['ez_setup']), packages=find_packages(exclude=['ez_setup']),
include_package_data=True, include_package_data=True,
test_suite='nose.collector', test_suite='nose.collector',
package_data={'debianmemberportfolio': package_data={'debianmemberportfolio':
['*.ini', 'i18n/*/LC_MESSAGES/*.mo']}, ['*.ini', 'translations/*/LC_MESSAGES/*.mo']},
message_extractors={'debianmemberportfolio': [ message_extractors={'debianmemberportfolio': [
('**.py', 'python', None), ('**.py', 'python', None),
('templates/**.mako', 'mako', None), ('templates/**.html', 'jinja2', None),
('public/**', 'ignore', None)]}, ('templates/**.js', 'jinja2', None),
('static/**', 'ignore', None)]},
zip_safe=False, zip_safe=False,
entry_points="""
[paste.app_factory]
main = debianmemberportfolio.config.middleware:make_app
[paste.app_install]
main = pylons.util:PylonsInstaller
""",
) )

10
stretch.pip Normal file
View file

@ -0,0 +1,10 @@
Flask==0.12
Jinja2==2.8
MarkupSafe==0.23
Werkzeug==0.11.15
itsdangerous==0.24
Babel==2.3.4
Flask-Babel==0.11.1
pytz==2016.7
Flask-WTF==0.12
WTForms==2.1

View file

@ -1,21 +0,0 @@
#
# Debian Member Portfolio Service - Pylons testing environment configuration
#
# The %(here)s variable will be replaced with the parent directory of this file
#
[DEFAULT]
debug = true
# Uncomment and replace with the address which should receive any error reports
#email_to = you@yourdomain.com
smtp_server = localhost
error_email_from = paste@localhost
[server:main]
use = egg:Paste#http
host = 127.0.0.1
port = 5000
[app:main]
use = config:development.ini
# Add additional test specific configuration options as necessary.

View file

@ -1,20 +0,0 @@
Babel==0.9.6
Beaker==1.6.3
FormEncode==1.2.4
Mako==0.7.0
MarkupSafe==0.15
Paste==1.7.5.1
PasteDeploy==1.5.0
PasteScript==1.7.5
Pygments==1.5
Pylons==1.0
Routes==1.13
Tempita==0.5.1
WebError==0.10.3
WebHelpers==1.3
WebOb==1.1.1
WebTest==1.3.4
argparse==1.2.1
nose==1.1.2
simplejson==2.5.2
wsgiref==0.1.2