1
0
mirror of https://github.com/dkmstr/openuds.git synced 2025-01-03 01:17:56 +03:00

* Added responsive tables to admin

* Added language selection over REST API
* Added "renderers" so we can add icons or whatever to cells before rendering
* Lots of improvements
This commit is contained in:
Adolfo Gómez 2013-11-17 03:48:05 +00:00
parent 6bb538d941
commit 47be643eac
44 changed files with 2556 additions and 10601 deletions

View File

@ -10,6 +10,11 @@
<arguments> <arguments>
</arguments> </arguments>
</buildCommand> </buildCommand>
<buildCommand>
<name>com.eclipsesource.jshint.ui.builder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec> </buildSpec>
<natures> <natures>
<nature>org.python.pydev.pythonNature</nature> <nature>org.python.pydev.pythonNature</nature>

View File

@ -0,0 +1,3 @@
eclipse.preferences.version=1
excluded=//*.min.js\://PluginDetect_Java.js
included=//*.js

View File

@ -0,0 +1 @@
ujson

View File

@ -39,6 +39,7 @@ from django.utils.translation import ugettext as _, activate
from django.conf import settings from django.conf import settings
from handlers import Handler, HandlerError, AccessDenied from handlers import Handler, HandlerError, AccessDenied
import time
import logging import logging
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@ -136,10 +137,14 @@ class Dispatcher(View):
# Invokes the handler's operation, add headers to response and returns # Invokes the handler's operation, add headers to response and returns
try: try:
if handler.raw: # Raw handlers will return an HttpResponse Object start = time.time();
response = operation() response = operation()
else: logger.debug('Execution time for method: {0}'.format(time.time() - start))
response = processor.getResponse(operation())
if not handler.raw: # Raw handlers will return an HttpResponse Object
start = time.time()
response = processor.getResponse(response)
logger.debug('Execution time for encoding: {0}'.format(time.time() - start))
for k, v in handler.headers().iteritems(): for k, v in handler.headers().iteritems():
response[k] = v response[k] = v
return response return response

View File

@ -72,7 +72,7 @@ class TableInfo(ModelTableHandlerMixin, Handler):
title = _('Current authenticators') title = _('Current authenticators')
fields = [ fields = [
{ 'name': {'title': _('Name'), 'visible': True } }, { 'name': {'title': _('Name'), 'visible': True, 'type': 'iconType' } },
{ 'comments': {'title': _('Comments')}}, { 'comments': {'title': _('Comments')}},
{ 'users_count': {'title': _('Users'), 'type': 'numeric', 'width': '5em'}} { 'users_count': {'title': _('Users'), 'type': 'numeric', 'width': '5em'}}
] ]

View File

@ -81,7 +81,6 @@ class Login(Handler):
class Logout(Handler): class Logout(Handler):
path = 'auth' path = 'auth'
authenticated = True # By default, all handlers needs authentication authenticated = True # By default, all handlers needs authentication
needs_staff = True # By default, staff
def get(self): def get(self):
# Remove auth token # Remove auth token
@ -103,4 +102,10 @@ class Auths(Handler):
def get(self): def get(self):
return list(self.auths()) return list(self.auths())
class Locale(Handler):
authenticated = True
def get(self):
if len(self._args) > 0:
self.setValue('locale', self._args[1])
return ''

View File

@ -65,7 +65,7 @@ class TableInfo(ModelTableHandlerMixin, Handler):
path = 'networks' path = 'networks'
title = _('Current Networks') title = _('Current Networks')
fields = [ fields = [
{ 'name': {'title': _('Name'), 'visible': True } }, { 'name': {'title': _('Name'), 'visible': True, 'type': 'icon', 'icon': 'fa fa-globe text-success' } },
{ 'net_string': {'title': _('Networks')}}, { 'net_string': {'title': _('Networks')}},
{ 'networks_count': {'title': _('Used by'), 'type': 'numeric', 'width': '8em'}} { 'networks_count': {'title': _('Used by'), 'type': 'numeric', 'width': '8em'}}
] ]

View File

@ -68,7 +68,7 @@ class TableInfo(ModelTableHandlerMixin, Handler):
path = 'osmanagers' path = 'osmanagers'
title = _('Current OS Managers') title = _('Current OS Managers')
fields = [ fields = [
{ 'name': {'title': _('Name'), 'visible': True } }, { 'name': {'title': _('Name'), 'visible': True, 'type': 'iconType' } },
{ 'comments': {'title': _('Comments')}}, { 'comments': {'title': _('Comments')}},
{ 'deployed_count': {'title': _('Used by'), 'type': 'numeric', 'width': '8em'}} { 'deployed_count': {'title': _('Used by'), 'type': 'numeric', 'width': '8em'}}
] ]

View File

@ -66,7 +66,7 @@ class TableInfo(ModelTableHandlerMixin, Handler):
path = 'providers' path = 'providers'
title = _('Current service providers') title = _('Current service providers')
fields = [ fields = [
{ 'name': {'title': _('Name') } }, { 'name': {'title': _('Name'), 'type': 'iconType' } },
{ 'comments': {'title': _('Comments')}}, { 'comments': {'title': _('Comments')}},
{ 'services_count': {'title': _('Services'), 'type': 'numeric', 'width': '5em'}} { 'services_count': {'title': _('Services'), 'type': 'numeric', 'width': '5em'}}
] ]

View File

@ -68,7 +68,7 @@ class TableInfo(ModelTableHandlerMixin, Handler):
path = 'transports' path = 'transports'
title = _('Current Transports') title = _('Current Transports')
fields = [ fields = [
{ 'name': {'title': _('Name'), 'visible': True } }, { 'name': {'title': _('Name'), 'visible': True, 'type': 'iconType' } },
{ 'comments': {'title': _('Comments')}}, { 'comments': {'title': _('Comments')}},
{ 'deployed_count': {'title': _('Used by'), 'type': 'numeric', 'width': '8em'}} { 'deployed_count': {'title': _('Used by'), 'type': 'numeric', 'width': '8em'}}
] ]

View File

@ -32,8 +32,10 @@
''' '''
from __future__ import unicode_literals from __future__ import unicode_literals
import time
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext as _
from django.utils import formats from django.utils import formats
from uds.core.util.State import State
from uds.models import Authenticator, User from uds.models import Authenticator, User
@ -47,19 +49,6 @@ logger = logging.getLogger(__name__)
class Users(DetailHandler): class Users(DetailHandler):
def user_as_dict(self, user):
return {
'id': user.id,
'name': user.name,
'real_name': user.real_name,
'comments': user.comments,
'state': user.state,
'staff_member': user.staff_member,
'is_admin': user.is_admin,
'last_access': formats.date_format(user.last_access, 'DATETIME_FORMAT'),
'parent': user.parent
}
def get(self): def get(self):
logger.debug(self._parent) logger.debug(self._parent)
logger.debug(self._kwargs) logger.debug(self._kwargs)
@ -69,12 +58,9 @@ class Users(DetailHandler):
try: try:
if len(self._args) == 0: if len(self._args) == 0:
res = [] return list(auth.users.all().values('id','name','real_name','comments','state','staff_member','is_admin','last_access','parent'))
for u in auth.users.all():
res.append(self.user_as_dict(u))
return res
else: else:
return self.user_as_dict(auth.get(pk=self._args[0])) return auth.get(pk=self._args[0]).values('id','name','real_name','comments','state','staff_member','is_admin','last_access','parent')
except: except:
logger.exception('En users') logger.exception('En users')
return { 'error': 'not found' } return { 'error': 'not found' }
@ -87,12 +73,11 @@ class Users(DetailHandler):
def getFields(self): def getFields(self):
return [ return [
{ 'name': {'title': _('User Id'), 'visible': True } }, { 'name': {'title': _('User Id'), 'visible': True, 'type': 'icon', 'icon': 'fa fa-user text-success' } },
{ 'real_name': { 'title': _('Name') } }, { 'real_name': { 'title': _('Name') } },
{ 'comments': { 'title': _('Comments') } }, { 'comments': { 'title': _('Comments') } },
{ 'state': { 'title': _('state') } }, { 'state': { 'title': _('state'), 'type': 'dict', 'dict': State.dictionary() } },
{ 'last_access': { 'title': _('Last access') } }, { 'last_access': { 'title': _('Last access'), 'type': 'datetime' } },
] ]

View File

@ -173,7 +173,7 @@ class ModelTableHandlerMixin(object):
for k1, v1 in f.iteritems(): for k1, v1 in f.iteritems():
dct = {} dct = {}
for k2, v2 in v1.iteritems(): for k2, v2 in v1.iteritems():
if type(v2) in (bool, int, long, float, unicode): if type(v2) in (bool, int, long, float, unicode, list, tuple, dict):
dct[k2] = v2 dct[k2] = v2
else: else:
dct[k2] = unicode(v2) dct[k2] = unicode(v2)

View File

@ -32,13 +32,15 @@
''' '''
from __future__ import unicode_literals from __future__ import unicode_literals
from django.utils import simplejson #from django.utils import simplejson
import ujson as json
from django import http from django import http
import logging import logging
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
class ParametersException(Exception): class ParametersException(Exception):
pass pass
@ -69,7 +71,7 @@ class JsonProcessor(ContentProcessor):
try: try:
if len(self._request.body) == 0: if len(self._request.body) == 0:
return {} return {}
res = simplejson.loads(self._request.body) res = json.loads(self._request.body)
logger.debug(res) logger.debug(res)
return res return res
except Exception as e: except Exception as e:
@ -77,7 +79,7 @@ class JsonProcessor(ContentProcessor):
raise ParametersException(unicode(e)) raise ParametersException(unicode(e))
def render(self, obj): def render(self, obj):
return simplejson.dumps(obj) return json.dumps(obj)
# --------------- # ---------------
# Json Processor # Json Processor

View File

@ -32,7 +32,7 @@
''' '''
from django.utils.translation import ugettext_noop as _ from django.utils.translation import ugettext_noop as _, ugettext
# States for different objects. Not all objects supports all States # States for different objects. Not all objects supports all States
class State(object): class State(object):
@ -134,4 +134,14 @@ class State(object):
return State.string[state] return State.string[state]
except Exception: except Exception:
return '' return ''
@staticmethod
def dictionary():
'''
Returns a dictionary with current active locale translation of States to States String
'''
res = {}
for k, v in State.string.iteritems():
res[k] = ugettext(v)
return res

View File

@ -32,7 +32,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-11-14 11:59+0100\n" "POT-Creation-Date: 2013-11-17 04:20+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -42,35 +42,86 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n"
#: REST/methods/authenticators.py:72 #: REST/methods/authenticators.py:73
msgid "Current authenticators" msgid "Current authenticators"
msgstr "Aktuelle Authentifikatoren" msgstr "Aktuelle Authentifikatoren"
#: REST/methods/authenticators.py:74 REST/methods/providers.py:71 #: REST/methods/authenticators.py:75 REST/methods/networks.py:68
#: REST/methods/osmanagers.py:71 REST/methods/providers.py:69
#: REST/methods/transports.py:71 REST/methods/users.py:77
msgid "Name" msgid "Name"
msgstr "Name" msgstr "Name"
#: REST/methods/authenticators.py:75 REST/methods/providers.py:72 #: REST/methods/authenticators.py:76 REST/methods/osmanagers.py:72
#: REST/methods/providers.py:70 REST/methods/transports.py:72
#: REST/methods/users.py:78
msgid "Comments" msgid "Comments"
msgstr "Kommentare" msgstr "Kommentare"
#: REST/methods/authenticators.py:76 #: REST/methods/authenticators.py:77
msgid "Users" msgid "Users"
msgstr "Benutzer" msgstr "Benutzer"
#: REST/methods/providers.py:69 #: REST/methods/networks.py:66
msgid "Current Networks"
msgstr "Aktuellen Netze"
#: REST/methods/networks.py:69 templates/uds/index.html:79
#: templates/uds/html5/index.html:127
msgid "Networks"
msgstr "Netzwerke"
#: REST/methods/networks.py:70 REST/methods/osmanagers.py:73
#: REST/methods/transports.py:73
msgid "Used by"
msgstr "Von verwendet"
#: REST/methods/osmanagers.py:69
msgid "Current OS Managers"
msgstr "Aktuelle OS-Manager"
#: REST/methods/providers.py:67
msgid "Current service providers" msgid "Current service providers"
msgstr "Aktuelle Service-Provider" msgstr "Aktuelle Service-Provider"
#: REST/methods/providers.py:73 templates/uds/index.html:51 #: REST/methods/providers.py:71 templates/uds/index.html:51
#: templates/uds/html5/index.html:68 #: templates/uds/html5/index.html:68
msgid "Services" msgid "Services"
msgstr "Dienstleistungen" msgstr "Dienstleistungen"
#: admin/views.py:53 admin/views.py:61 web/views.py:422 #: REST/methods/transports.py:69
msgid "Current Transports"
msgstr "Aktuelle Transporte"
#: REST/methods/users.py:70
#, python-brace-format
msgid "Users of {0}"
msgstr "Benutzer von {0}"
#: REST/methods/users.py:72
msgid "Current users"
msgstr "Momentane Benutzer"
#: REST/methods/users.py:76
msgid "User Id"
msgstr "Benutzer-Id"
#: REST/methods/users.py:79
msgid "state"
msgstr "Zustand"
#: REST/methods/users.py:80
msgid "Last access"
msgstr "Zuletzt online"
#: admin/views.py:55 admin/views.py:63 admin/views.py:76 web/views.py:422
msgid "Forbidden" msgid "Forbidden"
msgstr "Verboten" msgstr "Verboten"
#: admin/views.py:69
msgid "requested a template that do not exists"
msgstr "gefordert, dass eine Vorlage, die nicht vorhanden ist"
#: auths/IP/Authenticator.py:48 auths/IP/Authenticator.py:50 #: auths/IP/Authenticator.py:48 auths/IP/Authenticator.py:50
msgid "IP Authenticator" msgid "IP Authenticator"
msgstr "IP-Authenticator" msgstr "IP-Authenticator"
@ -162,8 +213,9 @@ msgstr "Benutzernamen mit lesen Berechtigungen auf der Basis ausgewählt"
#: osmanagers/WindowsOsManager/WinRandomPassOsManager.py:30 #: osmanagers/WindowsOsManager/WinRandomPassOsManager.py:30
#: services/OVirt/OVirtProvider.py:94 services/Sample/SampleService.py:131 #: services/OVirt/OVirtProvider.py:94 services/Sample/SampleService.py:131
#: transports/HTML5RDP/HTML5RDP.py:65 transports/NX/NXTransport.py:62 #: transports/HTML5RDP/HTML5RDP.py:65 transports/NX/NXTransport.py:62
#: transports/RDP/RDPTransport.py:60 transports/RDP/TSRDPTransport.py:64 #: transports/NX/TSNXTransport.py:67 transports/RDP/RDPTransport.py:60
#: transports/TSNX/TSNXTransport.py:67 web/forms/LoginForm.py:70 #: transports/RDP/TSRDPTransport.py:64 transports/TSNX/TSNXTransport.py:67
#: web/forms/LoginForm.py:70
msgid "Password" msgid "Password"
msgstr "Passwort" msgstr "Passwort"
@ -231,9 +283,9 @@ msgstr "Reguläre Ausdrücke LDAP-Authentifizierungsserver"
#: auths/RegexLdap/Authenticator.py:72 auths/SimpleLDAP/Authenticator.py:73 #: auths/RegexLdap/Authenticator.py:72 auths/SimpleLDAP/Authenticator.py:73
#: services/OVirt/OVirtProvider.py:93 transports/HTML5RDP/HTML5RDP.py:64 #: services/OVirt/OVirtProvider.py:93 transports/HTML5RDP/HTML5RDP.py:64
#: transports/NX/NXTransport.py:61 transports/RDP/RDPTransport.py:59 #: transports/NX/NXTransport.py:61 transports/NX/TSNXTransport.py:66
#: transports/RDP/TSRDPTransport.py:63 transports/TSNX/TSNXTransport.py:66 #: transports/RDP/RDPTransport.py:59 transports/RDP/TSRDPTransport.py:63
#: web/forms/LoginForm.py:69 #: transports/TSNX/TSNXTransport.py:66 web/forms/LoginForm.py:69
msgid "Username" msgid "Username"
msgstr "Benutzername" msgstr "Benutzername"
@ -1093,10 +1145,6 @@ msgstr "und Browser neu starten"
msgid "Ip" msgid "Ip"
msgstr "IP" msgstr "IP"
#: templates/uds/index.html:79 templates/uds/html5/index.html:127
msgid "Networks"
msgstr "Netzwerke"
#: templates/uds/index.html:80 templates/uds/html5/index.html:128 #: templates/uds/index.html:80 templates/uds/html5/index.html:128
msgid "Transports" msgid "Transports"
msgstr "Transporte" msgstr "Transporte"
@ -1153,35 +1201,44 @@ msgstr ""
msgid "toggle navigation" msgid "toggle navigation"
msgstr "Toggle navigation" msgstr "Toggle navigation"
#: templates/uds/admin/snippets/navbar.html:17 #: templates/uds/admin/snippets/navbar.html:18
msgid "Service providers" msgid "Service providers"
msgstr "Service-Provider" msgstr "Service-Provider"
#: templates/uds/admin/snippets/navbar.html:18 #: templates/uds/admin/snippets/navbar.html:19
#: templates/uds/admin/tmpl/authenticators.html:4
msgid "Authenticators" msgid "Authenticators"
msgstr "Authentifikatoren" msgstr "Authentifikatoren"
#: templates/uds/admin/snippets/navbar.html:20 #: templates/uds/admin/snippets/navbar.html:21
msgid "Connectivity" msgid "Connectivity"
msgstr "Konnektivität" msgstr "Konnektivität"
#: templates/uds/admin/snippets/navbar.html:21 #: templates/uds/admin/snippets/navbar.html:22
msgid "Deployed services" msgid "Deployed services"
msgstr "Bereitgestellten Dienste" msgstr "Bereitgestellten Dienste"
#: templates/uds/admin/snippets/navbar.html:25 #: templates/uds/admin/snippets/navbar.html:26
msgid "Configuration" msgid "Configuration"
msgstr "Konfiguration" msgstr "Konfiguration"
#: templates/uds/admin/snippets/navbar.html:57 #: templates/uds/admin/snippets/navbar.html:56
msgid "Exit dashboard" msgid "Exit dashboard"
msgstr "Ausfahrt dashboard" msgstr "Ausfahrt dashboard"
#: templates/uds/admin/snippets/navbar.html:58 #: templates/uds/admin/snippets/navbar.html:57
#: templates/uds/html5/snippets/navbar.html:47 #: templates/uds/html5/snippets/navbar.html:47
msgid "logout" msgid "logout"
msgstr "Logout" msgstr "Logout"
#: templates/uds/admin/tmpl/authenticators.html:4
msgid "administration of authenticators"
msgstr "Verwaltung von Authentifikatoren"
#: templates/uds/admin/tmpl/dashboard.html:4
msgid "overview"
msgstr "Übersicht"
#: templates/uds/html5/detectJava.html:4 #: templates/uds/html5/detectJava.html:4
msgid "Login redirection to UDS" msgid "Login redirection to UDS"
msgstr "Login-Umleitung zu UDS" msgstr "Login-Umleitung zu UDS"
@ -1273,7 +1330,7 @@ msgstr "Über"
msgid "Dashboard" msgid "Dashboard"
msgstr "Dashboard" msgstr "Dashboard"
#: templates/uds/html5/templates/base.html:51 #: templates/uds/html5/templates/base.html:52
msgid "" msgid ""
"Your browser is supported only partially. Please, upgrade it to a modern " "Your browser is supported only partially. Please, upgrade it to a modern "
"html5 browser like Firefox, Chrome, Opera, ... (IE must be 10 or better)" "html5 browser like Firefox, Chrome, Opera, ... (IE must be 10 or better)"
@ -1311,30 +1368,30 @@ msgstr ""
"zugänglich von Benutzern" "zugänglich von Benutzern"
#: transports/HTML5RDP/HTML5RDP.py:63 transports/NX/NXTransport.py:60 #: transports/HTML5RDP/HTML5RDP.py:63 transports/NX/NXTransport.py:60
#: transports/RDP/RDPTransport.py:58 transports/RDP/TSRDPTransport.py:62 #: transports/NX/TSNXTransport.py:65 transports/RDP/RDPTransport.py:58
#: transports/TSNX/TSNXTransport.py:65 #: transports/RDP/TSRDPTransport.py:62 transports/TSNX/TSNXTransport.py:65
msgid "Empty creds" msgid "Empty creds"
msgstr "Leere creds" msgstr "Leere creds"
#: transports/HTML5RDP/HTML5RDP.py:63 transports/NX/NXTransport.py:60 #: transports/HTML5RDP/HTML5RDP.py:63 transports/NX/NXTransport.py:60
#: transports/RDP/RDPTransport.py:58 transports/RDP/TSRDPTransport.py:62 #: transports/NX/TSNXTransport.py:65 transports/RDP/RDPTransport.py:58
#: transports/TSNX/TSNXTransport.py:65 #: transports/RDP/TSRDPTransport.py:62 transports/TSNX/TSNXTransport.py:65
msgid "If checked, the credentials used to connect will be emtpy" msgid "If checked, the credentials used to connect will be emtpy"
msgstr "" msgstr ""
"Wenn diese Option aktiviert, werden die Anmeldeinformationen zum Herstellen " "Wenn diese Option aktiviert, werden die Anmeldeinformationen zum Herstellen "
"einer leer sein." "einer leer sein."
#: transports/HTML5RDP/HTML5RDP.py:64 transports/NX/NXTransport.py:61 #: transports/HTML5RDP/HTML5RDP.py:64 transports/NX/NXTransport.py:61
#: transports/RDP/RDPTransport.py:59 transports/RDP/TSRDPTransport.py:63 #: transports/NX/TSNXTransport.py:66 transports/RDP/RDPTransport.py:59
#: transports/TSNX/TSNXTransport.py:66 #: transports/RDP/TSRDPTransport.py:63 transports/TSNX/TSNXTransport.py:66
msgid "If not empty, this username will be always used as credential" msgid "If not empty, this username will be always used as credential"
msgstr "" msgstr ""
"Wenn nicht leer ist, dieser Benutzername wird immer als verwendet " "Wenn nicht leer ist, dieser Benutzername wird immer als verwendet "
"Anmeldeinformationen" "Anmeldeinformationen"
#: transports/HTML5RDP/HTML5RDP.py:65 transports/NX/NXTransport.py:62 #: transports/HTML5RDP/HTML5RDP.py:65 transports/NX/NXTransport.py:62
#: transports/RDP/RDPTransport.py:60 transports/RDP/TSRDPTransport.py:64 #: transports/NX/TSNXTransport.py:67 transports/RDP/RDPTransport.py:60
#: transports/TSNX/TSNXTransport.py:67 #: transports/RDP/TSRDPTransport.py:64 transports/TSNX/TSNXTransport.py:67
msgid "If not empty, this password will be always used as credential" msgid "If not empty, this password will be always used as credential"
msgstr "" msgstr ""
"Wenn nicht leer ist, dieses Kennwort immer verwendet werden als " "Wenn nicht leer ist, dieses Kennwort immer verwendet werden als "
@ -1389,46 +1446,98 @@ msgstr "NX Transport (direkt)"
msgid "NX Transport for direct connection" msgid "NX Transport for direct connection"
msgstr "NX-Transport für den direkten Anschluss" msgstr "NX-Transport für den direkten Anschluss"
#: transports/NX/NXTransport.py:63 transports/TSNX/TSNXTransport.py:68 #: transports/NX/NXTransport.py:63 transports/NX/TSNXTransport.py:68
#: transports/TSNX/TSNXTransport.py:68
msgid "Listen port" msgid "Listen port"
msgstr "-Listenanschluss" msgstr "-Listenanschluss"
#: transports/NX/NXTransport.py:63 transports/TSNX/TSNXTransport.py:68 #: transports/NX/NXTransport.py:63 transports/NX/TSNXTransport.py:68
#: transports/TSNX/TSNXTransport.py:68
msgid "Listening port of NX (ssh) at client machine" msgid "Listening port of NX (ssh) at client machine"
msgstr "Hören Port des NX (ssh) bei Client-Rechner" msgstr "Hören Port des NX (ssh) bei Client-Rechner"
#: transports/NX/NXTransport.py:64 transports/TSNX/TSNXTransport.py:69 #: transports/NX/NXTransport.py:64 transports/NX/TSNXTransport.py:69
#: transports/TSNX/TSNXTransport.py:69
msgid "Connection" msgid "Connection"
msgstr "Verbindung" msgstr "Verbindung"
#: transports/NX/NXTransport.py:64 transports/TSNX/TSNXTransport.py:69 #: transports/NX/NXTransport.py:64 transports/NX/TSNXTransport.py:69
#: transports/TSNX/TSNXTransport.py:69
msgid "Connection speed for this transport (quality)" msgid "Connection speed for this transport (quality)"
msgstr "Verbindungsgeschwindigkeit für diesen Transport (Qualität)" msgstr "Verbindungsgeschwindigkeit für diesen Transport (Qualität)"
#: transports/NX/NXTransport.py:71 transports/TSNX/TSNXTransport.py:76 #: transports/NX/NXTransport.py:71 transports/NX/TSNXTransport.py:76
#: transports/TSNX/TSNXTransport.py:76
msgid "Session" msgid "Session"
msgstr "Sitzung" msgstr "Sitzung"
#: transports/NX/NXTransport.py:71 transports/TSNX/TSNXTransport.py:76 #: transports/NX/NXTransport.py:71 transports/NX/TSNXTransport.py:76
#: transports/TSNX/TSNXTransport.py:76
msgid "Desktop session" msgid "Desktop session"
msgstr "Desktop-Sitzung" msgstr "Desktop-Sitzung"
#: transports/NX/NXTransport.py:76 transports/TSNX/TSNXTransport.py:81 #: transports/NX/NXTransport.py:76 transports/NX/TSNXTransport.py:81
#: transports/TSNX/TSNXTransport.py:81
msgid "Disk Cache" msgid "Disk Cache"
msgstr "Festplatten-Cache" msgstr "Festplatten-Cache"
#: transports/NX/NXTransport.py:76 transports/TSNX/TSNXTransport.py:81 #: transports/NX/NXTransport.py:76 transports/NX/TSNXTransport.py:81
#: transports/TSNX/TSNXTransport.py:81
msgid "Cache size en Mb stored at disk" msgid "Cache size en Mb stored at disk"
msgstr "Cache-Größe de Mb auf der Festplatte gespeichert" msgstr "Cache-Größe de Mb auf der Festplatte gespeichert"
#: transports/NX/NXTransport.py:84 transports/TSNX/TSNXTransport.py:89 #: transports/NX/NXTransport.py:84 transports/NX/TSNXTransport.py:89
#: transports/TSNX/TSNXTransport.py:89
msgid "Memory Cache" msgid "Memory Cache"
msgstr "Memory-Caches" msgstr "Memory-Caches"
#: transports/NX/NXTransport.py:84 transports/TSNX/TSNXTransport.py:89 #: transports/NX/NXTransport.py:84 transports/NX/TSNXTransport.py:89
#: transports/TSNX/TSNXTransport.py:89
msgid "Cache size en Mb keept at memory" msgid "Cache size en Mb keept at memory"
msgstr "Cache Größe de Mb Keept auf Speicher" msgstr "Cache Größe de Mb Keept auf Speicher"
#: transports/NX/TSNXTransport.py:55 transports/TSNX/TSNXTransport.py:55
msgid "NX Transport (tunneled)"
msgstr "NX-Transport (Tunneling)"
#: transports/NX/TSNXTransport.py:57 transports/TSNX/TSNXTransport.py:57
msgid "NX Transport for tunneled connection"
msgstr "NX-Transport für getunnelte Verbindung"
#: transports/NX/TSNXTransport.py:62 transports/RDP/TSRDPTransport.py:59
#: transports/TSNX/TSNXTransport.py:62
msgid "Tunnel server"
msgstr "Tunnel-server"
#: transports/NX/TSNXTransport.py:62 transports/RDP/TSRDPTransport.py:59
#: transports/TSNX/TSNXTransport.py:62
msgid ""
"IP or Hostname of tunnel server send to client device (\"public\" ip) and "
"port. (use HOST:PORT format)"
msgstr ""
"IP-Adresse oder Hostname des Tunnel-Server senden an Client-Gerät "
"(\"öffentliche\" IP-Adresse) und Port. (verwenden Sie HOST: PORT-Format)"
#: transports/NX/TSNXTransport.py:63 transports/RDP/TSRDPTransport.py:60
#: transports/TSNX/TSNXTransport.py:63
msgid "Tunnel host check"
msgstr "Tunnel Host-Prüfung"
#: transports/NX/TSNXTransport.py:63 transports/RDP/TSRDPTransport.py:60
#: transports/TSNX/TSNXTransport.py:63
msgid ""
"If not empty, this server will be used to check if service is running before "
"assigning it to user. (use HOST:PORT format)"
msgstr ""
"Wenn nicht leer ist, wird dieser Server zu überprüfen, ob der Dienst "
"ausgeführt wird, bevor Sie verwendet werden Benutzer zuweisen. (verwenden "
"Sie HOST: PORT-Format)"
#: transports/NX/TSNXTransport.py:103 transports/RDP/TSRDPTransport.py:75
#: transports/TSNX/TSNXTransport.py:103
msgid "Must use HOST:PORT in Tunnel Server Field"
msgstr "HOST: PORT muss in Feld der Tunnel-Server verwendet werden."
#: transports/NX/__init__.py:45 transports/TSNX/__init__.py:44 #: transports/NX/__init__.py:45 transports/TSNX/__init__.py:44
msgid "NX Protocol" msgid "NX Protocol"
msgstr "NX-Protokoll" msgstr "NX-Protokoll"
@ -1525,35 +1634,6 @@ msgstr "RDP-Verkehr (Tunneling)"
msgid "RDP Transport for tunneled connection" msgid "RDP Transport for tunneled connection"
msgstr "RDP-Verkehr für getunnelte Verbindung" msgstr "RDP-Verkehr für getunnelte Verbindung"
#: transports/RDP/TSRDPTransport.py:59 transports/TSNX/TSNXTransport.py:62
msgid "Tunnel server"
msgstr "Tunnel-server"
#: transports/RDP/TSRDPTransport.py:59 transports/TSNX/TSNXTransport.py:62
msgid ""
"IP or Hostname of tunnel server send to client device (\"public\" ip) and "
"port. (use HOST:PORT format)"
msgstr ""
"IP-Adresse oder Hostname des Tunnel-Server senden an Client-Gerät "
"(\"öffentliche\" IP-Adresse) und Port. (verwenden Sie HOST: PORT-Format)"
#: transports/RDP/TSRDPTransport.py:60 transports/TSNX/TSNXTransport.py:63
msgid "Tunnel host check"
msgstr "Tunnel Host-Prüfung"
#: transports/RDP/TSRDPTransport.py:60 transports/TSNX/TSNXTransport.py:63
msgid ""
"If not empty, this server will be used to check if service is running before "
"assigning it to user. (use HOST:PORT format)"
msgstr ""
"Wenn nicht leer ist, wird dieser Server zu überprüfen, ob der Dienst "
"ausgeführt wird, bevor Sie verwendet werden Benutzer zuweisen. (verwenden "
"Sie HOST: PORT-Format)"
#: transports/RDP/TSRDPTransport.py:75 transports/TSNX/TSNXTransport.py:103
msgid "Must use HOST:PORT in Tunnel Server Field"
msgstr "HOST: PORT muss in Feld der Tunnel-Server verwendet werden."
#: transports/RDP/__init__.py:39 #: transports/RDP/__init__.py:39
msgid "Remote Desktop Protocol" msgid "Remote Desktop Protocol"
msgstr "Remote Desktop-Protokoll" msgstr "Remote Desktop-Protokoll"
@ -1570,14 +1650,6 @@ msgstr "Erhalten Sie es aus"
msgid "CoRD Website" msgid "CoRD Website"
msgstr "CoRD-Website" msgstr "CoRD-Website"
#: transports/TSNX/TSNXTransport.py:55
msgid "NX Transport (tunneled)"
msgstr "NX-Transport (Tunneling)"
#: transports/TSNX/TSNXTransport.py:57
msgid "NX Transport for tunneled connection"
msgstr "NX-Transport für getunnelte Verbindung"
#: web/errors.py:60 #: web/errors.py:60
msgid "Unknown error" msgid "Unknown error"
msgstr "Unbekannter Fehler" msgstr "Unbekannter Fehler"
@ -1639,6 +1711,10 @@ msgstr ""
msgid "Authenticator do not provides information" msgid "Authenticator do not provides information"
msgstr "Authentifikator informiert nicht" msgstr "Authentifikator informiert nicht"
#: web/forms/LoginForm.py:50
msgid "Select authenticator"
msgstr "Wählen Sie Authentifikator"
#: web/forms/LoginForm.py:54 #: web/forms/LoginForm.py:54
msgid "authenticator" msgid "authenticator"
msgstr "Authentifikator" msgstr "Authentifikator"

