From 2bf0c3e59afee74481f2c4064196836a98e054b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adolfo=20G=C3=B3mez?= Date: Wed, 20 Nov 2013 03:16:56 +0000 Subject: [PATCH] * Fixed a bunch of javascript things * Added "gui" method to api, so we can get a description of what fields are needed for an specific item. Added REST capacity to process gui requests Updated translations --- server/src/uds/REST/__init__.py | 6 +- server/src/uds/REST/handlers.py | 3 + server/src/uds/REST/methods/authenticators.py | 9 +- server/src/uds/REST/mixins.py | 36 +- server/src/uds/core/ui/UserInterface.py | 7 +- .../src/uds/locale/de/LC_MESSAGES/django.mo | Bin 35116 -> 46899 bytes .../src/uds/locale/de/LC_MESSAGES/django.po | 1091 +++++++++++++---- .../src/uds/locale/de/LC_MESSAGES/djangojs.mo | Bin 2002 -> 2007 bytes .../src/uds/locale/de/LC_MESSAGES/djangojs.po | 20 +- .../src/uds/locale/es/LC_MESSAGES/django.mo | Bin 35085 -> 46900 bytes .../src/uds/locale/es/LC_MESSAGES/django.po | 1087 ++++++++++++---- .../src/uds/locale/es/LC_MESSAGES/djangojs.mo | Bin 2008 -> 2013 bytes .../src/uds/locale/es/LC_MESSAGES/djangojs.po | 20 +- .../src/uds/locale/fr/LC_MESSAGES/django.mo | Bin 35818 -> 47742 bytes .../src/uds/locale/fr/LC_MESSAGES/django.po | 1089 ++++++++++++---- .../src/uds/locale/fr/LC_MESSAGES/djangojs.mo | Bin 2018 -> 2022 bytes .../src/uds/locale/fr/LC_MESSAGES/djangojs.po | 20 +- .../src/uds/locale/it/LC_MESSAGES/django.mo | Bin 34729 -> 46368 bytes .../src/uds/locale/it/LC_MESSAGES/django.po | 1085 +++++++++++++--- .../src/uds/locale/it/LC_MESSAGES/djangojs.mo | Bin 2007 -> 2016 bytes .../src/uds/locale/it/LC_MESSAGES/djangojs.po | 20 +- .../src/uds/locale/pt/LC_MESSAGES/django.mo | Bin 34957 -> 46677 bytes .../src/uds/locale/pt/LC_MESSAGES/django.po | 1089 ++++++++++++---- .../src/uds/locale/pt/LC_MESSAGES/djangojs.mo | Bin 2049 -> 2057 bytes .../src/uds/locale/pt/LC_MESSAGES/djangojs.po | 20 +- server/src/uds/static/adm/js/api.js | 120 +- server/src/uds/static/adm/js/cache.js | 31 - server/src/uds/static/adm/js/gui.js | 560 ++++----- server/src/uds/static/adm/js/tools.js | 2 +- 29 files changed, 4866 insertions(+), 1449 deletions(-) delete mode 100644 server/src/uds/static/adm/js/cache.js diff --git a/server/src/uds/REST/__init__.py b/server/src/uds/REST/__init__.py index 0a620c235..3b8c90117 100644 --- a/server/src/uds/REST/__init__.py +++ b/server/src/uds/REST/__init__.py @@ -37,7 +37,7 @@ from django.views.decorators.csrf import csrf_exempt from django.utils.decorators import method_decorator from django.utils.translation import ugettext as _, activate from django.conf import settings -from handlers import Handler, HandlerError, AccessDenied +from handlers import Handler, HandlerError, AccessDenied, NotFound import time import logging @@ -150,6 +150,10 @@ class Dispatcher(View): return response except HandlerError as e: return http.HttpResponseBadRequest(unicode(e)) + except AccessDenied as e: + return http.HttpResponseForbidden(unicode(e)) + except NotFound as e: + return http.Http404(unicode(e)) except Exception as e: logger.exception('Error processing request') return http.HttpResponseServerError(unicode(e)) diff --git a/server/src/uds/REST/handlers.py b/server/src/uds/REST/handlers.py index 4231dbccb..58c4314b9 100644 --- a/server/src/uds/REST/handlers.py +++ b/server/src/uds/REST/handlers.py @@ -46,6 +46,9 @@ AUTH_TOKEN_HEADER = 'HTTP_X_AUTH_TOKEN' class HandlerError(Exception): pass +class NotFound(HandlerError): + pass + class AccessDenied(HandlerError): pass diff --git a/server/src/uds/REST/methods/authenticators.py b/server/src/uds/REST/methods/authenticators.py index 717df8a14..a6dc3529e 100644 --- a/server/src/uds/REST/methods/authenticators.py +++ b/server/src/uds/REST/methods/authenticators.py @@ -38,7 +38,7 @@ from uds.core import auths from users import Users -from uds.REST import Handler, HandlerError +from uds.REST import Handler, NotFound from uds.REST.mixins import ModelHandlerMixin, ModelTypeHandlerMixin, ModelTableHandlerMixin import logging @@ -65,6 +65,13 @@ class Types(ModelTypeHandlerMixin, Handler): def enum_types(self): return auths.factory().providers().values() + + def getGui(self, type_): + try: + return auths.factory().lookup(type_).guiDescription() + except: + raise NotFound('type not found') + class TableInfo(ModelTableHandlerMixin, Handler): path = 'authenticators' diff --git a/server/src/uds/REST/mixins.py b/server/src/uds/REST/mixins.py index ae1ba3629..43b98f268 100644 --- a/server/src/uds/REST/mixins.py +++ b/server/src/uds/REST/mixins.py @@ -32,6 +32,7 @@ ''' from __future__ import unicode_literals +from handlers import NotFound from django.utils.translation import ugettext as _ import logging @@ -85,7 +86,7 @@ class ModelHandlerMixin(object): detail = detailCls(self, path, parent = item) return getattr(detail, self._operation)() except: - return {'error': 'method not found' } + raise NotFound('method not found') def get(self): logger.debug('method GET for {0}, {1}'.format(self.__class__.__name__, self._args)) @@ -97,10 +98,9 @@ class ModelHandlerMixin(object): return self.processDetail() try: - item = list(self.getItems(pk=self._args[0]))[0] + return list(self.getItems(pk=self._args[0]))[0] except: - return {'error': 'not found' } - + raise NotFound('item not found') class ModelTypeHandlerMixin(object): ''' @@ -122,13 +122,31 @@ class ModelTypeHandlerMixin(object): def getTypes(self, *args, **kwargs): for type_ in self.enum_types(): - try: - yield self.type_as_dict(type_) - except: - logger.exception('Exception enumerating types') + yield self.type_as_dict(type_) def get(self): - return list(self.getTypes()) + logger.debug(self._args) + nArgs = len(self._args) + if nArgs == 0: + return list(self.getTypes()) + + found = None + for v in self.getTypes(): + if v['type'] == self._args[0]: + found = v + break + + if found is None: + raise NotFound('type not found') + + logger.debug('Found type {0}'.format(v)) + if nArgs == 1: + return found + + if self._args[1] == 'gui': + gui = self.getGui(self._args[0]) + logger.debug("GUI: {0}".format(gui)) + return gui class ModelTableHandlerMixin(object): diff --git a/server/src/uds/core/ui/UserInterface.py b/server/src/uds/core/ui/UserInterface.py index 5d523ad6c..9dde74292 100644 --- a/server/src/uds/core/ui/UserInterface.py +++ b/server/src/uds/core/ui/UserInterface.py @@ -32,7 +32,7 @@ ''' from __future__ import unicode_literals -from django.utils.translation import ugettext as _ +from django.utils.translation import get_language, ugettext as _ import cPickle import logging @@ -255,8 +255,8 @@ class gui(object): alter original values. ''' data = self._data.copy() - data['label'] = _(data['label']) - data['tooltip'] = _(data['tooltip']) + data['label'] = data['label'] != '' and _(data['label']) or '' + data['tooltip'] = data['tooltip'] != '' and _(data['tooltip']) or '' return data @property @@ -816,6 +816,7 @@ class UserInterface(object): object: If not none, object that will get its "initGui" invoked This will only happen (not to be None) in Services. ''' + logger.debug('Active languaje for gui translation: {0}'.format(get_language())) if obj is not None: obj.initGui() # We give the "oportunity" to fill necesary gui data before providing it to client diff --git a/server/src/uds/locale/de/LC_MESSAGES/django.mo b/server/src/uds/locale/de/LC_MESSAGES/django.mo index cd0352db23b6bdd8df89879807b3ea147a23c1f7..21b420027a6438954edbf45904df250832ebc446 100644 GIT binary patch literal 46899 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 I%t!S90EOcHX8-^I delta 9282 zcmYk=34Bgh{>SnAL_#bCnanFoEm zms|L5vN+axEUPV6HnFUBK9+SZRIQek*uk(~ifQlT$aJnDv2)C(qJbIijutVG>^4E^y<9D?tm zo)g;9vO42nA19-pnCWUS^Tt?mC&yRK(jUkwh>Oh{Um*YU{Yta{9Lv`#d z-huC7L;MbX@g}ywKQI^rBi(^@mAv2TOQ9JinG;zUPJIR{^);rx2HR8Li#*GE9sA+8 z*dHSqW*eN2>d0NFOl&~S=6U1iNRln93;A!25fs!g7J-#S$D*cWGDcw$_P|Zp08gSib_O-2pP`=jV^{JYMBx?<{@9dx=#3$$l%`=L%*O7R zi-WNiwYbir25=Mg;FesZ%yd9qmx{x2C8`6bu@_!Nb+}~|`Bw)b>9*!59yLd!u@&Z_ zI3gEgPMX<7>>Uh+cJC&WH4%RmZ7G2Ick?}#720)OF=1m33bB>tV<0h zQ@@3J;ZTO#7}Kx`PDDL07yYo@ScO`w)u)~-EgI?=Z3hLPf%*PK= zi!P~`Wo2O%#^YIJnk~N=MvuKv+wfi-geOpo_Yc$}9ZWi>U=5DL_fc!2M=U!7i*c~_ z|5XZla6}*X12h_0=vEo(!CP<|Ucd~DiE~q2gBtM$)BrYPAU=lb$U)Rxe~-#s0HX@R zj;QU}A2YQ7Gbt!FkE2%ePE5yR*c2PF!Zhct@DA*ZTFrxulTjV0L`~H)48!}dIqpF{ z_a)R?xPbbwT}JN=3O`dw!AX2YGI1M{Me7^Xst+4rSvfcewVfWuvG}2}2lLaO`VtJq zM^Mju0o8$9sE##GaMxA{svem@{#oEwZyK~%?nLc|Jk(+=K`pWcsMIb+y?bGB*&Fq3nU=UndsP&=qU3J03!og>?lrvX(4_HW-Im zE19Sl+>M%&Rj8D1!w7rM4UMWuKz>V|hvFZvqQp`ax9!BMD=_eZUnRMY^*n)BJFJrBcZFTn_0i|X)xY^nYK z7KLUse18=At^j*wk%QNB5u>?JGz!t+!3RMY5TD zY|8tsXbKv^AY(Erm7`G^n2ikH@|yD}kZ+OoI!55{$h2DF>^Ws>28QD*<8IV*PNU}j z3Kn8qD$mqDf0TkAbRPLiTGvsFqvHtofu$Hv-9~lv4eW{+u`~XGx<8Ve)bWw1jOL=g zc;%?=xeArJjac`k97+DwaFB+2cpR0gS1}RmrMbU6l2NJNidszjQ5`vjy8oQ1zi<2m zeQEy+_2TbL`z_S>z-N@ZcAAYM|LtiAqd^xAL5(C08)7L&;v#H|+fW^N3E6?xo9K^C z)7`Zbg8FWBM?aj7%5Wa)#SfYGCr}yK?WLd;y<~g?^`a}N)%^!{#emW79QH${I0Mzu zB2%&PR`va; z)&3+7z*kTiyot(0E50%^0=r-oDih;TBc6hdumrizYb~On5qh!M!?r=qZO}NkBW+Oi z2-JhR8)Hx%>}Tp}sI`-U8o&nAz8UqxZKz$a8?}~R!5-TG7b$3teApXGWgpatN1-xO ziW+$h7UNcIjrGR64-UiL)Vrb9$~26^<*41UA6a+S1#E_46Wl52i5+>rm7xMwpuSXF zFc1%!`e{s|{y8cW(G%TYI(<>srK1+>bkwS!gDtQW)p0Lsmu$f%xC_;h=h54k!bu99 z@I2~4Kcag6JH}$CN$&6cY*a@c!A!h@(HNWUF3OomGOfE&Q+f`SksH_x+e~&p?dcdt zec@#C&$_YpnTDHqC-t6F+>X>D@36L@I{K|?zlHi`XT3z+JLQa3u?p% z(GQPdb3BDw6BnnF|A7=fra>ucJIy`O9h0c{#Z;_9{n|Z_ZSXg2ilI5~{auh9W#ysf z`XF|}U$G~4obIMP3xlZV8W(vfw5DM#s>i!fb9WrIzu!hp$qiJ`|BLEabJElU#~W)< z9o>(i_!DZ517^5W&8ZtsG+ks)O^8^ImH;1*LL5>P3&D=Ij6l;}KMb-bTIP8@vN= zqDInemYdQL)as8y25-fney40O+NkGmLCyUhT&w->P+)6XL-<}6;DgAtS^vSII5Cf} z6>h>z^yIt$0LeoBSbO-v^05NAc@Y+31%8C=SZn-juE9O1#XN3~``kU)miJpx|u>{qD)u^f4fVyrwD#b@k{Tv2R{}MIlzhF5wFLmFy zqLlnAMVDxZ#~yRtxt@(m;d0~~WZgh^oRvP${lM%-z3?WgW5H$oZ3$yh9q?iRK7h?| zyJIFNnD;~ivcoluI z3F*`KBoH-#DAb6PP#GAF1JGMVp#_D5=!d6J4?2Tm@CW4cZ6#K^i)O3w5mY9&qt?JP z$Of^FU=_As=>BDMD~_Xn4cRExV75q0+=2eQ-#Sb|BY6cw@I7pg*D)Le7rVxyQaB#F zV-;$(??jFGbySDWV=(>;L-0pbsvFa*&e#{jFbCUd|1Y7?lZJ;e6i;I;UNQBSce!&N zZHz~HZl$17I@YvL#zxfhu>+Q&2C~t35Y@4_P>c5q)p@_=cegvIZBaMGqE>Yl2I4$y zjy0xzBkBSBQETChY5y4Yg5NL;gO<4W%{DGZonM36zK@|-BiT(ssd)~SflHW%-=oea zEOmeX4@aebH74Wp*aLq-t(i{C+$kB2ZK#)H4z9Q^dQmZI5w1dwa1&}OoC1f3bjVw!+Q964G&DE zaE*qs7`vSR#l+><3g1U%aF+DoX^dG2-RI26@^;iydHVI(fYAl!+{%wZggZz9XUYQBnJ;aH2h zFKV^BeN#}|aW*!?YPa2Mt*20*hG$W${SZdrY19j@p?dDS#{DN(1cpltvvph^<5yLUVtaNdD6U zsMa0YS~{+{)cyR~l*_sPpQgMKV~Gg!j75~aIi@lXwK6-KI>ox<5I=hmBWV8&XPNU^ zl$CD2HFf_P0oLD$Hk={Ej|CSU{FCJ@DxwJvmgsqgkQt z2BBjCC$HjKVln00M<2>>Pzl9vF_}0{WSML9fhwXLXX;d~YRY$;dKebc)&XOPA%xyv zcl?!~_nES`T{BLO!Z<>IVJIN7X=9sP_o9wkm%4x3b)@_X5x}|Lrai})N!yc@pC(39 zK8)Rng?0On!iz)=ar=0Q!W^O-7k9_+h&;+Viip#7CH`VT+xMn?n>)>Q*Jwzfd=s0R zwk4DwCB~R~-T3dKGMdm=>CeYPDjyJo&BZ^OlRp{f&>mvWnWnlgrpnDtyG?lmQAso+ zbcCC812JCtUrM0_`w>-?=i!IM$HZR<9jU}Bb7K|dU^Q|)PFy0E5fwxiu6YCp5IR03 zUM7apz6zrW9T$jvqHg|!)WVU(MR%Y+zh9|=V>@w+cvuy4{DCcr<&t~$Vm0wKQA#{V zw5Q!mJ$2)E8)9jgLg-kHQKnpgk#2L{zyDM`K=dcx zBu)@I+7kPT2UOvB*TuTu*q`UD(KCs2FbK2t{?-)k!r8DYkK|DZjHBZ-NW*Q1VsE_FZ0@$(+ebtV2c{+Tq!5Pv6Ha3YoHO!@zaokR-t zL}E5EnR+Dt3#VZ}LPu93o%n)iOPddoNBI|GH8Gz0dl-m81c&?n(Uf-8)!iTUIQbaG z1fnP9ZJ0)MqTJoRk(zt_Zv<2W2_M3rNFwebZXW~8eS1v9Q+0Cp5>AXUjji#0B7?Sc z!q2qt#$%@3g!Ut*yv|q;m(f0)IAhv=!+#KyXY8T`_VF%}x+ZXdH?0@7B^PN>%ly4s|_{?cN=Q)q_ z@4}NF|K9z>W8xBGW1RiP0UrB&$x1h;AC#`}ah@-G(PKZoV5OZ?{(&>I;%y&$*P?ay z;Kdv4$f{E3sj9nt?93&>_T5VoJW2Nay}|a3rIB{^UVmrCQXh}Kd0Cd-xH_R#YC&OX zLAf<-Va4oOh2?)v@3!hzzU7rgbL?5(U3O?qh&`mH%9(plH_y)DD?QGZd(V38zpS3+ ztXVVN$Nq6`rem+G_SosQ!FFP8W4pGtgMGesyc4&6fyb$OV7|vmd2qguee|If_JmDa z>~5PoJ0+W&dYqTHH1ODGwtAh}59if0xo!67({}U69<%#AKE{rEBFkR+L}JTD1?3e5 z(aB@S*Y)((qlM)K^PD+5Qaw(_leWhWeyYsg`&5#hw0pAi+U`J) yWslus|7iQr{uB1P0}tElp50+zd~R}s5w9LCWpvK9gJB+LqjSyUY\n" "Language-Team: LANGUAGE \n" @@ -42,23 +42,23 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" -#: REST/methods/authenticators.py:73 +#: REST/methods/authenticators.py:80 msgid "Current authenticators" msgstr "Aktuelle Authentifikatoren" -#: REST/methods/authenticators.py:75 REST/methods/networks.py:68 +#: REST/methods/authenticators.py:82 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:76 REST/methods/osmanagers.py:72 +#: REST/methods/authenticators.py:83 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:77 +#: REST/methods/authenticators.py:84 msgid "Users" msgstr "Benutzer" @@ -114,14 +114,263 @@ msgstr "Zustand" msgid "Last access" msgstr "Zuletzt online" -#: admin/views.py:55 admin/views.py:63 admin/views.py:76 web/views.py:422 +#: admin/views.py:55 admin/views.py:63 admin/views.py:77 web/views.py:422 msgid "Forbidden" msgstr "Verboten" -#: admin/views.py:69 +#: admin/views.py:70 msgid "requested a template that do not exists" msgstr "gefordert, dass eine Vorlage, die nicht vorhanden ist" +#: auths/ActiveDirectory_enterprise/Authenticator.py:29 +#: auths/EDirectory_enterprise/Authenticator.py:60 +#: auths/RegexLdap/Authenticator.py:49 auths/SimpleLDAP/Authenticator.py:49 +#: services/HyperV_enterprise/HyperVClusterProvider.py:89 +#: services/HyperV_enterprise/HyperVProvider.py:81 +#: services/OVirt/OVirtProvider.py:92 +#: services/Vmware_enterprise/ServiceProviderVC.py:28 +msgid "Host" +msgstr "Host" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:29 +msgid "Active Directory Server IP or Hostname" +msgstr "Active Directory-Server IP oder Hostname" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:30 +#: auths/EDirectory_enterprise/Authenticator.py:62 +#: auths/RegexLdap/Authenticator.py:51 auths/SimpleLDAP/Authenticator.py:51 +msgid "Use SSL" +msgstr "Verwendung SSL" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:30 +msgid "If checked, will use a ssl connection to Active Directory" +msgstr "Wenn diese Option aktiviert, wird eine Ssl-Verbindung mit Active Directory verwenden." + +#: auths/ActiveDirectory_enterprise/Authenticator.py:31 +msgid "Compatibility" +msgstr "Kompatibilität" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:31 +msgid "Compatibility of AD connection (Usually windows 2000 and later)" +msgstr "Kompatibilität der AD-Verbindung (in der Regel Windows 2000 und höher)" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:33 +#: auths/RegexLdap/Authenticator.py:52 auths/SimpleLDAP/Authenticator.py:52 +msgid "Ldap User" +msgstr "LDAP-Benutzer" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:33 +msgid "" +"Username with read privileges on the base selected (use USER@DOMAIN.DOM form " +"for this)" +msgstr "" +"Benutzernamen mit lesen Berechtigungen auf der Basis ausgewählt (USER@DOMAIN verwenden.DOM-Formular " +"dafür)" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:34 +#: auths/ActiveDirectory_enterprise/Authenticator.py:52 +#: auths/EDirectory_enterprise/Authenticator.py:64 +#: auths/RegexLdap/Authenticator.py:53 auths/RegexLdap/Authenticator.py:76 +#: auths/SimpleLDAP/Authenticator.py:53 auths/SimpleLDAP/Authenticator.py:77 +#: core/auths/BaseAuthenticator.py:136 +#: osmanagers/WindowsOsManager/WinDomainOsManager.py:34 +#: osmanagers/WindowsOsManager/WinRandomPassOsManager.py:30 +#: services/HyperV_enterprise/HyperVClusterProvider.py:92 +#: services/HyperV_enterprise/HyperVProvider.py:84 +#: services/OVirt/OVirtProvider.py:94 services/Sample/SampleService.py:131 +#: services/Vmware_enterprise/ServiceProviderVC.py:31 +#: transports/HTML5RDP/HTML5RDP.py:65 transports/NX/NXTransport.py:62 +#: transports/NX/TSNXTransport.py:67 transports/RDP/RDPTransport.py:60 +#: transports/RDP/TSRDPTransport.py:64 +#: transports/RGS-enterprise/RGSTransport.py:43 +#: transports/RGS-enterprise/TRGSTransport.py:48 +#: transports/TSNX/TSNXTransport.py:67 web/forms/LoginForm.py:70 +msgid "Password" +msgstr "Passwort" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:34 +#: auths/EDirectory_enterprise/Authenticator.py:64 +#: auths/RegexLdap/Authenticator.py:53 auths/SimpleLDAP/Authenticator.py:53 +msgid "Password of the ldap user" +msgstr "Kennwort für den Ldap-Benutzer" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:35 +#: auths/EDirectory_enterprise/Authenticator.py:65 +#: auths/RegexLdap/Authenticator.py:54 auths/SimpleLDAP/Authenticator.py:54 +#: services/HyperV_enterprise/HyperVClusterProvider.py:93 +#: services/HyperV_enterprise/HyperVProvider.py:85 +#: services/OVirt/OVirtProvider.py:95 +#: services/Vmware_enterprise/ServiceProviderVC.py:32 +msgid "Timeout" +msgstr "Timeout" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:35 +#: auths/EDirectory_enterprise/Authenticator.py:65 +#: auths/RegexLdap/Authenticator.py:54 auths/SimpleLDAP/Authenticator.py:54 +msgid "Timeout in seconds of connection to LDAP" +msgstr "Timeout in Sekunden über LDAP-Verbindung" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:37 +msgid "Active Directory Authenticator" +msgstr "Active Directory-Authenticator" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:39 +msgid "Authenticate against Active Directory" +msgstr "Mithilfe von Active Directory zu authentifizieren" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:48 +#: auths/EDirectory_enterprise/Authenticator.py:77 +#: auths/RegexLdap/Authenticator.py:72 auths/SimpleLDAP/Authenticator.py:73 +#: services/HyperV_enterprise/HyperVClusterProvider.py:91 +#: services/HyperV_enterprise/HyperVProvider.py:83 +#: services/OVirt/OVirtProvider.py:93 +#: services/Vmware_enterprise/ServiceProviderVC.py:30 +#: transports/HTML5RDP/HTML5RDP.py:64 transports/NX/NXTransport.py:61 +#: transports/NX/TSNXTransport.py:66 transports/RDP/RDPTransport.py:59 +#: transports/RDP/TSRDPTransport.py:63 +#: transports/RGS-enterprise/RGSTransport.py:42 +#: transports/RGS-enterprise/TRGSTransport.py:47 +#: transports/TSNX/TSNXTransport.py:66 web/forms/LoginForm.py:69 +msgid "Username" +msgstr "Benutzername" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:50 +#: auths/EDirectory_enterprise/Authenticator.py:79 +#: auths/RegexLdap/Authenticator.py:74 auths/SAML_enterprise/SAML.py:114 +#: auths/SimpleLDAP/Authenticator.py:75 +msgid "Group" +msgstr "Gruppe" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:67 +#: auths/ActiveDirectory_enterprise/Authenticator.py:442 +msgid "Must specify the username in the form USERNAME@DOMAIN.DOM" +msgstr "Müssen der Benutzername in der Form USERNAME@DOMAIN angeben.DOM" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:164 +#: auths/EDirectory_enterprise/Authenticator.py:123 +#: auths/RegexLdap/Authenticator.py:226 auths/SimpleLDAP/Authenticator.py:158 +msgid "Ldap connection error: " +msgstr "LDAP-Verbindungsfehler: " + +#: auths/ActiveDirectory_enterprise/Authenticator.py:344 +#: auths/ActiveDirectory_enterprise/Authenticator.py:390 +#: auths/EDirectory_enterprise/Authenticator.py:243 +#: auths/EDirectory_enterprise/Authenticator.py:286 +#: auths/RegexLdap/Authenticator.py:303 auths/RegexLdap/Authenticator.py:346 +#: auths/SimpleLDAP/Authenticator.py:269 auths/SimpleLDAP/Authenticator.py:313 +msgid "Username not found" +msgstr "Benutzername wurde nicht gefunden" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:377 +#: auths/SimpleLDAP/Authenticator.py:302 +msgid "Group not found" +msgstr "Gruppe nicht gefunden" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:410 +#: auths/ActiveDirectory_enterprise/Authenticator.py:428 +#: auths/EDirectory_enterprise/Authenticator.py:303 +#: auths/RegexLdap/Authenticator.py:367 auths/SimpleLDAP/Authenticator.py:328 +#: auths/SimpleLDAP/Authenticator.py:342 +msgid "Too many results, be more specific" +msgstr "Zu viele Ergebnisse, sein mehr spezifisch" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:451 +msgid "Domain seems to be incorrect, please check it" +msgstr "Domäne scheint nicht korrekt, bitte überprüfen es" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:456 +msgid "Ldap does not seem an Active Directory (do not have user objects)" +msgstr "LDAP scheint kein Active Directory (Benutzerobjekte nicht haben)" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:464 +msgid "Ldap does not seem an Active Directory (no not have group objects)" +msgstr "LDAP scheint kein Active Directory (Nein, nicht haben Gruppenobjekte)" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:472 +msgid "" +"Ldap does not seem an Active Directory (do not have any user nor groups)" +msgstr "" +"LDAP scheint kein Active Directory (haben noch keine Benutzer oder Gruppen)" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:477 +#: auths/EDirectory_enterprise/Authenticator.py:358 +#: auths/RegexLdap/Authenticator.py:428 auths/SimpleLDAP/Authenticator.py:423 +msgid "Connection params seem correct, test was succesfully executed" +msgstr "Verbindung Params scheinen korrekt, Test wurde erfolgreich ausgeführt" + +#: auths/EDirectory_enterprise/Authenticator.py:60 +msgid "EDirectory Server IP or Hostname" +msgstr "EDirectory Server IP oder Hostname" + +#: auths/EDirectory_enterprise/Authenticator.py:61 +#: auths/RegexLdap/Authenticator.py:50 auths/SimpleLDAP/Authenticator.py:50 +#: services/HyperV_enterprise/HyperVClusterProvider.py:90 +#: services/HyperV_enterprise/HyperVProvider.py:82 +#: services/Vmware_enterprise/ServiceProviderVC.py:29 +msgid "Port" +msgstr "Port" + +#: auths/EDirectory_enterprise/Authenticator.py:61 +#: auths/RegexLdap/Authenticator.py:50 auths/SimpleLDAP/Authenticator.py:50 +msgid "Ldap port (389 for non ssl, 636 for ssl normally" +msgstr "LDAP-Port (389 für nicht Ssl, 636 für Ssl normalerweise" + +#: auths/EDirectory_enterprise/Authenticator.py:62 +#: auths/RegexLdap/Authenticator.py:51 auths/SimpleLDAP/Authenticator.py:51 +msgid "" +"If checked, will use a ssl connection to ldap (if port is 389, will use in " +"fact port 636)" +msgstr "" +"Wenn diese Option aktiviert ist, verwendet eine Ssl-Verbindung zum Ldap " +"(Wenn Port 389 ist, wird in Tatsache Port 636)" + +#: auths/EDirectory_enterprise/Authenticator.py:63 +msgid "Admin user" +msgstr "Admin-Benutzer" + +#: auths/EDirectory_enterprise/Authenticator.py:63 +msgid "Username with read privileges on the eDirectory" +msgstr "Benutzernamen mit lesen Berechtigungen für das eDirectory" + +#: auths/EDirectory_enterprise/Authenticator.py:67 +msgid "eDirectory Authenticator" +msgstr "eDirectory Authenticator" + +#: auths/EDirectory_enterprise/Authenticator.py:69 +msgid "Authenticate against eDirectory" +msgstr "Authentifizieren gegen eDirectory" + +#: auths/EDirectory_enterprise/Authenticator.py:323 +#: auths/RegexLdap/Authenticator.py:387 auths/SimpleLDAP/Authenticator.py:363 +msgid "Ldap search base is incorrect" +msgstr "LDAP-Suche base ist falsch" + +#: auths/EDirectory_enterprise/Authenticator.py:328 +#: auths/RegexLdap/Authenticator.py:392 auths/SimpleLDAP/Authenticator.py:368 +msgid "Ldap user class seems to be incorrect (no user found by that class)" +msgstr "" +"LDAP-Benutzerklasse scheint nicht korrekt (kein Benutzer gefunden durch " +"diese Klasse)" + +#: auths/EDirectory_enterprise/Authenticator.py:336 +#: auths/SimpleLDAP/Authenticator.py:384 +msgid "" +"Ldap user id attribute seems to be incorrect (no user found by that " +"attribute)" +msgstr "" +"LDAP-Benutzer-Id-Attribut scheint falsch (kein Benutzer gefunden damit -" +"Attribut)" + +#: auths/EDirectory_enterprise/Authenticator.py:344 +msgid "Expected group attribute " +msgstr "Erwartete Gruppenattribut " + +#: auths/EDirectory_enterprise/Authenticator.py:353 +msgid "" +"Ldap user class or user id attr is probably wrong (Ldap is an eDirectory?)" +msgstr "" +"LDAP-Benutzer Klasse oder Benutzer-Id-Attr ist vermutlich falsch (Ldap ist eine eDirectory?)" + #: auths/IP/Authenticator.py:48 auths/IP/Authenticator.py:50 msgid "IP Authenticator" msgstr "IP-Authenticator" @@ -169,69 +418,14 @@ msgstr "Wenn diese Option aktiviert, wird der Host umgekehrte Dns sein." msgid "Internal structures seems ok" msgstr "Interne Strukturen scheint in Ordnung" -#: auths/RegexLdap/Authenticator.py:49 auths/SimpleLDAP/Authenticator.py:49 -#: services/OVirt/OVirtProvider.py:92 -msgid "Host" -msgstr "Host" - #: auths/RegexLdap/Authenticator.py:49 msgid "Ldap Server Host" msgstr "LDAP-Server-Host" -#: auths/RegexLdap/Authenticator.py:50 auths/SimpleLDAP/Authenticator.py:50 -msgid "Port" -msgstr "Port" - -#: auths/RegexLdap/Authenticator.py:50 auths/SimpleLDAP/Authenticator.py:50 -msgid "Ldap port (389 for non ssl, 636 for ssl normally" -msgstr "LDAP-Port (389 für nicht Ssl, 636 für Ssl normalerweise" - -#: auths/RegexLdap/Authenticator.py:51 auths/SimpleLDAP/Authenticator.py:51 -msgid "Use SSL" -msgstr "Verwendung SSL" - -#: auths/RegexLdap/Authenticator.py:51 auths/SimpleLDAP/Authenticator.py:51 -msgid "" -"If checked, will use a ssl connection to ldap (if port is 389, will use in " -"fact port 636)" -msgstr "" -"Wenn diese Option aktiviert ist, verwendet eine Ssl-Verbindung zum Ldap " -"(Wenn Port 389 ist, wird in Tatsache Port 636)" - -#: auths/RegexLdap/Authenticator.py:52 auths/SimpleLDAP/Authenticator.py:52 -msgid "Ldap User" -msgstr "LDAP-Benutzer" - #: auths/RegexLdap/Authenticator.py:52 auths/SimpleLDAP/Authenticator.py:52 msgid "Username with read privileges on the base selected" msgstr "Benutzernamen mit lesen Berechtigungen auf der Basis ausgewählt" -#: auths/RegexLdap/Authenticator.py:53 auths/RegexLdap/Authenticator.py:76 -#: auths/SimpleLDAP/Authenticator.py:53 auths/SimpleLDAP/Authenticator.py:77 -#: core/auths/BaseAuthenticator.py:136 -#: osmanagers/WindowsOsManager/WinDomainOsManager.py:34 -#: 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/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" - -#: auths/RegexLdap/Authenticator.py:53 auths/SimpleLDAP/Authenticator.py:53 -msgid "Password of the ldap user" -msgstr "Kennwort für den Ldap-Benutzer" - -#: auths/RegexLdap/Authenticator.py:54 auths/SimpleLDAP/Authenticator.py:54 -#: services/OVirt/OVirtProvider.py:95 -msgid "Timeout" -msgstr "Timeout" - -#: auths/RegexLdap/Authenticator.py:54 auths/SimpleLDAP/Authenticator.py:54 -msgid "Timeout in seconds of connection to LDAP" -msgstr "Timeout in Sekunden über LDAP-Verbindung" - #: auths/RegexLdap/Authenticator.py:55 auths/SimpleLDAP/Authenticator.py:55 msgid "Base" msgstr "Base" @@ -281,42 +475,6 @@ msgstr "Regex LDAP-Authenticator" msgid "Regular Expressions LDAP authenticator" 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/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" - -#: auths/RegexLdap/Authenticator.py:74 auths/SimpleLDAP/Authenticator.py:75 -msgid "Group" -msgstr "Gruppe" - -#: auths/RegexLdap/Authenticator.py:226 auths/SimpleLDAP/Authenticator.py:158 -msgid "Ldap connection error: " -msgstr "LDAP-Verbindungsfehler: " - -#: auths/RegexLdap/Authenticator.py:303 auths/RegexLdap/Authenticator.py:346 -#: auths/SimpleLDAP/Authenticator.py:269 auths/SimpleLDAP/Authenticator.py:313 -msgid "Username not found" -msgstr "Benutzername wurde nicht gefunden" - -#: auths/RegexLdap/Authenticator.py:367 auths/SimpleLDAP/Authenticator.py:328 -#: auths/SimpleLDAP/Authenticator.py:342 -msgid "Too many results, be more specific" -msgstr "Zu viele Ergebnisse, sein mehr spezifisch" - -#: auths/RegexLdap/Authenticator.py:387 auths/SimpleLDAP/Authenticator.py:363 -msgid "Ldap search base is incorrect" -msgstr "LDAP-Suche base ist falsch" - -#: auths/RegexLdap/Authenticator.py:392 auths/SimpleLDAP/Authenticator.py:368 -msgid "Ldap user class seems to be incorrect (no user found by that class)" -msgstr "" -"LDAP-Benutzerklasse scheint nicht korrekt (kein Benutzer gefunden durch " -"diese Klasse)" - #: auths/RegexLdap/Authenticator.py:401 msgid "" "Ldap user id attr is probably wrong (can't find any user with both " @@ -333,9 +491,116 @@ msgstr "" "LDAP Gruppe Id-Attribut scheint nicht korrekt (keine Gruppe gefunden, die -" "Attribut)" -#: auths/RegexLdap/Authenticator.py:428 auths/SimpleLDAP/Authenticator.py:423 -msgid "Connection params seem correct, test was succesfully executed" -msgstr "Verbindung Params scheinen korrekt, Test wurde erfolgreich ausgeführt" +#: auths/SAML_enterprise/SAML.py:80 +msgid "SAML Authenticator" +msgstr "SAML Authenticator" + +#: auths/SAML_enterprise/SAML.py:92 +msgid "SAML (v2.0) Authenticator" +msgstr "SAML (v2. 0) Authenticator" + +#: auths/SAML_enterprise/SAML.py:111 templates/uds/internal_page.html:28 +msgid "User" +msgstr "Benutzer" + +#: auths/SAML_enterprise/SAML.py:120 +msgid "Private key" +msgstr "Der Private Schlüssel" + +#: auths/SAML_enterprise/SAML.py:121 +msgid "" +"Private key used for sign and encription, as generated in base 64 from " +"openssl" +msgstr "" +"Privater Schlüssel zum Zeichen und Encription, wie base-64 von generiert " +"OpenSSL" + +#: auths/SAML_enterprise/SAML.py:122 +msgid "Certificate" +msgstr "Zertifikat" + +#: auths/SAML_enterprise/SAML.py:123 +msgid "Server certificate (public), , as generated in base 64 from openssl" +msgstr "Server-Zertifikat als base-64 von Openssl erzeugte (öffentlich)," + +#: auths/SAML_enterprise/SAML.py:124 +msgid "IDP Metadata" +msgstr "IDP-Metadaten" + +#: auths/SAML_enterprise/SAML.py:125 +msgid "" +"You can enter here the URL or the IDP metadata or the metadata itself (xml)" +msgstr "" +"Sie können hier die URL oder die IDP-Metadaten oder die Metadaten selbst (Xml) eingeben." + +#: auths/SAML_enterprise/SAML.py:127 +msgid "Entity ID" +msgstr "Einheits-ID" + +#: auths/SAML_enterprise/SAML.py:128 +msgid "ID of the SP. If left blank, this will be autogenerated from server URL" +msgstr "SP-ID Wenn leer, wird dies automatisch vom Server URL sein." + +#: auths/SAML_enterprise/SAML.py:130 +msgid "User name attrs" +msgstr "Benutzer Name attrs" + +#: auths/SAML_enterprise/SAML.py:131 +msgid "Fields from where to extract user name" +msgstr "Felder aus wo Sie Benutzernamen extrahieren" + +#: auths/SAML_enterprise/SAML.py:133 +msgid "Group name attrs" +msgstr "Gruppe Name attrs" + +#: auths/SAML_enterprise/SAML.py:134 +msgid "Fields from where to extract the groups" +msgstr "Felder von wo die Gruppen zu extrahieren" + +#: auths/SAML_enterprise/SAML.py:136 +msgid "Real name attrs" +msgstr "Richtiger Name attrs" + +#: auths/SAML_enterprise/SAML.py:137 +msgid "Fields from where to extract the real name" +msgstr "Felder aus wo man den richtigen Namen zu extrahieren" + +#: auths/SAML_enterprise/SAML.py:160 +msgid "" +"Server certificate should be a valid PEM (PEM certificates starts with -----" +"BEGIN CERTIFICATE-----)" +msgstr "" +"Server-Zertifikat sollte ein gültiger PEM (PEM-Zertifikate-beginnt mit---" +"BEGIN CERTIFICATE---)" + +#: auths/SAML_enterprise/SAML.py:165 +msgid "Invalid server certificate. " +msgstr "Ungültigen Serverzertifikats. " + +#: auths/SAML_enterprise/SAML.py:168 +msgid "" +"Private key should be a valid PEM (PEM private keys starts with -----BEGIN " +"RSA PRIVATE KEY-----" +msgstr "" +"Der Private Schlüssel sollte ein gültiger PEM (PEM private Schlüssel beginnt mit---BEGIN " +"RSA PRIVATE KEY---" + +#: auths/SAML_enterprise/SAML.py:197 +#, python-brace-format +msgid "Can't fetch url {0}: {1}" +msgstr "Kann nicht abgerufen werden Url {0}: {1}" + +#: auths/SAML_enterprise/SAML.py:208 +msgid " (obtained from URL)" +msgstr " (gewonnen von URL)" + +#: auths/SAML_enterprise/SAML.py:209 +msgid "XML do not seems valid for IDP Metadata " +msgstr "XML scheint nicht gültig für IDP-Metadaten " + +#: auths/SAML_enterprise/SAML.py:227 +msgid "Can't access idp metadata" +msgstr "Idp-Metadaten kann nicht zugegriffen werden." #: auths/Sample/SampleAuth.py:71 msgid "Sample Authenticator" @@ -397,24 +662,12 @@ msgstr "SimpleLDAP Authenticator" msgid "Simple LDAP authenticator" msgstr "Einfache LDAP-Authentifizierungsserver" -#: auths/SimpleLDAP/Authenticator.py:302 -msgid "Group not found" -msgstr "Gruppe nicht gefunden" - #: auths/SimpleLDAP/Authenticator.py:376 msgid "Ldap group class seems to be incorrect (no group found by that class)" msgstr "" "LDAP Gruppe Klasse scheint nicht korrekt (keine Gruppe gefunden durch diese " "Klasse)" -#: auths/SimpleLDAP/Authenticator.py:384 -msgid "" -"Ldap user id attribute seems to be incorrect (no user found by that " -"attribute)" -msgstr "" -"LDAP-Benutzer-Id-Attribut scheint falsch (kein Benutzer gefunden damit -" -"Attribut)" - #: auths/SimpleLDAP/Authenticator.py:401 msgid "" "Ldap user class or user id attr is probably wrong (can't find any user with " @@ -634,6 +887,66 @@ msgstr "Belastung" msgid "Storage" msgstr "Speicher" +#: dispatchers/wyse_enterprise/views.py:111 +msgid "There are no authenticators available for login" +msgstr "Es gibt keine Authentifikatoren für login" + +#: dispatchers/wyse_enterprise/views.py:124 +#, python-brace-format +msgid "The authenticator {0} is not usable" +msgstr "Der Authentifikator {0} kann nicht verwendet werden" + +#: dispatchers/wyse_enterprise/views.py:131 xmlrpc/auths/AdminAuth.py:168 +msgid "Invalid credentials" +msgstr "Ungültiger Anmeldeinformationen" + +#: dispatchers/wyse_enterprise/views.py:139 +#, python-brace-format +msgid "The domain {0} does not exists" +msgstr "Die Domäne {0} ist nicht vorhanden" + +#: dispatchers/wyse_enterprise/views.py:200 +msgid "No services available" +msgstr "Keine Dienste zur Verfügung" + +#: dispatchers/wyse_enterprise/views.py:215 +#: dispatchers/wyse_enterprise/views.py:309 +msgid "Invalid session" +msgstr "Ungültige Sitzung" + +#: dispatchers/wyse_enterprise/views.py:219 +#: dispatchers/wyse_enterprise/views.py:313 +msgid "Invalid authorization" +msgstr "Ungültige Autorisierung" + +#: dispatchers/wyse_enterprise/views.py:230 +#: dispatchers/wyse_enterprise/views.py:319 +msgid "Invalid request" +msgstr "Ungültige Anforderung" + +#: dispatchers/wyse_enterprise/views.py:233 +#: dispatchers/wyse_enterprise/views.py:322 +msgid "Invalid credentials used" +msgstr "Ungültiger Anmeldeinformationen verwendet" + +#: dispatchers/wyse_enterprise/views.py:254 +#: dispatchers/wyse_enterprise/views.py:257 web/errors.py:62 +msgid "Service not found" +msgstr "-Dienst nicht gefunden" + +#: dispatchers/wyse_enterprise/views.py:271 web/errors.py:61 +msgid "Transport not found" +msgstr "Verkehr nicht gefunden" + +#: dispatchers/wyse_enterprise/views.py:275 +#: dispatchers/wyse_enterprise/views.py:282 +#: dispatchers/wyse_enterprise/views.py:287 +#: templates/uds/service_not_ready.html:6 +msgid "Service not ready at this moment. Please, try again in a while." +msgstr "" +"Service im Moment nicht bereit. Bitte, versuchen Sie es noch einmal in eine " +"Weile." + #: osmanagers/LinuxOsManager/LinuxOsManager.py:45 msgid "Linux OS Manager" msgstr "Linux OS Manager" @@ -686,6 +999,8 @@ msgstr "" #: osmanagers/WindowsOsManager/WinDomainOsManager.py:32 #: transports/HTML5RDP/HTML5RDP.py:66 transports/RDP/RDPTransport.py:61 #: transports/RDP/TSRDPTransport.py:65 +#: transports/RGS-enterprise/RGSTransport.py:44 +#: transports/RGS-enterprise/TRGSTransport.py:49 msgid "Domain" msgstr "Domäne" @@ -836,6 +1151,206 @@ msgstr "" "UDS Schauspieler für Windows-Rechner (wichtig! .Net Framework 3.5 " "erfordert SP1)" +#: services/HyperV_enterprise/HyperVClusterLinkedService.py:51 +msgid "HyperV Cluster Linked Clone (Experimental)" +msgstr "Hyper-v Cluster verknüpften Klon (experimentell)" + +#: services/HyperV_enterprise/HyperVClusterLinkedService.py:55 +#: services/HyperV_enterprise/HyperVLinkedService.py:58 +msgid "Hyper Services based on templates and differential disks (experimental)" +msgstr "Hyper-Dienste basierend auf Vorlagen und differenzielle Datenträger (experimentell)" + +#: services/HyperV_enterprise/HyperVClusterLinkedService.py:72 +#: services/HyperV_enterprise/HyperVLinkedService.py:75 +#: services/OVirt/OVirtLinkedService.py:77 +#: services/Vmware_enterprise/VCLinkedCloneService.py:72 +msgid "Number of desired machines to keep running waiting for a user" +msgstr "" +"Anzahl der gewünschten Maschinen warten für einen Benutzer ausgeführt wird" + +#: services/HyperV_enterprise/HyperVClusterLinkedService.py:78 +#: services/HyperV_enterprise/HyperVLinkedService.py:81 +#: services/OVirt/OVirtLinkedService.py:83 +#: services/Vmware_enterprise/VCLinkedCloneService.py:74 +msgid "Number of desired machines to keep suspended waiting for use" +msgstr "" +"Anzahl der gewünschten Maschinen zu ausgesetzten Personen, die für die " +"Verwendung auf" + +#: services/HyperV_enterprise/HyperVClusterLinkedService.py:94 +#: services/HyperV_enterprise/HyperVLinkedService.py:97 +#: services/OVirt/OVirtLinkedService.py:99 +#: services/Vmware_enterprise/VCLinkedCloneService.py:50 +msgid "Base Machine" +msgstr "Grundmaschine" + +#: services/HyperV_enterprise/HyperVClusterLinkedService.py:94 +#: services/HyperV_enterprise/HyperVLinkedService.py:97 +#: services/OVirt/OVirtLinkedService.py:99 +msgid "Service base machine" +msgstr "Service-Grundmaschine" + +#: services/HyperV_enterprise/HyperVClusterLinkedService.py:95 +#: services/HyperV_enterprise/HyperVLinkedService.py:98 +#: services/Vmware_enterprise/VCLinkedCloneService.py:38 +msgid "Network" +msgstr "Netzwerk" + +#: services/HyperV_enterprise/HyperVClusterLinkedService.py:96 +#: services/HyperV_enterprise/HyperVLinkedService.py:99 +#: services/Vmware_enterprise/VCLinkedCloneService.py:39 +msgid "" +"If more than 1 interface is found in machine, use one on this network as main" +msgstr "" +"Wenn mehr als 1 Schnittstelle im Computer gefunden wird, verwenden Sie eine in diesem Netzwerk als wichtigsten" + +#: services/HyperV_enterprise/HyperVClusterLinkedService.py:98 +#: services/HyperV_enterprise/HyperVLinkedService.py:101 +#: services/OVirt/OVirtLinkedService.py:112 +#: services/Vmware_enterprise/VCLinkedCloneService.py:51 +msgid "Memory (Mb)" +msgstr "Speicher (Mb)" + +#: services/HyperV_enterprise/HyperVClusterLinkedService.py:99 +#: services/HyperV_enterprise/HyperVLinkedService.py:102 +#: services/Vmware_enterprise/VCLinkedCloneService.py:52 +msgid "Memory for machines deployed from this service" +msgstr "Speicher für Maschinen, die von diesem Dienst bereitgestellt" + +#: services/HyperV_enterprise/HyperVClusterLinkedService.py:100 +#: services/HyperV_enterprise/HyperVLinkedService.py:103 +msgid "Datastore Drives" +msgstr "Datastore-Laufwerke" + +#: services/HyperV_enterprise/HyperVClusterLinkedService.py:101 +#: services/HyperV_enterprise/HyperVLinkedService.py:104 +msgid "Datastores where to put incrementals & publications" +msgstr "Datastores wohin mit inkrementellen & Publikationen" + +#: services/HyperV_enterprise/HyperVClusterLinkedService.py:102 +#: services/HyperV_enterprise/HyperVLinkedService.py:105 +#: services/OVirt/OVirtLinkedService.py:118 +#: services/Vmware_enterprise/VCLinkedCloneService.py:55 +msgid "Machine Names" +msgstr "Computernamen" + +#: services/HyperV_enterprise/HyperVClusterLinkedService.py:102 +#: services/HyperV_enterprise/HyperVLinkedService.py:105 +#: services/Vmware_enterprise/VCLinkedCloneService.py:55 +msgid "Base name for clones from this machine" +msgstr "Basisname für Clones von Maschine" + +#: services/HyperV_enterprise/HyperVClusterLinkedService.py:103 +#: services/HyperV_enterprise/HyperVLinkedService.py:106 +#: services/OVirt/OVirtLinkedService.py:119 +#: services/Vmware_enterprise/VCLinkedCloneService.py:56 +msgid "Name Length" +msgstr "Länge des Dateinamens" + +#: services/HyperV_enterprise/HyperVClusterLinkedService.py:104 +#: services/HyperV_enterprise/HyperVLinkedService.py:107 +#: services/OVirt/OVirtLinkedService.py:120 +#: services/Vmware_enterprise/VCLinkedCloneService.py:57 +msgid "Length of numeric part for the names of this machines (betwen 3 and 6" +msgstr "" +"Länge der numerische Teil für die Namen dieser Maschinen (zwischen 3 und 6" + +#: services/HyperV_enterprise/HyperVClusterLinkedService.py:116 +#: services/HyperV_enterprise/HyperVLinkedService.py:119 +#: services/OVirt/OVirtLinkedService.py:143 +#: services/Vmware_enterprise/VCLinkedCloneService.py:95 +msgid "The length of basename plus length must not be greater than 15" +msgstr "Die Länge der Basename plus Länge darf nicht größer als 15 sein." + +#: services/HyperV_enterprise/HyperVClusterLinkedService.py:118 +#: services/HyperV_enterprise/HyperVLinkedService.py:121 +#: services/OVirt/OVirtLinkedService.py:145 +#: services/Vmware_enterprise/VCLinkedCloneService.py:97 +msgid "The machine name can't be only numbers" +msgstr "Der Computername kann nicht nur Zahlen sein." + +#: services/HyperV_enterprise/HyperVClusterProvider.py:64 +msgid "HyperV Cluster Provider" +msgstr "Hyper-v Cluster-Anbieter" + +#: services/HyperV_enterprise/HyperVClusterProvider.py:68 +msgid "HyperV Cluster Service Provider" +msgstr "Hyper-v Cluster Service-Provider" + +#: services/HyperV_enterprise/HyperVClusterProvider.py:89 +#: services/HyperV_enterprise/HyperVProvider.py:81 +msgid "HyperV Server IP or Hostname (must enable first WSMAN access)" +msgstr "Hyper-v Server IP oder Hostname (müssen erste WSMAN-Zugriff aktivieren)" + +#: services/HyperV_enterprise/HyperVClusterProvider.py:90 +#: services/HyperV_enterprise/HyperVProvider.py:82 +msgid "WSMan Port (normally 5985)" +msgstr "WSMan-Port (normalerweise 5985)" + +#: services/HyperV_enterprise/HyperVClusterProvider.py:91 +#: services/HyperV_enterprise/HyperVProvider.py:83 +msgid "User with valid privileges on HyperV Server" +msgstr "Benutzer mit gültigen Berechtigungen auf Hyper-v Server" + +#: services/HyperV_enterprise/HyperVClusterProvider.py:92 +#: services/HyperV_enterprise/HyperVProvider.py:84 +msgid "Password of the user of HyperV" +msgstr "Passwort des Benutzers des Hyper-v" + +#: services/HyperV_enterprise/HyperVClusterProvider.py:93 +#: services/HyperV_enterprise/HyperVProvider.py:85 +msgid "Timeout in seconds of connection to HyperV" +msgstr "Timeout in Sekunden der Verbindung zum Hyper-v" + +#: services/HyperV_enterprise/HyperVClusterProvider.py:94 +#: services/HyperV_enterprise/HyperVProvider.py:86 +#: services/OVirt/OVirtProvider.py:96 +#: services/Vmware_enterprise/ServiceProviderVC.py:33 +msgid "Macs range" +msgstr "Mac-Bereich" + +#: services/HyperV_enterprise/HyperVClusterProvider.py:95 +#: services/HyperV_enterprise/HyperVProvider.py:87 +#: services/OVirt/OVirtProvider.py:97 +msgid "Range of valids macs for created machines" +msgstr "Bereich von gilt Macs für erstellte Maschinen" + +#: services/HyperV_enterprise/HyperVClusterProvider.py:132 +msgid "The selected server is not a cluster" +msgstr "Der ausgewählte Server ist keines Clusters" + +#: services/HyperV_enterprise/HyperVClusterProvider.py:299 +#: services/HyperV_enterprise/HyperVProvider.py:249 +#: services/OVirt/OVirtProvider.py:399 +msgid "Connection test successful" +msgstr "Verbindungstest erfolgreich" + +#: services/HyperV_enterprise/HyperVClusterProvider.py:300 +#: services/HyperV_enterprise/HyperVProvider.py:250 +#: services/OVirt/OVirtProvider.py:400 +#: services/Vmware_enterprise/ServiceProviderVC.py:120 +msgid "Connection failed. Check connection params" +msgstr "Verbindung ist fehlgeschlagen. Kontrollkästchen Verbindung params" + +#: services/HyperV_enterprise/HyperVClusterPublication.py:97 +#: services/HyperV_enterprise/HyperVPublication.py:96 +#: services/OVirt/OVirtPublication.py:85 +#, python-brace-format +msgid "UDS pub for {0} at {1}" +msgstr "UDS-Pub für {0} bei {1}" + +#: services/HyperV_enterprise/HyperVLinkedService.py:54 +msgid "HyperV Linked Clone (Experimental)" +msgstr "Hyper-v Linked Clone (experimentell)" + +#: services/HyperV_enterprise/HyperVProvider.py:62 +msgid "HyperV Platform Provider" +msgstr "Hyper-v-Plattform-Anbieter" + +#: services/HyperV_enterprise/HyperVProvider.py:66 +msgid "HyperV platform service provider" +msgstr "Hyper-v-Plattform-Service-provider" + #: services/OVirt/OVirtLinkedService.py:56 msgid "oVirt Linked Clone (Experimental)" msgstr "oVirt Linked Clone (experimentell)" @@ -844,25 +1359,6 @@ msgstr "oVirt Linked Clone (experimentell)" msgid "oVirt Services based on templates and COW (experimental)" msgstr "oVirt-basierten Services auf Vorlagen und Kuh (experimentell)" -#: services/OVirt/OVirtLinkedService.py:77 -msgid "Number of desired machines to keep running waiting for a user" -msgstr "" -"Anzahl der gewünschten Maschinen warten für einen Benutzer ausgeführt wird" - -#: services/OVirt/OVirtLinkedService.py:83 -msgid "Number of desired machines to keep suspended waiting for use" -msgstr "" -"Anzahl der gewünschten Maschinen zu ausgesetzten Personen, die für die " -"Verwendung auf" - -#: services/OVirt/OVirtLinkedService.py:99 -msgid "Base Machine" -msgstr "Grundmaschine" - -#: services/OVirt/OVirtLinkedService.py:99 -msgid "Service base machine" -msgstr "Service-Grundmaschine" - #: services/OVirt/OVirtLinkedService.py:100 msgid "Cluster" msgstr "Cluster" @@ -879,10 +1375,6 @@ msgstr "Datastore-Domain" msgid "Datastore domain where to publish and put incrementals" msgstr "Datastore Domäne wo zu veröffentlichen und inkrementelle Backups" -#: services/OVirt/OVirtLinkedService.py:112 -msgid "Memory (Mb)" -msgstr "Speicher (Mb)" - #: services/OVirt/OVirtLinkedService.py:113 msgid "Memory assigned to machines" msgstr "Speicher zugewiesen Maschinen" @@ -895,19 +1387,6 @@ msgstr "Speicher garantiert (Mb)" msgid "Physical memory guaranteed to machines" msgstr "Arbeitsspeicher garantiert Maschinen" -#: services/OVirt/OVirtLinkedService.py:118 -msgid "Machine Names" -msgstr "Computernamen" - -#: services/OVirt/OVirtLinkedService.py:119 -msgid "Name Length" -msgstr "Länge des Dateinamens" - -#: services/OVirt/OVirtLinkedService.py:120 -msgid "Length of numeric part for the names of this machines (betwen 3 and 6" -msgstr "" -"Länge der numerische Teil für die Namen dieser Maschinen (zwischen 3 und 6" - #: services/OVirt/OVirtLinkedService.py:122 msgid "Display" msgstr "Display" @@ -916,14 +1395,6 @@ msgstr "Display" msgid "Display type (only for administration pourposses)" msgstr "Displaytyp (nur für Verwaltung Pourposses)" -#: services/OVirt/OVirtLinkedService.py:143 -msgid "The length of basename plus length must not be greater than 15" -msgstr "Die Länge der Basename plus Länge darf nicht größer als 15 sein." - -#: services/OVirt/OVirtLinkedService.py:145 -msgid "The machine name can't be only numbers" -msgstr "Der Computername kann nicht nur Zahlen sein." - #: services/OVirt/OVirtProvider.py:73 msgid "oVirt Platform Provider" msgstr "oVirt Plattform-Anbieter" @@ -947,30 +1418,10 @@ msgid "Password of the user of oVirt" msgstr "Passwort des Benutzers des oVirt" #: services/OVirt/OVirtProvider.py:95 +#: services/Vmware_enterprise/ServiceProviderVC.py:32 msgid "Timeout in seconds of connection to VC" msgstr "Timeout in Sekunden der Verbindung zum VC" -#: services/OVirt/OVirtProvider.py:96 -msgid "Macs range" -msgstr "Mac-Bereich" - -#: services/OVirt/OVirtProvider.py:97 -msgid "Range of valids macs for created machines" -msgstr "Bereich von gilt Macs für erstellte Maschinen" - -#: services/OVirt/OVirtProvider.py:399 -msgid "Connection test successful" -msgstr "Verbindungstest erfolgreich" - -#: services/OVirt/OVirtProvider.py:400 -msgid "Connection failed. Check connection params" -msgstr "Verbindung ist fehlgeschlagen. Kontrollkästchen Verbindung params" - -#: services/OVirt/OVirtPublication.py:85 -#, python-brace-format -msgid "UDS pub for {0} at {1}" -msgstr "UDS-Pub für {0} bei {1}" - #: services/PhysicalMachines/IPMachineDeployed.py:57 msgid "IP " msgstr "IP " @@ -1089,6 +1540,121 @@ msgstr "L2-Cache für Blindelemente" msgid "List of names" msgstr "Liste der Namen" +#: services/Vmware_enterprise/Helpers.py:72 +msgid "Local" +msgstr "Lokale" + +#: services/Vmware_enterprise/Helpers.py:74 +msgid "Remote" +msgstr "Remote" + +#: services/Vmware_enterprise/PublicationVC.py:37 +msgid "Publication" +msgstr "Veröffentlichung" + +#: services/Vmware_enterprise/PublicationVC.py:38 +#, python-brace-format +msgid "UDS Publication for {0} created at {1}" +msgstr "UDS-Publikation für {0} erstellt am {1}" + +#: services/Vmware_enterprise/ServiceProviderVC.py:28 +msgid "VMWare VC Server IP or Hostname" +msgstr "VMWare VC Server IP oder Hostname" + +#: services/Vmware_enterprise/ServiceProviderVC.py:29 +msgid "VMWare VC Server Port (usually 443)" +msgstr "VMWare VC Server Port (in der Regel 443)" + +#: services/Vmware_enterprise/ServiceProviderVC.py:30 +msgid "User with valid privileges on VC" +msgstr "Benutzer mit gültigen Berechtigungen für VC" + +#: services/Vmware_enterprise/ServiceProviderVC.py:31 +msgid "Password of the user of the VC" +msgstr "Kennwort des Benutzers des VC" + +#: services/Vmware_enterprise/ServiceProviderVC.py:34 +msgid "" +"Range of valids macs for created machines. Must be inside " +"00:50:56:00:00:00-00:50:56:3F:FF:FF" +msgstr "" +"Bereich von ungültigen Macs für erstellte Maschinen. Muss innerhalb " +"00:50:56:00:00:00-00:50:56:3F:FF:FF" + +#: services/Vmware_enterprise/ServiceProviderVC.py:39 +msgid "VMWare Virtual Center Provider" +msgstr "VMWare Virtual Center-Anbieter" + +#: services/Vmware_enterprise/ServiceProviderVC.py:41 +msgid "Provides connection to Virtual Center Services" +msgstr "Stellt Verbindung zu Virtual-Center-Dienstleistungen" + +#: services/Vmware_enterprise/ServiceProviderVC.py:110 +msgid "Error testing connection" +msgstr "Fehler Test Verbindung" + +#: services/Vmware_enterprise/ServiceProviderVC.py:113 +msgid "VmwareVC Provider: " +msgstr "VmwareVC-Anbieter: " + +#: services/Vmware_enterprise/ServiceProviderVC.py:119 +msgid "Connection params ok" +msgstr "Verbindung Params ok" + +#: services/Vmware_enterprise/VCLinkedCloneService.py:30 +msgid "Datacenter" +msgstr "Datacenter" + +#: services/Vmware_enterprise/VCLinkedCloneService.py:36 +msgid "Datacenter containing base machine" +msgstr "Enthaltenden Datacenter-Grundmaschine" + +#: services/Vmware_enterprise/VCLinkedCloneService.py:40 +msgid "Pub. Resource Pool" +msgstr "Pub. Ressourcen-Pool" + +#: services/Vmware_enterprise/VCLinkedCloneService.py:40 +msgid "Resource Pool where deploy clones" +msgstr "Ressourcen-Pool wo bereitstellen Klone" + +#: services/Vmware_enterprise/VCLinkedCloneService.py:41 +msgid "Clones Folder" +msgstr "Klone Ordner" + +#: services/Vmware_enterprise/VCLinkedCloneService.py:41 +msgid "Folder where deploy clones" +msgstr "Ordner wo bereitstellen Klone" + +#: services/Vmware_enterprise/VCLinkedCloneService.py:42 +msgid "Resource Pool" +msgstr "Ressourcen-Pool" + +#: services/Vmware_enterprise/VCLinkedCloneService.py:48 +msgid "Resource Pool containing base machine" +msgstr "Ressource Pool enthaltenden Grundmaschine" + +#: services/Vmware_enterprise/VCLinkedCloneService.py:50 +msgid "Base machine for this service" +msgstr "Basismaschine für diesen Dienst" + +#: services/Vmware_enterprise/VCLinkedCloneService.py:53 +msgid "Datastores" +msgstr "Datastores" + +#: services/Vmware_enterprise/VCLinkedCloneService.py:54 +msgid "Datastores where to put incrementals" +msgstr "Datastores wo Sie inkrementelle Backups" + +#: services/Vmware_enterprise/VCLinkedCloneService.py:64 +msgid "VMWare Linked clone base" +msgstr "VMWare Linked Clone base" + +#: services/Vmware_enterprise/VCLinkedCloneService.py:66 +msgid "" +"This service provides access to Linked Clones machines on a Virtual Center" +msgstr "" +"Dieser Service bietet Zugriff auf verknüpfte Klone Maschinen auf ein Virtual Center" + #: templates/404.html:3 templates/500.html:3 msgid "Page not found" msgstr "Seite nicht gefunden" @@ -1149,10 +1715,6 @@ msgstr "IP" msgid "Transports" msgstr "Transporte" -#: templates/uds/internal_page.html:28 -msgid "User" -msgstr "Benutzer" - #: templates/uds/internal_page.html:34 templates/uds/prefs.html:12 #: templates/uds/html5/snippets/navbar.html:39 msgid "Preferences" @@ -1190,12 +1752,6 @@ msgstr "UDS-Benutzereinstellungen" msgid "Save Preferences" msgstr "Speichern Sie Einstellungen" -#: templates/uds/service_not_ready.html:6 -msgid "Service not ready at this moment. Please, try again in a while." -msgstr "" -"Service im Moment nicht bereit. Bitte, versuchen Sie es noch einmal in eine " -"Weile." - #: templates/uds/admin/snippets/navbar.html:6 #: templates/uds/html5/snippets/navbar.html:6 msgid "toggle navigation" @@ -1211,6 +1767,7 @@ msgid "Authenticators" msgstr "Authentifikatoren" #: templates/uds/admin/snippets/navbar.html:21 +#: templates/uds/admin/tmpl/connectivity.html:4 msgid "Connectivity" msgstr "Konnektivität" @@ -1222,11 +1779,11 @@ msgstr "Bereitgestellten Dienste" msgid "Configuration" msgstr "Konfiguration" -#: templates/uds/admin/snippets/navbar.html:56 +#: templates/uds/admin/snippets/navbar.html:57 msgid "Exit dashboard" msgstr "Ausfahrt dashboard" -#: templates/uds/admin/snippets/navbar.html:57 +#: templates/uds/admin/snippets/navbar.html:58 #: templates/uds/html5/snippets/navbar.html:47 msgid "logout" msgstr "Logout" @@ -1235,6 +1792,7 @@ msgstr "Logout" msgid "administration of authenticators" msgstr "Verwaltung von Authentifikatoren" +#: templates/uds/admin/tmpl/connectivity.html:4 #: templates/uds/admin/tmpl/dashboard.html:4 msgid "overview" msgstr "Übersicht" @@ -1369,13 +1927,19 @@ msgstr "" #: transports/HTML5RDP/HTML5RDP.py:63 transports/NX/NXTransport.py:60 #: transports/NX/TSNXTransport.py:65 transports/RDP/RDPTransport.py:58 -#: transports/RDP/TSRDPTransport.py:62 transports/TSNX/TSNXTransport.py:65 +#: transports/RDP/TSRDPTransport.py:62 +#: transports/RGS-enterprise/RGSTransport.py:41 +#: transports/RGS-enterprise/TRGSTransport.py:46 +#: transports/TSNX/TSNXTransport.py:65 msgid "Empty creds" msgstr "Leere creds" #: transports/HTML5RDP/HTML5RDP.py:63 transports/NX/NXTransport.py:60 #: transports/NX/TSNXTransport.py:65 transports/RDP/RDPTransport.py:58 -#: transports/RDP/TSRDPTransport.py:62 transports/TSNX/TSNXTransport.py:65 +#: transports/RDP/TSRDPTransport.py:62 +#: transports/RGS-enterprise/RGSTransport.py:41 +#: transports/RGS-enterprise/TRGSTransport.py:46 +#: 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 " @@ -1383,7 +1947,10 @@ msgstr "" #: transports/HTML5RDP/HTML5RDP.py:64 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 +#: transports/RDP/TSRDPTransport.py:63 +#: transports/RGS-enterprise/RGSTransport.py:42 +#: transports/RGS-enterprise/TRGSTransport.py:47 +#: 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 " @@ -1391,7 +1958,10 @@ msgstr "" #: transports/HTML5RDP/HTML5RDP.py:65 transports/NX/NXTransport.py:62 #: transports/NX/TSNXTransport.py:67 transports/RDP/RDPTransport.py:60 -#: transports/RDP/TSRDPTransport.py:64 transports/TSNX/TSNXTransport.py:67 +#: transports/RDP/TSRDPTransport.py:64 +#: transports/RGS-enterprise/RGSTransport.py:43 +#: transports/RGS-enterprise/TRGSTransport.py:48 +#: 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 " @@ -1399,6 +1969,8 @@ msgstr "" #: transports/HTML5RDP/HTML5RDP.py:66 transports/RDP/RDPTransport.py:61 #: transports/RDP/TSRDPTransport.py:65 +#: transports/RGS-enterprise/RGSTransport.py:44 +#: transports/RGS-enterprise/TRGSTransport.py:49 msgid "" "If not empty, this domain will be always used as credential (used as DOMAIN" "\\user)" @@ -1505,11 +2077,13 @@ msgid "NX Transport for tunneled connection" msgstr "NX-Transport für getunnelte Verbindung" #: transports/NX/TSNXTransport.py:62 transports/RDP/TSRDPTransport.py:59 +#: transports/RGS-enterprise/TRGSTransport.py:43 #: transports/TSNX/TSNXTransport.py:62 msgid "Tunnel server" msgstr "Tunnel-server" #: transports/NX/TSNXTransport.py:62 transports/RDP/TSRDPTransport.py:59 +#: transports/RGS-enterprise/TRGSTransport.py:43 #: transports/TSNX/TSNXTransport.py:62 msgid "" "IP or Hostname of tunnel server send to client device (\"public\" ip) and " @@ -1519,11 +2093,13 @@ msgstr "" "(\"öffentliche\" IP-Adresse) und Port. (verwenden Sie HOST: PORT-Format)" #: transports/NX/TSNXTransport.py:63 transports/RDP/TSRDPTransport.py:60 +#: transports/RGS-enterprise/TRGSTransport.py:44 #: 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/RGS-enterprise/TRGSTransport.py:44 #: transports/TSNX/TSNXTransport.py:63 msgid "" "If not empty, this server will be used to check if service is running before " @@ -1534,6 +2110,7 @@ msgstr "" "Sie HOST: PORT-Format)" #: transports/NX/TSNXTransport.py:103 transports/RDP/TSRDPTransport.py:75 +#: transports/RGS-enterprise/TRGSTransport.py:71 #: 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." @@ -1642,7 +2219,7 @@ msgstr "Remote Desktop-Protokoll" msgid "In order to use this service, you should first install CoRD." msgstr "Um diesen Dienst zu nutzen, sollten Sie zunächst Kabel installieren." -#: transports/RDP/web.py:85 +#: transports/RDP/web.py:85 transports/RGS-enterprise/web.py:83 msgid "You can obtain it from" msgstr "Erhalten Sie es aus" @@ -1650,18 +2227,122 @@ msgstr "Erhalten Sie es aus" msgid "CoRD Website" msgstr "CoRD-Website" +#: transports/RGS-enterprise/RGSTransport.py:34 +msgid "RGS Transport (direct)" +msgstr "RGS-Transport (direkt)" + +#: transports/RGS-enterprise/RGSTransport.py:36 +msgid "RGS Transport for direct connection" +msgstr "RGS-Transport für den direkten Anschluss" + +#: transports/RGS-enterprise/RGSTransport.py:45 +#: transports/RGS-enterprise/TRGSTransport.py:50 +msgid "Image quality" +msgstr "Bildqualität" + +#: transports/RGS-enterprise/RGSTransport.py:46 +#: transports/RGS-enterprise/TRGSTransport.py:51 +msgid "Quality of image codec (0-100)" +msgstr "Qualität der Image-Codec (0-100)" + +#: transports/RGS-enterprise/RGSTransport.py:47 +#: transports/RGS-enterprise/TRGSTransport.py:52 +msgid "Adjustable Quality" +msgstr "Einstellbare Qualität" + +#: transports/RGS-enterprise/RGSTransport.py:48 +#: transports/RGS-enterprise/TRGSTransport.py:53 +msgid "If checked, the image quality will be adjustable with bandwidth" +msgstr "Wenn diese Option aktiviert, wird die Bildqualität mit Bandbreite einstellbar sein" + +#: transports/RGS-enterprise/RGSTransport.py:49 +#: transports/RGS-enterprise/TRGSTransport.py:54 +msgid "Min. Adjustable Quality" +msgstr "Min. einstellbare Qualität" + +#: transports/RGS-enterprise/RGSTransport.py:50 +#: transports/RGS-enterprise/TRGSTransport.py:55 +msgid "" +"The lowest image quality applied to images to maintain the minimum update " +"rate." +msgstr "" +"Die niedrigste Bildqualität auf Bilder weiterhin das minimale Update angewendet " +"Rate." + +#: transports/RGS-enterprise/RGSTransport.py:51 +#: transports/RGS-enterprise/TRGSTransport.py:56 +msgid "Adjustable Frame Rate" +msgstr "Einstellbare Framerate" + +#: transports/RGS-enterprise/RGSTransport.py:52 +#: transports/RGS-enterprise/TRGSTransport.py:57 +msgid "Update rate threshold to begin adjusting image quality" +msgstr "Update Rate Schwelle zu beginnen, Anpassung der Bildqualität" + +#: transports/RGS-enterprise/RGSTransport.py:53 +#: transports/RGS-enterprise/TRGSTransport.py:58 +msgid "Match Local Resolution" +msgstr "Match Ortsauflösung" + +#: transports/RGS-enterprise/RGSTransport.py:54 +#: transports/RGS-enterprise/TRGSTransport.py:59 +msgid "" +"Change the Sender's resolution to match the Receiver's resolution when " +"connecting" +msgstr "" +"Auflösung des Absenders an den Empfänger Auflösung anpassen ändern Wenn " +"Herstellen einer Verbindung" + +#: transports/RGS-enterprise/RGSTransport.py:55 +#: transports/RGS-enterprise/TRGSTransport.py:60 +msgid "Redirect USB" +msgstr "Umleitung USB" + +#: transports/RGS-enterprise/RGSTransport.py:56 +#: transports/RGS-enterprise/TRGSTransport.py:61 +msgid "If checked, the USB will be redirected." +msgstr "Wenn diese Option aktiviert, werden die USB weitergeleitet." + +#: transports/RGS-enterprise/RGSTransport.py:57 +#: transports/RGS-enterprise/TRGSTransport.py:62 +msgid "Redirect Audio" +msgstr "Umleitung-Audio" + +#: transports/RGS-enterprise/RGSTransport.py:58 +#: transports/RGS-enterprise/TRGSTransport.py:63 +msgid "If checked, the Audio will be redirected." +msgstr "Wenn aktiviert, werden die Audiodaten weitergeleitet." + +#: transports/RGS-enterprise/RGSTransport.py:59 +#: transports/RGS-enterprise/TRGSTransport.py:64 +msgid "Redirect Mic" +msgstr "Umleitung Mic" + +#: transports/RGS-enterprise/RGSTransport.py:60 +#: transports/RGS-enterprise/TRGSTransport.py:65 +msgid "If checked, the Mic will be redirected." +msgstr "Wenn diese Option aktiviert, wird das Mikrofon umgeleitet." + +#: transports/RGS-enterprise/TRGSTransport.py:36 +msgid "RGS Transport (tunneled)" +msgstr "RGS-Transport (Tunneling)" + +#: transports/RGS-enterprise/TRGSTransport.py:38 +msgid "RGS Transport for tunneled connection" +msgstr "RGS-Transport für getunnelte Verbindung" + +#: transports/RGS-enterprise/web.py:82 +msgid "In order to use this service, you should first install RGS Receiver." +msgstr "Um diesen Service zu nutzen, sollten Sie zunächst RGS-Empfänger installieren." + +#: transports/RGS-enterprise/web.py:83 +msgid "HP Website" +msgstr "Website von HP" + #: web/errors.py:60 msgid "Unknown error" msgstr "Unbekannter Fehler" -#: web/errors.py:61 -msgid "Transport not found" -msgstr "Verkehr nicht gefunden" - -#: web/errors.py:62 -msgid "Service not found" -msgstr "-Dienst nicht gefunden" - #: web/errors.py:63 xmlrpc/auths/AdminAuth.py:182 #: xmlrpc/auths/AdminAuth.py:188 msgid "Access denied" @@ -1731,10 +2412,6 @@ msgstr "Anmeldeinformationen nicht mehr gültig" msgid "Administration" msgstr "Verwaltung" -#: xmlrpc/auths/AdminAuth.py:168 -msgid "Invalid credentials" -msgstr "Ungültiger Anmeldeinformationen" - #: xmlrpc/auths/Authenticators.py:107 msgid "Authenticator does not exists" msgstr "Authentifikator ist nicht vorhanden" diff --git a/server/src/uds/locale/de/LC_MESSAGES/djangojs.mo b/server/src/uds/locale/de/LC_MESSAGES/djangojs.mo index 18143dc3be7dcb388fdfa2f4267785b641e2af29..5d5277acc32576d71eaa764361b5f340ff9cdb18 100644 GIT binary patch delta 817 zcmY+BJxE(o6vuD!OyXyf5}MSH;;Ys55kxHs3SC@;f|H9nl&TnN5*nj}9Uh2-TMN%Z zI~3iNLMcUD#KlqyE>b!uIM~HO9CQ-I$=_eEg&yuXzjx2Q=iGD7`;$0KyzlpGjWHF+ zm?(S;AHYRe16N=KeuBEU3UzP8`oG!z7L4KFfr|TSxd)T%_wD{KRK63)GG~tQZxf!| z3zx8-gKMY20&*l$AyW!&IRIFoDSs~wdni$u>TQe`NUqB_ttDrrVD!EQKJ zP(uNOR@{A&9v`VR!O%M?a33wb{I8i~H*H{P^9=sG5 zArKTBtvm#a5TX_mu+c)16bb}EMuoC-EsC$>jYvV7dIQNj@9()&+13j9<6RhUo z57a{*Q53Kmw!#-s_7v=aZ|wZN*=J!D_IaoR7NHVdxARS?c%PvBK34?)0`FnSdCq-@ zuQ^C@OPNkU1(;;2hf`1q%o_`^jr|%_;vpo2`vUdQ4rI7}CdE56`?1-71T1vn+<0LQ zmrxgOAriT=_5Ma_^T&}Ot3eTho?&?Fi`Ra-n9^M`8Reaz=S%q?YCvP-LB!JjGJ k`57;s9!~ZTjtrzr$>^9@H!h!C+2?FGoQ~y6*D=rg3u}l<*Z=?k diff --git a/server/src/uds/locale/de/LC_MESSAGES/djangojs.po b/server/src/uds/locale/de/LC_MESSAGES/djangojs.po index 87a724040..aeaf3378b 100644 --- a/server/src/uds/locale/de/LC_MESSAGES/djangojs.po +++ b/server/src/uds/locale/de/LC_MESSAGES/djangojs.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-11-17 04:21+0100\n" +"POT-Creation-Date: 2013-11-20 04:05+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -18,14 +18,10 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: static/adm/js/gui-elements.js:7 +#: static/adm/js/gui-elements.js:33 msgid "Service Providers" msgstr "Service-Provider" -#: 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" @@ -70,19 +66,19 @@ msgstr "Nächste" msgid "Previous" msgstr "Vorherige" -#: static/adm/js/gui.js:80 +#: static/adm/js/gui.js:75 msgid "Deployed services" msgstr "Bereitgestellten Dienste" -#: static/adm/js/gui.js:349 +#: static/adm/js/gui.js:360 msgid "Edit" msgstr "Bearbeiten" -#: static/adm/js/gui.js:358 +#: static/adm/js/gui.js:369 msgid "Delete" msgstr "Löschen" -#: static/adm/js/gui.js:367 +#: static/adm/js/gui.js:378 msgid "Refresh" msgstr "Aktualisieren" @@ -161,3 +157,7 @@ msgstr "November" #: static/adm/js/strftime.js:35 msgid "December" msgstr "Dezember" + +#: static/adm/js/tools.js:46 +msgid "Just a moment..." +msgstr "Einen Moment..." diff --git a/server/src/uds/locale/es/LC_MESSAGES/django.mo b/server/src/uds/locale/es/LC_MESSAGES/django.mo index a6b8f7dde5c9828235dc3f1a951c53ebe2a0b5b5..c8040d336a07fa6bfdd0ca8e2cebb369f7a711c7 100644 GIT binary patch literal 46900 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 diff --git a/server/src/uds/locale/es/LC_MESSAGES/django.po b/server/src/uds/locale/es/LC_MESSAGES/django.po index 3a5ee1b84..867f77d11 100644 --- a/server/src/uds/locale/es/LC_MESSAGES/django.po +++ b/server/src/uds/locale/es/LC_MESSAGES/django.po @@ -31,7 +31,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-11-17 04:20+0100\n" +"POT-Creation-Date: 2013-11-20 04:05+0100\n" "PO-Revision-Date: 2013-04-22 06:24+0200\n" "Last-Translator: \n" "Language-Team: Spanish \n" @@ -42,23 +42,23 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1)\n" "X-Generator: Lokalize 1.4\n" -#: REST/methods/authenticators.py:73 +#: REST/methods/authenticators.py:80 msgid "Current authenticators" msgstr "Autenticadores actuales" -#: REST/methods/authenticators.py:75 REST/methods/networks.py:68 +#: REST/methods/authenticators.py:82 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:76 REST/methods/osmanagers.py:72 +#: REST/methods/authenticators.py:83 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:77 +#: REST/methods/authenticators.py:84 msgid "Users" msgstr "Usuarios" @@ -114,14 +114,265 @@ msgstr "estado" msgid "Last access" msgstr "Último acceso" -#: admin/views.py:55 admin/views.py:63 admin/views.py:76 web/views.py:422 +#: admin/views.py:55 admin/views.py:63 admin/views.py:77 web/views.py:422 msgid "Forbidden" msgstr "Prohibido" -#: admin/views.py:69 +#: admin/views.py:70 msgid "requested a template that do not exists" msgstr "solicitó una plantilla que no existe" +#: auths/ActiveDirectory_enterprise/Authenticator.py:29 +#: auths/EDirectory_enterprise/Authenticator.py:60 +#: auths/RegexLdap/Authenticator.py:49 auths/SimpleLDAP/Authenticator.py:49 +#: services/HyperV_enterprise/HyperVClusterProvider.py:89 +#: services/HyperV_enterprise/HyperVProvider.py:81 +#: services/OVirt/OVirtProvider.py:92 +#: services/Vmware_enterprise/ServiceProviderVC.py:28 +msgid "Host" +msgstr "Servidor " + +#: auths/ActiveDirectory_enterprise/Authenticator.py:29 +msgid "Active Directory Server IP or Hostname" +msgstr "Servidor de Active Directory IP o nombre de host" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:30 +#: auths/EDirectory_enterprise/Authenticator.py:62 +#: auths/RegexLdap/Authenticator.py:51 auths/SimpleLDAP/Authenticator.py:51 +msgid "Use SSL" +msgstr "Usar SSL" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:30 +msgid "If checked, will use a ssl connection to Active Directory" +msgstr "Si está marcada, utilizará una conexión ssl a Active Directory" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:31 +msgid "Compatibility" +msgstr "Compatibilidad" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:31 +msgid "Compatibility of AD connection (Usually windows 2000 and later)" +msgstr "Compatibilidad de conexión AD (windows 2000 y versiones posteriores)" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:33 +#: auths/RegexLdap/Authenticator.py:52 auths/SimpleLDAP/Authenticator.py:52 +msgid "Ldap User" +msgstr "Usuario LDAP" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:33 +msgid "" +"Username with read privileges on the base selected (use USER@DOMAIN.DOM form " +"for this)" +msgstr "" +"Nombre de usuario con privilegios de lectura en la base seleccionada (uso USER@DOMAIN.Formulario de DOM " +"para esto)" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:34 +#: auths/ActiveDirectory_enterprise/Authenticator.py:52 +#: auths/EDirectory_enterprise/Authenticator.py:64 +#: auths/RegexLdap/Authenticator.py:53 auths/RegexLdap/Authenticator.py:76 +#: auths/SimpleLDAP/Authenticator.py:53 auths/SimpleLDAP/Authenticator.py:77 +#: core/auths/BaseAuthenticator.py:136 +#: osmanagers/WindowsOsManager/WinDomainOsManager.py:34 +#: osmanagers/WindowsOsManager/WinRandomPassOsManager.py:30 +#: services/HyperV_enterprise/HyperVClusterProvider.py:92 +#: services/HyperV_enterprise/HyperVProvider.py:84 +#: services/OVirt/OVirtProvider.py:94 services/Sample/SampleService.py:131 +#: services/Vmware_enterprise/ServiceProviderVC.py:31 +#: transports/HTML5RDP/HTML5RDP.py:65 transports/NX/NXTransport.py:62 +#: transports/NX/TSNXTransport.py:67 transports/RDP/RDPTransport.py:60 +#: transports/RDP/TSRDPTransport.py:64 +#: transports/RGS-enterprise/RGSTransport.py:43 +#: transports/RGS-enterprise/TRGSTransport.py:48 +#: transports/TSNX/TSNXTransport.py:67 web/forms/LoginForm.py:70 +msgid "Password" +msgstr "Contraseña" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:34 +#: auths/EDirectory_enterprise/Authenticator.py:64 +#: auths/RegexLdap/Authenticator.py:53 auths/SimpleLDAP/Authenticator.py:53 +msgid "Password of the ldap user" +msgstr "Contraseña del usuario del ldap" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:35 +#: auths/EDirectory_enterprise/Authenticator.py:65 +#: auths/RegexLdap/Authenticator.py:54 auths/SimpleLDAP/Authenticator.py:54 +#: services/HyperV_enterprise/HyperVClusterProvider.py:93 +#: services/HyperV_enterprise/HyperVProvider.py:85 +#: services/OVirt/OVirtProvider.py:95 +#: services/Vmware_enterprise/ServiceProviderVC.py:32 +msgid "Timeout" +msgstr "Espera " + +#: auths/ActiveDirectory_enterprise/Authenticator.py:35 +#: auths/EDirectory_enterprise/Authenticator.py:65 +#: auths/RegexLdap/Authenticator.py:54 auths/SimpleLDAP/Authenticator.py:54 +msgid "Timeout in seconds of connection to LDAP" +msgstr "Tiempo de espera en segundos" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:37 +msgid "Active Directory Authenticator" +msgstr "Autenticador de Active Directory" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:39 +msgid "Authenticate against Active Directory" +msgstr "Autenticar con Active Directory" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:48 +#: auths/EDirectory_enterprise/Authenticator.py:77 +#: auths/RegexLdap/Authenticator.py:72 auths/SimpleLDAP/Authenticator.py:73 +#: services/HyperV_enterprise/HyperVClusterProvider.py:91 +#: services/HyperV_enterprise/HyperVProvider.py:83 +#: services/OVirt/OVirtProvider.py:93 +#: services/Vmware_enterprise/ServiceProviderVC.py:30 +#: transports/HTML5RDP/HTML5RDP.py:64 transports/NX/NXTransport.py:61 +#: transports/NX/TSNXTransport.py:66 transports/RDP/RDPTransport.py:59 +#: transports/RDP/TSRDPTransport.py:63 +#: transports/RGS-enterprise/RGSTransport.py:42 +#: transports/RGS-enterprise/TRGSTransport.py:47 +#: transports/TSNX/TSNXTransport.py:66 web/forms/LoginForm.py:69 +msgid "Username" +msgstr "Usuario" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:50 +#: auths/EDirectory_enterprise/Authenticator.py:79 +#: auths/RegexLdap/Authenticator.py:74 auths/SAML_enterprise/SAML.py:114 +#: auths/SimpleLDAP/Authenticator.py:75 +msgid "Group" +msgstr "Grupo" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:67 +#: auths/ActiveDirectory_enterprise/Authenticator.py:442 +msgid "Must specify the username in the form USERNAME@DOMAIN.DOM" +msgstr "Debe especificar el nombre de usuario en el formulario USERNAME@DOMAIN.DOM" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:164 +#: auths/EDirectory_enterprise/Authenticator.py:123 +#: auths/RegexLdap/Authenticator.py:226 auths/SimpleLDAP/Authenticator.py:158 +msgid "Ldap connection error: " +msgstr "Error de conexión al ldap: " + +#: auths/ActiveDirectory_enterprise/Authenticator.py:344 +#: auths/ActiveDirectory_enterprise/Authenticator.py:390 +#: auths/EDirectory_enterprise/Authenticator.py:243 +#: auths/EDirectory_enterprise/Authenticator.py:286 +#: auths/RegexLdap/Authenticator.py:303 auths/RegexLdap/Authenticator.py:346 +#: auths/SimpleLDAP/Authenticator.py:269 auths/SimpleLDAP/Authenticator.py:313 +msgid "Username not found" +msgstr "Nombre de usuario no hallado" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:377 +#: auths/SimpleLDAP/Authenticator.py:302 +msgid "Group not found" +msgstr "Grupo no hallado" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:410 +#: auths/ActiveDirectory_enterprise/Authenticator.py:428 +#: auths/EDirectory_enterprise/Authenticator.py:303 +#: auths/RegexLdap/Authenticator.py:367 auths/SimpleLDAP/Authenticator.py:328 +#: auths/SimpleLDAP/Authenticator.py:342 +msgid "Too many results, be more specific" +msgstr "Demasiados resultados, sea más específico" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:451 +msgid "Domain seems to be incorrect, please check it" +msgstr "Dominio parece ser incorrecta, por favor compruebe lo" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:456 +msgid "Ldap does not seem an Active Directory (do not have user objects)" +msgstr "LDAP no parece un Active Directory (no tienen los objetos de usuario)" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:464 +msgid "Ldap does not seem an Active Directory (no not have group objects)" +msgstr "LDAP no parece un Active Directory (no tienen objetos de grupo)" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:472 +msgid "" +"Ldap does not seem an Active Directory (do not have any user nor groups)" +msgstr "" +"LDAP no parece un Active Directory (no tienen ningún usuario ni grupos)" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:477 +#: auths/EDirectory_enterprise/Authenticator.py:358 +#: auths/RegexLdap/Authenticator.py:428 auths/SimpleLDAP/Authenticator.py:423 +msgid "Connection params seem correct, test was succesfully executed" +msgstr "" +"Los parámetros de conexión parecen correctos, la prueba fue ejecutado con " +"exito" + +#: auths/EDirectory_enterprise/Authenticator.py:60 +msgid "EDirectory Server IP or Hostname" +msgstr "EDirectory servidor IP o nombre de host" + +#: auths/EDirectory_enterprise/Authenticator.py:61 +#: auths/RegexLdap/Authenticator.py:50 auths/SimpleLDAP/Authenticator.py:50 +#: services/HyperV_enterprise/HyperVClusterProvider.py:90 +#: services/HyperV_enterprise/HyperVProvider.py:82 +#: services/Vmware_enterprise/ServiceProviderVC.py:29 +msgid "Port" +msgstr "Puerto" + +#: auths/EDirectory_enterprise/Authenticator.py:61 +#: auths/RegexLdap/Authenticator.py:50 auths/SimpleLDAP/Authenticator.py:50 +msgid "Ldap port (389 for non ssl, 636 for ssl normally" +msgstr "Puerto LDAP (389 para no SSL, 636 para ssl normalmente)" + +#: auths/EDirectory_enterprise/Authenticator.py:62 +#: auths/RegexLdap/Authenticator.py:51 auths/SimpleLDAP/Authenticator.py:51 +msgid "" +"If checked, will use a ssl connection to ldap (if port is 389, will use in " +"fact port 636)" +msgstr "" +"Si está activada, utilizará una conexión ssl con ldap (si el puerto es 389, " +"utilizará de hecho el Puerto 636)" + +#: auths/EDirectory_enterprise/Authenticator.py:63 +msgid "Admin user" +msgstr "Usuario admin" + +#: auths/EDirectory_enterprise/Authenticator.py:63 +msgid "Username with read privileges on the eDirectory" +msgstr "Nombre de usuario con privilegios de lectura en el eDirectory" + +#: auths/EDirectory_enterprise/Authenticator.py:67 +msgid "eDirectory Authenticator" +msgstr "eDirectory autenticador" + +#: auths/EDirectory_enterprise/Authenticator.py:69 +msgid "Authenticate against eDirectory" +msgstr "Autenticar con eDirectory" + +#: auths/EDirectory_enterprise/Authenticator.py:323 +#: auths/RegexLdap/Authenticator.py:387 auths/SimpleLDAP/Authenticator.py:363 +msgid "Ldap search base is incorrect" +msgstr "La base de búsqueda ldap es incorrecta" + +#: auths/EDirectory_enterprise/Authenticator.py:328 +#: auths/RegexLdap/Authenticator.py:392 auths/SimpleLDAP/Authenticator.py:368 +msgid "Ldap user class seems to be incorrect (no user found by that class)" +msgstr "" +"La clase de usuario de LDAP parece ser incorrecta (ningún usuario encontrado " +"por esa clase)" + +#: auths/EDirectory_enterprise/Authenticator.py:336 +#: auths/SimpleLDAP/Authenticator.py:384 +msgid "" +"Ldap user id attribute seems to be incorrect (no user found by that " +"attribute)" +msgstr "" +"El atributo de id de usuario de ldap parece ser incorrecto (ningún usuario " +"encontrado por atributo)" + +#: auths/EDirectory_enterprise/Authenticator.py:344 +msgid "Expected group attribute " +msgstr "Atributo de grupo esperados " + +#: auths/EDirectory_enterprise/Authenticator.py:353 +msgid "" +"Ldap user class or user id attr is probably wrong (Ldap is an eDirectory?)" +msgstr "" +"LDAP usuario clase o usuario id attr es probablemente incorrecto (Ldap es un eDirectory?)" + #: auths/IP/Authenticator.py:48 auths/IP/Authenticator.py:50 msgid "IP Authenticator" msgstr "Autenticador por IP" @@ -167,69 +418,14 @@ msgstr "Si está activado, el nombre de host será resuelto de forma inversa" msgid "Internal structures seems ok" msgstr "Las estructuras internas parecen correctas" -#: auths/RegexLdap/Authenticator.py:49 auths/SimpleLDAP/Authenticator.py:49 -#: services/OVirt/OVirtProvider.py:92 -msgid "Host" -msgstr "Servidor " - #: auths/RegexLdap/Authenticator.py:49 msgid "Ldap Server Host" msgstr "Servidor de LDAP" -#: auths/RegexLdap/Authenticator.py:50 auths/SimpleLDAP/Authenticator.py:50 -msgid "Port" -msgstr "Puerto" - -#: auths/RegexLdap/Authenticator.py:50 auths/SimpleLDAP/Authenticator.py:50 -msgid "Ldap port (389 for non ssl, 636 for ssl normally" -msgstr "Puerto LDAP (389 para no SSL, 636 para ssl normalmente)" - -#: auths/RegexLdap/Authenticator.py:51 auths/SimpleLDAP/Authenticator.py:51 -msgid "Use SSL" -msgstr "Usar SSL" - -#: auths/RegexLdap/Authenticator.py:51 auths/SimpleLDAP/Authenticator.py:51 -msgid "" -"If checked, will use a ssl connection to ldap (if port is 389, will use in " -"fact port 636)" -msgstr "" -"Si está activada, utilizará una conexión ssl con ldap (si el puerto es 389, " -"utilizará de hecho el Puerto 636)" - -#: auths/RegexLdap/Authenticator.py:52 auths/SimpleLDAP/Authenticator.py:52 -msgid "Ldap User" -msgstr "Usuario LDAP" - #: auths/RegexLdap/Authenticator.py:52 auths/SimpleLDAP/Authenticator.py:52 msgid "Username with read privileges on the base selected" msgstr "Usuario con privilegios de lectura en la base elegida" -#: auths/RegexLdap/Authenticator.py:53 auths/RegexLdap/Authenticator.py:76 -#: auths/SimpleLDAP/Authenticator.py:53 auths/SimpleLDAP/Authenticator.py:77 -#: core/auths/BaseAuthenticator.py:136 -#: osmanagers/WindowsOsManager/WinDomainOsManager.py:34 -#: 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/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" - -#: auths/RegexLdap/Authenticator.py:53 auths/SimpleLDAP/Authenticator.py:53 -msgid "Password of the ldap user" -msgstr "Contraseña del usuario del ldap" - -#: auths/RegexLdap/Authenticator.py:54 auths/SimpleLDAP/Authenticator.py:54 -#: services/OVirt/OVirtProvider.py:95 -msgid "Timeout" -msgstr "Espera " - -#: auths/RegexLdap/Authenticator.py:54 auths/SimpleLDAP/Authenticator.py:54 -msgid "Timeout in seconds of connection to LDAP" -msgstr "Tiempo de espera en segundos" - #: auths/RegexLdap/Authenticator.py:55 auths/SimpleLDAP/Authenticator.py:55 msgid "Base" msgstr "Base" @@ -280,42 +476,6 @@ msgstr "Autenticador Regex LDAP" msgid "Regular Expressions LDAP authenticator" 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/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" - -#: auths/RegexLdap/Authenticator.py:74 auths/SimpleLDAP/Authenticator.py:75 -msgid "Group" -msgstr "Grupo" - -#: auths/RegexLdap/Authenticator.py:226 auths/SimpleLDAP/Authenticator.py:158 -msgid "Ldap connection error: " -msgstr "Error de conexión al ldap: " - -#: auths/RegexLdap/Authenticator.py:303 auths/RegexLdap/Authenticator.py:346 -#: auths/SimpleLDAP/Authenticator.py:269 auths/SimpleLDAP/Authenticator.py:313 -msgid "Username not found" -msgstr "Nombre de usuario no hallado" - -#: auths/RegexLdap/Authenticator.py:367 auths/SimpleLDAP/Authenticator.py:328 -#: auths/SimpleLDAP/Authenticator.py:342 -msgid "Too many results, be more specific" -msgstr "Demasiados resultados, sea más específico" - -#: auths/RegexLdap/Authenticator.py:387 auths/SimpleLDAP/Authenticator.py:363 -msgid "Ldap search base is incorrect" -msgstr "La base de búsqueda ldap es incorrecta" - -#: auths/RegexLdap/Authenticator.py:392 auths/SimpleLDAP/Authenticator.py:368 -msgid "Ldap user class seems to be incorrect (no user found by that class)" -msgstr "" -"La clase de usuario de LDAP parece ser incorrecta (ningún usuario encontrado " -"por esa clase)" - #: auths/RegexLdap/Authenticator.py:401 msgid "" "Ldap user id attr is probably wrong (can't find any user with both " @@ -332,11 +492,116 @@ msgstr "" "Atributo de id de grupo ldap parece ser incorrecto (ningún grupo encontrado " "por atributo)" -#: auths/RegexLdap/Authenticator.py:428 auths/SimpleLDAP/Authenticator.py:423 -msgid "Connection params seem correct, test was succesfully executed" +#: auths/SAML_enterprise/SAML.py:80 +msgid "SAML Authenticator" +msgstr "SAML autenticador" + +#: auths/SAML_enterprise/SAML.py:92 +msgid "SAML (v2.0) Authenticator" +msgstr "SAML (v2.0) autenticador" + +#: auths/SAML_enterprise/SAML.py:111 templates/uds/internal_page.html:28 +msgid "User" +msgstr "Usuario" + +#: auths/SAML_enterprise/SAML.py:120 +msgid "Private key" +msgstr "Clave privada" + +#: auths/SAML_enterprise/SAML.py:121 +msgid "" +"Private key used for sign and encription, as generated in base 64 from " +"openssl" msgstr "" -"Los parámetros de conexión parecen correctos, la prueba fue ejecutado con " -"exito" +"Clave privada utilizado para firmar y encriptación, generadas en base 64 de " +"OpenSSL" + +#: auths/SAML_enterprise/SAML.py:122 +msgid "Certificate" +msgstr "Certificado" + +#: auths/SAML_enterprise/SAML.py:123 +msgid "Server certificate (public), , as generated in base 64 from openssl" +msgstr "Certificado del servidor (público), como generados en base 64 de openssl" + +#: auths/SAML_enterprise/SAML.py:124 +msgid "IDP Metadata" +msgstr "IDP metadatos" + +#: auths/SAML_enterprise/SAML.py:125 +msgid "" +"You can enter here the URL or the IDP metadata or the metadata itself (xml)" +msgstr "" +"Aquí puede introducir la URL o los metadatos IDP o los metadatos de sí mismo (xml)" + +#: auths/SAML_enterprise/SAML.py:127 +msgid "Entity ID" +msgstr "ID de entidad" + +#: auths/SAML_enterprise/SAML.py:128 +msgid "ID of the SP. If left blank, this will be autogenerated from server URL" +msgstr "ID del SP. Si deja en blanco, este será generadas automáticamente desde la dirección URL del servidor" + +#: auths/SAML_enterprise/SAML.py:130 +msgid "User name attrs" +msgstr "Usuario nombre attrs" + +#: auths/SAML_enterprise/SAML.py:131 +msgid "Fields from where to extract user name" +msgstr "Campos de donde extraer el nombre de usuario" + +#: auths/SAML_enterprise/SAML.py:133 +msgid "Group name attrs" +msgstr "Grupo nombre attrs" + +#: auths/SAML_enterprise/SAML.py:134 +msgid "Fields from where to extract the groups" +msgstr "Campos de donde extraer los grupos" + +#: auths/SAML_enterprise/SAML.py:136 +msgid "Real name attrs" +msgstr "Nombre real attrs" + +#: auths/SAML_enterprise/SAML.py:137 +msgid "Fields from where to extract the real name" +msgstr "Campos de donde extraer el nombre real" + +#: auths/SAML_enterprise/SAML.py:160 +msgid "" +"Server certificate should be a valid PEM (PEM certificates starts with -----" +"BEGIN CERTIFICATE-----)" +msgstr "" +"Certificado del servidor debe ser un PEM válido (PEM certificados comienza con---" +"BEGIN CERTIFICADO---)" + +#: auths/SAML_enterprise/SAML.py:165 +msgid "Invalid server certificate. " +msgstr "Certificado de servidor no válido. " + +#: auths/SAML_enterprise/SAML.py:168 +msgid "" +"Private key should be a valid PEM (PEM private keys starts with -----BEGIN " +"RSA PRIVATE KEY-----" +msgstr "" +"Clave privada debe ser un PEM válido (PEM claves privadas comienza con---BEGIN " +"CLAVE PRIVADA RSA---" + +#: auths/SAML_enterprise/SAML.py:197 +#, python-brace-format +msgid "Can't fetch url {0}: {1}" +msgstr "No se puede buscar url {0}: {1}" + +#: auths/SAML_enterprise/SAML.py:208 +msgid " (obtained from URL)" +msgstr " (Obtenido de URL)" + +#: auths/SAML_enterprise/SAML.py:209 +msgid "XML do not seems valid for IDP Metadata " +msgstr "XML no parece válido para metadatos de IDP " + +#: auths/SAML_enterprise/SAML.py:227 +msgid "Can't access idp metadata" +msgstr "No puede acceder a metadatos de idp" #: auths/Sample/SampleAuth.py:71 msgid "Sample Authenticator" @@ -398,24 +663,12 @@ msgstr "Autenticador LDAP Simple" msgid "Simple LDAP authenticator" msgstr "Autenticador LDAP Simple" -#: auths/SimpleLDAP/Authenticator.py:302 -msgid "Group not found" -msgstr "Grupo no hallado" - #: auths/SimpleLDAP/Authenticator.py:376 msgid "Ldap group class seems to be incorrect (no group found by that class)" msgstr "" "La clase de grupo LDAP parece ser incorrecta (ningún grupo encontrado por " "esa clase)" -#: auths/SimpleLDAP/Authenticator.py:384 -msgid "" -"Ldap user id attribute seems to be incorrect (no user found by that " -"attribute)" -msgstr "" -"El atributo de id de usuario de ldap parece ser incorrecto (ningún usuario " -"encontrado por atributo)" - #: auths/SimpleLDAP/Authenticator.py:401 msgid "" "Ldap user class or user id attr is probably wrong (can't find any user with " @@ -631,6 +884,66 @@ msgstr "Carga" msgid "Storage" msgstr "Almacenamiento de información" +#: dispatchers/wyse_enterprise/views.py:111 +msgid "There are no authenticators available for login" +msgstr "No hay ningún autenticadores disponibles para inicio de sesión" + +#: dispatchers/wyse_enterprise/views.py:124 +#, python-brace-format +msgid "The authenticator {0} is not usable" +msgstr "El autenticador {0} no es usable" + +#: dispatchers/wyse_enterprise/views.py:131 xmlrpc/auths/AdminAuth.py:168 +msgid "Invalid credentials" +msgstr "Credenciales Invalidas" + +#: dispatchers/wyse_enterprise/views.py:139 +#, python-brace-format +msgid "The domain {0} does not exists" +msgstr "No existe el dominio {0}" + +#: dispatchers/wyse_enterprise/views.py:200 +msgid "No services available" +msgstr "No hay servicios disponibles" + +#: dispatchers/wyse_enterprise/views.py:215 +#: dispatchers/wyse_enterprise/views.py:309 +msgid "Invalid session" +msgstr "Sesión no válida" + +#: dispatchers/wyse_enterprise/views.py:219 +#: dispatchers/wyse_enterprise/views.py:313 +msgid "Invalid authorization" +msgstr "Autorización no válido" + +#: dispatchers/wyse_enterprise/views.py:230 +#: dispatchers/wyse_enterprise/views.py:319 +msgid "Invalid request" +msgstr "Solicitud inválida" + +#: dispatchers/wyse_enterprise/views.py:233 +#: dispatchers/wyse_enterprise/views.py:322 +msgid "Invalid credentials used" +msgstr "Credenciales no válidas usadas" + +#: dispatchers/wyse_enterprise/views.py:254 +#: dispatchers/wyse_enterprise/views.py:257 web/errors.py:62 +msgid "Service not found" +msgstr "Servicio no hallado" + +#: dispatchers/wyse_enterprise/views.py:271 web/errors.py:61 +msgid "Transport not found" +msgstr "Transporte no hallado" + +#: dispatchers/wyse_enterprise/views.py:275 +#: dispatchers/wyse_enterprise/views.py:282 +#: dispatchers/wyse_enterprise/views.py:287 +#: templates/uds/service_not_ready.html:6 +msgid "Service not ready at this moment. Please, try again in a while." +msgstr "" +"El servicio no está disponible en estos momentos. Por favor, intentelo de " +"nuevo pasado unos instantes." + #: osmanagers/LinuxOsManager/LinuxOsManager.py:45 msgid "Linux OS Manager" msgstr "Gestor de S.O. Linux" @@ -680,6 +993,8 @@ msgstr "Gestor de s.o. para controlar maquinas windows con dominio." #: osmanagers/WindowsOsManager/WinDomainOsManager.py:32 #: transports/HTML5RDP/HTML5RDP.py:66 transports/RDP/RDPTransport.py:61 #: transports/RDP/TSRDPTransport.py:65 +#: transports/RGS-enterprise/RGSTransport.py:44 +#: transports/RGS-enterprise/TRGSTransport.py:49 msgid "Domain" msgstr "Dominio" @@ -829,6 +1144,203 @@ msgstr "" "Actor para las máquinas Windows (Importante!!! Requiere tener .net " "framework 3.5 sp1)" +#: services/HyperV_enterprise/HyperVClusterLinkedService.py:51 +msgid "HyperV Cluster Linked Clone (Experimental)" +msgstr "Cluster HyperV ligado clon (Experimental)" + +#: services/HyperV_enterprise/HyperVClusterLinkedService.py:55 +#: services/HyperV_enterprise/HyperVLinkedService.py:58 +msgid "Hyper Services based on templates and differential disks (experimental)" +msgstr "Hiper servicios basados en plantillas y diferenciales discos (experimentales)" + +#: services/HyperV_enterprise/HyperVClusterLinkedService.py:72 +#: services/HyperV_enterprise/HyperVLinkedService.py:75 +#: services/OVirt/OVirtLinkedService.py:77 +#: services/Vmware_enterprise/VCLinkedCloneService.py:72 +msgid "Number of desired machines to keep running waiting for a user" +msgstr "Número de máquinas a manatener en ejecución esperando a un usuario" + +#: services/HyperV_enterprise/HyperVClusterLinkedService.py:78 +#: services/HyperV_enterprise/HyperVLinkedService.py:81 +#: services/OVirt/OVirtLinkedService.py:83 +#: services/Vmware_enterprise/VCLinkedCloneService.py:74 +msgid "Number of desired machines to keep suspended waiting for use" +msgstr "Número de maquinas a mantener suspendidas esperando asignación" + +#: services/HyperV_enterprise/HyperVClusterLinkedService.py:94 +#: services/HyperV_enterprise/HyperVLinkedService.py:97 +#: services/OVirt/OVirtLinkedService.py:99 +#: services/Vmware_enterprise/VCLinkedCloneService.py:50 +msgid "Base Machine" +msgstr "Máquina de base" + +#: services/HyperV_enterprise/HyperVClusterLinkedService.py:94 +#: services/HyperV_enterprise/HyperVLinkedService.py:97 +#: services/OVirt/OVirtLinkedService.py:99 +msgid "Service base machine" +msgstr "Máquina de base para el servicio" + +#: services/HyperV_enterprise/HyperVClusterLinkedService.py:95 +#: services/HyperV_enterprise/HyperVLinkedService.py:98 +#: services/Vmware_enterprise/VCLinkedCloneService.py:38 +msgid "Network" +msgstr "Red" + +#: services/HyperV_enterprise/HyperVClusterLinkedService.py:96 +#: services/HyperV_enterprise/HyperVLinkedService.py:99 +#: services/Vmware_enterprise/VCLinkedCloneService.py:39 +msgid "" +"If more than 1 interface is found in machine, use one on this network as main" +msgstr "" +"Si más de una interfaz se encuentra en la máquina, utilice uno de esta red como principal" + +#: services/HyperV_enterprise/HyperVClusterLinkedService.py:98 +#: services/HyperV_enterprise/HyperVLinkedService.py:101 +#: services/OVirt/OVirtLinkedService.py:112 +#: services/Vmware_enterprise/VCLinkedCloneService.py:51 +msgid "Memory (Mb)" +msgstr "Memoria (Mb)" + +#: services/HyperV_enterprise/HyperVClusterLinkedService.py:99 +#: services/HyperV_enterprise/HyperVLinkedService.py:102 +#: services/Vmware_enterprise/VCLinkedCloneService.py:52 +msgid "Memory for machines deployed from this service" +msgstr "Memoria para máquinas desplegada desde este servicio" + +#: services/HyperV_enterprise/HyperVClusterLinkedService.py:100 +#: services/HyperV_enterprise/HyperVLinkedService.py:103 +msgid "Datastore Drives" +msgstr "Unidades de almacén de datos" + +#: services/HyperV_enterprise/HyperVClusterLinkedService.py:101 +#: services/HyperV_enterprise/HyperVLinkedService.py:104 +msgid "Datastores where to put incrementals & publications" +msgstr "Almacenes de datos dónde poner los backups incrementales & publicaciones" + +#: services/HyperV_enterprise/HyperVClusterLinkedService.py:102 +#: services/HyperV_enterprise/HyperVLinkedService.py:105 +#: services/OVirt/OVirtLinkedService.py:118 +#: services/Vmware_enterprise/VCLinkedCloneService.py:55 +msgid "Machine Names" +msgstr "Nombres de máquinas" + +#: services/HyperV_enterprise/HyperVClusterLinkedService.py:102 +#: services/HyperV_enterprise/HyperVLinkedService.py:105 +#: services/Vmware_enterprise/VCLinkedCloneService.py:55 +msgid "Base name for clones from this machine" +msgstr "Nombre base de clones de esta máquina" + +#: services/HyperV_enterprise/HyperVClusterLinkedService.py:103 +#: services/HyperV_enterprise/HyperVLinkedService.py:106 +#: services/OVirt/OVirtLinkedService.py:119 +#: services/Vmware_enterprise/VCLinkedCloneService.py:56 +msgid "Name Length" +msgstr "Longitud del nombre" + +#: services/HyperV_enterprise/HyperVClusterLinkedService.py:104 +#: services/HyperV_enterprise/HyperVLinkedService.py:107 +#: services/OVirt/OVirtLinkedService.py:120 +#: services/Vmware_enterprise/VCLinkedCloneService.py:57 +msgid "Length of numeric part for the names of this machines (betwen 3 and 6" +msgstr "" +"Longitud de la parte numérica de los nombres de esta maquinaria (entre 3 y 6" + +#: services/HyperV_enterprise/HyperVClusterLinkedService.py:116 +#: services/HyperV_enterprise/HyperVLinkedService.py:119 +#: services/OVirt/OVirtLinkedService.py:143 +#: services/Vmware_enterprise/VCLinkedCloneService.py:95 +msgid "The length of basename plus length must not be greater than 15" +msgstr "La longitud de basename más longitud no debe ser superior a 15" + +#: services/HyperV_enterprise/HyperVClusterLinkedService.py:118 +#: services/HyperV_enterprise/HyperVLinkedService.py:121 +#: services/OVirt/OVirtLinkedService.py:145 +#: services/Vmware_enterprise/VCLinkedCloneService.py:97 +msgid "The machine name can't be only numbers" +msgstr "El nombre del equipo no puede ser sólo números" + +#: services/HyperV_enterprise/HyperVClusterProvider.py:64 +msgid "HyperV Cluster Provider" +msgstr "Cluster HyperV proveedor" + +#: services/HyperV_enterprise/HyperVClusterProvider.py:68 +msgid "HyperV Cluster Service Provider" +msgstr "Proveedor de servicios de clúster HyperV" + +#: services/HyperV_enterprise/HyperVClusterProvider.py:89 +#: services/HyperV_enterprise/HyperVProvider.py:81 +msgid "HyperV Server IP or Hostname (must enable first WSMAN access)" +msgstr "HyperV servidor IP o nombre de host (debe permitir el acceso WSMAN primera)" + +#: services/HyperV_enterprise/HyperVClusterProvider.py:90 +#: services/HyperV_enterprise/HyperVProvider.py:82 +msgid "WSMan Port (normally 5985)" +msgstr "Puerto de WSMan (normalmente 5985)" + +#: services/HyperV_enterprise/HyperVClusterProvider.py:91 +#: services/HyperV_enterprise/HyperVProvider.py:83 +msgid "User with valid privileges on HyperV Server" +msgstr "Usuario con privilegios válidos en servidor HyperV" + +#: services/HyperV_enterprise/HyperVClusterProvider.py:92 +#: services/HyperV_enterprise/HyperVProvider.py:84 +msgid "Password of the user of HyperV" +msgstr "Contraseña del usuario de HyperV" + +#: services/HyperV_enterprise/HyperVClusterProvider.py:93 +#: services/HyperV_enterprise/HyperVProvider.py:85 +msgid "Timeout in seconds of connection to HyperV" +msgstr "Tiempo de espera en segundos de conexión a HyperV" + +#: services/HyperV_enterprise/HyperVClusterProvider.py:94 +#: services/HyperV_enterprise/HyperVProvider.py:86 +#: services/OVirt/OVirtProvider.py:96 +#: services/Vmware_enterprise/ServiceProviderVC.py:33 +msgid "Macs range" +msgstr "Rango de Macs" + +#: services/HyperV_enterprise/HyperVClusterProvider.py:95 +#: services/HyperV_enterprise/HyperVProvider.py:87 +#: services/OVirt/OVirtProvider.py:97 +msgid "Range of valids macs for created machines" +msgstr "Rango válido de macs para las máquinas creadas" + +#: services/HyperV_enterprise/HyperVClusterProvider.py:132 +msgid "The selected server is not a cluster" +msgstr "El servidor seleccionado no es un clúster" + +#: services/HyperV_enterprise/HyperVClusterProvider.py:299 +#: services/HyperV_enterprise/HyperVProvider.py:249 +#: services/OVirt/OVirtProvider.py:399 +msgid "Connection test successful" +msgstr "Test de conexión correcto" + +#: services/HyperV_enterprise/HyperVClusterProvider.py:300 +#: services/HyperV_enterprise/HyperVProvider.py:250 +#: services/OVirt/OVirtProvider.py:400 +#: services/Vmware_enterprise/ServiceProviderVC.py:120 +msgid "Connection failed. Check connection params" +msgstr "La conexión ha fallado. Compruebe los parámetros." + +#: services/HyperV_enterprise/HyperVClusterPublication.py:97 +#: services/HyperV_enterprise/HyperVPublication.py:96 +#: services/OVirt/OVirtPublication.py:85 +#, python-brace-format +msgid "UDS pub for {0} at {1}" +msgstr "Publicación de UDS para {0} en {1}" + +#: services/HyperV_enterprise/HyperVLinkedService.py:54 +msgid "HyperV Linked Clone (Experimental)" +msgstr "HyperV vinculado clon (Experimental)" + +#: services/HyperV_enterprise/HyperVProvider.py:62 +msgid "HyperV Platform Provider" +msgstr "Proveedor de plataformas HyperV" + +#: services/HyperV_enterprise/HyperVProvider.py:66 +msgid "HyperV platform service provider" +msgstr "Proveedor de servicios de plataforma HyperV" + #: services/OVirt/OVirtLinkedService.py:56 msgid "oVirt Linked Clone (Experimental)" msgstr "Clon enlazado de ovirt (Experimental)" @@ -837,22 +1349,6 @@ msgstr "Clon enlazado de ovirt (Experimental)" msgid "oVirt Services based on templates and COW (experimental)" msgstr "Servicios oVirt basados en plantillas y COW (Experimental)" -#: services/OVirt/OVirtLinkedService.py:77 -msgid "Number of desired machines to keep running waiting for a user" -msgstr "Número de máquinas a manatener en ejecución esperando a un usuario" - -#: services/OVirt/OVirtLinkedService.py:83 -msgid "Number of desired machines to keep suspended waiting for use" -msgstr "Número de maquinas a mantener suspendidas esperando asignación" - -#: services/OVirt/OVirtLinkedService.py:99 -msgid "Base Machine" -msgstr "Máquina de base" - -#: services/OVirt/OVirtLinkedService.py:99 -msgid "Service base machine" -msgstr "Máquina de base para el servicio" - #: services/OVirt/OVirtLinkedService.py:100 msgid "Cluster" msgstr "Cluster" @@ -869,10 +1365,6 @@ msgstr "Almacenamiento" msgid "Datastore domain where to publish and put incrementals" msgstr "Almacenamiento donde colocar los incrementales y las publicaciones" -#: services/OVirt/OVirtLinkedService.py:112 -msgid "Memory (Mb)" -msgstr "Memoria (Mb)" - #: services/OVirt/OVirtLinkedService.py:113 msgid "Memory assigned to machines" msgstr "Memoria asignada a las máquinas" @@ -885,19 +1377,6 @@ msgstr "Memoria Garantizada (Mb)" msgid "Physical memory guaranteed to machines" msgstr "Memoria física garantizada a las máquinas" -#: services/OVirt/OVirtLinkedService.py:118 -msgid "Machine Names" -msgstr "Nombres de máquinas" - -#: services/OVirt/OVirtLinkedService.py:119 -msgid "Name Length" -msgstr "Longitud del nombre" - -#: services/OVirt/OVirtLinkedService.py:120 -msgid "Length of numeric part for the names of this machines (betwen 3 and 6" -msgstr "" -"Longitud de la parte numérica de los nombres de esta maquinaria (entre 3 y 6" - #: services/OVirt/OVirtLinkedService.py:122 msgid "Display" msgstr "Pantalla" @@ -906,14 +1385,6 @@ msgstr "Pantalla" msgid "Display type (only for administration pourposses)" msgstr "Tipo de pantalla (solo para la administración)" -#: services/OVirt/OVirtLinkedService.py:143 -msgid "The length of basename plus length must not be greater than 15" -msgstr "La longitud de basename más longitud no debe ser superior a 15" - -#: services/OVirt/OVirtLinkedService.py:145 -msgid "The machine name can't be only numbers" -msgstr "El nombre del equipo no puede ser sólo números" - #: services/OVirt/OVirtProvider.py:73 msgid "oVirt Platform Provider" msgstr "Proveedor para la plataforma oVirt" @@ -935,30 +1406,10 @@ msgid "Password of the user of oVirt" msgstr "Contraseña del usuario de oVirt" #: services/OVirt/OVirtProvider.py:95 +#: services/Vmware_enterprise/ServiceProviderVC.py:32 msgid "Timeout in seconds of connection to VC" msgstr "Timeout en segundos" -#: services/OVirt/OVirtProvider.py:96 -msgid "Macs range" -msgstr "Rango de Macs" - -#: services/OVirt/OVirtProvider.py:97 -msgid "Range of valids macs for created machines" -msgstr "Rango válido de macs para las máquinas creadas" - -#: services/OVirt/OVirtProvider.py:399 -msgid "Connection test successful" -msgstr "Test de conexión correcto" - -#: services/OVirt/OVirtProvider.py:400 -msgid "Connection failed. Check connection params" -msgstr "La conexión ha fallado. Compruebe los parámetros." - -#: services/OVirt/OVirtPublication.py:85 -#, python-brace-format -msgid "UDS pub for {0} at {1}" -msgstr "Publicación de UDS para {0} en {1}" - #: services/PhysicalMachines/IPMachineDeployed.py:57 msgid "IP " msgstr "IP " @@ -1075,6 +1526,121 @@ msgstr "Caché L2 para maniquí elementos" msgid "List of names" msgstr "Lista de nombres" +#: services/Vmware_enterprise/Helpers.py:72 +msgid "Local" +msgstr "Locales" + +#: services/Vmware_enterprise/Helpers.py:74 +msgid "Remote" +msgstr "Control remoto" + +#: services/Vmware_enterprise/PublicationVC.py:37 +msgid "Publication" +msgstr "Publicación" + +#: services/Vmware_enterprise/PublicationVC.py:38 +#, python-brace-format +msgid "UDS Publication for {0} created at {1}" +msgstr "Publicación de UDS para {0} creado en {1}" + +#: services/Vmware_enterprise/ServiceProviderVC.py:28 +msgid "VMWare VC Server IP or Hostname" +msgstr "VMWare Server VC IP o nombre de host" + +#: services/Vmware_enterprise/ServiceProviderVC.py:29 +msgid "VMWare VC Server Port (usually 443)" +msgstr "Puerto del servidor VMWare VC (generalmente 443)" + +#: services/Vmware_enterprise/ServiceProviderVC.py:30 +msgid "User with valid privileges on VC" +msgstr "Usuario con privilegios válidos en VC" + +#: services/Vmware_enterprise/ServiceProviderVC.py:31 +msgid "Password of the user of the VC" +msgstr "Contraseña del usuario de la VC" + +#: services/Vmware_enterprise/ServiceProviderVC.py:34 +msgid "" +"Range of valids macs for created machines. Must be inside " +"00:50:56:00:00:00-00:50:56:3F:FF:FF" +msgstr "" +"Gama de macs válidos para máquinas creadas. Debe estar dentro " +"00:50:56:00:00:00-00:50:56:3F:FF:FF" + +#: services/Vmware_enterprise/ServiceProviderVC.py:39 +msgid "VMWare Virtual Center Provider" +msgstr "VMWare Virtual Center proveedor" + +#: services/Vmware_enterprise/ServiceProviderVC.py:41 +msgid "Provides connection to Virtual Center Services" +msgstr "Proporciona conexión a los servicios de Centro Virtual" + +#: services/Vmware_enterprise/ServiceProviderVC.py:110 +msgid "Error testing connection" +msgstr "Conexión de prueba de error" + +#: services/Vmware_enterprise/ServiceProviderVC.py:113 +msgid "VmwareVC Provider: " +msgstr "VmwareVC proveedor: " + +#: services/Vmware_enterprise/ServiceProviderVC.py:119 +msgid "Connection params ok" +msgstr "Conexión params ok" + +#: services/Vmware_enterprise/VCLinkedCloneService.py:30 +msgid "Datacenter" +msgstr "Datacenter" + +#: services/Vmware_enterprise/VCLinkedCloneService.py:36 +msgid "Datacenter containing base machine" +msgstr "Máquina de base que contenga Datacenter" + +#: services/Vmware_enterprise/VCLinkedCloneService.py:40 +msgid "Pub. Resource Pool" +msgstr "Pub. Fondo de recursos" + +#: services/Vmware_enterprise/VCLinkedCloneService.py:40 +msgid "Resource Pool where deploy clones" +msgstr "Agrupación de recursos donde desplegar clones" + +#: services/Vmware_enterprise/VCLinkedCloneService.py:41 +msgid "Clones Folder" +msgstr "Carpeta de clones" + +#: services/Vmware_enterprise/VCLinkedCloneService.py:41 +msgid "Folder where deploy clones" +msgstr "Carpeta donde desplegar clones" + +#: services/Vmware_enterprise/VCLinkedCloneService.py:42 +msgid "Resource Pool" +msgstr "Fondo de recursos" + +#: services/Vmware_enterprise/VCLinkedCloneService.py:48 +msgid "Resource Pool containing base machine" +msgstr "Máquina base contenedora de recurso piscina" + +#: services/Vmware_enterprise/VCLinkedCloneService.py:50 +msgid "Base machine for this service" +msgstr "Máquina base para este servicio" + +#: services/Vmware_enterprise/VCLinkedCloneService.py:53 +msgid "Datastores" +msgstr "Almacenes de datos" + +#: services/Vmware_enterprise/VCLinkedCloneService.py:54 +msgid "Datastores where to put incrementals" +msgstr "Almacenes de datos dónde poner los backups incrementales" + +#: services/Vmware_enterprise/VCLinkedCloneService.py:64 +msgid "VMWare Linked clone base" +msgstr "VMWare vinculado base clon" + +#: services/Vmware_enterprise/VCLinkedCloneService.py:66 +msgid "" +"This service provides access to Linked Clones machines on a Virtual Center" +msgstr "" +"Este servicio proporciona acceso a máquinas de Clones enlazados en un Centro Virtual" + #: templates/404.html:3 templates/500.html:3 msgid "Page not found" msgstr "Página no encontrada" @@ -1135,10 +1701,6 @@ msgstr "IP" msgid "Transports" msgstr "Transportes" -#: templates/uds/internal_page.html:28 -msgid "User" -msgstr "Usuario" - #: templates/uds/internal_page.html:34 templates/uds/prefs.html:12 #: templates/uds/html5/snippets/navbar.html:39 msgid "Preferences" @@ -1176,12 +1738,6 @@ msgstr "UDS Preferencias de usuario " msgid "Save Preferences" msgstr "Guardar Preferencias" -#: templates/uds/service_not_ready.html:6 -msgid "Service not ready at this moment. Please, try again in a while." -msgstr "" -"El servicio no está disponible en estos momentos. Por favor, intentelo de " -"nuevo pasado unos instantes." - #: templates/uds/admin/snippets/navbar.html:6 #: templates/uds/html5/snippets/navbar.html:6 msgid "toggle navigation" @@ -1197,6 +1753,7 @@ msgid "Authenticators" msgstr "Autenticadores" #: templates/uds/admin/snippets/navbar.html:21 +#: templates/uds/admin/tmpl/connectivity.html:4 msgid "Connectivity" msgstr "Conectividad" @@ -1208,11 +1765,11 @@ msgstr "Servicios desplegados" msgid "Configuration" msgstr "Configuración" -#: templates/uds/admin/snippets/navbar.html:56 +#: templates/uds/admin/snippets/navbar.html:57 msgid "Exit dashboard" msgstr "Tablero de salida" -#: templates/uds/admin/snippets/navbar.html:57 +#: templates/uds/admin/snippets/navbar.html:58 #: templates/uds/html5/snippets/navbar.html:47 msgid "logout" msgstr "logout" @@ -1221,6 +1778,7 @@ msgstr "logout" msgid "administration of authenticators" msgstr "Administración de autenticadores" +#: templates/uds/admin/tmpl/connectivity.html:4 #: templates/uds/admin/tmpl/dashboard.html:4 msgid "overview" msgstr "Resumen" @@ -1355,32 +1913,46 @@ msgstr "" #: transports/HTML5RDP/HTML5RDP.py:63 transports/NX/NXTransport.py:60 #: transports/NX/TSNXTransport.py:65 transports/RDP/RDPTransport.py:58 -#: transports/RDP/TSRDPTransport.py:62 transports/TSNX/TSNXTransport.py:65 +#: transports/RDP/TSRDPTransport.py:62 +#: transports/RGS-enterprise/RGSTransport.py:41 +#: transports/RGS-enterprise/TRGSTransport.py:46 +#: transports/TSNX/TSNXTransport.py:65 msgid "Empty creds" msgstr "Sin credenciales" #: transports/HTML5RDP/HTML5RDP.py:63 transports/NX/NXTransport.py:60 #: transports/NX/TSNXTransport.py:65 transports/RDP/RDPTransport.py:58 -#: transports/RDP/TSRDPTransport.py:62 transports/TSNX/TSNXTransport.py:65 +#: transports/RDP/TSRDPTransport.py:62 +#: transports/RGS-enterprise/RGSTransport.py:41 +#: transports/RGS-enterprise/TRGSTransport.py:46 +#: 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/NX/TSNXTransport.py:66 transports/RDP/RDPTransport.py:59 -#: transports/RDP/TSRDPTransport.py:63 transports/TSNX/TSNXTransport.py:66 +#: transports/RDP/TSRDPTransport.py:63 +#: transports/RGS-enterprise/RGSTransport.py:42 +#: transports/RGS-enterprise/TRGSTransport.py:47 +#: 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/NX/TSNXTransport.py:67 transports/RDP/RDPTransport.py:60 -#: transports/RDP/TSRDPTransport.py:64 transports/TSNX/TSNXTransport.py:67 +#: transports/RDP/TSRDPTransport.py:64 +#: transports/RGS-enterprise/RGSTransport.py:43 +#: transports/RGS-enterprise/TRGSTransport.py:48 +#: 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" #: transports/HTML5RDP/HTML5RDP.py:66 transports/RDP/RDPTransport.py:61 #: transports/RDP/TSRDPTransport.py:65 +#: transports/RGS-enterprise/RGSTransport.py:44 +#: transports/RGS-enterprise/TRGSTransport.py:49 msgid "" "If not empty, this domain will be always used as credential (used as DOMAIN" "\\user)" @@ -1487,11 +2059,13 @@ 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/RGS-enterprise/TRGSTransport.py:43 #: transports/TSNX/TSNXTransport.py:62 msgid "Tunnel server" msgstr "Servidor de túnel" #: transports/NX/TSNXTransport.py:62 transports/RDP/TSRDPTransport.py:59 +#: transports/RGS-enterprise/TRGSTransport.py:43 #: transports/TSNX/TSNXTransport.py:62 msgid "" "IP or Hostname of tunnel server send to client device (\"public\" ip) and " @@ -1501,11 +2075,13 @@ msgstr "" "(ip \"pública\") y puerto. (utilice el formato HOST: puerto)" #: transports/NX/TSNXTransport.py:63 transports/RDP/TSRDPTransport.py:60 +#: transports/RGS-enterprise/TRGSTransport.py:44 #: 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/RGS-enterprise/TRGSTransport.py:44 #: transports/TSNX/TSNXTransport.py:63 msgid "" "If not empty, this server will be used to check if service is running before " @@ -1515,6 +2091,7 @@ msgstr "" "ejecuta antes de asignarle al usuario. (utilice el formato HOST: puerto)" #: transports/NX/TSNXTransport.py:103 transports/RDP/TSRDPTransport.py:75 +#: transports/RGS-enterprise/TRGSTransport.py:71 #: 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" @@ -1620,7 +2197,7 @@ msgstr "Protocolo de Escritorio remoto (RDP)" msgid "In order to use this service, you should first install CoRD." msgstr "Para poder utilizar este servicio, primero debe instalar CoRD." -#: transports/RDP/web.py:85 +#: transports/RDP/web.py:85 transports/RGS-enterprise/web.py:83 msgid "You can obtain it from" msgstr "Puede obtenerlo de" @@ -1628,18 +2205,122 @@ msgstr "Puede obtenerlo de" msgid "CoRD Website" msgstr "Sitio Web de CoRD" +#: transports/RGS-enterprise/RGSTransport.py:34 +msgid "RGS Transport (direct)" +msgstr "RGS transporte (directo)" + +#: transports/RGS-enterprise/RGSTransport.py:36 +msgid "RGS Transport for direct connection" +msgstr "RGS transporte para la conexión directa" + +#: transports/RGS-enterprise/RGSTransport.py:45 +#: transports/RGS-enterprise/TRGSTransport.py:50 +msgid "Image quality" +msgstr "Calidad de imagen" + +#: transports/RGS-enterprise/RGSTransport.py:46 +#: transports/RGS-enterprise/TRGSTransport.py:51 +msgid "Quality of image codec (0-100)" +msgstr "Calidad del codec de imagen (0-100)" + +#: transports/RGS-enterprise/RGSTransport.py:47 +#: transports/RGS-enterprise/TRGSTransport.py:52 +msgid "Adjustable Quality" +msgstr "Calidad ajustable" + +#: transports/RGS-enterprise/RGSTransport.py:48 +#: transports/RGS-enterprise/TRGSTransport.py:53 +msgid "If checked, the image quality will be adjustable with bandwidth" +msgstr "Si está marcada, la calidad de imagen será ajustable con ancho de banda" + +#: transports/RGS-enterprise/RGSTransport.py:49 +#: transports/RGS-enterprise/TRGSTransport.py:54 +msgid "Min. Adjustable Quality" +msgstr "Calidad ajustable min." + +#: transports/RGS-enterprise/RGSTransport.py:50 +#: transports/RGS-enterprise/TRGSTransport.py:55 +msgid "" +"The lowest image quality applied to images to maintain the minimum update " +"rate." +msgstr "" +"La menor calidad de imagen aplicada a las imágenes para mantener la actualización mínima " +"tasa." + +#: transports/RGS-enterprise/RGSTransport.py:51 +#: transports/RGS-enterprise/TRGSTransport.py:56 +msgid "Adjustable Frame Rate" +msgstr "Velocidad de fotogramas ajustable" + +#: transports/RGS-enterprise/RGSTransport.py:52 +#: transports/RGS-enterprise/TRGSTransport.py:57 +msgid "Update rate threshold to begin adjusting image quality" +msgstr "Umbral de tasa de actualización para comenzar a ajustar la calidad de imagen" + +#: transports/RGS-enterprise/RGSTransport.py:53 +#: transports/RGS-enterprise/TRGSTransport.py:58 +msgid "Match Local Resolution" +msgstr "Resolución Local del partido" + +#: transports/RGS-enterprise/RGSTransport.py:54 +#: transports/RGS-enterprise/TRGSTransport.py:59 +msgid "" +"Change the Sender's resolution to match the Receiver's resolution when " +"connecting" +msgstr "" +"Cambiar la resolución del remitente hasta la resolución del receptor cuando " +"conexión" + +#: transports/RGS-enterprise/RGSTransport.py:55 +#: transports/RGS-enterprise/TRGSTransport.py:60 +msgid "Redirect USB" +msgstr "Redirección USB" + +#: transports/RGS-enterprise/RGSTransport.py:56 +#: transports/RGS-enterprise/TRGSTransport.py:61 +msgid "If checked, the USB will be redirected." +msgstr "Si está marcada, el USB será redirigido." + +#: transports/RGS-enterprise/RGSTransport.py:57 +#: transports/RGS-enterprise/TRGSTransport.py:62 +msgid "Redirect Audio" +msgstr "Redirigir Audio" + +#: transports/RGS-enterprise/RGSTransport.py:58 +#: transports/RGS-enterprise/TRGSTransport.py:63 +msgid "If checked, the Audio will be redirected." +msgstr "Si está marcada, el Audio será redirigido." + +#: transports/RGS-enterprise/RGSTransport.py:59 +#: transports/RGS-enterprise/TRGSTransport.py:64 +msgid "Redirect Mic" +msgstr "Redirigir Mic" + +#: transports/RGS-enterprise/RGSTransport.py:60 +#: transports/RGS-enterprise/TRGSTransport.py:65 +msgid "If checked, the Mic will be redirected." +msgstr "Si está marcada, el micrófono será redirigido." + +#: transports/RGS-enterprise/TRGSTransport.py:36 +msgid "RGS Transport (tunneled)" +msgstr "RGS transporte (túnel)" + +#: transports/RGS-enterprise/TRGSTransport.py:38 +msgid "RGS Transport for tunneled connection" +msgstr "RGS transporte para la conexión de túnel" + +#: transports/RGS-enterprise/web.py:82 +msgid "In order to use this service, you should first install RGS Receiver." +msgstr "Para poder utilizar este servicio, usted debe instalar primero RGS receptor." + +#: transports/RGS-enterprise/web.py:83 +msgid "HP Website" +msgstr "Página Web de HP" + #: web/errors.py:60 msgid "Unknown error" msgstr "Error desconocido" -#: web/errors.py:61 -msgid "Transport not found" -msgstr "Transporte no hallado" - -#: web/errors.py:62 -msgid "Service not found" -msgstr "Servicio no hallado" - #: web/errors.py:63 xmlrpc/auths/AdminAuth.py:182 #: xmlrpc/auths/AdminAuth.py:188 msgid "Access denied" @@ -1711,10 +2392,6 @@ msgstr "Las credenciales ya no son válidas" msgid "Administration" msgstr "Administración" -#: xmlrpc/auths/AdminAuth.py:168 -msgid "Invalid credentials" -msgstr "Credenciales Invalidas" - #: xmlrpc/auths/Authenticators.py:107 msgid "Authenticator does not exists" msgstr "El autenticador no existe" diff --git a/server/src/uds/locale/es/LC_MESSAGES/djangojs.mo b/server/src/uds/locale/es/LC_MESSAGES/djangojs.mo index 1148695f7b9b6b26e012a727565283872d81c653..6dd28c80c0aa9f21009f0e9a3936ae93a16ea2f0 100644 GIT binary patch delta 815 zcmY+BJxE(o6vuD!l4y+@iTZ78`8Vha7>uV&VUWV((_&(P7$NISLbF-jv@6Uu~#(RwwpZ0h)(=`s3s z^+@-UC2w(WR2OA>l>WpM)PiIk=n;yd6sidOy`C`eM(YMY%*|(CWGAO5Ur){ZzF$1| idLxxxxoobxH`h~ajSob^H;M6@;VH|RR?@FTGV&ke=}I2} delta 810 zcmZ9}KS&%w6vy$|TRqS7&uPS5{1ZG9MX(4tO^^#piu6{3g{XumdIT`CG{@ns;Wb6;J()7fbi2 dp1*k2n=Ym*UwfK!H)ZneWH=t3E*?bV-Yq-1N{j#i diff --git a/server/src/uds/locale/es/LC_MESSAGES/djangojs.po b/server/src/uds/locale/es/LC_MESSAGES/djangojs.po index 6f194c046..cab259af1 100644 --- a/server/src/uds/locale/es/LC_MESSAGES/djangojs.po +++ b/server/src/uds/locale/es/LC_MESSAGES/djangojs.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-11-17 04:21+0100\n" +"POT-Creation-Date: 2013-11-20 04:05+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -18,14 +18,10 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: static/adm/js/gui-elements.js:7 +#: static/adm/js/gui-elements.js:33 msgid "Service Providers" msgstr "Proveedores de servicios" -#: 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" @@ -70,19 +66,19 @@ msgstr "Próxima" msgid "Previous" msgstr "Anterior" -#: static/adm/js/gui.js:80 +#: static/adm/js/gui.js:75 msgid "Deployed services" msgstr "Servicios desplegados" -#: static/adm/js/gui.js:349 +#: static/adm/js/gui.js:360 msgid "Edit" msgstr "Editar" -#: static/adm/js/gui.js:358 +#: static/adm/js/gui.js:369 msgid "Delete" msgstr "Borrar" -#: static/adm/js/gui.js:367 +#: static/adm/js/gui.js:378 msgid "Refresh" msgstr "Actualización" @@ -161,3 +157,7 @@ msgstr "Noviembre" #: static/adm/js/strftime.js:35 msgid "December" msgstr "Diciembre" + +#: static/adm/js/tools.js:46 +msgid "Just a moment..." +msgstr "Un momento..." diff --git a/server/src/uds/locale/fr/LC_MESSAGES/django.mo b/server/src/uds/locale/fr/LC_MESSAGES/django.mo index a3f006c8518f3df889abcfe0ee588f215456b7b8..6a70275a269a0f6a6bc42b0a5c9d1fca9f836418 100644 GIT binary patch literal 47742 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 N(KzAcx{+~-{y*rSmaPB) delta 9282 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 L=k9&w6W@OUY&qz6 diff --git a/server/src/uds/locale/fr/LC_MESSAGES/django.po b/server/src/uds/locale/fr/LC_MESSAGES/django.po index 2dccee346..3a509021b 100644 --- a/server/src/uds/locale/fr/LC_MESSAGES/django.po +++ b/server/src/uds/locale/fr/LC_MESSAGES/django.po @@ -32,7 +32,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-11-17 04:20+0100\n" +"POT-Creation-Date: 2013-11-20 04:05+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -42,23 +42,23 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1)\n" -#: REST/methods/authenticators.py:73 +#: REST/methods/authenticators.py:80 msgid "Current authenticators" msgstr "Authentificateurs actuels" -#: REST/methods/authenticators.py:75 REST/methods/networks.py:68 +#: REST/methods/authenticators.py:82 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:76 REST/methods/osmanagers.py:72 +#: REST/methods/authenticators.py:83 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:77 +#: REST/methods/authenticators.py:84 msgid "Users" msgstr "Utilisateurs" @@ -114,14 +114,264 @@ msgstr "État" msgid "Last access" msgstr "Dernier accès" -#: admin/views.py:55 admin/views.py:63 admin/views.py:76 web/views.py:422 +#: admin/views.py:55 admin/views.py:63 admin/views.py:77 web/views.py:422 msgid "Forbidden" msgstr "Interdit" -#: admin/views.py:69 +#: admin/views.py:70 msgid "requested a template that do not exists" msgstr "demandé un modèle qui ne sont pas existe" +#: auths/ActiveDirectory_enterprise/Authenticator.py:29 +#: auths/EDirectory_enterprise/Authenticator.py:60 +#: auths/RegexLdap/Authenticator.py:49 auths/SimpleLDAP/Authenticator.py:49 +#: services/HyperV_enterprise/HyperVClusterProvider.py:89 +#: services/HyperV_enterprise/HyperVProvider.py:81 +#: services/OVirt/OVirtProvider.py:92 +#: services/Vmware_enterprise/ServiceProviderVC.py:28 +msgid "Host" +msgstr "Serveur" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:29 +msgid "Active Directory Server IP or Hostname" +msgstr "Active Directory Server IP ou nom d'hôte" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:30 +#: auths/EDirectory_enterprise/Authenticator.py:62 +#: auths/RegexLdap/Authenticator.py:51 auths/SimpleLDAP/Authenticator.py:51 +msgid "Use SSL" +msgstr "Utiliser SSL" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:30 +msgid "If checked, will use a ssl connection to Active Directory" +msgstr "Si cochée, utilise une connexion ssl vers Active Directory" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:31 +msgid "Compatibility" +msgstr "Compatibilité" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:31 +msgid "Compatibility of AD connection (Usually windows 2000 and later)" +msgstr "Compatibilité de connexion AD (généralement windows 2000 et versions ultérieures)" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:33 +#: auths/RegexLdap/Authenticator.py:52 auths/SimpleLDAP/Authenticator.py:52 +msgid "Ldap User" +msgstr "Utilisateur LDAP" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:33 +msgid "" +"Username with read privileges on the base selected (use USER@DOMAIN.DOM form " +"for this)" +msgstr "" +"Nom d'utilisateur avec des privilèges de lecture sur la base sélectionnée (utilisation USER@DOMAIN.Forme de DOM " +"pour cela)" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:34 +#: auths/ActiveDirectory_enterprise/Authenticator.py:52 +#: auths/EDirectory_enterprise/Authenticator.py:64 +#: auths/RegexLdap/Authenticator.py:53 auths/RegexLdap/Authenticator.py:76 +#: auths/SimpleLDAP/Authenticator.py:53 auths/SimpleLDAP/Authenticator.py:77 +#: core/auths/BaseAuthenticator.py:136 +#: osmanagers/WindowsOsManager/WinDomainOsManager.py:34 +#: osmanagers/WindowsOsManager/WinRandomPassOsManager.py:30 +#: services/HyperV_enterprise/HyperVClusterProvider.py:92 +#: services/HyperV_enterprise/HyperVProvider.py:84 +#: services/OVirt/OVirtProvider.py:94 services/Sample/SampleService.py:131 +#: services/Vmware_enterprise/ServiceProviderVC.py:31 +#: transports/HTML5RDP/HTML5RDP.py:65 transports/NX/NXTransport.py:62 +#: transports/NX/TSNXTransport.py:67 transports/RDP/RDPTransport.py:60 +#: transports/RDP/TSRDPTransport.py:64 +#: transports/RGS-enterprise/RGSTransport.py:43 +#: transports/RGS-enterprise/TRGSTransport.py:48 +#: transports/TSNX/TSNXTransport.py:67 web/forms/LoginForm.py:70 +msgid "Password" +msgstr "Mot de passe" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:34 +#: auths/EDirectory_enterprise/Authenticator.py:64 +#: auths/RegexLdap/Authenticator.py:53 auths/SimpleLDAP/Authenticator.py:53 +msgid "Password of the ldap user" +msgstr "Mot de passe de l'utilisateur ldap" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:35 +#: auths/EDirectory_enterprise/Authenticator.py:65 +#: auths/RegexLdap/Authenticator.py:54 auths/SimpleLDAP/Authenticator.py:54 +#: services/HyperV_enterprise/HyperVClusterProvider.py:93 +#: services/HyperV_enterprise/HyperVProvider.py:85 +#: services/OVirt/OVirtProvider.py:95 +#: services/Vmware_enterprise/ServiceProviderVC.py:32 +msgid "Timeout" +msgstr "Temporisation" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:35 +#: auths/EDirectory_enterprise/Authenticator.py:65 +#: auths/RegexLdap/Authenticator.py:54 auths/SimpleLDAP/Authenticator.py:54 +msgid "Timeout in seconds of connection to LDAP" +msgstr "Délai en secondes de la connexion à LDAP" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:37 +msgid "Active Directory Authenticator" +msgstr "Authentificateur de Active Directory" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:39 +msgid "Authenticate against Active Directory" +msgstr "S'authentifier sur Active Directory" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:48 +#: auths/EDirectory_enterprise/Authenticator.py:77 +#: auths/RegexLdap/Authenticator.py:72 auths/SimpleLDAP/Authenticator.py:73 +#: services/HyperV_enterprise/HyperVClusterProvider.py:91 +#: services/HyperV_enterprise/HyperVProvider.py:83 +#: services/OVirt/OVirtProvider.py:93 +#: services/Vmware_enterprise/ServiceProviderVC.py:30 +#: transports/HTML5RDP/HTML5RDP.py:64 transports/NX/NXTransport.py:61 +#: transports/NX/TSNXTransport.py:66 transports/RDP/RDPTransport.py:59 +#: transports/RDP/TSRDPTransport.py:63 +#: transports/RGS-enterprise/RGSTransport.py:42 +#: transports/RGS-enterprise/TRGSTransport.py:47 +#: transports/TSNX/TSNXTransport.py:66 web/forms/LoginForm.py:69 +msgid "Username" +msgstr "Nom d'utilisateur" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:50 +#: auths/EDirectory_enterprise/Authenticator.py:79 +#: auths/RegexLdap/Authenticator.py:74 auths/SAML_enterprise/SAML.py:114 +#: auths/SimpleLDAP/Authenticator.py:75 +msgid "Group" +msgstr "Groupe" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:67 +#: auths/ActiveDirectory_enterprise/Authenticator.py:442 +msgid "Must specify the username in the form USERNAME@DOMAIN.DOM" +msgstr "Doit spécifier le nom d'utilisateur sous la forme USERNAME@DOMAIN.DOM" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:164 +#: auths/EDirectory_enterprise/Authenticator.py:123 +#: auths/RegexLdap/Authenticator.py:226 auths/SimpleLDAP/Authenticator.py:158 +msgid "Ldap connection error: " +msgstr "Erreur de connexion LDAP : " + +#: auths/ActiveDirectory_enterprise/Authenticator.py:344 +#: auths/ActiveDirectory_enterprise/Authenticator.py:390 +#: auths/EDirectory_enterprise/Authenticator.py:243 +#: auths/EDirectory_enterprise/Authenticator.py:286 +#: auths/RegexLdap/Authenticator.py:303 auths/RegexLdap/Authenticator.py:346 +#: auths/SimpleLDAP/Authenticator.py:269 auths/SimpleLDAP/Authenticator.py:313 +msgid "Username not found" +msgstr "Nom d'utilisateur introuvable" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:377 +#: auths/SimpleLDAP/Authenticator.py:302 +msgid "Group not found" +msgstr "Groupe introuvable" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:410 +#: auths/ActiveDirectory_enterprise/Authenticator.py:428 +#: auths/EDirectory_enterprise/Authenticator.py:303 +#: auths/RegexLdap/Authenticator.py:367 auths/SimpleLDAP/Authenticator.py:328 +#: auths/SimpleLDAP/Authenticator.py:342 +msgid "Too many results, be more specific" +msgstr "Trop de résultats, être plus spécifique" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:451 +msgid "Domain seems to be incorrect, please check it" +msgstr "Domaine semble être incorrect, veuillez bien consulter le" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:456 +msgid "Ldap does not seem an Active Directory (do not have user objects)" +msgstr "LDAP ne semble pas un serveur Active Directory (n'ont pas les objets utilisateur)" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:464 +msgid "Ldap does not seem an Active Directory (no not have group objects)" +msgstr "LDAP ne semble pas un serveur Active Directory (ne pas ont des objets de groupe)" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:472 +msgid "" +"Ldap does not seem an Active Directory (do not have any user nor groups)" +msgstr "" +"LDAP ne semble pas un serveur Active Directory (n'ont pas l'utilisateur ou groupes)" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:477 +#: auths/EDirectory_enterprise/Authenticator.py:358 +#: auths/RegexLdap/Authenticator.py:428 auths/SimpleLDAP/Authenticator.py:423 +msgid "Connection params seem correct, test was succesfully executed" +msgstr "" +"Connexion params semblent correctes, le test a été correctement exécutée" + +#: auths/EDirectory_enterprise/Authenticator.py:60 +msgid "EDirectory Server IP or Hostname" +msgstr "Serveur EDirectory IP ou nom d'hôte" + +#: auths/EDirectory_enterprise/Authenticator.py:61 +#: auths/RegexLdap/Authenticator.py:50 auths/SimpleLDAP/Authenticator.py:50 +#: services/HyperV_enterprise/HyperVClusterProvider.py:90 +#: services/HyperV_enterprise/HyperVProvider.py:82 +#: services/Vmware_enterprise/ServiceProviderVC.py:29 +msgid "Port" +msgstr "Port" + +#: auths/EDirectory_enterprise/Authenticator.py:61 +#: auths/RegexLdap/Authenticator.py:50 auths/SimpleLDAP/Authenticator.py:50 +msgid "Ldap port (389 for non ssl, 636 for ssl normally" +msgstr "Port LDAP (389 non SSL, 636 pour ssl normalement" + +#: auths/EDirectory_enterprise/Authenticator.py:62 +#: auths/RegexLdap/Authenticator.py:51 auths/SimpleLDAP/Authenticator.py:51 +msgid "" +"If checked, will use a ssl connection to ldap (if port is 389, will use in " +"fact port 636)" +msgstr "" +"Si cochée, utilise une connexion ssl à ldap (si le port est 389, utilisera " +"dans port de fait 636)" + +#: auths/EDirectory_enterprise/Authenticator.py:63 +msgid "Admin user" +msgstr "Utilisateur admin" + +#: auths/EDirectory_enterprise/Authenticator.py:63 +msgid "Username with read privileges on the eDirectory" +msgstr "Nom d'utilisateur avec des privilèges de lecture sur l'eDirectory" + +#: auths/EDirectory_enterprise/Authenticator.py:67 +msgid "eDirectory Authenticator" +msgstr "eDirectory authentificateur" + +#: auths/EDirectory_enterprise/Authenticator.py:69 +msgid "Authenticate against eDirectory" +msgstr "S'authentifier auprès d'eDirectory" + +#: auths/EDirectory_enterprise/Authenticator.py:323 +#: auths/RegexLdap/Authenticator.py:387 auths/SimpleLDAP/Authenticator.py:363 +msgid "Ldap search base is incorrect" +msgstr "Base de recherche LDAP est incorrect" + +#: auths/EDirectory_enterprise/Authenticator.py:328 +#: auths/RegexLdap/Authenticator.py:392 auths/SimpleLDAP/Authenticator.py:368 +msgid "Ldap user class seems to be incorrect (no user found by that class)" +msgstr "" +"Classe d'utilisateur LDAP semble incorrect (aucun utilisateur ne trouvé par " +"cette classe)" + +#: auths/EDirectory_enterprise/Authenticator.py:336 +#: auths/SimpleLDAP/Authenticator.py:384 +msgid "" +"Ldap user id attribute seems to be incorrect (no user found by that " +"attribute)" +msgstr "" +"Attribut d'id utilisateur LDAP semble incorrect (aucun utilisateur ne " +"trouvée par qui attribut)" + +#: auths/EDirectory_enterprise/Authenticator.py:344 +msgid "Expected group attribute " +msgstr "Attribut groupe attendue " + +#: auths/EDirectory_enterprise/Authenticator.py:353 +msgid "" +"Ldap user class or user id attr is probably wrong (Ldap is an eDirectory?)" +msgstr "" +"LDAP user class ou utilisateur id attr est probablement faux (Ldap est un eDirectory?)" + #: auths/IP/Authenticator.py:48 auths/IP/Authenticator.py:50 msgid "IP Authenticator" msgstr "Authentificateur IP" @@ -167,70 +417,15 @@ msgstr "S'il est activé, l'hôte sera dns inversée" msgid "Internal structures seems ok" msgstr "Les structures internes semble ok" -#: auths/RegexLdap/Authenticator.py:49 auths/SimpleLDAP/Authenticator.py:49 -#: services/OVirt/OVirtProvider.py:92 -msgid "Host" -msgstr "Serveur" - #: auths/RegexLdap/Authenticator.py:49 msgid "Ldap Server Host" msgstr "Hôte du serveur LDAP" -#: auths/RegexLdap/Authenticator.py:50 auths/SimpleLDAP/Authenticator.py:50 -msgid "Port" -msgstr "Port" - -#: auths/RegexLdap/Authenticator.py:50 auths/SimpleLDAP/Authenticator.py:50 -msgid "Ldap port (389 for non ssl, 636 for ssl normally" -msgstr "Port LDAP (389 non SSL, 636 pour ssl normalement" - -#: auths/RegexLdap/Authenticator.py:51 auths/SimpleLDAP/Authenticator.py:51 -msgid "Use SSL" -msgstr "Utiliser SSL" - -#: auths/RegexLdap/Authenticator.py:51 auths/SimpleLDAP/Authenticator.py:51 -msgid "" -"If checked, will use a ssl connection to ldap (if port is 389, will use in " -"fact port 636)" -msgstr "" -"Si cochée, utilise une connexion ssl à ldap (si le port est 389, utilisera " -"dans port de fait 636)" - -#: auths/RegexLdap/Authenticator.py:52 auths/SimpleLDAP/Authenticator.py:52 -msgid "Ldap User" -msgstr "Utilisateur LDAP" - #: auths/RegexLdap/Authenticator.py:52 auths/SimpleLDAP/Authenticator.py:52 msgid "Username with read privileges on the base selected" msgstr "" "Nom d'utilisateur avec des privilèges de lecture sur la base sélectionnée" -#: auths/RegexLdap/Authenticator.py:53 auths/RegexLdap/Authenticator.py:76 -#: auths/SimpleLDAP/Authenticator.py:53 auths/SimpleLDAP/Authenticator.py:77 -#: core/auths/BaseAuthenticator.py:136 -#: osmanagers/WindowsOsManager/WinDomainOsManager.py:34 -#: 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/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" - -#: auths/RegexLdap/Authenticator.py:53 auths/SimpleLDAP/Authenticator.py:53 -msgid "Password of the ldap user" -msgstr "Mot de passe de l'utilisateur ldap" - -#: auths/RegexLdap/Authenticator.py:54 auths/SimpleLDAP/Authenticator.py:54 -#: services/OVirt/OVirtProvider.py:95 -msgid "Timeout" -msgstr "Temporisation" - -#: auths/RegexLdap/Authenticator.py:54 auths/SimpleLDAP/Authenticator.py:54 -msgid "Timeout in seconds of connection to LDAP" -msgstr "Délai en secondes de la connexion à LDAP" - #: auths/RegexLdap/Authenticator.py:55 auths/SimpleLDAP/Authenticator.py:55 msgid "Base" msgstr "Base" @@ -282,42 +477,6 @@ msgstr "Authentificateur LDAP Regex" msgid "Regular Expressions LDAP authenticator" 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/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" - -#: auths/RegexLdap/Authenticator.py:74 auths/SimpleLDAP/Authenticator.py:75 -msgid "Group" -msgstr "Groupe" - -#: auths/RegexLdap/Authenticator.py:226 auths/SimpleLDAP/Authenticator.py:158 -msgid "Ldap connection error: " -msgstr "Erreur de connexion LDAP : " - -#: auths/RegexLdap/Authenticator.py:303 auths/RegexLdap/Authenticator.py:346 -#: auths/SimpleLDAP/Authenticator.py:269 auths/SimpleLDAP/Authenticator.py:313 -msgid "Username not found" -msgstr "Nom d'utilisateur introuvable" - -#: auths/RegexLdap/Authenticator.py:367 auths/SimpleLDAP/Authenticator.py:328 -#: auths/SimpleLDAP/Authenticator.py:342 -msgid "Too many results, be more specific" -msgstr "Trop de résultats, être plus spécifique" - -#: auths/RegexLdap/Authenticator.py:387 auths/SimpleLDAP/Authenticator.py:363 -msgid "Ldap search base is incorrect" -msgstr "Base de recherche LDAP est incorrect" - -#: auths/RegexLdap/Authenticator.py:392 auths/SimpleLDAP/Authenticator.py:368 -msgid "Ldap user class seems to be incorrect (no user found by that class)" -msgstr "" -"Classe d'utilisateur LDAP semble incorrect (aucun utilisateur ne trouvé par " -"cette classe)" - #: auths/RegexLdap/Authenticator.py:401 msgid "" "Ldap user id attr is probably wrong (can't find any user with both " @@ -334,10 +493,116 @@ msgstr "" "Attribut d'id groupe LDAP semble incorrect (aucun groupe ne trouvée par qui " "attribut)" -#: auths/RegexLdap/Authenticator.py:428 auths/SimpleLDAP/Authenticator.py:423 -msgid "Connection params seem correct, test was succesfully executed" +#: auths/SAML_enterprise/SAML.py:80 +msgid "SAML Authenticator" +msgstr "SAML authentificateur" + +#: auths/SAML_enterprise/SAML.py:92 +msgid "SAML (v2.0) Authenticator" +msgstr "SAML (v2.0) authentificateur" + +#: auths/SAML_enterprise/SAML.py:111 templates/uds/internal_page.html:28 +msgid "User" +msgstr "Utilisateur" + +#: auths/SAML_enterprise/SAML.py:120 +msgid "Private key" +msgstr "Clé privée" + +#: auths/SAML_enterprise/SAML.py:121 +msgid "" +"Private key used for sign and encription, as generated in base 64 from " +"openssl" msgstr "" -"Connexion params semblent correctes, le test a été correctement exécutée" +"Clé privée utilisée pour signe et encription, tel que généré en base 64 de " +"OpenSSL" + +#: auths/SAML_enterprise/SAML.py:122 +msgid "Certificate" +msgstr "Certificat" + +#: auths/SAML_enterprise/SAML.py:123 +msgid "Server certificate (public), , as generated in base 64 from openssl" +msgstr "Certificat serveur (public), comme généré en base 64 d'openssl" + +#: auths/SAML_enterprise/SAML.py:124 +msgid "IDP Metadata" +msgstr "Métadonnées de l'IDP" + +#: auths/SAML_enterprise/SAML.py:125 +msgid "" +"You can enter here the URL or the IDP metadata or the metadata itself (xml)" +msgstr "" +"Ici, vous pouvez entrer le URL ou les métadonnées d'IDP ou les métadonnées lui-même (xml)" + +#: auths/SAML_enterprise/SAML.py:127 +msgid "Entity ID" +msgstr "ID de l'entité" + +#: auths/SAML_enterprise/SAML.py:128 +msgid "ID of the SP. If left blank, this will be autogenerated from server URL" +msgstr "ID de la SP. Si laissé vide, ce sera généré automatiquement des URL du serveur" + +#: auths/SAML_enterprise/SAML.py:130 +msgid "User name attrs" +msgstr "Utilisateur nom attrs" + +#: auths/SAML_enterprise/SAML.py:131 +msgid "Fields from where to extract user name" +msgstr "Champs d'où extraire le nom d'utilisateur" + +#: auths/SAML_enterprise/SAML.py:133 +msgid "Group name attrs" +msgstr "Groupe nom attrs" + +#: auths/SAML_enterprise/SAML.py:134 +msgid "Fields from where to extract the groups" +msgstr "Champs d'où extraire les groupes" + +#: auths/SAML_enterprise/SAML.py:136 +msgid "Real name attrs" +msgstr "De son vrai nom attrs" + +#: auths/SAML_enterprise/SAML.py:137 +msgid "Fields from where to extract the real name" +msgstr "Champs d'où extraire le nom réel" + +#: auths/SAML_enterprise/SAML.py:160 +msgid "" +"Server certificate should be a valid PEM (PEM certificates starts with -----" +"BEGIN CERTIFICATE-----)" +msgstr "" +"Certificat de serveur doit être un PEM valide (PEM certificats commence par---" +"BEGIN CERTIFICATE---)" + +#: auths/SAML_enterprise/SAML.py:165 +msgid "Invalid server certificate. " +msgstr "Certificat de serveur non valide. " + +#: auths/SAML_enterprise/SAML.py:168 +msgid "" +"Private key should be a valid PEM (PEM private keys starts with -----BEGIN " +"RSA PRIVATE KEY-----" +msgstr "" +"Clé privée doit être un PEM valide (PEM clés privées commence par---BEGIN " +"RSA PRIVATE KEY---" + +#: auths/SAML_enterprise/SAML.py:197 +#, python-brace-format +msgid "Can't fetch url {0}: {1}" +msgstr "Impossible d'extraire url {0}: {1}" + +#: auths/SAML_enterprise/SAML.py:208 +msgid " (obtained from URL)" +msgstr " (obtenu à partir d'URL)" + +#: auths/SAML_enterprise/SAML.py:209 +msgid "XML do not seems valid for IDP Metadata " +msgstr "XML semble pas valide pour les métadonnées de l'IDP " + +#: auths/SAML_enterprise/SAML.py:227 +msgid "Can't access idp metadata" +msgstr "Ne peut pas accéder aux métadonnées de l'idp" #: auths/Sample/SampleAuth.py:71 msgid "Sample Authenticator" @@ -399,24 +664,12 @@ msgstr "Authentificateur SimpleLDAP" msgid "Simple LDAP authenticator" msgstr "Simple authentificateur LDAP" -#: auths/SimpleLDAP/Authenticator.py:302 -msgid "Group not found" -msgstr "Groupe introuvable" - #: auths/SimpleLDAP/Authenticator.py:376 msgid "Ldap group class seems to be incorrect (no group found by that class)" msgstr "" "Classe de groupe LDAP semble incorrect (aucun groupe ne trouvée par cette " "classe)" -#: auths/SimpleLDAP/Authenticator.py:384 -msgid "" -"Ldap user id attribute seems to be incorrect (no user found by that " -"attribute)" -msgstr "" -"Attribut d'id utilisateur LDAP semble incorrect (aucun utilisateur ne " -"trouvée par qui attribut)" - #: auths/SimpleLDAP/Authenticator.py:401 msgid "" "Ldap user class or user id attr is probably wrong (can't find any user with " @@ -634,6 +887,66 @@ msgstr "Charge" msgid "Storage" msgstr "Stockage" +#: dispatchers/wyse_enterprise/views.py:111 +msgid "There are no authenticators available for login" +msgstr "Il n'existe aucun authentificateurs pour connexion" + +#: dispatchers/wyse_enterprise/views.py:124 +#, python-brace-format +msgid "The authenticator {0} is not usable" +msgstr "L'authentificateur {0} n'est pas utilisable" + +#: dispatchers/wyse_enterprise/views.py:131 xmlrpc/auths/AdminAuth.py:168 +msgid "Invalid credentials" +msgstr "Informations d'identification non valides" + +#: dispatchers/wyse_enterprise/views.py:139 +#, python-brace-format +msgid "The domain {0} does not exists" +msgstr "Le domaine {0} n'existe pas" + +#: dispatchers/wyse_enterprise/views.py:200 +msgid "No services available" +msgstr "Aucun service disponible" + +#: dispatchers/wyse_enterprise/views.py:215 +#: dispatchers/wyse_enterprise/views.py:309 +msgid "Invalid session" +msgstr "Session invalide" + +#: dispatchers/wyse_enterprise/views.py:219 +#: dispatchers/wyse_enterprise/views.py:313 +msgid "Invalid authorization" +msgstr "Autorisation non valide" + +#: dispatchers/wyse_enterprise/views.py:230 +#: dispatchers/wyse_enterprise/views.py:319 +msgid "Invalid request" +msgstr "Requête non valide" + +#: dispatchers/wyse_enterprise/views.py:233 +#: dispatchers/wyse_enterprise/views.py:322 +msgid "Invalid credentials used" +msgstr "Informations d'identification non valides utilisées" + +#: dispatchers/wyse_enterprise/views.py:254 +#: dispatchers/wyse_enterprise/views.py:257 web/errors.py:62 +msgid "Service not found" +msgstr "Service introuvable" + +#: dispatchers/wyse_enterprise/views.py:271 web/errors.py:61 +msgid "Transport not found" +msgstr "Transport introuvable" + +#: dispatchers/wyse_enterprise/views.py:275 +#: dispatchers/wyse_enterprise/views.py:282 +#: dispatchers/wyse_enterprise/views.py:287 +#: templates/uds/service_not_ready.html:6 +msgid "Service not ready at this moment. Please, try again in a while." +msgstr "" +"Le service n'est pas prêt à ce moment. S'il vous plaît, essayez à nouveau de " +"temps en temps." + #: osmanagers/LinuxOsManager/LinuxOsManager.py:45 msgid "Linux OS Manager" msgstr "Gestionnaire de système d'exploitation Linux" @@ -686,6 +999,8 @@ msgstr "" #: osmanagers/WindowsOsManager/WinDomainOsManager.py:32 #: transports/HTML5RDP/HTML5RDP.py:66 transports/RDP/RDPTransport.py:61 #: transports/RDP/TSRDPTransport.py:65 +#: transports/RGS-enterprise/RGSTransport.py:44 +#: transports/RGS-enterprise/TRGSTransport.py:49 msgid "Domain" msgstr "Domaine" @@ -835,6 +1150,205 @@ msgstr "" "Acteur de l'UDS pour machines windows (Important!! Nécessite le .net " "framework 3.5 SP1)" +#: services/HyperV_enterprise/HyperVClusterLinkedService.py:51 +msgid "HyperV Cluster Linked Clone (Experimental)" +msgstr "Cluster HyperV lié Clone (expérimental)" + +#: services/HyperV_enterprise/HyperVClusterLinkedService.py:55 +#: services/HyperV_enterprise/HyperVLinkedService.py:58 +msgid "Hyper Services based on templates and differential disks (experimental)" +msgstr "Hyper Services basés sur des modèles et des disques différentiels (expérimentales)" + +#: services/HyperV_enterprise/HyperVClusterLinkedService.py:72 +#: services/HyperV_enterprise/HyperVLinkedService.py:75 +#: services/OVirt/OVirtLinkedService.py:77 +#: services/Vmware_enterprise/VCLinkedCloneService.py:72 +msgid "Number of desired machines to keep running waiting for a user" +msgstr "Nombre de machines désirés de courir d'attente pour un utilisateur." + +#: services/HyperV_enterprise/HyperVClusterLinkedService.py:78 +#: services/HyperV_enterprise/HyperVLinkedService.py:81 +#: services/OVirt/OVirtLinkedService.py:83 +#: services/Vmware_enterprise/VCLinkedCloneService.py:74 +msgid "Number of desired machines to keep suspended waiting for use" +msgstr "" +"Nombre de machines désirés pour garder suspendu en attente pour utilisation" + +#: services/HyperV_enterprise/HyperVClusterLinkedService.py:94 +#: services/HyperV_enterprise/HyperVLinkedService.py:97 +#: services/OVirt/OVirtLinkedService.py:99 +#: services/Vmware_enterprise/VCLinkedCloneService.py:50 +msgid "Base Machine" +msgstr "Machine de base" + +#: services/HyperV_enterprise/HyperVClusterLinkedService.py:94 +#: services/HyperV_enterprise/HyperVLinkedService.py:97 +#: services/OVirt/OVirtLinkedService.py:99 +msgid "Service base machine" +msgstr "Machine de base de service" + +#: services/HyperV_enterprise/HyperVClusterLinkedService.py:95 +#: services/HyperV_enterprise/HyperVLinkedService.py:98 +#: services/Vmware_enterprise/VCLinkedCloneService.py:38 +msgid "Network" +msgstr "Réseau" + +#: services/HyperV_enterprise/HyperVClusterLinkedService.py:96 +#: services/HyperV_enterprise/HyperVLinkedService.py:99 +#: services/Vmware_enterprise/VCLinkedCloneService.py:39 +msgid "" +"If more than 1 interface is found in machine, use one on this network as main" +msgstr "" +"Si plus d'une interface se trouve dans la machine, utiliser un sur ce réseau comme principal" + +#: services/HyperV_enterprise/HyperVClusterLinkedService.py:98 +#: services/HyperV_enterprise/HyperVLinkedService.py:101 +#: services/OVirt/OVirtLinkedService.py:112 +#: services/Vmware_enterprise/VCLinkedCloneService.py:51 +msgid "Memory (Mb)" +msgstr "Mémoire (Mb)" + +#: services/HyperV_enterprise/HyperVClusterLinkedService.py:99 +#: services/HyperV_enterprise/HyperVLinkedService.py:102 +#: services/Vmware_enterprise/VCLinkedCloneService.py:52 +msgid "Memory for machines deployed from this service" +msgstr "Mémoire pour ordinateurs déployés de ce service" + +#: services/HyperV_enterprise/HyperVClusterLinkedService.py:100 +#: services/HyperV_enterprise/HyperVLinkedService.py:103 +msgid "Datastore Drives" +msgstr "Lecteurs de magasin de données" + +#: services/HyperV_enterprise/HyperVClusterLinkedService.py:101 +#: services/HyperV_enterprise/HyperVLinkedService.py:104 +msgid "Datastores where to put incrementals & publications" +msgstr "Entrepôts de données où mettre les sauvegardes incrémentielles & publications" + +#: services/HyperV_enterprise/HyperVClusterLinkedService.py:102 +#: services/HyperV_enterprise/HyperVLinkedService.py:105 +#: services/OVirt/OVirtLinkedService.py:118 +#: services/Vmware_enterprise/VCLinkedCloneService.py:55 +msgid "Machine Names" +msgstr "Noms de machine" + +#: services/HyperV_enterprise/HyperVClusterLinkedService.py:102 +#: services/HyperV_enterprise/HyperVLinkedService.py:105 +#: services/Vmware_enterprise/VCLinkedCloneService.py:55 +msgid "Base name for clones from this machine" +msgstr "Nom de base des clones de cette machine" + +#: services/HyperV_enterprise/HyperVClusterLinkedService.py:103 +#: services/HyperV_enterprise/HyperVLinkedService.py:106 +#: services/OVirt/OVirtLinkedService.py:119 +#: services/Vmware_enterprise/VCLinkedCloneService.py:56 +msgid "Name Length" +msgstr "Longueur du nom" + +#: services/HyperV_enterprise/HyperVClusterLinkedService.py:104 +#: services/HyperV_enterprise/HyperVLinkedService.py:107 +#: services/OVirt/OVirtLinkedService.py:120 +#: services/Vmware_enterprise/VCLinkedCloneService.py:57 +msgid "Length of numeric part for the names of this machines (betwen 3 and 6" +msgstr "" +"Longueur de la partie numérique pour les noms de ces machines (images 3 et 6" + +#: services/HyperV_enterprise/HyperVClusterLinkedService.py:116 +#: services/HyperV_enterprise/HyperVLinkedService.py:119 +#: services/OVirt/OVirtLinkedService.py:143 +#: services/Vmware_enterprise/VCLinkedCloneService.py:95 +msgid "The length of basename plus length must not be greater than 15" +msgstr "" +"La longueur du nom de base plus la longueur ne doit pas être supérieure à 15" + +#: services/HyperV_enterprise/HyperVClusterLinkedService.py:118 +#: services/HyperV_enterprise/HyperVLinkedService.py:121 +#: services/OVirt/OVirtLinkedService.py:145 +#: services/Vmware_enterprise/VCLinkedCloneService.py:97 +msgid "The machine name can't be only numbers" +msgstr "Nom de l'ordinateur ne peut pas être uniquement des nombres" + +#: services/HyperV_enterprise/HyperVClusterProvider.py:64 +msgid "HyperV Cluster Provider" +msgstr "Fournisseur de Cluster HyperV" + +#: services/HyperV_enterprise/HyperVClusterProvider.py:68 +msgid "HyperV Cluster Service Provider" +msgstr "Fournisseur de Service de Cluster HyperV" + +#: services/HyperV_enterprise/HyperVClusterProvider.py:89 +#: services/HyperV_enterprise/HyperVProvider.py:81 +msgid "HyperV Server IP or Hostname (must enable first WSMAN access)" +msgstr "HyperV serveur IP ou nom d'hôte (doit permettre l'accès WSMAN première)" + +#: services/HyperV_enterprise/HyperVClusterProvider.py:90 +#: services/HyperV_enterprise/HyperVProvider.py:82 +msgid "WSMan Port (normally 5985)" +msgstr "WSMan Port (normalement 5985)" + +#: services/HyperV_enterprise/HyperVClusterProvider.py:91 +#: services/HyperV_enterprise/HyperVProvider.py:83 +msgid "User with valid privileges on HyperV Server" +msgstr "Utilisateur avec des privilèges valides sur serveur HyperV" + +#: services/HyperV_enterprise/HyperVClusterProvider.py:92 +#: services/HyperV_enterprise/HyperVProvider.py:84 +msgid "Password of the user of HyperV" +msgstr "Mot de passe de l'utilisateur de HyperV" + +#: services/HyperV_enterprise/HyperVClusterProvider.py:93 +#: services/HyperV_enterprise/HyperVProvider.py:85 +msgid "Timeout in seconds of connection to HyperV" +msgstr "Délai d'attente en secondes de connexion pour HyperV" + +#: services/HyperV_enterprise/HyperVClusterProvider.py:94 +#: services/HyperV_enterprise/HyperVProvider.py:86 +#: services/OVirt/OVirtProvider.py:96 +#: services/Vmware_enterprise/ServiceProviderVC.py:33 +msgid "Macs range" +msgstr "Gamme Mac" + +#: services/HyperV_enterprise/HyperVClusterProvider.py:95 +#: services/HyperV_enterprise/HyperVProvider.py:87 +#: services/OVirt/OVirtProvider.py:97 +msgid "Range of valids macs for created machines" +msgstr "Gamme de Mac valides pour les machines créés" + +#: services/HyperV_enterprise/HyperVClusterProvider.py:132 +msgid "The selected server is not a cluster" +msgstr "Le serveur sélectionné n'est pas un cluster" + +#: services/HyperV_enterprise/HyperVClusterProvider.py:299 +#: services/HyperV_enterprise/HyperVProvider.py:249 +#: services/OVirt/OVirtProvider.py:399 +msgid "Connection test successful" +msgstr "Test de connexion réussie" + +#: services/HyperV_enterprise/HyperVClusterProvider.py:300 +#: services/HyperV_enterprise/HyperVProvider.py:250 +#: services/OVirt/OVirtProvider.py:400 +#: services/Vmware_enterprise/ServiceProviderVC.py:120 +msgid "Connection failed. Check connection params" +msgstr "Échec de la connexion. Vérifiez la connexion params" + +#: services/HyperV_enterprise/HyperVClusterPublication.py:97 +#: services/HyperV_enterprise/HyperVPublication.py:96 +#: services/OVirt/OVirtPublication.py:85 +#, python-brace-format +msgid "UDS pub for {0} at {1}" +msgstr "Pub UDS {0} sur {1}" + +#: services/HyperV_enterprise/HyperVLinkedService.py:54 +msgid "HyperV Linked Clone (Experimental)" +msgstr "HyperV Clone lié (expérimental)" + +#: services/HyperV_enterprise/HyperVProvider.py:62 +msgid "HyperV Platform Provider" +msgstr "Fournisseur de plates-formes HyperV" + +#: services/HyperV_enterprise/HyperVProvider.py:66 +msgid "HyperV platform service provider" +msgstr "Fournisseur de services de plate-forme HyperV" + #: services/OVirt/OVirtLinkedService.py:56 msgid "oVirt Linked Clone (Experimental)" msgstr "oVirt Linked Clone (expérimental)" @@ -843,23 +1357,6 @@ msgstr "oVirt Linked Clone (expérimental)" msgid "oVirt Services based on templates and COW (experimental)" msgstr "oVirt Services basés sur les modèles et la vache (expérimentale)" -#: services/OVirt/OVirtLinkedService.py:77 -msgid "Number of desired machines to keep running waiting for a user" -msgstr "Nombre de machines désirés de courir d'attente pour un utilisateur." - -#: services/OVirt/OVirtLinkedService.py:83 -msgid "Number of desired machines to keep suspended waiting for use" -msgstr "" -"Nombre de machines désirés pour garder suspendu en attente pour utilisation" - -#: services/OVirt/OVirtLinkedService.py:99 -msgid "Base Machine" -msgstr "Machine de base" - -#: services/OVirt/OVirtLinkedService.py:99 -msgid "Service base machine" -msgstr "Machine de base de service" - #: services/OVirt/OVirtLinkedService.py:100 msgid "Cluster" msgstr "Cluster" @@ -878,10 +1375,6 @@ msgstr "" "Domaine de magasin de données où les publier et de mettre des sauvegardes " "incrémentales" -#: services/OVirt/OVirtLinkedService.py:112 -msgid "Memory (Mb)" -msgstr "Mémoire (Mb)" - #: services/OVirt/OVirtLinkedService.py:113 msgid "Memory assigned to machines" msgstr "Mémoire attribuée aux machines" @@ -894,19 +1387,6 @@ msgstr "Mémoire garantie (Mb)" msgid "Physical memory guaranteed to machines" msgstr "Mémoire physique garantie aux machines" -#: services/OVirt/OVirtLinkedService.py:118 -msgid "Machine Names" -msgstr "Noms de machine" - -#: services/OVirt/OVirtLinkedService.py:119 -msgid "Name Length" -msgstr "Longueur du nom" - -#: services/OVirt/OVirtLinkedService.py:120 -msgid "Length of numeric part for the names of this machines (betwen 3 and 6" -msgstr "" -"Longueur de la partie numérique pour les noms de ces machines (images 3 et 6" - #: services/OVirt/OVirtLinkedService.py:122 msgid "Display" msgstr "Affichage" @@ -915,15 +1395,6 @@ msgstr "Affichage" msgid "Display type (only for administration pourposses)" msgstr "Type d'affichage (uniquement pour l'administration pourposses)" -#: services/OVirt/OVirtLinkedService.py:143 -msgid "The length of basename plus length must not be greater than 15" -msgstr "" -"La longueur du nom de base plus la longueur ne doit pas être supérieure à 15" - -#: services/OVirt/OVirtLinkedService.py:145 -msgid "The machine name can't be only numbers" -msgstr "Nom de l'ordinateur ne peut pas être uniquement des nombres" - #: services/OVirt/OVirtProvider.py:73 msgid "oVirt Platform Provider" msgstr "oVirt fournisseur de plate-forme" @@ -947,30 +1418,10 @@ msgid "Password of the user of oVirt" msgstr "Mot de passe de l'utilisateur d'oVirt" #: services/OVirt/OVirtProvider.py:95 +#: services/Vmware_enterprise/ServiceProviderVC.py:32 msgid "Timeout in seconds of connection to VC" msgstr "Délai en secondes de connexion à VC" -#: services/OVirt/OVirtProvider.py:96 -msgid "Macs range" -msgstr "Gamme Mac" - -#: services/OVirt/OVirtProvider.py:97 -msgid "Range of valids macs for created machines" -msgstr "Gamme de Mac valides pour les machines créés" - -#: services/OVirt/OVirtProvider.py:399 -msgid "Connection test successful" -msgstr "Test de connexion réussie" - -#: services/OVirt/OVirtProvider.py:400 -msgid "Connection failed. Check connection params" -msgstr "Échec de la connexion. Vérifiez la connexion params" - -#: services/OVirt/OVirtPublication.py:85 -#, python-brace-format -msgid "UDS pub for {0} at {1}" -msgstr "Pub UDS {0} sur {1}" - #: services/PhysicalMachines/IPMachineDeployed.py:57 msgid "IP " msgstr "IP " @@ -1087,6 +1538,121 @@ msgstr "Mémoire cache L2 de faux éléments" msgid "List of names" msgstr "Liste des noms" +#: services/Vmware_enterprise/Helpers.py:72 +msgid "Local" +msgstr "Local" + +#: services/Vmware_enterprise/Helpers.py:74 +msgid "Remote" +msgstr "Distance" + +#: services/Vmware_enterprise/PublicationVC.py:37 +msgid "Publication" +msgstr "Publication" + +#: services/Vmware_enterprise/PublicationVC.py:38 +#, python-brace-format +msgid "UDS Publication for {0} created at {1}" +msgstr "Publication UDS {0} créé à {1}" + +#: services/Vmware_enterprise/ServiceProviderVC.py:28 +msgid "VMWare VC Server IP or Hostname" +msgstr "VMWare Server VC IP ou nom d'hôte" + +#: services/Vmware_enterprise/ServiceProviderVC.py:29 +msgid "VMWare VC Server Port (usually 443)" +msgstr "Port du serveur VMWare VC (habituellement 443)" + +#: services/Vmware_enterprise/ServiceProviderVC.py:30 +msgid "User with valid privileges on VC" +msgstr "Utilisateur avec des privilèges valides sur VC" + +#: services/Vmware_enterprise/ServiceProviderVC.py:31 +msgid "Password of the user of the VC" +msgstr "Mot de passe de l'utilisateur de la CV" + +#: services/Vmware_enterprise/ServiceProviderVC.py:34 +msgid "" +"Range of valids macs for created machines. Must be inside " +"00:50:56:00:00:00-00:50:56:3F:FF:FF" +msgstr "" +"Gamme de valids Mac pour machines créées. Doit être à l'intérieur " +"00:50:56:00:00:00-00:50:56:3F:FF:FF" + +#: services/Vmware_enterprise/ServiceProviderVC.py:39 +msgid "VMWare Virtual Center Provider" +msgstr "VMWare Virtual Center fournisseur" + +#: services/Vmware_enterprise/ServiceProviderVC.py:41 +msgid "Provides connection to Virtual Center Services" +msgstr "Fournit la connexion à des Services de centre virtuel" + +#: services/Vmware_enterprise/ServiceProviderVC.py:110 +msgid "Error testing connection" +msgstr "Erreur de connexion test" + +#: services/Vmware_enterprise/ServiceProviderVC.py:113 +msgid "VmwareVC Provider: " +msgstr "VmwareVC fournisseur : " + +#: services/Vmware_enterprise/ServiceProviderVC.py:119 +msgid "Connection params ok" +msgstr "Connexion params ok" + +#: services/Vmware_enterprise/VCLinkedCloneService.py:30 +msgid "Datacenter" +msgstr "Datacenter" + +#: services/Vmware_enterprise/VCLinkedCloneService.py:36 +msgid "Datacenter containing base machine" +msgstr "Machine de base contenant Datacenter" + +#: services/Vmware_enterprise/VCLinkedCloneService.py:40 +msgid "Pub. Resource Pool" +msgstr "Pub. Liste des ressources" + +#: services/Vmware_enterprise/VCLinkedCloneService.py:40 +msgid "Resource Pool where deploy clones" +msgstr "Liste des ressources où déployer des clones" + +#: services/Vmware_enterprise/VCLinkedCloneService.py:41 +msgid "Clones Folder" +msgstr "Dossier de clones" + +#: services/Vmware_enterprise/VCLinkedCloneService.py:41 +msgid "Folder where deploy clones" +msgstr "Dossier où déployer des clones" + +#: services/Vmware_enterprise/VCLinkedCloneService.py:42 +msgid "Resource Pool" +msgstr "Liste des ressources" + +#: services/Vmware_enterprise/VCLinkedCloneService.py:48 +msgid "Resource Pool containing base machine" +msgstr "Machine de base contenant de ressource Pool" + +#: services/Vmware_enterprise/VCLinkedCloneService.py:50 +msgid "Base machine for this service" +msgstr "Machine de base pour ce service" + +#: services/Vmware_enterprise/VCLinkedCloneService.py:53 +msgid "Datastores" +msgstr "Entrepôts de données" + +#: services/Vmware_enterprise/VCLinkedCloneService.py:54 +msgid "Datastores where to put incrementals" +msgstr "Entrepôts de données où mettre des sauvegardes incrémentales" + +#: services/Vmware_enterprise/VCLinkedCloneService.py:64 +msgid "VMWare Linked clone base" +msgstr "Base de clone lié VMWare" + +#: services/Vmware_enterprise/VCLinkedCloneService.py:66 +msgid "" +"This service provides access to Linked Clones machines on a Virtual Center" +msgstr "" +"Ce service donne accès aux machines de Clones liés sur un Virtual Center" + #: templates/404.html:3 templates/500.html:3 msgid "Page not found" msgstr "Page non trouvée" @@ -1147,10 +1713,6 @@ msgstr "IP" msgid "Transports" msgstr "Transports" -#: templates/uds/internal_page.html:28 -msgid "User" -msgstr "Utilisateur" - #: templates/uds/internal_page.html:34 templates/uds/prefs.html:12 #: templates/uds/html5/snippets/navbar.html:39 msgid "Preferences" @@ -1188,12 +1750,6 @@ msgstr "Préférences de l'utilisateur UDS" msgid "Save Preferences" msgstr "Enregistrer les préférences" -#: templates/uds/service_not_ready.html:6 -msgid "Service not ready at this moment. Please, try again in a while." -msgstr "" -"Le service n'est pas prêt à ce moment. S'il vous plaît, essayez à nouveau de " -"temps en temps." - #: templates/uds/admin/snippets/navbar.html:6 #: templates/uds/html5/snippets/navbar.html:6 msgid "toggle navigation" @@ -1209,6 +1765,7 @@ msgid "Authenticators" msgstr "Authentificateurs" #: templates/uds/admin/snippets/navbar.html:21 +#: templates/uds/admin/tmpl/connectivity.html:4 msgid "Connectivity" msgstr "Connectivité" @@ -1220,11 +1777,11 @@ msgstr "Services déployés" msgid "Configuration" msgstr "Configuration" -#: templates/uds/admin/snippets/navbar.html:56 +#: templates/uds/admin/snippets/navbar.html:57 msgid "Exit dashboard" msgstr "Tableau de bord de sortie" -#: templates/uds/admin/snippets/navbar.html:57 +#: templates/uds/admin/snippets/navbar.html:58 #: templates/uds/html5/snippets/navbar.html:47 msgid "logout" msgstr "logout" @@ -1233,6 +1790,7 @@ msgstr "logout" msgid "administration of authenticators" msgstr "administration des authentificateurs" +#: templates/uds/admin/tmpl/connectivity.html:4 #: templates/uds/admin/tmpl/dashboard.html:4 msgid "overview" msgstr "vue d'ensemble" @@ -1367,13 +1925,19 @@ msgstr "" #: transports/HTML5RDP/HTML5RDP.py:63 transports/NX/NXTransport.py:60 #: transports/NX/TSNXTransport.py:65 transports/RDP/RDPTransport.py:58 -#: transports/RDP/TSRDPTransport.py:62 transports/TSNX/TSNXTransport.py:65 +#: transports/RDP/TSRDPTransport.py:62 +#: transports/RGS-enterprise/RGSTransport.py:41 +#: transports/RGS-enterprise/TRGSTransport.py:46 +#: transports/TSNX/TSNXTransport.py:65 msgid "Empty creds" msgstr "Références vide" #: transports/HTML5RDP/HTML5RDP.py:63 transports/NX/NXTransport.py:60 #: transports/NX/TSNXTransport.py:65 transports/RDP/RDPTransport.py:58 -#: transports/RDP/TSRDPTransport.py:62 transports/TSNX/TSNXTransport.py:65 +#: transports/RDP/TSRDPTransport.py:62 +#: transports/RGS-enterprise/RGSTransport.py:41 +#: transports/RGS-enterprise/TRGSTransport.py:46 +#: 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 " @@ -1381,7 +1945,10 @@ msgstr "" #: transports/HTML5RDP/HTML5RDP.py:64 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 +#: transports/RDP/TSRDPTransport.py:63 +#: transports/RGS-enterprise/RGSTransport.py:42 +#: transports/RGS-enterprise/TRGSTransport.py:47 +#: 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 " @@ -1389,7 +1956,10 @@ msgstr "" #: transports/HTML5RDP/HTML5RDP.py:65 transports/NX/NXTransport.py:62 #: transports/NX/TSNXTransport.py:67 transports/RDP/RDPTransport.py:60 -#: transports/RDP/TSRDPTransport.py:64 transports/TSNX/TSNXTransport.py:67 +#: transports/RDP/TSRDPTransport.py:64 +#: transports/RGS-enterprise/RGSTransport.py:43 +#: transports/RGS-enterprise/TRGSTransport.py:48 +#: 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 " @@ -1397,6 +1967,8 @@ msgstr "" #: transports/HTML5RDP/HTML5RDP.py:66 transports/RDP/RDPTransport.py:61 #: transports/RDP/TSRDPTransport.py:65 +#: transports/RGS-enterprise/RGSTransport.py:44 +#: transports/RGS-enterprise/TRGSTransport.py:49 msgid "" "If not empty, this domain will be always used as credential (used as DOMAIN" "\\user)" @@ -1503,11 +2075,13 @@ msgid "NX Transport for tunneled connection" msgstr "Transport NX pour connexion tunnelée" #: transports/NX/TSNXTransport.py:62 transports/RDP/TSRDPTransport.py:59 +#: transports/RGS-enterprise/TRGSTransport.py:43 #: transports/TSNX/TSNXTransport.py:62 msgid "Tunnel server" msgstr "Serveur de tunnel" #: transports/NX/TSNXTransport.py:62 transports/RDP/TSRDPTransport.py:59 +#: transports/RGS-enterprise/TRGSTransport.py:43 #: transports/TSNX/TSNXTransport.py:62 msgid "" "IP or Hostname of tunnel server send to client device (\"public\" ip) and " @@ -1517,11 +2091,13 @@ msgstr "" "» ip) et port. (utilisez le format de l'hôte : PORT)" #: transports/NX/TSNXTransport.py:63 transports/RDP/TSRDPTransport.py:60 +#: transports/RGS-enterprise/TRGSTransport.py:44 #: 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/RGS-enterprise/TRGSTransport.py:44 #: transports/TSNX/TSNXTransport.py:63 msgid "" "If not empty, this server will be used to check if service is running before " @@ -1532,6 +2108,7 @@ msgstr "" "PORT)" #: transports/NX/TSNXTransport.py:103 transports/RDP/TSRDPTransport.py:75 +#: transports/RGS-enterprise/TRGSTransport.py:71 #: transports/TSNX/TSNXTransport.py:103 msgid "Must use HOST:PORT in Tunnel Server Field" msgstr "Devez utiliser HOST : PORT dans le champ serveur Tunnel" @@ -1635,7 +2212,7 @@ msgstr "Protocole Bureau distant" msgid "In order to use this service, you should first install CoRD." msgstr "Afin d'utiliser ce service, vous devez d'abord installer cordon." -#: transports/RDP/web.py:85 +#: transports/RDP/web.py:85 transports/RGS-enterprise/web.py:83 msgid "You can obtain it from" msgstr "Vous pouvez l'obtenir de" @@ -1643,18 +2220,122 @@ msgstr "Vous pouvez l'obtenir de" msgid "CoRD Website" msgstr "Site Web du cordon" +#: transports/RGS-enterprise/RGSTransport.py:34 +msgid "RGS Transport (direct)" +msgstr "RGS Transport (direct)" + +#: transports/RGS-enterprise/RGSTransport.py:36 +msgid "RGS Transport for direct connection" +msgstr "RGS Transport pour une connexion directe" + +#: transports/RGS-enterprise/RGSTransport.py:45 +#: transports/RGS-enterprise/TRGSTransport.py:50 +msgid "Image quality" +msgstr "Qualité d'image" + +#: transports/RGS-enterprise/RGSTransport.py:46 +#: transports/RGS-enterprise/TRGSTransport.py:51 +msgid "Quality of image codec (0-100)" +msgstr "Qualité du codec d'image (0-100)" + +#: transports/RGS-enterprise/RGSTransport.py:47 +#: transports/RGS-enterprise/TRGSTransport.py:52 +msgid "Adjustable Quality" +msgstr "Qualité réglable" + +#: transports/RGS-enterprise/RGSTransport.py:48 +#: transports/RGS-enterprise/TRGSTransport.py:53 +msgid "If checked, the image quality will be adjustable with bandwidth" +msgstr "S'il est activé, la qualité d'image sera réglable avec bande passante" + +#: transports/RGS-enterprise/RGSTransport.py:49 +#: transports/RGS-enterprise/TRGSTransport.py:54 +msgid "Min. Adjustable Quality" +msgstr "Qualité réglable min." + +#: transports/RGS-enterprise/RGSTransport.py:50 +#: transports/RGS-enterprise/TRGSTransport.py:55 +msgid "" +"The lowest image quality applied to images to maintain the minimum update " +"rate." +msgstr "" +"La qualité d'image le plus bas appliquée aux images de maintenir la mise à jour minimale " +"Ravel" + +#: transports/RGS-enterprise/RGSTransport.py:51 +#: transports/RGS-enterprise/TRGSTransport.py:56 +msgid "Adjustable Frame Rate" +msgstr "Cadence réglable" + +#: transports/RGS-enterprise/RGSTransport.py:52 +#: transports/RGS-enterprise/TRGSTransport.py:57 +msgid "Update rate threshold to begin adjusting image quality" +msgstr "Seuil de taux de mise à jour pour commencer le réglage qualité de l'image" + +#: transports/RGS-enterprise/RGSTransport.py:53 +#: transports/RGS-enterprise/TRGSTransport.py:58 +msgid "Match Local Resolution" +msgstr "Adapter la résolution locale" + +#: transports/RGS-enterprise/RGSTransport.py:54 +#: transports/RGS-enterprise/TRGSTransport.py:59 +msgid "" +"Change the Sender's resolution to match the Receiver's resolution when " +"connecting" +msgstr "" +"Changer la résolution de l'expéditeur pour l'adapter résolution du récepteur lorsque " +"connexion" + +#: transports/RGS-enterprise/RGSTransport.py:55 +#: transports/RGS-enterprise/TRGSTransport.py:60 +msgid "Redirect USB" +msgstr "Redirection USB" + +#: transports/RGS-enterprise/RGSTransport.py:56 +#: transports/RGS-enterprise/TRGSTransport.py:61 +msgid "If checked, the USB will be redirected." +msgstr "Si cochée, l'USB sera redirigé." + +#: transports/RGS-enterprise/RGSTransport.py:57 +#: transports/RGS-enterprise/TRGSTransport.py:62 +msgid "Redirect Audio" +msgstr "Redirection Audio" + +#: transports/RGS-enterprise/RGSTransport.py:58 +#: transports/RGS-enterprise/TRGSTransport.py:63 +msgid "If checked, the Audio will be redirected." +msgstr "Si coché, le son sera redirigé." + +#: transports/RGS-enterprise/RGSTransport.py:59 +#: transports/RGS-enterprise/TRGSTransport.py:64 +msgid "Redirect Mic" +msgstr "Redirection Mic" + +#: transports/RGS-enterprise/RGSTransport.py:60 +#: transports/RGS-enterprise/TRGSTransport.py:65 +msgid "If checked, the Mic will be redirected." +msgstr "Si cochée, le micro sera redirigé." + +#: transports/RGS-enterprise/TRGSTransport.py:36 +msgid "RGS Transport (tunneled)" +msgstr "RGS Transport (tunnel)" + +#: transports/RGS-enterprise/TRGSTransport.py:38 +msgid "RGS Transport for tunneled connection" +msgstr "RGS Transport pour connexion par tunnel" + +#: transports/RGS-enterprise/web.py:82 +msgid "In order to use this service, you should first install RGS Receiver." +msgstr "Pour utiliser ce service, vous devez commencer par installer récepteur RGS." + +#: transports/RGS-enterprise/web.py:83 +msgid "HP Website" +msgstr "Site Web de HP" + #: web/errors.py:60 msgid "Unknown error" msgstr "Erreur inconnue" -#: web/errors.py:61 -msgid "Transport not found" -msgstr "Transport introuvable" - -#: web/errors.py:62 -msgid "Service not found" -msgstr "Service introuvable" - #: web/errors.py:63 xmlrpc/auths/AdminAuth.py:182 #: xmlrpc/auths/AdminAuth.py:188 msgid "Access denied" @@ -1725,10 +2406,6 @@ msgstr "Informations d'identification n'est plus valides" msgid "Administration" msgstr "Administration" -#: xmlrpc/auths/AdminAuth.py:168 -msgid "Invalid credentials" -msgstr "Informations d'identification non valides" - #: xmlrpc/auths/Authenticators.py:107 msgid "Authenticator does not exists" msgstr "Authentificateur n'existe pas" diff --git a/server/src/uds/locale/fr/LC_MESSAGES/djangojs.mo b/server/src/uds/locale/fr/LC_MESSAGES/djangojs.mo index 6e99e4d72354cfab4128d7180aea9242438dad2c..4412a3071aa8167ef8cb955bc240c8b97cea1bb3 100644 GIT binary patch delta 815 zcmZ9JPe@cz6vpq&b4DA}QT#KNrjIl?(J(|3GuYBiI~OfNAw*m#Izu`N;o^a`5F`p; zk*;#5xG-XnAatR&DWbL_NDyHlB5rEo%HOBQjfeNW-@WJF^WF2_{hi!TzU~StoO5HI zb8$EYYvD93gKuCAEL)CpTeuXv6f7tvNl;0o7;|@F*oEaY3 zhJP@@!U@!YG2CQa4O6fYDxZdJ@PV!OT7CdtAwL53A(K!I&)E7aD8G5AeT!wmx$z2# z;fQlv@D2-isZys;j8CBo28{(+$NV{@#Jx1mK{fae^0-A_s#~)BN2mrq8@B=mGWZ6o z;7_Q6JYz`?4a;xC>*T*few6dWXVFylDx+4U&`m3JjGS&DU1l@7g&L7UE~#)cS~sLd z6uQcbP*b`({ay8?(1%W&0t9djrUiAC@(Zc9p szL-v@OS@h!QgJWiXYS`Rou%ejcO)#thpQgv{h|DLvHyJ2PCOAg1^wkp=>Px# delta 811 zcmZ9~KS&%w6vy$|TRqQzIseB0$)QQ1HvT1?Xb~i(rC5lFBtlL>@sNPk1{4%hL|MVc z#zs)mgu_A%5jBNEnm`aF1Vuq4q)CcYDg6HQ72o)8`n|uKA`4pS^kst_c4e35o+Bx^Vs}>s&j_?+@A!XM0I z;2-Ki9#vE@4=b<)m2biZY`5_N%MW8N`PZlyNTW77XXEcs^_EfdRTR3ugMv3fKexY`3krK<^Tp_Zs89ujJ*UKj2~N>h}&Y5J6^ zt)|bfPpwnczSQ&|z2Ec_YH^~R&`Z`3YEOv-5h03*SlHut7W7U|OpLyqPQ6J@&xBL{ lQ0CN6da>4LiI$G8w$@A{`-N9{XU@S!_$oS{`5Ddit^wDEOqBot diff --git a/server/src/uds/locale/fr/LC_MESSAGES/djangojs.po b/server/src/uds/locale/fr/LC_MESSAGES/djangojs.po index 4096fcc08..098fc6f3e 100644 --- a/server/src/uds/locale/fr/LC_MESSAGES/djangojs.po +++ b/server/src/uds/locale/fr/LC_MESSAGES/djangojs.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-11-17 04:21+0100\n" +"POT-Creation-Date: 2013-11-20 04:05+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -18,14 +18,10 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: static/adm/js/gui-elements.js:7 +#: static/adm/js/gui-elements.js:33 msgid "Service Providers" msgstr "Fournisseurs de services" -#: 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" @@ -70,19 +66,19 @@ msgstr "Prochaine" msgid "Previous" msgstr "Précédent" -#: static/adm/js/gui.js:80 +#: static/adm/js/gui.js:75 msgid "Deployed services" msgstr "Services déployés" -#: static/adm/js/gui.js:349 +#: static/adm/js/gui.js:360 msgid "Edit" msgstr "Edit" -#: static/adm/js/gui.js:358 +#: static/adm/js/gui.js:369 msgid "Delete" msgstr "Supprimer" -#: static/adm/js/gui.js:367 +#: static/adm/js/gui.js:378 msgid "Refresh" msgstr "Actualisation" @@ -161,3 +157,7 @@ msgstr "Novembre" #: static/adm/js/strftime.js:35 msgid "December" msgstr "Décembre" + +#: static/adm/js/tools.js:46 +msgid "Just a moment..." +msgstr "Un instant..." diff --git a/server/src/uds/locale/it/LC_MESSAGES/django.mo b/server/src/uds/locale/it/LC_MESSAGES/django.mo index 4af52991c4f64de1038d1c06544bce502c4e2e94..a7d0afe7cf83b0e9442c3da4dcb6aeb53744d33e 100644 GIT binary patch literal 46368 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 THtCX`5P9$-r)2#CABz4zdLG;g delta 9338 zcmYk>34Bgh{>SnAL_!cj5IYfx5@IJr5D_6ltPwleRD?X5#8OKid+o|Wb&6WrDuyYK zsrGLx-IP-8DAUfrR9l^nnyPl%`J>GL^L_5=yn4qk?{m(*_uO-S=iHmj%#K?@d)Ec| zu0;fIayV9b9H#-6g*i^cAjkQjj#?cjxryUcz+TpL>kuqY`zQ>-iC6_E+4E%>PkkQh zx_zkY4q-SRMIPaE-lb5ThU*xOcQFQQQeiAkSJVw@s0Um!8YEJ%ZP`FP+D2B5R?XWf~rRi7+voQ{H zu{*9oZLagE3EV?~(y%u!K@H$6w!yDa1FqSU{A&QQ3|ni|6}3hKurB7I z1~MPDCstua+>7eKk6MDaF$y188!&xMq&sSJdQnTf5cQU=$4Yq6M?ooi19ih`45S8A zsozIEuqV^4jOiGLS*Q+kF$7Djvr(J%Dbxejpzhy-%J42*-;e6g_h$;~=rpRMkFW|} zwe2@i7ygXeRG!wZwNVd27S(36g0BSn2(>M zHeE^^#~F&Vu`8ZOme~nu%j~fY>NQ-7Nq8Eyc^{!RX?M~&3K!rI{0y}xTD9lRz$w^W z@Bh~n)NynN_X9Kl+31cJ)$y}91~20vY}?UI@dDJ0*P$k`8LQ(9sDT_pt@RJ6%vE7l zHLxk_bxgoPdjAJgP-=FdcJpq`z>^q`mDpig^SW3Io1u1dl653%0A;A9nvace1y;jX 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\n" "Language-Team: LANGUAGE \n" @@ -18,23 +18,23 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: REST/methods/authenticators.py:73 +#: REST/methods/authenticators.py:80 msgid "Current authenticators" msgstr "Autenticatori correnti" -#: REST/methods/authenticators.py:75 REST/methods/networks.py:68 +#: REST/methods/authenticators.py:82 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:76 REST/methods/osmanagers.py:72 +#: REST/methods/authenticators.py:83 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:77 +#: REST/methods/authenticators.py:84 msgid "Users" msgstr "Utenti" @@ -90,14 +90,263 @@ msgstr "stato" msgid "Last access" msgstr "Ultimo accesso" -#: admin/views.py:55 admin/views.py:63 admin/views.py:76 web/views.py:422 +#: admin/views.py:55 admin/views.py:63 admin/views.py:77 web/views.py:422 msgid "Forbidden" msgstr "Vietato" -#: admin/views.py:69 +#: admin/views.py:70 msgid "requested a template that do not exists" msgstr "richiesto da un modello che non esiste" +#: auths/ActiveDirectory_enterprise/Authenticator.py:29 +#: auths/EDirectory_enterprise/Authenticator.py:60 +#: auths/RegexLdap/Authenticator.py:49 auths/SimpleLDAP/Authenticator.py:49 +#: services/HyperV_enterprise/HyperVClusterProvider.py:89 +#: services/HyperV_enterprise/HyperVProvider.py:81 +#: services/OVirt/OVirtProvider.py:92 +#: services/Vmware_enterprise/ServiceProviderVC.py:28 +msgid "Host" +msgstr "Host" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:29 +msgid "Active Directory Server IP or Hostname" +msgstr "Active Directory Server IP o l'Hostname" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:30 +#: auths/EDirectory_enterprise/Authenticator.py:62 +#: auths/RegexLdap/Authenticator.py:51 auths/SimpleLDAP/Authenticator.py:51 +msgid "Use SSL" +msgstr "Utilizzo SSL" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:30 +msgid "If checked, will use a ssl connection to Active Directory" +msgstr "Se selezionata, utilizzerà una connessione ssl per Active Directory" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:31 +msgid "Compatibility" +msgstr "Compatibilità" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:31 +msgid "Compatibility of AD connection (Usually windows 2000 and later)" +msgstr "Compatibilità di connessione AD (solitamente windows 2000 e versioni successive)" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:33 +#: auths/RegexLdap/Authenticator.py:52 auths/SimpleLDAP/Authenticator.py:52 +msgid "Ldap User" +msgstr "Utente LDAP" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:33 +msgid "" +"Username with read privileges on the base selected (use USER@DOMAIN.DOM form " +"for this)" +msgstr "" +"Nome utente con privilegi di lettura sulla base selezionato (uso USER@DOMAIN.Forma di DOM " +"per questo)" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:34 +#: auths/ActiveDirectory_enterprise/Authenticator.py:52 +#: auths/EDirectory_enterprise/Authenticator.py:64 +#: auths/RegexLdap/Authenticator.py:53 auths/RegexLdap/Authenticator.py:76 +#: auths/SimpleLDAP/Authenticator.py:53 auths/SimpleLDAP/Authenticator.py:77 +#: core/auths/BaseAuthenticator.py:136 +#: osmanagers/WindowsOsManager/WinDomainOsManager.py:34 +#: osmanagers/WindowsOsManager/WinRandomPassOsManager.py:30 +#: services/HyperV_enterprise/HyperVClusterProvider.py:92 +#: services/HyperV_enterprise/HyperVProvider.py:84 +#: services/OVirt/OVirtProvider.py:94 services/Sample/SampleService.py:131 +#: services/Vmware_enterprise/ServiceProviderVC.py:31 +#: transports/HTML5RDP/HTML5RDP.py:65 transports/NX/NXTransport.py:62 +#: transports/NX/TSNXTransport.py:67 transports/RDP/RDPTransport.py:60 +#: transports/RDP/TSRDPTransport.py:64 +#: transports/RGS-enterprise/RGSTransport.py:43 +#: transports/RGS-enterprise/TRGSTransport.py:48 +#: transports/TSNX/TSNXTransport.py:67 web/forms/LoginForm.py:70 +msgid "Password" +msgstr "Password" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:34 +#: auths/EDirectory_enterprise/Authenticator.py:64 +#: auths/RegexLdap/Authenticator.py:53 auths/SimpleLDAP/Authenticator.py:53 +msgid "Password of the ldap user" +msgstr "Password dell'utente ldap" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:35 +#: auths/EDirectory_enterprise/Authenticator.py:65 +#: auths/RegexLdap/Authenticator.py:54 auths/SimpleLDAP/Authenticator.py:54 +#: services/HyperV_enterprise/HyperVClusterProvider.py:93 +#: services/HyperV_enterprise/HyperVProvider.py:85 +#: services/OVirt/OVirtProvider.py:95 +#: services/Vmware_enterprise/ServiceProviderVC.py:32 +msgid "Timeout" +msgstr "Timeout" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:35 +#: auths/EDirectory_enterprise/Authenticator.py:65 +#: auths/RegexLdap/Authenticator.py:54 auths/SimpleLDAP/Authenticator.py:54 +msgid "Timeout in seconds of connection to LDAP" +msgstr "Timeout in secondi di connessione LDAP" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:37 +msgid "Active Directory Authenticator" +msgstr "Autenticatore di Active Directory" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:39 +msgid "Authenticate against Active Directory" +msgstr "L'autenticazione in Active Directory" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:48 +#: auths/EDirectory_enterprise/Authenticator.py:77 +#: auths/RegexLdap/Authenticator.py:72 auths/SimpleLDAP/Authenticator.py:73 +#: services/HyperV_enterprise/HyperVClusterProvider.py:91 +#: services/HyperV_enterprise/HyperVProvider.py:83 +#: services/OVirt/OVirtProvider.py:93 +#: services/Vmware_enterprise/ServiceProviderVC.py:30 +#: transports/HTML5RDP/HTML5RDP.py:64 transports/NX/NXTransport.py:61 +#: transports/NX/TSNXTransport.py:66 transports/RDP/RDPTransport.py:59 +#: transports/RDP/TSRDPTransport.py:63 +#: transports/RGS-enterprise/RGSTransport.py:42 +#: transports/RGS-enterprise/TRGSTransport.py:47 +#: transports/TSNX/TSNXTransport.py:66 web/forms/LoginForm.py:69 +msgid "Username" +msgstr "Nome utente" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:50 +#: auths/EDirectory_enterprise/Authenticator.py:79 +#: auths/RegexLdap/Authenticator.py:74 auths/SAML_enterprise/SAML.py:114 +#: auths/SimpleLDAP/Authenticator.py:75 +msgid "Group" +msgstr "Gruppo" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:67 +#: auths/ActiveDirectory_enterprise/Authenticator.py:442 +msgid "Must specify the username in the form USERNAME@DOMAIN.DOM" +msgstr "Deve specificare il nome utente nella forma USERNAME@DOMAIN.DOM" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:164 +#: auths/EDirectory_enterprise/Authenticator.py:123 +#: auths/RegexLdap/Authenticator.py:226 auths/SimpleLDAP/Authenticator.py:158 +msgid "Ldap connection error: " +msgstr "Errore di connessione LDAP: " + +#: auths/ActiveDirectory_enterprise/Authenticator.py:344 +#: auths/ActiveDirectory_enterprise/Authenticator.py:390 +#: auths/EDirectory_enterprise/Authenticator.py:243 +#: auths/EDirectory_enterprise/Authenticator.py:286 +#: auths/RegexLdap/Authenticator.py:303 auths/RegexLdap/Authenticator.py:346 +#: auths/SimpleLDAP/Authenticator.py:269 auths/SimpleLDAP/Authenticator.py:313 +msgid "Username not found" +msgstr "Nome utente non trovato" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:377 +#: auths/SimpleLDAP/Authenticator.py:302 +msgid "Group not found" +msgstr "Gruppo non trovato" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:410 +#: auths/ActiveDirectory_enterprise/Authenticator.py:428 +#: auths/EDirectory_enterprise/Authenticator.py:303 +#: auths/RegexLdap/Authenticator.py:367 auths/SimpleLDAP/Authenticator.py:328 +#: auths/SimpleLDAP/Authenticator.py:342 +msgid "Too many results, be more specific" +msgstr "Troppi risultati, essere più specifico" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:451 +msgid "Domain seems to be incorrect, please check it" +msgstr "Dominio sembra essere corretto, si prega di controllare" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:456 +msgid "Ldap does not seem an Active Directory (do not have user objects)" +msgstr "LDAP non sembra un'Active Directory (non hanno oggetti utente)" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:464 +msgid "Ldap does not seem an Active Directory (no not have group objects)" +msgstr "LDAP non sembra un'Active Directory (no, non sono oggetti di gruppo)" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:472 +msgid "" +"Ldap does not seem an Active Directory (do not have any user nor groups)" +msgstr "" +"LDAP non sembra un'Active Directory (non hanno alcun utente né gruppi)" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:477 +#: auths/EDirectory_enterprise/Authenticator.py:358 +#: auths/RegexLdap/Authenticator.py:428 auths/SimpleLDAP/Authenticator.py:423 +msgid "Connection params seem correct, test was succesfully executed" +msgstr "" +"Connessione params sembrano corretti, prova era stata correttamente eseguita" + +#: auths/EDirectory_enterprise/Authenticator.py:60 +msgid "EDirectory Server IP or Hostname" +msgstr "EDirectory Server IP o l'Hostname" + +#: auths/EDirectory_enterprise/Authenticator.py:61 +#: auths/RegexLdap/Authenticator.py:50 auths/SimpleLDAP/Authenticator.py:50 +#: services/HyperV_enterprise/HyperVClusterProvider.py:90 +#: services/HyperV_enterprise/HyperVProvider.py:82 +#: services/Vmware_enterprise/ServiceProviderVC.py:29 +msgid "Port" +msgstr "Porta" + +#: auths/EDirectory_enterprise/Authenticator.py:61 +#: auths/RegexLdap/Authenticator.py:50 auths/SimpleLDAP/Authenticator.py:50 +msgid "Ldap port (389 for non ssl, 636 for ssl normally" +msgstr "Porta LDAP (389 per non ssl, 636 per ssl normalmente" + +#: auths/EDirectory_enterprise/Authenticator.py:62 +#: auths/RegexLdap/Authenticator.py:51 auths/SimpleLDAP/Authenticator.py:51 +msgid "" +"If checked, will use a ssl connection to ldap (if port is 389, will use in " +"fact port 636)" +msgstr "" +"Se selezionata, utilizzerà una connessione ssl a ldap (se la porta è 389, si " +"usano in porta fatto 636)" + +#: auths/EDirectory_enterprise/Authenticator.py:63 +msgid "Admin user" +msgstr "Utente admin" + +#: auths/EDirectory_enterprise/Authenticator.py:63 +msgid "Username with read privileges on the eDirectory" +msgstr "Nome utente con privilegi di lettura La eDirectory" + +#: auths/EDirectory_enterprise/Authenticator.py:67 +msgid "eDirectory Authenticator" +msgstr "eDirectory autenticatore" + +#: auths/EDirectory_enterprise/Authenticator.py:69 +msgid "Authenticate against eDirectory" +msgstr "Autenticare eDirectory" + +#: auths/EDirectory_enterprise/Authenticator.py:323 +#: auths/RegexLdap/Authenticator.py:387 auths/SimpleLDAP/Authenticator.py:363 +msgid "Ldap search base is incorrect" +msgstr "Base di ricerca LDAP non è corretto" + +#: auths/EDirectory_enterprise/Authenticator.py:328 +#: auths/RegexLdap/Authenticator.py:392 auths/SimpleLDAP/Authenticator.py:368 +msgid "Ldap user class seems to be incorrect (no user found by that class)" +msgstr "" +"Classe utente LDAP sembra essere errata (nessun utente trovato di classe)" + +#: auths/EDirectory_enterprise/Authenticator.py:336 +#: auths/SimpleLDAP/Authenticator.py:384 +msgid "" +"Ldap user id attribute seems to be incorrect (no user found by that " +"attribute)" +msgstr "" +"Attributo id di utente LDAP sembra essere errata (nessun utente trovato di " +"che attributo)" + +#: auths/EDirectory_enterprise/Authenticator.py:344 +msgid "Expected group attribute " +msgstr "Attributo di gruppo previsto " + +#: auths/EDirectory_enterprise/Authenticator.py:353 +msgid "" +"Ldap user class or user id attr is probably wrong (Ldap is an eDirectory?)" +msgstr "" +"LDAP dell'utente utente o classe id attr è probabilmente sbagliato (Ldap è un eDirectory?)" + #: auths/IP/Authenticator.py:48 auths/IP/Authenticator.py:50 msgid "IP Authenticator" msgstr "IP autenticatore" @@ -143,69 +392,14 @@ msgstr "Se selezionata, l'ospite sarà invertito dns" msgid "Internal structures seems ok" msgstr "Strutture interne sembra ok" -#: auths/RegexLdap/Authenticator.py:49 auths/SimpleLDAP/Authenticator.py:49 -#: services/OVirt/OVirtProvider.py:92 -msgid "Host" -msgstr "Host" - #: auths/RegexLdap/Authenticator.py:49 msgid "Ldap Server Host" msgstr "Host del Server LDAP" -#: auths/RegexLdap/Authenticator.py:50 auths/SimpleLDAP/Authenticator.py:50 -msgid "Port" -msgstr "Porta" - -#: auths/RegexLdap/Authenticator.py:50 auths/SimpleLDAP/Authenticator.py:50 -msgid "Ldap port (389 for non ssl, 636 for ssl normally" -msgstr "Porta LDAP (389 per non ssl, 636 per ssl normalmente" - -#: auths/RegexLdap/Authenticator.py:51 auths/SimpleLDAP/Authenticator.py:51 -msgid "Use SSL" -msgstr "Utilizzo SSL" - -#: auths/RegexLdap/Authenticator.py:51 auths/SimpleLDAP/Authenticator.py:51 -msgid "" -"If checked, will use a ssl connection to ldap (if port is 389, will use in " -"fact port 636)" -msgstr "" -"Se selezionata, utilizzerà una connessione ssl a ldap (se la porta è 389, si " -"usano in porta fatto 636)" - -#: auths/RegexLdap/Authenticator.py:52 auths/SimpleLDAP/Authenticator.py:52 -msgid "Ldap User" -msgstr "Utente LDAP" - #: auths/RegexLdap/Authenticator.py:52 auths/SimpleLDAP/Authenticator.py:52 msgid "Username with read privileges on the base selected" msgstr "Nome utente con privilegi di lettura sulla base selezionata" -#: auths/RegexLdap/Authenticator.py:53 auths/RegexLdap/Authenticator.py:76 -#: auths/SimpleLDAP/Authenticator.py:53 auths/SimpleLDAP/Authenticator.py:77 -#: core/auths/BaseAuthenticator.py:136 -#: osmanagers/WindowsOsManager/WinDomainOsManager.py:34 -#: 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/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" - -#: auths/RegexLdap/Authenticator.py:53 auths/SimpleLDAP/Authenticator.py:53 -msgid "Password of the ldap user" -msgstr "Password dell'utente ldap" - -#: auths/RegexLdap/Authenticator.py:54 auths/SimpleLDAP/Authenticator.py:54 -#: services/OVirt/OVirtProvider.py:95 -msgid "Timeout" -msgstr "Timeout" - -#: auths/RegexLdap/Authenticator.py:54 auths/SimpleLDAP/Authenticator.py:54 -msgid "Timeout in seconds of connection to LDAP" -msgstr "Timeout in secondi di connessione LDAP" - #: auths/RegexLdap/Authenticator.py:55 auths/SimpleLDAP/Authenticator.py:55 msgid "Base" msgstr "Base" @@ -255,41 +449,6 @@ msgstr "Regex LDAP autenticatore" msgid "Regular Expressions LDAP authenticator" 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/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" - -#: auths/RegexLdap/Authenticator.py:74 auths/SimpleLDAP/Authenticator.py:75 -msgid "Group" -msgstr "Gruppo" - -#: auths/RegexLdap/Authenticator.py:226 auths/SimpleLDAP/Authenticator.py:158 -msgid "Ldap connection error: " -msgstr "Errore di connessione LDAP: " - -#: auths/RegexLdap/Authenticator.py:303 auths/RegexLdap/Authenticator.py:346 -#: auths/SimpleLDAP/Authenticator.py:269 auths/SimpleLDAP/Authenticator.py:313 -msgid "Username not found" -msgstr "Nome utente non trovato" - -#: auths/RegexLdap/Authenticator.py:367 auths/SimpleLDAP/Authenticator.py:328 -#: auths/SimpleLDAP/Authenticator.py:342 -msgid "Too many results, be more specific" -msgstr "Troppi risultati, essere più specifico" - -#: auths/RegexLdap/Authenticator.py:387 auths/SimpleLDAP/Authenticator.py:363 -msgid "Ldap search base is incorrect" -msgstr "Base di ricerca LDAP non è corretto" - -#: auths/RegexLdap/Authenticator.py:392 auths/SimpleLDAP/Authenticator.py:368 -msgid "Ldap user class seems to be incorrect (no user found by that class)" -msgstr "" -"Classe utente LDAP sembra essere errata (nessun utente trovato di classe)" - #: auths/RegexLdap/Authenticator.py:401 msgid "" "Ldap user id attr is probably wrong (can't find any user with both " @@ -306,10 +465,116 @@ msgstr "" "Attributo id di gruppo LDAP sembra essere errata (nessun gruppo trovato di " "che attributo)" -#: auths/RegexLdap/Authenticator.py:428 auths/SimpleLDAP/Authenticator.py:423 -msgid "Connection params seem correct, test was succesfully executed" +#: auths/SAML_enterprise/SAML.py:80 +msgid "SAML Authenticator" +msgstr "SAML autenticatore" + +#: auths/SAML_enterprise/SAML.py:92 +msgid "SAML (v2.0) Authenticator" +msgstr "SAML (v 2.0) autenticatore" + +#: auths/SAML_enterprise/SAML.py:111 templates/uds/internal_page.html:28 +msgid "User" +msgstr "Utente" + +#: auths/SAML_enterprise/SAML.py:120 +msgid "Private key" +msgstr "Chiave privata" + +#: auths/SAML_enterprise/SAML.py:121 +msgid "" +"Private key used for sign and encription, as generated in base 64 from " +"openssl" msgstr "" -"Connessione params sembrano corretti, prova era stata correttamente eseguita" +"Chiave privata utilizzata per segno ed encription, come generato in base 64 da " +"OpenSSL" + +#: auths/SAML_enterprise/SAML.py:122 +msgid "Certificate" +msgstr "Certificato" + +#: auths/SAML_enterprise/SAML.py:123 +msgid "Server certificate (public), , as generated in base 64 from openssl" +msgstr "Certificato server (pubblico), come generato in base 64 da openssl" + +#: auths/SAML_enterprise/SAML.py:124 +msgid "IDP Metadata" +msgstr "Metadati IDP" + +#: auths/SAML_enterprise/SAML.py:125 +msgid "" +"You can enter here the URL or the IDP metadata or the metadata itself (xml)" +msgstr "" +"Qui è possibile immettere l'URL o i metadati IDP o i metadati stesso (xml)" + +#: auths/SAML_enterprise/SAML.py:127 +msgid "Entity ID" +msgstr "ID entità" + +#: auths/SAML_enterprise/SAML.py:128 +msgid "ID of the SP. If left blank, this will be autogenerated from server URL" +msgstr "ID della SP. Se lasciato vuoto, questo sarà generato automaticamente dal server URL" + +#: auths/SAML_enterprise/SAML.py:130 +msgid "User name attrs" +msgstr "Attrs nome utente" + +#: auths/SAML_enterprise/SAML.py:131 +msgid "Fields from where to extract user name" +msgstr "Campi da dove estrarre il nome utente" + +#: auths/SAML_enterprise/SAML.py:133 +msgid "Group name attrs" +msgstr "Gruppo nome attrs" + +#: auths/SAML_enterprise/SAML.py:134 +msgid "Fields from where to extract the groups" +msgstr "Campi da dove estrarre i gruppi" + +#: auths/SAML_enterprise/SAML.py:136 +msgid "Real name attrs" +msgstr "Vero nome attrs" + +#: auths/SAML_enterprise/SAML.py:137 +msgid "Fields from where to extract the real name" +msgstr "Campi da dove estrarre il vero nome" + +#: auths/SAML_enterprise/SAML.py:160 +msgid "" +"Server certificate should be a valid PEM (PEM certificates starts with -----" +"BEGIN CERTIFICATE-----)" +msgstr "" +"Certificato server dovrebbe essere un valido PEM (PEM certificati inizia con---" +"BEGIN CERTIFICATE---)" + +#: auths/SAML_enterprise/SAML.py:165 +msgid "Invalid server certificate. " +msgstr "Certificato del server non valido. " + +#: auths/SAML_enterprise/SAML.py:168 +msgid "" +"Private key should be a valid PEM (PEM private keys starts with -----BEGIN " +"RSA PRIVATE KEY-----" +msgstr "" +"Chiave privata deve essere un valido PEM (PEM chiavi private inizia con----BEGIN " +"CHIAVE PRIVATA RSA-" + +#: auths/SAML_enterprise/SAML.py:197 +#, python-brace-format +msgid "Can't fetch url {0}: {1}" +msgstr "Non è possibile recuperare l'url {0}: {1}" + +#: auths/SAML_enterprise/SAML.py:208 +msgid " (obtained from URL)" +msgstr " (ottenuto da URL)" + +#: auths/SAML_enterprise/SAML.py:209 +msgid "XML do not seems valid for IDP Metadata " +msgstr "XML non sembra valido per IDP metadati " + +#: auths/SAML_enterprise/SAML.py:227 +msgid "Can't access idp metadata" +msgstr "Non è possibile accedere ai metadati di idp" #: auths/Sample/SampleAuth.py:71 msgid "Sample Authenticator" @@ -371,23 +636,11 @@ msgstr "SimpleLDAP autenticatore" msgid "Simple LDAP authenticator" msgstr "Semplice autenticatore LDAP" -#: auths/SimpleLDAP/Authenticator.py:302 -msgid "Group not found" -msgstr "Gruppo non trovato" - #: auths/SimpleLDAP/Authenticator.py:376 msgid "Ldap group class seems to be incorrect (no group found by that class)" msgstr "" "Classe gruppo LDAP sembra essere errata (nessun gruppo trovato di classe)" -#: auths/SimpleLDAP/Authenticator.py:384 -msgid "" -"Ldap user id attribute seems to be incorrect (no user found by that " -"attribute)" -msgstr "" -"Attributo id di utente LDAP sembra essere errata (nessun utente trovato di " -"che attributo)" - #: auths/SimpleLDAP/Authenticator.py:401 msgid "" "Ldap user class or user id attr is probably wrong (can't find any user with " @@ -606,6 +859,66 @@ msgstr "Carico" msgid "Storage" msgstr "Archiviazione" +#: dispatchers/wyse_enterprise/views.py:111 +msgid "There are no authenticators available for login" +msgstr "Non sono disponibili per il login autenticatori" + +#: dispatchers/wyse_enterprise/views.py:124 +#, python-brace-format +msgid "The authenticator {0} is not usable" +msgstr "L'autenticatore {0} non è utilizzabile" + +#: dispatchers/wyse_enterprise/views.py:131 xmlrpc/auths/AdminAuth.py:168 +msgid "Invalid credentials" +msgstr "Credenziali non valide" + +#: dispatchers/wyse_enterprise/views.py:139 +#, python-brace-format +msgid "The domain {0} does not exists" +msgstr "Il dominio {0} non esiste" + +#: dispatchers/wyse_enterprise/views.py:200 +msgid "No services available" +msgstr "Nessun servizio disponibile" + +#: dispatchers/wyse_enterprise/views.py:215 +#: dispatchers/wyse_enterprise/views.py:309 +msgid "Invalid session" +msgstr "Sessione non valida" + +#: dispatchers/wyse_enterprise/views.py:219 +#: dispatchers/wyse_enterprise/views.py:313 +msgid "Invalid authorization" +msgstr "Autorizzazione non valida" + +#: dispatchers/wyse_enterprise/views.py:230 +#: dispatchers/wyse_enterprise/views.py:319 +msgid "Invalid request" +msgstr "Richiesta non valida" + +#: dispatchers/wyse_enterprise/views.py:233 +#: dispatchers/wyse_enterprise/views.py:322 +msgid "Invalid credentials used" +msgstr "Credenziali non valide usate" + +#: dispatchers/wyse_enterprise/views.py:254 +#: dispatchers/wyse_enterprise/views.py:257 web/errors.py:62 +msgid "Service not found" +msgstr "Servizio non trovato" + +#: dispatchers/wyse_enterprise/views.py:271 web/errors.py:61 +msgid "Transport not found" +msgstr "Trasporto non trovato" + +#: dispatchers/wyse_enterprise/views.py:275 +#: dispatchers/wyse_enterprise/views.py:282 +#: dispatchers/wyse_enterprise/views.py:287 +#: templates/uds/service_not_ready.html:6 +msgid "Service not ready at this moment. Please, try again in a while." +msgstr "" +"Servizio non pronta in questo momento. Per favore, provare nuovamente in un " +"istante." + #: osmanagers/LinuxOsManager/LinuxOsManager.py:45 msgid "Linux OS Manager" msgstr "Linux OS Manager" @@ -658,6 +971,8 @@ msgstr "" #: osmanagers/WindowsOsManager/WinDomainOsManager.py:32 #: transports/HTML5RDP/HTML5RDP.py:66 transports/RDP/RDPTransport.py:61 #: transports/RDP/TSRDPTransport.py:65 +#: transports/RGS-enterprise/RGSTransport.py:44 +#: transports/RGS-enterprise/TRGSTransport.py:49 msgid "Domain" msgstr "Dominio" @@ -808,6 +1123,204 @@ msgstr "" "UDS attore per macchine windows (importante!! Richiede .net framework 3.5 " "SP1)" +#: services/HyperV_enterprise/HyperVClusterLinkedService.py:51 +msgid "HyperV Cluster Linked Clone (Experimental)" +msgstr "HyperV Cluster collegati Clone (sperimentale)" + +#: services/HyperV_enterprise/HyperVClusterLinkedService.py:55 +#: services/HyperV_enterprise/HyperVLinkedService.py:58 +msgid "Hyper Services based on templates and differential disks (experimental)" +msgstr "Iper servizi basati su modelli e differenziale dischi (sperimentale)" + +#: services/HyperV_enterprise/HyperVClusterLinkedService.py:72 +#: services/HyperV_enterprise/HyperVLinkedService.py:75 +#: services/OVirt/OVirtLinkedService.py:77 +#: services/Vmware_enterprise/VCLinkedCloneService.py:72 +msgid "Number of desired machines to keep running waiting for a user" +msgstr "" +"Numero di macchine desiderate per continuare a correre in attesa di un utente" + +#: services/HyperV_enterprise/HyperVClusterLinkedService.py:78 +#: services/HyperV_enterprise/HyperVLinkedService.py:81 +#: services/OVirt/OVirtLinkedService.py:83 +#: services/Vmware_enterprise/VCLinkedCloneService.py:74 +msgid "Number of desired machines to keep suspended waiting for use" +msgstr "Numero di macchine desiderati tenere sospeso in attesa di utilizzo" + +#: services/HyperV_enterprise/HyperVClusterLinkedService.py:94 +#: services/HyperV_enterprise/HyperVLinkedService.py:97 +#: services/OVirt/OVirtLinkedService.py:99 +#: services/Vmware_enterprise/VCLinkedCloneService.py:50 +msgid "Base Machine" +msgstr "Macchina base" + +#: services/HyperV_enterprise/HyperVClusterLinkedService.py:94 +#: services/HyperV_enterprise/HyperVLinkedService.py:97 +#: services/OVirt/OVirtLinkedService.py:99 +msgid "Service base machine" +msgstr "Macchina base servizio" + +#: services/HyperV_enterprise/HyperVClusterLinkedService.py:95 +#: services/HyperV_enterprise/HyperVLinkedService.py:98 +#: services/Vmware_enterprise/VCLinkedCloneService.py:38 +msgid "Network" +msgstr "Rete" + +#: services/HyperV_enterprise/HyperVClusterLinkedService.py:96 +#: services/HyperV_enterprise/HyperVLinkedService.py:99 +#: services/Vmware_enterprise/VCLinkedCloneService.py:39 +msgid "" +"If more than 1 interface is found in machine, use one on this network as main" +msgstr "" +"Se più di 1 interfaccia si trova in macchina, utilizzare uno su questa rete come principale" + +#: services/HyperV_enterprise/HyperVClusterLinkedService.py:98 +#: services/HyperV_enterprise/HyperVLinkedService.py:101 +#: services/OVirt/OVirtLinkedService.py:112 +#: services/Vmware_enterprise/VCLinkedCloneService.py:51 +msgid "Memory (Mb)" +msgstr "Memoria (Mb)" + +#: services/HyperV_enterprise/HyperVClusterLinkedService.py:99 +#: services/HyperV_enterprise/HyperVLinkedService.py:102 +#: services/Vmware_enterprise/VCLinkedCloneService.py:52 +msgid "Memory for machines deployed from this service" +msgstr "Memoria per macchine distribuite da questo servizio" + +#: services/HyperV_enterprise/HyperVClusterLinkedService.py:100 +#: services/HyperV_enterprise/HyperVLinkedService.py:103 +msgid "Datastore Drives" +msgstr "Archivio dati unità" + +#: services/HyperV_enterprise/HyperVClusterLinkedService.py:101 +#: services/HyperV_enterprise/HyperVLinkedService.py:104 +msgid "Datastores where to put incrementals & publications" +msgstr "Datastore dove mettere incrementali & pubblicazioni" + +#: services/HyperV_enterprise/HyperVClusterLinkedService.py:102 +#: services/HyperV_enterprise/HyperVLinkedService.py:105 +#: services/OVirt/OVirtLinkedService.py:118 +#: services/Vmware_enterprise/VCLinkedCloneService.py:55 +msgid "Machine Names" +msgstr "Nomi della macchina" + +#: services/HyperV_enterprise/HyperVClusterLinkedService.py:102 +#: services/HyperV_enterprise/HyperVLinkedService.py:105 +#: services/Vmware_enterprise/VCLinkedCloneService.py:55 +msgid "Base name for clones from this machine" +msgstr "Nome di base per i cloni da questa macchina" + +#: services/HyperV_enterprise/HyperVClusterLinkedService.py:103 +#: services/HyperV_enterprise/HyperVLinkedService.py:106 +#: services/OVirt/OVirtLinkedService.py:119 +#: services/Vmware_enterprise/VCLinkedCloneService.py:56 +msgid "Name Length" +msgstr "Lunghezza del nome" + +#: services/HyperV_enterprise/HyperVClusterLinkedService.py:104 +#: services/HyperV_enterprise/HyperVLinkedService.py:107 +#: services/OVirt/OVirtLinkedService.py:120 +#: services/Vmware_enterprise/VCLinkedCloneService.py:57 +msgid "Length of numeric part for the names of this machines (betwen 3 and 6" +msgstr "" +"Lunghezza della parte numerica per i nomi di questa macchine (tra 3 e 6" + +#: services/HyperV_enterprise/HyperVClusterLinkedService.py:116 +#: services/HyperV_enterprise/HyperVLinkedService.py:119 +#: services/OVirt/OVirtLinkedService.py:143 +#: services/Vmware_enterprise/VCLinkedCloneService.py:95 +msgid "The length of basename plus length must not be greater than 15" +msgstr "La lunghezza di basename più lunghezza non deve essere maggiore di 15" + +#: services/HyperV_enterprise/HyperVClusterLinkedService.py:118 +#: services/HyperV_enterprise/HyperVLinkedService.py:121 +#: services/OVirt/OVirtLinkedService.py:145 +#: services/Vmware_enterprise/VCLinkedCloneService.py:97 +msgid "The machine name can't be only numbers" +msgstr "Il nome del computer non può essere solo numeri" + +#: services/HyperV_enterprise/HyperVClusterProvider.py:64 +msgid "HyperV Cluster Provider" +msgstr "HyperV Cluster Provider" + +#: services/HyperV_enterprise/HyperVClusterProvider.py:68 +msgid "HyperV Cluster Service Provider" +msgstr "HyperV Cluster Service Provider" + +#: services/HyperV_enterprise/HyperVClusterProvider.py:89 +#: services/HyperV_enterprise/HyperVProvider.py:81 +msgid "HyperV Server IP or Hostname (must enable first WSMAN access)" +msgstr "HyperV Server IP o l'Hostname (necessario abilitare l'accesso prima di WS-Management)" + +#: services/HyperV_enterprise/HyperVClusterProvider.py:90 +#: services/HyperV_enterprise/HyperVProvider.py:82 +msgid "WSMan Port (normally 5985)" +msgstr "Porto di WS-Management (normalmente 5985)" + +#: services/HyperV_enterprise/HyperVClusterProvider.py:91 +#: services/HyperV_enterprise/HyperVProvider.py:83 +msgid "User with valid privileges on HyperV Server" +msgstr "Utente con privilegi di validi sul HyperV Server" + +#: services/HyperV_enterprise/HyperVClusterProvider.py:92 +#: services/HyperV_enterprise/HyperVProvider.py:84 +msgid "Password of the user of HyperV" +msgstr "Password dell'utente di HyperV" + +#: services/HyperV_enterprise/HyperVClusterProvider.py:93 +#: services/HyperV_enterprise/HyperVProvider.py:85 +msgid "Timeout in seconds of connection to HyperV" +msgstr "Timeout in secondi di connessione per HyperV" + +#: services/HyperV_enterprise/HyperVClusterProvider.py:94 +#: services/HyperV_enterprise/HyperVProvider.py:86 +#: services/OVirt/OVirtProvider.py:96 +#: services/Vmware_enterprise/ServiceProviderVC.py:33 +msgid "Macs range" +msgstr "Gamma di Mac" + +#: services/HyperV_enterprise/HyperVClusterProvider.py:95 +#: services/HyperV_enterprise/HyperVProvider.py:87 +#: services/OVirt/OVirtProvider.py:97 +msgid "Range of valids macs for created machines" +msgstr "Gamma di Mac valida per macchine creati" + +#: services/HyperV_enterprise/HyperVClusterProvider.py:132 +msgid "The selected server is not a cluster" +msgstr "Il server selezionato non è un cluster" + +#: services/HyperV_enterprise/HyperVClusterProvider.py:299 +#: services/HyperV_enterprise/HyperVProvider.py:249 +#: services/OVirt/OVirtProvider.py:399 +msgid "Connection test successful" +msgstr "Test di connessione riuscita" + +#: services/HyperV_enterprise/HyperVClusterProvider.py:300 +#: services/HyperV_enterprise/HyperVProvider.py:250 +#: services/OVirt/OVirtProvider.py:400 +#: services/Vmware_enterprise/ServiceProviderVC.py:120 +msgid "Connection failed. Check connection params" +msgstr "Connessione non riuscita. Controllare la connessione params" + +#: services/HyperV_enterprise/HyperVClusterPublication.py:97 +#: services/HyperV_enterprise/HyperVPublication.py:96 +#: services/OVirt/OVirtPublication.py:85 +#, python-brace-format +msgid "UDS pub for {0} at {1}" +msgstr "Pub UDS per {0} in {1}" + +#: services/HyperV_enterprise/HyperVLinkedService.py:54 +msgid "HyperV Linked Clone (Experimental)" +msgstr "HyperV Clone collegato (sperimentale)" + +#: services/HyperV_enterprise/HyperVProvider.py:62 +msgid "HyperV Platform Provider" +msgstr "Fornitore di piattaforma HyperV" + +#: services/HyperV_enterprise/HyperVProvider.py:66 +msgid "HyperV platform service provider" +msgstr "Fornitore di servizi di piattaforma HyperV" + #: services/OVirt/OVirtLinkedService.py:56 msgid "oVirt Linked Clone (Experimental)" msgstr "oVirt Linked Clone (sperimentale)" @@ -816,23 +1329,6 @@ msgstr "oVirt Linked Clone (sperimentale)" msgid "oVirt Services based on templates and COW (experimental)" msgstr "oVirt servizi basati su modelli e vacca (sperimentale)" -#: services/OVirt/OVirtLinkedService.py:77 -msgid "Number of desired machines to keep running waiting for a user" -msgstr "" -"Numero di macchine desiderate per continuare a correre in attesa di un utente" - -#: services/OVirt/OVirtLinkedService.py:83 -msgid "Number of desired machines to keep suspended waiting for use" -msgstr "Numero di macchine desiderati tenere sospeso in attesa di utilizzo" - -#: services/OVirt/OVirtLinkedService.py:99 -msgid "Base Machine" -msgstr "Macchina base" - -#: services/OVirt/OVirtLinkedService.py:99 -msgid "Service base machine" -msgstr "Macchina base servizio" - #: services/OVirt/OVirtLinkedService.py:100 msgid "Cluster" msgstr "Cluster" @@ -849,10 +1345,6 @@ msgstr "Archivio dati dominio" msgid "Datastore domain where to publish and put incrementals" msgstr "Archivio dati dominio dove pubblicare e mettere incrementali" -#: services/OVirt/OVirtLinkedService.py:112 -msgid "Memory (Mb)" -msgstr "Memoria (Mb)" - #: services/OVirt/OVirtLinkedService.py:113 msgid "Memory assigned to machines" msgstr "Memoria assegnato alle macchine" @@ -865,19 +1357,6 @@ msgstr "Memoria garantita (Mb)" msgid "Physical memory guaranteed to machines" msgstr "Memoria fisica garantita per macchine" -#: services/OVirt/OVirtLinkedService.py:118 -msgid "Machine Names" -msgstr "Nomi della macchina" - -#: services/OVirt/OVirtLinkedService.py:119 -msgid "Name Length" -msgstr "Lunghezza del nome" - -#: services/OVirt/OVirtLinkedService.py:120 -msgid "Length of numeric part for the names of this machines (betwen 3 and 6" -msgstr "" -"Lunghezza della parte numerica per i nomi di questa macchine (tra 3 e 6" - #: services/OVirt/OVirtLinkedService.py:122 msgid "Display" msgstr "Visualizzazione" @@ -886,14 +1365,6 @@ msgstr "Visualizzazione" msgid "Display type (only for administration pourposses)" msgstr "Tipo di display (solo per pourposses di amministrazione)" -#: services/OVirt/OVirtLinkedService.py:143 -msgid "The length of basename plus length must not be greater than 15" -msgstr "La lunghezza di basename più lunghezza non deve essere maggiore di 15" - -#: services/OVirt/OVirtLinkedService.py:145 -msgid "The machine name can't be only numbers" -msgstr "Il nome del computer non può essere solo numeri" - #: services/OVirt/OVirtProvider.py:73 msgid "oVirt Platform Provider" msgstr "oVirt fornitore di piattaforma" @@ -916,30 +1387,10 @@ msgid "Password of the user of oVirt" msgstr "Password dell'utente di oVirt" #: services/OVirt/OVirtProvider.py:95 +#: services/Vmware_enterprise/ServiceProviderVC.py:32 msgid "Timeout in seconds of connection to VC" msgstr "Timeout in secondi di connessione a VC" -#: services/OVirt/OVirtProvider.py:96 -msgid "Macs range" -msgstr "Gamma di Mac" - -#: services/OVirt/OVirtProvider.py:97 -msgid "Range of valids macs for created machines" -msgstr "Gamma di Mac valida per macchine creati" - -#: services/OVirt/OVirtProvider.py:399 -msgid "Connection test successful" -msgstr "Test di connessione riuscita" - -#: services/OVirt/OVirtProvider.py:400 -msgid "Connection failed. Check connection params" -msgstr "Connessione non riuscita. Controllare la connessione params" - -#: services/OVirt/OVirtPublication.py:85 -#, python-brace-format -msgid "UDS pub for {0} at {1}" -msgstr "Pub UDS per {0} in {1}" - #: services/PhysicalMachines/IPMachineDeployed.py:57 msgid "IP " msgstr "IP " @@ -1056,6 +1507,121 @@ msgstr "Cache L2 per elementi fittizi" msgid "List of names" msgstr "Elenco dei nomi" +#: services/Vmware_enterprise/Helpers.py:72 +msgid "Local" +msgstr "Locale" + +#: services/Vmware_enterprise/Helpers.py:74 +msgid "Remote" +msgstr "Remoto" + +#: services/Vmware_enterprise/PublicationVC.py:37 +msgid "Publication" +msgstr "Pubblicazione" + +#: services/Vmware_enterprise/PublicationVC.py:38 +#, python-brace-format +msgid "UDS Publication for {0} created at {1}" +msgstr "Pubblicazione di UDS per {0} creato in {1}" + +#: services/Vmware_enterprise/ServiceProviderVC.py:28 +msgid "VMWare VC Server IP or Hostname" +msgstr "VMWare Server VC IP o l'Hostname" + +#: services/Vmware_enterprise/ServiceProviderVC.py:29 +msgid "VMWare VC Server Port (usually 443)" +msgstr "VC VMWare Server Port (solitamente 443)" + +#: services/Vmware_enterprise/ServiceProviderVC.py:30 +msgid "User with valid privileges on VC" +msgstr "Utente con privilegi validi su VC" + +#: services/Vmware_enterprise/ServiceProviderVC.py:31 +msgid "Password of the user of the VC" +msgstr "Password dell'utente di VC" + +#: services/Vmware_enterprise/ServiceProviderVC.py:34 +msgid "" +"Range of valids macs for created machines. Must be inside " +"00:50:56:00:00:00-00:50:56:3F:FF:FF" +msgstr "" +"Gamma di Mac valida per macchine creati. Deve essere all'interno " +"00:50:56:00:00:00-00:50:56:3F:FF:FF" + +#: services/Vmware_enterprise/ServiceProviderVC.py:39 +msgid "VMWare Virtual Center Provider" +msgstr "VMWare Virtual Center Provider" + +#: services/Vmware_enterprise/ServiceProviderVC.py:41 +msgid "Provides connection to Virtual Center Services" +msgstr "Fornisce connessione virtuale centro servizi" + +#: services/Vmware_enterprise/ServiceProviderVC.py:110 +msgid "Error testing connection" +msgstr "Errore test connessione" + +#: services/Vmware_enterprise/ServiceProviderVC.py:113 +msgid "VmwareVC Provider: " +msgstr "VmwareVC Provider: " + +#: services/Vmware_enterprise/ServiceProviderVC.py:119 +msgid "Connection params ok" +msgstr "Connessione params ok" + +#: services/Vmware_enterprise/VCLinkedCloneService.py:30 +msgid "Datacenter" +msgstr "Datacenter" + +#: services/Vmware_enterprise/VCLinkedCloneService.py:36 +msgid "Datacenter containing base machine" +msgstr "Macchina di base contenente datacenter" + +#: services/Vmware_enterprise/VCLinkedCloneService.py:40 +msgid "Pub. Resource Pool" +msgstr "Pub. Pool di risorse" + +#: services/Vmware_enterprise/VCLinkedCloneService.py:40 +msgid "Resource Pool where deploy clones" +msgstr "Pool di risorse dove distribuire cloni" + +#: services/Vmware_enterprise/VCLinkedCloneService.py:41 +msgid "Clones Folder" +msgstr "Cartella di cloni" + +#: services/Vmware_enterprise/VCLinkedCloneService.py:41 +msgid "Folder where deploy clones" +msgstr "Cartella dove distribuire cloni" + +#: services/Vmware_enterprise/VCLinkedCloneService.py:42 +msgid "Resource Pool" +msgstr "Pool di risorse" + +#: services/Vmware_enterprise/VCLinkedCloneService.py:48 +msgid "Resource Pool containing base machine" +msgstr "Macchina base contenente risorse piscina" + +#: services/Vmware_enterprise/VCLinkedCloneService.py:50 +msgid "Base machine for this service" +msgstr "Macchina base per questo servizio" + +#: services/Vmware_enterprise/VCLinkedCloneService.py:53 +msgid "Datastores" +msgstr "Datastore" + +#: services/Vmware_enterprise/VCLinkedCloneService.py:54 +msgid "Datastores where to put incrementals" +msgstr "Datastore dove mettere incrementali" + +#: services/Vmware_enterprise/VCLinkedCloneService.py:64 +msgid "VMWare Linked clone base" +msgstr "Base di clone collegato VMWare" + +#: services/Vmware_enterprise/VCLinkedCloneService.py:66 +msgid "" +"This service provides access to Linked Clones machines on a Virtual Center" +msgstr "" +"Questo servizio fornisce l'accesso alle macchine collegate cloni su un Virtual Center" + #: templates/404.html:3 templates/500.html:3 msgid "Page not found" msgstr "Pagina non trovata" @@ -1115,10 +1681,6 @@ msgstr "IP" msgid "Transports" msgstr "Trasporti" -#: templates/uds/internal_page.html:28 -msgid "User" -msgstr "Utente" - #: templates/uds/internal_page.html:34 templates/uds/prefs.html:12 #: templates/uds/html5/snippets/navbar.html:39 msgid "Preferences" @@ -1156,12 +1718,6 @@ msgstr "UDS preferenze utente" msgid "Save Preferences" msgstr "Salva preferenze" -#: templates/uds/service_not_ready.html:6 -msgid "Service not ready at this moment. Please, try again in a while." -msgstr "" -"Servizio non pronta in questo momento. Per favore, provare nuovamente in un " -"istante." - #: templates/uds/admin/snippets/navbar.html:6 #: templates/uds/html5/snippets/navbar.html:6 msgid "toggle navigation" @@ -1177,6 +1733,7 @@ msgid "Authenticators" msgstr "Autenticatori" #: templates/uds/admin/snippets/navbar.html:21 +#: templates/uds/admin/tmpl/connectivity.html:4 msgid "Connectivity" msgstr "Connettività" @@ -1188,11 +1745,11 @@ msgstr "Servizi distribuiti" msgid "Configuration" msgstr "Configurazione" -#: templates/uds/admin/snippets/navbar.html:56 +#: templates/uds/admin/snippets/navbar.html:57 msgid "Exit dashboard" msgstr "Cruscotto di uscita" -#: templates/uds/admin/snippets/navbar.html:57 +#: templates/uds/admin/snippets/navbar.html:58 #: templates/uds/html5/snippets/navbar.html:47 msgid "logout" msgstr "logout" @@ -1201,6 +1758,7 @@ msgstr "logout" msgid "administration of authenticators" msgstr "amministrazione di autenticatori" +#: templates/uds/admin/tmpl/connectivity.html:4 #: templates/uds/admin/tmpl/dashboard.html:4 msgid "overview" msgstr "Panoramica" @@ -1335,31 +1893,45 @@ msgstr "" #: transports/HTML5RDP/HTML5RDP.py:63 transports/NX/NXTransport.py:60 #: transports/NX/TSNXTransport.py:65 transports/RDP/RDPTransport.py:58 -#: transports/RDP/TSRDPTransport.py:62 transports/TSNX/TSNXTransport.py:65 +#: transports/RDP/TSRDPTransport.py:62 +#: transports/RGS-enterprise/RGSTransport.py:41 +#: transports/RGS-enterprise/TRGSTransport.py:46 +#: transports/TSNX/TSNXTransport.py:65 msgid "Empty creds" msgstr "Vuoto creds" #: transports/HTML5RDP/HTML5RDP.py:63 transports/NX/NXTransport.py:60 #: transports/NX/TSNXTransport.py:65 transports/RDP/RDPTransport.py:58 -#: transports/RDP/TSRDPTransport.py:62 transports/TSNX/TSNXTransport.py:65 +#: transports/RDP/TSRDPTransport.py:62 +#: transports/RGS-enterprise/RGSTransport.py:41 +#: transports/RGS-enterprise/TRGSTransport.py:46 +#: 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/NX/TSNXTransport.py:66 transports/RDP/RDPTransport.py:59 -#: transports/RDP/TSRDPTransport.py:63 transports/TSNX/TSNXTransport.py:66 +#: transports/RDP/TSRDPTransport.py:63 +#: transports/RGS-enterprise/RGSTransport.py:42 +#: transports/RGS-enterprise/TRGSTransport.py:47 +#: 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/NX/TSNXTransport.py:67 transports/RDP/RDPTransport.py:60 -#: transports/RDP/TSRDPTransport.py:64 transports/TSNX/TSNXTransport.py:67 +#: transports/RDP/TSRDPTransport.py:64 +#: transports/RGS-enterprise/RGSTransport.py:43 +#: transports/RGS-enterprise/TRGSTransport.py:48 +#: 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" #: transports/HTML5RDP/HTML5RDP.py:66 transports/RDP/RDPTransport.py:61 #: transports/RDP/TSRDPTransport.py:65 +#: transports/RGS-enterprise/RGSTransport.py:44 +#: transports/RGS-enterprise/TRGSTransport.py:49 msgid "" "If not empty, this domain will be always used as credential (used as DOMAIN" "\\user)" @@ -1466,11 +2038,13 @@ 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/RGS-enterprise/TRGSTransport.py:43 #: transports/TSNX/TSNXTransport.py:62 msgid "Tunnel server" msgstr "Server per il tunnel" #: transports/NX/TSNXTransport.py:62 transports/RDP/TSRDPTransport.py:59 +#: transports/RGS-enterprise/TRGSTransport.py:43 #: transports/TSNX/TSNXTransport.py:62 msgid "" "IP or Hostname of tunnel server send to client device (\"public\" ip) and " @@ -1480,11 +2054,13 @@ msgstr "" "\"pubblico\") e porto. (utilizzare il formato HOST: PORT)" #: transports/NX/TSNXTransport.py:63 transports/RDP/TSRDPTransport.py:60 +#: transports/RGS-enterprise/TRGSTransport.py:44 #: transports/TSNX/TSNXTransport.py:63 msgid "Tunnel host check" msgstr "Controllo host tunnel" #: transports/NX/TSNXTransport.py:63 transports/RDP/TSRDPTransport.py:60 +#: transports/RGS-enterprise/TRGSTransport.py:44 #: transports/TSNX/TSNXTransport.py:63 msgid "" "If not empty, this server will be used to check if service is running before " @@ -1495,6 +2071,7 @@ msgstr "" "PORT)" #: transports/NX/TSNXTransport.py:103 transports/RDP/TSRDPTransport.py:75 +#: transports/RGS-enterprise/TRGSTransport.py:71 #: transports/TSNX/TSNXTransport.py:103 msgid "Must use HOST:PORT in Tunnel Server Field" msgstr "Necessario utilizzare HOST: porta nel campo Server di Tunnel" @@ -1599,7 +2176,7 @@ msgid "In order to use this service, you should first install CoRD." msgstr "" "Per poter utilizzare questo servizio, è necessario prima installare cavo." -#: transports/RDP/web.py:85 +#: transports/RDP/web.py:85 transports/RGS-enterprise/web.py:83 msgid "You can obtain it from" msgstr "Si può ottenere da" @@ -1607,18 +2184,122 @@ msgstr "Si può ottenere da" msgid "CoRD Website" msgstr "Sito Web di cavo" +#: transports/RGS-enterprise/RGSTransport.py:34 +msgid "RGS Transport (direct)" +msgstr "RGS trasporto (diretto)" + +#: transports/RGS-enterprise/RGSTransport.py:36 +msgid "RGS Transport for direct connection" +msgstr "RGS trasporto per connessione diretta" + +#: transports/RGS-enterprise/RGSTransport.py:45 +#: transports/RGS-enterprise/TRGSTransport.py:50 +msgid "Image quality" +msgstr "Qualità dell'immagine" + +#: transports/RGS-enterprise/RGSTransport.py:46 +#: transports/RGS-enterprise/TRGSTransport.py:51 +msgid "Quality of image codec (0-100)" +msgstr "Qualità del codec immagine (0-100)" + +#: transports/RGS-enterprise/RGSTransport.py:47 +#: transports/RGS-enterprise/TRGSTransport.py:52 +msgid "Adjustable Quality" +msgstr "Qualità regolabili" + +#: transports/RGS-enterprise/RGSTransport.py:48 +#: transports/RGS-enterprise/TRGSTransport.py:53 +msgid "If checked, the image quality will be adjustable with bandwidth" +msgstr "Se selezionata, la qualità dell'immagine sarà regolabile con larghezza di banda" + +#: transports/RGS-enterprise/RGSTransport.py:49 +#: transports/RGS-enterprise/TRGSTransport.py:54 +msgid "Min. Adjustable Quality" +msgstr "Qualità regolabile min." + +#: transports/RGS-enterprise/RGSTransport.py:50 +#: transports/RGS-enterprise/TRGSTransport.py:55 +msgid "" +"The lowest image quality applied to images to maintain the minimum update " +"rate." +msgstr "" +"La qualità d'immagine più bassa applicata alle immagini per mantenere l'aggiornamento minimo " +"tasso." + +#: transports/RGS-enterprise/RGSTransport.py:51 +#: transports/RGS-enterprise/TRGSTransport.py:56 +msgid "Adjustable Frame Rate" +msgstr "Frequenza fotogrammi regolabile" + +#: transports/RGS-enterprise/RGSTransport.py:52 +#: transports/RGS-enterprise/TRGSTransport.py:57 +msgid "Update rate threshold to begin adjusting image quality" +msgstr "Soglia tasso di aggiornamento per iniziare a regolare la qualità dell'immagine" + +#: transports/RGS-enterprise/RGSTransport.py:53 +#: transports/RGS-enterprise/TRGSTransport.py:58 +msgid "Match Local Resolution" +msgstr "Risoluzione locale partita" + +#: transports/RGS-enterprise/RGSTransport.py:54 +#: transports/RGS-enterprise/TRGSTransport.py:59 +msgid "" +"Change the Sender's resolution to match the Receiver's resolution when " +"connecting" +msgstr "" +"Cambiare risoluzione del mittente per abbinare la risoluzione del ricevitore quando " +"collegamento" + +#: transports/RGS-enterprise/RGSTransport.py:55 +#: transports/RGS-enterprise/TRGSTransport.py:60 +msgid "Redirect USB" +msgstr "Reindirizzare USB" + +#: transports/RGS-enterprise/RGSTransport.py:56 +#: transports/RGS-enterprise/TRGSTransport.py:61 +msgid "If checked, the USB will be redirected." +msgstr "Se selezionata, verrà reindirizzato l'USB." + +#: transports/RGS-enterprise/RGSTransport.py:57 +#: transports/RGS-enterprise/TRGSTransport.py:62 +msgid "Redirect Audio" +msgstr "Reindirizzamento Audio" + +#: transports/RGS-enterprise/RGSTransport.py:58 +#: transports/RGS-enterprise/TRGSTransport.py:63 +msgid "If checked, the Audio will be redirected." +msgstr "Se selezionata, l'Audio verrà reindirizzato." + +#: transports/RGS-enterprise/RGSTransport.py:59 +#: transports/RGS-enterprise/TRGSTransport.py:64 +msgid "Redirect Mic" +msgstr "Reindirizzare Mic" + +#: transports/RGS-enterprise/RGSTransport.py:60 +#: transports/RGS-enterprise/TRGSTransport.py:65 +msgid "If checked, the Mic will be redirected." +msgstr "Se selezionata, verrà reindirizzato il Mic." + +#: transports/RGS-enterprise/TRGSTransport.py:36 +msgid "RGS Transport (tunneled)" +msgstr "RGS trasporto (con tunnel)" + +#: transports/RGS-enterprise/TRGSTransport.py:38 +msgid "RGS Transport for tunneled connection" +msgstr "RGS trasporto per connessione con tunnel" + +#: transports/RGS-enterprise/web.py:82 +msgid "In order to use this service, you should first install RGS Receiver." +msgstr "Per poter utilizzare questo servizio, è necessario prima installare RGS ricevitore." + +#: transports/RGS-enterprise/web.py:83 +msgid "HP Website" +msgstr "Sito Web HP" + #: web/errors.py:60 msgid "Unknown error" msgstr "Errore sconosciuto" -#: web/errors.py:61 -msgid "Transport not found" -msgstr "Trasporto non trovato" - -#: web/errors.py:62 -msgid "Service not found" -msgstr "Servizio non trovato" - #: web/errors.py:63 xmlrpc/auths/AdminAuth.py:182 #: xmlrpc/auths/AdminAuth.py:188 msgid "Access denied" @@ -1690,10 +2371,6 @@ msgstr "Credenziali non sono più valide" msgid "Administration" msgstr "Amministrazione" -#: xmlrpc/auths/AdminAuth.py:168 -msgid "Invalid credentials" -msgstr "Credenziali non valide" - #: xmlrpc/auths/Authenticators.py:107 msgid "Authenticator does not exists" msgstr "Autenticatore non esiste" diff --git a/server/src/uds/locale/it/LC_MESSAGES/djangojs.mo b/server/src/uds/locale/it/LC_MESSAGES/djangojs.mo index ac988e59ece2001b21e9a901c19c36609a7c4a39..f3d169b0b8ec93a74c45cacba3a018c14980f486 100644 GIT binary patch delta 820 zcmY+>KS&%w6vy$|Tkrf63QDJ&vF2q6YN596Q4VnGm61Qpgo z3sJ!$Tw`%qX`={YV__2zA%Zrh2sT1UmG3XU6dCsIXXnk#+u7M~>8te0%c#sb_sMrI zh4Wa03s{1yn8bC|yiL@+ua@7n{vMW+KR~TJHczpd{+ac^qw3utm;2$n=x@QFHsKyC z82F8PVUlVpT!k5IMCC*5z#bcaWBGSjPJROQA#uRJ}FSyseVxp>To3xaZsv zK4Tzcl@`7-hfyycMJ@b*bvR}DMbwuqS$`F|+=k_MEMGuvpom;l7T%#Y@(UlMM^gPXYP^YC8wRM896+7aAZmUNS?cCdAJV(PLp={)P=&V5f>}fr zI>078K@Q3V@l+zyTglT?LQQ{KO|Ma<7D6jqiFTrqP-`YK@nNFwqc)5$pJ4OOO4mQ&QIin*-4w2*Ua-&()$DVDNDfs delta 797 zcmZ9KKS*0q6o>E2i!rrojH$-In5tcz)K-e3MR9d=C8q_-H^1gF% z7{C}@he@~zqwpiFg1b<8pP};h&HvTbN3a_IPpEyz##7@3RGl(pxZl1DDur$=;V-Nq za0_*iM->&Ufoa$Xfjm^BYZl*ts<#c5_bwXzE4+(i(R1zq zJ|@t|E^VALPQyCZGf)jIKo!Wr6kIj`Ce#ggZ2cZG+$ZyYG5;P^Bi{lh4EMwM%Xk7+ z=-k$2s14Up4g7&>=+4$Lf{G{j>4a&hmmGq6sd1?MSCB0(4|RcLk;x+_Z=nkBgcFfe zleU)dw7>(%(>NFABI#ij>Cy_*6U*w6inXDKr~`GQW+c-^I>Wnwd- zy`#>P>0kN3scl&THKAVAj$}_z21QT`JV^QxOu0BeZ diff --git a/server/src/uds/locale/it/LC_MESSAGES/djangojs.po b/server/src/uds/locale/it/LC_MESSAGES/djangojs.po index 5a723612f..c4c2ee671 100644 --- a/server/src/uds/locale/it/LC_MESSAGES/djangojs.po +++ b/server/src/uds/locale/it/LC_MESSAGES/djangojs.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-11-17 04:21+0100\n" +"POT-Creation-Date: 2013-11-20 04:05+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -18,14 +18,10 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: static/adm/js/gui-elements.js:7 +#: static/adm/js/gui-elements.js:33 msgid "Service Providers" msgstr "Fornitori di servizi" -#: 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" @@ -70,19 +66,19 @@ msgstr "Prossimo" msgid "Previous" msgstr "Precedente" -#: static/adm/js/gui.js:80 +#: static/adm/js/gui.js:75 msgid "Deployed services" msgstr "Servizi distribuiti" -#: static/adm/js/gui.js:349 +#: static/adm/js/gui.js:360 msgid "Edit" msgstr "Modifica" -#: static/adm/js/gui.js:358 +#: static/adm/js/gui.js:369 msgid "Delete" msgstr "Eliminare" -#: static/adm/js/gui.js:367 +#: static/adm/js/gui.js:378 msgid "Refresh" msgstr "Aggiornamento" @@ -161,3 +157,7 @@ msgstr "Novembre" #: static/adm/js/strftime.js:35 msgid "December" msgstr "Dicembre" + +#: static/adm/js/tools.js:46 +msgid "Just a moment..." +msgstr "Solo un momento..." diff --git a/server/src/uds/locale/pt/LC_MESSAGES/django.mo b/server/src/uds/locale/pt/LC_MESSAGES/django.mo index 2d16e0dc1f90b4320e4cc82687d823eb3f45c94e..64638fc253194ff5233cc60a18c9b56a0f877476 100644 GIT binary patch literal 46677 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 Uoo~7sS;G!mXmq&`no80C1C`oRdjJ3c delta 9351 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 Ee@0sZXaE2J diff --git a/server/src/uds/locale/pt/LC_MESSAGES/django.po b/server/src/uds/locale/pt/LC_MESSAGES/django.po index 036d5dff4..e5b1e8f51 100644 --- a/server/src/uds/locale/pt/LC_MESSAGES/django.po +++ b/server/src/uds/locale/pt/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-11-17 04:20+0100\n" +"POT-Creation-Date: 2013-11-20 04:05+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -18,23 +18,23 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: REST/methods/authenticators.py:73 +#: REST/methods/authenticators.py:80 msgid "Current authenticators" msgstr "Autenticadores atuais" -#: REST/methods/authenticators.py:75 REST/methods/networks.py:68 +#: REST/methods/authenticators.py:82 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:76 REST/methods/osmanagers.py:72 +#: REST/methods/authenticators.py:83 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:77 +#: REST/methods/authenticators.py:84 msgid "Users" msgstr "Usuários" @@ -90,14 +90,263 @@ msgstr "Estado" msgid "Last access" msgstr "Último acesso" -#: admin/views.py:55 admin/views.py:63 admin/views.py:76 web/views.py:422 +#: admin/views.py:55 admin/views.py:63 admin/views.py:77 web/views.py:422 msgid "Forbidden" msgstr "Proibido" -#: admin/views.py:69 +#: admin/views.py:70 msgid "requested a template that do not exists" msgstr "solicitado um modelo que não existe" +#: auths/ActiveDirectory_enterprise/Authenticator.py:29 +#: auths/EDirectory_enterprise/Authenticator.py:60 +#: auths/RegexLdap/Authenticator.py:49 auths/SimpleLDAP/Authenticator.py:49 +#: services/HyperV_enterprise/HyperVClusterProvider.py:89 +#: services/HyperV_enterprise/HyperVProvider.py:81 +#: services/OVirt/OVirtProvider.py:92 +#: services/Vmware_enterprise/ServiceProviderVC.py:28 +msgid "Host" +msgstr "Host" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:29 +msgid "Active Directory Server IP or Hostname" +msgstr "Active Directory Server IP ou nome do host" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:30 +#: auths/EDirectory_enterprise/Authenticator.py:62 +#: auths/RegexLdap/Authenticator.py:51 auths/SimpleLDAP/Authenticator.py:51 +msgid "Use SSL" +msgstr "Uso SSL" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:30 +msgid "If checked, will use a ssl connection to Active Directory" +msgstr "Se marcada, usará uma conexão ssl para o Active Directory" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:31 +msgid "Compatibility" +msgstr "Compatibilidade" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:31 +msgid "Compatibility of AD connection (Usually windows 2000 and later)" +msgstr "Compatibilidade de conexão AD (geralmente windows 2000 e posterior)" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:33 +#: auths/RegexLdap/Authenticator.py:52 auths/SimpleLDAP/Authenticator.py:52 +msgid "Ldap User" +msgstr "Usuário LDAP" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:33 +msgid "" +"Username with read privileges on the base selected (use USER@DOMAIN.DOM form " +"for this)" +msgstr "" +"Nome de usuário com privilégios de leitura da base selecionada (uso USER@DOMAIN.Formulário de DOM " +"para isso)" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:34 +#: auths/ActiveDirectory_enterprise/Authenticator.py:52 +#: auths/EDirectory_enterprise/Authenticator.py:64 +#: auths/RegexLdap/Authenticator.py:53 auths/RegexLdap/Authenticator.py:76 +#: auths/SimpleLDAP/Authenticator.py:53 auths/SimpleLDAP/Authenticator.py:77 +#: core/auths/BaseAuthenticator.py:136 +#: osmanagers/WindowsOsManager/WinDomainOsManager.py:34 +#: osmanagers/WindowsOsManager/WinRandomPassOsManager.py:30 +#: services/HyperV_enterprise/HyperVClusterProvider.py:92 +#: services/HyperV_enterprise/HyperVProvider.py:84 +#: services/OVirt/OVirtProvider.py:94 services/Sample/SampleService.py:131 +#: services/Vmware_enterprise/ServiceProviderVC.py:31 +#: transports/HTML5RDP/HTML5RDP.py:65 transports/NX/NXTransport.py:62 +#: transports/NX/TSNXTransport.py:67 transports/RDP/RDPTransport.py:60 +#: transports/RDP/TSRDPTransport.py:64 +#: transports/RGS-enterprise/RGSTransport.py:43 +#: transports/RGS-enterprise/TRGSTransport.py:48 +#: transports/TSNX/TSNXTransport.py:67 web/forms/LoginForm.py:70 +msgid "Password" +msgstr "Senha" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:34 +#: auths/EDirectory_enterprise/Authenticator.py:64 +#: auths/RegexLdap/Authenticator.py:53 auths/SimpleLDAP/Authenticator.py:53 +msgid "Password of the ldap user" +msgstr "Senha do usuário ldap" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:35 +#: auths/EDirectory_enterprise/Authenticator.py:65 +#: auths/RegexLdap/Authenticator.py:54 auths/SimpleLDAP/Authenticator.py:54 +#: services/HyperV_enterprise/HyperVClusterProvider.py:93 +#: services/HyperV_enterprise/HyperVProvider.py:85 +#: services/OVirt/OVirtProvider.py:95 +#: services/Vmware_enterprise/ServiceProviderVC.py:32 +msgid "Timeout" +msgstr "Tempo limite" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:35 +#: auths/EDirectory_enterprise/Authenticator.py:65 +#: auths/RegexLdap/Authenticator.py:54 auths/SimpleLDAP/Authenticator.py:54 +msgid "Timeout in seconds of connection to LDAP" +msgstr "Tempo limite em segundos de conexão para LDAP" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:37 +msgid "Active Directory Authenticator" +msgstr "Autenticador do Active Directory" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:39 +msgid "Authenticate against Active Directory" +msgstr "Autenticar no Active Directory" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:48 +#: auths/EDirectory_enterprise/Authenticator.py:77 +#: auths/RegexLdap/Authenticator.py:72 auths/SimpleLDAP/Authenticator.py:73 +#: services/HyperV_enterprise/HyperVClusterProvider.py:91 +#: services/HyperV_enterprise/HyperVProvider.py:83 +#: services/OVirt/OVirtProvider.py:93 +#: services/Vmware_enterprise/ServiceProviderVC.py:30 +#: transports/HTML5RDP/HTML5RDP.py:64 transports/NX/NXTransport.py:61 +#: transports/NX/TSNXTransport.py:66 transports/RDP/RDPTransport.py:59 +#: transports/RDP/TSRDPTransport.py:63 +#: transports/RGS-enterprise/RGSTransport.py:42 +#: transports/RGS-enterprise/TRGSTransport.py:47 +#: transports/TSNX/TSNXTransport.py:66 web/forms/LoginForm.py:69 +msgid "Username" +msgstr "Nome de usuário" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:50 +#: auths/EDirectory_enterprise/Authenticator.py:79 +#: auths/RegexLdap/Authenticator.py:74 auths/SAML_enterprise/SAML.py:114 +#: auths/SimpleLDAP/Authenticator.py:75 +msgid "Group" +msgstr "Grupo" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:67 +#: auths/ActiveDirectory_enterprise/Authenticator.py:442 +msgid "Must specify the username in the form USERNAME@DOMAIN.DOM" +msgstr "Deve especificar o nome de usuário na forma USERNAME@DOMAIN.DOM" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:164 +#: auths/EDirectory_enterprise/Authenticator.py:123 +#: auths/RegexLdap/Authenticator.py:226 auths/SimpleLDAP/Authenticator.py:158 +msgid "Ldap connection error: " +msgstr "Erro de conexão LDAP: " + +#: auths/ActiveDirectory_enterprise/Authenticator.py:344 +#: auths/ActiveDirectory_enterprise/Authenticator.py:390 +#: auths/EDirectory_enterprise/Authenticator.py:243 +#: auths/EDirectory_enterprise/Authenticator.py:286 +#: auths/RegexLdap/Authenticator.py:303 auths/RegexLdap/Authenticator.py:346 +#: auths/SimpleLDAP/Authenticator.py:269 auths/SimpleLDAP/Authenticator.py:313 +msgid "Username not found" +msgstr "Nome de usuário não encontrado" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:377 +#: auths/SimpleLDAP/Authenticator.py:302 +msgid "Group not found" +msgstr "Grupo não encontrado" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:410 +#: auths/ActiveDirectory_enterprise/Authenticator.py:428 +#: auths/EDirectory_enterprise/Authenticator.py:303 +#: auths/RegexLdap/Authenticator.py:367 auths/SimpleLDAP/Authenticator.py:328 +#: auths/SimpleLDAP/Authenticator.py:342 +msgid "Too many results, be more specific" +msgstr "Muitos resultados, seja mais específico" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:451 +msgid "Domain seems to be incorrect, please check it" +msgstr "Domínio parece ser incorreta, por favor verifique-" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:456 +msgid "Ldap does not seem an Active Directory (do not have user objects)" +msgstr "Não parece um Active Directory LDAP (não têm objetos de usuário)" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:464 +msgid "Ldap does not seem an Active Directory (no not have group objects)" +msgstr "Não parece um Active Directory LDAP (não não têm objetos de grupo)" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:472 +msgid "" +"Ldap does not seem an Active Directory (do not have any user nor groups)" +msgstr "" +"Não parece um Active Directory LDAP (não tem nenhum usuário ou grupos)" + +#: auths/ActiveDirectory_enterprise/Authenticator.py:477 +#: auths/EDirectory_enterprise/Authenticator.py:358 +#: auths/RegexLdap/Authenticator.py:428 auths/SimpleLDAP/Authenticator.py:423 +msgid "Connection params seem correct, test was succesfully executed" +msgstr "Conexão params parecer corretas, teste foi com êxito executado" + +#: auths/EDirectory_enterprise/Authenticator.py:60 +msgid "EDirectory Server IP or Hostname" +msgstr "EDirectory Server IP ou nome do host" + +#: auths/EDirectory_enterprise/Authenticator.py:61 +#: auths/RegexLdap/Authenticator.py:50 auths/SimpleLDAP/Authenticator.py:50 +#: services/HyperV_enterprise/HyperVClusterProvider.py:90 +#: services/HyperV_enterprise/HyperVProvider.py:82 +#: services/Vmware_enterprise/ServiceProviderVC.py:29 +msgid "Port" +msgstr "Porto" + +#: auths/EDirectory_enterprise/Authenticator.py:61 +#: auths/RegexLdap/Authenticator.py:50 auths/SimpleLDAP/Authenticator.py:50 +msgid "Ldap port (389 for non ssl, 636 for ssl normally" +msgstr "Porta LDAP (389 para não ssl, 636 para ssl normalmente" + +#: auths/EDirectory_enterprise/Authenticator.py:62 +#: auths/RegexLdap/Authenticator.py:51 auths/SimpleLDAP/Authenticator.py:51 +msgid "" +"If checked, will use a ssl connection to ldap (if port is 389, will use in " +"fact port 636)" +msgstr "" +"Se marcada, usará uma conexão ssl para ldap (se a porta é 389, usar em porta " +"de fato 636)" + +#: auths/EDirectory_enterprise/Authenticator.py:63 +msgid "Admin user" +msgstr "Usuário admin" + +#: auths/EDirectory_enterprise/Authenticator.py:63 +msgid "Username with read privileges on the eDirectory" +msgstr "Nome de usuário com privilégios de leitura sobre o eDirectory" + +#: auths/EDirectory_enterprise/Authenticator.py:67 +msgid "eDirectory Authenticator" +msgstr "eDirectory autenticador" + +#: auths/EDirectory_enterprise/Authenticator.py:69 +msgid "Authenticate against eDirectory" +msgstr "Autenticar no eDirectory" + +#: auths/EDirectory_enterprise/Authenticator.py:323 +#: auths/RegexLdap/Authenticator.py:387 auths/SimpleLDAP/Authenticator.py:363 +msgid "Ldap search base is incorrect" +msgstr "Base de pesquisa LDAP está incorreta" + +#: auths/EDirectory_enterprise/Authenticator.py:328 +#: auths/RegexLdap/Authenticator.py:392 auths/SimpleLDAP/Authenticator.py:368 +msgid "Ldap user class seems to be incorrect (no user found by that class)" +msgstr "" +"Classe de usuário LDAP parece ser incorreto (nenhum usuário encontrado por " +"essa classe)" + +#: auths/EDirectory_enterprise/Authenticator.py:336 +#: auths/SimpleLDAP/Authenticator.py:384 +msgid "" +"Ldap user id attribute seems to be incorrect (no user found by that " +"attribute)" +msgstr "" +"Atributo de id de usuário LDAP parece ser incorreto (nenhum usuário " +"encontrado por isso atributo)" + +#: auths/EDirectory_enterprise/Authenticator.py:344 +msgid "Expected group attribute " +msgstr "Atributo esperado grupo " + +#: auths/EDirectory_enterprise/Authenticator.py:353 +msgid "" +"Ldap user class or user id attr is probably wrong (Ldap is an eDirectory?)" +msgstr "" +"LDAP usuário classe ou usuário id attr provavelmente está errado (Ldap é do eDirectory?)" + #: auths/IP/Authenticator.py:48 auths/IP/Authenticator.py:50 msgid "IP Authenticator" msgstr "Autenticador IP" @@ -143,69 +392,14 @@ msgstr "Se marcada, o host será invertida dns" msgid "Internal structures seems ok" msgstr "Estruturas internas parece ok" -#: auths/RegexLdap/Authenticator.py:49 auths/SimpleLDAP/Authenticator.py:49 -#: services/OVirt/OVirtProvider.py:92 -msgid "Host" -msgstr "Host" - #: auths/RegexLdap/Authenticator.py:49 msgid "Ldap Server Host" msgstr "Host do servidor LDAP" -#: auths/RegexLdap/Authenticator.py:50 auths/SimpleLDAP/Authenticator.py:50 -msgid "Port" -msgstr "Porto" - -#: auths/RegexLdap/Authenticator.py:50 auths/SimpleLDAP/Authenticator.py:50 -msgid "Ldap port (389 for non ssl, 636 for ssl normally" -msgstr "Porta LDAP (389 para não ssl, 636 para ssl normalmente" - -#: auths/RegexLdap/Authenticator.py:51 auths/SimpleLDAP/Authenticator.py:51 -msgid "Use SSL" -msgstr "Uso SSL" - -#: auths/RegexLdap/Authenticator.py:51 auths/SimpleLDAP/Authenticator.py:51 -msgid "" -"If checked, will use a ssl connection to ldap (if port is 389, will use in " -"fact port 636)" -msgstr "" -"Se marcada, usará uma conexão ssl para ldap (se a porta é 389, usar em porta " -"de fato 636)" - -#: auths/RegexLdap/Authenticator.py:52 auths/SimpleLDAP/Authenticator.py:52 -msgid "Ldap User" -msgstr "Usuário LDAP" - #: auths/RegexLdap/Authenticator.py:52 auths/SimpleLDAP/Authenticator.py:52 msgid "Username with read privileges on the base selected" msgstr "Nome de usuário com privilégios de leitura da base selecionada" -#: auths/RegexLdap/Authenticator.py:53 auths/RegexLdap/Authenticator.py:76 -#: auths/SimpleLDAP/Authenticator.py:53 auths/SimpleLDAP/Authenticator.py:77 -#: core/auths/BaseAuthenticator.py:136 -#: osmanagers/WindowsOsManager/WinDomainOsManager.py:34 -#: 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/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" - -#: auths/RegexLdap/Authenticator.py:53 auths/SimpleLDAP/Authenticator.py:53 -msgid "Password of the ldap user" -msgstr "Senha do usuário ldap" - -#: auths/RegexLdap/Authenticator.py:54 auths/SimpleLDAP/Authenticator.py:54 -#: services/OVirt/OVirtProvider.py:95 -msgid "Timeout" -msgstr "Tempo limite" - -#: auths/RegexLdap/Authenticator.py:54 auths/SimpleLDAP/Authenticator.py:54 -msgid "Timeout in seconds of connection to LDAP" -msgstr "Tempo limite em segundos de conexão para LDAP" - #: auths/RegexLdap/Authenticator.py:55 auths/SimpleLDAP/Authenticator.py:55 msgid "Base" msgstr "Base" @@ -256,42 +450,6 @@ msgstr "Autenticador de Regex LDAP" msgid "Regular Expressions LDAP authenticator" 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/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" - -#: auths/RegexLdap/Authenticator.py:74 auths/SimpleLDAP/Authenticator.py:75 -msgid "Group" -msgstr "Grupo" - -#: auths/RegexLdap/Authenticator.py:226 auths/SimpleLDAP/Authenticator.py:158 -msgid "Ldap connection error: " -msgstr "Erro de conexão LDAP: " - -#: auths/RegexLdap/Authenticator.py:303 auths/RegexLdap/Authenticator.py:346 -#: auths/SimpleLDAP/Authenticator.py:269 auths/SimpleLDAP/Authenticator.py:313 -msgid "Username not found" -msgstr "Nome de usuário não encontrado" - -#: auths/RegexLdap/Authenticator.py:367 auths/SimpleLDAP/Authenticator.py:328 -#: auths/SimpleLDAP/Authenticator.py:342 -msgid "Too many results, be more specific" -msgstr "Muitos resultados, seja mais específico" - -#: auths/RegexLdap/Authenticator.py:387 auths/SimpleLDAP/Authenticator.py:363 -msgid "Ldap search base is incorrect" -msgstr "Base de pesquisa LDAP está incorreta" - -#: auths/RegexLdap/Authenticator.py:392 auths/SimpleLDAP/Authenticator.py:368 -msgid "Ldap user class seems to be incorrect (no user found by that class)" -msgstr "" -"Classe de usuário LDAP parece ser incorreto (nenhum usuário encontrado por " -"essa classe)" - #: auths/RegexLdap/Authenticator.py:401 msgid "" "Ldap user id attr is probably wrong (can't find any user with both " @@ -308,9 +466,116 @@ msgstr "" "Atributo de id de grupo LDAP parece ser incorreto (nenhum grupo encontrado " "por isso atributo)" -#: auths/RegexLdap/Authenticator.py:428 auths/SimpleLDAP/Authenticator.py:423 -msgid "Connection params seem correct, test was succesfully executed" -msgstr "Conexão params parecer corretas, teste foi com êxito executado" +#: auths/SAML_enterprise/SAML.py:80 +msgid "SAML Authenticator" +msgstr "Autenticador SAML" + +#: auths/SAML_enterprise/SAML.py:92 +msgid "SAML (v2.0) Authenticator" +msgstr "SAML (v 2.0) autenticador" + +#: auths/SAML_enterprise/SAML.py:111 templates/uds/internal_page.html:28 +msgid "User" +msgstr "Usuário" + +#: auths/SAML_enterprise/SAML.py:120 +msgid "Private key" +msgstr "Chave privada" + +#: auths/SAML_enterprise/SAML.py:121 +msgid "" +"Private key used for sign and encription, as generated in base 64 from " +"openssl" +msgstr "" +"A chave privada usada para sinal e encription, conforme gerado em base 64 de " +"OpenSSL" + +#: auths/SAML_enterprise/SAML.py:122 +msgid "Certificate" +msgstr "Certificado" + +#: auths/SAML_enterprise/SAML.py:123 +msgid "Server certificate (public), , as generated in base 64 from openssl" +msgstr "Certificado de servidor (público), como gerado em base 64 de openssl" + +#: auths/SAML_enterprise/SAML.py:124 +msgid "IDP Metadata" +msgstr "Metadados do IDP" + +#: auths/SAML_enterprise/SAML.py:125 +msgid "" +"You can enter here the URL or the IDP metadata or the metadata itself (xml)" +msgstr "" +"Você pode entrar aqui a URL ou os metadados do IDP ou os metadados em si (xml)" + +#: auths/SAML_enterprise/SAML.py:127 +msgid "Entity ID" +msgstr "ID da entidade" + +#: auths/SAML_enterprise/SAML.py:128 +msgid "ID of the SP. If left blank, this will be autogenerated from server URL" +msgstr "ID do SP. Se deixado em branco, este será gerado automaticamente do servidor URL" + +#: auths/SAML_enterprise/SAML.py:130 +msgid "User name attrs" +msgstr "Auditoria de nome de usuário" + +#: auths/SAML_enterprise/SAML.py:131 +msgid "Fields from where to extract user name" +msgstr "Campos de onde extrair o nome de usuário" + +#: auths/SAML_enterprise/SAML.py:133 +msgid "Group name attrs" +msgstr "Grupo nome attrs" + +#: auths/SAML_enterprise/SAML.py:134 +msgid "Fields from where to extract the groups" +msgstr "Campos de onde extrair os grupos" + +#: auths/SAML_enterprise/SAML.py:136 +msgid "Real name attrs" +msgstr "Nome verdadeiro attrs" + +#: auths/SAML_enterprise/SAML.py:137 +msgid "Fields from where to extract the real name" +msgstr "Campos de onde extrair o verdadeiro nome" + +#: auths/SAML_enterprise/SAML.py:160 +msgid "" +"Server certificate should be a valid PEM (PEM certificates starts with -----" +"BEGIN CERTIFICATE-----)" +msgstr "" +"Certificado de servidor deve ser um válido PEM (certificados PEM começa com--" +"CERTIFICADO DE BEGIN--)" + +#: auths/SAML_enterprise/SAML.py:165 +msgid "Invalid server certificate. " +msgstr "Certificado de servidor inválido. " + +#: auths/SAML_enterprise/SAML.py:168 +msgid "" +"Private key should be a valid PEM (PEM private keys starts with -----BEGIN " +"RSA PRIVATE KEY-----" +msgstr "" +"A chave privada deve ser um válido PEM (PEM chaves privadas começa com---BEGIN " +"RSA PRIVATE KEY--" + +#: auths/SAML_enterprise/SAML.py:197 +#, python-brace-format +msgid "Can't fetch url {0}: {1}" +msgstr "Não pode buscar url {0}: {1}" + +#: auths/SAML_enterprise/SAML.py:208 +msgid " (obtained from URL)" +msgstr " (obtido da URL)" + +#: auths/SAML_enterprise/SAML.py:209 +msgid "XML do not seems valid for IDP Metadata " +msgstr "XML não parece válido para metadados do IDP " + +#: auths/SAML_enterprise/SAML.py:227 +msgid "Can't access idp metadata" +msgstr "Não é possível acessar os metadados do idp" #: auths/Sample/SampleAuth.py:71 msgid "Sample Authenticator" @@ -372,24 +637,12 @@ msgstr "Autenticador de SimpleLDAP" msgid "Simple LDAP authenticator" msgstr "Autenticador LDAP simples" -#: auths/SimpleLDAP/Authenticator.py:302 -msgid "Group not found" -msgstr "Grupo não encontrado" - #: auths/SimpleLDAP/Authenticator.py:376 msgid "Ldap group class seems to be incorrect (no group found by that class)" msgstr "" "Classe do grupo LDAP parece ser incorreto (nenhum grupo encontrado por essa " "classe)" -#: auths/SimpleLDAP/Authenticator.py:384 -msgid "" -"Ldap user id attribute seems to be incorrect (no user found by that " -"attribute)" -msgstr "" -"Atributo de id de usuário LDAP parece ser incorreto (nenhum usuário " -"encontrado por isso atributo)" - #: auths/SimpleLDAP/Authenticator.py:401 msgid "" "Ldap user class or user id attr is probably wrong (can't find any user with " @@ -606,6 +859,66 @@ msgstr "Carga" msgid "Storage" msgstr "Armazenamento" +#: dispatchers/wyse_enterprise/views.py:111 +msgid "There are no authenticators available for login" +msgstr "Não há nenhum autenticadores disponível para login" + +#: dispatchers/wyse_enterprise/views.py:124 +#, python-brace-format +msgid "The authenticator {0} is not usable" +msgstr "O autenticador {0} não é utilizável" + +#: dispatchers/wyse_enterprise/views.py:131 xmlrpc/auths/AdminAuth.py:168 +msgid "Invalid credentials" +msgstr "Credenciais inválidas" + +#: dispatchers/wyse_enterprise/views.py:139 +#, python-brace-format +msgid "The domain {0} does not exists" +msgstr "O domínio {0} não existe" + +#: dispatchers/wyse_enterprise/views.py:200 +msgid "No services available" +msgstr "Nenhum serviço disponível" + +#: dispatchers/wyse_enterprise/views.py:215 +#: dispatchers/wyse_enterprise/views.py:309 +msgid "Invalid session" +msgstr "Sessão inválida" + +#: dispatchers/wyse_enterprise/views.py:219 +#: dispatchers/wyse_enterprise/views.py:313 +msgid "Invalid authorization" +msgstr "Autorização inválida" + +#: dispatchers/wyse_enterprise/views.py:230 +#: dispatchers/wyse_enterprise/views.py:319 +msgid "Invalid request" +msgstr "Pedido inválido" + +#: dispatchers/wyse_enterprise/views.py:233 +#: dispatchers/wyse_enterprise/views.py:322 +msgid "Invalid credentials used" +msgstr "Inválido credenciais usadas" + +#: dispatchers/wyse_enterprise/views.py:254 +#: dispatchers/wyse_enterprise/views.py:257 web/errors.py:62 +msgid "Service not found" +msgstr "Serviço não encontrado" + +#: dispatchers/wyse_enterprise/views.py:271 web/errors.py:61 +msgid "Transport not found" +msgstr "Transporte não encontrado" + +#: dispatchers/wyse_enterprise/views.py:275 +#: dispatchers/wyse_enterprise/views.py:282 +#: dispatchers/wyse_enterprise/views.py:287 +#: templates/uds/service_not_ready.html:6 +msgid "Service not ready at this moment. Please, try again in a while." +msgstr "" +"Serviço não está pronto, neste momento. Por favor, tente novamente em " +"instantes." + #: osmanagers/LinuxOsManager/LinuxOsManager.py:45 msgid "Linux OS Manager" msgstr "Gerente de sistema operacional Linux" @@ -657,6 +970,8 @@ msgstr "" #: osmanagers/WindowsOsManager/WinDomainOsManager.py:32 #: transports/HTML5RDP/HTML5RDP.py:66 transports/RDP/RDPTransport.py:61 #: transports/RDP/TSRDPTransport.py:65 +#: transports/RGS-enterprise/RGSTransport.py:44 +#: transports/RGS-enterprise/TRGSTransport.py:49 msgid "Domain" msgstr "Domínio" @@ -807,6 +1122,205 @@ msgstr "" "Ator de UDS para máquinas windows (importante!!!! Requer o .net framework " "3.5 SP1)" +#: services/HyperV_enterprise/HyperVClusterLinkedService.py:51 +msgid "HyperV Cluster Linked Clone (Experimental)" +msgstr "Cluster Hyper-v ligada Clone (Experimental)" + +#: services/HyperV_enterprise/HyperVClusterLinkedService.py:55 +#: services/HyperV_enterprise/HyperVLinkedService.py:58 +msgid "Hyper Services based on templates and differential disks (experimental)" +msgstr "Hiper serviços baseados em modelos e discos diferenciais (experimentais)" + +#: services/HyperV_enterprise/HyperVClusterLinkedService.py:72 +#: services/HyperV_enterprise/HyperVLinkedService.py:75 +#: services/OVirt/OVirtLinkedService.py:77 +#: services/Vmware_enterprise/VCLinkedCloneService.py:72 +msgid "Number of desired machines to keep running waiting for a user" +msgstr "" +"Número de máquinas desejados para continuar funcionando à espera de um " +"usuário" + +#: services/HyperV_enterprise/HyperVClusterLinkedService.py:78 +#: services/HyperV_enterprise/HyperVLinkedService.py:81 +#: services/OVirt/OVirtLinkedService.py:83 +#: services/Vmware_enterprise/VCLinkedCloneService.py:74 +msgid "Number of desired machines to keep suspended waiting for use" +msgstr "Número de máquinas desejados manter suspenso à espera de uso" + +#: services/HyperV_enterprise/HyperVClusterLinkedService.py:94 +#: services/HyperV_enterprise/HyperVLinkedService.py:97 +#: services/OVirt/OVirtLinkedService.py:99 +#: services/Vmware_enterprise/VCLinkedCloneService.py:50 +msgid "Base Machine" +msgstr "Máquina base" + +#: services/HyperV_enterprise/HyperVClusterLinkedService.py:94 +#: services/HyperV_enterprise/HyperVLinkedService.py:97 +#: services/OVirt/OVirtLinkedService.py:99 +msgid "Service base machine" +msgstr "Máquina base de serviço" + +#: services/HyperV_enterprise/HyperVClusterLinkedService.py:95 +#: services/HyperV_enterprise/HyperVLinkedService.py:98 +#: services/Vmware_enterprise/VCLinkedCloneService.py:38 +msgid "Network" +msgstr "Rede" + +#: services/HyperV_enterprise/HyperVClusterLinkedService.py:96 +#: services/HyperV_enterprise/HyperVLinkedService.py:99 +#: services/Vmware_enterprise/VCLinkedCloneService.py:39 +msgid "" +"If more than 1 interface is found in machine, use one on this network as main" +msgstr "" +"Se mais de 1 relação encontra-se na máquina, utilize um nesta rede como principal" + +#: services/HyperV_enterprise/HyperVClusterLinkedService.py:98 +#: services/HyperV_enterprise/HyperVLinkedService.py:101 +#: services/OVirt/OVirtLinkedService.py:112 +#: services/Vmware_enterprise/VCLinkedCloneService.py:51 +msgid "Memory (Mb)" +msgstr "Memória (Mb)" + +#: services/HyperV_enterprise/HyperVClusterLinkedService.py:99 +#: services/HyperV_enterprise/HyperVLinkedService.py:102 +#: services/Vmware_enterprise/VCLinkedCloneService.py:52 +msgid "Memory for machines deployed from this service" +msgstr "Memória para máquinas implantado a partir deste serviço" + +#: services/HyperV_enterprise/HyperVClusterLinkedService.py:100 +#: services/HyperV_enterprise/HyperVLinkedService.py:103 +msgid "Datastore Drives" +msgstr "Unidades de armazenamento de dados" + +#: services/HyperV_enterprise/HyperVClusterLinkedService.py:101 +#: services/HyperV_enterprise/HyperVLinkedService.py:104 +msgid "Datastores where to put incrementals & publications" +msgstr "Armazenamentos de dados onde colocar incrementais & publicações" + +#: services/HyperV_enterprise/HyperVClusterLinkedService.py:102 +#: services/HyperV_enterprise/HyperVLinkedService.py:105 +#: services/OVirt/OVirtLinkedService.py:118 +#: services/Vmware_enterprise/VCLinkedCloneService.py:55 +msgid "Machine Names" +msgstr "Nomes de máquina" + +#: services/HyperV_enterprise/HyperVClusterLinkedService.py:102 +#: services/HyperV_enterprise/HyperVLinkedService.py:105 +#: services/Vmware_enterprise/VCLinkedCloneService.py:55 +msgid "Base name for clones from this machine" +msgstr "Nome de base para clones desta máquina" + +#: services/HyperV_enterprise/HyperVClusterLinkedService.py:103 +#: services/HyperV_enterprise/HyperVLinkedService.py:106 +#: services/OVirt/OVirtLinkedService.py:119 +#: services/Vmware_enterprise/VCLinkedCloneService.py:56 +msgid "Name Length" +msgstr "Comprimento do nome do" + +#: services/HyperV_enterprise/HyperVClusterLinkedService.py:104 +#: services/HyperV_enterprise/HyperVLinkedService.py:107 +#: services/OVirt/OVirtLinkedService.py:120 +#: services/Vmware_enterprise/VCLinkedCloneService.py:57 +msgid "Length of numeric part for the names of this machines (betwen 3 and 6" +msgstr "" +"Comprimento da parte numérica para os nomes desta máquinas (entre 3 e 6" + +#: services/HyperV_enterprise/HyperVClusterLinkedService.py:116 +#: services/HyperV_enterprise/HyperVLinkedService.py:119 +#: services/OVirt/OVirtLinkedService.py:143 +#: services/Vmware_enterprise/VCLinkedCloneService.py:95 +msgid "The length of basename plus length must not be greater than 15" +msgstr "O comprimento de basename mais comprimento não deve ser superior a 15" + +#: services/HyperV_enterprise/HyperVClusterLinkedService.py:118 +#: services/HyperV_enterprise/HyperVLinkedService.py:121 +#: services/OVirt/OVirtLinkedService.py:145 +#: services/Vmware_enterprise/VCLinkedCloneService.py:97 +msgid "The machine name can't be only numbers" +msgstr "O nome da máquina não pode ser apenas números" + +#: services/HyperV_enterprise/HyperVClusterProvider.py:64 +msgid "HyperV Cluster Provider" +msgstr "Provedor de Cluster Hyper-v" + +#: services/HyperV_enterprise/HyperVClusterProvider.py:68 +msgid "HyperV Cluster Service Provider" +msgstr "Provedor de serviço de Cluster Hyper-v" + +#: services/HyperV_enterprise/HyperVClusterProvider.py:89 +#: services/HyperV_enterprise/HyperVProvider.py:81 +msgid "HyperV Server IP or Hostname (must enable first WSMAN access)" +msgstr "Hyper-v Server IP ou nome do host (habilite o primeiro acesso do WS-Management)" + +#: services/HyperV_enterprise/HyperVClusterProvider.py:90 +#: services/HyperV_enterprise/HyperVProvider.py:82 +msgid "WSMan Port (normally 5985)" +msgstr "WSMan Porto (normalmente 5985)" + +#: services/HyperV_enterprise/HyperVClusterProvider.py:91 +#: services/HyperV_enterprise/HyperVProvider.py:83 +msgid "User with valid privileges on HyperV Server" +msgstr "Usuário com privilégios válidos no servidor Hyper-v" + +#: services/HyperV_enterprise/HyperVClusterProvider.py:92 +#: services/HyperV_enterprise/HyperVProvider.py:84 +msgid "Password of the user of HyperV" +msgstr "Senha do usuário do Hyper-v" + +#: services/HyperV_enterprise/HyperVClusterProvider.py:93 +#: services/HyperV_enterprise/HyperVProvider.py:85 +msgid "Timeout in seconds of connection to HyperV" +msgstr "Tempo limite em segundos de conexão com o Hyper-v" + +#: services/HyperV_enterprise/HyperVClusterProvider.py:94 +#: services/HyperV_enterprise/HyperVProvider.py:86 +#: services/OVirt/OVirtProvider.py:96 +#: services/Vmware_enterprise/ServiceProviderVC.py:33 +msgid "Macs range" +msgstr "Gama de Macs" + +#: services/HyperV_enterprise/HyperVClusterProvider.py:95 +#: services/HyperV_enterprise/HyperVProvider.py:87 +#: services/OVirt/OVirtProvider.py:97 +msgid "Range of valids macs for created machines" +msgstr "Gama de macs iríamos procurar para máquinas criadas" + +#: services/HyperV_enterprise/HyperVClusterProvider.py:132 +msgid "The selected server is not a cluster" +msgstr "O servidor selecionado não é um cluster" + +#: services/HyperV_enterprise/HyperVClusterProvider.py:299 +#: services/HyperV_enterprise/HyperVProvider.py:249 +#: services/OVirt/OVirtProvider.py:399 +msgid "Connection test successful" +msgstr "Teste de conexão bem sucedida" + +#: services/HyperV_enterprise/HyperVClusterProvider.py:300 +#: services/HyperV_enterprise/HyperVProvider.py:250 +#: services/OVirt/OVirtProvider.py:400 +#: services/Vmware_enterprise/ServiceProviderVC.py:120 +msgid "Connection failed. Check connection params" +msgstr "Falhado na conexão. Verifique a conexão params" + +#: services/HyperV_enterprise/HyperVClusterPublication.py:97 +#: services/HyperV_enterprise/HyperVPublication.py:96 +#: services/OVirt/OVirtPublication.py:85 +#, python-brace-format +msgid "UDS pub for {0} at {1}" +msgstr "Pub UDS por {0} em {1}" + +#: services/HyperV_enterprise/HyperVLinkedService.py:54 +msgid "HyperV Linked Clone (Experimental)" +msgstr "HyperV vinculado Clone (Experimental)" + +#: services/HyperV_enterprise/HyperVProvider.py:62 +msgid "HyperV Platform Provider" +msgstr "Provedor de plataforma do Hyper-v" + +#: services/HyperV_enterprise/HyperVProvider.py:66 +msgid "HyperV platform service provider" +msgstr "Provedor de serviços de plataforma do Hyper-v" + #: services/OVirt/OVirtLinkedService.py:56 msgid "oVirt Linked Clone (Experimental)" msgstr "oVirt Clone Linked (Experimental)" @@ -815,24 +1329,6 @@ msgstr "oVirt Clone Linked (Experimental)" msgid "oVirt Services based on templates and COW (experimental)" msgstr "oVirt serviços baseados em modelos e vaca (experimental)" -#: services/OVirt/OVirtLinkedService.py:77 -msgid "Number of desired machines to keep running waiting for a user" -msgstr "" -"Número de máquinas desejados para continuar funcionando à espera de um " -"usuário" - -#: services/OVirt/OVirtLinkedService.py:83 -msgid "Number of desired machines to keep suspended waiting for use" -msgstr "Número de máquinas desejados manter suspenso à espera de uso" - -#: services/OVirt/OVirtLinkedService.py:99 -msgid "Base Machine" -msgstr "Máquina base" - -#: services/OVirt/OVirtLinkedService.py:99 -msgid "Service base machine" -msgstr "Máquina base de serviço" - #: services/OVirt/OVirtLinkedService.py:100 msgid "Cluster" msgstr "Cluster" @@ -850,10 +1346,6 @@ msgid "Datastore domain where to publish and put incrementals" msgstr "" "Armazenamento de dados domínio onde publicar e colocar backups incrementais" -#: services/OVirt/OVirtLinkedService.py:112 -msgid "Memory (Mb)" -msgstr "Memória (Mb)" - #: services/OVirt/OVirtLinkedService.py:113 msgid "Memory assigned to machines" msgstr "Memória atribuída às máquinas" @@ -866,19 +1358,6 @@ msgstr "Garantidas (Mb) de memória" msgid "Physical memory guaranteed to machines" msgstr "Memória física a garantia de máquinas" -#: services/OVirt/OVirtLinkedService.py:118 -msgid "Machine Names" -msgstr "Nomes de máquina" - -#: services/OVirt/OVirtLinkedService.py:119 -msgid "Name Length" -msgstr "Comprimento do nome do" - -#: services/OVirt/OVirtLinkedService.py:120 -msgid "Length of numeric part for the names of this machines (betwen 3 and 6" -msgstr "" -"Comprimento da parte numérica para os nomes desta máquinas (entre 3 e 6" - #: services/OVirt/OVirtLinkedService.py:122 msgid "Display" msgstr "Exposição" @@ -887,14 +1366,6 @@ msgstr "Exposição" msgid "Display type (only for administration pourposses)" msgstr "Tipo de exibição (somente para pourposses de administração)" -#: services/OVirt/OVirtLinkedService.py:143 -msgid "The length of basename plus length must not be greater than 15" -msgstr "O comprimento de basename mais comprimento não deve ser superior a 15" - -#: services/OVirt/OVirtLinkedService.py:145 -msgid "The machine name can't be only numbers" -msgstr "O nome da máquina não pode ser apenas números" - #: services/OVirt/OVirtProvider.py:73 msgid "oVirt Platform Provider" msgstr "oVirt provedor de plataforma" @@ -917,30 +1388,10 @@ msgid "Password of the user of oVirt" msgstr "Senha do usuário do oVirt" #: services/OVirt/OVirtProvider.py:95 +#: services/Vmware_enterprise/ServiceProviderVC.py:32 msgid "Timeout in seconds of connection to VC" msgstr "Tempo limite em segundos de conexão para VC" -#: services/OVirt/OVirtProvider.py:96 -msgid "Macs range" -msgstr "Gama de Macs" - -#: services/OVirt/OVirtProvider.py:97 -msgid "Range of valids macs for created machines" -msgstr "Gama de macs iríamos procurar para máquinas criadas" - -#: services/OVirt/OVirtProvider.py:399 -msgid "Connection test successful" -msgstr "Teste de conexão bem sucedida" - -#: services/OVirt/OVirtProvider.py:400 -msgid "Connection failed. Check connection params" -msgstr "Falhado na conexão. Verifique a conexão params" - -#: services/OVirt/OVirtPublication.py:85 -#, python-brace-format -msgid "UDS pub for {0} at {1}" -msgstr "Pub UDS por {0} em {1}" - #: services/PhysicalMachines/IPMachineDeployed.py:57 msgid "IP " msgstr "IP " @@ -1057,6 +1508,121 @@ msgstr "Cache L2 para elementos fictícios" msgid "List of names" msgstr "Lista de nomes" +#: services/Vmware_enterprise/Helpers.py:72 +msgid "Local" +msgstr "Local" + +#: services/Vmware_enterprise/Helpers.py:74 +msgid "Remote" +msgstr "Remoto" + +#: services/Vmware_enterprise/PublicationVC.py:37 +msgid "Publication" +msgstr "Publicação" + +#: services/Vmware_enterprise/PublicationVC.py:38 +#, python-brace-format +msgid "UDS Publication for {0} created at {1}" +msgstr "Publicação de UDS para {0} criada em {1}" + +#: services/Vmware_enterprise/ServiceProviderVC.py:28 +msgid "VMWare VC Server IP or Hostname" +msgstr "VMWare Server VC IP ou nome do host" + +#: services/Vmware_enterprise/ServiceProviderVC.py:29 +msgid "VMWare VC Server Port (usually 443)" +msgstr "Porta do servidor VMWare VC (geralmente 443)" + +#: services/Vmware_enterprise/ServiceProviderVC.py:30 +msgid "User with valid privileges on VC" +msgstr "Usuário com privilégios válidos em VC" + +#: services/Vmware_enterprise/ServiceProviderVC.py:31 +msgid "Password of the user of the VC" +msgstr "Senha do usuário do VC" + +#: services/Vmware_enterprise/ServiceProviderVC.py:34 +msgid "" +"Range of valids macs for created machines. Must be inside " +"00:50:56:00:00:00-00:50:56:3F:FF:FF" +msgstr "" +"Gama de macs iríamos procurar para máquinas criadas. Deve estar lá dentro " +"00:50:56:00:00:00-00:50:56:3F:FF:FF" + +#: services/Vmware_enterprise/ServiceProviderVC.py:39 +msgid "VMWare Virtual Center Provider" +msgstr "VMWare Virtual Center provedor" + +#: services/Vmware_enterprise/ServiceProviderVC.py:41 +msgid "Provides connection to Virtual Center Services" +msgstr "Fornece a conexão ao Virtual Center serviços" + +#: services/Vmware_enterprise/ServiceProviderVC.py:110 +msgid "Error testing connection" +msgstr "Ligação de teste de erro" + +#: services/Vmware_enterprise/ServiceProviderVC.py:113 +msgid "VmwareVC Provider: " +msgstr "Provedor de VmwareVC: " + +#: services/Vmware_enterprise/ServiceProviderVC.py:119 +msgid "Connection params ok" +msgstr "Conexão params ok" + +#: services/Vmware_enterprise/VCLinkedCloneService.py:30 +msgid "Datacenter" +msgstr "Datacenter" + +#: services/Vmware_enterprise/VCLinkedCloneService.py:36 +msgid "Datacenter containing base machine" +msgstr "Máquina de base contendo datacenter" + +#: services/Vmware_enterprise/VCLinkedCloneService.py:40 +msgid "Pub. Resource Pool" +msgstr "Pub. Pool de recursos" + +#: services/Vmware_enterprise/VCLinkedCloneService.py:40 +msgid "Resource Pool where deploy clones" +msgstr "Pool de recursos onde implantar clones" + +#: services/Vmware_enterprise/VCLinkedCloneService.py:41 +msgid "Clones Folder" +msgstr "Pasta de clones" + +#: services/Vmware_enterprise/VCLinkedCloneService.py:41 +msgid "Folder where deploy clones" +msgstr "Pasta onde implantar clones" + +#: services/Vmware_enterprise/VCLinkedCloneService.py:42 +msgid "Resource Pool" +msgstr "Pool de recursos" + +#: services/Vmware_enterprise/VCLinkedCloneService.py:48 +msgid "Resource Pool containing base machine" +msgstr "Máquina contendo base Pool de recursos" + +#: services/Vmware_enterprise/VCLinkedCloneService.py:50 +msgid "Base machine for this service" +msgstr "Máquina de base para este serviço" + +#: services/Vmware_enterprise/VCLinkedCloneService.py:53 +msgid "Datastores" +msgstr "Armazenamentos de dados" + +#: services/Vmware_enterprise/VCLinkedCloneService.py:54 +msgid "Datastores where to put incrementals" +msgstr "Armazenamentos de dados onde colocar backups incrementais" + +#: services/Vmware_enterprise/VCLinkedCloneService.py:64 +msgid "VMWare Linked clone base" +msgstr "Base de clones vinculados da VMWare" + +#: services/Vmware_enterprise/VCLinkedCloneService.py:66 +msgid "" +"This service provides access to Linked Clones machines on a Virtual Center" +msgstr "" +"Este serviço fornece acesso a máquinas de Clones vinculados em um Virtual Center" + #: templates/404.html:3 templates/500.html:3 msgid "Page not found" msgstr "Página não encontrada" @@ -1117,10 +1683,6 @@ msgstr "IP" msgid "Transports" msgstr "Transportes" -#: templates/uds/internal_page.html:28 -msgid "User" -msgstr "Usuário" - #: templates/uds/internal_page.html:34 templates/uds/prefs.html:12 #: templates/uds/html5/snippets/navbar.html:39 msgid "Preferences" @@ -1158,12 +1720,6 @@ msgstr "Preferências do usuário UDS" msgid "Save Preferences" msgstr "Salvar preferências" -#: templates/uds/service_not_ready.html:6 -msgid "Service not ready at this moment. Please, try again in a while." -msgstr "" -"Serviço não está pronto, neste momento. Por favor, tente novamente em " -"instantes." - #: templates/uds/admin/snippets/navbar.html:6 #: templates/uds/html5/snippets/navbar.html:6 msgid "toggle navigation" @@ -1179,6 +1735,7 @@ msgid "Authenticators" msgstr "Autenticadores" #: templates/uds/admin/snippets/navbar.html:21 +#: templates/uds/admin/tmpl/connectivity.html:4 msgid "Connectivity" msgstr "Conectividade" @@ -1190,11 +1747,11 @@ msgstr "Serviços implantados" msgid "Configuration" msgstr "Configuração" -#: templates/uds/admin/snippets/navbar.html:56 +#: templates/uds/admin/snippets/navbar.html:57 msgid "Exit dashboard" msgstr "Painel de saída" -#: templates/uds/admin/snippets/navbar.html:57 +#: templates/uds/admin/snippets/navbar.html:58 #: templates/uds/html5/snippets/navbar.html:47 msgid "logout" msgstr "logout" @@ -1203,6 +1760,7 @@ msgstr "logout" msgid "administration of authenticators" msgstr "Administração de autenticadores" +#: templates/uds/admin/tmpl/connectivity.html:4 #: templates/uds/admin/tmpl/dashboard.html:4 msgid "overview" msgstr "Visão geral" @@ -1337,31 +1895,45 @@ msgstr "" #: transports/HTML5RDP/HTML5RDP.py:63 transports/NX/NXTransport.py:60 #: transports/NX/TSNXTransport.py:65 transports/RDP/RDPTransport.py:58 -#: transports/RDP/TSRDPTransport.py:62 transports/TSNX/TSNXTransport.py:65 +#: transports/RDP/TSRDPTransport.py:62 +#: transports/RGS-enterprise/RGSTransport.py:41 +#: transports/RGS-enterprise/TRGSTransport.py:46 +#: transports/TSNX/TSNXTransport.py:65 msgid "Empty creds" msgstr "Creds vazio" #: transports/HTML5RDP/HTML5RDP.py:63 transports/NX/NXTransport.py:60 #: transports/NX/TSNXTransport.py:65 transports/RDP/RDPTransport.py:58 -#: transports/RDP/TSRDPTransport.py:62 transports/TSNX/TSNXTransport.py:65 +#: transports/RDP/TSRDPTransport.py:62 +#: transports/RGS-enterprise/RGSTransport.py:41 +#: transports/RGS-enterprise/TRGSTransport.py:46 +#: 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/NX/TSNXTransport.py:66 transports/RDP/RDPTransport.py:59 -#: transports/RDP/TSRDPTransport.py:63 transports/TSNX/TSNXTransport.py:66 +#: transports/RDP/TSRDPTransport.py:63 +#: transports/RGS-enterprise/RGSTransport.py:42 +#: transports/RGS-enterprise/TRGSTransport.py:47 +#: 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/NX/TSNXTransport.py:67 transports/RDP/RDPTransport.py:60 -#: transports/RDP/TSRDPTransport.py:64 transports/TSNX/TSNXTransport.py:67 +#: transports/RDP/TSRDPTransport.py:64 +#: transports/RGS-enterprise/RGSTransport.py:43 +#: transports/RGS-enterprise/TRGSTransport.py:48 +#: 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" #: transports/HTML5RDP/HTML5RDP.py:66 transports/RDP/RDPTransport.py:61 #: transports/RDP/TSRDPTransport.py:65 +#: transports/RGS-enterprise/RGSTransport.py:44 +#: transports/RGS-enterprise/TRGSTransport.py:49 msgid "" "If not empty, this domain will be always used as credential (used as DOMAIN" "\\user)" @@ -1468,11 +2040,13 @@ 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/RGS-enterprise/TRGSTransport.py:43 #: transports/TSNX/TSNXTransport.py:62 msgid "Tunnel server" msgstr "Servidor de túnel" #: transports/NX/TSNXTransport.py:62 transports/RDP/TSRDPTransport.py:59 +#: transports/RGS-enterprise/TRGSTransport.py:43 #: transports/TSNX/TSNXTransport.py:62 msgid "" "IP or Hostname of tunnel server send to client device (\"public\" ip) and " @@ -1482,11 +2056,13 @@ msgstr "" "\"público\") e Port. (usar formato HOST: PORT)" #: transports/NX/TSNXTransport.py:63 transports/RDP/TSRDPTransport.py:60 +#: transports/RGS-enterprise/TRGSTransport.py:44 #: 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/RGS-enterprise/TRGSTransport.py:44 #: transports/TSNX/TSNXTransport.py:63 msgid "" "If not empty, this server will be used to check if service is running before " @@ -1496,6 +2072,7 @@ msgstr "" "sendo executado antes atribuí-la ao usuário. (usar formato HOST: PORT)" #: transports/NX/TSNXTransport.py:103 transports/RDP/TSRDPTransport.py:75 +#: transports/RGS-enterprise/TRGSTransport.py:71 #: 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" @@ -1597,7 +2174,7 @@ msgstr "Protocolo de área de trabalho remoto" msgid "In order to use this service, you should first install CoRD." msgstr "Para utilizar este serviço, você deve primeiro instalar o cabo." -#: transports/RDP/web.py:85 +#: transports/RDP/web.py:85 transports/RGS-enterprise/web.py:83 msgid "You can obtain it from" msgstr "Você pode obtê-lo de" @@ -1605,18 +2182,122 @@ msgstr "Você pode obtê-lo de" msgid "CoRD Website" msgstr "Site medula" +#: transports/RGS-enterprise/RGSTransport.py:34 +msgid "RGS Transport (direct)" +msgstr "RGS transporte (direto)" + +#: transports/RGS-enterprise/RGSTransport.py:36 +msgid "RGS Transport for direct connection" +msgstr "RGS transporte para conexão direta" + +#: transports/RGS-enterprise/RGSTransport.py:45 +#: transports/RGS-enterprise/TRGSTransport.py:50 +msgid "Image quality" +msgstr "Qualidade de imagem" + +#: transports/RGS-enterprise/RGSTransport.py:46 +#: transports/RGS-enterprise/TRGSTransport.py:51 +msgid "Quality of image codec (0-100)" +msgstr "Qualidade de codec de imagem (0-100)" + +#: transports/RGS-enterprise/RGSTransport.py:47 +#: transports/RGS-enterprise/TRGSTransport.py:52 +msgid "Adjustable Quality" +msgstr "Qualidade ajustável" + +#: transports/RGS-enterprise/RGSTransport.py:48 +#: transports/RGS-enterprise/TRGSTransport.py:53 +msgid "If checked, the image quality will be adjustable with bandwidth" +msgstr "Se marcada, a qualidade da imagem será ajustável com largura de banda" + +#: transports/RGS-enterprise/RGSTransport.py:49 +#: transports/RGS-enterprise/TRGSTransport.py:54 +msgid "Min. Adjustable Quality" +msgstr "Min. qualidade ajustável" + +#: transports/RGS-enterprise/RGSTransport.py:50 +#: transports/RGS-enterprise/TRGSTransport.py:55 +msgid "" +"The lowest image quality applied to images to maintain the minimum update " +"rate." +msgstr "" +"A qualidade de imagem mais baixa aplicada às imagens para manter a atualização mínima " +"taxa." + +#: transports/RGS-enterprise/RGSTransport.py:51 +#: transports/RGS-enterprise/TRGSTransport.py:56 +msgid "Adjustable Frame Rate" +msgstr "Taxa de Frame ajustável" + +#: transports/RGS-enterprise/RGSTransport.py:52 +#: transports/RGS-enterprise/TRGSTransport.py:57 +msgid "Update rate threshold to begin adjusting image quality" +msgstr "Limite de taxa de atualização para começar a ajustar a qualidade da imagem" + +#: transports/RGS-enterprise/RGSTransport.py:53 +#: transports/RGS-enterprise/TRGSTransport.py:58 +msgid "Match Local Resolution" +msgstr "Resolução Local de partida" + +#: transports/RGS-enterprise/RGSTransport.py:54 +#: transports/RGS-enterprise/TRGSTransport.py:59 +msgid "" +"Change the Sender's resolution to match the Receiver's resolution when " +"connecting" +msgstr "" +"Alterar a resolução do remetente para coincidir com a resolução do receptor quando " +"Conectando-se" + +#: transports/RGS-enterprise/RGSTransport.py:55 +#: transports/RGS-enterprise/TRGSTransport.py:60 +msgid "Redirect USB" +msgstr "Redirecionar USB" + +#: transports/RGS-enterprise/RGSTransport.py:56 +#: transports/RGS-enterprise/TRGSTransport.py:61 +msgid "If checked, the USB will be redirected." +msgstr "Se marcada, o USB será redirecionado." + +#: transports/RGS-enterprise/RGSTransport.py:57 +#: transports/RGS-enterprise/TRGSTransport.py:62 +msgid "Redirect Audio" +msgstr "Redirecionamento de áudio" + +#: transports/RGS-enterprise/RGSTransport.py:58 +#: transports/RGS-enterprise/TRGSTransport.py:63 +msgid "If checked, the Audio will be redirected." +msgstr "Se marcada, o áudio será redirecionado." + +#: transports/RGS-enterprise/RGSTransport.py:59 +#: transports/RGS-enterprise/TRGSTransport.py:64 +msgid "Redirect Mic" +msgstr "Redirecionar Mic" + +#: transports/RGS-enterprise/RGSTransport.py:60 +#: transports/RGS-enterprise/TRGSTransport.py:65 +msgid "If checked, the Mic will be redirected." +msgstr "Se marcada, o Mic será redirecionado." + +#: transports/RGS-enterprise/TRGSTransport.py:36 +msgid "RGS Transport (tunneled)" +msgstr "RGS transporte (um túnel)" + +#: transports/RGS-enterprise/TRGSTransport.py:38 +msgid "RGS Transport for tunneled connection" +msgstr "RGS transporte para ligação em túnel" + +#: transports/RGS-enterprise/web.py:82 +msgid "In order to use this service, you should first install RGS Receiver." +msgstr "Para utilizar este serviço, você deve primeiro instalar receptor RGS." + +#: transports/RGS-enterprise/web.py:83 +msgid "HP Website" +msgstr "Site da HP" + #: web/errors.py:60 msgid "Unknown error" msgstr "Erro desconhecido" -#: web/errors.py:61 -msgid "Transport not found" -msgstr "Transporte não encontrado" - -#: web/errors.py:62 -msgid "Service not found" -msgstr "Serviço não encontrado" - #: web/errors.py:63 xmlrpc/auths/AdminAuth.py:182 #: xmlrpc/auths/AdminAuth.py:188 msgid "Access denied" @@ -1687,10 +2368,6 @@ msgstr "Não é mais válidas credenciais" msgid "Administration" msgstr "Administração" -#: xmlrpc/auths/AdminAuth.py:168 -msgid "Invalid credentials" -msgstr "Credenciais inválidas" - #: xmlrpc/auths/Authenticators.py:107 msgid "Authenticator does not exists" msgstr "Autenticador não existe" diff --git a/server/src/uds/locale/pt/LC_MESSAGES/djangojs.mo b/server/src/uds/locale/pt/LC_MESSAGES/djangojs.mo index d0f64af2e192436ee0c4c22b53ab07861b30d98c..4c2e67d32bd7f25f0cffec2d2521acf2801c8d58 100644 GIT binary patch delta 819 zcmZ9JPe@cz6o>D7&lyK6d()tkrT8$lO*{s12t_w7-Bv4YQQ{(U6idfNi-$r`5EMKY ziVFi>h#MD!J0tARq81VDY$J%PiZQgA;Ws9#tHM|M6zXo-{H&FGT5-a!u z)$tzG4}L%i{f6}9PT)D{laycxFThq?UxN%+W@>>$7QY3rvc3bg{|RKclu0`MD|}q! zW8D(3;aS!nj9-oWu#Nan$VIs*o%W0Us_ejJdTE({Bk4=H&Z=FVxZ0An;>C2=FWl!$ zr>3X;XF9YlqJXO}nQrcX)9uNcaJ@tqei@f_h2Rt;^mAP9{$NW?Df+NFayRgo$fES88!9Lj6Kp(R6w zCr;^53Ym0@*-W8s=~j>y>Yz|@XeI|8ocjC6J9&8L{_Z{Zoc}xbzV|WuKDs&SwHaep zTw}t}gCY0<#^5K|1i!!_EJ5Y%K;>0zeBZ7Q;4R`csJfq)zbucSbWR|TIdhHI5c+2m z&S481mryTqP?2B@?1mjs@nQG?KDPVQHa-iRi7!GOUix8!X*Mr zjxpch5F5i(snZuw0@Dl;I0IYZYbc>S?1b+ikJ)BW-Djv5e6{gisK)o8>Z?!(t$9pT zaA*_$Kneea5~xFZG8a${TtNwiN$P+xsC5#mZiJx=rfvK=e8_qVs{SqHF$D(IWqc+* zOp11+0`*T+Eq_@4hWCh{LN3Y}KNslENOC|cOcyR|$JKf-uCuD@KCZT8I&Po;JrK_# z)i8a^J9e&H(Wj2%>Px16ZW{N{u-lCK0!jRCBVx=TOyB`LiiiCtZo2K+o8{$&SF72z s?CQFob6=K^-Ha1XjVB(BO^l|>iQrQwLe6!{{M`J4KNrfE>!E(\n" "Language-Team: LANGUAGE \n" @@ -18,14 +18,10 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: static/adm/js/gui-elements.js:7 +#: static/adm/js/gui-elements.js:33 msgid "Service Providers" msgstr "Prestadores de serviços" -#: 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" @@ -70,19 +66,19 @@ msgstr "Próxima" msgid "Previous" msgstr "Anterior" -#: static/adm/js/gui.js:80 +#: static/adm/js/gui.js:75 msgid "Deployed services" msgstr "Serviços implantados" -#: static/adm/js/gui.js:349 +#: static/adm/js/gui.js:360 msgid "Edit" msgstr "Editar" -#: static/adm/js/gui.js:358 +#: static/adm/js/gui.js:369 msgid "Delete" msgstr "Excluir" -#: static/adm/js/gui.js:367 +#: static/adm/js/gui.js:378 msgid "Refresh" msgstr "Atualização" @@ -161,3 +157,7 @@ msgstr "Novembro" #: static/adm/js/strftime.js:35 msgid "December" msgstr "Dezembro de" + +#: static/adm/js/tools.js:46 +msgid "Just a moment..." +msgstr "Só um momento..." diff --git a/server/src/uds/static/adm/js/api.js b/server/src/uds/static/adm/js/api.js index 9c0413c50..35247f897 100644 --- a/server/src/uds/static/adm/js/api.js +++ b/server/src/uds/static/adm/js/api.js @@ -1,5 +1,6 @@ +/* jshint strict: true */ (function(api, $, undefined) { - + "use strict"; // "public" methods api.doLog = function(data) { if (api.debug) { @@ -17,8 +18,11 @@ return new Cache(cacheName); }; - api.getJson = function(path, success_fnc) { - url = api.url_for(path); + api.getJson = function(path, options) { + options = options || {}; + var success_fnc = options.success || function(){}; + + var url = api.url_for(path); api.doLog('Ajax GET Json for "' + url + '"'); $.ajax({ url : url, @@ -27,10 +31,7 @@ success : function(data) { api.doLog('Success on "' + url + '".'); api.doLog('Received ' + JSON.stringify(data)); - if (success_fnc !== undefined) { - api.doLog('Executing success method'); - success_fnc(data); - } + success_fnc(data); }, beforeSend : function(request) { request.setRequestHeader(api.auth_header, api.token); @@ -39,12 +40,13 @@ }; // Public attributes - api.debug = false; + api.debug = true; }(window.api = window.api || {}, jQuery)); // Cache related function Cache(cacheName) { + "use strict"; api.cacheTable = api.cacheTable || {}; api.cacheTable[cacheName] = api.cacheTable[cacheName] || {}; @@ -55,6 +57,7 @@ function Cache(cacheName) { Cache.prototype = { get: function(key, not_found_fnc){ + "use strict"; not_found_fnc = not_found_fnc || function() { return undefined; }; if( this.cache[key] === undefined ) { @@ -64,7 +67,8 @@ Cache.prototype = { }, put: function(key, value) { - this.cache[key] = value; + "use strict"; + this.cache[key] = value; }, }; @@ -74,6 +78,7 @@ Cache.prototype = { // code :-) function BasicModelRest(path, options) { + "use strict"; options = options || {}; path = path || ''; // Requests paths @@ -85,34 +90,70 @@ function BasicModelRest(path, options) { } BasicModelRest.prototype = { + // options: + // cacheKey: '.' --> do not cache + // undefined -- > use path as key + // success: success fnc to execute in case of success + _requestPath: function(path, options) { + "use strict"; + options = options || {}; + var success_fnc = options.success || function(){api.doLog('success not provided for '+path);}; + var cacheKey = options.cacheKey || path; + + if( path == '.' ) { + success_fnc({}); + return; + } + + if (cacheKey != '.' && this.cache.get(cacheKey)) { + success_fnc(this.cache.get(cacheKey)); + } else { + var $this = this; + api.getJson(path, { + success: function(data) { + if( cacheKey != '.' ) { + $this.cache.put(cacheKey, data); + } + success_fnc(data); + }, + }); + } + }, get : function(options) { + "use strict"; options = options || {}; var path = this.getPath; if (options.id !== undefined) path += '/' + options.id; - api.getJson(path, options.success); + return this._requestPath(path, { + cacheKey: '.', // Right now, do not cache this + success: options.success, + + }); }, - types : function(success_fnc) { - // Cache types locally, will not change unless new broker version - sucess_fnc = success_fnc || function(data){}; - if( this.typesPath == '.' ) { - success_fnc({}); - return; - } - if (this.cache.get('types')) { - success_fnc(this.cache.get('types')); - } else { - var $this = this; - var path = this.typesPath; - api.getJson(path, function(data) { - $this.cache.put('types', data); - success_fnc(data); - }); - } + types : function(options) { + "use strict"; + options = options || {}; + return this._requestPath(this.typesPath, { + cacheKey: 'type', + success: options.success, + }); }, - - tableInfo : function(success_fnc) { + gui: function(typeName, options) { + "use strict"; + options = options || {}; + var path = [this.typesPath, typeName, 'gui'].join('/'); + return this._requestPath(path, { + cacheKey: typeName + '-gui', + success: options.success, + }); + }, + tableInfo : function(options) { + "use strict"; + options = options || {}; + var success_fnc = options.success || function(){api.doLog('success not provided for tableInfo');}; + var path = this.tableInfoPath; // Cache types locally, will not change unless new broker version if( this.cache.get(path) ) { @@ -123,14 +164,17 @@ BasicModelRest.prototype = { } var $this = this; - api.getJson(path, function(data) { - $this.cache.put(path, data); - success_fnc(data); + api.getJson(path, { + success: function(data) { + $this.cache.put(path, data); + success_fnc(data); + }, }); }, detail: function(id, child) { + "use strict"; return new DetailModelRestApi(this, id, child); } @@ -138,6 +182,7 @@ BasicModelRest.prototype = { // For REST of type /auth/[id]/users, /services/[id]/users, ... function DetailModelRestApi(parentApi, parentId, model) { + "use strict"; this.base = new BasicModelRest(undefined, { getPath: [parentApi.path, parentId, model].join('/'), typesPath: '.', // We do not has this on details @@ -148,13 +193,16 @@ function DetailModelRestApi(parentApi, parentId, model) { DetailModelRestApi.prototype = { // Generates a basic model with fixed methods for "detail" models get: function(options) { + "use strict"; return this.base.get(options); }, - types: function(success_fnc) { - return this.base.types(success_fnc); + types: function(options) { + "use strict"; + return this.base.types(options); }, - tableInfo: function(success_fnc) { - return this.base.tableInfo(success_fnc); + tableInfo: function(options) { + "use strict"; + return this.base.tableInfo(options); }, }; diff --git a/server/src/uds/static/adm/js/cache.js b/server/src/uds/static/adm/js/cache.js deleted file mode 100644 index d45d803ee..000000000 --- a/server/src/uds/static/adm/js/cache.js +++ /dev/null @@ -1,31 +0,0 @@ -(function(api, $, undefined) { - - api.cache = function(cacheName) { - return new Cache(cacheName); - }; - -}(window.api = window.api || {}, jQuery)); - -function Cache(cacheName) { - api.cacheTable = api.cacheTable || {}; - - api.cacheTable[cacheName] = api.cacheTable[cacheName] || {}; - - this.name = cacheName; - this.cache = api.cacheTable[cacheName]; -} - -Cache.prototype = { - get: function(key, not_found_fnc){ - not_found_fnc = not_found_fnc || function() { return undefined; }; - - if( this.cache[key] === undefined ) { - this.cache[key] = not_found_fnc(); - } - return this.cache[key]; - }, - - put: function(key, value) { - this.cache[key] = value; - }, -}; \ No newline at end of file diff --git a/server/src/uds/static/adm/js/gui.js b/server/src/uds/static/adm/js/gui.js index 96d2d7c1e..7f65d02b8 100644 --- a/server/src/uds/static/adm/js/gui.js +++ b/server/src/uds/static/adm/js/gui.js @@ -136,24 +136,26 @@ GuiElement.prototype = { "use strict"; gui.doLog('Initializing ' + this.name); var $this = this; - this.rest.types(function(data) { - var styles = ''; - $.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; } '; - styles += style; - }); - if (styles !== '') { - styles = ''; - $(styles).appendTo('head'); - } + this.rest.types({ + success: function(data) { + var styles = ''; + $.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; } '; + styles += style; + }); + if (styles !== '') { + styles = ''; + $(styles).appendTo('head'); + } + }, }); }, table : function(options) { @@ -211,287 +213,267 @@ GuiElement.prototype = { }; }; - 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; + this.rest.tableInfo({ + success: 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); } - 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(); - $('').appendTo('head'); - - $this.rest.get({ - success : function(data) { - var table = gui.table(title, tableId); - if (options.container === undefined) { - gui.appendToWorkspace('
' + table + '
'); - } else { - $('#' + options.container).empty(); - $('#' + options.container).append(table); - } - - var btns = []; - - if (options.buttons) { - - // methods for buttons click - var editFnc = function() { - gui.doLog('Edit'); - gui.doLog(this); - }; - var deleteFnc = function() { - gui.doLog('Delete'); - gui.doLog(this); - }; - - // What execute on refresh button push - var onRefresh = options.onRefresh || function(){}; - - var refreshFnc = function(btn) { - // Refreshes table content - var tbl = $('#' + tableId).dataTable(); - /*var width = $(btn).width(); - var saved = $(btn).html(); - $(btn).addClass('disabled').html('') - .width(width);*/ - if( data.length > 1000 ) - api.tools.blockUI(); + }); + // 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(); + $('').appendTo('head'); + + $this.rest.get({ + success : function(data) { + var table = gui.table(title, tableId); + if (options.container === undefined) { + gui.appendToWorkspace('
' + table + '
'); + } else { + $('#' + options.container).empty(); + $('#' + options.container).append(table); + } + + var btns = []; + + if (options.buttons) { + + // methods for buttons click + var editFnc = function() { + gui.doLog('Edit'); + gui.doLog(this); + }; + var deleteFnc = function() { + gui.doLog('Delete'); + gui.doLog(this); + }; - onRefresh($this); - - $this.rest.get({ - success : function(data) { - /*$(btn).removeClass('disabled').width('').html(saved);*/ - setTimeout( function() { - tbl.fnClearTable(); - tbl.fnAddData(data); - api.tools.unblockUI(); - }, 0); + // What execute on refresh button push + var onRefresh = options.onRefresh || function(){}; + + var refreshFnc = function(btn) { + // Refreshes table content + var tbl = $('#' + tableId).dataTable(); + /*var width = $(btn).width(); + var saved = $(btn).html(); + $(btn).addClass('disabled').html('') + .width(width);*/ + if( data.length > 1000 ) + api.tools.blockUI(); + + onRefresh($this); + + $this.rest.get({ + success : function(data) { + /*$(btn).removeClass('disabled').width('').html(saved);*/ + setTimeout( function() { + tbl.fnClearTable(); + tbl.fnAddData(data); + api.tools.unblockUI(); + }, 0); + } + }); + }; + + // methods for buttons on row select + var editSelected = function(btn, obj, node) { + var sel = this.fnGetSelectedData(); + if (sel.length == 1) { + $(btn).removeClass('disabled').addClass('btn3d-success'); + } else { + $(btn).removeClass('btn3d-success').addClass('disabled'); } - }); - }; - - // methods for buttons on row select - var editSelected = function(btn, obj, node) { - var sel = this.fnGetSelectedData(); - if (sel.length == 1) { - $(btn).removeClass('disabled').addClass('btn3d-success'); - } else { - $(btn).removeClass('btn3d-success').addClass('disabled'); - } - }; - var deleteSelected = function(btn, obj, node) { - var sel = this.fnGetSelectedData(); - if (sel.length > 0) { - $(btn).removeClass('disabled').addClass('btn3d-warning'); - } else { - $(btn).removeClass('btn3d-warning').addClass('disabled'); - } - }; - - $.each(options.buttons, function(index, value) { - var btn; - switch (value) { - case 'edit': - btn = { - "sExtends" : "text", - "sButtonText" : gettext('Edit'), - "fnSelect" : editSelected, - "fnClick" : editFnc, - "sButtonClass" : "disabled btn3d btn3d-tables" - }; - break; - case 'delete': - btn = { - "sExtends" : "text", - "sButtonText" : gettext('Delete'), - "fnSelect" : deleteSelected, - "fnClick" : deleteFnc, - "sButtonClass" : "disabled btn3d btn3d-tables" - }; - break; - case 'refresh': - btn = { - "sExtends" : "text", - "sButtonText" : gettext('Refresh'), - "fnClick" : refreshFnc, - "sButtonClass" : "btn3d-primary btn3d btn3d-tables" - }; - break; - case 'xls': - btn = { - "sExtends" : "text", - "sButtonText" : 'xls', - "fnClick" : function(){ - api.templates.get('spreadsheet', function(tmpl) { - var styles = { 'bold': 's21', }; - var uri = 'data:application/vnd.ms-excel;base64,', - base64 = function(s) { return window.btoa(unescape(encodeURIComponent(s))); }; - - var headings = [], rows = []; - $.each(columns, function(index, heading){ - if( heading.bVisible === false ) { - return; - } - headings.push(api.spreadsheet.cell(heading.sTitle, 'String', styles.bold)); - }); - rows.push(api.spreadsheet.row(headings)); - $.each(data, function(index, row) { - var cells = []; - $.each(columns, function(index, col){ - if( col.bVisible === false ) { + }; + var deleteSelected = function(btn, obj, node) { + var sel = this.fnGetSelectedData(); + if (sel.length > 0) { + $(btn).removeClass('disabled').addClass('btn3d-warning'); + } else { + $(btn).removeClass('btn3d-warning').addClass('disabled'); + } + }; + + $.each(options.buttons, function(index, value) { + var btn; + switch (value) { + case 'edit': + btn = { + "sExtends" : "text", + "sButtonText" : gettext('Edit'), + "fnSelect" : editSelected, + "fnClick" : editFnc, + "sButtonClass" : "disabled btn3d btn3d-tables" + }; + break; + case 'delete': + btn = { + "sExtends" : "text", + "sButtonText" : gettext('Delete'), + "fnSelect" : deleteSelected, + "fnClick" : deleteFnc, + "sButtonClass" : "disabled btn3d btn3d-tables" + }; + break; + case 'refresh': + btn = { + "sExtends" : "text", + "sButtonText" : gettext('Refresh'), + "fnClick" : refreshFnc, + "sButtonClass" : "btn3d-primary btn3d btn3d-tables" + }; + break; + case 'xls': + btn = { + "sExtends" : "text", + "sButtonText" : 'xls', + "fnClick" : function(){ + api.templates.get('spreadsheet', function(tmpl) { + var styles = { 'bold': 's21', }; + var uri = 'data:application/vnd.ms-excel;base64,', + base64 = function(s) { return window.btoa(unescape(encodeURIComponent(s))); }; + + var headings = [], rows = []; + $.each(columns, function(index, heading){ + if( heading.bVisible === false ) { return; } - var type = col.sType == 'numeric' ? 'Number':'String'; - cells.push(api.spreadsheet.cell(row[col.mData], type)); + headings.push(api.spreadsheet.cell(heading.sTitle, 'String', styles.bold)); }); - rows.push(api.spreadsheet.row(cells)); + rows.push(api.spreadsheet.row(headings)); + $.each(data, function(index, row) { + var cells = []; + $.each(columns, function(index, col){ + if( col.bVisible === false ) { + return; + } + var type = col.sType == 'numeric' ? 'Number':'String'; + cells.push(api.spreadsheet.cell(row[col.mData], type)); + }); + rows.push(api.spreadsheet.row(cells)); + }); + + var ctx = { + creation_date: (new Date()).toISOString(), + worksheet: title, + columns_count: headings.length, + rows_count: rows.length, + rows: rows.join('\n') + }; + // window.location.href = uri + base64(api.templates.evaluate(tmpl, ctx)); + setTimeout( function() { + saveAs(new Blob([api.templates.evaluate(tmpl, ctx)], + {type: 'application/vnd.ms-excel'} ), title + '.xls'); + }, 20); }); - - var ctx = { - creation_date: (new Date()).toISOString(), - worksheet: title, - columns_count: headings.length, - rows_count: rows.length, - rows: rows.join('\n') - }; - // window.location.href = uri + base64(api.templates.evaluate(tmpl, ctx)); - setTimeout( function() { - saveAs(new Blob([api.templates.evaluate(tmpl, ctx)], - {type: 'application/vnd.ms-excel'} ), title + '.xls') - }, 20); - }); - }, - "sButtonClass" : "btn3d-info btn3d btn3d-tables" - }; - /*case 'csv': - btn = { - "sExtends" : "csv", - "sTitle" : title, - "sFileName" : title + '.csv', - }; - break;*/ - /*case 'pdf': - btn = { - "sExtends" : "pdf", - "sTitle" : title, - "sPdfMessage" : "Summary Info", - "fnCellRender": function(value, col, node, dattaIndex) { - // All tables handled by this needs an "id" on col 0 - // So, we return empty values for col 0 - if(col === 0) - return ''; - return value.toString().replace(/(<([^>]+)>)/ig, ''); - }, - "sFileName" : title + '.pdf', - "sPdfOrientation" : "portrait" - }; - break;*/ - } - - if (btn !== undefined) - btns.push(btn); + }, + "sButtonClass" : "btn3d-info btn3d btn3d-tables" + }; + } + + if (btn !== undefined) + btns.push(btn); + }); + } + + // Initializes oTableTools + var oTableTools = { + "aButtons" : btns + }; + if (options.rowSelect) { + oTableTools.sRowSelect = options.rowSelect; + } + if (options.onRowSelect) { + oTableTools.fnRowSelected = options.onRowSelect; + } + if (options.onRowDeselect) { + oTableTools.fnRowDeselected = options.onRowDeselect; + } + + $('#' + tableId).dataTable({ + "aaData" : data, + "aoColumns" : columns, + "oLanguage" : gui.dataTablesLanguage, + "oTableTools" : oTableTools, + // First is upper row, + // second row is lower + // (pagination) row + "sDom" : "<'row'<'col-xs-8'T><'col-xs-4'f>r>t<'row'<'col-xs-5'i><'col-xs-7'p>>", + }); + // Fix 3dbuttons + api.tools.fix3dButtons('#' + tableId + '_wrapper .btn-group-3d'); + // Fix form + //$('#' + tableId + '_filter input').addClass('form-control'); + if (options.scroll !== undefined ) { + var tableTop = $('#' + tableId).offset().top; + $('html, body').scrollTop(tableTop); + } + // if table rendered event + if( options.onLoad ) { + options.onLoad($this); + } } - - // Initializes oTableTools - var oTableTools = { - "aButtons" : btns - }; - if (options.rowSelect) { - oTableTools.sRowSelect = options.rowSelect; - } - if (options.onRowSelect) { - oTableTools.fnRowSelected = options.onRowSelect; - } - if (options.onRowDeselect) { - oTableTools.fnRowDeselected = options.onRowDeselect; - } - - $('#' + tableId).dataTable({ - "aaData" : data, - "aoColumns" : columns, - "oLanguage" : gui.dataTablesLanguage, - "oTableTools" : oTableTools, - // First is upper row, - // second row is lower - // (pagination) row - "sDom" : "<'row'<'col-xs-8'T><'col-xs-4'f>r>t<'row'<'col-xs-5'i><'col-xs-7'p>>", - - }); - // Fix 3dbuttons - api.tools.fix3dButtons('#' + tableId + '_wrapper .btn-group-3d'); - // Fix form - //$('#' + tableId + '_filter input').addClass('form-control'); - if (options.scroll !== undefined ) { - var tableTop = $('#' + tableId).offset().top; - $('html, body').scrollTop(tableTop); - } - // if table rendered event - if( options.onLoad ) { - options.onLoad($this); - } - } - }); + }); + }, + }); return '#' + tableId; } diff --git a/server/src/uds/static/adm/js/tools.js b/server/src/uds/static/adm/js/tools.js index 6418ae4fa..61c9eb198 100644 --- a/server/src/uds/static/adm/js/tools.js +++ b/server/src/uds/static/adm/js/tools.js @@ -43,7 +43,7 @@ }; tools.blockUI = function(message) { - message = message || '

' + gettext('Just a moment...') + '

' + message = message || '

' + gettext('Just a moment...') + '

'; $.blockUI({ message: message }); };