diff --git a/action/management/commands/create_default_states.py b/action/management/commands/create_default_states.py index 6daccb2..1995c4e 100644 --- a/action/management/commands/create_default_states.py +++ b/action/management/commands/create_default_states.py @@ -11,17 +11,22 @@ class Command(BaseCommand): def add_arguments(self, parser): parser.add_argument('institution_name', type=str, help='The name of the institution') + parser.add_argument( + 'language_code', + type=str, + help='The language code to set (e.g., "es", "en", "ca")', + ) def handle(self, *args, **kwargs): default_states = [ - _("INBOX"), - _("VISUAL INSPECTION"), - _("REPAIR"), - _("INSTALL"), - _("TEST"), - _("PACKAGING"), - _("DONATION"), - _("DISMANTLE") + "INBOX", + "VISUAL INSPECTION", + "REPAIR", + "INSTALL", + "TEST", + "PACKAGING", + "DONATION", + "DISMANTLE" ] institution_name = kwargs['institution_name'] @@ -32,6 +37,37 @@ class Command(BaseCommand): logger.error(txt, institution.name) return + # If using djangos localization framework for initial states, then we would need institution-wide languange preferences + lang_code = kwargs['language_code'] + match lang_code: + case "en": + pass + case "es": + default_states = [ + "ENTRADA", + "INSPECCION VISUAL", + "REPARACIÓN", + "INSTALADO", + "PRUEBAS", + "EMPAQUETADO", + "DONACION", + "DESMANTELADO" + ] + case "ca": + default_states = [ + "ENTRADA", + "INSPECCIÓ VISUAL", + "REPARACIÓ", + "INSTAL·LAT", + "PROVES", + "EMPAQUETAT", + "DONACIÓ", + "DESMANTELLAT" + ] + case _: + logger.error("Language not supported %s", lang_code) + return + for state in default_states: state_def, created = StateDefinition.objects.get_or_create( institution=institution, diff --git a/admin/templates/admin_panel.html b/admin/templates/admin_panel.html index 3dd5ed1..d5568fe 100644 --- a/admin/templates/admin_panel.html +++ b/admin/templates/admin_panel.html @@ -1,19 +1,30 @@ {% extends "base.html" %} {% load i18n %} + {% block content %} -
-
-

{{ subtitle }}

-
-
+
-
-
- - {% translate "Institution" %} - +
+
+
+
+
+ {% translate "Institution" %} +
+

+ {% translate "Edit and manage the institution's details and settings." %} +

+ +
+
+
-
+
{% endblock %} diff --git a/admin/templates/admin_users.html b/admin/templates/admin_users.html index 37fbf96..c68ef1d 100644 --- a/admin/templates/admin_users.html +++ b/admin/templates/admin_users.html @@ -1,36 +1,40 @@ {% extends "base.html" %} {% load i18n %} +{% block actions %} + + + + {% translate "New user" %} + +{% endblock %} + + {% block content %} -
-
-

{{ subtitle }}

-
- -
+

{{ subtitle }}

- - - - - - - - +
Emailis Admin
+ + + + + + - {% for u in users %} + - - - - - {% endfor %} + + + + {% endfor %}
{% trans "Email" %}{% trans "Admin" %}{% trans "Actions" %}
{{ u.email }}{{ u.is_admin }}
{% if u.is_admin %}{% trans "Yes" %}{% else %}{% trans "No" %}{% endif %} + + + +
diff --git a/admin/templates/delete_user.html b/admin/templates/delete_user.html index 5aa402d..452b61a 100644 --- a/admin/templates/delete_user.html +++ b/admin/templates/delete_user.html @@ -1,19 +1,24 @@ {% extends "base.html" %} {% load i18n %} +{% load django_bootstrap5 %} + {% block content %}

{{ subtitle }}

- -{% load django_bootstrap5 %} -
-
- Are you sure than want remove the lot {{ object.name }} with {{ object.devices.count }} devices. +
+
+ +
-
{% csrf_token %} @@ -31,7 +36,10 @@ {% bootstrap_form form %}
{% translate "Cancel" %} - +
diff --git a/admin/templates/institution.html b/admin/templates/institution.html index 88014b9..1d0977b 100644 --- a/admin/templates/institution.html +++ b/admin/templates/institution.html @@ -1,32 +1,49 @@ {% extends "base.html" %} -{% load i18n %} +{% load i18n django_bootstrap5 %} {% block content %} -
-
-

{{ subtitle }}

+
+
+
+

{{ subtitle }}

+
-
-{% load django_bootstrap5 %} -
-{% csrf_token %} -{% if form.errors %} - -{% endif %} -{% bootstrap_form form %} - + + {% csrf_token %} -
+ {% if form.errors %} + + {% endif %} + +
+
+ {% bootstrap_field form.name addon_before='' %} + {% bootstrap_field form.location addon_before='' %} +
+
+ {% bootstrap_field form.responsable_person addon_before='' %} + {% bootstrap_field form.supervisor_person addon_before='' %} + {% bootstrap_field form.logo addon_before='' %} +
+
+ +
+ + {% translate "Cancel" %} + + +
+ +
{% endblock %} diff --git a/admin/templates/states_panel.html b/admin/templates/states_panel.html index 503b3fa..78a21d9 100644 --- a/admin/templates/states_panel.html +++ b/admin/templates/states_panel.html @@ -1,18 +1,17 @@ {% extends "base.html" %} {% load i18n django_bootstrap5 %} -{% block content %} -
-
-

{{ subtitle }}

-
-
+{% block actions %} -
-
-
+{% endblock %} + +{% block content %} +

{{ subtitle }}