View File

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-11-14 11:59+0100\n" "POT-Creation-Date: 2013-11-17 04:21+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -18,70 +18,146 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: static/adm/js/api.js:23 #: static/adm/js/gui-elements.js:7
msgid "Success on \""
msgstr "Erfolg auf\""
#: static/adm/js/api.js:24
msgid "Received "
msgstr "Empfangen "
#: static/adm/js/gui.js:17
msgid "Display _MENU_ records per page"
msgstr "_MENU_-Einträge pro Seite anzeigen"
#: static/adm/js/gui.js:18
msgid "Nothing found - sorry"
msgstr "Nichts gefunden - sorry"
#: static/adm/js/gui.js:19
msgid "Showing record _START_ to _END_ of _TOTAL_"
msgstr "Ergebnis Rekord _START_ zu _END_ von _TOTAL_"
#: static/adm/js/gui.js:20
msgid "Showing 0 to 0 of 0 records"
msgstr "Anzeigen 0 bis 0 von 0 Einträge"
#: static/adm/js/gui.js:21
msgid "(filtered from _MAX_ total records)"
msgstr "(von _MAX_ Datensätze gefiltert)"
#: static/adm/js/gui.js:22
msgid "Please wait, processing"
msgstr "Bitte warten, Verarbeitung"
#: static/adm/js/gui.js:23
msgid "Search"
msgstr "Suche"
#: static/adm/js/gui.js:26
msgid "First"
msgstr "Erste"
#: static/adm/js/gui.js:27
msgid "Last"
msgstr "Letzter"
#: static/adm/js/gui.js:28
msgid "Next"
msgstr "Nächste"
#: static/adm/js/gui.js:29
msgid "Previous"
msgstr "Vorherige"
#: static/adm/js/gui.js:83
msgid "Connectivity"
msgstr "Konnektivität"
#: static/adm/js/gui.js:88
msgid "Deployed services"
msgstr "Bereitgestellten Dienste"
#: static/adm/js/gui.js:181
msgid "Service Providers" msgid "Service Providers"
msgstr "Service-Provider" msgstr "Service-Provider"
#: static/adm/js/gui.js:191 #: static/adm/js/gui-elements.js:81
msgid "Authenticators" msgid "Connectivity"
msgstr "Authentifikatoren" msgstr "Konnektivität"
#: static/adm/js/gui.js:18
msgid "_MENU_ records per page"
msgstr "_MENU_ Datensätze pro Seite"
#: static/adm/js/gui.js:19
msgid "Empty"
msgstr "Leer"
#: static/adm/js/gui.js:20
msgid "Records _START_ to _END_ of _TOTAL_"
msgstr "Zeichnet _START_, _END_ von _TOTAL_"
#: static/adm/js/gui.js:21
msgid "No records"
msgstr "Keine Datensätze"
#: static/adm/js/gui.js:22
msgid "(filtered from _MAX_ total records)"
msgstr "(von _MAX_ Datensätze gefiltert)"
#: static/adm/js/gui.js:23
msgid "Please wait, processing"
msgstr "Bitte warten, Verarbeitung"
#: static/adm/js/gui.js:24
msgid "Filter"
msgstr "Filter"
#: static/adm/js/gui.js:27
msgid "First"
msgstr "Erste"
#: static/adm/js/gui.js:28
msgid "Last"
msgstr "Letzter"
#: static/adm/js/gui.js:29
msgid "Next"
msgstr "Nächste"
#: static/adm/js/gui.js:30
msgid "Previous"
msgstr "Vorherige"
#: static/adm/js/gui.js:80
msgid "Deployed services"
msgstr "Bereitgestellten Dienste"
#: static/adm/js/gui.js:349
msgid "Edit"
msgstr "Bearbeiten"
#: static/adm/js/gui.js:358
msgid "Delete"
msgstr "Löschen"
#: static/adm/js/gui.js:367
msgid "Refresh"
msgstr "Aktualisieren"
#: static/adm/js/strftime.js:30
msgid "Sunday"
msgstr "Sonntag"
#: static/adm/js/strftime.js:30
msgid "Monday"
msgstr "Montag"
#: static/adm/js/strftime.js:30
msgid "Tuesday"
msgstr "Dienstag"
#: static/adm/js/strftime.js:31
msgid "Wednesday"
msgstr "Mittwoch"
#: static/adm/js/strftime.js:31
msgid "Thursday"
msgstr "Donnerstag"
#: static/adm/js/strftime.js:31
msgid "Friday"
msgstr "Freitag"
#: static/adm/js/strftime.js:31
msgid "Saturday"
msgstr "Samstag"
#: static/adm/js/strftime.js:32
msgid "January"
msgstr "Januar"
#: static/adm/js/strftime.js:32
msgid "February"
msgstr "Februar"
#: static/adm/js/strftime.js:32
msgid "March"
msgstr "März"
#: static/adm/js/strftime.js:33
msgid "April"
msgstr "April"
#: static/adm/js/strftime.js:33
msgid "May"
msgstr "Mai"
#: static/adm/js/strftime.js:33
msgid "June"
msgstr "Juni"
#: static/adm/js/strftime.js:33
msgid "July"
msgstr "Juli"
#: static/adm/js/strftime.js:34
msgid "August"
msgstr "August"
#: static/adm/js/strftime.js:34
msgid "September"
msgstr "September"
#: static/adm/js/strftime.js:34
msgid "October"
msgstr "Oktober"
#: static/adm/js/strftime.js:34
msgid "November"
msgstr "November"
#: static/adm/js/strftime.js:35
msgid "December"
msgstr "Dezember"

View File

@ -31,7 +31,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: \n" "Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-11-14 11:59+0100\n" "POT-Creation-Date: 2013-11-17 04:20+0100\n"
"PO-Revision-Date: 2013-04-22 06:24+0200\n" "PO-Revision-Date: 2013-04-22 06:24+0200\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: Spanish <kde-i18n-doc@kde.org>\n" "Language-Team: Spanish <kde-i18n-doc@kde.org>\n"
@ -42,35 +42,86 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1)\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n"
"X-Generator: Lokalize 1.4\n" "X-Generator: Lokalize 1.4\n"
#: REST/methods/authenticators.py:72 #: REST/methods/authenticators.py:73
msgid "Current authenticators" msgid "Current authenticators"
msgstr "Autenticadores actuales" msgstr "Autenticadores actuales"
#: REST/methods/authenticators.py:74 REST/methods/providers.py:71 #: REST/methods/authenticators.py:75 REST/methods/networks.py:68
#: REST/methods/osmanagers.py:71 REST/methods/providers.py:69
#: REST/methods/transports.py:71 REST/methods/users.py:77
msgid "Name" msgid "Name"
msgstr "Nombre" msgstr "Nombre"
#: REST/methods/authenticators.py:75 REST/methods/providers.py:72 #: REST/methods/authenticators.py:76 REST/methods/osmanagers.py:72
#: REST/methods/providers.py:70 REST/methods/transports.py:72
#: REST/methods/users.py:78
msgid "Comments" msgid "Comments"
msgstr "Comentarios" msgstr "Comentarios"
#: REST/methods/authenticators.py:76 #: REST/methods/authenticators.py:77
msgid "Users" msgid "Users"
msgstr "Usuarios" msgstr "Usuarios"
#: REST/methods/providers.py:69 #: REST/methods/networks.py:66
msgid "Current Networks"
msgstr "Redes actuales"
#: REST/methods/networks.py:69 templates/uds/index.html:79
#: templates/uds/html5/index.html:127
msgid "Networks"
msgstr "Redes"
#: REST/methods/networks.py:70 REST/methods/osmanagers.py:73
#: REST/methods/transports.py:73
msgid "Used by"
msgstr "Utilizado por"
#: REST/methods/osmanagers.py:69
msgid "Current OS Managers"
msgstr "Actual OS administradores"
#: REST/methods/providers.py:67
msgid "Current service providers" msgid "Current service providers"
msgstr "Proveedores de servicio actuales" msgstr "Proveedores de servicio actuales"
#: REST/methods/providers.py:73 templates/uds/index.html:51 #: REST/methods/providers.py:71 templates/uds/index.html:51
#: templates/uds/html5/index.html:68 #: templates/uds/html5/index.html:68
msgid "Services" msgid "Services"
msgstr "Servicios" msgstr "Servicios"
#: admin/views.py:53 admin/views.py:61 web/views.py:422 #: REST/methods/transports.py:69
msgid "Current Transports"
msgstr "Transportes actuales"
#: REST/methods/users.py:70
#, python-brace-format
msgid "Users of {0}"
msgstr "Usuarios de {0}"
#: REST/methods/users.py:72
msgid "Current users"
msgstr "Usuarios actuales"
#: REST/methods/users.py:76
msgid "User Id"
msgstr "Id de usuario"
#: REST/methods/users.py:79
msgid "state"
msgstr "estado"
#: REST/methods/users.py:80
msgid "Last access"
msgstr "Último acceso"
#: admin/views.py:55 admin/views.py:63 admin/views.py:76 web/views.py:422
msgid "Forbidden" msgid "Forbidden"
msgstr "Prohibido" msgstr "Prohibido"
#: admin/views.py:69
msgid "requested a template that do not exists"
msgstr "solicitó una plantilla que no existe"
#: auths/IP/Authenticator.py:48 auths/IP/Authenticator.py:50 #: auths/IP/Authenticator.py:48 auths/IP/Authenticator.py:50
msgid "IP Authenticator" msgid "IP Authenticator"
msgstr "Autenticador por IP" msgstr "Autenticador por IP"
@ -160,8 +211,9 @@ msgstr "Usuario con privilegios de lectura en la base elegida"
#: osmanagers/WindowsOsManager/WinRandomPassOsManager.py:30 #: osmanagers/WindowsOsManager/WinRandomPassOsManager.py:30
#: services/OVirt/OVirtProvider.py:94 services/Sample/SampleService.py:131 #: services/OVirt/OVirtProvider.py:94 services/Sample/SampleService.py:131
#: transports/HTML5RDP/HTML5RDP.py:65 transports/NX/NXTransport.py:62 #: transports/HTML5RDP/HTML5RDP.py:65 transports/NX/NXTransport.py:62
#: transports/RDP/RDPTransport.py:60 transports/RDP/TSRDPTransport.py:64 #: transports/NX/TSNXTransport.py:67 transports/RDP/RDPTransport.py:60
#: transports/TSNX/TSNXTransport.py:67 web/forms/LoginForm.py:70 #: transports/RDP/TSRDPTransport.py:64 transports/TSNX/TSNXTransport.py:67
#: web/forms/LoginForm.py:70
msgid "Password" msgid "Password"
msgstr "Contraseña" msgstr "Contraseña"
@ -230,9 +282,9 @@ msgstr "Autenticador LDAP de expresiones regulares"
#: auths/RegexLdap/Authenticator.py:72 auths/SimpleLDAP/Authenticator.py:73 #: auths/RegexLdap/Authenticator.py:72 auths/SimpleLDAP/Authenticator.py:73
#: services/OVirt/OVirtProvider.py:93 transports/HTML5RDP/HTML5RDP.py:64 #: services/OVirt/OVirtProvider.py:93 transports/HTML5RDP/HTML5RDP.py:64
#: transports/NX/NXTransport.py:61 transports/RDP/RDPTransport.py:59 #: transports/NX/NXTransport.py:61 transports/NX/TSNXTransport.py:66
#: transports/RDP/TSRDPTransport.py:63 transports/TSNX/TSNXTransport.py:66 #: transports/RDP/RDPTransport.py:59 transports/RDP/TSRDPTransport.py:63
#: web/forms/LoginForm.py:69 #: transports/TSNX/TSNXTransport.py:66 web/forms/LoginForm.py:69
msgid "Username" msgid "Username"
msgstr "Usuario" msgstr "Usuario"
@ -1079,10 +1131,6 @@ msgstr "y reinicie el navegador"
msgid "Ip" msgid "Ip"
msgstr "IP" msgstr "IP"
#: templates/uds/index.html:79 templates/uds/html5/index.html:127
msgid "Networks"
msgstr "Redes"
#: templates/uds/index.html:80 templates/uds/html5/index.html:128 #: templates/uds/index.html:80 templates/uds/html5/index.html:128
msgid "Transports" msgid "Transports"
msgstr "Transportes" msgstr "Transportes"
@ -1139,35 +1187,44 @@ msgstr ""
msgid "toggle navigation" msgid "toggle navigation"
msgstr "Toggle navegación" msgstr "Toggle navegación"
#: templates/uds/admin/snippets/navbar.html:17 #: templates/uds/admin/snippets/navbar.html:18
msgid "Service providers" msgid "Service providers"
msgstr "Proveedores de servicios" msgstr "Proveedores de servicios"
#: templates/uds/admin/snippets/navbar.html:18 #: templates/uds/admin/snippets/navbar.html:19
#: templates/uds/admin/tmpl/authenticators.html:4
msgid "Authenticators" msgid "Authenticators"
msgstr "Autenticadores" msgstr "Autenticadores"
#: templates/uds/admin/snippets/navbar.html:20 #: templates/uds/admin/snippets/navbar.html:21
msgid "Connectivity" msgid "Connectivity"
msgstr "Conectividad" msgstr "Conectividad"
#: templates/uds/admin/snippets/navbar.html:21 #: templates/uds/admin/snippets/navbar.html:22
msgid "Deployed services" msgid "Deployed services"
msgstr "Servicios desplegados" msgstr "Servicios desplegados"
#: templates/uds/admin/snippets/navbar.html:25 #: templates/uds/admin/snippets/navbar.html:26
msgid "Configuration" msgid "Configuration"
msgstr "Configuración" msgstr "Configuración"
#: templates/uds/admin/snippets/navbar.html:57 #: templates/uds/admin/snippets/navbar.html:56
msgid "Exit dashboard" msgid "Exit dashboard"
msgstr "Tablero de salida" msgstr "Tablero de salida"
#: templates/uds/admin/snippets/navbar.html:58 #: templates/uds/admin/snippets/navbar.html:57
#: templates/uds/html5/snippets/navbar.html:47 #: templates/uds/html5/snippets/navbar.html:47
msgid "logout" msgid "logout"
msgstr "logout" msgstr "logout"
#: templates/uds/admin/tmpl/authenticators.html:4
msgid "administration of authenticators"
msgstr "Administración de autenticadores"
#: templates/uds/admin/tmpl/dashboard.html:4
msgid "overview"
msgstr "Resumen"
#: templates/uds/html5/detectJava.html:4 #: templates/uds/html5/detectJava.html:4
msgid "Login redirection to UDS" msgid "Login redirection to UDS"
msgstr "Redirección de inicio de sesión para UDS" msgstr "Redirección de inicio de sesión para UDS"
@ -1259,7 +1316,7 @@ msgstr "Acerca de"
msgid "Dashboard" msgid "Dashboard"
msgstr "Tablero de instrumentos" msgstr "Tablero de instrumentos"
#: templates/uds/html5/templates/base.html:51 #: templates/uds/html5/templates/base.html:52
msgid "" msgid ""
"Your browser is supported only partially. Please, upgrade it to a modern " "Your browser is supported only partially. Please, upgrade it to a modern "
"html5 browser like Firefox, Chrome, Opera, ... (IE must be 10 or better)" "html5 browser like Firefox, Chrome, Opera, ... (IE must be 10 or better)"
@ -1297,28 +1354,28 @@ msgstr ""
"accesible de los usuarios" "accesible de los usuarios"
#: transports/HTML5RDP/HTML5RDP.py:63 transports/NX/NXTransport.py:60 #: transports/HTML5RDP/HTML5RDP.py:63 transports/NX/NXTransport.py:60
#: transports/RDP/RDPTransport.py:58 transports/RDP/TSRDPTransport.py:62 #: transports/NX/TSNXTransport.py:65 transports/RDP/RDPTransport.py:58
#: transports/TSNX/TSNXTransport.py:65 #: transports/RDP/TSRDPTransport.py:62 transports/TSNX/TSNXTransport.py:65
msgid "Empty creds" msgid "Empty creds"
msgstr "Sin credenciales" msgstr "Sin credenciales"
#: transports/HTML5RDP/HTML5RDP.py:63 transports/NX/NXTransport.py:60 #: transports/HTML5RDP/HTML5RDP.py:63 transports/NX/NXTransport.py:60
#: transports/RDP/RDPTransport.py:58 transports/RDP/TSRDPTransport.py:62 #: transports/NX/TSNXTransport.py:65 transports/RDP/RDPTransport.py:58
#: transports/TSNX/TSNXTransport.py:65 #: transports/RDP/TSRDPTransport.py:62 transports/TSNX/TSNXTransport.py:65
msgid "If checked, the credentials used to connect will be emtpy" msgid "If checked, the credentials used to connect will be emtpy"
msgstr "" msgstr ""
"Si está activada, las credenciales utilizadas para conectar estarán vacías" "Si está activada, las credenciales utilizadas para conectar estarán vacías"
#: transports/HTML5RDP/HTML5RDP.py:64 transports/NX/NXTransport.py:61 #: transports/HTML5RDP/HTML5RDP.py:64 transports/NX/NXTransport.py:61
#: transports/RDP/RDPTransport.py:59 transports/RDP/TSRDPTransport.py:63 #: transports/NX/TSNXTransport.py:66 transports/RDP/RDPTransport.py:59
#: transports/TSNX/TSNXTransport.py:66 #: transports/RDP/TSRDPTransport.py:63 transports/TSNX/TSNXTransport.py:66
msgid "If not empty, this username will be always used as credential" msgid "If not empty, this username will be always used as credential"
msgstr "" msgstr ""
"Si no está vacio, este nombre de usuario será utilizado como credencial fija" "Si no está vacio, este nombre de usuario será utilizado como credencial fija"
#: transports/HTML5RDP/HTML5RDP.py:65 transports/NX/NXTransport.py:62 #: transports/HTML5RDP/HTML5RDP.py:65 transports/NX/NXTransport.py:62
#: transports/RDP/RDPTransport.py:60 transports/RDP/TSRDPTransport.py:64 #: transports/NX/TSNXTransport.py:67 transports/RDP/RDPTransport.py:60
#: transports/TSNX/TSNXTransport.py:67 #: transports/RDP/TSRDPTransport.py:64 transports/TSNX/TSNXTransport.py:67
msgid "If not empty, this password will be always used as credential" msgid "If not empty, this password will be always used as credential"
msgstr "Si no está vacio, este password será utiizado como credencial fija" msgstr "Si no está vacio, este password será utiizado como credencial fija"
@ -1371,46 +1428,97 @@ msgstr "Transporte NX (directo)"
msgid "NX Transport for direct connection" msgid "NX Transport for direct connection"
msgstr "Transporte NX para conexión directa" msgstr "Transporte NX para conexión directa"
#: transports/NX/NXTransport.py:63 transports/TSNX/TSNXTransport.py:68 #: transports/NX/NXTransport.py:63 transports/NX/TSNXTransport.py:68
#: transports/TSNX/TSNXTransport.py:68
msgid "Listen port" msgid "Listen port"
msgstr "Puerto de escucha" msgstr "Puerto de escucha"
#: transports/NX/NXTransport.py:63 transports/TSNX/TSNXTransport.py:68 #: transports/NX/NXTransport.py:63 transports/NX/TSNXTransport.py:68
#: transports/TSNX/TSNXTransport.py:68
msgid "Listening port of NX (ssh) at client machine" msgid "Listening port of NX (ssh) at client machine"
msgstr "Puerto de escucha de NX (ssh) en el equipo cliente" msgstr "Puerto de escucha de NX (ssh) en el equipo cliente"
#: transports/NX/NXTransport.py:64 transports/TSNX/TSNXTransport.py:69 #: transports/NX/NXTransport.py:64 transports/NX/TSNXTransport.py:69
#: transports/TSNX/TSNXTransport.py:69
msgid "Connection" msgid "Connection"
msgstr "Conexión" msgstr "Conexión"
#: transports/NX/NXTransport.py:64 transports/TSNX/TSNXTransport.py:69 #: transports/NX/NXTransport.py:64 transports/NX/TSNXTransport.py:69
#: transports/TSNX/TSNXTransport.py:69
msgid "Connection speed for this transport (quality)" msgid "Connection speed for this transport (quality)"
msgstr "Velocidad de conexión de este transporte (calidad)" msgstr "Velocidad de conexión de este transporte (calidad)"
#: transports/NX/NXTransport.py:71 transports/TSNX/TSNXTransport.py:76 #: transports/NX/NXTransport.py:71 transports/NX/TSNXTransport.py:76
#: transports/TSNX/TSNXTransport.py:76
msgid "Session" msgid "Session"
msgstr "Sesiones" msgstr "Sesiones"
#: transports/NX/NXTransport.py:71 transports/TSNX/TSNXTransport.py:76 #: transports/NX/NXTransport.py:71 transports/NX/TSNXTransport.py:76
#: transports/TSNX/TSNXTransport.py:76
msgid "Desktop session" msgid "Desktop session"
msgstr "Sesión de escritorio" msgstr "Sesión de escritorio"
#: transports/NX/NXTransport.py:76 transports/TSNX/TSNXTransport.py:81 #: transports/NX/NXTransport.py:76 transports/NX/TSNXTransport.py:81
#: transports/TSNX/TSNXTransport.py:81
msgid "Disk Cache" msgid "Disk Cache"
msgstr "Caché de disco" msgstr "Caché de disco"
#: transports/NX/NXTransport.py:76 transports/TSNX/TSNXTransport.py:81 #: transports/NX/NXTransport.py:76 transports/NX/TSNXTransport.py:81
#: transports/TSNX/TSNXTransport.py:81
msgid "Cache size en Mb stored at disk" msgid "Cache size en Mb stored at disk"
msgstr "Tamaño de ca Caché en MB almacenada en disco" msgstr "Tamaño de ca Caché en MB almacenada en disco"
#: transports/NX/NXTransport.py:84 transports/TSNX/TSNXTransport.py:89 #: transports/NX/NXTransport.py:84 transports/NX/TSNXTransport.py:89
#: transports/TSNX/TSNXTransport.py:89
msgid "Memory Cache" msgid "Memory Cache"
msgstr "Memoria Caché" msgstr "Memoria Caché"
#: transports/NX/NXTransport.py:84 transports/TSNX/TSNXTransport.py:89 #: transports/NX/NXTransport.py:84 transports/NX/TSNXTransport.py:89
#: transports/TSNX/TSNXTransport.py:89
msgid "Cache size en Mb keept at memory" msgid "Cache size en Mb keept at memory"
msgstr "Tamaño del Caché en Mb a mantener en memoria" msgstr "Tamaño del Caché en Mb a mantener en memoria"
#: transports/NX/TSNXTransport.py:55 transports/TSNX/TSNXTransport.py:55
msgid "NX Transport (tunneled)"
msgstr "Transporte NX (vía túnel)"
#: transports/NX/TSNXTransport.py:57 transports/TSNX/TSNXTransport.py:57
msgid "NX Transport for tunneled connection"
msgstr "Transporte NX para conexión vía túnel"
#: transports/NX/TSNXTransport.py:62 transports/RDP/TSRDPTransport.py:59
#: transports/TSNX/TSNXTransport.py:62
msgid "Tunnel server"
msgstr "Servidor de túnel"
#: transports/NX/TSNXTransport.py:62 transports/RDP/TSRDPTransport.py:59
#: transports/TSNX/TSNXTransport.py:62
msgid ""
"IP or Hostname of tunnel server send to client device (\"public\" ip) and "
"port. (use HOST:PORT format)"
msgstr ""
"IP o nombre de host del servidor de túnel enviar a dispositivo de cliente "
"(ip \"pública\") y puerto. (utilice el formato HOST: puerto)"
#: transports/NX/TSNXTransport.py:63 transports/RDP/TSRDPTransport.py:60
#: transports/TSNX/TSNXTransport.py:63
msgid "Tunnel host check"
msgstr "Verificación de host de túnel"
#: transports/NX/TSNXTransport.py:63 transports/RDP/TSRDPTransport.py:60
#: transports/TSNX/TSNXTransport.py:63
msgid ""
"If not empty, this server will be used to check if service is running before "
"assigning it to user. (use HOST:PORT format)"
msgstr ""
"Si no vacía, este servidor se utilizará para comprobar si el servicio se "
"ejecuta antes de asignarle al usuario. (utilice el formato HOST: puerto)"
#: transports/NX/TSNXTransport.py:103 transports/RDP/TSRDPTransport.py:75
#: transports/TSNX/TSNXTransport.py:103
msgid "Must use HOST:PORT in Tunnel Server Field"
msgstr "Debe utilizar HOST: puerto en el campo servidor de túnel"
#: transports/NX/__init__.py:45 transports/TSNX/__init__.py:44 #: transports/NX/__init__.py:45 transports/TSNX/__init__.py:44
msgid "NX Protocol" msgid "NX Protocol"
msgstr "Protocolo NX" msgstr "Protocolo NX"
@ -1504,34 +1612,6 @@ msgstr "Transporte RDP (vía túnel)"
msgid "RDP Transport for tunneled connection" msgid "RDP Transport for tunneled connection"
msgstr "Transporte RDP para conexión vía túnel" msgstr "Transporte RDP para conexión vía túnel"
#: transports/RDP/TSRDPTransport.py:59 transports/TSNX/TSNXTransport.py:62
msgid "Tunnel server"
msgstr "Servidor de túnel"
#: transports/RDP/TSRDPTransport.py:59 transports/TSNX/TSNXTransport.py:62
msgid ""
"IP or Hostname of tunnel server send to client device (\"public\" ip) and "
"port. (use HOST:PORT format)"
msgstr ""
"IP o nombre de host del servidor de túnel enviar a dispositivo de cliente "
"(ip \"pública\") y puerto. (utilice el formato HOST: puerto)"
#: transports/RDP/TSRDPTransport.py:60 transports/TSNX/TSNXTransport.py:63
msgid "Tunnel host check"
msgstr "Verificación de host de túnel"
#: transports/RDP/TSRDPTransport.py:60 transports/TSNX/TSNXTransport.py:63
msgid ""
"If not empty, this server will be used to check if service is running before "
"assigning it to user. (use HOST:PORT format)"
msgstr ""
"Si no vacía, este servidor se utilizará para comprobar si el servicio se "
"ejecuta antes de asignarle al usuario. (utilice el formato HOST: puerto)"
#: transports/RDP/TSRDPTransport.py:75 transports/TSNX/TSNXTransport.py:103
msgid "Must use HOST:PORT in Tunnel Server Field"
msgstr "Debe utilizar HOST: puerto en el campo servidor de túnel"
#: transports/RDP/__init__.py:39 #: transports/RDP/__init__.py:39
msgid "Remote Desktop Protocol" msgid "Remote Desktop Protocol"
msgstr "Protocolo de Escritorio remoto (RDP)" msgstr "Protocolo de Escritorio remoto (RDP)"
@ -1548,14 +1628,6 @@ msgstr "Puede obtenerlo de"
msgid "CoRD Website" msgid "CoRD Website"
msgstr "Sitio Web de CoRD" msgstr "Sitio Web de CoRD"
#: transports/TSNX/TSNXTransport.py:55
msgid "NX Transport (tunneled)"
msgstr "Transporte NX (vía túnel)"
#: transports/TSNX/TSNXTransport.py:57
msgid "NX Transport for tunneled connection"
msgstr "Transporte NX para conexión vía túnel"
#: web/errors.py:60 #: web/errors.py:60
msgid "Unknown error" msgid "Unknown error"
msgstr "Error desconocido" msgstr "Error desconocido"
@ -1619,6 +1691,10 @@ msgstr ""
msgid "Authenticator do not provides information" msgid "Authenticator do not provides information"
msgstr "El autenticador no proporciona información alguna" msgstr "El autenticador no proporciona información alguna"
#: web/forms/LoginForm.py:50
msgid "Select authenticator"
msgstr "Seleccione autenticador"
#: web/forms/LoginForm.py:54 #: web/forms/LoginForm.py:54
msgid "authenticator" msgid "authenticator"
msgstr "autenticador" msgstr "autenticador"

