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>
</buildCommand>
<buildCommand>
<name>com.eclipsesource.jshint.ui.builder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<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 handlers import Handler, HandlerError, AccessDenied
import time
import logging
logger = logging.getLogger(__name__)
@ -136,10 +137,14 @@ class Dispatcher(View):
# Invokes the handler's operation, add headers to response and returns
try:
if handler.raw: # Raw handlers will return an HttpResponse Object
start = time.time();
response = operation()
else:
response = processor.getResponse(operation())
logger.debug('Execution time for method: {0}'.format(time.time() - start))
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():
response[k] = v
return response

View File

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

View File

@ -81,7 +81,6 @@ class Login(Handler):
class Logout(Handler):
path = 'auth'
authenticated = True # By default, all handlers needs authentication
needs_staff = True # By default, staff
def get(self):
# Remove auth token
@ -103,4 +102,10 @@ class Auths(Handler):
def get(self):
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'
title = _('Current Networks')
fields = [
{ 'name': {'title': _('Name'), 'visible': True } },
{ 'name': {'title': _('Name'), 'visible': True, 'type': 'icon', 'icon': 'fa fa-globe text-success' } },
{ 'net_string': {'title': _('Networks')}},
{ 'networks_count': {'title': _('Used by'), 'type': 'numeric', 'width': '8em'}}
]

View File

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

View File

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

View File

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

View File

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

View File

@ -173,7 +173,7 @@ class ModelTableHandlerMixin(object):
for k1, v1 in f.iteritems():
dct = {}
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
else:
dct[k2] = unicode(v2)

View File