+ +
{% if state_definitions %} diff --git a/admin/views.py b/admin/views.py index df4cf16..0f51dc4 100644 --- a/admin/views.py +++ b/admin/views.py @@ -31,7 +31,7 @@ class AdminView(DashboardView): class PanelView(AdminView, TemplateView): template_name = "admin_panel.html" title = _("Admin") - breadcrumb = _("admin") + " /" + breadcrumb = _("Admin") + " / " + _("Panel") + " /" def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) @@ -41,7 +41,7 @@ class PanelView(AdminView, TemplateView): class UsersView(AdminView, TemplateView): template_name = "admin_users.html" title = _("Users") - breadcrumb = _("admin / Users") + " /" + breadcrumb = _("Admin") + " / " + _("Panel") + " / " + _("Users") def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) @@ -54,7 +54,7 @@ class UsersView(AdminView, TemplateView): class CreateUserView(AdminView, NotifyActivateUserByEmail, CreateView): template_name = "user.html" title = _("User") - breadcrumb = _("admin / User") + " /" + breadcrumb = _("Admin") + " / " + _("Users") + " / " +_("New") success_url = reverse_lazy('admin:users') model = User fields = ( @@ -79,7 +79,7 @@ class CreateUserView(AdminView, NotifyActivateUserByEmail, CreateView): class DeleteUserView(AdminView, DeleteView): template_name = "delete_user.html" title = _("Delete user") - breadcrumb = "admin / Delete user" + breadcrumb = _("Admin") + " / " + _("Users") + " / " +_("Delete") success_url = reverse_lazy('admin:users') model = User fields = ( @@ -96,7 +96,7 @@ class DeleteUserView(AdminView, DeleteView): class EditUserView(AdminView, UpdateView): template_name = "user.html" title = _("Edit user") - breadcrumb = "admin / Edit user" + breadcrumb = _("Admin") + " / " + _("Users") + " / " +_("Edit") success_url = reverse_lazy('admin:users') model = User fields = ( @@ -116,6 +116,7 @@ class InstitutionView(AdminView, UpdateView): template_name = "institution.html" title = _("Edit institution") section = "admin" + breadcrumb = _("Admin") + " / " + _("Institution") + " / " subtitle = _('Edit institution') model = Institution success_url = reverse_lazy('admin:panel') @@ -127,6 +128,16 @@ class InstitutionView(AdminView, UpdateView): "supervisor_person" ) + def get_form(self, form_class=None): + form = super().get_form(form_class) + form.fields["name"].help_text = _("Full name of the institution.") + form.fields["logo"].help_text = _("URL to the institution's logo.") + form.fields["location"].help_text = _("The address or city of the institution.") + form.fields["responsable_person"].help_text = _("Name of the institution's responsable person.") + form.fields["supervisor_person"].help_text = _("The supervisor's full name.") + + return form + def get_form_kwargs(self): self.object = self.request.user.institution kwargs = super().get_form_kwargs() @@ -146,7 +157,7 @@ class StateDefinitionContextMixin(ContextMixin): class StatesPanelView(AdminView, StateDefinitionContextMixin, TemplateView): template_name = "states_panel.html" title = _("States Panel") - breadcrumb = _("admin / States Panel") + " /" + breadcrumb = _("Admin") + " / " + _("States") + " / " class AddStateDefinitionView(AdminView, StateDefinitionContextMixin, CreateView): diff --git a/api/views.py b/api/views.py index 188bcd7..acee54a 100644 --- a/api/views.py +++ b/api/views.py @@ -122,7 +122,6 @@ class NewSnapshotView(ApiMixing): owner=self.tk.owner.institution ).first() - if not prop: logger.error("Error: No property for uuid: %s", ev_uuid) return JsonResponse({'status': 'fail'}, status=500) diff --git a/dashboard/static/css/dashboard.css b/dashboard/static/css/dashboard.css index 7f2f108..6033408 100644 --- a/dashboard/static/css/dashboard.css +++ b/dashboard/static/css/dashboard.css @@ -174,3 +174,15 @@ h3 { .btn-orange { background-color: #f5b587; } + +/* Clase para botones con funcionalidad no implementados */ +.btn-todo { + background-color: #6c757d; + color: #fff; /* texto en blanco*/ + opacity: 0.65; + cursor: not-allowed; + +.btn-todo:disabled { + pointer-events: none; + } +} diff --git a/dashboard/templates/base.html b/dashboard/templates/base.html index 57bf0fb..6ebd539 100644 --- a/dashboard/templates/base.html +++ b/dashboard/templates/base.html @@ -1,4 +1,4 @@ -{% load i18n static %} +{% load i18n static language_code %} @@ -7,7 +7,7 @@ {% block meta %} - + {% endblock %} @@ -64,17 +64,24 @@ - - + +
+
+ {% block actions %} + {% endblock %} +
+
{% block content %} {% endblock content %} - +
-
-
- {{ commit_id }} +
+
+
+ {{ commit_id }} + {% include "language_picker.html" %}
-
+
+
- {% block script %} + {% block script %} + + + {% block extrascript %}{% endblock %} {% endblock %} diff --git a/dashboard/templates/language_picker.html b/dashboard/templates/language_picker.html new file mode 100644 index 0000000..0389b0d --- /dev/null +++ b/dashboard/templates/language_picker.html @@ -0,0 +1,20 @@ + +{% load i18n language_code %} + + diff --git a/dashboard/templates/unassigned_devices.html b/dashboard/templates/unassigned_devices.html index 14085bb..b87fd1a 100644 --- a/dashboard/templates/unassigned_devices.html +++ b/dashboard/templates/unassigned_devices.html @@ -2,83 +2,151 @@ {% load i18n %} {% load paginacion %} +{% block actions %} -{% block content %} -
-
-

{{ subtitle }}

-
- -
-
+ +{% endblock%} + +{% block content %} + +{% if lot.name %} +

{% trans "Lot" %} {{ lot.name }}

+{% endif %} + +
- {% csrf_token %} -
- - - - - - - - - - {% for dev in devices %} - - - - - - @@ -53,7 +114,8 @@
- select - - shortid - - type - - manufacturer - - model -
- - - - {{ dev.shortid }} - - - {{ dev.type }} - + {% csrf_token %} + +
+ + +
+ + + + + + + + + + + + + + + {% for dev in devices %} + + + + + - - - + + + + + + {% endfor %}
+ + + {% trans "Short ID" %} + + {% trans "Type" %} + + {% trans "Manufacturer" %} + + {% trans "Model" %} + + {% trans "Current State" %} + + {% trans "Evidence last updated" %} +
+ + + + {{ dev.shortid }} + + + {% if dev.type == "Laptop" or dev.type == "Netbook" %} + + {% elif dev.type == "Desktop" or dev.type == "Server" %} + + {% elif dev.type == "Motherboard" %} + + {% elif dev.type == "GraphicCard" %} + + {% elif dev.type == "HardDrive" %} + + {% elif dev.type == "SolidStateDrive" %} + + {% elif dev.type == "NetworkAdapter" %} + + {% elif dev.type == "Processor" %} + + {% elif dev.type == "RamModule" %} + + {% elif dev.type == "SoundCard" %} + + {% elif dev.type == "Display" %} + + {% elif dev.type == "Battery" %} + + {% elif dev.type == "Camera" %} + + {% endif %} + {{dev.type}} + {{ dev.manufacturer }} - - {% if dev.version %} - {{dev.version}} {{ dev.model }} - {% else %} - {{ dev.model }} - {% endif %} -
+ {% if dev.version %} + {{dev.version}} {{ dev.model }} + {% else %} + {{ dev.model }} + {% endif %} + + {{ dev.get_current_state.state|default:"N/A" }} + + {{ dev.last_evidence.created }} +
- -
-
+ +
{% render_pagination page total_pages limit %} -
+ + {% endblock %} diff --git a/dashboard/templatetags/language_code.py b/dashboard/templatetags/language_code.py new file mode 100644 index 0000000..a7c1e74 --- /dev/null +++ b/dashboard/templatetags/language_code.py @@ -0,0 +1,11 @@ +from django import template +from django.utils.translation import get_language_info + +register = template.Library() + +@register.filter +def get_language_code(language_code, languages): + for lang in languages: + if lang['code'] == language_code: + return lang['name_local'].lower() + return language_code.lower() diff --git a/dashboard/views.py b/dashboard/views.py index 4917bb8..92d8484 100644 --- a/dashboard/views.py +++ b/dashboard/views.py @@ -16,7 +16,7 @@ class UnassignedDevicesView(InventaryMixin): template_name = "unassigned_devices.html" section = "Unassigned" title = _("Unassigned Devices") - breadcrumb = "Devices / Unassigned Devices" + breadcrumb = _("Devices") + " / " + _("Unassigned") + " / " def get_devices(self, user, offset, limit): return Device.get_unassigned(self.request.user.institution, offset, limit) @@ -26,7 +26,7 @@ class LotDashboardView(InventaryMixin, DetailsMixin): template_name = "unassigned_devices.html" section = "dashboard_lot" title = _("Lot Devices") - breadcrumb = "Lot / Devices" + breadcrumb = _("Lot") + " / " + _("Devices") + " / " model = Lot def get_context_data(self, **kwargs): @@ -50,7 +50,7 @@ class SearchView(InventaryMixin): template_name = "unassigned_devices.html" section = "Search" title = _("Search Devices") - breadcrumb = "Devices / Search Devices" + breadcrumb = _("Devices") + " / " + _("Search") + " / " def get_devices(self, user, offset, limit): post = dict(self.request.POST) diff --git a/device/forms.py b/device/forms.py index 1fd1f0b..f5c01f2 100644 --- a/device/forms.py +++ b/device/forms.py @@ -1,8 +1,8 @@ from django import forms from utils.device import create_property, create_doc, create_index from utils.save_snapshots import move_json, save_in_disk - - +from django.utils.translation import gettext_lazy as _ +#TODO: translate device types DEVICE_TYPES = [ ("Desktop", "Desktop"), ("Laptop", "Laptop"), @@ -22,11 +22,11 @@ DEVICE_TYPES = [ class DeviceForm(forms.Form): - type = forms.ChoiceField(choices = DEVICE_TYPES, required=False) - amount = forms.IntegerField(required=False, initial=1) - custom_id = forms.CharField(required=False) - name = forms.CharField(required=False) - value = forms.CharField(required=False) + type = forms.ChoiceField(choices = DEVICE_TYPES, required=False, label= _(u"Type")) + amount = forms.IntegerField(required=False, initial=1, label= _(u"Amount")) + custom_id = forms.CharField(required=False, label=_(u"Custom id")) + name = forms.CharField(required=False, label= _(u"Name")) + value = forms.CharField(required=False, label=_(u"Value")) class BaseDeviceFormSet(forms.BaseFormSet): diff --git a/device/models.py b/device/models.py index a385895..8ae521a 100644 --- a/device/models.py +++ b/device/models.py @@ -125,10 +125,14 @@ class Device: def last_uuid(self): if self.uuid: return self.uuid + + if not self.uuids: + self.get_uuids() + return self.uuids[0] def get_current_state(self): - uuid = self.last_uuid + uuid = self.last_uuid() return State.objects.filter(snapshot_uuid=uuid).order_by('-date').first() diff --git a/device/templates/details.html b/device/templates/details.html index dd64d6f..49e6f2f 100644 --- a/device/templates/details.html +++ b/device/templates/details.html @@ -1,14 +1,7 @@ {% extends 'base.html' %} {% load i18n %} - -{% block content %} - -
-
-

{{ object.shortid }}

-
-
-
+{% block actions %} + {% if state_definitions %} @@ -52,9 +45,10 @@ {% trans "Add a note" %} -
-
-
+{% endblock %} + +{% block content %} +

{{ object.shortid }}

@@ -127,6 +121,25 @@
+ + {% if dpps %} +
+
{% trans 'List of dpps' %}
+
+ {% for d in dpps %} +
+
+ {{ d.timestamp }} + {{ d.type }} +
+

+ {{ d.signature }} +

+
+ {% endfor %} +
+
+ {% endif %} {% endblock %} diff --git a/device/templates/new_device.html b/device/templates/new_device.html index 320790d..0ab67f7 100644 --- a/device/templates/new_device.html +++ b/device/templates/new_device.html @@ -28,33 +28,30 @@
{% csrf_token %} {% if form.errors %} -
- {{ snap.uuid }} + {{ snap.uuid|truncatechars:7|upper }} {% if snap.did_document %} diff --git a/device/templates/tabs/log.html b/device/templates/tabs/log.html index dea3bea..9c40b78 100644 --- a/device/templates/tabs/log.html +++ b/device/templates/tabs/log.html @@ -1,5 +1,6 @@ {% load i18n %} +{% load paginacion %}
@@ -12,17 +13,19 @@ {% for log in device_logs %} - - - - - + + + + + {% empty %} - - - + + + {% endfor %}
{{ log.date|date:"M j, Y, H:i" }}{{ log.event }}{{ log.user.get_full_name|default:log.user.username }}
{{ log.date|date:"M j, Y, H:i" }}{{ log.event }}{{ log.user.get_full_name|default:log.user.username }}
{% trans 'No logs recorded.' %}
{% trans 'No logs recorded.' %}
+ +{% render_pagination device_logs.number device_logs.paginator.num_pages 10 %}
diff --git a/device/templates/tabs/user_properties.html b/device/templates/tabs/user_properties.html index 367aeda..3b72eb1 100644 --- a/device/templates/tabs/user_properties.html +++ b/device/templates/tabs/user_properties.html @@ -2,130 +2,109 @@ {% load i18n %}
-
- - - {% trans 'New user property' %} - + +
{% trans 'User properties' %}
-
{% trans 'User properties' %}
- - - - - - - - - - - - {% for a in object.get_user_properties %} - - - - - - - {% endfor %} - -
{% trans 'Key' %}{% trans 'Value' %}{% trans 'Created on' %}
{{ a.key }} - {{ a.value }} - {{ a.created }} - -
- - -
-
+
+ + + + + + + + + + + {% for a in object.get_user_properties %} + + + + + + + {% endfor %} + +
{% trans 'Key' %}{% trans 'Value' %}{% trans 'Created on' %}{% trans 'Actions' %}
{{ a.key }}{{ a.value }}{{ a.created }} +
+ + +
+
+
{% for a in object.get_user_properties %}
- {% trans "Type" %} + {% trans "Algorithm" %} - {% trans "Identificator" %} + {% trans "Device ID" %} - {% trans "Data" %} + {% trans "Date" %}
- {{ snap.value }} + {{ snap.value|truncatechars:7|upper }} + {{ dev.shortid }} @@ -67,6 +129,7 @@
+
{% load django_bootstrap5 %}
@@ -88,7 +151,7 @@
{% if form.tag.value %}
@@ -101,10 +164,24 @@
+ {% endblock %} {% block extrascript %} + {% endblock %} diff --git a/evidence/urls.py b/evidence/urls.py index c8eea40..e1cf821 100644 --- a/evidence/urls.py +++ b/evidence/urls.py @@ -18,7 +18,6 @@ urlpatterns = [ path("upload", views.UploadView.as_view(), name="upload"), path("import", views.ImportView.as_view(), name="import"), path("", views.EvidenceView.as_view(), name="details"), - path("/eraseserver", views.EraseServerView.as_view(), name="erase_server"), path("/download", views.DownloadEvidenceView.as_view(), name="download"), path("tag//delete", views.DeleteEvidenceTagView.as_view(), name="delete_tag"), ] diff --git a/evidence/views.py b/evidence/views.py index 933ab7d..fbea58b 100644 --- a/evidence/views.py +++ b/evidence/views.py @@ -27,7 +27,7 @@ class ListEvidencesView(DashboardView, TemplateView): template_name = "evidences.html" section = "evidences" title = _("Evidences") - breadcrumb = "Evidences" + breadcrumb = _("Evidence") + " / " + _("All") + " / " def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) @@ -43,10 +43,18 @@ class UploadView(DashboardView, FormView): template_name = "upload.html" section = "evidences" title = _("Upload Evidence") - breadcrumb = "Evidences / Upload" + breadcrumb = _("Evidence") + " / " + _("Upload") + " / " success_url = reverse_lazy('evidence:list') form_class = UploadForm + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + + context.update({ + "help_text": _('Upload the snapshots generated by Workbench.'), + }) + return context + def form_valid(self, form): form.save(self.request.user) messages.success(self.request, _("Evidence uploaded successfully.")) @@ -62,7 +70,7 @@ class ImportView(DashboardView, FormView): template_name = "upload.html" section = "evidences" title = _("Import Evidence") - breadcrumb = "Evidences / Import" + breadcrumb = _("Evidence") + " / " + _("Import") + " / " success_url = reverse_lazy('evidence:list') form_class = ImportForm @@ -86,7 +94,7 @@ class EvidenceView(DashboardView, FormView): template_name = "ev_details.html" section = "evidences" title = _("Evidences") - breadcrumb = "Evidences / Details" + breadcrumb = _("Evidence") + " / " + _("Details") + " / " success_url = reverse_lazy('evidence:list') form_class = UserTagForm @@ -103,6 +111,7 @@ class EvidenceView(DashboardView, FormView): context = super().get_context_data(**kwargs) context.update({ 'object': self.object, + 'form2': EraseServerForm(**self.get_form_kwargs(), data=self.request.POST or None), }) return context @@ -113,6 +122,23 @@ class EvidenceView(DashboardView, FormView): kwargs['user'] = self.request.user return kwargs + def post(self, request, *args, **kwargs): + form1 = self.get_form() + #Empty param @initial makes it work, but i doubt it is the correct logic + form2 = EraseServerForm(request.POST, user=self.request.user, initial={}, uuid=self.kwargs.get('pk')) + + if "submit_form1" in request.POST and form1.is_valid(): + return self.form_valid(form1) + elif "submit_form2" in request.POST and form2.is_valid(): + return self.form2_valid(form2) + + return self.form_invalid(form1, form2) + + def form2_valid(self, form): + form.save(self.request.user) + response = super().form_valid(form) + return response + def form_valid(self, form): form.save(self.request.user) response = super().form_valid(form) @@ -142,51 +168,6 @@ class DownloadEvidenceView(DashboardView, TemplateView): return response -class EraseServerView(DashboardView, FormView): - template_name = "ev_eraseserver.html" - section = "evidences" - title = _("Evidences") - breadcrumb = "Evidences / Details" - success_url = reverse_lazy('evidence:list') - form_class = EraseServerForm - - def get(self, request, *args, **kwargs): - self.pk = kwargs['pk'] - self.object = Evidence(self.pk) - if self.object.owner != self.request.user.institution: - raise Http403 - - self.object.get_properties() - return super().get(request, *args, **kwargs) - - def get_context_data(self, **kwargs): - context = super().get_context_data(**kwargs) - context.update({ - 'object': self.object, - }) - return context - - def get_form_kwargs(self): - self.pk = self.kwargs.get('pk') - kwargs = super().get_form_kwargs() - kwargs['uuid'] = self.pk - kwargs['user'] = self.request.user - return kwargs - - def form_valid(self, form): - form.save(self.request.user) - response = super().form_valid(form) - return response - - def form_invalid(self, form): - response = super().form_invalid(form) - return response - - def get_success_url(self): - success_url = reverse_lazy('evidence:details', args=[self.pk]) - return success_url - - class DeleteEvidenceTagView(DashboardView, DeleteView): model = SystemProperty @@ -197,14 +178,14 @@ class DeleteEvidenceTagView(DashboardView, DeleteView): def get(self, request, *args, **kwargs): self.object = self.get_object() - message = _(" Evidence Tag: {}").format(self.object.value) + message = _(" Evidence Tag: {}").format(self.object.value) DeviceLog.objects.create( snapshot_uuid=self.object.uuid, event=message, user=self.request.user, institution=self.request.user.institution ) - self.object.delete() + self.object.delete() messages.info(self.request, _("Evicende Tag deleted successfully.")) return self.handle_success() @@ -214,6 +195,6 @@ class DeleteEvidenceTagView(DashboardView, DeleteView): def get_success_url(self): return self.request.META.get( - 'HTTP_REFERER', + 'HTTP_REFERER', reverse_lazy('evidence:details', args=[self.object.uuid]) ) diff --git a/locale/ca/LC_MESSAGES/django.mo b/locale/ca/LC_MESSAGES/django.mo new file mode 100644 index 0000000..6768559 Binary files /dev/null and b/locale/ca/LC_MESSAGES/django.mo differ diff --git a/locale/ca/LC_MESSAGES/django.po b/locale/ca/LC_MESSAGES/django.po new file mode 100644 index 0000000..97275f7 --- /dev/null +++ b/locale/ca/LC_MESSAGES/django.po @@ -0,0 +1,1296 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +msgid "" +msgstr "" +"Project-Id-Version: 0.1 \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-02-17 16:14-0300\n" +"PO-Revision-Date: 2025-01-29 17:02-0300\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: ca\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: action/views.py:28 +msgid " State '{}'. Previous State: '{}'" +msgstr "" + +#: action/views.py:35 +msgid "State successfully changed from '{}' to '{}'" +msgstr "L'estat ha canviat correctament de '{}' a '{}' " + +#: action/views.py:39 action/views.py:70 +msgid "There was an error with your submission." +msgstr "Hi ha hagut un error amb la teva tramesa." + +#: action/views.py:59 +msgid " Note: '{}'" +msgstr "" + +#: action/views.py:66 +msgid "Note has been added" +msgstr "S'ha afegit la nota" + +#: action/views.py:88 +msgid " Note. Old Description: '{}'. New Description: '{}'" +msgstr " Nota. Descripció antiga: '{}'. Descripció nova: '{}'" + +#: action/views.py:101 +msgid "Note cannot be empty." +msgstr "La nota no pot estar buida." + +#: action/views.py:127 +msgid "You do not have permission to delete this note." +msgstr "No tens permís per eliminar aquesta nota." + +#: action/views.py:130 +msgid " Note. Description: '{}'. " +msgstr "" + +#: action/views.py:137 +msgid "Note '{}' deleted successfully." +msgstr "Nota '{}' eliminada correctament." + +#: admin/templates/admin_panel.html:13 admin/views.py:119 +msgid "Institution" +msgstr "Institució" + +#: admin/templates/admin_panel.html:16 +msgid "Edit and manage the institution's details and settings." +msgstr "Editeu i gestioneu els detalls i la configuració de la institució." + +#: admin/templates/admin_panel.html:20 +msgid "Edit Institution" +msgstr "Edita institució" + +#: admin/templates/admin_users.html:8 +msgid "New user" +msgstr "Afegeix un nou usuari" + +#: admin/templates/admin_users.html:21 +msgid "Email" +msgstr "Correu electrònic" + +#: admin/templates/admin_users.html:22 admin/views.py:33 admin/views.py:34 +#: admin/views.py:44 admin/views.py:57 admin/views.py:82 admin/views.py:99 +#: admin/views.py:119 admin/views.py:160 dashboard/templates/base.html:94 +msgid "Admin" +msgstr "Administrador" + +#: admin/templates/admin_users.html:23 admin/templates/states_panel.html:29 +#: device/templates/tabs/user_properties.html:21 lot/templates/lots.html:57 +msgid "Actions" +msgstr "Accions" + +#: admin/templates/admin_users.html:30 +#: device/templates/tabs/general_details.html:20 +msgid "Yes" +msgstr "Sí" + +#: admin/templates/admin_users.html:30 +msgid "No" +msgstr "No" + +#: admin/templates/delete_user.html:16 +#, python-format +msgid "" +"\n" +" Are you sure you want to remove the lot %(object.name)s with %(object.devices.count)s devices?\n" +" " +msgstr "" +"\n" +" Are you sure you want to remove the lot %(object.name)s with %(object.devices.count)s devices?\n" +" " + +#: admin/templates/delete_user.html:38 admin/templates/institution.html:41 +#: admin/templates/states_panel.html:144 admin/templates/states_panel.html:184 +#: admin/templates/user.html:27 api/templates/new_token.html:27 +#: device/templates/details.html:117 device/templates/new_device.html:78 +#: device/templates/new_user_property.html:39 +#: device/templates/tabs/user_properties.html:70 +#: device/templates/tabs/user_properties.html:102 +#: evidence/templates/ev_details.html:153 evidence/templates/upload.html:73 +#: lot/templates/delete_lot.html:33 lot/templates/new_lot.html:27 +#: lot/templates/new_property.html:39 lot/templates/properties.html:68 +#: lot/templates/properties.html:88 user/templates/settings.html:27 +msgid "Cancel" +msgstr "Cancel·la" + +#: admin/templates/delete_user.html:41 admin/templates/states_panel.html:66 +#: admin/templates/states_panel.html:187 admin/views.py:82 api/tables.py:29 +#: device/templates/tabs/user_properties.html:44 +#: device/templates/tabs/user_properties.html:73 +#: evidence/templates/ev_details.html:158 lot/templates/delete_lot.html:34 +#: lot/templates/lots.html:81 lot/templates/properties.html:43 +#: lot/templates/properties.html:91 lot/views.py:41 +msgid "Delete" +msgstr "Elimina" + +#: admin/templates/institution.html:17 +msgid "Please fix the following errors:" +msgstr "Si us plau, ves a la pàgina següent" + +#: admin/templates/institution.html:44 admin/templates/user.html:28 +#: api/templates/new_token.html:28 device/templates/new_device.html:79 +#: device/templates/new_user_property.html:40 +#: evidence/templates/ev_details.html:46 evidence/templates/ev_details.html:154 +#: lot/templates/new_lot.html:28 lot/templates/new_property.html:40 +#: user/templates/settings.html:28 +msgid "Save" +msgstr "Desa" + +#: admin/templates/states_panel.html:7 +msgid "New State" +msgstr "Nou estat" + +#: admin/templates/states_panel.html:19 +msgid "Move and drag state definitions to reorder" +msgstr "Mou i arrossega les definicions d'estat per reordenar-les" + +#: admin/templates/states_panel.html:27 +msgid "State Definition" +msgstr "Definició d'estat" + +#: admin/templates/states_panel.html:59 admin/views.py:99 +#: device/templates/tabs/user_properties.html:37 lot/templates/lots.html:77 +#: lot/templates/properties.html:39 lot/views.py:60 +msgid "Edit" +msgstr "Edita" + +#: admin/templates/states_panel.html:78 +msgid "Update Order" +msgstr "Actualitza l'ordre" + +#: admin/templates/states_panel.html:84 +msgid "No states found on current organization" +msgstr "No s'han trobat estats a l'organització actual" + +#: admin/templates/states_panel.html:95 +msgid "Add State Definition" +msgstr "Afegeix una definició d'estat" + +#: admin/templates/states_panel.html:103 admin/templates/states_panel.html:136 +msgid "State" +msgstr "Estat" + +#: admin/templates/states_panel.html:105 admin/templates/states_panel.html:138 +msgid "Maximum 50 characters." +msgstr "Màxim 50 caràcters." + +#: admin/templates/states_panel.html:108 admin/templates/states_panel.html:129 +#: admin/templates/states_panel.html:163 device/templates/details.html:106 +#: lot/templates/properties.html:54 lot/templates/properties.html:82 +msgid "Close" +msgstr "Tanca" + +#: admin/templates/states_panel.html:109 +msgid "Add state definition" +msgstr "Afegeix una definició d'estat" + +#: admin/templates/states_panel.html:127 +msgid "Edit State Definition" +msgstr "Edita la definició d'estat" + +#: admin/templates/states_panel.html:133 +msgid "" +"Existing devices with this state will not have their state names changed." +msgstr "" +"Els dispositius amb aquest estat no veuran canviats els seus noms d'estat." + +#: admin/templates/states_panel.html:141 admin/templates/states_panel.html:176 +msgid "Any changes in order will not be saved." +msgstr "Qualsevol canvi en l'ordre no es desarà." + +#: admin/templates/states_panel.html:145 +msgid "Save Changes" +msgstr "Desa els canvis" + +#: admin/templates/states_panel.html:161 +msgid "Delete State Definition" +msgstr "Elimina la definició d'estat" + +#: admin/templates/states_panel.html:167 +msgid "" +"Devices with a State of this description will not have their State altered" +msgstr "" +"Els dispositius amb un estat d'aquesta descripció no veuran alterat el seu " +"estat." + +#: admin/views.py:34 admin/views.py:44 dashboard/templates/base.html:99 +msgid "Panel" +msgstr "Panell" + +#: admin/views.py:43 admin/views.py:44 admin/views.py:57 admin/views.py:82 +#: admin/views.py:99 dashboard/templates/base.html:104 +msgid "Users" +msgstr "Usuaris" + +#: admin/views.py:56 device/templates/tabs/log.html:11 user/views.py:18 +msgid "User" +msgstr "Usuari" + +#: admin/views.py:57 device/views.py:43 device/views.py:195 lot/views.py:20 +#: lot/views.py:175 +msgid "New" +msgstr "Nou" + +#: admin/views.py:81 +msgid "Delete user" +msgstr "Elimina usuari" + +#: admin/views.py:98 +msgid "Edit user" +msgstr "Edita usuari" + +#: admin/views.py:117 admin/views.py:120 +msgid "Edit institution" +msgstr "Edita institució" + +#: admin/views.py:133 +msgid "Full name of the institution." +msgstr "Nom complet de la institució." + +#: admin/views.py:134 +msgid "URL to the institution's logo." +msgstr "URL del logotip de la institució." + +#: admin/views.py:135 +msgid "The address or city of the institution." +msgstr "L'adreça o ciutat de la institució." + +#: admin/views.py:136 +msgid "Name of the institution's responsable person." +msgstr "Nom de la persona responsable de la institució." + +#: admin/views.py:137 +msgid "The supervisor's full name." +msgstr "El nom complet del supervisor." + +#: admin/views.py:152 +msgid "State definitions are the custom finite states that a device can be in." +msgstr "" +"Les definicions d'estat són els estats personalitzats en què pot estar un " +"dispositiu." + +#: admin/views.py:159 +msgid "States Panel" +msgstr "Panell d'estats" + +#: admin/views.py:160 dashboard/templates/base.html:109 +msgid "States" +msgstr "Estats" + +#: admin/views.py:165 +msgid "New State Definition" +msgstr "Nova definició d'estat" + +#: admin/views.py:176 +msgid "State definition successfully added." +msgstr "Definició d'estat afegida correctament." + +#: admin/views.py:179 admin/views.py:245 +msgid "State is already defined." +msgstr "L'estat ja està definit." + +#: admin/views.py:223 +msgid "Order changed succesfuly." +msgstr "Ordre canviat correctament." + +#: admin/views.py:242 +msgid "State definition updated successfully." +msgstr "Definició d'estat actualitzada correctament." + +#: api/tables.py:51 dashboard/templates/base.html:76 +msgid "Token" +msgstr "Token" + +#: api/tables.py:52 evidence/forms.py:68 evidence/templates/ev_details.html:85 +msgid "Tag" +msgstr "Etiqueta" + +#: api/templates/custom_table.html:65 dashboard/templates/pagination.html:13 +msgid "Previous" +msgstr "Anterior" + +#: api/templates/custom_table.html:91 dashboard/templates/pagination.html:38 +msgid "Next" +msgstr "Següent" + +#: api/templates/token.html:13 +msgid "Generate a new token" +msgstr "Genera un nou token" + +#: api/views.py:146 api/views.py:180 api/views.py:198 +msgid "Credential management" +msgstr "Gestió de credencials" + +#: api/views.py:148 +msgid "Managament Tokens" +msgstr "Tokens de gestió" + +#: api/views.py:182 api/views.py:200 +msgid "New Tokens" +msgstr "Nous Tokens" + +#: dashboard/mixins.py:15 +msgid "Permission denied. User is not authenticated" +msgstr "Permís denegat. L'usuari no està autenticat" + +#: dashboard/templates/base.html:75 +msgid "Profile" +msgstr "Perfil" + +#: dashboard/templates/base.html:77 user/templates/panel.html:41 +msgid "Settings File" +msgstr "Fitxer de Configuració" + +#: dashboard/templates/base.html:79 +msgid "Logout" +msgstr "Tancar Sessió" + +#: dashboard/templates/base.html:118 dashboard/views.py:19 +#: dashboard/views.py:29 dashboard/views.py:53 +#, fuzzy +#| msgid "Device" +msgid "Devices" +msgstr "Dispositiu" + +#: dashboard/templates/base.html:123 +#: dashboard/templates/inventory_dashboard.html:29 dashboard/views.py:19 +msgid "Unassigned" +msgstr "Sense assignar" + +#: dashboard/templates/base.html:131 device/templates/details.html:64 +msgid "Lots" +msgstr "Lots" + +#: dashboard/templates/base.html:146 device/templates/details.html:70 +#: evidence/views.py:29 evidence/views.py:96 +msgid "Evidences" +msgstr "Evidències" + +#: dashboard/templates/base.html:151 evidence/templates/upload.html:75 +#: evidence/views.py:46 +msgid "Upload" +msgstr "Carrega" + +#: dashboard/templates/base.html:156 +msgid "Old evidences" +msgstr "Evidències antigues" + +#: dashboard/templates/base.html:164 +msgid "Placeholders" +msgstr "Marcadors de posició" + +#: dashboard/templates/base.html:169 +msgid "Import from spreadsheet" +msgstr "Importa des d'un full de càlcul" + +#: dashboard/templates/base.html:174 +msgid "Add device" +msgstr "Afegeix un dispositiu" + +#: dashboard/templates/base.html:205 +msgid "Search your device" +msgstr "Cerca el teu dispositiu" + +#: dashboard/templates/inventory_dashboard.html:13 +msgid "Total Devices" +msgstr "Dispositius totals" + +#: dashboard/templates/inventory_dashboard.html:21 +msgid "Assigned" +msgstr "Assignats" + +#: dashboard/templates/inventory_dashboard.html:38 +msgid "States Distribution" +msgstr "Distribució d'estats" + +#: dashboard/templates/inventory_dashboard.html:40 +msgid "Active" +msgstr "Actiu" + +#: dashboard/templates/inventory_dashboard.html:41 +msgid "Repair" +msgstr "Reparació" + +#: dashboard/templates/inventory_dashboard.html:42 +msgid "Discarded" +msgstr "Descartat" + +#: dashboard/templates/unassigned_devices.html:8 +msgid " NOT IMPLEMENTED. Menu for adding documents for the lot" +msgstr "NO IMPLEMENTAT. Menú per afegir documents per al lot" + +#: dashboard/templates/unassigned_devices.html:10 +#: device/templates/tabs/documents.html:12 +msgid "Documents" +msgstr "Documents" + +#: dashboard/templates/unassigned_devices.html:16 +#: device/templates/details.html:61 +msgid "Properties" +msgstr "Propietats" + +#: dashboard/templates/unassigned_devices.html:19 +msgid "" +"NOT IMPLEMENTED. This action tries to emulate what devicehub-teal did, which " +"was related to opening a dialog where you can select different options for " +"export the devices as csv for all selected devices" +msgstr "" +"NO IMPLEMENTAT. Aquesta acció intenta emular el que va fer devicehub-teal, que estava " +"relacionat amb l'obertura d'un diàleg on podeu seleccionar diferents opcions per exporteu " +"els dispositius com a csv per a tots els dispositius seleccionats" + + +#: dashboard/templates/unassigned_devices.html:21 +msgid "Exports" +msgstr "Exportacions" + +#: dashboard/templates/unassigned_devices.html:30 dashboard/views.py:29 +#: lot/views.py:20 lot/views.py:41 lot/views.py:60 lot/views.py:86 +#: lot/views.py:115 lot/views.py:127 lot/views.py:152 lot/views.py:175 +#: lot/views.py:209 +msgid "Lot" +msgstr "Lot" + +#: dashboard/templates/unassigned_devices.html:40 +msgid "Unassign" +msgstr "Sense assignar" + +#: dashboard/templates/unassigned_devices.html:44 +msgid "Assign to lot" +msgstr "Afegeix a lot" + +#: dashboard/templates/unassigned_devices.html:55 +msgid "Short ID" +msgstr "ID curt" + +#: dashboard/templates/unassigned_devices.html:58 device/forms.py:25 +#: device/templates/tabs/general_details.html:26 +msgid "Type" +msgstr "Tipus" + +#: dashboard/templates/unassigned_devices.html:61 +#: device/templates/tabs/general_details.html:43 +msgid "Manufacturer" +msgstr "Fabricant" + +#: dashboard/templates/unassigned_devices.html:64 +#: device/templates/tabs/general_details.html:50 +msgid "Model" +msgstr "Model" + +#: dashboard/templates/unassigned_devices.html:67 +msgid "Current State" +msgstr "Estat actual" + +#: dashboard/templates/unassigned_devices.html:70 +msgid "Evidence last updated" +msgstr "Evidències" + +#: dashboard/views.py:18 +msgid "Unassigned Devices" +msgstr "Dispositius no assignats" + +#: dashboard/views.py:28 +msgid "Lot Devices" +msgstr "Dispositius del lot" + +#: dashboard/views.py:52 +msgid "Search Devices" +msgstr "Cerca dispositius" + +#: dashboard/views.py:53 +msgid "Search" +msgstr "Cerca dispositius" + +#: device/forms.py:26 +msgid "Amount" +msgstr "Quantitat" + +#: device/forms.py:27 +msgid "Custom id" +msgstr "Identificador personalitzat" + +#: device/forms.py:28 user/models.py:10 +msgid "Name" +msgstr "Nom" + +#: device/forms.py:29 device/templates/tabs/documents.html:21 +#: device/templates/tabs/user_properties.html:19 +#: device/templates/tabs/user_properties.html:98 +#: lot/templates/properties.html:24 lot/templates/properties.html:64 +msgid "Value" +msgstr "Valor" + +#: device/templates/details.html:10 device/templates/details.html:37 +msgid "Change state" +msgstr "Canvia l'estat" + +#: device/templates/details.html:14 +msgid "None" +msgstr "Cap" + +#: device/templates/details.html:45 +msgid "Add a note" +msgstr "Afegeix una nota" + +#: device/templates/details.html:58 +msgid "General details" +msgstr "Detalls generals" + +#: device/templates/details.html:67 +msgid "Components" +msgstr "Components" + +#: device/templates/details.html:74 +msgid "Dpps" +msgstr "Dpps" + +#: device/templates/details.html:81 +msgid "Log" +msgstr "" + +#: device/templates/details.html:105 +msgid "Add a Note" +msgstr "Afegeix una nota" + +#: device/templates/details.html:113 +msgid "Note" +msgstr "Nota" + +#: device/templates/details.html:118 +msgid "Save Note" +msgstr "Desa la nota" + +#: device/templates/details.html:127 +msgid "List of dpps" +msgstr "Llista d'dpps" + +#: device/templates/new_device.html:57 +msgid "Component details" +msgstr "Detalls del component" + +#: device/templates/new_device.html:62 +msgid "Add component" +msgstr "Afegeix component" + +#: device/templates/tabs/components.html:5 +msgid "Components last evidence" +msgstr "Última evidència dels components" + +#: device/templates/tabs/documents.html:8 +msgid "Add new document" +msgstr "Afegeix un nou document" + +#: device/templates/tabs/documents.html:18 +#: device/templates/tabs/user_properties.html:18 +#: device/templates/tabs/user_properties.html:94 +#: lot/templates/properties.html:23 lot/templates/properties.html:60 +msgid "Key" +msgstr "Clau" + +#: device/templates/tabs/documents.html:24 +#: device/templates/tabs/user_properties.html:20 +#: lot/templates/properties.html:25 +msgid "Created on" +msgstr "Creat el" + +#: device/templates/tabs/evidences.html:5 +msgid "List of evidences" +msgstr "Llista d'evidències" + +#: device/templates/tabs/evidences.html:12 device/templates/tabs/log.html:9 +#: evidence/templates/ev_details.html:105 +msgid "Date" +msgstr "Data" + +#: device/templates/tabs/general_details.html:6 device/views.py:79 +#: evidence/views.py:97 +msgid "Details" +msgstr "Detalls" + +#: device/templates/tabs/general_details.html:10 +msgid "Phid" +msgstr "Phid" + +#: device/templates/tabs/general_details.html:18 +msgid "Is an erase server" +msgstr "És un servidor d'esborrat" + +#: device/templates/tabs/general_details.html:58 +msgid "Version" +msgstr "Versió" + +#: device/templates/tabs/general_details.html:64 +msgid "Serial Number" +msgstr "Número de sèrie" + +#: device/templates/tabs/general_details.html:72 +msgid "Identifiers" +msgstr "Identificadors" + +#: device/templates/tabs/log.html:10 +msgid "Event" +msgstr "Esdeveniment" + +#: device/templates/tabs/log.html:23 +msgid "No logs recorded." +msgstr "No s'han registrat logs." + +#: device/templates/tabs/user_properties.html:9 +msgid "New user property" +msgstr "Nova propietat d'usuari" + +#: device/templates/tabs/user_properties.html:12 +msgid "User properties" +msgstr "Propietats de l'usuari" + +#: device/templates/tabs/user_properties.html:61 +msgid "Confirm Deletion" +msgstr "Confirma l'eliminació" + +#: device/templates/tabs/user_properties.html:65 +msgid "Key:" +msgstr "Clau:" + +#: device/templates/tabs/user_properties.html:66 +msgid "Value:" +msgstr "Valor:" + +#: device/templates/tabs/user_properties.html:67 +msgid "Created on:" +msgstr "Creat el:" + +#: device/templates/tabs/user_properties.html:87 +msgid "Edit User Property" +msgstr "Edita la propietat d'usuari" + +#: device/templates/tabs/user_properties.html:103 +#: lot/templates/properties.html:69 +msgid "Save changes" +msgstr "Desa els canvis" + +#: device/views.py:42 +msgid "New Device" +msgstr "Nou dispositiu" + +#: device/views.py:43 device/views.py:60 device/views.py:78 device/views.py:79 +#: device/views.py:195 device/views.py:242 +#: evidence/templates/ev_details.html:82 +msgid "Device" +msgstr "Dispositiu" + +#: device/views.py:59 +msgid "Update Device" +msgstr "Actualitza el dispositiu" + +#: device/views.py:60 device/views.py:242 lot/views.py:209 +msgid "Update" +msgstr "Actualitza" + +#: device/views.py:194 +msgid "New User Property" +msgstr "Nova propietat d'usuari" + +#: device/views.py:195 device/views.py:242 lot/views.py:152 lot/views.py:175 +#: lot/views.py:209 +msgid "Property" +msgstr "Propietat" + +#: device/views.py:207 lot/views.py:187 +msgid "Property successfully added." +msgstr "La propietat s'ha afegit correctament." + +#: device/views.py:208 +msgid " UserProperty: {}: {}" +msgstr "" + +#: device/views.py:216 device/views.py:271 lot/views.py:190 lot/views.py:236 +msgid "Property is already defined." +msgstr "La propietat ja està definit." + +#: device/views.py:241 +msgid "Update User Property" +msgstr "Actualitza la propietat d'usuari" + +#: device/views.py:260 lot/views.py:233 +msgid "Property updated successfully." +msgstr "Propietat actualitzada correctament." + +#: device/views.py:261 +msgid " UserProperty: {}: {} to {}: {}" +msgstr "" + +#: device/views.py:297 +msgid " User Property: {}:{}" +msgstr "" + +#: device/views.py:302 +msgid "User property deleted successfully." +msgstr "Propietat d'usuari eliminada correctament." + +#: evidence/forms.py:17 +msgid "File" +msgstr "Fitxer" + +#: evidence/forms.py:40 +msgid "The snapshot already exists" +msgstr "El snapshot ja existeix" + +#: evidence/forms.py:47 +#, python-format +msgid "Error on '%(file_name)s': %(error)s" +msgstr "Error en '%(file_name)s': %(error)s" + +#: evidence/forms.py:108 +msgid " Evidence Tag. Old Value: '{}'" +msgstr "" + +#: evidence/forms.py:119 +msgid " Evidence Tag. Value: '{}'" +msgstr "" + +#: evidence/forms.py:136 +msgid "File to import" +msgstr "Fitxer a importar" + +#: evidence/forms.py:154 +#, python-format +msgid "Error on '%(file_name)s': Invalid File" +msgstr "Error en '%(file_name)s': Fitxer invàlid" + +#: evidence/forms.py:163 +msgid "The file you try to import is empty!" +msgstr "El fitxer que intentes importar està buit!" + +#: evidence/forms.py:199 +msgid "Is a Erase Server" +msgstr "És un servidor d'esborrat" + +#: evidence/templates/ev_details.html:7 +msgid "Download File" +msgstr "Descarrega fitxer" + +#: evidence/templates/ev_details.html:62 +msgid "It is an erase server" +msgstr "És un servidor d'esborrat" + +#: evidence/templates/ev_details.html:65 +msgid "It is not an erase server" +msgstr "No és un servidor d'esborrat" + +#: evidence/templates/ev_details.html:99 +msgid "Algorithm" +msgstr "algorisme" + +#: evidence/templates/ev_details.html:102 +msgid "Device ID" +msgstr "Dispositiu ID" + +#: evidence/templates/upload.html:41 +msgid "Drag and drop here, or click to select manually" +msgstr "Arrossegueu i deixeu anar aquí o feu clic per seleccionar manualment" + +#: evidence/views.py:30 evidence/views.py:46 evidence/views.py:73 +#: evidence/views.py:97 +msgid "Evidence" +msgstr "Evidències" + +#: evidence/views.py:30 +msgid "All" +msgstr "Tots" + +#: evidence/views.py:45 +msgid "Upload Evidence" +msgstr "Carrega evidència" + +#: evidence/views.py:54 +msgid "Upload the snapshots generated by Workbench." +msgstr "Carregueu les instantànies generades per Workbench." + +#: evidence/views.py:60 +msgid "Evidence uploaded successfully." +msgstr "Evidència carregada amb èxit." + +#: evidence/views.py:72 +msgid "Import Evidence" +msgstr "Importa evidència" + +#: evidence/views.py:73 +msgid "Import" +msgstr "Exportacions" + +#: evidence/views.py:84 +msgid "Evidence imported successfully." +msgstr "Evidència importada amb èxit." + +#: evidence/views.py:181 +msgid " Evidence Tag: {}" +msgstr "" + +#: evidence/views.py:190 +msgid "Evicende Tag deleted successfully." +msgstr "Evidència carregada amb èxit." + +#: login/templates/2fadmin.html:8 +msgid "Two-factor Authentication" +msgstr "Autenticació de dos factors" + +#: login/templates/2fadmin.html:15 +msgid "We have sent you an email with a link that you have to click to log in." +msgstr "" +"T'hem enviat un correu electrònic amb un enllaç que has de fer clic per " +"iniciar sessió." + +#: login/templates/2fadmin_email.html:3 login/templates/2fadmin_email.txt:2 +#, python-format +msgid "You're receiving this email because you tried to access %(site_name)s." +msgstr "" +"Estàs rebent aquest correu electrònic perquè has intentat accedir a " +"%(site_name)s." + +#: login/templates/2fadmin_email.html:7 login/templates/2fadmin_email.txt:4 +msgid "Please go to the following page" +msgstr "Si us plau, ves a la pàgina següent" + +#: login/templates/2fadmin_email.html:19 login/templates/2fadmin_email.txt:10 +#: login/templates/activate_user_email.html:24 +#: login/templates/activate_user_email.txt:15 +#: login/templates/password_reset_email.html:23 +#: login/templates/password_reset_email.txt:10 +msgid "Thanks for using our site!" +msgstr "Gràcies per utilitzar el nostre lloc!" + +#: login/templates/2fadmin_email.html:23 login/templates/2fadmin_email.txt:12 +#: login/templates/password_reset_email.html:27 +#: login/templates/password_reset_email.txt:12 +#, python-format +msgid "The %(site_name)s team" +msgstr "L'equip de %(site_name)s" + +#: login/templates/2fadmin_email.txt:8 +#: login/templates/password_reset_email.html:19 +#: login/templates/password_reset_email.txt:8 +msgid "Your username, in case you've forgotten:" +msgstr "El teu nom d'usuari, per si l'has oblidat:" + +#: login/templates/2fadmin_email_subject.txt:2 +#, python-format +msgid "Authentication in %(site_name)s" +msgstr "Autenticació a %(site_name)s" + +#: login/templates/activate_user_email.html:2 +#: login/templates/activate_user_email.txt:3 +msgid "DeviceHub" +msgstr "DeviceHub" + +#: login/templates/activate_user_email.html:4 +#: login/templates/activate_user_email.txt:5 +#, python-format +msgid "" +"You're receiving this email because your user account at %(site)s has been " +"activated." +msgstr "" +"Estàs rebent aquest correu electrònic perquè el teu compte d'usuari a " +"%(site)s ha estat activat." + +#: login/templates/activate_user_email.html:8 +#: login/templates/activate_user_email.txt:7 +msgid "Your username is:" +msgstr "El teu nom d'usuari és:" + +#: login/templates/activate_user_email.html:12 +#: login/templates/activate_user_email.txt:9 +msgid "Please go to the following page and choose a password:" +msgstr "Si us plau, ves a la pàgina següent i tria una contrasenya:" + +#: login/templates/activate_user_email.html:28 +#: login/templates/activate_user_email.txt:17 +#, python-format +msgid "The %(site)s team" +msgstr "L'equip de %(site)s" + +#: login/templates/activate_user_subject.txt:2 +msgid "IdHub" +msgstr "IdHub" + +#: login/templates/activate_user_subject.txt:3 +#, python-format +msgid "User activation on %(site)s" +msgstr "Activació d'usuari a %(site)s" + +#: login/templates/login.html:7 +msgid "Sign in" +msgstr "Inicia sessió" + +#: login/templates/login.html:41 login/views.py:20 +msgid "Login" +msgstr "Inicia sessió" + +#: login/templates/login.html:48 +msgid "Forgot your password?" +msgstr "Has oblidat la teva contrasenya?" + +#: login/templates/login2.html:45 +msgid "Log in" +msgstr "Inicia sessió" + +#: login/templates/login2.html:50 +msgid "Forgot your password? Click here to recover" +msgstr "Has oblidat la teva contrasenya? Fes clic aquí per recuperar-la" + +#: login/templates/password_reset.html:7 +msgid "Password Reset" +msgstr "Restabliment de contrasenya" + +#: login/templates/password_reset.html:9 +msgid "" +"Enter your email address below, and we'll email instructions for setting a " +"new one." +msgstr "" +"Introdueix la teva adreça de correu electrònic a continuació i t'enviarem " +"instruccions per establir-ne una de nova." + +#: login/templates/password_reset.html:15 +msgid "Reset" +msgstr "Restableix" + +#: login/templates/password_reset.html:21 +#: login/templates/password_reset_complete.html:21 +#: login/templates/password_reset_done.html:14 +msgid "Back to login" +msgstr "Torna a iniciar sessió" + +#: login/templates/password_reset_complete.html:10 +msgid "Password reset complete" +msgstr "Restabliment de contrasenya complet" + +#: login/templates/password_reset_complete.html:12 +msgid "Your new password has been set. You may go ahead and log in now." +msgstr "La teva contrasenya ha estat establerta. Ara pots iniciar sessió." + +#: login/templates/password_reset_confirm.html:9 +msgid "Enter new password" +msgstr "Introdueix una nova contrasenya" + +#: login/templates/password_reset_confirm.html:10 +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" +"Si us plau, introdueix la teva nova contrasenya dues vegades perquè puguem " +"verificar que l'has escrit correctament." + +#: login/templates/password_reset_confirm.html:21 +msgid "Change my password" +msgstr "Canvia la meva contrasenya" + +#: login/templates/password_reset_confirm.html:29 +msgid "Password reset unsuccessful" +msgstr "Restabliment de contrasenya no reeixit" + +#: login/templates/password_reset_confirm.html:30 +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used." +msgstr "" +"L'enllaç de restabliment de contrasenya no és vàlid, possiblement perquè ja " +"s'ha utilitzat." + +#: login/templates/password_reset_confirm.html:31 +msgid "Please request a new password reset." +msgstr "Si us plau, sol·licita un nou restabliment de contrasenya." + +#: login/templates/password_reset_done.html:7 +msgid "Password reset sent" +msgstr "Restabliment de contrasenya enviat" + +#: login/templates/password_reset_done.html:8 +msgid "" +"We've sent you an email with instructions to reset your password. If an " +"account with the provided email exists, you should receive it shortly." +msgstr "" +"T'hem enviat per correu electrònic instruccions per establir la teva " +"contrasenya, si existeix un compte amb el correu electrònic que has " +"introduït. Hauries de rebre-les en breu." + +#: login/templates/password_reset_done.html:9 +msgid "" +"If you don't receive an email, please check the email address you entered " +"and look in your spam folder." +msgstr "" +"Si no reps un correu electrònic, si us plau, assegura't que has introduït " +"l'adreça amb la qual et vas registrar i revisa la teva carpeta de correu " +"brossa." + +#: login/templates/password_reset_email.html:3 +#: login/templates/password_reset_email.txt:2 +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"Estàs rebent aquest correu electrònic perquè has sol·licitat un restabliment " +"de contrasenya per al teu compte d'usuari a %(site_name)s." + +#: login/templates/password_reset_email.html:7 +#: login/templates/password_reset_email.txt:4 +msgid "Please go to the following page and choose a new password:" +msgstr "Si us plau, aneu a la pàgina següent i trieu una nova contrasenya:" + +#: login/templates/password_reset_subject.txt:2 +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "Restabliment de la contrasenya a %(site_name)s" + +#: login/views.py:45 +msgid "Login error. Check credentials." +msgstr "Error d'inici de sessió. comprovar les credencials" + +#: lot/templates/lots.html:8 lot/views.py:19 +msgid "New lot" +msgstr "Nou lot" + +#: lot/templates/lots.html:18 +msgid "Search lots..." +msgstr "Cerca lots" + +#: lot/templates/lots.html:28 +msgid "Filter" +msgstr "Filtre" + +#: lot/templates/lots.html:33 +msgid "Open Lots" +msgstr "Lots oberts" + +#: lot/templates/lots.html:38 +msgid "Closed Lots" +msgstr "Lots tancats" + +#: lot/templates/lots.html:41 +msgid "Clear Filters" +msgstr "netejar els filtres" + +#: lot/templates/lots.html:52 +msgid "Lot Name" +msgstr "Lot Nom" + +#: lot/templates/lots.html:53 +msgid "Description" +msgstr "Descripció" + +#: lot/templates/lots.html:54 +msgid "Status" +msgstr "Estat" + +#: lot/templates/lots.html:55 +msgid "Created On" +msgstr "Creat el" + +#: lot/templates/lots.html:56 +msgid "Created By" +msgstr "Creat el" + +#: lot/templates/properties.html:53 +msgid "Edit Property" +msgstr "Edita la propietat" + +#: lot/templates/properties.html:81 +msgid "Delete Property" +msgstr "Elimina la propietat" + +#: lot/templates/properties.html:85 +msgid "Are you sure you want to delete this property?" +msgstr "Estàs segur que vols eliminar aquesta propietat?" + +#: lot/views.py:40 +msgid "Delete lot" +msgstr "Elimina el lot" + +#: lot/views.py:59 +msgid "Edit lot" +msgstr "Edita el lot" + +#: lot/views.py:85 +msgid "Add to lots" +msgstr "Afegeix als lots" + +#: lot/views.py:86 +msgid "Assign Device" +msgstr "Assignar dispositiu" + +#: lot/views.py:114 +msgid "Remove from lots" +msgstr "Elimina dels lots" + +#: lot/views.py:115 +msgid "Unassign Device" +msgstr "Dispositius no assignats" + +#: lot/views.py:126 +msgid "lots" +msgstr "lots" + +#: lot/views.py:151 lot/views.py:174 +msgid "New Lot Property" +msgstr "Nova propietat del lot" + +#: lot/views.py:208 +msgid "Update lot Property" +msgstr "Actualitza la propietat del lot" + +#: lot/views.py:256 +msgid "Lot property deleted successfully." +msgstr "Propietat del lot eliminada correctament." + +#: user/models.py:16 +msgid "Logo" +msgstr "Logotip" + +#: user/models.py:17 +msgid "Location" +msgstr "Ubicació" + +#: user/models.py:19 +msgid "Responsable" +msgstr "Responsable" + +#: user/models.py:25 +msgid "Supervisor" +msgstr "Supervisor" + +#: user/models.py:67 +msgid "Email address" +msgstr "Adreça electrònica" + +#: user/models.py:71 +msgid "is active" +msgstr "està actiu" + +#: user/models.py:72 +msgid "is admin" +msgstr "és administrador" + +#: user/models.py:73 +msgid "First name" +msgstr "Nom" + +#: user/models.py:74 +msgid "Last name" +msgstr "Cognom" + +#: user/templates/panel.html:25 +msgid "Token Management" +msgstr "Gestió de credencials" + +#: user/templates/panel.html:27 +msgid "Manage your personal tokens for using Devicehub." +msgstr "Gestioneu les vostres fitxes personals per utilitzar Devicehub." + +#: user/templates/panel.html:30 user/templates/panel.html:46 +msgid "Go" +msgstr "Anar" + +#: user/templates/panel.html:43 +msgid "Download a settings file for your Workbench." +msgstr "Descarrega un fitxer de configuració per al vostre Workbench" + +#: user/views.py:25 +msgid "Download Settings" +msgstr "Descarrega configuració" + +#~ msgid "INBOX" +#~ msgstr "SAFATA D'ENTRADA" + +#~ msgid "VISUAL INSPECTION" +#~ msgstr "INSPECCIÓ VISUAL" + +#~ msgid "REPAIR" +#~ msgstr "REPARACIÓ" + +#~ msgid "INSTALL" +#~ msgstr "INSTALLACIÓ" + +#~ msgid "TEST" +#~ msgstr "PROVA" + +#~ msgid "PACKAGING" +#~ msgstr "EMBALATGE" + +#~ msgid "DONATION" +#~ msgstr "DONACIÓ" + +#~ msgid "DISMANTLE" +#~ msgstr "DESMUNTATGE" + +#~ msgid "Add" +#~ msgstr "Afegeix" + +#~ msgid "admin" +#~ msgstr "administrador" + +#~ msgid "Remove" +#~ msgstr "Elimina" + +#~ msgid "View recent notes" +#~ msgstr "Veure notes recents" + +#~ msgid "Journal" +#~ msgstr "Diari" + +#~ msgid "Latest Notes" +#~ msgstr "Últimes notes" + +#~ msgid "ago" +#~ msgstr "fa" + +#~ msgid "Editable" +#~ msgstr "Editable" + +#~ msgid "Delete note" +#~ msgstr "Elimina la nota" + +#~ msgid "Are you sure you want to delete this note?" +#~ msgstr "Estàs segur que vols eliminar aquesta nota?" + +#~ msgid "Confirm delete" +#~ msgstr "Confirma l'eliminació" + +#~ msgid "No notes available." +#~ msgstr "No hi ha notes disponibles." + +#~ msgid "User property updated successfully." +#~ msgstr "Propietat d'usuari actualitzada correctament." + +#~ msgid "New Document" +#~ msgstr "Nou document" + +#~ msgid "Erase Server" +#~ msgstr "Servidor d'esborrat" + +#~ msgid "Identificator" +#~ msgstr "Identificador" + +#~ msgid "Data" +#~ msgstr "Dades" + +#~ msgid " Created on" +#~ msgstr "Creat el" + +#~ msgid "Show closed lots" +#~ msgstr "Mostra lots tancats" + +#~ msgid "Add new lot" +#~ msgstr "Afegeix un nou lot" + +#~ msgid "Admin your Tokens" +#~ msgstr "Administra els teus tokens" diff --git a/locale/es/LC_MESSAGES/django.mo b/locale/es/LC_MESSAGES/django.mo new file mode 100644 index 0000000..d213256 Binary files /dev/null and b/locale/es/LC_MESSAGES/django.mo differ diff --git a/locale/es/LC_MESSAGES/django.po b/locale/es/LC_MESSAGES/django.po new file mode 100644 index 0000000..5d6a24c --- /dev/null +++ b/locale/es/LC_MESSAGES/django.po @@ -0,0 +1,1291 @@ +# Devicehub-django - Traducción al español +# Este archivo se distribuye bajo la misma licencia que el paquete PACKAGE. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: 1.0 \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-02-17 16:14-0300\n" +"PO-Revision-Date: 2025-01-27 12:49-0300\n" +"Last-Translator: NOMBRE COMPLETO \n" +"Language-Team: \n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: action/views.py:28 +msgid " State '{}'. Previous State: '{}'" +msgstr "" + +#: action/views.py:35 +msgid "State successfully changed from '{}' to '{}'" +msgstr "El estado se cambió correctamente de '{}' a '{}'" + +#: action/views.py:39 action/views.py:70 +msgid "There was an error with your submission." +msgstr "Hubo un error con tu envío." + +#: action/views.py:59 +msgid " Note: '{}'" +msgstr "" + +#: action/views.py:66 +msgid "Note has been added" +msgstr "Se ha agregado la nota" + +#: action/views.py:88 +msgid " Note. Old Description: '{}'. New Description: '{}'" +msgstr "" + +#: action/views.py:101 +msgid "Note cannot be empty." +msgstr "La nota no puede estar vacía." + +#: action/views.py:127 +msgid "You do not have permission to delete this note." +msgstr "No tenés permiso para eliminar esta nota." + +#: action/views.py:130 +msgid " Note. Description: '{}'. " +msgstr "" + +#: action/views.py:137 +msgid "Note '{}' deleted successfully." +msgstr "Nota '{}' eliminada correctamente." + +#: admin/templates/admin_panel.html:13 admin/views.py:119 +msgid "Institution" +msgstr "Institución" + +#: admin/templates/admin_panel.html:16 +msgid "Edit and manage the institution's details and settings." +msgstr "Edite y administre la información de su institución." + +#: admin/templates/admin_panel.html:20 +msgid "Edit Institution" +msgstr "Editar institución" + +#: admin/templates/admin_users.html:8 +msgid "New user" +msgstr "Nuevo usuario" + +#: admin/templates/admin_users.html:21 +msgid "Email" +msgstr "Correo electrónico" + +#: admin/templates/admin_users.html:22 admin/views.py:33 admin/views.py:34 +#: admin/views.py:44 admin/views.py:57 admin/views.py:82 admin/views.py:99 +#: admin/views.py:119 admin/views.py:160 dashboard/templates/base.html:94 +msgid "Admin" +msgstr "Administrador" + +#: admin/templates/admin_users.html:23 admin/templates/states_panel.html:29 +#: device/templates/tabs/user_properties.html:21 lot/templates/lots.html:57 +msgid "Actions" +msgstr "Acciones" + +#: admin/templates/admin_users.html:30 +#: device/templates/tabs/general_details.html:20 +msgid "Yes" +msgstr "Sí" + +#: admin/templates/admin_users.html:30 +msgid "No" +msgstr "No" + +#: admin/templates/delete_user.html:16 +msgid "" +"\n" +" Are you sure you want to remove the lot %(object.name)s with %(object.devices.count)s devices?\n" +" " +msgstr "" +"\n" +"Seguro que quiere eliminar el lote %(object.name)s con " +"%(object.devices.count)s dispositivo/s?\n" +" " + +#: admin/templates/delete_user.html:38 admin/templates/institution.html:41 +#: admin/templates/states_panel.html:144 admin/templates/states_panel.html:184 +#: admin/templates/user.html:27 api/templates/new_token.html:27 +#: device/templates/details.html:117 device/templates/new_device.html:78 +#: device/templates/new_user_property.html:39 +#: device/templates/tabs/user_properties.html:70 +#: device/templates/tabs/user_properties.html:102 +#: evidence/templates/ev_details.html:153 evidence/templates/upload.html:73 +#: lot/templates/delete_lot.html:33 lot/templates/new_lot.html:27 +#: lot/templates/new_property.html:39 lot/templates/properties.html:68 +#: lot/templates/properties.html:88 user/templates/settings.html:27 +msgid "Cancel" +msgstr "Cancelar" + +#: admin/templates/delete_user.html:41 admin/templates/states_panel.html:66 +#: admin/templates/states_panel.html:187 admin/views.py:82 api/tables.py:29 +#: device/templates/tabs/user_properties.html:44 +#: device/templates/tabs/user_properties.html:73 +#: evidence/templates/ev_details.html:158 lot/templates/delete_lot.html:34 +#: lot/templates/lots.html:81 lot/templates/properties.html:43 +#: lot/templates/properties.html:91 lot/views.py:41 +msgid "Delete" +msgstr "Eliminar" + +#: admin/templates/institution.html:17 +msgid "Please fix the following errors:" +msgstr "Por favor, ve a la siguiente página" + +#: admin/templates/institution.html:44 admin/templates/user.html:28 +#: api/templates/new_token.html:28 device/templates/new_device.html:79 +#: device/templates/new_user_property.html:40 +#: evidence/templates/ev_details.html:46 evidence/templates/ev_details.html:154 +#: lot/templates/new_lot.html:28 lot/templates/new_property.html:40 +#: user/templates/settings.html:28 +msgid "Save" +msgstr "Guardar" + +#: admin/templates/states_panel.html:7 +msgid "New State" +msgstr "Nuevo Estado" + +#: admin/templates/states_panel.html:19 +msgid "Move and drag state definitions to reorder" +msgstr "Mové y arrastrá las definiciones de estado para reordenarlas" + +#: admin/templates/states_panel.html:27 +msgid "State Definition" +msgstr "Definición de Estado" + +#: admin/templates/states_panel.html:59 admin/views.py:99 +#: device/templates/tabs/user_properties.html:37 lot/templates/lots.html:77 +#: lot/templates/properties.html:39 lot/views.py:60 +msgid "Edit" +msgstr "Editar" + +#: admin/templates/states_panel.html:78 +msgid "Update Order" +msgstr "Actualizar orden" + +#: admin/templates/states_panel.html:84 +msgid "No states found on current organization" +msgstr "No se encontraron estados en la organización actual" + +#: admin/templates/states_panel.html:95 +msgid "Add State Definition" +msgstr "Agregar Definición de Estado" + +#: admin/templates/states_panel.html:103 admin/templates/states_panel.html:136 +msgid "State" +msgstr "Estado" + +#: admin/templates/states_panel.html:105 admin/templates/states_panel.html:138 +msgid "Maximum 50 characters." +msgstr "Máximo 50 caracteres." + +#: admin/templates/states_panel.html:108 admin/templates/states_panel.html:129 +#: admin/templates/states_panel.html:163 device/templates/details.html:106 +#: lot/templates/properties.html:54 lot/templates/properties.html:82 +msgid "Close" +msgstr "Cerrar" + +#: admin/templates/states_panel.html:109 +msgid "Add state definition" +msgstr "Agregar definición de estado" + +#: admin/templates/states_panel.html:127 +msgid "Edit State Definition" +msgstr "Editar Definición de Estado" + +#: admin/templates/states_panel.html:133 +msgid "" +"Existing devices with this state will not have their state names changed." +msgstr "" +"Los dispositivos existentes con este estado no tendrán sus nombres de estado " +"modificados." + +#: admin/templates/states_panel.html:141 admin/templates/states_panel.html:176 +msgid "Any changes in order will not be saved." +msgstr "Cualquier cambio en el orden no se guardará." + +#: admin/templates/states_panel.html:145 +msgid "Save Changes" +msgstr "Guardar Cambios" + +#: admin/templates/states_panel.html:161 +msgid "Delete State Definition" +msgstr "Eliminar Definición de Estado" + +#: admin/templates/states_panel.html:167 +msgid "" +"Devices with a State of this description will not have their State altered" +msgstr "" +"Los dispositivos con un Estado de esta descripción no tendrán su Estado " +"modificado." + +#: admin/views.py:34 admin/views.py:44 dashboard/templates/base.html:99 +msgid "Panel" +msgstr "Panel" + +#: admin/views.py:43 admin/views.py:44 admin/views.py:57 admin/views.py:82 +#: admin/views.py:99 dashboard/templates/base.html:104 +msgid "Users" +msgstr "Usuarios" + +#: admin/views.py:56 device/templates/tabs/log.html:11 user/views.py:18 +msgid "User" +msgstr "Usuario" + +#: admin/views.py:57 device/views.py:43 device/views.py:195 lot/views.py:20 +#: lot/views.py:175 +msgid "New" +msgstr "Nuevo" + +#: admin/views.py:81 +msgid "Delete user" +msgstr "Eliminar usuario" + +#: admin/views.py:98 +msgid "Edit user" +msgstr "Editar usuario" + +#: admin/views.py:117 admin/views.py:120 +msgid "Edit institution" +msgstr "Editar institución" + +#: admin/views.py:133 +msgid "Full name of the institution." +msgstr "Nombre entero de la institucion" + +#: admin/views.py:134 +msgid "URL to the institution's logo." +msgstr "URL que apunte al logo de la institución" + +#: admin/views.py:135 +msgid "The address or city of the institution." +msgstr "Dirección o ciudad de la institución." + +#: admin/views.py:136 +msgid "Name of the institution's responsable person." +msgstr "Nombre del responsable de la institución" + +#: admin/views.py:137 +msgid "The supervisor's full name." +msgstr "Nombre del supervisor" + +#: admin/views.py:152 +msgid "State definitions are the custom finite states that a device can be in." +msgstr "" +"Las definiciones de estado son los estados personalizados en los que puede " +"estar un dispositivo." + +#: admin/views.py:159 +msgid "States Panel" +msgstr "Panel de Estados" + +#: admin/views.py:160 dashboard/templates/base.html:109 +msgid "States" +msgstr "Estados" + +#: admin/views.py:165 +msgid "New State Definition" +msgstr "Nueva Definición de Estado" + +#: admin/views.py:176 +msgid "State definition successfully added." +msgstr "Definición de estado agregada correctamente." + +#: admin/views.py:179 admin/views.py:245 +msgid "State is already defined." +msgstr "El estado ya está definido." + +#: admin/views.py:223 +msgid "Order changed succesfuly." +msgstr "Orden cambiado correctamente." + +#: admin/views.py:242 +msgid "State definition updated successfully." +msgstr "Definición de estado actualizada correctamente." + +#: api/tables.py:51 dashboard/templates/base.html:76 +msgid "Token" +msgstr "Token" + +#: api/tables.py:52 evidence/forms.py:68 evidence/templates/ev_details.html:85 +msgid "Tag" +msgstr "Etiqueta" + +#: api/templates/custom_table.html:65 dashboard/templates/pagination.html:13 +msgid "Previous" +msgstr "Anterior" + +#: api/templates/custom_table.html:91 dashboard/templates/pagination.html:38 +msgid "Next" +msgstr "Siguiente" + +#: api/templates/token.html:13 +msgid "Generate a new token" +msgstr "Generar un nuevo token" + +#: api/views.py:146 api/views.py:180 api/views.py:198 +msgid "Credential management" +msgstr "Gestión de credenciales" + +#: api/views.py:148 +msgid "Managament Tokens" +msgstr "Tokens de gestión" + +#: api/views.py:182 api/views.py:200 +msgid "New Tokens" +msgstr "Nuevos Tokens" + +#: dashboard/mixins.py:15 +msgid "Permission denied. User is not authenticated" +msgstr "Permiso denegado. El usuario no está autenticado" + +#: dashboard/templates/base.html:75 +msgid "Profile" +msgstr "Perfil" + +#: dashboard/templates/base.html:77 user/templates/panel.html:41 +msgid "Settings File" +msgstr "Archivo de configuración" + +#: dashboard/templates/base.html:79 +msgid "Logout" +msgstr "Cerrar sesión" + +#: dashboard/templates/base.html:118 dashboard/views.py:19 +#: dashboard/views.py:29 dashboard/views.py:53 +msgid "Devices" +msgstr "Dispositivos" + +#: dashboard/templates/base.html:123 +#: dashboard/templates/inventory_dashboard.html:29 dashboard/views.py:19 +msgid "Unassigned" +msgstr "Sin asignar" + +#: dashboard/templates/base.html:131 device/templates/details.html:64 +msgid "Lots" +msgstr "Lotes" + +#: dashboard/templates/base.html:146 device/templates/details.html:70 +#: evidence/views.py:29 evidence/views.py:96 +msgid "Evidences" +msgstr "Evidencias" + +#: dashboard/templates/base.html:151 evidence/templates/upload.html:75 +#: evidence/views.py:46 +msgid "Upload" +msgstr "Subir" + +#: dashboard/templates/base.html:156 +msgid "Old evidences" +msgstr "Evidencias antiguas" + +#: dashboard/templates/base.html:164 +msgid "Placeholders" +msgstr "Placeholders" + +#: dashboard/templates/base.html:169 +msgid "Import from spreadsheet" +msgstr "Importar desde hoja de cálculo" + +#: dashboard/templates/base.html:174 +msgid "Add device" +msgstr "Agregar dispositivo" + +#: dashboard/templates/base.html:205 +msgid "Search your device" +msgstr "Buscar dispositivos" + +#: dashboard/templates/inventory_dashboard.html:13 +msgid "Total Devices" +msgstr "Total de Dispositivos" + +#: dashboard/templates/inventory_dashboard.html:21 +msgid "Assigned" +msgstr "Asignados" + +#: dashboard/templates/inventory_dashboard.html:38 +msgid "States Distribution" +msgstr "Distribución de Estados" + +#: dashboard/templates/inventory_dashboard.html:40 +msgid "Active" +msgstr "Activo" + +#: dashboard/templates/inventory_dashboard.html:41 +msgid "Repair" +msgstr "Reparación" + +#: dashboard/templates/inventory_dashboard.html:42 +msgid "Discarded" +msgstr "Descartado" + +#: dashboard/templates/unassigned_devices.html:8 +msgid " NOT IMPLEMENTED. Menu for adding documents for the lot" +msgstr "NO IMPLEMENTADO. Menú para agregar documentos al lote" + +#: dashboard/templates/unassigned_devices.html:10 +#: device/templates/tabs/documents.html:12 +msgid "Documents" +msgstr "Documentos" + +#: dashboard/templates/unassigned_devices.html:16 +#: device/templates/details.html:61 +msgid "Properties" +msgstr "Propiedades" + +#: dashboard/templates/unassigned_devices.html:19 +msgid "" +"NOT IMPLEMENTED. This action tries to emulate what devicehub-teal did, which " +"was related to opening a dialog where you can select different options for " +"export the devices as csv for all selected devices" +msgstr "" +"SIN IMPLEMENTAR. Esta acción trata de emular lo que hacía devicehub-teal, lo cual" +"estaba relacionado a una ventana de dialógo donde se podía seleccionar diferentes opciones" +"para exportar los dispositivos seleccionados" + +#: dashboard/templates/unassigned_devices.html:21 +msgid "Exports" +msgstr "Exportar" + +#: dashboard/templates/unassigned_devices.html:30 dashboard/views.py:29 +#: lot/views.py:20 lot/views.py:41 lot/views.py:60 lot/views.py:86 +#: lot/views.py:115 lot/views.py:127 lot/views.py:152 lot/views.py:175 +#: lot/views.py:209 +msgid "Lot" +msgstr "Lote" + +#: dashboard/templates/unassigned_devices.html:40 +msgid "Unassign" +msgstr "Sin asignar" + +#: dashboard/templates/unassigned_devices.html:44 +msgid "Assign to lot" +msgstr "Asignar a lote" + +#: dashboard/templates/unassigned_devices.html:55 +msgid "Short ID" +msgstr "ID Corto" + +#: dashboard/templates/unassigned_devices.html:58 device/forms.py:25 +#: device/templates/tabs/general_details.html:26 +msgid "Type" +msgstr "Tipo" + +#: dashboard/templates/unassigned_devices.html:61 +#: device/templates/tabs/general_details.html:43 +msgid "Manufacturer" +msgstr "Fabricante" + +#: dashboard/templates/unassigned_devices.html:64 +#: device/templates/tabs/general_details.html:50 +msgid "Model" +msgstr "Modelo" + +#: dashboard/templates/unassigned_devices.html:67 +msgid "Current State" +msgstr "" + +#: dashboard/templates/unassigned_devices.html:70 +msgid "Evidence last updated" +msgstr "Última actualización" + +#: dashboard/views.py:18 +msgid "Unassigned Devices" +msgstr "Dispositivos sin asignar" + +#: dashboard/views.py:28 +msgid "Lot Devices" +msgstr "Dispositivos del lote" + +#: dashboard/views.py:52 +msgid "Search Devices" +msgstr "Buscar dispositivos" + +#: dashboard/views.py:53 +msgid "Search" +msgstr "Buscar" + +#: device/forms.py:26 +msgid "Amount" +msgstr "Cantidad" + +#: device/forms.py:27 +msgid "Custom id" +msgstr "ID personalizado" + +#: device/forms.py:28 user/models.py:10 +msgid "Name" +msgstr "Nombre" + +#: device/forms.py:29 device/templates/tabs/documents.html:21 +#: device/templates/tabs/user_properties.html:19 +#: device/templates/tabs/user_properties.html:98 +#: lot/templates/properties.html:24 lot/templates/properties.html:64 +msgid "Value" +msgstr "Valor" + +#: device/templates/details.html:10 device/templates/details.html:37 +msgid "Change state" +msgstr "Cambiar estado" + +#: device/templates/details.html:14 +msgid "None" +msgstr "N/a" + +#: device/templates/details.html:45 +msgid "Add a note" +msgstr "Agregar nota" + +#: device/templates/details.html:58 +msgid "General details" +msgstr "Detalles generales" + +#: device/templates/details.html:67 +msgid "Components" +msgstr "Componentes" + +#: device/templates/details.html:74 +msgid "Dpps" +msgstr "" + +#: device/templates/details.html:81 +msgid "Log" +msgstr "" + +#: device/templates/details.html:105 +msgid "Add a Note" +msgstr "Agregar nuevo lote" + +#: device/templates/details.html:113 +msgid "Note" +msgstr "Nota" + +#: device/templates/details.html:118 +msgid "Save Note" +msgstr "Guardar nota" + +#: device/templates/details.html:127 +msgid "List of dpps" +msgstr "Lista de dpps" + +#: device/templates/new_device.html:57 +msgid "Component details" +msgstr "Detalles del componente" + +#: device/templates/new_device.html:62 +msgid "Add component" +msgstr "Agregar componente" + +#: device/templates/tabs/components.html:5 +msgid "Components last evidence" +msgstr "Última evidencia de componentes" + +#: device/templates/tabs/documents.html:8 +msgid "Add new document" +msgstr "Agregar nuevo documento" + +#: device/templates/tabs/documents.html:18 +#: device/templates/tabs/user_properties.html:18 +#: device/templates/tabs/user_properties.html:94 +#: lot/templates/properties.html:23 lot/templates/properties.html:60 +msgid "Key" +msgstr "Clave" + +#: device/templates/tabs/documents.html:24 +#: device/templates/tabs/user_properties.html:20 +#: lot/templates/properties.html:25 +msgid "Created on" +msgstr "Creado el" + +#: device/templates/tabs/evidences.html:5 +msgid "List of evidences" +msgstr "Lista de evidencias" + +#: device/templates/tabs/evidences.html:12 device/templates/tabs/log.html:9 +#: evidence/templates/ev_details.html:105 +msgid "Date" +msgstr "Fecha" + +#: device/templates/tabs/general_details.html:6 device/views.py:79 +#: evidence/views.py:97 +msgid "Details" +msgstr "Detalles" + +#: device/templates/tabs/general_details.html:10 +msgid "Phid" +msgstr "" + +#: device/templates/tabs/general_details.html:18 +msgid "Is an erase server" +msgstr "Es un servidor de borrado" + +#: device/templates/tabs/general_details.html:58 +msgid "Version" +msgstr "Versión" + +#: device/templates/tabs/general_details.html:64 +msgid "Serial Number" +msgstr "Número de serie" + +#: device/templates/tabs/general_details.html:72 +msgid "Identifiers" +msgstr "Identificadores" + +#: device/templates/tabs/log.html:10 +msgid "Event" +msgstr "Evento" + +#: device/templates/tabs/log.html:23 +msgid "No logs recorded." +msgstr "No existen registros" + +#: device/templates/tabs/user_properties.html:9 +msgid "New user property" +msgstr "Nuevo propiedad del usuario" + +#: device/templates/tabs/user_properties.html:12 +msgid "User properties" +msgstr "Propiedades del usuario" + +#: device/templates/tabs/user_properties.html:61 +msgid "Confirm Deletion" +msgstr "Confirmar borrado" + +#: device/templates/tabs/user_properties.html:65 +msgid "Key:" +msgstr "Llave:" + +#: device/templates/tabs/user_properties.html:66 +msgid "Value:" +msgstr "Valor:" + +#: device/templates/tabs/user_properties.html:67 +msgid "Created on:" +msgstr "Creado el:" + +#: device/templates/tabs/user_properties.html:87 +msgid "Edit User Property" +msgstr "Editar propiedad del usuarior" + +#: device/templates/tabs/user_properties.html:103 +#: lot/templates/properties.html:69 +msgid "Save changes" +msgstr "Guardar Cambios" + +#: device/views.py:42 +msgid "New Device" +msgstr "Nuevo dispositivo" + +#: device/views.py:43 device/views.py:60 device/views.py:78 device/views.py:79 +#: device/views.py:195 device/views.py:242 +#: evidence/templates/ev_details.html:82 +msgid "Device" +msgstr "Dispositivo" + +#: device/views.py:59 +msgid "Update Device" +msgstr "Actualizar dispositivo" + +#: device/views.py:60 device/views.py:242 lot/views.py:209 +msgid "Update" +msgstr "Actualizar" + +#: device/views.py:194 +msgid "New User Property" +msgstr "Nueva propiedad del usuario" + +#: device/views.py:195 device/views.py:242 lot/views.py:152 lot/views.py:175 +#: lot/views.py:209 +msgid "Property" +msgstr "Propiedad" + +#: device/views.py:207 lot/views.py:187 +msgid "Property successfully added." +msgstr "Propiedad agregada exitosamente." + +#: device/views.py:208 +msgid " UserProperty: {}: {}" +msgstr "" + +#: device/views.py:216 device/views.py:271 lot/views.py:190 lot/views.py:236 +msgid "Property is already defined." +msgstr "La propiedad ya se encuentra registrada." + +#: device/views.py:241 +msgid "Update User Property" +msgstr "Actualizar Propiedad del usuario" + +#: device/views.py:260 lot/views.py:233 +msgid "Property updated successfully." +msgstr "Propiedad actualizada exitosamente." + +#: device/views.py:261 +msgid " UserProperty: {}: {} to {}: {}" +msgstr "" + +#: device/views.py:297 +msgid " User Property: {}:{}" +msgstr "" + +#: device/views.py:302 +msgid "User property deleted successfully." +msgstr "Propiedad del usuario borrada exitosamente." + +#: evidence/forms.py:17 +msgid "File" +msgstr "Archivo" + +#: evidence/forms.py:40 +msgid "The snapshot already exists" +msgstr "El snapshot ya existe" + +#: evidence/forms.py:47 +#, python-format +msgid "Error on '%(file_name)s': %(error)s" +msgstr "Error en '%(file_name)s': %(error)s" + +#: evidence/forms.py:108 +msgid " Evidence Tag. Old Value: '{}'" +msgstr "" + +#: evidence/forms.py:119 +msgid " Evidence Tag. Value: '{}'" +msgstr "" + +#: evidence/forms.py:136 +msgid "File to import" +msgstr "Archivo a importar" + +#: evidence/forms.py:154 +#, python-format +msgid "Error on '%(file_name)s': Invalid File" +msgstr "Error en '%(file_name)s': Archivo inválido" + +#: evidence/forms.py:163 +msgid "The file you try to import is empty!" +msgstr "¡El archivo que intentas importar está vacío!" + +#: evidence/forms.py:199 +msgid "Is a Erase Server" +msgstr "Es un servidor de borrado" + +#: evidence/templates/ev_details.html:7 +msgid "Download File" +msgstr "Descargar archivo" + +#: evidence/templates/ev_details.html:62 +msgid "It is an erase server" +msgstr "Es un servidor de borrado" + +#: evidence/templates/ev_details.html:65 +msgid "It is not an erase server" +msgstr "No es servidor de borrado" + +#: evidence/templates/ev_details.html:99 +msgid "Algorithm" +msgstr "Algoritmo" + +#: evidence/templates/ev_details.html:102 +msgid "Device ID" +msgstr "ID dispositivo" + +#: evidence/templates/upload.html:41 +msgid "Drag and drop here, or click to select manually" +msgstr "Arrastra y suelta aquí, o haz click para seleccionar manualmente" + +#: evidence/views.py:30 evidence/views.py:46 evidence/views.py:73 +#: evidence/views.py:97 +msgid "Evidence" +msgstr "Evidencia" + +#: evidence/views.py:30 +msgid "All" +msgstr "Todo" + +#: evidence/views.py:45 +msgid "Upload Evidence" +msgstr "Subir evidencia" + +#: evidence/views.py:54 +msgid "Upload the snapshots generated by Workbench." +msgstr "Sube los snapshots generado por Workbench" + +#: evidence/views.py:60 +msgid "Evidence uploaded successfully." +msgstr "Evidencia subida exitosamente." + +#: evidence/views.py:72 +msgid "Import Evidence" +msgstr "Importar evidencia" + +#: evidence/views.py:73 +msgid "Import" +msgstr "Importar" + +#: evidence/views.py:84 +msgid "Evidence imported successfully." +msgstr "Evidencia importada exitosamente." + +#: evidence/views.py:181 +msgid " Evidence Tag: {}" +msgstr "" + +#: evidence/views.py:190 +msgid "Evicende Tag deleted successfully." +msgstr "Tag de la evidencia eliminado exitosamente." + +#: login/templates/2fadmin.html:8 +msgid "Two-factor Authentication" +msgstr "Autenticación de dos factores" + +#: login/templates/2fadmin.html:15 +msgid "We have sent you an email with a link that you have to click to log in." +msgstr "" +"Te hemos enviado un correo electrónico con un enlace que debes hacer clic " +"para iniciar sesión." + +#: login/templates/2fadmin_email.html:3 login/templates/2fadmin_email.txt:2 +#, python-format +msgid "You're receiving this email because you tried to access %(site_name)s." +msgstr "" +"Estás recibiendo este correo electrónico porque intentaste acceder a " +"%(site_name)s." + +#: login/templates/2fadmin_email.html:7 login/templates/2fadmin_email.txt:4 +msgid "Please go to the following page" +msgstr "Por favor, ve a la siguiente página" + +#: login/templates/2fadmin_email.html:19 login/templates/2fadmin_email.txt:10 +#: login/templates/activate_user_email.html:24 +#: login/templates/activate_user_email.txt:15 +#: login/templates/password_reset_email.html:23 +#: login/templates/password_reset_email.txt:10 +msgid "Thanks for using our site!" +msgstr "¡Gracias por usar nuestro sitio!" + +#: login/templates/2fadmin_email.html:23 login/templates/2fadmin_email.txt:12 +#: login/templates/password_reset_email.html:27 +#: login/templates/password_reset_email.txt:12 +#, python-format +msgid "The %(site_name)s team" +msgstr "El equipo de %(site_name)s" + +#: login/templates/2fadmin_email.txt:8 +#: login/templates/password_reset_email.html:19 +#: login/templates/password_reset_email.txt:8 +msgid "Your username, in case you've forgotten:" +msgstr "Tu nombre de usuario, en caso de que lo hayas olvidado:" + +#: login/templates/2fadmin_email_subject.txt:2 +#, python-format +msgid "Authentication in %(site_name)s" +msgstr "Autenticación en %(site_name)s" + +#: login/templates/activate_user_email.html:2 +#: login/templates/activate_user_email.txt:3 +msgid "DeviceHub" +msgstr "DeviceHub" + +#: login/templates/activate_user_email.html:4 +#: login/templates/activate_user_email.txt:5 +#, python-format +msgid "" +"You're receiving this email because your user account at %(site)s has been " +"activated." +msgstr "" +"Estás recibiendo este correo electrónico porque tu cuenta de usuario en " +"%(site)s ha sido activada." + +#: login/templates/activate_user_email.html:8 +#: login/templates/activate_user_email.txt:7 +msgid "Your username is:" +msgstr "Tu nombre de usuario es:" + +#: login/templates/activate_user_email.html:12 +#: login/templates/activate_user_email.txt:9 +msgid "Please go to the following page and choose a password:" +msgstr "Por favor, ve a la siguiente página y elige una contraseña:" + +#: login/templates/activate_user_email.html:28 +#: login/templates/activate_user_email.txt:17 +#, python-format +msgid "The %(site)s team" +msgstr "El equipo de %(site)s" + +#: login/templates/activate_user_subject.txt:2 +msgid "IdHub" +msgstr "IdHub" + +#: login/templates/activate_user_subject.txt:3 +#, python-format +msgid "User activation on %(site)s" +msgstr "Activación de usuario en %(site)s" + +#: login/templates/login.html:7 +msgid "Sign in" +msgstr "Iniciar sesión" + +#: login/templates/login.html:41 login/views.py:20 +msgid "Login" +msgstr "Iniciar sesión" + +#: login/templates/login.html:48 +msgid "Forgot your password?" +msgstr "¿Olvidaste tu contraseña?" + +#: login/templates/login2.html:45 +msgid "Log in" +msgstr "Iniciar sesión" + +#: login/templates/login2.html:50 +msgid "Forgot your password? Click here to recover" +msgstr "¿Olvidaste tu contraseña? Haz clic aquí para recuperarla" + +#: login/templates/password_reset.html:7 +#, fuzzy +#| msgid "Password reset" +msgid "Password Reset" +msgstr "Restablecimiento de contraseña" + +#: login/templates/password_reset.html:9 +msgid "" +"Enter your email address below, and we'll email instructions for setting a " +"new one." +msgstr "" +"Ingresa tu dirección de correo electrónico a continuación y te enviaremos " +"instrucciones para establecer una nueva." + +#: login/templates/password_reset.html:15 +msgid "Reset" +msgstr "Reestablecer" + +#: login/templates/password_reset.html:21 +#: login/templates/password_reset_complete.html:21 +#: login/templates/password_reset_done.html:14 +msgid "Back to login" +msgstr "Volver a iniciar sesión" + +#: login/templates/password_reset_complete.html:10 +msgid "Password reset complete" +msgstr "Restablecimiento de contraseña completo" + +#: login/templates/password_reset_complete.html:12 +msgid "Your new password has been set. You may go ahead and log in now." +msgstr "Tu nueva contraseña ha sido establecida. Ahora puedes iniciar sesión." + +#: login/templates/password_reset_confirm.html:9 +msgid "Enter new password" +msgstr "Ingresa nueva contraseña" + +#: login/templates/password_reset_confirm.html:10 +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" +"Por favor, ingresa tu nueva contraseña dos veces para que podamos verificar " +"que la escribiste correctamente." + +#: login/templates/password_reset_confirm.html:21 +msgid "Change my password" +msgstr "Cambiar mi contraseña" + +#: login/templates/password_reset_confirm.html:29 +msgid "Password reset unsuccessful" +msgstr "Restablecimiento de contraseña fallido" + +#: login/templates/password_reset_confirm.html:30 +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used." +msgstr "" +"El enlace para restablecer la contraseña no es válido, posiblemente porque " +"ya ha sido utilizado." + +#: login/templates/password_reset_confirm.html:31 +msgid "Please request a new password reset." +msgstr "Por favor, solicita un nuevo restablecimiento de contraseña." + +#: login/templates/password_reset_done.html:7 +msgid "Password reset sent" +msgstr "Restablecimiento de contraseña enviado" + +#: login/templates/password_reset_done.html:8 +msgid "" +"We've sent you an email with instructions to reset your password. If an " +"account with the provided email exists, you should receive it shortly." +msgstr "" +"Te hemos enviado por correo electrónico las instrucciones para establecer tu " +"contraseña. Si existe una cuenta con el correo electrónico que ingresaste, " +"deberías recibirlas en breve." + +#: login/templates/password_reset_done.html:9 +msgid "" +"If you don't receive an email, please check the email address you entered " +"and look in your spam folder." +msgstr "" +"Si no recibes un correo electrónico, por favor asegúrate de haber ingresado " +"la dirección con la que te registraste y revisa tu carpeta de spam." + +#: login/templates/password_reset_email.html:3 +#: login/templates/password_reset_email.txt:2 +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"Estás recibiendo este correo electrónico porque solicitaste un " +"restablecimiento de contraseña para tu cuenta de usuario en %(site_name)s." + +#: login/templates/password_reset_email.html:7 +#: login/templates/password_reset_email.txt:4 +msgid "Please go to the following page and choose a new password:" +msgstr "Por favor, ve a la siguiente página y elige una nueva contraseña:" + +#: login/templates/password_reset_subject.txt:2 +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "Restablecimiento de contraseña en %(site_name)s" + +#: login/views.py:45 +msgid "Login error. Check credentials." +msgstr "Error al iniciar sesión. Verifica tus credenciales." + +#: lot/templates/lots.html:8 lot/views.py:19 +msgid "New lot" +msgstr "Nuevo lote" + +#: lot/templates/lots.html:18 +msgid "Search lots..." +msgstr "Buscar lotes..." + +#: lot/templates/lots.html:28 +msgid "Filter" +msgstr "Filtrar" + +#: lot/templates/lots.html:33 +msgid "Open Lots" +msgstr "Lotes abiertos" + +#: lot/templates/lots.html:38 +msgid "Closed Lots" +msgstr "Lotes cerrados" + +#: lot/templates/lots.html:41 +msgid "Clear Filters" +msgstr "Limpiar Filtros" + +#: lot/templates/lots.html:52 +msgid "Lot Name" +msgstr "Nombre del lote" + +#: lot/templates/lots.html:53 +msgid "Description" +msgstr "Descripción" + +#: lot/templates/lots.html:54 +msgid "Status" +msgstr "Estado" + +#: lot/templates/lots.html:55 +msgid "Created On" +msgstr "Creado el" + +#: lot/templates/lots.html:56 +msgid "Created By" +msgstr "Creado por" + +#: lot/templates/properties.html:53 +msgid "Edit Property" +msgstr "Editar propiedad" + +#: lot/templates/properties.html:81 +msgid "Delete Property" +msgstr "Eliminar propiedad" + +#: lot/templates/properties.html:85 +msgid "Are you sure you want to delete this property?" +msgstr "¿Seguro que deseas eliminar esta propiedad?" + +#: lot/views.py:40 +msgid "Delete lot" +msgstr "Eliminar lote" + +#: lot/views.py:59 +msgid "Edit lot" +msgstr "Editar lote" + +#: lot/views.py:85 +msgid "Add to lots" +msgstr "Agregar a los lotes" + +#: lot/views.py:86 +msgid "Assign Device" +msgstr "Dispositivos sin asignar" + +#: lot/views.py:114 +msgid "Remove from lots" +msgstr "Eliminar de los lotes" + +#: lot/views.py:115 +msgid "Unassign Device" +msgstr "Dispositivos sin asignar" + +#: lot/views.py:126 +msgid "lots" +msgstr "lotes" + +#: lot/views.py:151 lot/views.py:174 +msgid "New Lot Property" +msgstr "Nueva propiedad de lote" + +#: lot/views.py:208 +msgid "Update lot Property" +msgstr "Actualizar propiedad de lote" + +#: lot/views.py:256 +msgid "Lot property deleted successfully." +msgstr "Evidencia importada exitosamente." + +#: user/models.py:16 +msgid "Logo" +msgstr "Logotipo" + +#: user/models.py:17 +msgid "Location" +msgstr "Ubicación" + +#: user/models.py:19 +msgid "Responsable" +msgstr "Responsable" + +#: user/models.py:25 +msgid "Supervisor" +msgstr "Supervisor" + +#: user/models.py:67 +msgid "Email address" +msgstr "Dirección de correo electrónico" + +#: user/models.py:71 +msgid "is active" +msgstr "está activo" + +#: user/models.py:72 +msgid "is admin" +msgstr "es administrador" + +#: user/models.py:73 +msgid "First name" +msgstr "Nombre" + +#: user/models.py:74 +msgid "Last name" +msgstr "Apellido" + +#: user/templates/panel.html:25 +msgid "Token Management" +msgstr "Gestión de credenciales" + +#: user/templates/panel.html:27 +msgid "Manage your personal tokens for using Devicehub." +msgstr "Administra tu tokens personales para utilizar Devicehub" + +#: user/templates/panel.html:30 user/templates/panel.html:46 +msgid "Go" +msgstr "Ir" + +#: user/templates/panel.html:43 +msgid "Download a settings file for your Workbench." +msgstr "Descargar un archivo de configuración para Workbench" + +#: user/views.py:25 +msgid "Download Settings" +msgstr "Descargar configuración" + +#~ msgid "INBOX" +#~ msgstr "BANDEJA DE ENTRADA" + +#~ msgid "VISUAL INSPECTION" +#~ msgstr "INSPECCIÓN VISUAL" + +#~ msgid "REPAIR" +#~ msgstr "REPARACIÓN" + +#~ msgid "INSTALL" +#~ msgstr "INSTALACIÓN" + +#~ msgid "TEST" +#~ msgstr "PRUEBA" + +#~ msgid "PACKAGING" +#~ msgstr "EMPAQUE" + +#~ msgid "DONATION" +#~ msgstr "DONACIÓN" + +#~ msgid "DISMANTLE" +#~ msgstr "DESMANTE" + +#~ msgid "Add" +#~ msgstr "Agregar" + +#~ msgid "admin" +#~ msgstr "administrador" + +#~ msgid "Remove" +#~ msgstr "Eliminar" + +#~ msgid "View recent notes" +#~ msgstr "Ver notas recientes" + +#~ msgid "Latest Notes" +#~ msgstr "Últimas notas" + +#~ msgid "ago" +#~ msgstr "hace" + +#~ msgid "Editable" +#~ msgstr "Editable" + +#~ msgid "Delete note" +#~ msgstr "Eliminar nota" + +#~ msgid "Are you sure you want to delete this note?" +#~ msgstr "¿Estás seguro que quieres eliminar esta nota??" + +#~ msgid "Confirm delete" +#~ msgstr "Confirmar borrado" + +#~ msgid "No notes available." +#~ msgstr "No hay notas disponibles" + +#~ msgid "New Document" +#~ msgstr "Nuevo Documento" + +#~ msgid "Erase Server" +#~ msgstr "Servidor de borrado" + +#~ msgid "Identificator" +#~ msgstr "Identificador" + +#~ msgid "Data" +#~ msgstr "Datos" + +#~ msgid " Created on" +#~ msgstr "Creado el" + +#~ msgid "Add new lot" +#~ msgstr "Agregar nuevo lote" + +#~ msgid "english" +#~ msgstr "inglés" + +#~ msgid "català" +#~ msgstr "catalán" + +#~ msgid "spanish" +#~ msgstr "español" diff --git a/login/templates/login.html b/login/templates/login.html index a82882e..b6ecdf5 100644 --- a/login/templates/login.html +++ b/login/templates/login.html @@ -1,46 +1,52 @@ {% extends "login_base.html" %} -{% load i18n static %} +{% load i18n static language_code %} {% block login_content %} + +
+
{% trans "Sign in" %}
+
+
{% csrf_token %} -
+
-
Please enter your email.
{% if form.username.errors %} -

- {{ form.username.errors|striptags }} -

+
+ {{ form.username.errors|striptags }} +
{% endif %}
-
+
- + + +
{% if form.password.errors %} -

- {{ form.password.errors|striptags }} -

- {% endif %} - - +
+ {{ form.password.errors|striptags }}
-
Please enter your password!
+ {% endif %}
-
- -
+
+ +
- -
-
-
- {% block messages %} - {% for message in messages %} - - {% endfor %} - {% endblock messages %} -
-
-
- -