View File

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-11-14 11:59+0100\n" "POT-Creation-Date: 2013-11-17 04:21+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -18,70 +18,146 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: static/adm/js/api.js:23 #: static/adm/js/gui-elements.js:7
msgid "Success on \""
msgstr "Éxito de\""
#: static/adm/js/api.js:24
msgid "Received "
msgstr "Recibido "
#: static/adm/js/gui.js:17
msgid "Display _MENU_ records per page"
msgstr "Pantalla _MENU_ registros por página"
#: static/adm/js/gui.js:18
msgid "Nothing found - sorry"
msgstr "No encontrado - lo siento"
#: static/adm/js/gui.js:19
msgid "Showing record _START_ to _END_ of _TOTAL_"
msgstr "Mostrando registro _START_ a _END_ de _TOTAL_"
#: static/adm/js/gui.js:20
msgid "Showing 0 to 0 of 0 records"
msgstr "Mostrando 0 a 0 de 0 registros"
#: static/adm/js/gui.js:21
msgid "(filtered from _MAX_ total records)"
msgstr "(filtrado de registros total _MAX_)"
#: static/adm/js/gui.js:22
msgid "Please wait, processing"
msgstr "Por favor espere, procesando"
#: static/adm/js/gui.js:23
msgid "Search"
msgstr "Búsqueda de"
#: static/adm/js/gui.js:26
msgid "First"
msgstr "Primero"
#: static/adm/js/gui.js:27
msgid "Last"
msgstr "Duran"
#: static/adm/js/gui.js:28
msgid "Next"
msgstr "Próxima"
#: static/adm/js/gui.js:29
msgid "Previous"
msgstr "Anterior"
#: static/adm/js/gui.js:83
msgid "Connectivity"
msgstr "Conectividad"
#: static/adm/js/gui.js:88
msgid "Deployed services"
msgstr "Servicios desplegados"
#: static/adm/js/gui.js:181
msgid "Service Providers" msgid "Service Providers"
msgstr "Proveedores de servicios" msgstr "Proveedores de servicios"
#: static/adm/js/gui.js:191 #: static/adm/js/gui-elements.js:81
msgid "Authenticators" msgid "Connectivity"
msgstr "Autenticadores" msgstr "Conectividad"
#: static/adm/js/gui.js:18
msgid "_MENU_ records per page"
msgstr "Registros _MENU_ por página"
#: static/adm/js/gui.js:19
msgid "Empty"
msgstr "Vacío"
#: static/adm/js/gui.js:20
msgid "Records _START_ to _END_ of _TOTAL_"
msgstr "Registros de _START_ a _END_ de _TOTAL_"
#: static/adm/js/gui.js:21
msgid "No records"
msgstr "No hay registros"
#: static/adm/js/gui.js:22
msgid "(filtered from _MAX_ total records)"
msgstr "(filtrado de registros total _MAX_)"
#: static/adm/js/gui.js:23
msgid "Please wait, processing"
msgstr "Por favor espere, procesando"
#: static/adm/js/gui.js:24
msgid "Filter"
msgstr "Filtro"
#: static/adm/js/gui.js:27
msgid "First"
msgstr "Primero"
#: static/adm/js/gui.js:28
msgid "Last"
msgstr "Duran"
#: static/adm/js/gui.js:29
msgid "Next"
msgstr "Próxima"
#: static/adm/js/gui.js:30
msgid "Previous"
msgstr "Anterior"
#: static/adm/js/gui.js:80
msgid "Deployed services"
msgstr "Servicios desplegados"
#: static/adm/js/gui.js:349
msgid "Edit"
msgstr "Editar"
#: static/adm/js/gui.js:358
msgid "Delete"
msgstr "Borrar"
#: static/adm/js/gui.js:367
msgid "Refresh"
msgstr "Actualización"
#: static/adm/js/strftime.js:30
msgid "Sunday"
msgstr "Domingo"
#: static/adm/js/strftime.js:30
msgid "Monday"
msgstr "Lunes"
#: static/adm/js/strftime.js:30
msgid "Tuesday"
msgstr "Martes"
#: static/adm/js/strftime.js:31
msgid "Wednesday"
msgstr "Miércoles"
#: static/adm/js/strftime.js:31
msgid "Thursday"
msgstr "Jueves"
#: static/adm/js/strftime.js:31
msgid "Friday"
msgstr "Viernes"
#: static/adm/js/strftime.js:31
msgid "Saturday"
msgstr "Sábado"
#: static/adm/js/strftime.js:32
msgid "January"
msgstr "Enero"
#: static/adm/js/strftime.js:32
msgid "February"
msgstr "Febrero"
#: static/adm/js/strftime.js:32
msgid "March"
msgstr "Marzo"
#: static/adm/js/strftime.js:33
msgid "April"
msgstr "Abril"
#: static/adm/js/strftime.js:33
msgid "May"
msgstr "Mayo"
#: static/adm/js/strftime.js:33
msgid "June"
msgstr "Junio"
#: static/adm/js/strftime.js:33
msgid "July"
msgstr "Julio"
#: static/adm/js/strftime.js:34
msgid "August"
msgstr "Agosto"
#: static/adm/js/strftime.js:34
msgid "September"
msgstr "Septiembre"
#: static/adm/js/strftime.js:34
msgid "October"
msgstr "Octubre"
#: static/adm/js/strftime.js:34
msgid "November"
msgstr "Noviembre"
#: static/adm/js/strftime.js:35
msgid "December"
msgstr "Diciembre"

View File