@ -32,13 +32,15 @@
'''
from __future__ import unicode_literals
from django.utils import simplejson
#from django.utils import simplejson
import ujson as json
from django import http
import logging
logger = logging.getLogger(__name__)
class ParametersException(Exception):
pass
@ -69,7 +71,7 @@ class JsonProcessor(ContentProcessor):
try:
if len(self._request.body) == 0:
return {}
res = simplejson.loads(self._request.body)
res = json.loads(self._request.body)
logger.debug(res)
return res
except Exception as e:
@ -77,7 +79,7 @@ class JsonProcessor(ContentProcessor):
raise ParametersException(unicode(e))
def render(self, obj):
return simplejson.dumps(obj)
return json.dumps(obj)
# ---------------
# 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
class State(object):
@ -135,3 +135,13 @@ class State(object):
except Exception:
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 ""
"Project-Id-Version: PACKAGE VERSION\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"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -42,35 +42,86 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
#: REST/methods/authenticators.py:72
#: REST/methods/authenticators.py:73
msgid "Current authenticators"
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"
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"
msgstr "Kommentare"
#: REST/methods/authenticators.py:76
#: REST/methods/authenticators.py:77
msgid "Users"
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"
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
msgid "Services"
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"
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
msgid "IP Authenticator"
msgstr "IP-Authenticator"
@ -162,8 +213,9 @@ msgstr "Benutzernamen mit lesen Berechtigungen auf der Basis ausgewählt"
#: osmanagers/WindowsOsManager/WinRandomPassOsManager.py:30
#: services/OVirt/OVirtProvider.py:94 services/Sample/SampleService.py:131
#: transports/HTML5RDP/HTML5RDP.py:65 transports/NX/NXTransport.py:62
#: transports/RDP/RDPTransport.py:60 transports/RDP/TSRDPTransport.py:64
#: transports/TSNX/TSNXTransport.py:67 web/forms/LoginForm.py:70
#: transports/NX/TSNXTransport.py:67 transports/RDP/RDPTransport.py:60
#: transports/RDP/TSRDPTransport.py:64 transports/TSNX/TSNXTransport.py:67
#: web/forms/LoginForm.py:70
msgid "Password"
msgstr "Passwort"
@ -231,9 +283,9 @@ msgstr "Reguläre Ausdrücke LDAP-Authentifizierungsserver"
#: auths/RegexLdap/Authenticator.py:72 auths/SimpleLDAP/Authenticator.py:73
#: services/OVirt/OVirtProvider.py:93 transports/HTML5RDP/HTML5RDP.py:64
#: transports/NX/NXTransport.py:61 transports/RDP/RDPTransport.py:59
#: transports/RDP/TSRDPTransport.py:63 transports/TSNX/TSNXTransport.py:66
#: web/forms/LoginForm.py:69
#: transports/NX/NXTransport.py:61 transports/NX/TSNXTransport.py:66
#: transports/RDP/RDPTransport.py:59 transports/RDP/TSRDPTransport.py:63
#: transports/TSNX/TSNXTransport.py:66 web/forms/LoginForm.py:69
msgid "Username"
msgstr "Benutzername"
@ -1093,10 +1145,6 @@ msgstr "und Browser neu starten"
msgid "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
msgid "Transports"
msgstr "Transporte"
@ -1153,35 +1201,44 @@ msgstr ""
msgid "toggle navigation"
msgstr "Toggle navigation"
#: templates/uds/admin/snippets/navbar.html:17
#: templates/uds/admin/snippets/navbar.html:18
msgid "Service providers"
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"
msgstr "Authentifikatoren"
#: templates/uds/admin/snippets/navbar.html:20
#: templates/uds/admin/snippets/navbar.html:21
msgid "Connectivity"
msgstr "Konnektivität"
#: templates/uds/admin/snippets/navbar.html:21
#: templates/uds/admin/snippets/navbar.html:22
msgid "Deployed services"
msgstr "Bereitgestellten Dienste"
#: templates/uds/admin/snippets/navbar.html:25
#: templates/uds/admin/snippets/navbar.html:26
msgid "Configuration"
msgstr "Konfiguration"
#: templates/uds/admin/snippets/navbar.html:57
#: templates/uds/admin/snippets/navbar.html:56
msgid "Exit 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
msgid "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
msgid "Login redirection to UDS"
msgstr "Login-Umleitung zu UDS"
@ -1273,7 +1330,7 @@ msgstr "Über"
msgid "Dashboard"
msgstr "Dashboard"
#: templates/uds/html5/templates/base.html:51
#: templates/uds/html5/templates/base.html:52
msgid ""
"Your browser is supported only partially. Please, upgrade it to a modern "
"html5 browser like Firefox, Chrome, Opera, ... (IE must be 10 or better)"
@ -1311,30 +1368,30 @@ msgstr ""
"zugänglich von Benutzern"
#: transports/HTML5RDP/HTML5RDP.py:63 transports/NX/NXTransport.py:60
#: transports/RDP/RDPTransport.py:58 transports/RDP/TSRDPTransport.py:62
#: transports/TSNX/TSNXTransport.py:65
#: transports/NX/TSNXTransport.py:65 transports/RDP/RDPTransport.py:58
#: transports/RDP/TSRDPTransport.py:62 transports/TSNX/TSNXTransport.py:65
msgid "Empty creds"
msgstr "Leere creds"
#: transports/HTML5RDP/HTML5RDP.py:63 transports/NX/NXTransport.py:60
#: transports/RDP/RDPTransport.py:58 transports/RDP/TSRDPTransport.py:62
#: transports/TSNX/TSNXTransport.py:65
#: transports/NX/TSNXTransport.py:65 transports/RDP/RDPTransport.py:58
#: transports/RDP/TSRDPTransport.py:62 transports/TSNX/TSNXTransport.py:65
msgid "If checked, the credentials used to connect will be emtpy"
msgstr ""
"Wenn diese Option aktiviert, werden die Anmeldeinformationen zum Herstellen "
"einer leer sein."
#: transports/HTML5RDP/HTML5RDP.py:64 transports/NX/NXTransport.py:61
#: transports/RDP/RDPTransport.py:59 transports/RDP/TSRDPTransport.py:63
#: transports/TSNX/TSNXTransport.py:66
#: transports/NX/TSNXTransport.py:66 transports/RDP/RDPTransport.py:59
#: transports/RDP/TSRDPTransport.py:63 transports/TSNX/TSNXTransport.py:66
msgid "If not empty, this username will be always used as credential"
msgstr ""
"Wenn nicht leer ist, dieser Benutzername wird immer als verwendet "
"Anmeldeinformationen"
#: transports/HTML5RDP/HTML5RDP.py:65 transports/NX/NXTransport.py:62
#: transports/RDP/RDPTransport.py:60 transports/RDP/TSRDPTransport.py:64
#: transports/TSNX/TSNXTransport.py:67
#: transports/NX/TSNXTransport.py:67 transports/RDP/RDPTransport.py:60
#: transports/RDP/TSRDPTransport.py:64 transports/TSNX/TSNXTransport.py:67
msgid "If not empty, this password will be always used as credential"
msgstr ""
"Wenn nicht leer ist, dieses Kennwort immer verwendet werden als "
@ -1389,46 +1446,98 @@ msgstr "NX Transport (direkt)"
msgid "NX Transport for direct connection"
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"
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"
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"
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)"
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"
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"
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"
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"
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"
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"
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
msgid "NX Protocol"
msgstr "NX-Protokoll"
@ -1525,35 +1634,6 @@ msgstr "RDP-Verkehr (Tunneling)"
msgid "RDP Transport for tunneled connection"
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
msgid "Remote Desktop Protocol"
msgstr "Remote Desktop-Protokoll"
@ -1570,14 +1650,6 @@ msgstr "Erhalten Sie es aus"
msgid "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
msgid "Unknown error"
msgstr "Unbekannter Fehler"
@ -1639,6 +1711,10 @@ msgstr ""
msgid "Authenticator do not provides information"
msgstr "Authentifikator informiert nicht"
#: web/forms/LoginForm.py:50
msgid "Select authenticator"
msgstr "Wählen Sie Authentifikator"
#: web/forms/LoginForm.py:54
msgid "authenticator"
msgstr "Authentifikator"

View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\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"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -18,70 +18,146 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: static/adm/js/api.js:23
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
#: static/adm/js/gui-elements.js:7
msgid "Service Providers"
msgstr "Service-Provider"
#: static/adm/js/gui.js:191
msgid "Authenticators"
msgstr "Authentifikatoren"
#: static/adm/js/gui-elements.js:81
msgid "Connectivity"
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 ""
"Project-Id-Version: \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"
"Last-Translator: \n"
"Language-Team: Spanish <kde-i18n-doc@kde.org>\n"
@ -42,35 +42,86 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
"X-Generator: Lokalize 1.4\n"
#: REST/methods/authenticators.py:72
#: REST/methods/authenticators.py:73
msgid "Current authenticators"
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"
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"
msgstr "Comentarios"
#: REST/methods/authenticators.py:76
#: REST/methods/authenticators.py:77
msgid "Users"
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"
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
msgid "Services"
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"
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
msgid "IP Authenticator"
msgstr "Autenticador por IP"
@ -160,8 +211,9 @@ msgstr "Usuario con privilegios de lectura en la base elegida"
#: osmanagers/WindowsOsManager/WinRandomPassOsManager.py:30
#: services/OVirt/OVirtProvider.py:94 services/Sample/SampleService.py:131
#: transports/HTML5RDP/HTML5RDP.py:65 transports/NX/NXTransport.py:62
#: transports/RDP/RDPTransport.py:60 transports/RDP/TSRDPTransport.py:64
#: transports/TSNX/TSNXTransport.py:67 web/forms/LoginForm.py:70
#: transports/NX/TSNXTransport.py:67 transports/RDP/RDPTransport.py:60
#: transports/RDP/TSRDPTransport.py:64 transports/TSNX/TSNXTransport.py:67
#: web/forms/LoginForm.py:70
msgid "Password"
msgstr "Contraseña"
@ -230,9 +282,9 @@ msgstr "Autenticador LDAP de expresiones regulares"
#: auths/RegexLdap/Authenticator.py:72 auths/SimpleLDAP/Authenticator.py:73
#: services/OVirt/OVirtProvider.py:93 transports/HTML5RDP/HTML5RDP.py:64
#: transports/NX/NXTransport.py:61 transports/RDP/RDPTransport.py:59
#: transports/RDP/TSRDPTransport.py:63 transports/TSNX/TSNXTransport.py:66
#: web/forms/LoginForm.py:69
#: transports/NX/NXTransport.py:61 transports/NX/TSNXTransport.py:66
#: transports/RDP/RDPTransport.py:59 transports/RDP/TSRDPTransport.py:63
#: transports/TSNX/TSNXTransport.py:66 web/forms/LoginForm.py:69
msgid "Username"
msgstr "Usuario"
@ -1079,10 +1131,6 @@ msgstr "y reinicie el navegador"
msgid "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
msgid "Transports"
msgstr "Transportes"
@ -1139,35 +1187,44 @@ msgstr ""
msgid "toggle navigation"
msgstr "Toggle navegación"
#: templates/uds/admin/snippets/navbar.html:17
#: templates/uds/admin/snippets/navbar.html:18
msgid "Service providers"
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"
msgstr "Autenticadores"
#: templates/uds/admin/snippets/navbar.html:20
#: templates/uds/admin/snippets/navbar.html:21
msgid "Connectivity"
msgstr "Conectividad"
#: templates/uds/admin/snippets/navbar.html:21
#: templates/uds/admin/snippets/navbar.html:22
msgid "Deployed services"
msgstr "Servicios desplegados"
#: templates/uds/admin/snippets/navbar.html:25
#: templates/uds/admin/snippets/navbar.html:26
msgid "Configuration"
msgstr "Configuración"
#: templates/uds/admin/snippets/navbar.html:57
#: templates/uds/admin/snippets/navbar.html:56
msgid "Exit dashboard"
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
msgid "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
msgid "Login redirection to UDS"
msgstr "Redirección de inicio de sesión para UDS"
@ -1259,7 +1316,7 @@ msgstr "Acerca de"
msgid "Dashboard"
msgstr "Tablero de instrumentos"
#: templates/uds/html5/templates/base.html:51
#: templates/uds/html5/templates/base.html:52
msgid ""
"Your browser is supported only partially. Please, upgrade it to a modern "
"html5 browser like Firefox, Chrome, Opera, ... (IE must be 10 or better)"
@ -1297,28 +1354,28 @@ msgstr ""
"accesible de los usuarios"
#: transports/HTML5RDP/HTML5RDP.py:63 transports/NX/NXTransport.py:60
#: transports/RDP/RDPTransport.py:58 transports/RDP/TSRDPTransport.py:62
#: transports/TSNX/TSNXTransport.py:65
#: transports/NX/TSNXTransport.py:65 transports/RDP/RDPTransport.py:58
#: transports/RDP/TSRDPTransport.py:62 transports/TSNX/TSNXTransport.py:65
msgid "Empty creds"
msgstr "Sin credenciales"
#: transports/HTML5RDP/HTML5RDP.py:63 transports/NX/NXTransport.py:60
#: transports/RDP/RDPTransport.py:58 transports/RDP/TSRDPTransport.py:62
#: transports/TSNX/TSNXTransport.py:65
#: transports/NX/TSNXTransport.py:65 transports/RDP/RDPTransport.py:58
#: transports/RDP/TSRDPTransport.py:62 transports/TSNX/TSNXTransport.py:65
msgid "If checked, the credentials used to connect will be emtpy"
msgstr ""
"Si está activada, las credenciales utilizadas para conectar estarán vacías"
#: transports/HTML5RDP/HTML5RDP.py:64 transports/NX/NXTransport.py:61
#: transports/RDP/RDPTransport.py:59 transports/RDP/TSRDPTransport.py:63
#: transports/TSNX/TSNXTransport.py:66
#: transports/NX/TSNXTransport.py:66 transports/RDP/RDPTransport.py:59
#: transports/RDP/TSRDPTransport.py:63 transports/TSNX/TSNXTransport.py:66
msgid "If not empty, this username will be always used as credential"
msgstr ""
"Si no está vacio, este nombre de usuario será utilizado como credencial fija"
#: transports/HTML5RDP/HTML5RDP.py:65 transports/NX/NXTransport.py:62
#: transports/RDP/RDPTransport.py:60 transports/RDP/TSRDPTransport.py:64
#: transports/TSNX/TSNXTransport.py:67
#: transports/NX/TSNXTransport.py:67 transports/RDP/RDPTransport.py:60
#: transports/RDP/TSRDPTransport.py:64 transports/TSNX/TSNXTransport.py:67
msgid "If not empty, this password will be always used as credential"
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"
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"
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"
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"
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)"
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"
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"
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"
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"
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"
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"
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
msgid "NX Protocol"
msgstr "Protocolo NX"
@ -1504,34 +1612,6 @@ msgstr "Transporte RDP (vía túnel)"
msgid "RDP Transport for tunneled connection"
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
msgid "Remote Desktop Protocol"
msgstr "Protocolo de Escritorio remoto (RDP)"
@ -1548,14 +1628,6 @@ msgstr "Puede obtenerlo de"
msgid "CoRD Website"
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
msgid "Unknown error"
msgstr "Error desconocido"
@ -1619,6 +1691,10 @@ msgstr ""
msgid "Authenticator do not provides information"
msgstr "El autenticador no proporciona información alguna"
#: web/forms/LoginForm.py:50
msgid "Select authenticator"
msgstr "Seleccione autenticador"
#: web/forms/LoginForm.py:54
msgid "authenticator"
msgstr "autenticador"

View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\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"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -18,70 +18,146 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: static/adm/js/api.js:23
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
#: static/adm/js/gui-elements.js:7
msgid "Service Providers"
msgstr "Proveedores de servicios"
#: static/adm/js/gui.js:191
msgid "Authenticators"
msgstr "Autenticadores"
#: static/adm/js/gui-elements.js:81
msgid "Connectivity"
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 ""
"Project-Id-Version: PACKAGE VERSION\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"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -42,35 +42,86 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1)\n"
#: REST/methods/authenticators.py:72
#: REST/methods/authenticators.py:73
msgid "Current authenticators"
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"
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"
msgstr "Commentaires"
#: REST/methods/authenticators.py:76
#: REST/methods/authenticators.py:77
msgid "Users"
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"
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
msgid "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"
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
msgid "IP Authenticator"
msgstr "Authentificateur IP"
@ -161,8 +212,9 @@ msgstr ""
#: osmanagers/WindowsOsManager/WinRandomPassOsManager.py:30
#: services/OVirt/OVirtProvider.py:94 services/Sample/SampleService.py:131
#: transports/HTML5RDP/HTML5RDP.py:65 transports/NX/NXTransport.py:62
#: transports/RDP/RDPTransport.py:60 transports/RDP/TSRDPTransport.py:64
#: transports/TSNX/TSNXTransport.py:67 web/forms/LoginForm.py:70
#: transports/NX/TSNXTransport.py:67 transports/RDP/RDPTransport.py:60
#: transports/RDP/TSRDPTransport.py:64 transports/TSNX/TSNXTransport.py:67
#: web/forms/LoginForm.py:70
msgid "Password"
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
#: services/OVirt/OVirtProvider.py:93 transports/HTML5RDP/HTML5RDP.py:64
#: transports/NX/NXTransport.py:61 transports/RDP/RDPTransport.py:59
#: transports/RDP/TSRDPTransport.py:63 transports/TSNX/TSNXTransport.py:66
#: web/forms/LoginForm.py:69
#: transports/NX/NXTransport.py:61 transports/NX/TSNXTransport.py:66
#: transports/RDP/RDPTransport.py:59 transports/RDP/TSRDPTransport.py:63
#: transports/TSNX/TSNXTransport.py:66 web/forms/LoginForm.py:69
msgid "Username"
msgstr "Nom d'utilisateur"
@ -1091,10 +1143,6 @@ msgstr "Redémarrez le navigateur"
msgid "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
msgid "Transports"
msgstr "Transports"
@ -1151,35 +1199,44 @@ msgstr ""
msgid "toggle navigation"
msgstr "activer/désactiver navigation"
#: templates/uds/admin/snippets/navbar.html:17
#: templates/uds/admin/snippets/navbar.html:18
msgid "Service providers"
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"
msgstr "Authentificateurs"
#: templates/uds/admin/snippets/navbar.html:20
#: templates/uds/admin/snippets/navbar.html:21
msgid "Connectivity"
msgstr "Connectivité"
#: templates/uds/admin/snippets/navbar.html:21
#: templates/uds/admin/snippets/navbar.html:22
msgid "Deployed services"
msgstr "Services déployés"
#: templates/uds/admin/snippets/navbar.html:25
#: templates/uds/admin/snippets/navbar.html:26
msgid "Configuration"
msgstr "Configuration"
#: templates/uds/admin/snippets/navbar.html:57
#: templates/uds/admin/snippets/navbar.html:56
msgid "Exit dashboard"
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
msgid "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
msgid "Login redirection to UDS"
msgstr "Redirection de connexion à l'UDS"
@ -1271,7 +1328,7 @@ msgstr "Sur"
msgid "Dashboard"
msgstr "Tableau de bord"
#: templates/uds/html5/templates/base.html:51
#: templates/uds/html5/templates/base.html:52
msgid ""
"Your browser is supported only partially. Please, upgrade it to a modern "
"html5 browser like Firefox, Chrome, Opera, ... (IE must be 10 or better)"
@ -1309,30 +1366,30 @@ msgstr ""
"si nécessaire) des utilisateurs"
#: transports/HTML5RDP/HTML5RDP.py:63 transports/NX/NXTransport.py:60
#: transports/RDP/RDPTransport.py:58 transports/RDP/TSRDPTransport.py:62
#: transports/TSNX/TSNXTransport.py:65
#: transports/NX/TSNXTransport.py:65 transports/RDP/RDPTransport.py:58
#: transports/RDP/TSRDPTransport.py:62 transports/TSNX/TSNXTransport.py:65
msgid "Empty creds"
msgstr "Références vide"
#: transports/HTML5RDP/HTML5RDP.py:63 transports/NX/NXTransport.py:60
#: transports/RDP/RDPTransport.py:58 transports/RDP/TSRDPTransport.py:62
#: transports/TSNX/TSNXTransport.py:65
#: transports/NX/TSNXTransport.py:65 transports/RDP/RDPTransport.py:58
#: transports/RDP/TSRDPTransport.py:62 transports/TSNX/TSNXTransport.py:65
msgid "If checked, the credentials used to connect will be emtpy"
msgstr ""
"Si coché, les informations d'identification utilisées pour se connecter sera "
"vide"
#: transports/HTML5RDP/HTML5RDP.py:64 transports/NX/NXTransport.py:61
#: transports/RDP/RDPTransport.py:59 transports/RDP/TSRDPTransport.py:63
#: transports/TSNX/TSNXTransport.py:66
#: transports/NX/TSNXTransport.py:66 transports/RDP/RDPTransport.py:59
#: transports/RDP/TSRDPTransport.py:63 transports/TSNX/TSNXTransport.py:66
msgid "If not empty, this username will be always used as credential"
msgstr ""
"Si ce n'est vide, ce nom d'utilisateur sera toujours utilisé comme des "
"titres de compétences"
#: transports/HTML5RDP/HTML5RDP.py:65 transports/NX/NXTransport.py:62
#: transports/RDP/RDPTransport.py:60 transports/RDP/TSRDPTransport.py:64
#: transports/TSNX/TSNXTransport.py:67
#: transports/NX/TSNXTransport.py:67 transports/RDP/RDPTransport.py:60
#: transports/RDP/TSRDPTransport.py:64 transports/TSNX/TSNXTransport.py:67
msgid "If not empty, this password will be always used as credential"
msgstr ""
"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"
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"
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"
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"
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)"
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"
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"
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"
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"
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"
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"
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
msgid "NX Protocol"
msgstr "Protocole de NX"
@ -1518,35 +1627,6 @@ msgstr "Transport de RDP (tunnel)"
msgid "RDP Transport for tunneled connection"
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
msgid "Remote Desktop Protocol"
msgstr "Protocole Bureau distant"
@ -1563,14 +1643,6 @@ msgstr "Vous pouvez l'obtenir de"
msgid "CoRD Website"
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
msgid "Unknown error"
msgstr "Erreur inconnue"
@ -1633,6 +1705,10 @@ msgstr ""
msgid "Authenticator do not provides information"
msgstr "Authentificateur ne fournit pas d'informations"
#: web/forms/LoginForm.py:50
msgid "Select authenticator"
msgstr "Sélectionnez authentificateur"
#: web/forms/LoginForm.py:54
msgid "authenticator"
msgstr "authentificateur"

View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\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"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -18,70 +18,146 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#: static/adm/js/api.js:23
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
#: static/adm/js/gui-elements.js:7
msgid "Service Providers"
msgstr "Fournisseurs de services"
#: static/adm/js/gui.js:191
msgid "Authenticators"
msgstr "Authentificateurs"
#: static/adm/js/gui-elements.js:81
msgid "Connectivity"
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 ""
"Project-Id-Version: PACKAGE VERSION\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"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -18,35 +18,86 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: REST/methods/authenticators.py:72
#: REST/methods/authenticators.py:73
msgid "Current authenticators"
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"
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"
msgstr "Commenti"
#: REST/methods/authenticators.py:76
#: REST/methods/authenticators.py:77
msgid "Users"
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"
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
msgid "Services"
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"
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
msgid "IP Authenticator"
msgstr "IP autenticatore"
@ -136,8 +187,9 @@ msgstr "Nome utente con privilegi di lettura sulla base selezionata"
#: osmanagers/WindowsOsManager/WinRandomPassOsManager.py:30
#: services/OVirt/OVirtProvider.py:94 services/Sample/SampleService.py:131
#: transports/HTML5RDP/HTML5RDP.py:65 transports/NX/NXTransport.py:62
#: transports/RDP/RDPTransport.py:60 transports/RDP/TSRDPTransport.py:64
#: transports/TSNX/TSNXTransport.py:67 web/forms/LoginForm.py:70
#: transports/NX/TSNXTransport.py:67 transports/RDP/RDPTransport.py:60
#: transports/RDP/TSRDPTransport.py:64 transports/TSNX/TSNXTransport.py:67
#: web/forms/LoginForm.py:70
msgid "Password"
msgstr "Password"
@ -205,9 +257,9 @@ msgstr "Autenticatore di LDAP di espressioni regolari"
#: auths/RegexLdap/Authenticator.py:72 auths/SimpleLDAP/Authenticator.py:73
#: services/OVirt/OVirtProvider.py:93 transports/HTML5RDP/HTML5RDP.py:64
#: transports/NX/NXTransport.py:61 transports/RDP/RDPTransport.py:59
#: transports/RDP/TSRDPTransport.py:63 transports/TSNX/TSNXTransport.py:66
#: web/forms/LoginForm.py:69
#: transports/NX/NXTransport.py:61 transports/NX/TSNXTransport.py:66
#: transports/RDP/RDPTransport.py:59 transports/RDP/TSRDPTransport.py:63
#: transports/TSNX/TSNXTransport.py:66 web/forms/LoginForm.py:69
msgid "Username"
msgstr "Nome utente"
@ -1059,10 +1111,6 @@ msgstr "e riavviare il browser"
msgid "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
msgid "Transports"
msgstr "Trasporti"
@ -1119,35 +1167,44 @@ msgstr ""
msgid "toggle navigation"
msgstr "navigazione Toggle"
#: templates/uds/admin/snippets/navbar.html:17
#: templates/uds/admin/snippets/navbar.html:18
msgid "Service providers"
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"
msgstr "Autenticatori"
#: templates/uds/admin/snippets/navbar.html:20
#: templates/uds/admin/snippets/navbar.html:21
msgid "Connectivity"
msgstr "Connettività"
#: templates/uds/admin/snippets/navbar.html:21
#: templates/uds/admin/snippets/navbar.html:22
msgid "Deployed services"
msgstr "Servizi distribuiti"
#: templates/uds/admin/snippets/navbar.html:25
#: templates/uds/admin/snippets/navbar.html:26
msgid "Configuration"
msgstr "Configurazione"
#: templates/uds/admin/snippets/navbar.html:57
#: templates/uds/admin/snippets/navbar.html:56
msgid "Exit dashboard"
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
msgid "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
msgid "Login redirection to UDS"
msgstr "Reindirizzamento login a UDS"
@ -1239,7 +1296,7 @@ msgstr "Circa"
msgid "Dashboard"
msgstr "Cruscotto"
#: templates/uds/html5/templates/base.html:51
#: templates/uds/html5/templates/base.html:52
msgid ""
"Your browser is supported only partially. Please, upgrade it to a modern "
"html5 browser like Firefox, Chrome, Opera, ... (IE must be 10 or better)"
@ -1277,27 +1334,27 @@ msgstr ""
"accessibile da parte degli utenti"
#: transports/HTML5RDP/HTML5RDP.py:63 transports/NX/NXTransport.py:60
#: transports/RDP/RDPTransport.py:58 transports/RDP/TSRDPTransport.py:62
#: transports/TSNX/TSNXTransport.py:65
#: transports/NX/TSNXTransport.py:65 transports/RDP/RDPTransport.py:58
#: transports/RDP/TSRDPTransport.py:62 transports/TSNX/TSNXTransport.py:65
msgid "Empty creds"
msgstr "Vuoto creds"
#: transports/HTML5RDP/HTML5RDP.py:63 transports/NX/NXTransport.py:60
#: transports/RDP/RDPTransport.py:58 transports/RDP/TSRDPTransport.py:62
#: transports/TSNX/TSNXTransport.py:65
#: transports/NX/TSNXTransport.py:65 transports/RDP/RDPTransport.py:58
#: transports/RDP/TSRDPTransport.py:62 transports/TSNX/TSNXTransport.py:65
msgid "If checked, the credentials used to connect will be emtpy"
msgstr "Se selezionata, le credenziali utilizzate per connettersi sarà emtpy"
#: transports/HTML5RDP/HTML5RDP.py:64 transports/NX/NXTransport.py:61
#: transports/RDP/RDPTransport.py:59 transports/RDP/TSRDPTransport.py:63
#: transports/TSNX/TSNXTransport.py:66
#: transports/NX/TSNXTransport.py:66 transports/RDP/RDPTransport.py:59
#: transports/RDP/TSRDPTransport.py:63 transports/TSNX/TSNXTransport.py:66
msgid "If not empty, this username will be always used as credential"
msgstr ""
"Se non vuota, questo nome utente verrà sempre utilizzato come credenziale"
#: transports/HTML5RDP/HTML5RDP.py:65 transports/NX/NXTransport.py:62
#: transports/RDP/RDPTransport.py:60 transports/RDP/TSRDPTransport.py:64
#: transports/TSNX/TSNXTransport.py:67
#: transports/NX/TSNXTransport.py:67 transports/RDP/RDPTransport.py:60
#: transports/RDP/TSRDPTransport.py:64 transports/TSNX/TSNXTransport.py:67
msgid "If not empty, this password will be always used as credential"
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"
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"
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"
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"
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)"
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"
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"
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"
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"
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"
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"
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
msgid "NX Protocol"
msgstr "Protocollo NX"
@ -1481,35 +1590,6 @@ msgstr "Trasporto di RDP (con tunnel)"
msgid "RDP Transport for tunneled connection"
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
msgid "Remote Desktop Protocol"
msgstr "Remote Desktop Protocol"
@ -1527,14 +1607,6 @@ msgstr "Si può ottenere da"
msgid "CoRD Website"
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
msgid "Unknown error"
msgstr "Errore sconosciuto"
@ -1598,6 +1670,10 @@ msgstr ""
msgid "Authenticator do not provides information"
msgstr "Autenticatore do non fornisce informazioni"
#: web/forms/LoginForm.py:50
msgid "Select authenticator"
msgstr "Selezionare autenticatore"
#: web/forms/LoginForm.py:54
msgid "authenticator"
msgstr "autenticatore"

View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\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"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -18,70 +18,146 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: static/adm/js/api.js:23
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
#: static/adm/js/gui-elements.js:7
msgid "Service Providers"
msgstr "Fornitori di servizi"
#: static/adm/js/gui.js:191
msgid "Authenticators"
msgstr "Autenticatori"
#: static/adm/js/gui-elements.js:81
msgid "Connectivity"
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 ""
"Project-Id-Version: PACKAGE VERSION\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"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -18,35 +18,86 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: REST/methods/authenticators.py:72
#: REST/methods/authenticators.py:73
msgid "Current authenticators"
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"
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"
msgstr "Comentários"
#: REST/methods/authenticators.py:76
#: REST/methods/authenticators.py:77
msgid "Users"
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"
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
msgid "Services"
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"
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
msgid "IP Authenticator"
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
#: services/OVirt/OVirtProvider.py:94 services/Sample/SampleService.py:131
#: transports/HTML5RDP/HTML5RDP.py:65 transports/NX/NXTransport.py:62
#: transports/RDP/RDPTransport.py:60 transports/RDP/TSRDPTransport.py:64
#: transports/TSNX/TSNXTransport.py:67 web/forms/LoginForm.py:70
#: transports/NX/TSNXTransport.py:67 transports/RDP/RDPTransport.py:60
#: transports/RDP/TSRDPTransport.py:64 transports/TSNX/TSNXTransport.py:67
#: web/forms/LoginForm.py:70
msgid "Password"
msgstr "Senha"
@ -206,9 +258,9 @@ msgstr "Autenticador de LDAP de expressões regular"
#: auths/RegexLdap/Authenticator.py:72 auths/SimpleLDAP/Authenticator.py:73
#: services/OVirt/OVirtProvider.py:93 transports/HTML5RDP/HTML5RDP.py:64
#: transports/NX/NXTransport.py:61 transports/RDP/RDPTransport.py:59
#: transports/RDP/TSRDPTransport.py:63 transports/TSNX/TSNXTransport.py:66
#: web/forms/LoginForm.py:69
#: transports/NX/NXTransport.py:61 transports/NX/TSNXTransport.py:66
#: transports/RDP/RDPTransport.py:59 transports/RDP/TSRDPTransport.py:63
#: transports/TSNX/TSNXTransport.py:66 web/forms/LoginForm.py:69
msgid "Username"
msgstr "Nome de usuário"
@ -1061,10 +1113,6 @@ msgstr "e reinicie o navegador"
msgid "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
msgid "Transports"
msgstr "Transportes"
@ -1121,35 +1169,44 @@ msgstr ""
msgid "toggle navigation"
msgstr "navegação toggle"
#: templates/uds/admin/snippets/navbar.html:17
#: templates/uds/admin/snippets/navbar.html:18
msgid "Service providers"
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"
msgstr "Autenticadores"
#: templates/uds/admin/snippets/navbar.html:20
#: templates/uds/admin/snippets/navbar.html:21
msgid "Connectivity"
msgstr "Conectividade"
#: templates/uds/admin/snippets/navbar.html:21
#: templates/uds/admin/snippets/navbar.html:22
msgid "Deployed services"
msgstr "Serviços implantados"
#: templates/uds/admin/snippets/navbar.html:25
#: templates/uds/admin/snippets/navbar.html:26
msgid "Configuration"
msgstr "Configuração"
#: templates/uds/admin/snippets/navbar.html:57
#: templates/uds/admin/snippets/navbar.html:56
msgid "Exit dashboard"
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
msgid "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
msgid "Login redirection to UDS"
msgstr "Redirecionamento de login para UDS"
@ -1241,7 +1298,7 @@ msgstr "Sobre"
msgid "Dashboard"
msgstr "Painel de controle"
#: templates/uds/html5/templates/base.html:51
#: templates/uds/html5/templates/base.html:52
msgid ""
"Your browser is supported only partially. Please, upgrade it to a modern "
"html5 browser like Firefox, Chrome, Opera, ... (IE must be 10 or better)"
@ -1279,27 +1336,27 @@ msgstr ""
"accesible de usuários"
#: transports/HTML5RDP/HTML5RDP.py:63 transports/NX/NXTransport.py:60
#: transports/RDP/RDPTransport.py:58 transports/RDP/TSRDPTransport.py:62
#: transports/TSNX/TSNXTransport.py:65
#: transports/NX/TSNXTransport.py:65 transports/RDP/RDPTransport.py:58
#: transports/RDP/TSRDPTransport.py:62 transports/TSNX/TSNXTransport.py:65
msgid "Empty creds"
msgstr "Creds vazio"
#: transports/HTML5RDP/HTML5RDP.py:63 transports/NX/NXTransport.py:60
#: transports/RDP/RDPTransport.py:58 transports/RDP/TSRDPTransport.py:62
#: transports/TSNX/TSNXTransport.py:65
#: transports/NX/TSNXTransport.py:65 transports/RDP/RDPTransport.py:58
#: transports/RDP/TSRDPTransport.py:62 transports/TSNX/TSNXTransport.py:65
msgid "If checked, the credentials used to connect will be emtpy"
msgstr "Se marcada, as credenciais usadas para se conectar será vazio"
#: transports/HTML5RDP/HTML5RDP.py:64 transports/NX/NXTransport.py:61
#: transports/RDP/RDPTransport.py:59 transports/RDP/TSRDPTransport.py:63
#: transports/TSNX/TSNXTransport.py:66
#: transports/NX/TSNXTransport.py:66 transports/RDP/RDPTransport.py:59
#: transports/RDP/TSRDPTransport.py:63 transports/TSNX/TSNXTransport.py:66
msgid "If not empty, this username will be always used as credential"
msgstr ""
"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/RDP/RDPTransport.py:60 transports/RDP/TSRDPTransport.py:64
#: transports/TSNX/TSNXTransport.py:67
#: transports/NX/TSNXTransport.py:67 transports/RDP/RDPTransport.py:60
#: transports/RDP/TSRDPTransport.py:64 transports/TSNX/TSNXTransport.py:67
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"
@ -1352,46 +1409,97 @@ msgstr "Transporte NX (direto)"
msgid "NX Transport for direct connection"
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"
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"
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"
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)"
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"
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"
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"
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"
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"
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"
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
msgid "NX Protocol"
msgstr "Protocolo NX"
@ -1481,34 +1589,6 @@ msgstr "Transporte de RDP (um túnel)"
msgid "RDP Transport for tunneled connection"
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
msgid "Remote Desktop Protocol"
msgstr "Protocolo de área de trabalho remoto"
@ -1525,14 +1605,6 @@ msgstr "Você pode obtê-lo de"
msgid "CoRD Website"
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
msgid "Unknown error"
msgstr "Erro desconhecido"
@ -1595,6 +1667,10 @@ msgstr ""
msgid "Authenticator do not provides information"
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
msgid "authenticator"
msgstr "autenticador"

View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\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"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -18,70 +18,146 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: static/adm/js/api.js:23
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
#: static/adm/js/gui-elements.js:7
msgid "Service Providers"
msgstr "Prestadores de serviços"
#: static/adm/js/gui.js:191
msgid "Authenticators"
msgstr "Autenticadores"
#: static/adm/js/gui-elements.js:81
msgid "Connectivity"
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

@ -2,7 +2,7 @@
// "public" methods
api.doLog = function(data) {
if( api.debug ) {
if (api.debug) {
try {
console.log(data);
} catch (e) {
@ -10,24 +10,24 @@
}
}
}
};
api.getJson = function (path, success_fnc) {
url = api.url_for(path)
api.getJson = function(path, success_fnc) {
url = api.url_for(path);
api.doLog('Ajax GET Json for "' + url + '"');
$.ajax({
url: url,
type: "GET",
dataType: "json",
success: function(data) {
url : url,
type : "GET",
dataType : "json",
success : function(data) {
api.doLog('Success on "' + url + '".');
api.doLog('Received ' + JSON.stringify(data));
if( success_fnc != undefined ){
api.doLog('Executing success method')
if (success_fnc !== undefined) {
api.doLog('Executing success method');
success_fnc(data);
}
},
beforeSend: function (request) {
beforeSend : function(request) {
request.setRequestHeader(api.auth_header, api.token);
},
});
@ -37,9 +37,9 @@
api.debug = false;
}(window.api = window.api || {}, jQuery));
// 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) {
this.path = path || "";
@ -48,52 +48,51 @@ function BasicModelRest(path) {
}
BasicModelRest.prototype = {
get: function(options, alternate_url) {
if( options == undefined ){
get : function(options, alternate_url) {
if (options === undefined) {
options = {};
}
var path = alternate_url || this.path;
if( options.id != undefined )
if (options.id !== undefined)
path += '/' + options.id;
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
if( this.cached_types ) {
if( success_fnc ) {
if (this.cached_types) {
if (success_fnc) {
success_fnc(this.cached_types);
}
}
else {
} else {
var $this = this;
var path = this.path + '/types';
if( alternate_url != undefined )
if (alternate_url !== undefined)
path = alternate_url;
api.getJson( path, function(data) {
api.getJson(path, function(data) {
$this.cached_types = data;
if( success_fnc ) {
if (success_fnc) {
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
if( this.cached_tableInfo ) {
if( success_fnc ) {
if (this.cached_tableInfo) {
if (success_fnc) {
success_fnc(this.cached_tableInfo);
}
return;
}
var $this = this;
var path = this.path + '/tableinfo';
if( alternate_url != undefined )
if (alternate_url !== undefined)
path = alternate_url;
api.getJson( path, function(data) {
api.getJson(path, function(data) {
$this.cached_tableInfo = data;
if( success_fnc ) {
if (success_fnc) {
success_fnc($this.cached_tableInfo);
}
});
@ -110,31 +109,30 @@ function DetailModelRestApi(parentApi, path) {
DetailModelRestApi.prototype = {
// Generates a basic model with fixed methods for "detail" models
detail: function(parentId) {
detail : function(parentId) {
var $this = this;
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 )
if (alternate_url === undefined)
alternate_url = $this.parentPath + '/tableinfo/' + parentId + '/' + $this.path;
parentTableInfo( success_fnc, alternate_url )
}
parentTableInfo(success_fnc, alternate_url);
};
return rest;
}
};
// Populate api
api.providers = new BasicModelRest('providers');
//api.services = new BasicModelRest('services');
// api.services = new BasicModelRest('services');
api.authenticators = new BasicModelRest('authenticators');
api.authenticators.users = new DetailModelRestApi(api.authenticators, 'users');
@ -142,64 +140,69 @@ api.osmanagers = new BasicModelRest('osmanagers');
api.transports = new BasicModelRest('transports');
api.networks = new BasicModelRest('networks');
// Locale related
api.locale = new BasicModelRest('locale');
api.locale.tableInfo = api.locale.types = undefined;
// -------------------------------
// 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, $){
templates.cache = {}; // Will cache templates locally. If name contains '?', data will not be cached and always re-requested
(function(templates, $) {
templates.cache = {}; // Will cache templates locally. If name contains
// '?', data will not be cached and always
// re-requested
templates.get = function(name, success_fnc) {
if( !name.contains('?') ) {
if( templates.cache[name] != undefined ) {
if( success_fnc != undefined ) {
api.doLog('Getting tempkate ' + name);
if (name.indexOf('?') != -1) {
if (templates.cache[name] !== undefined) {
if (success_fnc !== undefined) {
success_fnc(templates.cache[name]);
}
return;
}
}
$.ajax({
url: '/adm/tmpl/' + name,
type: "GET",
dataType: "text",
success: function(data) {
url : '/adm/tmpl/' + name,
type : "GET",
dataType : "text",
success : function(data) {
templates.cache[name] = data;
api.doLog('Success getting template "' + name + '".');
api.doLog('Received: ' + data);
if( success_fnc != undefined ){
api.doLog('Executing success method')
if (success_fnc !== undefined) {
api.doLog('Executing success method');
success_fnc(data);
}
},
fail: function( jqXHR, textStatus, errorThrown ) {
api.doLog(jqXHR);
api.doLog(textStatus);
apid.doLog(errorThrown);
},
});
};
// Simple JavaScript Templating
// Based on John Resig - http://ejohn.org/ - MIT Licensed
templates.eval = function tmpl(str, data){
templates.evaluate = function tmpl(str, data) {
// Figure out if we're getting a template, or if we need to
// 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",
"var p=[],print=function(){p.push.apply(p,arguments);};" +
new Function("obj", "var p=[],print=function(){p.push.apply(p,arguments);};" +
// Introduce the data as local variables using with(){}
"with(obj){p.push('" +
// Convert the template into pure JavaScript
str
.replace(/[\r\t\n]/g, " ")
.split("<%").join("\t")
.replace(/((^|%>)[^\t]*)'/g, "$1\r")
.replace(/\t=(.*?)%>/g, "',$1,'")
.split("\t").join("');")
.split("%>").join("p.push('")
.split("\r").join("\\'")
+ "');}return p.join('');");
str.replace(/[\r\t\n]/g, " ").split("<%").join("\t").replace(/((^|%>)[^\t]*)'/g, "$1\r").replace(
/\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;
return data ? fn(data) : fn;
};
}(api.templates = api.templates || {}, jQuery));

View File

@ -7,13 +7,13 @@ gui.providers.link = function(event) {
gui.appendToWorkspace(gui.breadcrumbs(gettext('Service Providers')));
var tableId = gui.providers.table({
rowSelect: 'multi',
rowSelectFnc: function(nodes){
rowSelect : 'multi',
rowSelectFnc : function(nodes) {
gui.doLog(nodes);
gui.doLog(this);
gui.doLog(this.fnGetSelectedData());
},
buttons: ['edit', 'refresh', 'delete'],
buttons : [ 'edit', 'refresh', 'delete' ],
});
return false;
@ -25,26 +25,33 @@ gui.providers.link = function(event) {
gui.authenticators = new GuiElement(api.authenticators, 'auth');
gui.authenticators.link = function(event) {
api.templates.get('authenticators', function(tmpl){
gui.doLog('enter auths');
api.templates.get('authenticators', function(tmpl) {
gui.clearWorkspace();
gui.appendToWorkspace(api.templates.eval(tmpl, { auths: 'auths-placeholder', users: 'users-placeholder' }));
gui.appendToWorkspace(api.templates.evaluate(tmpl, {
auths : 'auths-placeholder',
users : 'users-placeholder'
}));
gui.setLinksEvents();
gui.authenticators.table({
container: 'auths-placeholder',
rowSelect: 'single',
buttons: ['edit', 'refresh', 'delete'],
rowSelectFnc: function(nodes){
container : 'auths-placeholder',
rowSelect : 'single',
buttons : [ 'edit', 'refresh', 'delete' ],
onRowSelect : function(nodes) {
var id = this.fnGetSelectedData()[0].id;
var user = new GuiElement(api.authenticators.users.detail(id), 'users');
user.table({
container: 'users-placeholder',
rowSelect: 'multi',
buttons: ['edit', 'refresh', 'delete'],
scroll: true,
container : 'users-placeholder',
rowSelect : 'multi',
buttons : [ 'edit', 'refresh', 'delete' ],
scroll : true,
});
return false;
},
onRefresh : function() {
$('#users-placeholder').empty(); // Remove detail on parent refresh
},
});
});
@ -57,31 +64,32 @@ gui.osmanagers.link = function(event) {
gui.appendToWorkspace(gui.breadcrumbs('Os Managers'));
gui.osmanagers.table({
rowSelect: 'single',
buttons: ['edit', 'refresh', 'delete'],
rowSelect : 'single',
buttons : [ 'edit', 'refresh', 'delete' ],
});
return false;
};
gui.connectivity = {
transports: new GuiElement(api.transports, 'trans'),
networks: new GuiElement(api.networks, 'nets'),
transports : new GuiElement(api.transports, 'trans'),
networks : new GuiElement(api.networks, 'nets'),
};
gui.connectivity.link = function(event) {
gui.clearWorkspace();
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',
container: 'ttbl',
buttons: ['edit', 'refresh', 'delete', 'pdf'],
rowSelect : 'multi',
container : 'ttbl',
buttons : [ 'edit', 'refresh', 'delete', 'pdf' ],
});
gui.connectivity.networks.table({
rowSelect: 'single',
container: 'ntbl',
buttons: ['edit', 'refresh', 'delete'],
rowSelect : 'multi',
container : 'ntbl',
buttons : [ 'edit', 'refresh', 'delete' ],
});
}
};

View File

@ -1,8 +1,9 @@
/* jshint strict: true */
(function(gui, $, undefined) {
"use strict";
// "public" methods
gui.doLog = function(data) {
if( gui.debug ) {
if (gui.debug) {
try {
console.log(data);
} catch (e) {
@ -10,51 +11,54 @@
}
}
}
};
// 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"),
"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 )
if (options === undefined)
options = {
'size' : 12,
'icon' : 'table'
};
if (options.size === undefined)
options.size = 12;
if( options.icon == undefined )
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>';
}
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){
$.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>";
}
return '<div class="row"><div class="col-lg-12"><ol class="breadcrumb">' + list + "</ol></div></div>";
};
gui.clearWorkspace = function() {
$('#page-wrapper').empty();
@ -64,7 +68,6 @@
$(data).appendTo('#page-wrapper');
};
// Links methods
gui.dashboard = function() {
gui.clearWorkspace();
@ -75,29 +78,39 @@
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" );
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);
value.exec(event);
});
});
}
};
gui.init = function() {
gui.setLinksEvents();
@ -108,102 +121,176 @@
}(window.gui = window.gui || {}, jQuery));
function GuiElement(restItem, name) {
"use strict";
this.rest = restItem;
this.name = name;
this.types = {}
this.types = {};
this.init();
}
// all gui elements has, at least, name && type
// Types must include, at least: type, icon
GuiElement.prototype = {
init: function() {
init : function() {
"use strict";
gui.doLog('Initializing ' + this.name);
var $this = this;
this.rest.types(function(data){
this.rest.types(function(data) {
var styles = '';
$.each(data, function(index, value){
$.each(data, function(index, value) {
var className = $this.name + '-' + value.type;
$this.types[value.type] = { css: className, name: value.name || '', description: value.description || '' };
gui.doLog('Creating style for ' + className )
var style = '.' + className +
' { display:inline-block; background: url(data:image/png;base64,' + value.icon + '); ' +
'width: 16px; height: 16px; vertical-align: middle; } ';
$this.types[value.type] = {
css : className,
name : value.name || '',
description : value.description || ''
};
gui.doLog('Creating style for ' + className);
var style = '.' + className + ' { display:inline-block; background: url(data:image/png;base64,' +
value.icon + '); ' + 'width: 16px; height: 16px; vertical-align: middle; } ';
styles += style;
});
if(styles != '') {
styles = '<style media="screen">' + styles + '</style>'
if (styles !== '') {
styles = '<style media="screen">' + styles + '</style>';
$(styles).appendTo('head');
}
});
},
table: function(options) {
table : function(options) {
"use strict";
// 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
// rowDeselectFnc: function to invoke on row deselection. receives 1 array - node : TR elements that were selected
// 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
// rowDeselectFnc: function to invoke on row deselection. receives 1
// array - node : TR elements that were selected
gui.doLog('Composing table for ' + this.name);
var tableId = this.name + '-table';
var $this = this;
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;
if( options.type )
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;
// Fix name columm so we can add a class icon
if( v == 'name' ) {
column.sType ='html'
}
// Empty cells transform
var renderEmptyCell = function(data) {
if( data === '' )
return '-';
return data;
};
columns.push(column);
}
});
gui.doLog(columns);
// Datetime renderer (with specified format)
var renderDate = function(format) {
return function(data, type, full) {
return strftime(format, new Date(data*1000));
};
};
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;
// 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) {
processResponse(data);
success : function(data) {
var table = gui.table(title, tableId);
if( options.container == undefined ) {
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);
$('#' + options.container).empty();
$('#' + options.container).append(table);
}
var btns = [
];
var btns = [];
if( options.buttons ) {
if (options.buttons) {
// methods for buttons click
var editFnc = function() {
@ -214,29 +301,31 @@ GuiElement.prototype = {
gui.doLog('Delete');
gui.doLog(this);
};
// What execute on refresh button push
var onRefresh = options.onRefresh || function(){};
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);
$(btn).addClass('disabled').html('<span class="fa fa-spinner fa-spin"></span>')
.width(width);
onRefresh();
$this.rest.get({
success: function(data) {
processResponse(data);
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) {
if (sel.length == 1) {
$(btn).removeClass('disabled').addClass('btn-info');
} else {
$(btn).removeClass('btn-info').addClass('disabled');
@ -244,94 +333,93 @@ GuiElement.prototype = {
};
var deleteSelected = function(btn, obj, node) {
var sel = this.fnGetSelectedData();
if( sel.length > 0) {
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) {
$.each(options.buttons, function(index, value) {
var btn;
switch (value) {
case 'edit':
btn = {
"sExtends": "text",
"sButtonText": gettext('Edit'),
"fnSelect": editSelected,
"fnClick": editFnc,
"sButtonClass": "disabled"
"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"
"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"
"sExtends" : "text",
"sButtonText" : gettext('Refresh'),
"fnClick" : refreshFnc,
"sButtonClass" : "btn-info"
};
break;
case 'csb':
btn = {
"sExtends": "csv",
"sTitle": title,
"sFileName": title + '.csv',
"sExtends" : "csv",
"sTitle" : title,
"sFileName" : title + '.csv',
};
break;
case 'pdf':
btn = {
"sExtends": "pdf",
"sTitle": title,
"sPdfMessage": "Summary Info",
"sFileName": title + '.pdf',
"sPdfOrientation": "portrait"
"sExtends" : "pdf",
"sTitle" : title,
"sPdfMessage" : "Summary Info",
"sFileName" : title + '.pdf',
"sPdfOrientation" : "portrait"
};
break;
}
if( btn != undefined )
if (btn !== undefined)
btns.push(btn);
});
}
// Initializes oTableTools
oTableTools = {
"aButtons": btns
var oTableTools = {
"aButtons" : btns
};
if( options.rowSelect ) {
oTableTools.sRowSelect = options.rowSelect
if (options.rowSelect) {
oTableTools.sRowSelect = options.rowSelect;
}
if( options.rowSelectFnc ) {
oTableTools.fnRowSelected = options.rowSelectFnc
if (options.onRowSelect) {
oTableTools.fnRowSelected = options.onRowSelect;
}
if( options.rowDeselectFnc ) {
oTableTools.fnRowDeselected = options.rowDeselectFnc
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>>",
"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 )
var tableTop = $('#' + tableId).offset().top;
if (options.scroll)
$('html, body').scrollTop(tableTop);
}
});

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 http-equiv="X-UA-Compatible" content="IE=edge">
<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 -->
<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/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">
{% block css %}{% endblock %}
</head>
<body>
@ -50,13 +48,14 @@
<script src="{% get_static_prefix %}adm/js/jquery.dataTables.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/dataTables.bootstrap.js"></script>
<script src="{% get_static_prefix %}adm/js/templating.js"></script>
<script>
// Initialize a few settings, needed for api to work
(function(api, $, undefined){

View File

@ -45,7 +45,8 @@
<ul class="dropdown-menu">
{% for lang in LANGUAGES %}
{% 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 %}
{% endfor %}
</ul>

View File

@ -62,7 +62,7 @@ urlpatterns = patterns('uds',
# Change Language
(r'^i18n/', include('django.conf.urls.i18n')),
# 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
(r'^auth/(?P<authName>.+)', 'web.views.authCallback'),
(r'^authJava/(?P<idAuth>.+)/(?P<hasJava>.*)$', 'web.views.authJava'),
@ -80,7 +80,7 @@ urlpatterns = patterns('uds',
# Internacionalization in javascript
# 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(lambda req, **kw: last_modified_date)
def jsCatalog(request, lang, domain='djangojs', packages=None):
if lang != '':
request.GET = { 'language': lang } # Fake args for catalog :-)
return javascript_catalog(request, domain, packages)