@ -32,7 +32,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-11-14 11:59+0100\n" "POT-Creation-Date: 2013-11-17 04:20+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -42,35 +42,86 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1)\n" "Plural-Forms: nplurals=2; plural=(n > 1)\n"
#: REST/methods/authenticators.py:72 #: REST/methods/authenticators.py:73
msgid "Current authenticators" msgid "Current authenticators"
msgstr "Authentificateurs actuels" msgstr "Authentificateurs actuels"
#: REST/methods/authenticators.py:74 REST/methods/providers.py:71 #: REST/methods/authenticators.py:75 REST/methods/networks.py:68
#: REST/methods/osmanagers.py:71 REST/methods/providers.py:69
#: REST/methods/transports.py:71 REST/methods/users.py:77
msgid "Name" msgid "Name"
msgstr "Nom" msgstr "Nom"
#: REST/methods/authenticators.py:75 REST/methods/providers.py:72 #: REST/methods/authenticators.py:76 REST/methods/osmanagers.py:72
#: REST/methods/providers.py:70 REST/methods/transports.py:72
#: REST/methods/users.py:78
msgid "Comments" msgid "Comments"
msgstr "Commentaires" msgstr "Commentaires"
#: REST/methods/authenticators.py:76 #: REST/methods/authenticators.py:77
msgid "Users" msgid "Users"
msgstr "Utilisateurs" msgstr "Utilisateurs"
#: REST/methods/providers.py:69 #: REST/methods/networks.py:66
msgid "Current Networks"
msgstr "Réseaux actuels"
#: REST/methods/networks.py:69 templates/uds/index.html:79
#: templates/uds/html5/index.html:127
msgid "Networks"
msgstr "Réseaux"
#: REST/methods/networks.py:70 REST/methods/osmanagers.py:73
#: REST/methods/transports.py:73
msgid "Used by"
msgstr "Utilisé par"
#: REST/methods/osmanagers.py:69
msgid "Current OS Managers"
msgstr "Dirigeants de OS actuels"
#: REST/methods/providers.py:67
msgid "Current service providers" msgid "Current service providers"
msgstr "Fournisseurs de services actuels" msgstr "Fournisseurs de services actuels"
#: REST/methods/providers.py:73 templates/uds/index.html:51 #: REST/methods/providers.py:71 templates/uds/index.html:51
#: templates/uds/html5/index.html:68 #: templates/uds/html5/index.html:68
msgid "Services" msgid "Services"
msgstr "Services" msgstr "Services"
#: admin/views.py:53 admin/views.py:61 web/views.py:422 #: REST/methods/transports.py:69
msgid "Current Transports"
msgstr "Transports actuels"
#: REST/methods/users.py:70
#, python-brace-format
msgid "Users of {0}"
msgstr "Utilisateurs de {0}"
#: REST/methods/users.py:72
msgid "Current users"
msgstr "Utilisateurs actuels"
#: REST/methods/users.py:76
msgid "User Id"
msgstr "Id de l'utilisateur"
#: REST/methods/users.py:79
msgid "state"
msgstr "État"
#: REST/methods/users.py:80
msgid "Last access"
msgstr "Dernier accès"
#: admin/views.py:55 admin/views.py:63 admin/views.py:76 web/views.py:422
msgid "Forbidden" msgid "Forbidden"
msgstr "Interdit" msgstr "Interdit"
#: admin/views.py:69
msgid "requested a template that do not exists"
msgstr "demandé un modèle qui ne sont pas existe"
#: auths/IP/Authenticator.py:48 auths/IP/Authenticator.py:50 #: auths/IP/Authenticator.py:48 auths/IP/Authenticator.py:50
msgid "IP Authenticator" msgid "IP Authenticator"
msgstr "Authentificateur IP" msgstr "Authentificateur IP"
@ -161,8 +212,9 @@ msgstr ""
#: osmanagers/WindowsOsManager/WinRandomPassOsManager.py:30 #: osmanagers/WindowsOsManager/WinRandomPassOsManager.py:30
#: services/OVirt/OVirtProvider.py:94 services/Sample/SampleService.py:131 #: services/OVirt/OVirtProvider.py:94 services/Sample/SampleService.py:131
#: transports/HTML5RDP/HTML5RDP.py:65 transports/NX/NXTransport.py:62 #: transports/HTML5RDP/HTML5RDP.py:65 transports/NX/NXTransport.py:62
#: transports/RDP/RDPTransport.py:60 transports/RDP/TSRDPTransport.py:64 #: transports/NX/TSNXTransport.py:67 transports/RDP/RDPTransport.py:60
#: transports/TSNX/TSNXTransport.py:67 web/forms/LoginForm.py:70 #: transports/RDP/TSRDPTransport.py:64 transports/TSNX/TSNXTransport.py:67
#: web/forms/LoginForm.py:70
msgid "Password" msgid "Password"
msgstr "Mot de passe" msgstr "Mot de passe"
@ -232,9 +284,9 @@ msgstr "Authentificateur de LDAP d'Expressions régulière"
#: auths/RegexLdap/Authenticator.py:72 auths/SimpleLDAP/Authenticator.py:73 #: auths/RegexLdap/Authenticator.py:72 auths/SimpleLDAP/Authenticator.py:73
#: services/OVirt/OVirtProvider.py:93 transports/HTML5RDP/HTML5RDP.py:64 #: services/OVirt/OVirtProvider.py:93 transports/HTML5RDP/HTML5RDP.py:64
#: transports/NX/NXTransport.py:61 transports/RDP/RDPTransport.py:59 #: transports/NX/NXTransport.py:61 transports/NX/TSNXTransport.py:66
#: transports/RDP/TSRDPTransport.py:63 transports/TSNX/TSNXTransport.py:66 #: transports/RDP/RDPTransport.py:59 transports/RDP/TSRDPTransport.py:63
#: web/forms/LoginForm.py:69 #: transports/TSNX/TSNXTransport.py:66 web/forms/LoginForm.py:69
msgid "Username" msgid "Username"
msgstr "Nom d'utilisateur" msgstr "Nom d'utilisateur"
@ -1091,10 +1143,6 @@ msgstr "Redémarrez le navigateur"
msgid "Ip" msgid "Ip"
msgstr "IP" msgstr "IP"
#: templates/uds/index.html:79 templates/uds/html5/index.html:127
msgid "Networks"
msgstr "Réseaux"
#: templates/uds/index.html:80 templates/uds/html5/index.html:128 #: templates/uds/index.html:80 templates/uds/html5/index.html:128
msgid "Transports" msgid "Transports"
msgstr "Transports" msgstr "Transports"
@ -1151,35 +1199,44 @@ msgstr ""
msgid "toggle navigation" msgid "toggle navigation"
msgstr "activer/désactiver navigation" msgstr "activer/désactiver navigation"
#: templates/uds/admin/snippets/navbar.html:17 #: templates/uds/admin/snippets/navbar.html:18
msgid "Service providers" msgid "Service providers"
msgstr "Fournisseurs de services" msgstr "Fournisseurs de services"
#: templates/uds/admin/snippets/navbar.html:18 #: templates/uds/admin/snippets/navbar.html:19
#: templates/uds/admin/tmpl/authenticators.html:4
msgid "Authenticators" msgid "Authenticators"
msgstr "Authentificateurs" msgstr "Authentificateurs"
#: templates/uds/admin/snippets/navbar.html:20 #: templates/uds/admin/snippets/navbar.html:21
msgid "Connectivity" msgid "Connectivity"
msgstr "Connectivité" msgstr "Connectivité"
#: templates/uds/admin/snippets/navbar.html:21 #: templates/uds/admin/snippets/navbar.html:22
msgid "Deployed services" msgid "Deployed services"
msgstr "Services déployés" msgstr "Services déployés"
#: templates/uds/admin/snippets/navbar.html:25 #: templates/uds/admin/snippets/navbar.html:26
msgid "Configuration" msgid "Configuration"
msgstr "Configuration" msgstr "Configuration"
#: templates/uds/admin/snippets/navbar.html:57 #: templates/uds/admin/snippets/navbar.html:56
msgid "Exit dashboard" msgid "Exit dashboard"
msgstr "Tableau de bord de sortie" msgstr "Tableau de bord de sortie"
#: templates/uds/admin/snippets/navbar.html:58 #: templates/uds/admin/snippets/navbar.html:57
#: templates/uds/html5/snippets/navbar.html:47 #: templates/uds/html5/snippets/navbar.html:47
msgid "logout" msgid "logout"
msgstr "logout" msgstr "logout"
#: templates/uds/admin/tmpl/authenticators.html:4
msgid "administration of authenticators"
msgstr "administration des authentificateurs"
#: templates/uds/admin/tmpl/dashboard.html:4
msgid "overview"
msgstr "vue d'ensemble"
#: templates/uds/html5/detectJava.html:4 #: templates/uds/html5/detectJava.html:4
msgid "Login redirection to UDS" msgid "Login redirection to UDS"
msgstr "Redirection de connexion à l'UDS" msgstr "Redirection de connexion à l'UDS"
@ -1271,7 +1328,7 @@ msgstr "Sur"
msgid "Dashboard" msgid "Dashboard"
msgstr "Tableau de bord" msgstr "Tableau de bord"
#: templates/uds/html5/templates/base.html:51 #: templates/uds/html5/templates/base.html:52
msgid "" msgid ""
"Your browser is supported only partially. Please, upgrade it to a modern " "Your browser is supported only partially. Please, upgrade it to a modern "
"html5 browser like Firefox, Chrome, Opera, ... (IE must be 10 or better)" "html5 browser like Firefox, Chrome, Opera, ... (IE must be 10 or better)"
@ -1309,30 +1366,30 @@ msgstr ""
"si nécessaire) des utilisateurs" "si nécessaire) des utilisateurs"
#: transports/HTML5RDP/HTML5RDP.py:63 transports/NX/NXTransport.py:60 #: transports/HTML5RDP/HTML5RDP.py:63 transports/NX/NXTransport.py:60
#: transports/RDP/RDPTransport.py:58 transports/RDP/TSRDPTransport.py:62 #: transports/NX/TSNXTransport.py:65 transports/RDP/RDPTransport.py:58
#: transports/TSNX/TSNXTransport.py:65 #: transports/RDP/TSRDPTransport.py:62 transports/TSNX/TSNXTransport.py:65
msgid "Empty creds" msgid "Empty creds"
msgstr "Références vide" msgstr "Références vide"
#: transports/HTML5RDP/HTML5RDP.py:63 transports/NX/NXTransport.py:60 #: transports/HTML5RDP/HTML5RDP.py:63 transports/NX/NXTransport.py:60
#: transports/RDP/RDPTransport.py:58 transports/RDP/TSRDPTransport.py:62 #: transports/NX/TSNXTransport.py:65 transports/RDP/RDPTransport.py:58
#: transports/TSNX/TSNXTransport.py:65 #: transports/RDP/TSRDPTransport.py:62 transports/TSNX/TSNXTransport.py:65
msgid "If checked, the credentials used to connect will be emtpy" msgid "If checked, the credentials used to connect will be emtpy"
msgstr "" msgstr ""
"Si coché, les informations d'identification utilisées pour se connecter sera " "Si coché, les informations d'identification utilisées pour se connecter sera "
"vide" "vide"
#: transports/HTML5RDP/HTML5RDP.py:64 transports/NX/NXTransport.py:61 #: transports/HTML5RDP/HTML5RDP.py:64 transports/NX/NXTransport.py:61
#: transports/RDP/RDPTransport.py:59 transports/RDP/TSRDPTransport.py:63 #: transports/NX/TSNXTransport.py:66 transports/RDP/RDPTransport.py:59
#: transports/TSNX/TSNXTransport.py:66 #: transports/RDP/TSRDPTransport.py:63 transports/TSNX/TSNXTransport.py:66
msgid "If not empty, this username will be always used as credential" msgid "If not empty, this username will be always used as credential"
msgstr "" msgstr ""
"Si ce n'est vide, ce nom d'utilisateur sera toujours utilisé comme des " "Si ce n'est vide, ce nom d'utilisateur sera toujours utilisé comme des "
"titres de compétences" "titres de compétences"
#: transports/HTML5RDP/HTML5RDP.py:65 transports/NX/NXTransport.py:62 #: transports/HTML5RDP/HTML5RDP.py:65 transports/NX/NXTransport.py:62
#: transports/RDP/RDPTransport.py:60 transports/RDP/TSRDPTransport.py:64 #: transports/NX/TSNXTransport.py:67 transports/RDP/RDPTransport.py:60
#: transports/TSNX/TSNXTransport.py:67 #: transports/RDP/TSRDPTransport.py:64 transports/TSNX/TSNXTransport.py:67
msgid "If not empty, this password will be always used as credential" msgid "If not empty, this password will be always used as credential"
msgstr "" msgstr ""
"Si ce n'est vide, ce mot de passe sera toujours utilisé comme des titres de " "Si ce n'est vide, ce mot de passe sera toujours utilisé comme des titres de "
@ -1387,46 +1444,98 @@ msgstr "NX Transport (direct)"
msgid "NX Transport for direct connection" msgid "NX Transport for direct connection"
msgstr "NX Transport pour une connexion directe" msgstr "NX Transport pour une connexion directe"
#: transports/NX/NXTransport.py:63 transports/TSNX/TSNXTransport.py:68 #: transports/NX/NXTransport.py:63 transports/NX/TSNXTransport.py:68
#: transports/TSNX/TSNXTransport.py:68
msgid "Listen port" msgid "Listen port"
msgstr "Écouter le port" msgstr "Écouter le port"
#: transports/NX/NXTransport.py:63 transports/TSNX/TSNXTransport.py:68 #: transports/NX/NXTransport.py:63 transports/NX/TSNXTransport.py:68
#: transports/TSNX/TSNXTransport.py:68
msgid "Listening port of NX (ssh) at client machine" msgid "Listening port of NX (ssh) at client machine"
msgstr "Écoute le port de NX (ssh) à la machine client" msgstr "Écoute le port de NX (ssh) à la machine client"
#: transports/NX/NXTransport.py:64 transports/TSNX/TSNXTransport.py:69 #: transports/NX/NXTransport.py:64 transports/NX/TSNXTransport.py:69
#: transports/TSNX/TSNXTransport.py:69
msgid "Connection" msgid "Connection"
msgstr "Connexion" msgstr "Connexion"
#: transports/NX/NXTransport.py:64 transports/TSNX/TSNXTransport.py:69 #: transports/NX/NXTransport.py:64 transports/NX/TSNXTransport.py:69
#: transports/TSNX/TSNXTransport.py:69
msgid "Connection speed for this transport (quality)" msgid "Connection speed for this transport (quality)"
msgstr "Vitesse de connexion pour ce transport (qualité)" msgstr "Vitesse de connexion pour ce transport (qualité)"
#: transports/NX/NXTransport.py:71 transports/TSNX/TSNXTransport.py:76 #: transports/NX/NXTransport.py:71 transports/NX/TSNXTransport.py:76
#: transports/TSNX/TSNXTransport.py:76
msgid "Session" msgid "Session"
msgstr "Session" msgstr "Session"
#: transports/NX/NXTransport.py:71 transports/TSNX/TSNXTransport.py:76 #: transports/NX/NXTransport.py:71 transports/NX/TSNXTransport.py:76
#: transports/TSNX/TSNXTransport.py:76
msgid "Desktop session" msgid "Desktop session"
msgstr "Session de bureau" msgstr "Session de bureau"
#: transports/NX/NXTransport.py:76 transports/TSNX/TSNXTransport.py:81 #: transports/NX/NXTransport.py:76 transports/NX/TSNXTransport.py:81
#: transports/TSNX/TSNXTransport.py:81
msgid "Disk Cache" msgid "Disk Cache"
msgstr "Cache disque" msgstr "Cache disque"
#: transports/NX/NXTransport.py:76 transports/TSNX/TSNXTransport.py:81 #: transports/NX/NXTransport.py:76 transports/NX/TSNXTransport.py:81
#: transports/TSNX/TSNXTransport.py:81
msgid "Cache size en Mb stored at disk" msgid "Cache size en Mb stored at disk"
msgstr "Cache en taille que Mo stocké à disque" msgstr "Cache en taille que Mo stocké à disque"
#: transports/NX/NXTransport.py:84 transports/TSNX/TSNXTransport.py:89 #: transports/NX/NXTransport.py:84 transports/NX/TSNXTransport.py:89
#: transports/TSNX/TSNXTransport.py:89
msgid "Memory Cache" msgid "Memory Cache"
msgstr "Mémoire Cache" msgstr "Mémoire Cache"
#: transports/NX/NXTransport.py:84 transports/TSNX/TSNXTransport.py:89 #: transports/NX/NXTransport.py:84 transports/NX/TSNXTransport.py:89
#: transports/TSNX/TSNXTransport.py:89
msgid "Cache size en Mb keept at memory" msgid "Cache size en Mb keept at memory"
msgstr "Taille en Mb montagne à la mémoire de cache." msgstr "Taille en Mb montagne à la mémoire de cache."
#: transports/NX/TSNXTransport.py:55 transports/TSNX/TSNXTransport.py:55
msgid "NX Transport (tunneled)"
msgstr "Transport NX (tunnel)"
#: transports/NX/TSNXTransport.py:57 transports/TSNX/TSNXTransport.py:57
msgid "NX Transport for tunneled connection"
msgstr "Transport NX pour connexion tunnelée"
#: transports/NX/TSNXTransport.py:62 transports/RDP/TSRDPTransport.py:59
#: transports/TSNX/TSNXTransport.py:62
msgid "Tunnel server"
msgstr "Serveur de tunnel"
#: transports/NX/TSNXTransport.py:62 transports/RDP/TSRDPTransport.py:59
#: transports/TSNX/TSNXTransport.py:62
msgid ""
"IP or Hostname of tunnel server send to client device (\"public\" ip) and "
"port. (use HOST:PORT format)"
msgstr ""
"IP ou nom d'hôte du serveur de tunnel envoyer à la machine cliente (« public "
"» ip) et port. (utilisez le format de l'hôte : PORT)"
#: transports/NX/TSNXTransport.py:63 transports/RDP/TSRDPTransport.py:60
#: transports/TSNX/TSNXTransport.py:63
msgid "Tunnel host check"
msgstr "Tunnel hôte cocher"
#: transports/NX/TSNXTransport.py:63 transports/RDP/TSRDPTransport.py:60
#: transports/TSNX/TSNXTransport.py:63
msgid ""
"If not empty, this server will be used to check if service is running before "
"assigning it to user. (use HOST:PORT format)"
msgstr ""
"Si ce n'est vide, ce serveur sera utilisé pour vérifier si le service "
"s'exécute avant assignant à l'utilisateur. (utilisez le format de l'hôte : "
"PORT)"
#: transports/NX/TSNXTransport.py:103 transports/RDP/TSRDPTransport.py:75
#: transports/TSNX/TSNXTransport.py:103
msgid "Must use HOST:PORT in Tunnel Server Field"
msgstr "Devez utiliser HOST : PORT dans le champ serveur Tunnel"
#: transports/NX/__init__.py:45 transports/TSNX/__init__.py:44 #: transports/NX/__init__.py:45 transports/TSNX/__init__.py:44
msgid "NX Protocol" msgid "NX Protocol"
msgstr "Protocole de NX" msgstr "Protocole de NX"
@ -1518,35 +1627,6 @@ msgstr "Transport de RDP (tunnel)"
msgid "RDP Transport for tunneled connection" msgid "RDP Transport for tunneled connection"
msgstr "Transport de RDP de connexion tunnelée" msgstr "Transport de RDP de connexion tunnelée"
#: transports/RDP/TSRDPTransport.py:59 transports/TSNX/TSNXTransport.py:62
msgid "Tunnel server"
msgstr "Serveur de tunnel"
#: transports/RDP/TSRDPTransport.py:59 transports/TSNX/TSNXTransport.py:62
msgid ""
"IP or Hostname of tunnel server send to client device (\"public\" ip) and "
"port. (use HOST:PORT format)"
msgstr ""
"IP ou nom d'hôte du serveur de tunnel envoyer à la machine cliente (« public "
"» ip) et port. (utilisez le format de l'hôte : PORT)"
#: transports/RDP/TSRDPTransport.py:60 transports/TSNX/TSNXTransport.py:63
msgid "Tunnel host check"
msgstr "Tunnel hôte cocher"
#: transports/RDP/TSRDPTransport.py:60 transports/TSNX/TSNXTransport.py:63
msgid ""
"If not empty, this server will be used to check if service is running before "
"assigning it to user. (use HOST:PORT format)"
msgstr ""
"Si ce n'est vide, ce serveur sera utilisé pour vérifier si le service "
"s'exécute avant assignant à l'utilisateur. (utilisez le format de l'hôte : "
"PORT)"
#: transports/RDP/TSRDPTransport.py:75 transports/TSNX/TSNXTransport.py:103
msgid "Must use HOST:PORT in Tunnel Server Field"
msgstr "Devez utiliser HOST : PORT dans le champ serveur Tunnel"
#: transports/RDP/__init__.py:39 #: transports/RDP/__init__.py:39
msgid "Remote Desktop Protocol" msgid "Remote Desktop Protocol"
msgstr "Protocole Bureau distant" msgstr "Protocole Bureau distant"
@ -1563,14 +1643,6 @@ msgstr "Vous pouvez l'obtenir de"
msgid "CoRD Website" msgid "CoRD Website"
msgstr "Site Web du cordon" msgstr "Site Web du cordon"
#: transports/TSNX/TSNXTransport.py:55
msgid "NX Transport (tunneled)"
msgstr "Transport NX (tunnel)"
#: transports/TSNX/TSNXTransport.py:57
msgid "NX Transport for tunneled connection"
msgstr "Transport NX pour connexion tunnelée"
#: web/errors.py:60 #: web/errors.py:60
msgid "Unknown error" msgid "Unknown error"
msgstr "Erreur inconnue" msgstr "Erreur inconnue"
@ -1633,6 +1705,10 @@ msgstr ""
msgid "Authenticator do not provides information" msgid "Authenticator do not provides information"
msgstr "Authentificateur ne fournit pas d'informations" msgstr "Authentificateur ne fournit pas d'informations"
#: web/forms/LoginForm.py:50
msgid "Select authenticator"
msgstr "Sélectionnez authentificateur"
#: web/forms/LoginForm.py:54 #: web/forms/LoginForm.py:54
msgid "authenticator" msgid "authenticator"
msgstr "authentificateur" msgstr "authentificateur"

View File

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-11-14 11:59+0100\n" "POT-Creation-Date: 2013-11-17 04:21+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -18,70 +18,146 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n"
#: static/adm/js/api.js:23 #: static/adm/js/gui-elements.js:7
msgid "Success on \""
msgstr "Succès sur\""
#: static/adm/js/api.js:24
msgid "Received "
msgstr "Reçu "
#: static/adm/js/gui.js:17
msgid "Display _MENU_ records per page"
msgstr "Afficher _MENU_ enregistrements par page"
#: static/adm/js/gui.js:18
msgid "Nothing found - sorry"
msgstr "Rien trouvé - Désolé"
#: static/adm/js/gui.js:19
msgid "Showing record _START_ to _END_ of _TOTAL_"
msgstr "Affichage des enregistrement _START_ à _END_ de _TOTAL_"
#: static/adm/js/gui.js:20
msgid "Showing 0 to 0 of 0 records"
msgstr "Affichage de 0 à 0 sur 0 documents"
#: static/adm/js/gui.js:21
msgid "(filtered from _MAX_ total records)"
msgstr "(filtrée de total d'enregistrements _MAX_)"
#: static/adm/js/gui.js:22
msgid "Please wait, processing"
msgstr "Veuillez patienter, traitement"
#: static/adm/js/gui.js:23
msgid "Search"
msgstr "Rechercher"
#: static/adm/js/gui.js:26
msgid "First"
msgstr "Première"
#: static/adm/js/gui.js:27
msgid "Last"
msgstr "Dernière"
#: static/adm/js/gui.js:28
msgid "Next"
msgstr "Prochaine"
#: static/adm/js/gui.js:29
msgid "Previous"
msgstr "Précédent"
#: static/adm/js/gui.js:83
msgid "Connectivity"
msgstr "Connectivité"
#: static/adm/js/gui.js:88
msgid "Deployed services"
msgstr "Services déployés"
#: static/adm/js/gui.js:181
msgid "Service Providers" msgid "Service Providers"
msgstr "Fournisseurs de services" msgstr "Fournisseurs de services"
#: static/adm/js/gui.js:191 #: static/adm/js/gui-elements.js:81
msgid "Authenticators" msgid "Connectivity"
msgstr "Authentificateurs" msgstr "Connectivité"
#: static/adm/js/gui.js:18
msgid "_MENU_ records per page"
msgstr "Documents _MENU_ par page"
#: static/adm/js/gui.js:19
msgid "Empty"
msgstr "Vide"
#: static/adm/js/gui.js:20
msgid "Records _START_ to _END_ of _TOTAL_"
msgstr "Dossiers _START_ à _END_ de _TOTAL_"
#: static/adm/js/gui.js:21
msgid "No records"
msgstr "Aucun enregistrement"
#: static/adm/js/gui.js:22
msgid "(filtered from _MAX_ total records)"
msgstr "(filtrée de total d'enregistrements _MAX_)"
#: static/adm/js/gui.js:23
msgid "Please wait, processing"
msgstr "Veuillez patienter, traitement"
#: static/adm/js/gui.js:24
msgid "Filter"
msgstr "Filtre"
#: static/adm/js/gui.js:27
msgid "First"
msgstr "Première"
#: static/adm/js/gui.js:28
msgid "Last"
msgstr "Dernière"
#: static/adm/js/gui.js:29
msgid "Next"
msgstr "Prochaine"
#: static/adm/js/gui.js:30
msgid "Previous"
msgstr "Précédent"
#: static/adm/js/gui.js:80
msgid "Deployed services"
msgstr "Services déployés"
#: static/adm/js/gui.js:349
msgid "Edit"
msgstr "Edit"
#: static/adm/js/gui.js:358
msgid "Delete"
msgstr "Supprimer"
#: static/adm/js/gui.js:367
msgid "Refresh"
msgstr "Actualisation"
#: static/adm/js/strftime.js:30
msgid "Sunday"
msgstr "Dimanche"
#: static/adm/js/strftime.js:30
msgid "Monday"
msgstr "Lundi"
#: static/adm/js/strftime.js:30
msgid "Tuesday"
msgstr "Mardi"
#: static/adm/js/strftime.js:31
msgid "Wednesday"
msgstr "Mercredi"
#: static/adm/js/strftime.js:31
msgid "Thursday"
msgstr "Jeudi"
#: static/adm/js/strftime.js:31
msgid "Friday"
msgstr "Vendredi"
#: static/adm/js/strftime.js:31
msgid "Saturday"
msgstr "Samedi"
#: static/adm/js/strftime.js:32
msgid "January"
msgstr "Janvier"
#: static/adm/js/strftime.js:32
msgid "February"
msgstr "Février"
#: static/adm/js/strftime.js:32
msgid "March"
msgstr "Mars"
#: static/adm/js/strftime.js:33
msgid "April"
msgstr "Avril"
#: static/adm/js/strftime.js:33
msgid "May"
msgstr "Mai"
#: static/adm/js/strftime.js:33
msgid "June"
msgstr "Juin"
#: static/adm/js/strftime.js:33
msgid "July"
msgstr "Juillet"
#: static/adm/js/strftime.js:34
msgid "August"
msgstr "Août"
#: static/adm/js/strftime.js:34
msgid "September"
msgstr "Septembre"
#: static/adm/js/strftime.js:34
msgid "October"
msgstr "Octobre"
#: static/adm/js/strftime.js:34
msgid "November"
msgstr "Novembre"
#: static/adm/js/strftime.js:35
msgid "December"
msgstr "Décembre"

View File

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-11-14 11:59+0100\n" "POT-Creation-Date: 2013-11-17 04:20+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -18,35 +18,86 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: REST/methods/authenticators.py:72 #: REST/methods/authenticators.py:73
msgid "Current authenticators" msgid "Current authenticators"
msgstr "Autenticatori correnti" msgstr "Autenticatori correnti"
#: REST/methods/authenticators.py:74 REST/methods/providers.py:71 #: REST/methods/authenticators.py:75 REST/methods/networks.py:68
#: REST/methods/osmanagers.py:71 REST/methods/providers.py:69
#: REST/methods/transports.py:71 REST/methods/users.py:77
msgid "Name" msgid "Name"
msgstr "Nome" msgstr "Nome"
#: REST/methods/authenticators.py:75 REST/methods/providers.py:72 #: REST/methods/authenticators.py:76 REST/methods/osmanagers.py:72
#: REST/methods/providers.py:70 REST/methods/transports.py:72
#: REST/methods/users.py:78
msgid "Comments" msgid "Comments"
msgstr "Commenti" msgstr "Commenti"
#: REST/methods/authenticators.py:76 #: REST/methods/authenticators.py:77
msgid "Users" msgid "Users"
msgstr "Utenti" msgstr "Utenti"
#: REST/methods/providers.py:69 #: REST/methods/networks.py:66
msgid "Current Networks"
msgstr "Reti attuali"
#: REST/methods/networks.py:69 templates/uds/index.html:79
#: templates/uds/html5/index.html:127
msgid "Networks"
msgstr "Reti"
#: REST/methods/networks.py:70 REST/methods/osmanagers.py:73
#: REST/methods/transports.py:73
msgid "Used by"
msgstr "Utilizzato da"
#: REST/methods/osmanagers.py:69
msgid "Current OS Managers"
msgstr "Attuale OS Manager"
#: REST/methods/providers.py:67
msgid "Current service providers" msgid "Current service providers"
msgstr "Attuali fornitori di servizi" msgstr "Attuali fornitori di servizi"
#: REST/methods/providers.py:73 templates/uds/index.html:51 #: REST/methods/providers.py:71 templates/uds/index.html:51
#: templates/uds/html5/index.html:68 #: templates/uds/html5/index.html:68
msgid "Services" msgid "Services"
msgstr "Servizi" msgstr "Servizi"
#: admin/views.py:53 admin/views.py:61 web/views.py:422 #: REST/methods/transports.py:69
msgid "Current Transports"
msgstr "Trasporti correnti"
#: REST/methods/users.py:70
#, python-brace-format
msgid "Users of {0}"
msgstr "Utenti di {0}"
#: REST/methods/users.py:72
msgid "Current users"
msgstr "Utenti correnti"
#: REST/methods/users.py:76
msgid "User Id"
msgstr "Id utente"
#: REST/methods/users.py:79
msgid "state"
msgstr "stato"
#: REST/methods/users.py:80
msgid "Last access"
msgstr "Ultimo accesso"
#: admin/views.py:55 admin/views.py:63 admin/views.py:76 web/views.py:422
msgid "Forbidden" msgid "Forbidden"
msgstr "Vietato" msgstr "Vietato"
#: admin/views.py:69
msgid "requested a template that do not exists"
msgstr "richiesto da un modello che non esiste"
#: auths/IP/Authenticator.py:48 auths/IP/Authenticator.py:50 #: auths/IP/Authenticator.py:48 auths/IP/Authenticator.py:50
msgid "IP Authenticator" msgid "IP Authenticator"
msgstr "IP autenticatore" msgstr "IP autenticatore"
@ -136,8 +187,9 @@ msgstr "Nome utente con privilegi di lettura sulla base selezionata"
#: osmanagers/WindowsOsManager/WinRandomPassOsManager.py:30 #: osmanagers/WindowsOsManager/WinRandomPassOsManager.py:30
#: services/OVirt/OVirtProvider.py:94 services/Sample/SampleService.py:131 #: services/OVirt/OVirtProvider.py:94 services/Sample/SampleService.py:131
#: transports/HTML5RDP/HTML5RDP.py:65 transports/NX/NXTransport.py:62 #: transports/HTML5RDP/HTML5RDP.py:65 transports/NX/NXTransport.py:62
#: transports/RDP/RDPTransport.py:60 transports/RDP/TSRDPTransport.py:64 #: transports/NX/TSNXTransport.py:67 transports/RDP/RDPTransport.py:60
#: transports/TSNX/TSNXTransport.py:67 web/forms/LoginForm.py:70 #: transports/RDP/TSRDPTransport.py:64 transports/TSNX/TSNXTransport.py:67
#: web/forms/LoginForm.py:70
msgid "Password" msgid "Password"
msgstr "Password" msgstr "Password"
@ -205,9 +257,9 @@ msgstr "Autenticatore di LDAP di espressioni regolari"
#: auths/RegexLdap/Authenticator.py:72 auths/SimpleLDAP/Authenticator.py:73 #: auths/RegexLdap/Authenticator.py:72 auths/SimpleLDAP/Authenticator.py:73
#: services/OVirt/OVirtProvider.py:93 transports/HTML5RDP/HTML5RDP.py:64 #: services/OVirt/OVirtProvider.py:93 transports/HTML5RDP/HTML5RDP.py:64
#: transports/NX/NXTransport.py:61 transports/RDP/RDPTransport.py:59 #: transports/NX/NXTransport.py:61 transports/NX/TSNXTransport.py:66
#: transports/RDP/TSRDPTransport.py:63 transports/TSNX/TSNXTransport.py:66 #: transports/RDP/RDPTransport.py:59 transports/RDP/TSRDPTransport.py:63
#: web/forms/LoginForm.py:69 #: transports/TSNX/TSNXTransport.py:66 web/forms/LoginForm.py:69
msgid "Username" msgid "Username"
msgstr "Nome utente" msgstr "Nome utente"
@ -1059,10 +1111,6 @@ msgstr "e riavviare il browser"
msgid "Ip" msgid "Ip"
msgstr "IP" msgstr "IP"
#: templates/uds/index.html:79 templates/uds/html5/index.html:127
msgid "Networks"
msgstr "Reti"
#: templates/uds/index.html:80 templates/uds/html5/index.html:128 #: templates/uds/index.html:80 templates/uds/html5/index.html:128
msgid "Transports" msgid "Transports"
msgstr "Trasporti" msgstr "Trasporti"
@ -1119,35 +1167,44 @@ msgstr ""
msgid "toggle navigation" msgid "toggle navigation"
msgstr "navigazione Toggle" msgstr "navigazione Toggle"
#: templates/uds/admin/snippets/navbar.html:17 #: templates/uds/admin/snippets/navbar.html:18
msgid "Service providers" msgid "Service providers"
msgstr "Fornitori di servizi" msgstr "Fornitori di servizi"
#: templates/uds/admin/snippets/navbar.html:18 #: templates/uds/admin/snippets/navbar.html:19
#: templates/uds/admin/tmpl/authenticators.html:4
msgid "Authenticators" msgid "Authenticators"
msgstr "Autenticatori" msgstr "Autenticatori"
#: templates/uds/admin/snippets/navbar.html:20 #: templates/uds/admin/snippets/navbar.html:21
msgid "Connectivity" msgid "Connectivity"
msgstr "Connettività" msgstr "Connettività"
#: templates/uds/admin/snippets/navbar.html:21 #: templates/uds/admin/snippets/navbar.html:22
msgid "Deployed services" msgid "Deployed services"
msgstr "Servizi distribuiti" msgstr "Servizi distribuiti"
#: templates/uds/admin/snippets/navbar.html:25 #: templates/uds/admin/snippets/navbar.html:26
msgid "Configuration" msgid "Configuration"
msgstr "Configurazione" msgstr "Configurazione"
#: templates/uds/admin/snippets/navbar.html:57 #: templates/uds/admin/snippets/navbar.html:56
msgid "Exit dashboard" msgid "Exit dashboard"
msgstr "Cruscotto di uscita" msgstr "Cruscotto di uscita"
#: templates/uds/admin/snippets/navbar.html:58 #: templates/uds/admin/snippets/navbar.html:57
#: templates/uds/html5/snippets/navbar.html:47 #: templates/uds/html5/snippets/navbar.html:47
msgid "logout" msgid "logout"
msgstr "logout" msgstr "logout"
#: templates/uds/admin/tmpl/authenticators.html:4
msgid "administration of authenticators"
msgstr "amministrazione di autenticatori"
#: templates/uds/admin/tmpl/dashboard.html:4
msgid "overview"
msgstr "Panoramica"
#: templates/uds/html5/detectJava.html:4 #: templates/uds/html5/detectJava.html:4
msgid "Login redirection to UDS" msgid "Login redirection to UDS"
msgstr "Reindirizzamento login a UDS" msgstr "Reindirizzamento login a UDS"
@ -1239,7 +1296,7 @@ msgstr "Circa"
msgid "Dashboard" msgid "Dashboard"
msgstr "Cruscotto" msgstr "Cruscotto"
#: templates/uds/html5/templates/base.html:51 #: templates/uds/html5/templates/base.html:52
msgid "" msgid ""
"Your browser is supported only partially. Please, upgrade it to a modern " "Your browser is supported only partially. Please, upgrade it to a modern "
"html5 browser like Firefox, Chrome, Opera, ... (IE must be 10 or better)" "html5 browser like Firefox, Chrome, Opera, ... (IE must be 10 or better)"
@ -1277,27 +1334,27 @@ msgstr ""
"accessibile da parte degli utenti" "accessibile da parte degli utenti"
#: transports/HTML5RDP/HTML5RDP.py:63 transports/NX/NXTransport.py:60 #: transports/HTML5RDP/HTML5RDP.py:63 transports/NX/NXTransport.py:60
#: transports/RDP/RDPTransport.py:58 transports/RDP/TSRDPTransport.py:62 #: transports/NX/TSNXTransport.py:65 transports/RDP/RDPTransport.py:58
#: transports/TSNX/TSNXTransport.py:65 #: transports/RDP/TSRDPTransport.py:62 transports/TSNX/TSNXTransport.py:65
msgid "Empty creds" msgid "Empty creds"
msgstr "Vuoto creds" msgstr "Vuoto creds"
#: transports/HTML5RDP/HTML5RDP.py:63 transports/NX/NXTransport.py:60 #: transports/HTML5RDP/HTML5RDP.py:63 transports/NX/NXTransport.py:60
#: transports/RDP/RDPTransport.py:58 transports/RDP/TSRDPTransport.py:62 #: transports/NX/TSNXTransport.py:65 transports/RDP/RDPTransport.py:58
#: transports/TSNX/TSNXTransport.py:65 #: transports/RDP/TSRDPTransport.py:62 transports/TSNX/TSNXTransport.py:65
msgid "If checked, the credentials used to connect will be emtpy" msgid "If checked, the credentials used to connect will be emtpy"
msgstr "Se selezionata, le credenziali utilizzate per connettersi sarà emtpy" msgstr "Se selezionata, le credenziali utilizzate per connettersi sarà emtpy"
#: transports/HTML5RDP/HTML5RDP.py:64 transports/NX/NXTransport.py:61 #: transports/HTML5RDP/HTML5RDP.py:64 transports/NX/NXTransport.py:61
#: transports/RDP/RDPTransport.py:59 transports/RDP/TSRDPTransport.py:63 #: transports/NX/TSNXTransport.py:66 transports/RDP/RDPTransport.py:59
#: transports/TSNX/TSNXTransport.py:66 #: transports/RDP/TSRDPTransport.py:63 transports/TSNX/TSNXTransport.py:66
msgid "If not empty, this username will be always used as credential" msgid "If not empty, this username will be always used as credential"
msgstr "" msgstr ""
"Se non vuota, questo nome utente verrà sempre utilizzato come credenziale" "Se non vuota, questo nome utente verrà sempre utilizzato come credenziale"
#: transports/HTML5RDP/HTML5RDP.py:65 transports/NX/NXTransport.py:62 #: transports/HTML5RDP/HTML5RDP.py:65 transports/NX/NXTransport.py:62
#: transports/RDP/RDPTransport.py:60 transports/RDP/TSRDPTransport.py:64 #: transports/NX/TSNXTransport.py:67 transports/RDP/RDPTransport.py:60
#: transports/TSNX/TSNXTransport.py:67 #: transports/RDP/TSRDPTransport.py:64 transports/TSNX/TSNXTransport.py:67
msgid "If not empty, this password will be always used as credential" msgid "If not empty, this password will be always used as credential"
msgstr "Se non vuota, questa password verrà sempre utilizzata come credenziale" msgstr "Se non vuota, questa password verrà sempre utilizzata come credenziale"
@ -1350,46 +1407,98 @@ msgstr "Trasporto NX (diretto)"
msgid "NX Transport for direct connection" msgid "NX Transport for direct connection"
msgstr "Trasporto di NX per connessione diretta" msgstr "Trasporto di NX per connessione diretta"
#: transports/NX/NXTransport.py:63 transports/TSNX/TSNXTransport.py:68 #: transports/NX/NXTransport.py:63 transports/NX/TSNXTransport.py:68
#: transports/TSNX/TSNXTransport.py:68
msgid "Listen port" msgid "Listen port"
msgstr "Porta di ascolto" msgstr "Porta di ascolto"
#: transports/NX/NXTransport.py:63 transports/TSNX/TSNXTransport.py:68 #: transports/NX/NXTransport.py:63 transports/NX/TSNXTransport.py:68
#: transports/TSNX/TSNXTransport.py:68
msgid "Listening port of NX (ssh) at client machine" msgid "Listening port of NX (ssh) at client machine"
msgstr "Porto di NX (ssh) in computer client in ascolto" msgstr "Porto di NX (ssh) in computer client in ascolto"
#: transports/NX/NXTransport.py:64 transports/TSNX/TSNXTransport.py:69 #: transports/NX/NXTransport.py:64 transports/NX/TSNXTransport.py:69
#: transports/TSNX/TSNXTransport.py:69
msgid "Connection" msgid "Connection"
msgstr "Connessione" msgstr "Connessione"
#: transports/NX/NXTransport.py:64 transports/TSNX/TSNXTransport.py:69 #: transports/NX/NXTransport.py:64 transports/NX/TSNXTransport.py:69
#: transports/TSNX/TSNXTransport.py:69
msgid "Connection speed for this transport (quality)" msgid "Connection speed for this transport (quality)"
msgstr "Velocità di connessione per questo trasporto (qualità)" msgstr "Velocità di connessione per questo trasporto (qualità)"
#: transports/NX/NXTransport.py:71 transports/TSNX/TSNXTransport.py:76 #: transports/NX/NXTransport.py:71 transports/NX/TSNXTransport.py:76
#: transports/TSNX/TSNXTransport.py:76
msgid "Session" msgid "Session"
msgstr "Sessione" msgstr "Sessione"
#: transports/NX/NXTransport.py:71 transports/TSNX/TSNXTransport.py:76 #: transports/NX/NXTransport.py:71 transports/NX/TSNXTransport.py:76
#: transports/TSNX/TSNXTransport.py:76
msgid "Desktop session" msgid "Desktop session"
msgstr "Sessione desktop" msgstr "Sessione desktop"
#: transports/NX/NXTransport.py:76 transports/TSNX/TSNXTransport.py:81 #: transports/NX/NXTransport.py:76 transports/NX/TSNXTransport.py:81
#: transports/TSNX/TSNXTransport.py:81
msgid "Disk Cache" msgid "Disk Cache"
msgstr "Cache disco" msgstr "Cache disco"
#: transports/NX/NXTransport.py:76 transports/TSNX/TSNXTransport.py:81 #: transports/NX/NXTransport.py:76 transports/NX/TSNXTransport.py:81
#: transports/TSNX/TSNXTransport.py:81
msgid "Cache size en Mb stored at disk" msgid "Cache size en Mb stored at disk"
msgstr "Memorizzare nella cache en dimensione che MB conservati a disco" msgstr "Memorizzare nella cache en dimensione che MB conservati a disco"
#: transports/NX/NXTransport.py:84 transports/TSNX/TSNXTransport.py:89 #: transports/NX/NXTransport.py:84 transports/NX/TSNXTransport.py:89
#: transports/TSNX/TSNXTransport.py:89
msgid "Memory Cache" msgid "Memory Cache"
msgstr "Memoria Cache" msgstr "Memoria Cache"
#: transports/NX/NXTransport.py:84 transports/TSNX/TSNXTransport.py:89 #: transports/NX/NXTransport.py:84 transports/NX/TSNXTransport.py:89
#: transports/TSNX/TSNXTransport.py:89
msgid "Cache size en Mb keept at memory" msgid "Cache size en Mb keept at memory"
msgstr "Cache size it Mb keept a memoria" msgstr "Cache size it Mb keept a memoria"
#: transports/NX/TSNXTransport.py:55 transports/TSNX/TSNXTransport.py:55
msgid "NX Transport (tunneled)"
msgstr "Trasporto NX (con tunnel)"
#: transports/NX/TSNXTransport.py:57 transports/TSNX/TSNXTransport.py:57
msgid "NX Transport for tunneled connection"
msgstr "Trasporto di NX per connessione con tunnel"
#: transports/NX/TSNXTransport.py:62 transports/RDP/TSRDPTransport.py:59
#: transports/TSNX/TSNXTransport.py:62
msgid "Tunnel server"
msgstr "Server per il tunnel"
#: transports/NX/TSNXTransport.py:62 transports/RDP/TSRDPTransport.py:59
#: transports/TSNX/TSNXTransport.py:62
msgid ""
"IP or Hostname of tunnel server send to client device (\"public\" ip) and "
"port. (use HOST:PORT format)"
msgstr ""
"IP o l'Hostname del server per il tunnel invia a dispositivo client (ip "
"\"pubblico\") e porto. (utilizzare il formato HOST: PORT)"
#: transports/NX/TSNXTransport.py:63 transports/RDP/TSRDPTransport.py:60
#: transports/TSNX/TSNXTransport.py:63
msgid "Tunnel host check"
msgstr "Controllo host tunnel"
#: transports/NX/TSNXTransport.py:63 transports/RDP/TSRDPTransport.py:60
#: transports/TSNX/TSNXTransport.py:63
msgid ""
"If not empty, this server will be used to check if service is running before "
"assigning it to user. (use HOST:PORT format)"
msgstr ""
"Se non vuota, questo server verrà utilizzato per verificare se il servizio è "
"in esecuzione prima di assegnandolo all'utente. (utilizzare il formato HOST: "
"PORT)"
#: transports/NX/TSNXTransport.py:103 transports/RDP/TSRDPTransport.py:75
#: transports/TSNX/TSNXTransport.py:103
msgid "Must use HOST:PORT in Tunnel Server Field"
msgstr "Necessario utilizzare HOST: porta nel campo Server di Tunnel"
#: transports/NX/__init__.py:45 transports/TSNX/__init__.py:44 #: transports/NX/__init__.py:45 transports/TSNX/__init__.py:44
msgid "NX Protocol" msgid "NX Protocol"
msgstr "Protocollo NX" msgstr "Protocollo NX"
@ -1481,35 +1590,6 @@ msgstr "Trasporto di RDP (con tunnel)"
msgid "RDP Transport for tunneled connection" msgid "RDP Transport for tunneled connection"
msgstr "Trasporto di RDP per connessione con tunnel" msgstr "Trasporto di RDP per connessione con tunnel"
#: transports/RDP/TSRDPTransport.py:59 transports/TSNX/TSNXTransport.py:62
msgid "Tunnel server"
msgstr "Server per il tunnel"
#: transports/RDP/TSRDPTransport.py:59 transports/TSNX/TSNXTransport.py:62
msgid ""
"IP or Hostname of tunnel server send to client device (\"public\" ip) and "
"port. (use HOST:PORT format)"
msgstr ""
"IP o l'Hostname del server per il tunnel invia a dispositivo client (ip "
"\"pubblico\") e porto. (utilizzare il formato HOST: PORT)"
#: transports/RDP/TSRDPTransport.py:60 transports/TSNX/TSNXTransport.py:63
msgid "Tunnel host check"
msgstr "Controllo host tunnel"
#: transports/RDP/TSRDPTransport.py:60 transports/TSNX/TSNXTransport.py:63
msgid ""
"If not empty, this server will be used to check if service is running before "
"assigning it to user. (use HOST:PORT format)"
msgstr ""
"Se non vuota, questo server verrà utilizzato per verificare se il servizio è "
"in esecuzione prima di assegnandolo all'utente. (utilizzare il formato HOST: "
"PORT)"
#: transports/RDP/TSRDPTransport.py:75 transports/TSNX/TSNXTransport.py:103
msgid "Must use HOST:PORT in Tunnel Server Field"
msgstr "Necessario utilizzare HOST: porta nel campo Server di Tunnel"
#: transports/RDP/__init__.py:39 #: transports/RDP/__init__.py:39
msgid "Remote Desktop Protocol" msgid "Remote Desktop Protocol"
msgstr "Remote Desktop Protocol" msgstr "Remote Desktop Protocol"
@ -1527,14 +1607,6 @@ msgstr "Si può ottenere da"
msgid "CoRD Website" msgid "CoRD Website"
msgstr "Sito Web di cavo" msgstr "Sito Web di cavo"
#: transports/TSNX/TSNXTransport.py:55
msgid "NX Transport (tunneled)"
msgstr "Trasporto NX (con tunnel)"
#: transports/TSNX/TSNXTransport.py:57
msgid "NX Transport for tunneled connection"
msgstr "Trasporto di NX per connessione con tunnel"
#: web/errors.py:60 #: web/errors.py:60
msgid "Unknown error" msgid "Unknown error"
msgstr "Errore sconosciuto" msgstr "Errore sconosciuto"
@ -1598,6 +1670,10 @@ msgstr ""
msgid "Authenticator do not provides information" msgid "Authenticator do not provides information"
msgstr "Autenticatore do non fornisce informazioni" msgstr "Autenticatore do non fornisce informazioni"
#: web/forms/LoginForm.py:50
msgid "Select authenticator"
msgstr "Selezionare autenticatore"
#: web/forms/LoginForm.py:54 #: web/forms/LoginForm.py:54
msgid "authenticator" msgid "authenticator"
msgstr "autenticatore" msgstr "autenticatore"

View File

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-11-14 11:59+0100\n" "POT-Creation-Date: 2013-11-17 04:21+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -18,70 +18,146 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: static/adm/js/api.js:23 #: static/adm/js/gui-elements.js:7
msgid "Success on \""
msgstr "Successo su\""
#: static/adm/js/api.js:24
msgid "Received "
msgstr "Ricevuto "
#: static/adm/js/gui.js:17
msgid "Display _MENU_ records per page"
msgstr "Visualizzare _MENU_ record per pagina"
#: static/adm/js/gui.js:18
msgid "Nothing found - sorry"
msgstr "Trovato nulla - ci dispiace"
#: static/adm/js/gui.js:19
msgid "Showing record _START_ to _END_ of _TOTAL_"
msgstr "Risultati record _START_ per _END_ di _TOTAL_"
#: static/adm/js/gui.js:20
msgid "Showing 0 to 0 of 0 records"
msgstr "Mostrando 0-0 di 0 record"
#: static/adm/js/gui.js:21
msgid "(filtered from _MAX_ total records)"
msgstr "(filtrato da record totale _MAX_)"
#: static/adm/js/gui.js:22
msgid "Please wait, processing"
msgstr "Attendere prego, elaborazione"
#: static/adm/js/gui.js:23
msgid "Search"
msgstr "Ricerca"
#: static/adm/js/gui.js:26
msgid "First"
msgstr "Primo"
#: static/adm/js/gui.js:27
msgid "Last"
msgstr "Ultima"
#: static/adm/js/gui.js:28
msgid "Next"
msgstr "Prossimo"
#: static/adm/js/gui.js:29
msgid "Previous"
msgstr "Precedente"
#: static/adm/js/gui.js:83
msgid "Connectivity"
msgstr "Connettività"
#: static/adm/js/gui.js:88
msgid "Deployed services"
msgstr "Servizi distribuiti"
#: static/adm/js/gui.js:181
msgid "Service Providers" msgid "Service Providers"
msgstr "Fornitori di servizi" msgstr "Fornitori di servizi"
#: static/adm/js/gui.js:191 #: static/adm/js/gui-elements.js:81
msgid "Authenticators" msgid "Connectivity"
msgstr "Autenticatori" msgstr "Connettività"
#: static/adm/js/gui.js:18
msgid "_MENU_ records per page"
msgstr "Record _MENU_ per pagina"
#: static/adm/js/gui.js:19
msgid "Empty"
msgstr "Vuoto"
#: static/adm/js/gui.js:20
msgid "Records _START_ to _END_ of _TOTAL_"
msgstr "Registra _START_ a _END_ di _TOTAL_"
#: static/adm/js/gui.js:21
msgid "No records"
msgstr "Nessun record"
#: static/adm/js/gui.js:22
msgid "(filtered from _MAX_ total records)"
msgstr "(filtrato da record totale _MAX_)"
#: static/adm/js/gui.js:23
msgid "Please wait, processing"
msgstr "Attendere prego, elaborazione"
#: static/adm/js/gui.js:24
msgid "Filter"
msgstr "Filtro"
#: static/adm/js/gui.js:27
msgid "First"
msgstr "Primo"
#: static/adm/js/gui.js:28
msgid "Last"
msgstr "Ultima"
#: static/adm/js/gui.js:29
msgid "Next"
msgstr "Prossimo"
#: static/adm/js/gui.js:30
msgid "Previous"
msgstr "Precedente"
#: static/adm/js/gui.js:80
msgid "Deployed services"
msgstr "Servizi distribuiti"
#: static/adm/js/gui.js:349
msgid "Edit"
msgstr "Modifica"
#: static/adm/js/gui.js:358
msgid "Delete"
msgstr "Eliminare"
#: static/adm/js/gui.js:367
msgid "Refresh"
msgstr "Aggiornamento"
#: static/adm/js/strftime.js:30
msgid "Sunday"
msgstr "Domenica"
#: static/adm/js/strftime.js:30
msgid "Monday"
msgstr "Lunedì"
#: static/adm/js/strftime.js:30
msgid "Tuesday"
msgstr "Martedì"
#: static/adm/js/strftime.js:31
msgid "Wednesday"
msgstr "Mercoledì"
#: static/adm/js/strftime.js:31
msgid "Thursday"
msgstr "Giovedì"
#: static/adm/js/strftime.js:31
msgid "Friday"
msgstr "Venerdì"
#: static/adm/js/strftime.js:31
msgid "Saturday"
msgstr "Sabato"
#: static/adm/js/strftime.js:32
msgid "January"
msgstr "Gennaio"
#: static/adm/js/strftime.js:32
msgid "February"
msgstr "Febbraio"
#: static/adm/js/strftime.js:32
msgid "March"
msgstr "Marzo"
#: static/adm/js/strftime.js:33
msgid "April"
msgstr "Aprile"
#: static/adm/js/strftime.js:33
msgid "May"
msgstr "Maggio"
#: static/adm/js/strftime.js:33
msgid "June"
msgstr "Giugno"
#: static/adm/js/strftime.js:33
msgid "July"
msgstr "Luglio"
#: static/adm/js/strftime.js:34
msgid "August"
msgstr "Agosto"
#: static/adm/js/strftime.js:34
msgid "September"
msgstr "Settembre"
#: static/adm/js/strftime.js:34
msgid "October"
msgstr "Ottobre"
#: static/adm/js/strftime.js:34
msgid "November"
msgstr "Novembre"
#: static/adm/js/strftime.js:35
msgid "December"
msgstr "Dicembre"

View File

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-11-14 11:59+0100\n" "POT-Creation-Date: 2013-11-17 04:20+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -18,35 +18,86 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: REST/methods/authenticators.py:72 #: REST/methods/authenticators.py:73
msgid "Current authenticators" msgid "Current authenticators"
msgstr "Autenticadores atuais" msgstr "Autenticadores atuais"
#: REST/methods/authenticators.py:74 REST/methods/providers.py:71 #: REST/methods/authenticators.py:75 REST/methods/networks.py:68
#: REST/methods/osmanagers.py:71 REST/methods/providers.py:69
#: REST/methods/transports.py:71 REST/methods/users.py:77
msgid "Name" msgid "Name"
msgstr "Nome" msgstr "Nome"
#: REST/methods/authenticators.py:75 REST/methods/providers.py:72 #: REST/methods/authenticators.py:76 REST/methods/osmanagers.py:72
#: REST/methods/providers.py:70 REST/methods/transports.py:72
#: REST/methods/users.py:78
msgid "Comments" msgid "Comments"
msgstr "Comentários" msgstr "Comentários"
#: REST/methods/authenticators.py:76 #: REST/methods/authenticators.py:77
msgid "Users" msgid "Users"
msgstr "Usuários" msgstr "Usuários"
#: REST/methods/providers.py:69 #: REST/methods/networks.py:66
msgid "Current Networks"
msgstr "Redes atuais"
#: REST/methods/networks.py:69 templates/uds/index.html:79
#: templates/uds/html5/index.html:127
msgid "Networks"
msgstr "Redes"
#: REST/methods/networks.py:70 REST/methods/osmanagers.py:73
#: REST/methods/transports.py:73
msgid "Used by"
msgstr "Usado por"
#: REST/methods/osmanagers.py:69
msgid "Current OS Managers"
msgstr "Atual OS gerentes"
#: REST/methods/providers.py:67
msgid "Current service providers" msgid "Current service providers"
msgstr "Provedores de serviço atual" msgstr "Provedores de serviço atual"
#: REST/methods/providers.py:73 templates/uds/index.html:51 #: REST/methods/providers.py:71 templates/uds/index.html:51
#: templates/uds/html5/index.html:68 #: templates/uds/html5/index.html:68
msgid "Services" msgid "Services"
msgstr "Serviços" msgstr "Serviços"
#: admin/views.py:53 admin/views.py:61 web/views.py:422 #: REST/methods/transports.py:69
msgid "Current Transports"
msgstr "Atuais transportes"
#: REST/methods/users.py:70
#, python-brace-format
msgid "Users of {0}"
msgstr "Usuários de {0}"
#: REST/methods/users.py:72
msgid "Current users"
msgstr "Usuários atuais"
#: REST/methods/users.py:76
msgid "User Id"
msgstr "Id de usuário"
#: REST/methods/users.py:79
msgid "state"
msgstr "Estado"
#: REST/methods/users.py:80
msgid "Last access"
msgstr "Último acesso"
#: admin/views.py:55 admin/views.py:63 admin/views.py:76 web/views.py:422
msgid "Forbidden" msgid "Forbidden"
msgstr "Proibido" msgstr "Proibido"
#: admin/views.py:69
msgid "requested a template that do not exists"
msgstr "solicitado um modelo que não existe"
#: auths/IP/Authenticator.py:48 auths/IP/Authenticator.py:50 #: auths/IP/Authenticator.py:48 auths/IP/Authenticator.py:50
msgid "IP Authenticator" msgid "IP Authenticator"
msgstr "Autenticador IP" msgstr "Autenticador IP"
@ -136,8 +187,9 @@ msgstr "Nome de usuário com privilégios de leitura da base selecionada"
#: osmanagers/WindowsOsManager/WinRandomPassOsManager.py:30 #: osmanagers/WindowsOsManager/WinRandomPassOsManager.py:30
#: services/OVirt/OVirtProvider.py:94 services/Sample/SampleService.py:131 #: services/OVirt/OVirtProvider.py:94 services/Sample/SampleService.py:131
#: transports/HTML5RDP/HTML5RDP.py:65 transports/NX/NXTransport.py:62 #: transports/HTML5RDP/HTML5RDP.py:65 transports/NX/NXTransport.py:62
#: transports/RDP/RDPTransport.py:60 transports/RDP/TSRDPTransport.py:64 #: transports/NX/TSNXTransport.py:67 transports/RDP/RDPTransport.py:60
#: transports/TSNX/TSNXTransport.py:67 web/forms/LoginForm.py:70 #: transports/RDP/TSRDPTransport.py:64 transports/TSNX/TSNXTransport.py:67
#: web/forms/LoginForm.py:70
msgid "Password" msgid "Password"
msgstr "Senha" msgstr "Senha"
@ -206,9 +258,9 @@ msgstr "Autenticador de LDAP de expressões regular"
#: auths/RegexLdap/Authenticator.py:72 auths/SimpleLDAP/Authenticator.py:73 #: auths/RegexLdap/Authenticator.py:72 auths/SimpleLDAP/Authenticator.py:73
#: services/OVirt/OVirtProvider.py:93 transports/HTML5RDP/HTML5RDP.py:64 #: services/OVirt/OVirtProvider.py:93 transports/HTML5RDP/HTML5RDP.py:64
#: transports/NX/NXTransport.py:61 transports/RDP/RDPTransport.py:59 #: transports/NX/NXTransport.py:61 transports/NX/TSNXTransport.py:66
#: transports/RDP/TSRDPTransport.py:63 transports/TSNX/TSNXTransport.py:66 #: transports/RDP/RDPTransport.py:59 transports/RDP/TSRDPTransport.py:63
#: web/forms/LoginForm.py:69 #: transports/TSNX/TSNXTransport.py:66 web/forms/LoginForm.py:69
msgid "Username" msgid "Username"
msgstr "Nome de usuário" msgstr "Nome de usuário"
@ -1061,10 +1113,6 @@ msgstr "e reinicie o navegador"
msgid "Ip" msgid "Ip"
msgstr "IP" msgstr "IP"
#: templates/uds/index.html:79 templates/uds/html5/index.html:127
msgid "Networks"
msgstr "Redes"
#: templates/uds/index.html:80 templates/uds/html5/index.html:128 #: templates/uds/index.html:80 templates/uds/html5/index.html:128
msgid "Transports" msgid "Transports"
msgstr "Transportes" msgstr "Transportes"
@ -1121,35 +1169,44 @@ msgstr ""
msgid "toggle navigation" msgid "toggle navigation"
msgstr "navegação toggle" msgstr "navegação toggle"
#: templates/uds/admin/snippets/navbar.html:17 #: templates/uds/admin/snippets/navbar.html:18
msgid "Service providers" msgid "Service providers"
msgstr "Prestadores de serviços" msgstr "Prestadores de serviços"
#: templates/uds/admin/snippets/navbar.html:18 #: templates/uds/admin/snippets/navbar.html:19
#: templates/uds/admin/tmpl/authenticators.html:4
msgid "Authenticators" msgid "Authenticators"
msgstr "Autenticadores" msgstr "Autenticadores"
#: templates/uds/admin/snippets/navbar.html:20 #: templates/uds/admin/snippets/navbar.html:21
msgid "Connectivity" msgid "Connectivity"
msgstr "Conectividade" msgstr "Conectividade"
#: templates/uds/admin/snippets/navbar.html:21 #: templates/uds/admin/snippets/navbar.html:22
msgid "Deployed services" msgid "Deployed services"
msgstr "Serviços implantados" msgstr "Serviços implantados"
#: templates/uds/admin/snippets/navbar.html:25 #: templates/uds/admin/snippets/navbar.html:26
msgid "Configuration" msgid "Configuration"
msgstr "Configuração" msgstr "Configuração"
#: templates/uds/admin/snippets/navbar.html:57 #: templates/uds/admin/snippets/navbar.html:56
msgid "Exit dashboard" msgid "Exit dashboard"
msgstr "Painel de saída" msgstr "Painel de saída"
#: templates/uds/admin/snippets/navbar.html:58 #: templates/uds/admin/snippets/navbar.html:57
#: templates/uds/html5/snippets/navbar.html:47 #: templates/uds/html5/snippets/navbar.html:47
msgid "logout" msgid "logout"
msgstr "logout" msgstr "logout"
#: templates/uds/admin/tmpl/authenticators.html:4
msgid "administration of authenticators"
msgstr "Administração de autenticadores"
#: templates/uds/admin/tmpl/dashboard.html:4
msgid "overview"
msgstr "Visão geral"
#: templates/uds/html5/detectJava.html:4 #: templates/uds/html5/detectJava.html:4
msgid "Login redirection to UDS" msgid "Login redirection to UDS"
msgstr "Redirecionamento de login para UDS" msgstr "Redirecionamento de login para UDS"
@ -1241,7 +1298,7 @@ msgstr "Sobre"
msgid "Dashboard" msgid "Dashboard"
msgstr "Painel de controle" msgstr "Painel de controle"
#: templates/uds/html5/templates/base.html:51 #: templates/uds/html5/templates/base.html:52
msgid "" msgid ""
"Your browser is supported only partially. Please, upgrade it to a modern " "Your browser is supported only partially. Please, upgrade it to a modern "
"html5 browser like Firefox, Chrome, Opera, ... (IE must be 10 or better)" "html5 browser like Firefox, Chrome, Opera, ... (IE must be 10 or better)"
@ -1279,27 +1336,27 @@ msgstr ""
"accesible de usuários" "accesible de usuários"
#: transports/HTML5RDP/HTML5RDP.py:63 transports/NX/NXTransport.py:60 #: transports/HTML5RDP/HTML5RDP.py:63 transports/NX/NXTransport.py:60
#: transports/RDP/RDPTransport.py:58 transports/RDP/TSRDPTransport.py:62 #: transports/NX/TSNXTransport.py:65 transports/RDP/RDPTransport.py:58
#: transports/TSNX/TSNXTransport.py:65 #: transports/RDP/TSRDPTransport.py:62 transports/TSNX/TSNXTransport.py:65
msgid "Empty creds" msgid "Empty creds"
msgstr "Creds vazio" msgstr "Creds vazio"
#: transports/HTML5RDP/HTML5RDP.py:63 transports/NX/NXTransport.py:60 #: transports/HTML5RDP/HTML5RDP.py:63 transports/NX/NXTransport.py:60
#: transports/RDP/RDPTransport.py:58 transports/RDP/TSRDPTransport.py:62 #: transports/NX/TSNXTransport.py:65 transports/RDP/RDPTransport.py:58
#: transports/TSNX/TSNXTransport.py:65 #: transports/RDP/TSRDPTransport.py:62 transports/TSNX/TSNXTransport.py:65
msgid "If checked, the credentials used to connect will be emtpy" msgid "If checked, the credentials used to connect will be emtpy"
msgstr "Se marcada, as credenciais usadas para se conectar será vazio" msgstr "Se marcada, as credenciais usadas para se conectar será vazio"
#: transports/HTML5RDP/HTML5RDP.py:64 transports/NX/NXTransport.py:61 #: transports/HTML5RDP/HTML5RDP.py:64 transports/NX/NXTransport.py:61
#: transports/RDP/RDPTransport.py:59 transports/RDP/TSRDPTransport.py:63 #: transports/NX/TSNXTransport.py:66 transports/RDP/RDPTransport.py:59
#: transports/TSNX/TSNXTransport.py:66 #: transports/RDP/TSRDPTransport.py:63 transports/TSNX/TSNXTransport.py:66
msgid "If not empty, this username will be always used as credential" msgid "If not empty, this username will be always used as credential"
msgstr "" msgstr ""
"Se não for vazio, este nome de utilizador será sempre usado como credencial" "Se não for vazio, este nome de utilizador será sempre usado como credencial"
#: transports/HTML5RDP/HTML5RDP.py:65 transports/NX/NXTransport.py:62 #: transports/HTML5RDP/HTML5RDP.py:65 transports/NX/NXTransport.py:62
#: transports/RDP/RDPTransport.py:60 transports/RDP/TSRDPTransport.py:64 #: transports/NX/TSNXTransport.py:67 transports/RDP/RDPTransport.py:60
#: transports/TSNX/TSNXTransport.py:67 #: transports/RDP/TSRDPTransport.py:64 transports/TSNX/TSNXTransport.py:67
msgid "If not empty, this password will be always used as credential" msgid "If not empty, this password will be always used as credential"
msgstr "Se não for vazio, essa senha será sempre usada como credencial" msgstr "Se não for vazio, essa senha será sempre usada como credencial"
@ -1352,46 +1409,97 @@ msgstr "Transporte NX (direto)"
msgid "NX Transport for direct connection" msgid "NX Transport for direct connection"
msgstr "Transporte de NX para conexão direta" msgstr "Transporte de NX para conexão direta"
#: transports/NX/NXTransport.py:63 transports/TSNX/TSNXTransport.py:68 #: transports/NX/NXTransport.py:63 transports/NX/TSNXTransport.py:68
#: transports/TSNX/TSNXTransport.py:68
msgid "Listen port" msgid "Listen port"
msgstr "Porta" msgstr "Porta"
#: transports/NX/NXTransport.py:63 transports/TSNX/TSNXTransport.py:68 #: transports/NX/NXTransport.py:63 transports/NX/TSNXTransport.py:68
#: transports/TSNX/TSNXTransport.py:68
msgid "Listening port of NX (ssh) at client machine" msgid "Listening port of NX (ssh) at client machine"
msgstr "Ouvindo a porta do NX (ssh) na máquina cliente" msgstr "Ouvindo a porta do NX (ssh) na máquina cliente"
#: transports/NX/NXTransport.py:64 transports/TSNX/TSNXTransport.py:69 #: transports/NX/NXTransport.py:64 transports/NX/TSNXTransport.py:69
#: transports/TSNX/TSNXTransport.py:69
msgid "Connection" msgid "Connection"
msgstr "Conexão" msgstr "Conexão"
#: transports/NX/NXTransport.py:64 transports/TSNX/TSNXTransport.py:69 #: transports/NX/NXTransport.py:64 transports/NX/TSNXTransport.py:69
#: transports/TSNX/TSNXTransport.py:69
msgid "Connection speed for this transport (quality)" msgid "Connection speed for this transport (quality)"
msgstr "Velocidade de conexão para esse transporte (qualidade)" msgstr "Velocidade de conexão para esse transporte (qualidade)"
#: transports/NX/NXTransport.py:71 transports/TSNX/TSNXTransport.py:76 #: transports/NX/NXTransport.py:71 transports/NX/TSNXTransport.py:76
#: transports/TSNX/TSNXTransport.py:76
msgid "Session" msgid "Session"
msgstr "Sessão" msgstr "Sessão"
#: transports/NX/NXTransport.py:71 transports/TSNX/TSNXTransport.py:76 #: transports/NX/NXTransport.py:71 transports/NX/TSNXTransport.py:76
#: transports/TSNX/TSNXTransport.py:76
msgid "Desktop session" msgid "Desktop session"
msgstr "Sessão de desktop" msgstr "Sessão de desktop"
#: transports/NX/NXTransport.py:76 transports/TSNX/TSNXTransport.py:81 #: transports/NX/NXTransport.py:76 transports/NX/TSNXTransport.py:81
#: transports/TSNX/TSNXTransport.py:81
msgid "Disk Cache" msgid "Disk Cache"
msgstr "Cache de disco" msgstr "Cache de disco"
#: transports/NX/NXTransport.py:76 transports/TSNX/TSNXTransport.py:81 #: transports/NX/NXTransport.py:76 transports/NX/TSNXTransport.py:81
#: transports/TSNX/TSNXTransport.py:81
msgid "Cache size en Mb stored at disk" msgid "Cache size en Mb stored at disk"
msgstr "Pt-br tamanho que MB armazenado no disco em cache" msgstr "Pt-br tamanho que MB armazenado no disco em cache"
#: transports/NX/NXTransport.py:84 transports/TSNX/TSNXTransport.py:89 #: transports/NX/NXTransport.py:84 transports/NX/TSNXTransport.py:89
#: transports/TSNX/TSNXTransport.py:89
msgid "Memory Cache" msgid "Memory Cache"
msgstr "Memória Cache" msgstr "Memória Cache"
#: transports/NX/NXTransport.py:84 transports/TSNX/TSNXTransport.py:89 #: transports/NX/NXTransport.py:84 transports/NX/TSNXTransport.py:89
#: transports/TSNX/TSNXTransport.py:89
msgid "Cache size en Mb keept at memory" msgid "Cache size en Mb keept at memory"
msgstr "Cache tamanho en Mb keept na memória" msgstr "Cache tamanho en Mb keept na memória"
#: transports/NX/TSNXTransport.py:55 transports/TSNX/TSNXTransport.py:55
msgid "NX Transport (tunneled)"
msgstr "Transporte NX (um túnel)"
#: transports/NX/TSNXTransport.py:57 transports/TSNX/TSNXTransport.py:57
msgid "NX Transport for tunneled connection"
msgstr "Transporte de NX para ligação em túnel"
#: transports/NX/TSNXTransport.py:62 transports/RDP/TSRDPTransport.py:59
#: transports/TSNX/TSNXTransport.py:62
msgid "Tunnel server"
msgstr "Servidor de túnel"
#: transports/NX/TSNXTransport.py:62 transports/RDP/TSRDPTransport.py:59
#: transports/TSNX/TSNXTransport.py:62
msgid ""
"IP or Hostname of tunnel server send to client device (\"public\" ip) and "
"port. (use HOST:PORT format)"
msgstr ""
"IP ou nome do host do servidor de túnel enviar para dispositivo cliente (ip "
"\"público\") e Port. (usar formato HOST: PORT)"
#: transports/NX/TSNXTransport.py:63 transports/RDP/TSRDPTransport.py:60
#: transports/TSNX/TSNXTransport.py:63
msgid "Tunnel host check"
msgstr "Seleção de anfitrião do túnel"
#: transports/NX/TSNXTransport.py:63 transports/RDP/TSRDPTransport.py:60
#: transports/TSNX/TSNXTransport.py:63
msgid ""
"If not empty, this server will be used to check if service is running before "
"assigning it to user. (use HOST:PORT format)"
msgstr ""
"Se não for vazio, este servidor será usado para verificar se o serviço está "
"sendo executado antes atribuí-la ao usuário. (usar formato HOST: PORT)"
#: transports/NX/TSNXTransport.py:103 transports/RDP/TSRDPTransport.py:75
#: transports/TSNX/TSNXTransport.py:103
msgid "Must use HOST:PORT in Tunnel Server Field"
msgstr "Deve usar HOST: PORT no campo servidor de túnel"
#: transports/NX/__init__.py:45 transports/TSNX/__init__.py:44 #: transports/NX/__init__.py:45 transports/TSNX/__init__.py:44
msgid "NX Protocol" msgid "NX Protocol"
msgstr "Protocolo NX" msgstr "Protocolo NX"
@ -1481,34 +1589,6 @@ msgstr "Transporte de RDP (um túnel)"
msgid "RDP Transport for tunneled connection" msgid "RDP Transport for tunneled connection"
msgstr "Transporte de RDP para ligação em túnel" msgstr "Transporte de RDP para ligação em túnel"
#: transports/RDP/TSRDPTransport.py:59 transports/TSNX/TSNXTransport.py:62
msgid "Tunnel server"
msgstr "Servidor de túnel"
#: transports/RDP/TSRDPTransport.py:59 transports/TSNX/TSNXTransport.py:62
msgid ""
"IP or Hostname of tunnel server send to client device (\"public\" ip) and "
"port. (use HOST:PORT format)"
msgstr ""
"IP ou nome do host do servidor de túnel enviar para dispositivo cliente (ip "
"\"público\") e Port. (usar formato HOST: PORT)"
#: transports/RDP/TSRDPTransport.py:60 transports/TSNX/TSNXTransport.py:63
msgid "Tunnel host check"
msgstr "Seleção de anfitrião do túnel"
#: transports/RDP/TSRDPTransport.py:60 transports/TSNX/TSNXTransport.py:63
msgid ""
"If not empty, this server will be used to check if service is running before "
"assigning it to user. (use HOST:PORT format)"
msgstr ""
"Se não for vazio, este servidor será usado para verificar se o serviço está "
"sendo executado antes atribuí-la ao usuário. (usar formato HOST: PORT)"
#: transports/RDP/TSRDPTransport.py:75 transports/TSNX/TSNXTransport.py:103
msgid "Must use HOST:PORT in Tunnel Server Field"
msgstr "Deve usar HOST: PORT no campo servidor de túnel"
#: transports/RDP/__init__.py:39 #: transports/RDP/__init__.py:39
msgid "Remote Desktop Protocol" msgid "Remote Desktop Protocol"
msgstr "Protocolo de área de trabalho remoto" msgstr "Protocolo de área de trabalho remoto"
@ -1525,14 +1605,6 @@ msgstr "Você pode obtê-lo de"
msgid "CoRD Website" msgid "CoRD Website"
msgstr "Site medula" msgstr "Site medula"
#: transports/TSNX/TSNXTransport.py:55
msgid "NX Transport (tunneled)"
msgstr "Transporte NX (um túnel)"
#: transports/TSNX/TSNXTransport.py:57
msgid "NX Transport for tunneled connection"
msgstr "Transporte de NX para ligação em túnel"
#: web/errors.py:60 #: web/errors.py:60
msgid "Unknown error" msgid "Unknown error"
msgstr "Erro desconhecido" msgstr "Erro desconhecido"
@ -1595,6 +1667,10 @@ msgstr ""
msgid "Authenticator do not provides information" msgid "Authenticator do not provides information"
msgstr "Autenticador que não fornece informações" msgstr "Autenticador que não fornece informações"
#: web/forms/LoginForm.py:50
msgid "Select authenticator"
msgstr "Selecione o autenticador"
#: web/forms/LoginForm.py:54 #: web/forms/LoginForm.py:54
msgid "authenticator" msgid "authenticator"
msgstr "autenticador" msgstr "autenticador"

View File

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-11-14 11:59+0100\n" "POT-Creation-Date: 2013-11-17 04:21+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -18,70 +18,146 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: static/adm/js/api.js:23 #: static/adm/js/gui-elements.js:7
msgid "Success on \""
msgstr "Sucesso na\""
#: static/adm/js/api.js:24
msgid "Received "
msgstr "Recebido "
#: static/adm/js/gui.js:17
msgid "Display _MENU_ records per page"
msgstr "Exibir _MENU_ de registros por página"
#: static/adm/js/gui.js:18
msgid "Nothing found - sorry"
msgstr "Nada foi encontrado - Desculpe"
#: static/adm/js/gui.js:19
msgid "Showing record _START_ to _END_ of _TOTAL_"
msgstr "Mostrando registro _START_ para _END_ de _TOTAL_"
#: static/adm/js/gui.js:20
msgid "Showing 0 to 0 of 0 records"
msgstr "Mostrando 0 a 0 de 0 registros"
#: static/adm/js/gui.js:21
msgid "(filtered from _MAX_ total records)"
msgstr "(filtrada de registros total de _MAX_)"
#: static/adm/js/gui.js:22
msgid "Please wait, processing"
msgstr "Aguarde, processamento"
#: static/adm/js/gui.js:23
msgid "Search"
msgstr "Pesquisa"
#: static/adm/js/gui.js:26
msgid "First"
msgstr "Primeiro"
#: static/adm/js/gui.js:27
msgid "Last"
msgstr "Última"
#: static/adm/js/gui.js:28
msgid "Next"
msgstr "Próxima"
#: static/adm/js/gui.js:29
msgid "Previous"
msgstr "Anterior"
#: static/adm/js/gui.js:83
msgid "Connectivity"
msgstr "Conectividade"
#: static/adm/js/gui.js:88
msgid "Deployed services"
msgstr "Serviços implantados"
#: static/adm/js/gui.js:181
msgid "Service Providers" msgid "Service Providers"
msgstr "Prestadores de serviços" msgstr "Prestadores de serviços"
#: static/adm/js/gui.js:191 #: static/adm/js/gui-elements.js:81
msgid "Authenticators" msgid "Connectivity"
msgstr "Autenticadores" msgstr "Conectividade"
#: static/adm/js/gui.js:18
msgid "_MENU_ records per page"
msgstr "Registros _MENU_ por página"
#: static/adm/js/gui.js:19
msgid "Empty"
msgstr "Vazio"
#: static/adm/js/gui.js:20
msgid "Records _START_ to _END_ of _TOTAL_"
msgstr "Registros _START_ para _END_ de _TOTAL_"
#: static/adm/js/gui.js:21
msgid "No records"
msgstr "Não há registros"
#: static/adm/js/gui.js:22
msgid "(filtered from _MAX_ total records)"
msgstr "(filtrada de registros total de _MAX_)"
#: static/adm/js/gui.js:23
msgid "Please wait, processing"
msgstr "Aguarde, processamento"
#: static/adm/js/gui.js:24
msgid "Filter"
msgstr "Filtro"
#: static/adm/js/gui.js:27
msgid "First"
msgstr "Primeiro"
#: static/adm/js/gui.js:28
msgid "Last"
msgstr "Última"
#: static/adm/js/gui.js:29
msgid "Next"
msgstr "Próxima"
#: static/adm/js/gui.js:30
msgid "Previous"
msgstr "Anterior"
#: static/adm/js/gui.js:80
msgid "Deployed services"
msgstr "Serviços implantados"
#: static/adm/js/gui.js:349
msgid "Edit"
msgstr "Editar"
#: static/adm/js/gui.js:358
msgid "Delete"
msgstr "Excluir"
#: static/adm/js/gui.js:367
msgid "Refresh"
msgstr "Atualização"
#: static/adm/js/strftime.js:30
msgid "Sunday"
msgstr "Domingo"
#: static/adm/js/strftime.js:30
msgid "Monday"
msgstr "Segunda-feira"
#: static/adm/js/strftime.js:30
msgid "Tuesday"
msgstr "Terça-feira"
#: static/adm/js/strftime.js:31
msgid "Wednesday"
msgstr "Quarta-feira"
#: static/adm/js/strftime.js:31
msgid "Thursday"
msgstr "Quinta-feira"
#: static/adm/js/strftime.js:31
msgid "Friday"
msgstr "Sexta-feira"
#: static/adm/js/strftime.js:31
msgid "Saturday"
msgstr "Sábado"
#: static/adm/js/strftime.js:32
msgid "January"
msgstr "Janeiro de"
#: static/adm/js/strftime.js:32
msgid "February"
msgstr "Fevereiro"
#: static/adm/js/strftime.js:32
msgid "March"
msgstr "Março de"
#: static/adm/js/strftime.js:33
msgid "April"
msgstr "Abril"
#: static/adm/js/strftime.js:33
msgid "May"
msgstr "Maio"
#: static/adm/js/strftime.js:33
msgid "June"
msgstr "Junho de"
#: static/adm/js/strftime.js:33
msgid "July"
msgstr "Julho"
#: static/adm/js/strftime.js:34
msgid "August"
msgstr "Agosto"
#: static/adm/js/strftime.js:34
msgid "September"
msgstr "Setembro"
#: static/adm/js/strftime.js:34
msgid "October"
msgstr "Outubro"
#: static/adm/js/strftime.js:34
msgid "November"
msgstr "Novembro"
#: static/adm/js/strftime.js:35
msgid "December"
msgstr "Dezembro de"

View File

@ -1,140 +1,138 @@
(function(api, $, undefined) { (function(api, $, undefined) {
// "public" methods // "public" methods
api.doLog = function(data) { api.doLog = function(data) {
if( api.debug ) { if (api.debug) {
try { try {
console.log(data); console.log(data);
} catch (e) { } catch (e) {
// nothing can be logged // nothing can be logged
} }
} }
} };
api.getJson = function (path, success_fnc) { api.getJson = function(path, success_fnc) {
url = api.url_for(path) url = api.url_for(path);
api.doLog('Ajax GET Json for "' + url + '"'); api.doLog('Ajax GET Json for "' + url + '"');
$.ajax({ $.ajax({
url: url, url : url,
type: "GET", type : "GET",
dataType: "json", dataType : "json",
success: function(data) { success : function(data) {
api.doLog('Success on "' + url + '".'); api.doLog('Success on "' + url + '".');
api.doLog('Received ' + JSON.stringify(data)); api.doLog('Received ' + JSON.stringify(data));
if( success_fnc != undefined ){ if (success_fnc !== undefined) {
api.doLog('Executing success method') api.doLog('Executing success method');
success_fnc(data); success_fnc(data);
} }
}, },
beforeSend: function (request) { beforeSend : function(request) {
request.setRequestHeader(api.auth_header, api.token); request.setRequestHeader(api.auth_header, api.token);
}, },
}); });
}; };
// Public attributes // Public attributes
api.debug = false; api.debug = false;
}(window.api = window.api || {}, jQuery)); }(window.api = window.api || {}, jQuery));
// Great part of UDS REST api provides same methods. // Great part of UDS REST api provides same methods.
// We will take advantage of this and save a lot of nonsense, prone to failure code :-) // We will take advantage of this and save a lot of nonsense, prone to failure
// code :-)
function BasicModelRest(path) { function BasicModelRest(path) {
this.path = path || ""; this.path = path || "";
this.cached_types = undefined; this.cached_types = undefined;
this.cached_tableInfo = undefined; this.cached_tableInfo = undefined;
} }
BasicModelRest.prototype = { BasicModelRest.prototype = {
get: function(options, alternate_url) { get : function(options, alternate_url) {
if( options == undefined ){ if (options === undefined) {
options = {}; options = {};
} }
var path = alternate_url || this.path; var path = alternate_url || this.path;
if( options.id != undefined ) if (options.id !== undefined)
path += '/' + options.id; path += '/' + options.id;
api.getJson(path, options.success); api.getJson(path, options.success);
}, },
types: function(success_fnc, alternate_url) { types : function(success_fnc, alternate_url) {
// Cache types locally, will not change unless new broker version // Cache types locally, will not change unless new broker version
if( this.cached_types ) { if (this.cached_types) {
if( success_fnc ) { if (success_fnc) {
success_fnc(this.cached_types); success_fnc(this.cached_types);
} }
} } else {
else { var $this = this;
var $this = this; var path = this.path + '/types';
var path = this.path + '/types'; if (alternate_url !== undefined)
if( alternate_url != undefined ) path = alternate_url;
path = alternate_url; api.getJson(path, function(data) {
api.getJson( path, function(data) { $this.cached_types = data;
$this.cached_types = data; if (success_fnc) {
if( success_fnc ) { success_fnc($this.cached_types);
success_fnc($this.cached_types); }
} });
}); }
} },
},
tableInfo : function(success_fnc, alternate_url) {
tableInfo: function(success_fnc, alternate_url) { // Cache types locally, will not change unless new broker version
// Cache types locally, will not change unless new broker version if (this.cached_tableInfo) {
if( this.cached_tableInfo ) { if (success_fnc) {
if( success_fnc ) { success_fnc(this.cached_tableInfo);
success_fnc(this.cached_tableInfo); }
} return;
return; }
} var $this = this;
var $this = this; var path = this.path + '/tableinfo';
var path = this.path + '/tableinfo'; if (alternate_url !== undefined)
if( alternate_url != undefined ) path = alternate_url;
path = alternate_url;
api.getJson(path, function(data) {
api.getJson( path, function(data) { $this.cached_tableInfo = data;
$this.cached_tableInfo = data; if (success_fnc) {
if( success_fnc ) { success_fnc($this.cached_tableInfo);
success_fnc($this.cached_tableInfo); }
} });
});
},
},
}; };
// For REST of type /auth/[id]/users, /services/[id]/users, ... // For REST of type /auth/[id]/users, /services/[id]/users, ...
function DetailModelRestApi(parentApi, path) { function DetailModelRestApi(parentApi, path) {
this.parentPath = parentApi.path; this.parentPath = parentApi.path;
this.path = path; this.path = path;
} }
DetailModelRestApi.prototype = { DetailModelRestApi.prototype = {
// Generates a basic model with fixed methods for "detail" models // Generates a basic model with fixed methods for "detail" models
detail: function(parentId) { detail : function(parentId) {
var $this = this; var $this = this;
var rest = new BasicModelRest(this.parentPath + '/' + parentId + '/' + this.path); var rest = new BasicModelRest(this.parentPath + '/' + parentId + '/' + this.path);
// Overwrite types, detail do not have types
rest.types = function() {
return []; // No types at all
}
// And overwrite tableInfo
var parentTableInfo = rest.tableInfo;
rest.tableInfo = function(success_fnc, alternate_url) {
if( alternate_url == undefined )
alternate_url = $this.parentPath + '/tableinfo/' + parentId + '/' + $this.path;
parentTableInfo( success_fnc, alternate_url )
}
return rest;
}
};
// Overwrite types, detail do not have types
rest.types = function() {
return []; // No types at all
};
// And overwrite tableInfo
var parentTableInfo = rest.tableInfo;
rest.tableInfo = function(success_fnc, alternate_url) {
if (alternate_url === undefined)
alternate_url = $this.parentPath + '/tableinfo/' + parentId + '/' + $this.path;
parentTableInfo(success_fnc, alternate_url);
};
return rest;
}
};
// Populate api // Populate api
api.providers = new BasicModelRest('providers'); api.providers = new BasicModelRest('providers');
//api.services = new BasicModelRest('services'); // api.services = new BasicModelRest('services');
api.authenticators = new BasicModelRest('authenticators'); api.authenticators = new BasicModelRest('authenticators');
api.authenticators.users = new DetailModelRestApi(api.authenticators, 'users'); api.authenticators.users = new DetailModelRestApi(api.authenticators, 'users');
@ -142,64 +140,69 @@ api.osmanagers = new BasicModelRest('osmanagers');
api.transports = new BasicModelRest('transports'); api.transports = new BasicModelRest('transports');
api.networks = new BasicModelRest('networks'); api.networks = new BasicModelRest('networks');
// Locale related
api.locale = new BasicModelRest('locale');
api.locale.tableInfo = api.locale.types = undefined;
// ------------------------------- // -------------------------------
// Templates related // Templates related
// This is not part of REST api provided by UDS, but it's part of the api needed for the admin app // This is not part of REST api provided by UDS, but it's part of the api needed
// for the admin app
// ------------------------------- // -------------------------------
(function(templates, $){ (function(templates, $) {
templates.cache = {}; // Will cache templates locally. If name contains '?', data will not be cached and always re-requested templates.cache = {}; // Will cache templates locally. If name contains
templates.get = function(name, success_fnc) { // '?', data will not be cached and always
if( !name.contains('?') ) { // re-requested
if( templates.cache[name] != undefined ) { templates.get = function(name, success_fnc) {
if( success_fnc != undefined ) { api.doLog('Getting tempkate ' + name);
success_fnc(templates.cache[name]); if (name.indexOf('?') != -1) {
} if (templates.cache[name] !== undefined) {
return; if (success_fnc !== undefined) {
} success_fnc(templates.cache[name]);
} }
$.ajax({ return;
url: '/adm/tmpl/' + name, }
type: "GET", }
dataType: "text", $.ajax({
success: function(data) { url : '/adm/tmpl/' + name,
templates.cache[name] = data; type : "GET",
api.doLog('Success getting template "' + name + '".'); dataType : "text",
api.doLog('Received: ' + data); success : function(data) {
if( success_fnc != undefined ){ templates.cache[name] = data;
api.doLog('Executing success method') api.doLog('Success getting template "' + name + '".');
success_fnc(data); api.doLog('Received: ' + data);
} if (success_fnc !== undefined) {
}, api.doLog('Executing success method');
}); success_fnc(data);
}; }
},
// Simple JavaScript Templating fail: function( jqXHR, textStatus, errorThrown ) {
// Based on John Resig - http://ejohn.org/ - MIT Licensed api.doLog(jqXHR);
templates.eval = function tmpl(str, data){ api.doLog(textStatus);
// Figure out if we're getting a template, or if we need to apid.doLog(errorThrown);
// load the template - and be sure to cache the result. },
var fn = });
// Generate a reusable function that will serve as a template };
// generator (and which will be cached).
new Function("obj", // Simple JavaScript Templating
"var p=[],print=function(){p.push.apply(p,arguments);};" + // Based on John Resig - http://ejohn.org/ - MIT Licensed
templates.evaluate = function tmpl(str, data) {
// Introduce the data as local variables using with(){} // Figure out if we're getting a template, or if we need to
"with(obj){p.push('" + // load the template - and be sure to cache the result.
var fn =
// Convert the template into pure JavaScript // Generate a reusable function that will serve as a template
str // generator (and which will be cached).
.replace(/[\r\t\n]/g, " ") new Function("obj", "var p=[],print=function(){p.push.apply(p,arguments);};" +
.split("<%").join("\t")
.replace(/((^|%>)[^\t]*)'/g, "$1\r") // Introduce the data as local variables using with(){}
.replace(/\t=(.*?)%>/g, "',$1,'") "with(obj){p.push('" +
.split("\t").join("');")
.split("%>").join("p.push('") // Convert the template into pure JavaScript
.split("\r").join("\\'") str.replace(/[\r\t\n]/g, " ").split("<%").join("\t").replace(/((^|%>)[^\t]*)'/g, "$1\r").replace(
+ "');}return p.join('');"); /\t=(.*?)%>/g, "',$1,'").split("\t").join("');").split("%>").join("p.push('").split("\r").join(
"\\'") + "');}return p.join('');");
// Provide some basic currying to the user
return data ? fn( data ) : fn; // Provide some basic currying to the user
}; return data ? fn(data) : fn;
};
}(api.templates = api.templates || {}, jQuery)); }(api.templates = api.templates || {}, jQuery));

View File

@ -1,22 +1,22 @@
// Compose gui elements // Compose gui elements
// Service providers // Service providers
gui.providers = new GuiElement(api.providers, 'provi'); gui.providers = new GuiElement(api.providers, 'provi');
gui.providers.link = function(event) { gui.providers.link = function(event) {
gui.clearWorkspace(); gui.clearWorkspace();
gui.appendToWorkspace(gui.breadcrumbs(gettext('Service Providers'))); gui.appendToWorkspace(gui.breadcrumbs(gettext('Service Providers')));
var tableId = gui.providers.table({ var tableId = gui.providers.table({
rowSelect: 'multi', rowSelect : 'multi',
rowSelectFnc: function(nodes){ rowSelectFnc : function(nodes) {
gui.doLog(nodes); gui.doLog(nodes);
gui.doLog(this); gui.doLog(this);
gui.doLog(this.fnGetSelectedData()); gui.doLog(this.fnGetSelectedData());
}, },
buttons: ['edit', 'refresh', 'delete'], buttons : [ 'edit', 'refresh', 'delete' ],
}); });
return false; return false;
}; };
// --------------.. // --------------..
@ -25,63 +25,71 @@ gui.providers.link = function(event) {
gui.authenticators = new GuiElement(api.authenticators, 'auth'); gui.authenticators = new GuiElement(api.authenticators, 'auth');
gui.authenticators.link = function(event) { gui.authenticators.link = function(event) {
api.templates.get('authenticators', function(tmpl){ gui.doLog('enter auths');
gui.clearWorkspace(); api.templates.get('authenticators', function(tmpl) {
gui.appendToWorkspace(api.templates.eval(tmpl, { auths: 'auths-placeholder', users: 'users-placeholder' })); gui.clearWorkspace();
gui.setLinksEvents(); gui.appendToWorkspace(api.templates.evaluate(tmpl, {
auths : 'auths-placeholder',
gui.authenticators.table({ users : 'users-placeholder'
container: 'auths-placeholder', }));
rowSelect: 'single', gui.setLinksEvents();
buttons: ['edit', 'refresh', 'delete'],
rowSelectFnc: function(nodes){ gui.authenticators.table({
var id = this.fnGetSelectedData()[0].id; container : 'auths-placeholder',
var user = new GuiElement(api.authenticators.users.detail(id), 'users'); rowSelect : 'single',
user.table({ buttons : [ 'edit', 'refresh', 'delete' ],
container: 'users-placeholder', onRowSelect : function(nodes) {
rowSelect: 'multi', var id = this.fnGetSelectedData()[0].id;
buttons: ['edit', 'refresh', 'delete'], var user = new GuiElement(api.authenticators.users.detail(id), 'users');
scroll: true, user.table({
}); container : 'users-placeholder',
return false; rowSelect : 'multi',
}, buttons : [ 'edit', 'refresh', 'delete' ],
}); scroll : true,
}); });
return false;
return false; },
onRefresh : function() {
$('#users-placeholder').empty(); // Remove detail on parent refresh
},
});
});
return false;
}; };
gui.osmanagers = new GuiElement(api.osmanagers, 'osm'); gui.osmanagers = new GuiElement(api.osmanagers, 'osm');
gui.osmanagers.link = function(event) { gui.osmanagers.link = function(event) {
gui.clearWorkspace(); gui.clearWorkspace();
gui.appendToWorkspace(gui.breadcrumbs('Os Managers')); gui.appendToWorkspace(gui.breadcrumbs('Os Managers'));
gui.osmanagers.table({ gui.osmanagers.table({
rowSelect: 'single', rowSelect : 'single',
buttons: ['edit', 'refresh', 'delete'], buttons : [ 'edit', 'refresh', 'delete' ],
}); });
return false; return false;
}; };
gui.connectivity = { gui.connectivity = {
transports: new GuiElement(api.transports, 'trans'), transports : new GuiElement(api.transports, 'trans'),
networks: new GuiElement(api.networks, 'nets'), networks : new GuiElement(api.networks, 'nets'),
}; };
gui.connectivity.link = function(event) { gui.connectivity.link = function(event) {
gui.clearWorkspace(); gui.clearWorkspace();
gui.appendToWorkspace(gui.breadcrumbs(gettext('Connectivity'))); gui.appendToWorkspace(gui.breadcrumbs(gettext('Connectivity')));
gui.appendToWorkspace('<div class="row"><div class="col-lg-6" id="ttbl"></div><div class="col-lg-6" id="ntbl"></div></div>'); gui
.appendToWorkspace('<div class="row"><div class="col-lg-6" id="ttbl"></div><div class="col-lg-6" id="ntbl"></div></div>');
gui.connectivity.transports.table({
rowSelect: 'multi', gui.connectivity.transports.table({
container: 'ttbl', rowSelect : 'multi',
buttons: ['edit', 'refresh', 'delete', 'pdf'], container : 'ttbl',
}); buttons : [ 'edit', 'refresh', 'delete', 'pdf' ],
gui.connectivity.networks.table({ });
rowSelect: 'single', gui.connectivity.networks.table({
container: 'ntbl', rowSelect : 'multi',
buttons: ['edit', 'refresh', 'delete'], container : 'ntbl',
}); buttons : [ 'edit', 'refresh', 'delete' ],
} });
};

View File

@ -1,342 +1,430 @@
/* jshint strict: true */
(function(gui, $, undefined) { (function(gui, $, undefined) {
"use strict";
// "public" methods // "public" methods
gui.doLog = function(data) { gui.doLog = function(data) {
if( gui.debug ) { if (gui.debug) {
try { try {
console.log(data); console.log(data);
} catch (e) { } catch (e) {
// nothing can be logged // nothing can be logged
} }
}
}
// Several convenience "constants"
gui.dataTablesLanguage = {
"sLengthMenu": gettext("_MENU_ records per page"),
"sZeroRecords": gettext("Empty"),
"sInfo": gettext("Records _START_ to _END_ of _TOTAL_"),
"sInfoEmpty": gettext("No records"),
"sInfoFiltered": gettext("(filtered from _MAX_ total records)"),
"sProcessing": gettext("Please wait, processing"),
"sSearch": gettext("Filter"),
"sInfoThousands": django.formats.THOUSAND_SEPARATOR,
"oPaginate": {
"sFirst": gettext("First"),
"sLast": gettext("Last"),
"sNext": gettext("Next"),
"sPrevious": gettext("Previous"),
}
};
gui.table = function(title, table_id, options) { }
if( options == undefined ) };
options = { 'size': 12, 'icon': 'table'};
if( options.size == undefined )
options.size = 12;
if( options.icon == undefined )
options.icon = 'table';
return '<div class="panel panel-primary"><div class="panel-heading">'+
'<h3 class="panel-title"><span class="fa fa-'+ options.icon + '"></span> ' + title + '</h3></div>'+
'<div class="panel-body"><table class="table table-striped table-bordered table-hover" id="' + table_id + '" border="0" cellpadding="0" cellspacing="0" width="100%"></table></div></div>';
}
gui.breadcrumbs = function(path) {
var items = path.split('/');
var active = items.pop();
var list = '';
$.each(items, function(index, value){
list += '<li><a href="#">' + value + '</a></li>';
});
list += '<li class="active">' + active + '</li>';
return '<div class="row"><div class="col-lg-12"><ol class="breadcrumb">'+ list + "</ol></div></div>";
}
gui.clearWorkspace = function() {
$('#page-wrapper').empty();
};
gui.appendToWorkspace = function(data) { // Several convenience "constants"
$(data).appendTo('#page-wrapper'); gui.dataTablesLanguage = {
}; "sLengthMenu" : gettext("_MENU_ records per page"),
"sZeroRecords" : gettext("Empty"),
"sInfo" : gettext("Records _START_ to _END_ of _TOTAL_"),
"sInfoEmpty" : gettext("No records"),
"sInfoFiltered" : gettext("(filtered from _MAX_ total records)"),
"sProcessing" : gettext("Please wait, processing"),
"sSearch" : gettext("Filter"),
"sInfoThousands" : django.formats.THOUSAND_SEPARATOR,
"oPaginate" : {
"sFirst" : gettext("First"),
"sLast" : gettext("Last"),
"sNext" : gettext("Next"),
"sPrevious" : gettext("Previous"),
}
};
gui.table = function(title, table_id, options) {
// Links methods if (options === undefined)
gui.dashboard = function() { options = {
gui.clearWorkspace(); 'size' : 12,
gui.appendToWorkspace(gui.breadcrumbs('Dasboard')); 'icon' : 'table'
gui.doLog(this); };
}; if (options.size === undefined)
options.size = 12;
gui.deployed_services = function() { if (options.icon === undefined)
gui.clearWorkspace(); options.icon = 'table';
gui.appendToWorkspace(gui.breadcrumbs(gettext('Deployed services')));
} return '<div class="panel panel-primary"><div class="panel-heading">' +
'<h3 class="panel-title"><span class="fa fa-' + options.icon + '"></span> ' + title + '</h3></div>' +
gui.setLinksEvents = function() { '<div class="panel-body"><table class="table table-striped table-bordered table-hover" id="' +
var sidebarLinks = [ table_id + '" border="0" cellpadding="0" cellspacing="0" width="100%"></table></div></div>';
{ id: 'lnk-dashboard', exec: gui.dashboard }, };
{ id: 'lnk-service_providers', exec: gui.providers.link },
{ id: 'lnk-authenticators', exec: gui.authenticators.link }, gui.breadcrumbs = function(path) {
{ id: 'lnk-osmanagers', exec: gui.osmanagers.link }, var items = path.split('/');
{ id: 'lnk-connectivity', exec: gui.connectivity.link }, var active = items.pop();
{ id: 'lnk-deployed_services', exec: gui.deployed_services }, var list = '';
]; $.each(items, function(index, value) {
$.each(sidebarLinks, function(index, value){ list += '<li><a href="#">' + value + '</a></li>';
gui.doLog('Adding ' + value.id) });
$('.'+value.id).unbind('click').click(function(event) { list += '<li class="active">' + active + '</li>';
if($('.navbar-toggle').css('display') !='none') {
$(".navbar-toggle").trigger( "click" ); return '<div class="row"><div class="col-lg-12"><ol class="breadcrumb">' + list + "</ol></div></div>";
};
gui.clearWorkspace = function() {
$('#page-wrapper').empty();
};
gui.appendToWorkspace = function(data) {
$(data).appendTo('#page-wrapper');
};
// Links methods
gui.dashboard = function() {
gui.clearWorkspace();
gui.appendToWorkspace(gui.breadcrumbs('Dasboard'));
gui.doLog(this);
};
gui.deployed_services = function() {
gui.clearWorkspace();
gui.appendToWorkspace(gui.breadcrumbs(gettext('Deployed services')));
};
gui.setLinksEvents = function() {
var sidebarLinks = [ {
id : 'lnk-dashboard',
exec : gui.dashboard
}, {
id : 'lnk-service_providers',
exec : gui.providers.link
}, {
id : 'lnk-authenticators',
exec : gui.authenticators.link
}, {
id : 'lnk-osmanagers',
exec : gui.osmanagers.link
}, {
id : 'lnk-connectivity',
exec : gui.connectivity.link
}, {
id : 'lnk-deployed_services',
exec : gui.deployed_services
}, ];
$.each(sidebarLinks, function(index, value) {
gui.doLog('Adding ' + value.id);
$('.' + value.id).unbind('click').click(function(event) {
if ($('.navbar-toggle').css('display') != 'none') {
$(".navbar-toggle").trigger("click");
} }
$('html, body').scrollTop(0); $('html, body').scrollTop(0);
value.exec(event); value.exec(event);
}); });
}); });
} };
gui.init = function() {
gui.init = function() { gui.setLinksEvents();
gui.setLinksEvents(); };
};
// Public attributes
// Public attributes gui.debug = true;
gui.debug = true;
}(window.gui = window.gui || {}, jQuery)); }(window.gui = window.gui || {}, jQuery));
function GuiElement(restItem, name) { function GuiElement(restItem, name) {
this.rest = restItem; "use strict";
this.name = name; this.rest = restItem;
this.types = {} this.name = name;
this.init(); this.types = {};
this.init();
} }
// all gui elements has, at least, name && type // all gui elements has, at least, name && type
// Types must include, at least: type, icon // Types must include, at least: type, icon
GuiElement.prototype = { GuiElement.prototype = {
init: function() { init : function() {
gui.doLog('Initializing ' + this.name); "use strict";
var $this = this; gui.doLog('Initializing ' + this.name);
this.rest.types(function(data){ var $this = this;
var styles = ''; this.rest.types(function(data) {
$.each(data, function(index, value){ var styles = '';
var className = $this.name + '-' + value.type; $.each(data, function(index, value) {
$this.types[value.type] = { css: className, name: value.name || '', description: value.description || '' }; var className = $this.name + '-' + value.type;
gui.doLog('Creating style for ' + className ) $this.types[value.type] = {
var style = '.' + className + css : className,
' { display:inline-block; background: url(data:image/png;base64,' + value.icon + '); ' + name : value.name || '',
'width: 16px; height: 16px; vertical-align: middle; } '; description : value.description || ''
styles += style; };
}); gui.doLog('Creating style for ' + className);
if(styles != '') { var style = '.' + className + ' { display:inline-block; background: url(data:image/png;base64,' +
styles = '<style media="screen">' + styles + '</style>' value.icon + '); ' + 'width: 16px; height: 16px; vertical-align: middle; } ';
$(styles).appendTo('head'); styles += style;
} });
}); if (styles !== '') {
}, styles = '<style media="screen">' + styles + '</style>';
table: function(options) { $(styles).appendTo('head');
// Options (all are optionals) }
// rowSelect: 'single' or 'multi' });
// container: ID of the element that will hold this table (will be emptied) },
// rowSelectFnc: function to invoke on row selection. receives 1 array - node : TR elements that were selected table : function(options) {
// rowDeselectFnc: function to invoke on row deselection. receives 1 array - node : TR elements that were selected "use strict";
gui.doLog('Composing table for ' + this.name); // Options (all are optionals)
var tableId = this.name + '-table'; // rowSelect: 'single' or 'multi'
var $this = this; // container: ID of the element that will hold this table (will be
this.rest.tableInfo(function(data){ // emptied)
var title = data.title; // rowSelectFnc: function to invoke on row selection. receives 1 array -
var columns = []; // node : TR elements that were selected
$.each(data.fields,function(index, value) { // rowDeselectFnc: function to invoke on row deselection. receives 1
for( var v in value ){ // array - node : TR elements that were selected
var options = value[v]; gui.doLog('Composing table for ' + this.name);
var column = { mData: v }; var tableId = this.name + '-table';
column.sTitle = options.title; var $this = this;
if( options.type )
column.sType = options.type; // Empty cells transform
if( options.width ) var renderEmptyCell = function(data) {
column.sWidth = options.width; if( data === '' )
if( options.visible != undefined ) return '-';
column.bVisible = options.visible; return data;
if( options.sortable != undefined ) };
column.bSortable = options.sortable;
if( options.searchable != undefined ) // Datetime renderer (with specified format)
column.bSearchable = options.searchable; var renderDate = function(format) {
return function(data, type, full) {
return strftime(format, new Date(data*1000));
};
};
// Icon renderer, based on type (created on init methods in styles)
var renderTypeIcon = function(data, type, value){
if( type == 'display' ) {
var css = $this.types[value.type].css;
return '<span class="' + css + '"></span> ' + renderEmptyCell(data);
} else {
return renderEmptyCell(data);
}
};
// Custom icon renderer, in fact span with defined class
var renderIcon = function(icon) {
return function(data, type, full) {
if( type == 'display' ) {
return '<span class="' + icon + '"></span> ' + renderEmptyCell(data);
} else {
return renderEmptyCell(data);
}
};
};
// Text transformation, dictionary based
var renderTextTransform = function(dict) {
return function(data, type, full) {
return dict[data] || renderEmptyCell('');
};
};
this.rest.tableInfo(function(data) {
var title = data.title;
var columns = [];
$.each(data.fields, function(index, value) {
for ( var v in value) {
var options = value[v];
var column = {
mData : v,
};
column.sTitle = options.title;
column.mRender = renderEmptyCell;
if (options.type !== undefined) {
switch(options.type) {
case 'date':
column.sType = 'date';
column.mRender = renderDate(djangoFormat(get_format('SHORT_DATE_FORMAT')));
break;
case 'datetime':
column.sType = 'date';
column.mRender = renderDate(djangoFormat(get_format('SHORT_DATETIME_FORMAT')));
break;
case 'time':
column.mRender = renderDate(djangoFormat(get_format('TIME_FORMAT')));
break;
case 'iconType':
//columnt.sType = 'html'; // html is default, so this is not needed
column.mRender = renderTypeIcon;
break;
case 'icon':
if( options.icon !== undefined ) {
column.mRender = renderIcon(options.icon);
}
break;
case 'dict':
if( options.dict !== undefined ) {
column.mRender = renderTextTransform(options.dict);
}
break;
default:
column.sType = options.type;
}
}
if (options.width)
column.sWidth = options.width;
if (options.visible !== undefined)
column.bVisible = options.visible;
if (options.sortable !== undefined)
column.bSortable = options.sortable;
if (options.searchable !== undefined)
column.bSearchable = options.searchable;
columns.push(column);
}
});
// Generate styles for responsibe table, just the name of fields
var respStyles = [];
var counter = 0;
$.each(columns, function(col, value) {
if( value.bVisible === false )
return;
counter += 1;
respStyles.push('#' + tableId + ' td:nth-of-type(' + counter + '):before { content: "' +
(value.sTitle || '') + '";}\n');
respStyles.push('#' + tableId + ' td:nth-of-type(' + counter + '):empty { background-color: red ;}\n');
});
// If styles already exists, remove them before adding new ones
$('style-' + tableId).remove();
$('<style id="style-' + tableId + '" media="screen">@media (max-width: 979px) { ' + respStyles.join('') + '};</style>').appendTo('head')
$this.rest.get({
success : function(data) {
var table = gui.table(title, tableId);
if (options.container === undefined) {
gui.appendToWorkspace('<div class="row"><div class="col-lg-12">' + table + '</div></div>');
} else {
$('#' + options.container).empty();
$('#' + options.container).append(table);
}
var btns = [];
if (options.buttons) {
// methods for buttons click
var editFnc = function() {
gui.doLog('Edit');
gui.doLog(this);
};
var deleteFnc = function() {
gui.doLog('Delete');
gui.doLog(this);
};
// What execute on refresh button push
var onRefresh = options.onRefresh || function(){};
var refreshFnc = function(btn) {
// Refreshes table content
var tbl = $('#' + tableId).dataTable();
var width = $(btn).width();
var saved = $(btn).html();
$(btn).addClass('disabled').html('<span class="fa fa-spinner fa-spin"></span>')
.width(width);
onRefresh();
$this.rest.get({
success : function(data) {
tbl.fnClearTable();
tbl.fnAddData(data);
$(btn).removeClass('disabled').html(saved);
}
});
};
// methods for buttons on row select
var editSelected = function(btn, obj, node) {
var sel = this.fnGetSelectedData();
if (sel.length == 1) {
$(btn).removeClass('disabled').addClass('btn-info');
} else {
$(btn).removeClass('btn-info').addClass('disabled');
}
};
var deleteSelected = function(btn, obj, node) {
var sel = this.fnGetSelectedData();
if (sel.length > 0) {
$(btn).removeClass('disabled').addClass('btn-warning');
} else {
$(btn).removeClass('btn-warning').addClass('disabled');
}
};
$.each(options.buttons, function(index, value) {
var btn;
switch (value) {
case 'edit':
btn = {
"sExtends" : "text",
"sButtonText" : gettext('Edit'),
"fnSelect" : editSelected,
"fnClick" : editFnc,
"sButtonClass" : "disabled"
};
break;
case 'delete':
btn = {
"sExtends" : "text",
"sButtonText" : gettext('Delete'),
"fnSelect" : deleteSelected,
"fnClick" : deleteFnc,
"sButtonClass" : "disabled"
};
break;
case 'refresh':
btn = {
"sExtends" : "text",
"sButtonText" : gettext('Refresh'),
"fnClick" : refreshFnc,
"sButtonClass" : "btn-info"
};
break;
case 'csb':
btn = {
"sExtends" : "csv",
"sTitle" : title,
"sFileName" : title + '.csv',
};
break;
case 'pdf':
btn = {
"sExtends" : "pdf",
"sTitle" : title,
"sPdfMessage" : "Summary Info",
"sFileName" : title + '.pdf',
"sPdfOrientation" : "portrait"
};
break;
}
if (btn !== undefined)
btns.push(btn);
});
}
// Initializes oTableTools
var oTableTools = {
"aButtons" : btns
};
if (options.rowSelect) {
oTableTools.sRowSelect = options.rowSelect;
}
if (options.onRowSelect) {
oTableTools.fnRowSelected = options.onRowSelect;
}
if (options.onRowDeselect) {
oTableTools.fnRowDeselected = options.onRowDeselect;
}
$('#' + tableId).dataTable({
"aaData" : data,
"aoColumns" : columns,
"oLanguage" : gui.dataTablesLanguage,
"oTableTools" : oTableTools,
// First is upper row,
// second row is lower
// (pagination) row
"sDom" : "<'row'<'col-xs-6'T><'col-xs-6'f>r>t<'row'<'col-xs-5'i><'col-xs-7'p>>",
});
$('#' + tableId + '_filter input').addClass('form-control');
var tableTop = $('#' + tableId).offset().top;
if (options.scroll)
$('html, body').scrollTop(tableTop);
}
});
});
return '#' + tableId;
}
// Fix name columm so we can add a class icon
if( v == 'name' ) {
column.sType ='html'
}
columns.push(column);
}
});
gui.doLog(columns);
var processResponse = function(data) {
// If it has a "type" column
try {
if( data[0].type != undefined ) {
$.each(data, function(index, value){
var type = $this.types[value.type];
data[index].name = '<span class="' + type.css + '"> </span> ' + value.name
});
}
} catch (e) {
return;
}
};
$this.rest.get({
success: function(data) {
processResponse(data);
var table = gui.table(title, tableId);
if( options.container == undefined ) {
gui.appendToWorkspace('<div class="row"><div class="col-lg-12">' + table + '</div></div>');
} else {
$('#'+options.container).empty();
$('#'+options.container).append(table);
}
var btns = [
];
if( options.buttons ) {
// methods for buttons click
var editFnc = function() {
gui.doLog('Edit');
gui.doLog(this);
};
var deleteFnc = function() {
gui.doLog('Delete');
gui.doLog(this);
};
var refreshFnc = function(btn) {
// Refreshes table content
gui.doLog('Refresh');
gui.doLog(this);
gui.doLog(btn);
var tbl = $('#' + tableId).dataTable();
var width = $(btn).width();
var saved = $(btn).html();
$(btn).addClass('disabled').html('<span class="fa fa-spinner fa-spin"></span>').width(width);
$this.rest.get({
success: function(data) {
processResponse(data);
tbl.fnClearTable();
tbl.fnAddData(data);
$(btn).removeClass('disabled').html(saved);
}
});
}
// methods for buttons on row select
var editSelected = function(btn, obj, node) {
var sel = this.fnGetSelectedData();
if( sel.length == 1) {
$(btn).removeClass('disabled').addClass('btn-info');
} else {
$(btn).removeClass('btn-info').addClass('disabled');
}
};
var deleteSelected = function(btn, obj, node) {
var sel = this.fnGetSelectedData();
if( sel.length > 0) {
$(btn).removeClass('disabled').addClass('btn-warning');
} else {
$(btn).removeClass('btn-warning').addClass('disabled');
}
};
$.each(options.buttons, function(index, value){
var btn = undefined;
switch(value) {
case 'edit':
btn = {
"sExtends": "text",
"sButtonText": gettext('Edit'),
"fnSelect": editSelected,
"fnClick": editFnc,
"sButtonClass": "disabled"
};
break;
case 'delete':
btn = {
"sExtends": "text",
"sButtonText": gettext('Delete'),
"fnSelect": deleteSelected,
"fnClick": deleteFnc,
"sButtonClass": "disabled"
};
break;
case 'refresh':
btn = {
"sExtends": "text",
"sButtonText": gettext('Refresh'),
"fnClick": refreshFnc,
"sButtonClass": "btn-info"
};
break;
case 'csb':
btn = {
"sExtends": "csv",
"sTitle": title,
"sFileName": title + '.csv',
};
break;
case 'pdf':
btn = {
"sExtends": "pdf",
"sTitle": title,
"sPdfMessage": "Summary Info",
"sFileName": title + '.pdf',
"sPdfOrientation": "portrait"
};
break;
}
if( btn != undefined )
btns.push(btn);
});
}
// Initializes oTableTools
oTableTools = {
"aButtons": btns
};
if( options.rowSelect ) {
oTableTools.sRowSelect = options.rowSelect
}
if( options.rowSelectFnc ) {
oTableTools.fnRowSelected = options.rowSelectFnc
}
if( options.rowDeselectFnc ) {
oTableTools.fnRowDeselected = options.rowDeselectFnc
}
$('#' + tableId).dataTable({
"aaData": data,
"aoColumns": columns,
"oLanguage": gui.dataTablesLanguage,
"oTableTools": oTableTools,
// First is upper row, second row is lower (pagination) row
"sDom": "<'row'<'col-xs-6'T><'col-xs-6'f>r>t<'row'<'col-xs-5'i><'col-xs-7'p>>",
});
$('#' + tableId + '_filter input').addClass('form-control');
var tableTop = $('#'+tableId).offset().top;
gui.doLog(tableTop);
//$('html, body').animate({ scrollTop: tableTop });
if( options.scroll )
$('html, body').scrollTop(tableTop);
}
});
});
return '#' + tableId;
}
}; };

View File

@ -0,0 +1,345 @@
//
// strftime
// github.com/samsonjs/strftime
// @_sjs
//
// Copyright 2010 - 2013 Sami Samhuri <sami@samhuri.net>
//
// MIT License
// http://sjs.mit-license.org
//
;(function() {
// // Where to export the API
var namespace;
// CommonJS / Node module
if (typeof module !== 'undefined') {
namespace = module.exports = strftime;
}
// Browsers and other environments
else {
// Get the global object. Works in ES3, ES5, and ES5 strict mode.
namespace = (function(){ return this || (1,eval)('this'); }());
}
function words(s) { return (s || '').split(' '); }
var dayNames = [gettext('Sunday'), gettext('Monday'), gettext('Tuesday'),
gettext('Wednesday'), gettext('Thursday'), gettext('Friday'), gettext('Saturday')];
var monthNames = [gettext('January'), gettext('February'), gettext('March'),
gettext('April'), gettext('May'), gettext('June'), gettext('July'),
gettext('August'), gettext('September'), gettext('October'), gettext('November'),
gettext('December')];
function initialsOf(arr) {
var res = [];
for( var v in arr ) {
res.push(arr[v].substr(0,3));
}
return res;
}
var DefaultLocale = {
days: dayNames,
shortDays: initialsOf(dayNames),
months: monthNames,
shortMonths: initialsOf(monthNames),
AM: 'AM',
PM: 'PM',
am: 'am',
pm: 'pm',
};
// Added this to convert django format strings to c format string
// This is ofc, a "simplified" version, aimed to use date format used by DJANGO
namespace.djangoFormat = function(format) {
return format.replace(/./g, function(c) {
switch(c) {
case 'a':
case 'A':
return '%p';
case 'b':
case 'd':
case 'm':
case 'w':
case 'W':
case 'y':
case 'Y':
return '%' + c;
case 'c': return '%FT%TZ';
case 'D': return '%a';
case 'e': return '%z';
case 'f': return '%I:%M';
case 'F': return '%F';
case 'h':
case 'g':
return '%I';
case 'H':
case 'G':
return '%H';
case 'i': return '%M';
case 'I': return ''; // daylight saving
case 'j': return '%d';
case 'l': return '%A';
case 'L': return ''; // if it is leap year
case 'M': return '%b';
case 'n': return '%m';
case 'N': return '%b';
case 'o': return '%W'; // Not so sure, not important i thing anyway :-)
case 'O': return '%z';
case 'P': return '%R %p';
case 'r': return '%a, %d %b %Y %T %z';
case 's': return '%S';
case 'S': return ''; // english ordinal suffix for day of month
case 't': return ''; // number of days of specified month, not important
case 'T': return '%Z';
case 'u': return '0'; // microseconds
case 'U': return ''; // Seconds since EPOCH, not used
case 'z': return '%j';
case 'Z': return 'z'; // Time zone offset in seconds, replaced by offset in ours/minutes :-)
default:
return c;
}
});
};
namespace.strftime = strftime;
function strftime(fmt, d, locale) {
return _strftime(fmt, d, locale);
}
// locale is optional
namespace.strftimeTZ = strftime.strftimeTZ = strftimeTZ;
function strftimeTZ(fmt, d, locale, timezone) {
if (typeof locale == 'number' && timezone == null) {
timezone = locale;
locale = undefined;
}
return _strftime(fmt, d, locale, { timezone: timezone });
}
namespace.strftimeUTC = strftime.strftimeUTC = strftimeUTC;
function strftimeUTC(fmt, d, locale) {
return _strftime(fmt, d, locale, { utc: true });
}
namespace.localizedStrftime = strftime.localizedStrftime = localizedStrftime;
function localizedStrftime(locale) {
return function(fmt, d, options) {
return strftime(fmt, d, locale, options);
};
}
// d, locale, and options are optional, but you can't leave
// holes in the argument list. If you pass options you have to pass
// in all the preceding args as well.
//
// options:
// - locale [object] an object with the same structure as DefaultLocale
// - timezone [number] timezone offset in minutes from GMT
function _strftime(fmt, d, locale, options) {
options = options || {};
// d and locale are optional so check if d is really the locale
if (d && !quacksLikeDate(d)) {
locale = d;
d = undefined;
}
d = d || new Date();
locale = locale || DefaultLocale;
locale.formats = locale.formats || {};
// Hang on to this Unix timestamp because we might mess with it directly
// below.
var timestamp = d.getTime();
if (options.utc || typeof options.timezone == 'number') {
d = dateToUTC(d);
}
if (typeof options.timezone == 'number') {
d = new Date(d.getTime() + (options.timezone * 60000));
}
// Most of the specifiers supported by C's strftime, and some from Ruby.
// Some other syntax extensions from Ruby are supported: %-, %_, and %0
// to pad with nothing, space, or zero (respectively).
return fmt.replace(/%([-_0]?.)/g, function(_, c) {
var mod, padding;
if (c.length == 2) {
mod = c[0];
// omit padding
if (mod == '-') {
padding = '';
}
// pad with space
else if (mod == '_') {
padding = ' ';
}
// pad with zero
else if (mod == '0') {
padding = '0';
}
else {
// unrecognized, return the format
return _;
}
c = c[1];
}
switch (c) {
case 'A': return locale.days[d.getDay()];
case 'a': return locale.shortDays[d.getDay()];
case 'B': return locale.months[d.getMonth()];
case 'b': return locale.shortMonths[d.getMonth()];
case 'C': return pad(Math.floor(d.getFullYear() / 100), padding);
case 'D': return _strftime(locale.formats.D || '%m/%d/%y', d, locale);
case 'd': return pad(d.getDate(), padding);
case 'e': return d.getDate();
case 'F': return _strftime(locale.formats.F || '%Y-%m-%d', d, locale);
case 'H': return pad(d.getHours(), padding);
case 'h': return locale.shortMonths[d.getMonth()];
case 'I': return pad(hours12(d), padding);
case 'j':
var y = new Date(d.getFullYear(), 0, 1);
var day = Math.ceil((d.getTime() - y.getTime()) / (1000 * 60 * 60 * 24));
return pad(day, 3);
case 'k': return pad(d.getHours(), padding == null ? ' ' : padding);
case 'L': return pad(Math.floor(timestamp % 1000), 3);
case 'l': return pad(hours12(d), padding == null ? ' ' : padding);
case 'M': return pad(d.getMinutes(), padding);
case 'm': return pad(d.getMonth() + 1, padding);
case 'n': return '\n';
case 'o': return String(d.getDate()) + ordinal(d.getDate());
case 'P': return d.getHours() < 12 ? locale.am : locale.pm;
case 'p': return d.getHours() < 12 ? locale.AM : locale.PM;
case 'R': return _strftime(locale.formats.R || '%H:%M', d, locale);
case 'r': return _strftime(locale.formats.r || '%I:%M:%S %p', d, locale);
case 'S': return pad(d.getSeconds(), padding);
case 's': return Math.floor(timestamp / 1000);
case 'T': return _strftime(locale.formats.T || '%H:%M:%S', d, locale);
case 't': return '\t';
case 'U': return pad(weekNumber(d, 'sunday'), padding);
case 'u':
var day = d.getDay();
return day == 0 ? 7 : day; // 1 - 7, Monday is first day of the
// week
case 'v': return _strftime(locale.formats.v || '%e-%b-%Y', d, locale);
case 'W': return pad(weekNumber(d, 'monday'), padding);
case 'w': return d.getDay(); // 0 - 6, Sunday is first day of the
// week
case 'Y': return d.getFullYear();
case 'y':
var y = String(d.getFullYear());
return y.slice(y.length - 2);
case 'Z':
if (options.utc) {
return "GMT";
}
else {
var tz = d.toString().match(/\((\w+)\)/);
return tz && tz[1] || '';
}
case 'z':
if (options.utc) {
return "+0000";
}
else {
var off = typeof options.timezone == 'number' ? options.timezone : -d.getTimezoneOffset();
return (off < 0 ? '-' : '+') + pad(Math.abs(off / 60)) + pad(off % 60);
}
default: return c;
}
});
}
function dateToUTC(d) {
var msDelta = (d.getTimezoneOffset() || 0) * 60000;
return new Date(d.getTime() + msDelta);
}
var RequiredDateMethods = ['getTime', 'getTimezoneOffset', 'getDay', 'getDate', 'getMonth', 'getFullYear', 'getYear', 'getHours', 'getMinutes', 'getSeconds'];
function quacksLikeDate(x) {
var i = 0
, n = RequiredDateMethods.length
;
for (i = 0; i < n; ++i) {
if (typeof x[RequiredDateMethods[i]] != 'function') {
return false;
}
}
return true;
}
// Default padding is '0' and default length is 2, both are optional.
function pad(n, padding, length) {
// pad(n, <length>)
if (typeof padding === 'number') {
length = padding;
padding = '0';
}
// Defaults handle pad(n) and pad(n, <padding>)
if (padding == null) {
padding = '0';
}
length = length || 2;
var s = String(n);
// padding may be an empty string, don't loop forever if it is
if (padding) {
while (s.length < length) s = padding + s;
}
return s;
}
function hours12(d) {
var hour = d.getHours();
if (hour == 0) hour = 12;
else if (hour > 12) hour -= 12;
return hour;
}
// Get the ordinal suffix for a number: st, nd, rd, or th
function ordinal(n) {
var i = n % 10
, ii = n % 100
;
if ((ii >= 11 && ii <= 13) || i === 0 || i >= 4) {
return 'th';
}
switch (i) {
case 1: return 'st';
case 2: return 'nd';
case 3: return 'rd';
}
}
// firstWeekday: 'sunday' or 'monday', default is 'sunday'
//
// Pilfered & ported from Ruby's strftime implementation.
function weekNumber(d, firstWeekday) {
firstWeekday = firstWeekday || 'sunday';
// This works by shifting the weekday back by one day if we
// are treating Monday as the first day of the week.
var wday = d.getDay();
if (firstWeekday == 'monday') {
if (wday == 0) // Sunday
wday = 6;
else
wday--;
}
var firstDayOfYear = new Date(d.getFullYear(), 0, 1)
, yday = (d - firstDayOfYear) / 86400000
, weekNum = (yday + 7 - wday) / 7
;
return Math.floor(weekNum);
}
}());

View File

@ -1 +0,0 @@

File diff suppressed because it is too large Load Diff

View File

@ -9,9 +9,8 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="robots" content="noindex, nofollow" /> <meta name="robots" content="noindex, nofollow" />
{% block meta %}{% endblock %}
{% block icon %}<link href="{% get_static_prefix %}img/favicon.ico" rel="icon" type="image/x-icon" />{% endblock %} <link href="{% get_static_prefix %}img/favicon.ico" rel="icon" type="image/x-icon" />
<!-- Bootstrap --> <!-- Bootstrap -->
<link href="{% get_static_prefix %}css/bootstrap.min.css" rel="stylesheet" media="screen"> <link href="{% get_static_prefix %}css/bootstrap.min.css" rel="stylesheet" media="screen">
@ -23,9 +22,8 @@
<link href="{% get_static_prefix %}adm/css/TableTools.css" rel="stylesheet" media="screen"> <link href="{% get_static_prefix %}adm/css/TableTools.css" rel="stylesheet" media="screen">
<link href="{% get_static_prefix %}adm/css/dataTables.bootstrap.css" rel="stylesheet" media="screen"> <link href="{% get_static_prefix %}adm/css/dataTables.bootstrap.css" rel="stylesheet" media="screen">
<!-- <link href="{% get_static_prefix %}css/tables.css" rel="stylesheet" media="screen"> --> <link href="{% get_static_prefix %}css/tables.css" rel="stylesheet" media="screen">
<link href="{% get_static_prefix %}adm/css/uds-admin.css" rel="stylesheet" media="screen"> <link href="{% get_static_prefix %}adm/css/uds-admin.css" rel="stylesheet" media="screen">
{% block css %}{% endblock %}
</head> </head>
<body> <body>
@ -50,13 +48,14 @@
<script src="{% get_static_prefix %}adm/js/jquery.dataTables.min.js"></script> <script src="{% get_static_prefix %}adm/js/jquery.dataTables.min.js"></script>
<script src="{% get_static_prefix %}adm/js/TableTools.min.js"></script> <script src="{% get_static_prefix %}adm/js/TableTools.min.js"></script>
<!-- strftime -->
<script src="{% get_static_prefix %}adm/js/strftime.js"></script>
<!-- <script src="{% get_static_prefix %}adm/js/ZeroClipboard.js"></script> --> <!-- <script src="{% get_static_prefix %}adm/js/ZeroClipboard.js"></script> -->
<script src="{% get_static_prefix %}adm/js/dataTables.bootstrap.js"></script> <script src="{% get_static_prefix %}adm/js/dataTables.bootstrap.js"></script>
<script src="{% get_static_prefix %}adm/js/templating.js"></script>
<script> <script>
// Initialize a few settings, needed for api to work // Initialize a few settings, needed for api to work
(function(api, $, undefined){ (function(api, $, undefined){
@ -76,7 +75,7 @@
<script> <script>
$(function() { $(function() {
// Initialize gui // Initialize gui
gui.init(); gui.init();
}); });

View File

@ -45,7 +45,8 @@
<ul class="dropdown-menu"> <ul class="dropdown-menu">
{% for lang in LANGUAGES %} {% for lang in LANGUAGES %}
{% if lang.0 != LANGUAGE_CODE %} {% if lang.0 != LANGUAGE_CODE %}
<li><a href="#" onclick='$("#id_language").val("{{ lang.0 }}"); $("#form_language").submit()'><i class="glyphicon bfh-flag-{{ lang.0|country }}"></i>{% trans lang.1|capfirst %}</a></li> <!-- here we force an update of locale of REST api -->
<li><a href="#" onclick='$("#id_language").val("{{ lang.0 }}"); api.locale.get({id:"{{ lang.0 }}", success:function(){ $("#form_language").submit() }});'><i class="glyphicon bfh-flag-{{ lang.0|country }}"></i>{% trans lang.1|capfirst %}</a></li>
{% endif %} {% endif %}
{% endfor %} {% endfor %}
</ul> </ul>

View File

@ -62,7 +62,7 @@ urlpatterns = patterns('uds',
# Change Language # Change Language
(r'^i18n/', include('django.conf.urls.i18n')), (r'^i18n/', include('django.conf.urls.i18n')),
# Downloadables # Downloadables
(r'^download/(?P<idDownload>[a-zA-Z0-9]*)$', 'web.views.download'), (r'^download/(?P<idDownload>[a-zA-Z0-9-]*)$', 'web.views.download'),
# Custom authentication callback # Custom authentication callback
(r'^auth/(?P<authName>.+)', 'web.views.authCallback'), (r'^auth/(?P<authName>.+)', 'web.views.authCallback'),
(r'^authJava/(?P<idAuth>.+)/(?P<hasJava>.*)$', 'web.views.authJava'), (r'^authJava/(?P<idAuth>.+)/(?P<hasJava>.*)$', 'web.views.authJava'),
@ -80,7 +80,7 @@ urlpatterns = patterns('uds',
# Internacionalization in javascript # Internacionalization in javascript
# Javascript catalog # Javascript catalog
(r'^jsi18n/(?P<lang>.*)$', 'web.views.jsCatalog', js_info_dict), (r'^jsi18n/(?P<lang>[a-z]*)$', 'web.views.jsCatalog', js_info_dict),
) )

View File

@ -431,4 +431,6 @@ def download(request, idDownload):
last_modified_date = timezone.now() last_modified_date = timezone.now()
@last_modified(lambda req, **kw: last_modified_date) @last_modified(lambda req, **kw: last_modified_date)
def jsCatalog(request, lang, domain='djangojs', packages=None): def jsCatalog(request, lang, domain='djangojs', packages=None):
if lang != '':
request.GET = { 'language': lang } # Fake args for catalog :-)
return javascript_catalog(request, domain, packages) return javascript_catalog(request, domain, packages)