From a04771df3440638451a47bcb2da9205cbedbb541 Mon Sep 17 00:00:00 2001 From: amcmanu3 Date: Mon, 29 May 2023 19:34:40 -0400 Subject: [PATCH 01/13] Use a cache for players instead of reading file --- app/classes/shared/server.py | 46 +++++++++++++++++++ app/classes/web/panel_handler.py | 21 ++------- .../templates/panel/parts/server_players.html | 6 +-- 3 files changed, 53 insertions(+), 20 deletions(-) diff --git a/app/classes/shared/server.py b/app/classes/shared/server.py index fa68eb62..c616cde1 100644 --- a/app/classes/shared/server.py +++ b/app/classes/shared/server.py @@ -11,6 +11,7 @@ import subprocess import html import urllib.request import glob +import json from zoneinfo import ZoneInfo @@ -132,6 +133,15 @@ class ServerInstance: self.server_object = HelperServers.get_server_obj(self.server_id) self.stats_helper = HelperServerStats(self.server_id) self.last_backup_failed = False + try: + with open( + os.path.join(self.server_object.path, "db_stats", "players_cache.json"), + "r", + encoding="utf-8", + ) as f: + self.player_cache = list(json.load(f).values()) + except: + self.player_cache = [] try: self.tz = get_localzone() except ZoneInfoNotFoundError as e: @@ -770,6 +780,7 @@ class ServerInstance: ) if self.settings["stop_command"]: self.send_command(self.settings["stop_command"]) + self.write_player_cache() else: # windows will need to be handled separately for Ctrl+C self.process.terminate() @@ -1218,6 +1229,40 @@ class ServerInstance: ) update_thread.start() + def write_player_cache(self): + write_json = {} + for item in self.player_cache: + write_json[item["name"]] = item + with open( + os.path.join(self.server_path, "db_stats", "players_cache.json"), + "w", + encoding="utf-8", + ) as f: + f.write(json.dumps(write_json, indent=4)) + logger.info("Cache file refreshed") + + def cache_players(self): + server_players = self.get_server_players() + for p in self.player_cache[:]: + if p["status"] == "Online" and p["name"] not in server_players: + p["status"] = "Offline" + p["last_seen"] = datetime.datetime.now().strftime("%d/%m/%Y %H:%M:%S") + elif p["name"] in server_players: + self.player_cache.remove(p) + for player in server_players: + if player == "Anonymous Player": + # Skip Anonymous Player + continue + if player in self.player_cache: + self.player_cache.remove(player) + self.player_cache.append( + { + "name": player, + "status": "Online", + "last_seen": datetime.datetime.now().strftime("%d/%m/%Y %H:%M:%S"), + } + ) + def check_update(self): return self.stats_helper.get_server_stats()["updating"] @@ -1745,6 +1790,7 @@ class ServerInstance: def record_server_stats(self): server_stats = self.get_servers_stats() + self.cache_players() self.stats_helper.insert_server_stats(server_stats) # delete old data diff --git a/app/classes/web/panel_handler.py b/app/classes/web/panel_handler.py index df58263d..48945fac 100644 --- a/app/classes/web/panel_handler.py +++ b/app/classes/web/panel_handler.py @@ -781,24 +781,11 @@ class PanelHandler(BaseHandler): page_data[ "banned_players" ] = self.controller.servers.get_banned_players(server_id) - page_data[ - "cached_players" - ] = self.controller.servers.get_cached_players(server_id) + server_instance = self.controller.servers.get_server_instance_by_id( + server_id + ) + page_data["cached_players"] = server_instance.player_cache - page_data["all_players"] = [] - for player in page_data["cached_players"]: - if player["name"] in page_data["get_players"]: - player["status"] = "online" - else: - player["status"] = "offline" - temp_date = datetime.datetime.strptime( - player["expiresOn"], "%Y-%m-%d %H:%M:%S %z" - ) - player["last_seen"] = ( - temp_date - datetime.timedelta(30, 0, 0, 0, 0, 0, 0) - ).strftime("%Y/%m/%d %H:%M:%S") - player["avatar"] = Helpers.get_player_avatar(player["uuid"]) - page_data["all_players"].append(player) for player in page_data["banned_players"]: player["banned"] = True temp_date = datetime.datetime.strptime( diff --git a/app/frontend/templates/panel/parts/server_players.html b/app/frontend/templates/panel/parts/server_players.html index fd014018..d0aaadbf 100644 --- a/app/frontend/templates/panel/parts/server_players.html +++ b/app/frontend/templates/panel/parts/server_players.html @@ -9,14 +9,14 @@ - {% for player in data['all_players'] %} + {% for player in data['cached_players'] %} {{ player['name'] }} - {% if player['status'] == 'online' %} + {% if player['status'] == 'Online' %} {{ player['status'] }} - {% elif player['status'] == 'offline' %} + {% elif player['status'] == 'Offline' %} Last connection : {{ player['last_seen'] }} {% end %} From 88fe3146daddba8c765099955ef2908d96603c54 Mon Sep 17 00:00:00 2001 From: amcmanu3 Date: Tue, 30 May 2023 00:01:54 -0400 Subject: [PATCH 02/13] Remove seconds from date/time --- app/classes/shared/server.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/app/classes/shared/server.py b/app/classes/shared/server.py index c616cde1..c1a11158 100644 --- a/app/classes/shared/server.py +++ b/app/classes/shared/server.py @@ -1246,7 +1246,7 @@ class ServerInstance: for p in self.player_cache[:]: if p["status"] == "Online" and p["name"] not in server_players: p["status"] = "Offline" - p["last_seen"] = datetime.datetime.now().strftime("%d/%m/%Y %H:%M:%S") + p["last_seen"] = datetime.datetime.now().strftime("%d/%m/%Y %H:%M") elif p["name"] in server_players: self.player_cache.remove(p) for player in server_players: @@ -1259,7 +1259,7 @@ class ServerInstance: { "name": player, "status": "Online", - "last_seen": datetime.datetime.now().strftime("%d/%m/%Y %H:%M:%S"), + "last_seen": datetime.datetime.now().strftime("%d/%m/%Y %H:%M"), } ) @@ -1449,6 +1449,12 @@ class ServerInstance: minutes=self.helper.get_setting("dir_size_poll_freq_minutes"), id=str(self.server_id) + "_dir_poll", ) + self.dir_scheduler.add_job( + self.cache_players, + "interval", + seconds=5, + id=str(self.server_id) + "_players_poll", + ) def calc_dir_size(self): server_dt = HelperServers.get_server_data_by_id(self.server_id) @@ -1518,6 +1524,7 @@ class ServerInstance: "created": datetime.datetime.now().strftime( "%Y/%m/%d, %H:%M:%S" ), + "players_cache": self.player_cache, }, ) total_players += int(raw_ping_result.get("online")) @@ -1790,7 +1797,6 @@ class ServerInstance: def record_server_stats(self): server_stats = self.get_servers_stats() - self.cache_players() self.stats_helper.insert_server_stats(server_stats) # delete old data From 9cb3b6829d4db03e38b4e106e49eab9205192762 Mon Sep 17 00:00:00 2001 From: amcmanu3 Date: Tue, 30 May 2023 00:02:11 -0400 Subject: [PATCH 03/13] Fix formatting / enable dynamic loading --- .../templates/panel/parts/details_stats.html | 18 +++++++++ .../templates/panel/parts/server_players.html | 39 +++++++++++++------ 2 files changed, 46 insertions(+), 11 deletions(-) diff --git a/app/frontend/templates/panel/parts/details_stats.html b/app/frontend/templates/panel/parts/details_stats.html index 38007544..568cf33b 100644 --- a/app/frontend/templates/panel/parts/details_stats.html +++ b/app/frontend/templates/panel/parts/details_stats.html @@ -228,6 +228,24 @@ } initParser('input_motd', 'input_motd'); + let text = "" + let players = server.players_cache; + for(let i=0; i < players.length; i++){ + text += ``; + text += `${players[i]["name"]}`; + if(players[i]["status"] === "Online"){ + text += ` ${ players[i]['status'] }` + }else{ + text += ` ${ players[i]['status'] } Last connection :
${ players[i]['last_seen'] }
` + } + if(server["running"]){ + text += `


` + }else{ + text += ` Unavailable (Server Offline)` + } + + } + $("#player-body").html(text); } diff --git a/app/frontend/templates/panel/parts/server_players.html b/app/frontend/templates/panel/parts/server_players.html index d0aaadbf..3e879665 100644 --- a/app/frontend/templates/panel/parts/server_players.html +++ b/app/frontend/templates/panel/parts/server_players.html @@ -1,4 +1,4 @@ -
+

{{ translate('serverPlayerManagement', 'players', data['lang']) }}:

@@ -8,23 +8,26 @@ - + {% for player in data['cached_players'] %} - + {% if player['status'] == 'Online' %} - + {% elif player['status'] == 'Offline' %} - + {% end %} -
Actions
{{ player['name'] }} {{ player['status'] }} {{ player['status'] }} Last connection : {{ player['last_seen'] }} {{ player['status'] }} Last connection :
{{ player['last_seen'] }}
+ {% if data['server_stats']['running'] %} - - - - + +
+ +
+ +
+ {% else %} Unavailable (Server Offline) {% end %} @@ -34,7 +37,21 @@
-
+ +

{{ translate('serverPlayerManagement', 'bannedPlayers', data['lang']) }}:

From be5183260e5498ff2aa6651b7af5b5bdd5cdfda3 Mon Sep 17 00:00:00 2001 From: amcmanu3 Date: Tue, 30 May 2023 14:06:41 -0400 Subject: [PATCH 04/13] Fix banned players formatting --- .../templates/panel/parts/details_stats.html | 4 ++-- .../templates/panel/parts/server_players.html | 24 ++++++++++++++++--- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/app/frontend/templates/panel/parts/details_stats.html b/app/frontend/templates/panel/parts/details_stats.html index 568cf33b..47fa501d 100644 --- a/app/frontend/templates/panel/parts/details_stats.html +++ b/app/frontend/templates/panel/parts/details_stats.html @@ -232,7 +232,7 @@ let players = server.players_cache; for(let i=0; i < players.length; i++){ text += ``; - text += ``; + text += ``; if(players[i]["status"] === "Online"){ text += `` }else{ @@ -241,7 +241,7 @@ if(server["running"]){ text += `` }else{ - text += `` + text += `` } } diff --git a/app/frontend/templates/panel/parts/server_players.html b/app/frontend/templates/panel/parts/server_players.html index 3e879665..df059e95 100644 --- a/app/frontend/templates/panel/parts/server_players.html +++ b/app/frontend/templates/panel/parts/server_players.html @@ -29,7 +29,7 @@
{% else %} - Unavailable (Server Offline) + Unavailable
(Server Offline)
{% end %} @@ -51,9 +51,9 @@ width: 70px; } -
+

{{ translate('serverPlayerManagement', 'bannedPlayers', data['lang']) }}:

-
${players[i]["name"]}${players[i]["name"]} ${ players[i]['status'] }


Unavailable (Server Offline) Unavailable
(Server Offline)
+
@@ -75,4 +75,22 @@ {% end %}
Player
+ + + + + + + + + {% for player in data['banned_players'] %} + + + + + {% end %} + +
PlayerActions
{{ player['name'] }} + +
\ No newline at end of file From fd95abdf4201e3cc2ce6b4acedb8d0565ee21a5d Mon Sep 17 00:00:00 2001 From: Andrew Date: Tue, 6 Jun 2023 20:44:59 -0400 Subject: [PATCH 05/13] Remove bedrock servers in serverjars options --- app/classes/minecraft/serverjars.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/classes/minecraft/serverjars.py b/app/classes/minecraft/serverjars.py index b70a8c40..faa12a7d 100644 --- a/app/classes/minecraft/serverjars.py +++ b/app/classes/minecraft/serverjars.py @@ -153,6 +153,9 @@ class ServerJars: def _get_server_type_list(self): url = "/api/fetchTypes/" response = self._get_api_result(url) + if "bedrock" in response.keys(): + # remove pocketmine from options + del response["bedrock"] return response def download_jar(self, jar, server, version, path, server_id): From 3755c19411f2d11c2f4f83f54c588e142314c275 Mon Sep 17 00:00:00 2001 From: Zedifus Date: Sun, 18 Jun 2023 12:58:48 +0100 Subject: [PATCH 06/13] Update changelog !593 --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 03f71e17..975fa01e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,8 @@ TBD - Send empty json for no banned/cached players ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/589)) - Bump Tornado from 6.0 to 6.3.2 in response to CVE-2023-28370 ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/591)) - Fix bug where commands would show "command_server" when initially created ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/592)) +### Refactor +- Optimize player management page ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/593)) ### Tweaks TBD ### Lang From 36e15bd8985b5a98e93f774daadf01390d7e812e Mon Sep 17 00:00:00 2001 From: Zedifus Date: Sun, 18 Jun 2023 13:46:26 +0100 Subject: [PATCH 07/13] Bump cryptography & pyOpenSSL Resolves: https://github.com/advisories/GHSA-5cpq-8wj7-hf2v --- requirements.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index 4c36b691..d36133d0 100644 --- a/requirements.txt +++ b/requirements.txt @@ -5,12 +5,12 @@ bleach==4.1 cached_property==1.5.2 colorama==0.4 croniter==1.3.5 -cryptography==39.0.1 +cryptography==41.0.1 libgravatar==1.0.0 peewee==3.13 pexpect==4.8 psutil==5.9 -pyOpenSSL==23.0.0 +pyOpenSSL==23.2.0 pyjwt==2.4.0 PyYAML==5.4 requests==2.26 From 498b939335a87b8360a361f2b5d3224f832e6894 Mon Sep 17 00:00:00 2001 From: Zedifus Date: Sun, 18 Jun 2023 14:10:12 +0100 Subject: [PATCH 08/13] Update changelog !595 --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 975fa01e..b5ecd424 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,7 +10,7 @@ TBD ### Refactor - Optimize player management page ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/593)) ### Tweaks -TBD +- Remove bedrock servers in serverjars options ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/595)) ### Lang TBD

From cfee0a538b4901079b1e44f9dfacd138446bfc1a Mon Sep 17 00:00:00 2001 From: Zedifus Date: Sun, 18 Jun 2023 14:35:32 +0100 Subject: [PATCH 09/13] Update es_ES lang Thanks to discord user `.lucyy_`, Welcome back! --- app/translations/es_ES.json | 431 +++++++++++++++++++++--------------- 1 file changed, 258 insertions(+), 173 deletions(-) diff --git a/app/translations/es_ES.json b/app/translations/es_ES.json index 980eca0a..8d4e52be 100644 --- a/app/translations/es_ES.json +++ b/app/translations/es_ES.json @@ -12,23 +12,23 @@ }, "apiKeys": { "apiKeys": "Claves API", - "auth": "Autorizado? ", + "auth": "¿Autorizado? ", "buttons": "Botones", "config": "Configuración", "crafty": "Crafty: ", "created": "Creado", - "createNew": "Crear un nuevo API Token", + "createNew": "Crear un nuevo Token de API", "deleteKeyConfirmation": "¿Quieres eliminar esta clave de API? Esto no se puede deshacer.", "deleteKeyConfirmationTitle": "¿Eliminar la clave API ${keyId}?", "getToken": "Conseguir un Token", "name": "Nombre", - "nameDesc": "Como te gustaria llamar a este API token? ", + "nameDesc": "¿Como te gustaría llamar a este Token de API? ", "no": "No", "pageTitle": "Editar las Claves API", "permName": "Nombre del Permiso", "perms": "Permisos", "server": "Servidor: ", - "superUser": "Super User", + "superUser": "Super Usuario", "yes": "Si" }, "base": { @@ -39,81 +39,82 @@ "hugeDesc": "Un enorme", "pageDescription": "Sin esta gente, Crafty no existiría", "pageTitle": "Créditos", - "patreonDesc": "Patreon / Ko-fi supporters!", + "patreonDesc": "A nuestros Patreon / Ko-fi Supporters", "patreonOther": "Otro", - "patreonSupporter": "A nuestros Patreon / Ko-fi Supporters", + "patreonSupporter": "Patreon / Ko-fi supporters!", "patreonUpdate": "Última Actualización:", "retiredStaff": "Staff retirado", "subscriberName": "Nombre", "subscriptionLevel": "Nivel", "supportTeam": "Equipo de soporte y documentación", "thankYou": "GRACIAS", - "translationDesc": "a nuestra comunidad, que tradujo!", + "translationDesc": "a nuestra comunidad que traduce! [ Activo = 🟢 Inactivo/Retirado = ⚪ ]", "translationName": "Nombre", - "translationTitle": "Traducciones de Idiomas", + "translationTitle": "Traduccion de Idiomas", "translator": "Traductores" }, "dashboard": { "actions": "Acciones", "allServers": "Todos los servidores", "avg": "Avg", - "backups": "Backups", + "backups": "Respaldos", "bePatientClone": "Espere mientras clonamos el servidor.
Esta pantalla se actualizará en un momento", "bePatientRestart": "Espere mientras reiniciamos el servidor.
Esta pantalla se actualizará en un momento", "bePatientStart": "Espere mientras iniciamos el servidor.
Esta pantalla se actualizará en un momento", "bePatientStop": "Espere mientras detenemos el servidor.
Esta pantalla se actualizará en un momento", - "cannotSee": "¿No puedes verlo todo?", - "cannotSeeOnMobile": "¿No puedes verlo todo en móvil?", - "cannotSeeOnMobile2": "Intenta desplazar la tabla desde los lados..", + "cannotSee": "¿No se muestra correctamente?", + "cannotSeeOnMobile": "¿No se muestra correctamente en móvil?", + "cannotSeeOnMobile2": "Intente girar el dispositivo hacia los lados.", "clone": "Clonar", "cloneConfirm": "¿Está seguro de que desea clonar este servidor? Este proceso puede llevar un tiempo", - "cpuCores": "Nucleos de CPU", + "cpuCores": "Núcleos de CPU", "cpuCurFreq": "Reloj de CPU Actual", - "cpuMaxFreq": "Reloj de CPU Maximo", + "cpuMaxFreq": "Reloj de CPU Máximo", "cpuUsage": "Uso de CPU", - "crashed": "Crashed", + "crashed": "Crasheado", "dashboard": "Panel de control", - "delay-explained": "El agente/servicio ha iniciado recientemente y está retrasando el inicio de la instancia del servidor de Minecraft.", + "delay-explained": "El agente/servicio inicio recientemente y está retrasando el inicio de la instancia del servidor de Minecraft.", "host": "Host", "kill": "Matar Proceso", - "killing": "Matando el proceso...", + "killing": "Cerrando el proceso...", "lastBackup": "Último:", - "max": "Max", + "max": "Máx", "memUsage": "Uso de memoria", "motd": "MOTD", "newServer": "Crear nuevo Servidor", "nextBackup": "Próximo:", - "no-servers": "Actualmente no hay servidores. Para comenzar, haga click", + "no-servers": "Actualmente no hay servidores. Para comenzar, haga click en", "offline": "Desconectado", "online": "En línea", "players": "Jugadores", "restart": "Reiniciar", "sendingCommand": "Enviando tu comando", - "server": "Server", - "servers": "Servers", + "server": "Servidor", + "servers": "Servidores", "size": "Tamaño del directorio del servidor", "start": "Iniciar", "starting": "Inicio-retrasado", "status": "Estado", "stop": "Detener", "version": "Versión", - "welcome": "Bienvenido a Crafty Controller" + "welcome": "Bienvenido a Crafty Controller", + "installing": "Instalando..." }, - "datatables": { + "datatables": { "i18n": { "aria": { - "sortAscending": ": activar para ordenar las columnas de masnera ascendente", - "sortDescending": ": activar para ordenar las columnas de masnera descendente" + "sortAscending": ": activar para ordenar las columnas de manera ascendente", + "sortDescending": ": activar para ordenar las columnas de manera descendente" }, "buttons": { "collection": "Colección ", "colvis": "Visibilidad de las columnas", "colvisRestore": "Restaurar visibilidad", "copy": "Copiar", - "copyKeys": "Presiona ctrl o u2318 + C para copiar los datos de la tabla al portapapeles de tu sistema.

Para cancelar, click en este mensaje o presiona escape.", + "copyKeys": "Presiona ctrl o u2318 + C para copiar los datos de la tabla al portapapeles de tu sistema.

Para cancelar, cliquea este mensaje o presiona escape.", "copySuccess": { "1": "Copiado 1 fila al portapapeles", - "_": "Copiadas %d filas al portapapeles" + "_": "Copiado %d filas al portapapeles" }, "copyTitle": "Copiar al Portapapeles", "csv": "CSV", @@ -128,15 +129,15 @@ }, "decimal": "", "emptyTable": "No hay datos disponibles en la tabla", - "info": "Mostrando _START_ a _END_ de _TOTAL_ entradas", - "infoEmpty": "Mostrando 0 a 0 de 0 entradas", + "info": "Mostrando _START_ hasta _END_ de _TOTAL_ entradas", + "infoEmpty": "Mostrando 0 de 0 entradas", "infoFiltered": "(filtrado de _MAX_ entradas totales)", "infoPostFix": "", - "lengthMenu": "Mostrar _MENU_ entradas", + "lengthMenu": "Mostrar entradas de _MENU_", "loadingRecords": "Cargando...", "paginate": { "first": "Primero", - "last": "Ultimo", + "last": "Último", "next": "Siguiente", "previous": "Anterior" }, @@ -160,27 +161,39 @@ } }, "thousands": ",", - "zeroRecords": "No se encontraron registros coincidentes" + "zeroRecords": "No se encontraron registros que coincidan" } }, "error": { - "closedPort": "Hemos detectado que el puerto {} podría no estar abierto en la red del host o un firewall lo está bloqueando. Las conexiones remotas de clientes al servidor podrían estar limitadas.", "contact": "Contacta el soporte de Crafty Control desde Discord", - "embarassing": "Oh por, bueno, esto es vergonzoso.", + "embarassing": "¡Oh cielos! Esto es embarazoso.", "error": "Error!", - "eulaAgree": "Estás de acuerdo?", - "eulaMsg": "Debes aceptar el EULA. Una copia del EULA de Minecraft esta vinculada debajo de este mensaje.", + "eulaAgree": "¿Estás de acuerdo?", + "eulaMsg": "Debes aceptar el ", + "privMsg": "y el ", "eulaTitle": "Aceptar EULA", - "fileTooLarge": "Subida fallida. Carga de archivo demasiado grande. Póngase en contacto con el administrador del sistema para obtener ayuda.", + "agree": "Aceptar", + "cancel": "Cancelar", + "fileTooLarge": "Subida fallida. El archivo es demasiado grande. Contacte al administrador del sistema para obtener asistencia.", "hereIsTheError": "Aquí está el error.", - "internet": "Hemos detectado que la maquina ejecutando Crafty no tiene acceso a internet. Las conexiones de clientes al servidor podrían estar limitadas.", - "no-file": "No se puede localizar el archivo solicitado. Verifique dos veces la ruta. Capaz Crafty no tiene los permisos adecuados?", - "noJava": "Server {} fallo al iniciar con código de error: Detectamos que Java no esta instalado, Por favor instale java y inicie el servidor.", - "not-downloaded": "Parece que no podemos encontrar su archivo ejecutable. Capaz no ha terminado de descargarse o los permisos están configurados como ejecutables.", - "portReminder": "Detectamos que es la primera vez que se inicia {}. Asegúrese de configurar el puerto {} A través de su router/firewall para hacer el servidor accesible.", + "internet": "Hemos detectado que la máquina ejecutando Crafty no tiene acceso a internet. Las conexiones de cliente al servidor podrían ser limitadas.", + "no-file": "No se puede encontrar el archivo solicitado. Verifique la dirección. ¿Quizas Crafty no tiene los permisos adecuados?", + "noJava": "Servidor {} no pudo iniciarse: Detectamos que Java no está instalado, Por favor instale java e inicie el servidor.", + "installerJava": "Fallo al instalar {} : La instalación de Forge requiere Java. Detectamos que Java no está instalado. Por favor instale java e inicie el servidor.", + "not-downloaded": "No podemos encontrar el archivo ejecutable. ¿Ha terminado de descargarse? ¿Están los permisos puestos como ejecutable?", + "portReminder": "Detectamos que es la primera vez que se inicia {}. Asegúrese de configurar el puerto {} a través de su router/firewall para hacer el servidor accesible por Internet.", "start-error": "Servidor {} fallo al iniciar con código de error: {}", - "terribleFailure": "¡Un terrible error!" - }, + "terribleFailure": "¡Un terrible error!", + "superError": "Debes ser un super usuario para completar esta acción.", + "fileError": "El tipo de archivo debe ser una imagen.", + "migration": "El almacenamiento del servidor principal de Crafty se está migrando a una nueva ubicación. El inicio de servidores se han suspendido durante este periodo. Espere mientras finalizamos esta migración.", + "serverJars1": "API de Servidor JAR no disponible. por favor, compruebe", + "bedrockError": "Descargas de Bedrock no disponibles. por favor, compruebe", + "craftyStatus": "Página de estados de Crafty", + "serverJars2": "para la información más actualizada.", + "cronFormat": "Detectado formato CRON invalido", + "noInternet": "Crafty tiene problemas para acceder a Internet. La creación del servidor ha sido deshabilitada. Verifique su conexión a Internet y actualice esta página.Crafty tiene problemas para acceder a Internet. La creación del servidor ha sido deshabilitada. Verifique su conexión a Internet y actualice esta página." + }, "footer": { "allRightsReserved": "Todos los derechos reservados", "copyright": "Copyright", @@ -194,97 +207,125 @@ }, "notify": { "activityLog": "Registros de actividad", - "backupComplete": "Backup completado de manera exitosa en el servidor {}", - "backupStarted": "Backup iniciado para el servidor {}", - "downloadLogs": "Descargar registros de soporte?", - "finishedPreparing": "Terminamos la preparación de tus registros de soporte. Por favor presione el boton para descargar.", + "backupComplete": "Respaldo completado de manera exitosa para el servidor {}", + "backupStarted": "Respaldo iniciado para el servidor {}", + "downloadLogs": "¿Descargar registros de soporte?", + "finishedPreparing": "Terminamos la preparación de tus registros de soporte. Por favor presione el botón para descargar.", "logout": "Cerrar Sesión", "preparingLogs": " Por favor espere mientras preparamos los registros. Le enviaremos una notificación cuando estén listos. Esto puede tomar un rato en implementaciones grandes.", "supportLogs": "Registros de soporte" }, + "offline": { + "offline": "Desconectado", + "pleaseConnect": "Conéctate a Internet para usar Crafty." + }, "panelConfig": { "adminControls": "Controles de administrador", - "allowedServers": "Servidores Habilitados", - "assignedRoles": "Roles asignados", + "allowedServers": "Servidores Permitidos", + "assignedRoles": "Grupos asignados", "cancel": "Cancelar", "clearComms": "Limpiar comandos sin ejecutar.", + "select": "Seleccionar", + "apply": "Aplicar", "delete": "Eliminar", "edit": "Editar", "enabled": "Habilitado", - "newRole": "Agregar un nuevo rol", + "match": "Las contraseñas deben coincidir", + "newRole": "Agregar nuevo Grupo", "newUser": "Agregar nuevo Usuario", "pageTitle": "Configuración del panel", - "role": "Rol", - "roles": "Roles", - "roleUsers": "Usuarios del rol", + "role": "Grupo", + "roles": "Grupos", + "roleUsers": "Usuarios del Grupo", "save": "Guardar", - "superConfirm": "Proceder solamente si queres que este usuario tenga acceso a TODO(todas las cuentas de usuarios, servidores, configuración del panel, etc...) Hasta puede quitarte tu permiso de superuser.", - "superConfirmTitle": "Habilitar superusers? Estas seguro?", + "superConfirm": "Proceder solamente si quieres que este usuario tenga acceso a TODO (todas las cuentas de usuarios, servidores, configuración del panel, etc.) Hasta puede quitarte tu permiso de super usuario.", + "superConfirmTitle": "¿Activar super usuario? ¿Seguro?", "user": "Usuario", - "users": "Usuarios" + "users": "Usuarios", + "title": "Configuración de Crafty", + "enableLang": "Activar todos los Idiomas", + "noMounts": "No mostrar Montajes en panel de Control", + "globalServer": "Directorio Global de Servidores", + "globalExplain": "Donde Crafty almacena todos los archivos de tu servidor. (Juntaremos la ruta con /servers/[uuid de servidor])" + }, + "customLogin": { + "customLoginPage": "Personalizar la página de logueo", + "loginImage": "Subir una imagen de fondo para la pantalla de logueo.", + "labelLoginImage": "Elige tu fondo para la pantalla de logueo", + "backgroundUpload": "Subir imagen de fondo", + "loginBackground": "Imagen de fondo de logueo", + "loginOpacity": "Seleccionar la opacidad de la ventana de logueo", + "select": "Seleccionar", + "apply": "Aplicar", + "delete": "Eliminar", + "selectImage": "Seleccionar una imagen", + "preview": "Previsualizar", + "pageTitle": "Página de logueo personalizada" }, "rolesConfig": { - "config": "Configuracion de roles", - "configDesc": "Aca podes cambiar la configuracion de los roles", + "config": "Configuración de grupos", + "configDesc": "Aquí puedes cambiar la configuración de los grupos", "configUpdate": "Actualizado: ", "created": "Creado: ", - "delRole": "Eliminar Rol", - "doesNotExist": "No podes elminiar algo que todavia no existe", - "pageTitle": "Editar Rol", - "pageTitleNew": "Nuevo Rol", - "permAccess": "Acceso?", - "permName": "Nombre de los permisos", - "permsServer": "Permisos que tiene este rol para esos servidores específicos.", - "roleConfigArea": "Zona de configuración de roles", - "roleDesc": "Como te gustaria llamar a este rol?", - "roleName": "Nombre del rol: ", - "rolePerms": "Permisos del rol", - "roleServers": "Servidores Habilitados", - "roleTitle": "Configuración de Roles", + "delRole": "Eliminar Grupo", + "doesNotExist": "No puedes eliminar algo que todavía no existe", + "pageTitle": "Editar Grupo", + "pageTitleNew": "Nuevo Grupo", + "permAccess": "¿Acceso?", + "permName": "Nombre del permiso", + "permsServer": "Permisos que tiene este grupo para los servidores especificados.", + "roleConfigArea": "Área de configuración de grupos", + "roleDesc": "¿Como te gustaría llamar a este grupo?", + "roleName": "Nombre del grupo: ", + "rolePerms": "Permisos del grupo", + "roleServers": "Servidores Permitidos", + "roleTitle": "Configuración de Grupos", "roleUserName": "Nombre de usuario", - "roleUsers": "Usuarios del rol: ", - "serverAccess": "Acceso?", + "roleUsers": "Usuarios del grupo: ", + "serverAccess": "¿Acceso?", "serverName": "Nombre del servidor", - "serversDesc": "Servidores a los que este rol puede acceder" + "serversDesc": "Servidores a los que este grupo puede acceder" }, "serverBackups": { "backupAtMidnight": "¿Copia de seguridad automática a medianoche?", - "backupNow": "¡Haga una copia de seguridad ahora!", + "backupNow": "¡Respalde ahora!", "backupTask": "Se ha iniciado una tarea de copia de seguridad.", "cancel": "Cancelar", "clickExclude": "Click para seleccionar las Exclusiones", - "compress": "Comprimir el Backup", + "compress": "Comprimir la copia", "confirm": "Confirmar", "confirmDelete": "¿Quieres eliminar esta copia de seguridad? Esto no se puede deshacer.", - "confirmRestore": "Esta seguro de que quiere restaurar desde este backup. Todos los archivos actuales del servidor seran cambiados al estado del backup y seran irrecuperables.", + "confirmRestore": "¿Seguro que quiere restaurar desde este respaldo?. Todos los archivos del servidor actuales serán cambiados al estado del respaldo y serán irrecuperables.", "currentBackups": "Copias de seguridad actuales", "delete": "Eliminar", "destroyBackup": "¿Destruir copia de seguridad \" + file_to_del + \"?", "download": "Descargar", "excludedBackups": "Rutas Excluidas: ", - "excludedChoose": "Elija las rutas que desea excluir de sus backups", - "exclusionsTitle": "Exclusiones del backup.", - "maxBackups": "Máxima cantidad de Copias de seguridad", - "maxBackupsDesc": "Crafty no almacenará más de N copias de seguridad, eliminando la más antigua (Ingrese 0 para mantenerlas todas)", + "excludedChoose": "Elige las rutas que desea excluir de los respaldos", + "exclusionsTitle": "Exclusiones en respaldos.", + "maxBackups": "Cantidad máxima de respaldos", + "maxBackupsDesc": "Crafty no almacenará más de N copias de seguridad, eliminando la más antigua. (Sin límite: 0)", "options": "Opciones", - "path": "Dirección", + "path": "Ruta", "restore": "Restaurar", "restoring": "Restaurando copia de seguridad. Esto puede tomar un tiempo. Sea paciente.", "save": "Guardar", - "shutdown": "Apague el servidor durante la duración de la copia del backup.", + "shutdown": "Apagar el servidor durante la duración de la copia del respaldo.", "size": "Tamaño", "storageLocation": "Ubicación de almacenamiento", - "storageLocationDesc": "¿Dónde quieres almacenar las copias de seguridad?" - }, + "storageLocationDesc": "¿Dónde quieres almacenar las copias de seguridad?", + "before": "Comando ejecutado antes del respaldo", + "after": "Comando ejecutado después del respaldo" + }, "serverConfig": { "bePatientDelete": "Tenga paciencia mientras eliminamos su servidor del panel de Crafty. Esta pantalla se cerrará en unos momentos.", "bePatientDeleteFiles": "Tenga paciencia mientras eliminamos su servidor del panel de Crafty y eliminamos todos los archivos. Esta pantalla se cerrará en unos momentos.", "bePatientUpdate": "Tenga paciencia mientras actualizamos el servidor. El tiempo de descarga puede variar según la velocidad del Internet...
Esta pantalla se actualizará en unos momentos.", - "cancel": "Cancelar", - "crashTime": "Tiempo de espera por crash", - "crashTimeDesc": "Cuanto tiempo se debe esperar después de que crafty considere su servidor como crasheado?", - "deleteFilesQuestion": "¿Eliminar archivos del servidor de la máquina?", - "deleteFilesQuestionMessage": "¿Le gustaría que Crafty elimine todos los archivos del servidor de la máquina host?

Esto incluye backups del servidor.", + "cancel": "Cancelar", + "crashTime": "Tiempo de espera por crasheo", + "crashTimeDesc": "¿Cuanto tiempo esperar para considerar el servidor como crasheado?", + "deleteFilesQuestion": "¿Eliminar archivos del servidor del host?", + "deleteFilesQuestionMessage": "¿Le gustaría que Crafty elimine todos los archivos del servidor de la máquina host?

Esto incluye respaldos del servidor.", "deleteServer": "Eliminar Servidor", "deleteServerQuestion": "¿Eliminar Servidor?", "deleteServerQuestionMessage": "¿Estás seguro de que desea eliminar este servidor? Después de esto no hay vuelta atrás...", @@ -292,97 +333,109 @@ "exeUpdateURLDesc": "URL de descarga directa para actualizaciones.", "javaNoChange": "No sobrescribir", "javaVersion": "Sobrescribir versión de Java.", - "javaVersionDesc": "Si vas a sobrescribir la versión de Java, Asegúrese de que ponga la localizacion de java con ' ' (comillas).", + "javaVersionDesc": "Si vas a sobrescribir la versión de Java, Asegúrese de rodear la ubicación con comillas. (Variable predeterminada 'java' excluida)", "noDelete": "No, vuelve atrás.", "noDeleteFiles": "No, solo remover del panel.", "removeOldLogsAfter": "Eliminar registros antiguos después de", - "removeOldLogsAfterDesc": "¿Cuántos días debe ser un archivo de registro para ser eliminado (0 es desactivado)?", + "removeOldLogsAfterDesc": "¿Cuántos días debe tener un archivo de registro para ser eliminado? (Desactivar: 0)", "save": "Guardar", "sendingDelete": "Eliminando servidor", "sendingRequest": "Enviando tu solicitud...", "serverAutoStart": "Inicio automático del servidor", "serverAutostartDelay": "Retraso del inicio automático del servidor.", - "serverAutostartDelayDesc": "Tiempo de retraso antes del inicio automático (si está habilitado debajo)", + "serverAutostartDelayDesc": "Tiempo de retraso antes del inicio automático (Si está habilitado debajo)", "serverCrashDetection": "Detección de crasheos del Servidor", "serverExecutable": "Ejecutable del servidor", "serverExecutableDesc": "El archivo ejecutable del servidor.", "serverExecutionCommand": "Comando de ejecución del Servidor", - "serverExecutionCommandDesc": "Se ejecutara en una terminal oculta para iniciar el servidor.", - "serverIP": "Server IP", - "serverIPDesc": "IP a la que Crafty debería conectarse para obtener estadísticas (pruebe con una ip real en lugar de 127.0.0.1 si tienes problemas)", + "serverExecutionCommandDesc": "Se ejecutará en una terminal oculta para iniciar el servidor.", + "serverIP": "IP del Servidor", + "serverIPDesc": "IP a la que Crafty debería conectarse para obtener estadísticas (Pruebe con una IP real en lugar de 127.0.0.1 si tienes problemas)", "serverLogLocation": "Ubicación del registro del servidor", - "serverLogLocationDesc": "Dirección absoluta al archivo de registro", + "serverLogLocationDesc": "Ruta absoluta al archivo de registro", "serverName": "Nombre del servidor", "serverNameDesc": "¿Cómo quieres nombrar el servidor?", - "serverPath": "Directorio de trabajo del servidor", - "serverPathDesc": "Dirección absoluta del servidor (sin incluir el ejecutable)", + "serverPath": "Ruta de trabajo del servidor", + "serverPathDesc": "Ruta absoluta del servidor (sin incluir el ejecutable)", "serverPort": "Puerto del Servidor", "serverPortDesc": "Puerto al que Crafty debería conectarse para obtener estadísticas", "serverStopCommand": "Comando de detención del Servidor", - "serverStopCommandDesc": "Comando que enviar al programa para detener el servidor.", - "stopBeforeDeleting": "Detenga el servidor antes de eliminarlo.", + "serverStopCommandDesc": "Comando que enviar al programa para detener el servidor.", + "showStatus": "Mostrar en la pagina de estados publicos", + "stopBeforeDeleting": "Por favor, detenga el servidor antes de eliminarlo.", "update": "Actualizar Ejecutable", - "yesDelete": "Si, borralo.", - "yesDeleteFiles": "Si, borra los archivos." + "yesDelete": "Sí, borralo.", + "yesDeleteFiles": "Sí, borra los archivos.", + "shutdownTimeout": "Tiempo de espera al apagar", + "timeoutExplain1": "Cuánto tiempo esperará Crafty a que su servidor se apague después de ejecutar el", + "timeoutExplain2": "comando antes de forzar cerrar el proceso.", + "statsHint1": "El puerto que ejecuta su servidor debe ir aquí. Crafty abre una conexión a su servidor para obtener estadísticas.", + "statsHint2": "Esto no cambia el puerto de su servidor. Aún debe cambiar el puerto en el archivo de configuración de su servidor.", + "ignoredExits": "Codigos de salida al crashear ignorados", + "ignoredExitsExplain": "Codigos de salida que Crafty deberia ignorar como un 'apagado' normal (separarados por comas)" }, "serverConfigHelp": { - "desc": "Here is where you can change the configuration of your server", + "desc": "Aquí es donde puede cambiar la configuración de su servidor", "perms": [ - "It is recommended to NOT change the paths of a server managed by Crafty.", - "Changing paths CAN break things, especially on Linux type operating systems where file permissions are more locked down.", + "Se recomienda NO cambiar las rutas de un servidor administrado por Crafty.", + "Cambiar las rutas PUEDE romper cosas, especialmente en sistemas operativos tipo Linux donde los permisos de archivo están más bloqueados.", "

", - "If you feel you have to change a where a server is located you may do so as long as you give the \"crafty\" user permission to read / write to the server path.", + "Si cree que tiene que cambiar la ubicación de un servidor, puede hacerlo siempre que le dé permiso al usuario \"Crafty\" para leer/escribir en la ruta del servidor.", "
", "
", - "On Linux this is best done by executing the following:
", + "En Linux, esto se hace mejor ejecutando lo siguiente:
", "", - " sudo chown crafty:crafty /path/to/your/server -R
", - " sudo chmod 2775 /path/to/your/server -R
", + " sudo chown crafty:crafty /ruta/del/servidor -R
", + " sudo chmod 2775 /ruta/del/servidor -R
", "
" ], - "title": "Server Config Area" + "title": "Área de configuración del servidor" }, "serverDetails": { - "backup": "Backup", + "backup": "Respaldos", "config": "Configuración", "files": "Archivos", "logs": "Registros", "playerControls": "Gestionar jugadores", - "schedule": "Programación Tareas", + "schedule": "Programar Tareas", "serverDetails": "Detalles del Servidor", - "terminal": "Terminal" + "terminal": "Terminal", + "metrics": "Métricas", + "reset": "Reiniciar Desplazamiento", + "filter": "Filtrar Registros", + "filterList": "Palabras filtradas" }, "serverFiles": { "clickUpload": "Click aquí para seleccionar tus archivos", "close": "Cerrar", "createDir": "Crear directorio", - "createDirQuestion": "Que nombre quiere darle al nuevo directorio?", + "createDirQuestion": "¿Que nombre quieres para el nuevo directorio?", "createFile": "Crear archivo", - "createFileQuestion": "Que nombre quiere darle al nuevo archivo?", + "createFileQuestion": "¿Que nombre quieres para el nuevo archivo?", "default": "Predeterminado", "delete": "Eliminar", "deleteItemQuestion": "¿Estás seguro de que quieres eliminar \" + name + \"?", "deleteItemQuestionMessage": "¡Estas eliminando \\\"\" + path + \"\\\"!

¡Esta acción será irreversible y se perderá para siempre!", "download": "Descargar", - "editingFile": "Editar archivo", + "editingFile": "Editando archivo", "error": "Error al encontrar archivos", "fileReadError": "Error de lectura del archivo", "files": "Archivos", "keybindings": "Atajos de teclado", "loadingRecords": "Cargando Archivos...", "noDelete": "No", - "noscript": "El administrador de archivos no funciona sin JavaScript ", + "noscript": "El administrador de archivos no funciona sin JavaScript", "rename": "Renombrar", - "renameItemQuestion": "Cuál debería ser el nuevo nombre?", + "renameItemQuestion": "¿Cuál debería ser el nuevo nombre?", "save": "Guardar", "size": "Alternar tamaño del editor.", - "stayHere": "NO SALGA DE ESTA PÁGINA", - "unsupportedLanguage": "Advertencia: este no es un tipo de archivo admitido", + "stayHere": "¡NO SALGA DE ESTA PÁGINA!", + "unsupportedLanguage": "Advertencia: Este no es un tipo de archivo admitido", "unzip": "Descomprimir (UnZip)", "upload": "Subir", "uploadTitle": "Subir archivos a: ", "waitUpload": "Espera mientras subimos tus archivos... Esto puede tomar un tiempo.", - "yesDelete": "Si, entiendo las consecuencias" + "yesDelete": "Sí, entiendo las consecuencias" }, "serverPlayerManagement": { "bannedPlayers": "Jugadores Baneados", @@ -390,39 +443,57 @@ "players": "Jugadores" }, "serverScheduleConfig": { - "backup": "Backup del Servidor", + "backup": "Respaldar Servidor", + "select": "Básico, / Cron / En cadena", "basic": "Básico", "children": "Tareas 'hijos' enlazados: ", "command": "Comando", "command-explain": "Que comandó quiere que sea ejecutado, no incluya el '/'", "cron": "Cron", - "cron-explain": "Ponga su configuración de cron. -- NOTA: Pagina recomendada: 'https://crontab.guru'", - "custom": "Comando Customizado", + "cron-explain": "Ponga su cadena de CRON. -- NOTA: Página recomendada: 'https://crontab.guru'", + "custom": "Comando Personalizado", "days": "Días", "enabled": "Habilitado", "hours": "Horas", "interval": "Intervalo", - "interval-explain": "Con qué frecuencia quieres que se ejecute esta tarea?", + "interval-explain": "¿Con qué frecuencia quieres que se ejecute esta tarea?", "minutes": "Minutos", "offset": "Retraso", - "offset-explain": "Cuanto tiempo se debe esperar para ejecutar esta tarea después de la primera? (En Segundos).", - "one-time": "Borrar después de su ejecución?", + "offset-explain": "¿Cuanto tiempo se debe esperar para ejecutar esta tarea después de la primera? (En Segundos).", + "one-time": "¿Borrar después de su ejecución?", "parent": "Seleccione una tarea programada 'padre'", - "parent-explain": "Qué tarea programada debería activar esta?", - "reaction": "Reaccion", + "parent-explain": "¿Qué tarea programada debería activar esta?", + "reaction": "Reacción", "restart": "Reiniciar el Servidor", "start": "Iniciar el Servidor", "stop": "Apagar el Servidor", "time": "Horario", - "time-explain": "A que hora quiere que la tarea programada se ejecute?" + "time-explain": "¿A que hora quiere que la tarea programada se ejecute?" }, "serverSchedules": { - "areYouSure": "Borrar tarea programada?", + "scheduledTasks": "Tareas programadas", + "create": "Crear nueva tarea programada", + "name": "Nombre", + "action": "Acción", + "command": "Comando", + "interval": "Intervalo", + "nextRun": "Siguiente ejecución", + "enabled": "Habilitado", + "edit": "Editar", + "every": "Cada", + "yes": "Sí", + "no": "No", + "cron": "Cadena CRON", + "details": "Detalles de la tarea", + "child": "Tarea hija con ID ", + "areYouSure": "¿Borrar tarea programada?", + "close": "Cerrar", + "delete": "Eliminar", "cancel": "Cancelar", - "cannotSee": "No puede pude ver todo?", - "cannotSeeOnMobile": "Intente hacer clic en una tarea programada para obtener todos los detalles.", + "cannotSee": "¿No puede ver todo?", + "cannotSeeOnMobile": "Intente hacer click en una tarea programada para obtener todos los detalles.", "confirm": "Confirmar", - "confirmDelete": "Estás seguro de que desea eliminar esta tarea programada? Esto no se puede deshacer." + "confirmDelete": "¿De verdad desea eliminar esta tarea programada? Esto no se puede deshacer." }, "serverStats": { "cpuUsage": "Uso de CPU", @@ -443,33 +514,41 @@ }, "serverTerm": { "commandInput": "Introducir tu comando", - "delay-explained": "El agente/servicio ha recientemente iniciado y está retrasando el inicio de la instancia del servidor de Minecraft.", + "delay-explained": "El agente/servicio se inicio recientemente y está retrasando iniciar la instancia del servidor de Minecraft.", "downloading": "Descargando...", "restart": "Reiniciar", "sendCommand": "Enviar comando", "start": "Iniciar", "starting": "Inicio-retrasado", "stop": "Detener", - "stopScroll": "Detener Scrolling automatico", - "updating": "Actualizando..." + "stopScroll": "Detener Desplazamiento automático", + "updating": "Actualizando...", + "installing": "Instalando..." + }, + "serverMetrics": { + "resetZoom": "Reiniciar Zoom", + "zoomHint1": "Para hacer zoom en el gráfico, mantén presionada la tecla shift y luego usa la rueda de desplazamiento.", + "zoomHint2": "Alternativamente, mantén presionada la tecla shift, luego haz click y arrastra el área en la que deseas hacer zoom." }, "serverWizard": { - "absoluteServerPath": "Dirección absoluta del servidor", - "absoluteZipPath": "Dirección absoluta del servidor", - "addRole": "Añadir Servidor a grupos existentes..", - "autoCreate": "Si no se selecciona ninguno, ¡Crafty creara uno!", - "bePatient": "Por favor tenga paciencia, ya que estamos ' + (importing ? 'import' : 'download') + ' el servidor.", - "buildServer": "Construir Servidor!", + "absoluteServerPath": "Ruta absoluta del servidor", + "absoluteZipPath": "Ruta absoluta servidor", + "addRole": "Añadir Servidor a grupos existentes...", + "autoCreate": "Si ninguno es seleccionado, ¡Crafty creara uno!", + "bePatient": "Por favor tenga paciencia, mientras se ' + (importing ? 'importa' : 'descarga') + ' el servidor.", + "buildServer": "¡Crear Servidor!", "clickRoot": "Click aquí para seleccionar el directorio raiz.", "close": "Cerrar", "defaultPort": "25565 (Por defecto)", "downloading": "Descargando Servidor...", - "explainRoot": "Por favor, haga click en el botón de abajo para seleccionar el directorio raiz de su servidor.", + "explainRoot": "Por favor, haga click en el botón debajo para seleccionar el directorio raíz de su servidor.", "importing": "Importando Servidor...", "importServer": "Importar Servidor existente", - "importServerButton": "Importar Servidor!", + "importServerButton": "¡Importar Servidor!", "importZip": "Importar desde archivo Zip", - "maxMem": "Memoria máxima", + "uploadZip": "Subir archivo Zip para importar servidor", + "labelZipFile": "Elige tu archivo Zip", + "maxMem": "Memoria máxima", "minMem": "Memoria mínima", "myNewServer": "Mi nuevo Servidor", "newServer": "Crear Servidor", @@ -479,62 +558,68 @@ "save": "Guardar", "selectRole": "Seleccionar Grupo(s)", "selectRoot": "Seleccione el directorio raíz del archivo.", - "selectType": "Selecciona un tipo", + "selectType": "Tipo de servidor (Vanilla, Modificado, Mods, etc.)", "selectVersion": "Selecciona una versión", - "selectZipDir": "Seleccione el directorio donde quiere que se extraigan los archivos.", + "selectZipDir": "Seleccione el directorio del archivo que quiere extraer el contenido.", "serverJar": "Archivo Jar del servidor", "serverName": "Nombre del servidor", - "serverPath": "Dirección del servidor", + "serverPath": "Ruta del servidor", "serverPort": "Puerto del servidor", "serverType": "Tipo de servidor", "serverVersion": "Versión del servidor", + "serverUpload": "Subir servidor comprimido", "sizeInGB": "Tamaño en GB", - "zipPath": "Dirección del servidor" + "uploadButton": "Subir", + "zipPath": "Ruta del servidor" }, "sidebar": { "contribute": "Contribuir", - "credits": "Creditos", + "credits": "Créditos", "dashboard": "Panel de control", "documentation": "Documentación", "navigation": "Navegación", "newServer": "Crear nuevo Servidor", - "servers": "Servers" + "servers": "Servidores", + "inApp": "Documentación de la Aplicación" }, "userConfig": { "apiKey": "Claves API", - "auth": "Autorizado? ", + "auth": "¿Autorizado? ", "config": "Configuración", - "configArea": "Area de Configuracion de Usuarios", - "configAreaDesc": "Aca modificas la configuración de todos tus usuarios.", - "confirmDelete": "Está seguro de que quiere borrar a este usuario? Esta acción es irreversible.", + "configArea": "Área de Configuración de Usuario", + "configAreaDesc": "Aquí modificas la configuración de este usuario.", + "confirmDelete": "¿Está seguro de que quiere eliminar a este usuario? Esta acción es irreversible.", "craftyPermDesc": "Permisos de Crafty que tiene este usuario.", "craftyPerms": "Permisos de Crafty: ", "created": "Creado: ", - "deleteUser": "Borrar Usuario: ", - "deleteUserB": "Borrar Usuario", - "delSuper": "No puedes borrar un super user", + "deleteUser": "Eliminar Usuario: ", + "deleteUserB": "Eliminar Usuario", + "delSuper": "No puedes eliminar un super usuario", "enabled": "Habilitado", - "gravDesc": "Este mail se va a usar solamente para conseguir el Gravatar. Crafty no va a usar esta información bajo ninguna circunstancia más que para conseguir el Gravatar™", + "gravDesc": "Este mail será utilizado únicamente para obtener el Gravatar. Crafty no utilizará esta información bajo otra circunstancia aparte de obtener el Gravatar™", "gravEmail": "Gravatar™ Email", - "lastIP": "Ultima IP: ", + "lastIP": "Última IP: ", "lastLogin": "Última Sesión: ", "lastUpdate": "Última Actualización: ", - "leaveBlank": "Para editar el usuario sin cambiar la contraseña, no completar nada.", - "member": "Miembro?", - "notExist": "No se puede borrar algo que no existe!", + "leaveBlank": "Para editar el usuario sin cambiar la contraseña, dejar en blanco.", + "member": "¿Miembro?", + "notExist": "¡No se puede eliminar algo que no existe!", "pageTitle": "Editar Usuario.", "pageTitleNew": "Crear Usuario.", "password": "Nueva Contraseña", "permName": "Nombre del Permiso", "repeat": "Repita la contraseña.", - "roleName": "Nombre del rol.", - "super": "Super User", + "roleName": "Nombre del grupo.", + "super": "Super Usuario", "userLang": "Idioma del usuario.", + "userTheme": "Tema de Interfaz", "userName": "Nombre de usuario.", - "userNameDesc": "Como quieres llamar a este usuario?", - "userRoles": "Roles del usuario.", - "userRolesDesc": "Roles que tiene este usuario.", - "userSettings": "Configuracion de Usuario.", - "uses": "Número de usos habilitados. (-1 == sin límite)." + "userNameDesc": "¿Como quieres llamar a este usuario?", + "userRoles": "Grupos del usuario.", + "userRolesDesc": "Grupos a los que este usuario pertenece.", + "userSettings": "Configuración de Usuario.", + "uses": "Número de usos permitidos. (Sin límite: -1)", + "manager": "Administrador", + "selectManager": "Seleccionar Administrador para Usuario" } } \ No newline at end of file From dc33253a7f0bc2925bbb11cf2d27c0dcf46cb56f Mon Sep 17 00:00:00 2001 From: Zedifus Date: Sun, 18 Jun 2023 14:37:33 +0100 Subject: [PATCH 10/13] Update pl_PL lang Thanks to discord user `terrariadlc` --- app/translations/pl_PL.json | 98 +++++++++++++++++++++++++++++++++++-- 1 file changed, 94 insertions(+), 4 deletions(-) diff --git a/app/translations/pl_PL.json b/app/translations/pl_PL.json index 8fb9739c..755f1392 100644 --- a/app/translations/pl_PL.json +++ b/app/translations/pl_PL.json @@ -53,6 +53,20 @@ "translationTitle": "Język tłumaczenia", "translator": "Tłumacze" }, + "customLogin": { + "apply": "Apply", + "backgroundUpload": "Załącz tło", + "customLoginPage": "Dostosuj stronę zalogowania", + "delete": "Usuń", + "labelLoginImage": "Wybierz swoje tło logowania", + "loginBackground": "Zdjęcie tła logowania", + "loginImage": "Prześlij tło dla ekranu logowania.", + "loginOpacity": "Wybierz przeźroczystość tła na ekranie logowania", + "pageTitle": "Własna strona logowania", + "preview": "Podgląd", + "select": "Zaznacz", + "selectImage": "Zaznacz zdjęcie" + }, "dashboard": { "actions": "Akcje", "allServers": "Wszystkie serwery", @@ -75,6 +89,7 @@ "dashboard": "Dashboard", "delay-explained": "Crafty niedawno się odpalił, właczanie serwera będzie trochę opóźnione", "host": "Host", + "installing": "Instalowanie...", "kill": "Zabij proces", "killing": "Zabijanie procesu...", "lastBackup": "Ostatni:", @@ -164,20 +179,33 @@ } }, "error": { + "agree": "Zgadzam się", + "bedrockError": "Pobieranie serwera bedrock jest teraz niedostępne. Proszę sprawdź", + "cancel": "Anuluj", "contact": "Podrzebujesz pomocy? Zapraszamy na serwer discord Crafty Controler", + "craftyStatus": "Status strony Craftyiego", + "cronFormat": "Nieprawidłowy format Cron", "embarassing": "Oh, więc, to jest żenujące.", "error": "Błąd!", "eulaAgree": "Czy się zgadzasz?", "eulaMsg": "Musisz się zgodzić na EULA. Kopia EULA Minecraft jest zalinkowana pod tą wiadomością.", "eulaTitle": "Zgódź się na EULA", + "fileError": "Plik musi być zdjęciem.", "fileTooLarge": "Upload nie udany. Plik jest za duży. Skontaktuj się z administratorem dla pomocy.", "hereIsTheError": "Tu jest problem", + "installerJava": "Nie udało się zainstalować {} : Serwery Forge wymagają Java. Wykryliśmy że Java nie jest zainstalowana. Proszę zainstaluj Javę a następnie serwer.", "internet": "Zauważyliśmy że Crafty nie ma dostępu do internetu. Połączenie klientów z Craftym może być utrudnione.", + "migration": "Miejsce przechowywania serwerów zostało zmienione w Craftym. Włączanie serwerów zostanie zawieszone do zakończenia migracji", "no-file": "Nie możemy znaleść żądanego pliku. Sprawdź ścieżkę. Czy Crafty ma odpowiednie uprawnienia?", + "noInternet": "Crafty ma problem połączenia się z internetem. Tworzenie serwerów zostało wyłączone. Sprawdź swoje połączenie z intenetem i spróbuj ponownie.", "noJava": "Serwer {} nie mógł się odpalić z powodu: Zauważyliśmy że Java nie jest zainstalowana. Proszę zainstaluj Javę, a następnie włącz serwer.", "not-downloaded": "Nie możemy znaleść twojego pliku serwera. Czy skończył się pobierać? Czy permisje są ustawione na wykonywanle?", "portReminder": "Zauważyliśmy że to jest pierwszy raz {} kiedy był włączony. Upewnij się że otworzyłeś port {} na swoim routerze/firewallu aby korzystać z tego poza domem.", + "privMsg": "i także ", + "serverJars1": "API Server Jars jest niedostępne. Proszę sprawdź", + "serverJars2": "dla najnowzsych informacji.", "start-error": "Serwer {} nie mógł się odpalić z powodu: {}", + "superError": "Potrzebujesz uprawnienie Adminitsratora aby zakończyć tę akcję.", "terribleFailure": "Okropny błąd!" }, "footer": { @@ -201,25 +229,38 @@ "preparingLogs": " Poczekaj kiedy my przygotowujemy twoje logi ... Wyślemy ci powiadomienie kiedy będą gotowe. To trochę zajmie na dużych serwerach.", "supportLogs": "Logi Pomocnicze" }, + "offline": { + "offline": "Offline", + "pleaseConnect": "Proszę połącz się z internetem aby korzystać z Craftiego." + }, "panelConfig": { "adminControls": "Ustawienia Admina", "allowedServers": "Zezwolone serwery", + "apply": "Akceptuj", "assignedRoles": "Przypisane role", "cancel": "Anuluj", "clearComms": "Wyczyść nie wykonane komendy", + "custom": "Dostosuj Craftiego", "delete": "Usuń", "edit": "Edytuj", "enabled": "Wlączone", + "enableLang": "Włącz wszystkie języki", + "globalExplain": "Gdzie Crafty trzyma wszystkie twoje serwery. (dołączymy /servers/[uuid of server] do ścieżki)", + "globalServer": "Globalna ścieżka serwerów", + "json": "Config.json", "match": "Hasła muszą być takie same", "newRole": "Dodaj nową role", "newUser": "Dodaj nowego użytkownika", + "noMounts": "Nie pokazuj dysków w panelu", "pageTitle": "Ustawienia Panelu", "role": "Role", "roles": "Roles", "roleUsers": "Role użytkownika", "save": "Zapisz", + "select": "Wybierz", "superConfirm": "Zapisz jeśli chcesz aby ten użytkownik miał dostęp do WSZYSTKIEGO (wszyscy użytkownicy, konta, serwery, ustawienia panelu, itp.). Mogą oni nawet usunąć twoje prawa SuperUżytkownika.", "superConfirmTitle": "Włączyć SuperUżytkownika? Jesteś pewien?", + "title": "Konfiguracja Craftiego", "user": "Użytkownik", "users": "użytkownicy" }, @@ -243,14 +284,17 @@ "roleTitle": "Ustawienia roli", "roleUserName": "Nazwa użytkownika", "roleUsers": "Dostęp do ról: ", + "selectManager": "Wybierz zarządce dla tej roli", "serverAccess": "Dostęp?", "serverName": "Nazwa serwera", "serversDesc": "Serwery które mają tą role mają dostęp" }, "serverBackups": { + "after": "Wykonaj tę komendę po backupie", "backupAtMidnight": "Auto-backup o północy?", "backupNow": "Backup Teraz!", "backupTask": "Backup został rozpoczęty.", + "before": "Wykonaj tę komendę przed backupem", "cancel": "Anuluj", "clickExclude": "Kliknij aby zaznaczyć wyjątki", "compress": "Skompresuj backup", @@ -290,6 +334,8 @@ "deleteServerQuestionMessage": "Jesteś pewien że chcesz usunąć ten serwer? To jest nie odwracalne...", "exeUpdateURL": "URL pliku egzekucyjnego serwera", "exeUpdateURLDesc": "Bezpośredni link dla aktualizacji.", + "ignoredExits": "Ignoruj kody błędu przy crashu", + "ignoredExitsExplain": "Kody błędu Crafty powinien rozumieć jako `stop` (odzielone przecinkiem)", "javaNoChange": "Nie nadpisuj", "javaVersion": "Nadpisz wersję Javy", "javaVersionDesc": "Jeśli chcesz nadpisać wersję javy. Upewnij się że twoja wersja javy w 'komendzie egzekucyjnej' jest zawinięta w cytaty (podstatowa zmienna 'java' jest wykluczona )", @@ -320,7 +366,13 @@ "serverPortDesc": "Port na jakim Crafty ma szukać statystyk", "serverStopCommand": "Komenda wyłączenia serwera", "serverStopCommandDesc": "Komenda, którą wyśle crafty aby wyłączyć serwer", + "showStatus": "Pokazuj na publicznej stronie statusu", + "shutdownTimeout": "Czas oczekiwania na zamknięcie", + "statsHint1": "Port na którym operuje serwer. W ten sposób Crafty ma statystyki.", + "statsHint2": "To nie zmienia portu serwera. Wciąż musisz go manualnie zmienić w server.properties.", "stopBeforeDeleting": "Zatrzymaj serwer przed jego usunięciem", + "timeoutExplain1": "Jak długo musi Crafty czekać po `wyłączeniu` serwera", + "timeoutExplain2": "aby wymusić zamknięcie.", "update": "Aktualizuj plik serwera", "yesDelete": "Tak, usuń", "yesDeleteFiles": "Tak, usuń pliki" @@ -346,8 +398,12 @@ "backup": "Backup", "config": "Konfiguracja", "files": "Pliki", + "filter": "Filtruj Logi", + "filterList": "Filtrowane słowa", "logs": "Logi", + "metrics": "Statystyki", "playerControls": "Player Management", + "reset": "Resetuj Scrolla", "schedule": "Harmonogram", "serverDetails": "Detale serwera", "terminal": "Konsola" @@ -384,6 +440,11 @@ "waitUpload": "Poczekaj, aż wyślemy twoje pliki... To może chwilkę zająć.", "yesDelete": "Tak, zdaję sobie sprawę z konsekfencji" }, + "serverMetrics": { + "resetZoom": "Zresetuj Przybliżenie", + "zoomHint1": "Aby Przybliżyć statystyki przytrzymaj shifta i użyj kółka na myszy.", + "zoomHint2": "Albo przytrzymaj shifta i zaznacz strefę którą chcesz przybliżyć." + }, "serverPlayerManagement": { "bannedPlayers": "Zbanowani gracze", "loadingBannedPlayers": "Wczytuję zbanowanych graczy", @@ -411,18 +472,36 @@ "parent-explain": "Który harmonogram powinien wykonywać ten?", "reaction": "Reakcja", "restart": "Restart Serwera", + "select": "Basic / Cron / Chain Zaznaczenie reakcji", "start": "Start Serwera", "stop": "Wyłącz Serwer", "time": "Czas", "time-explain": "O jakim czasie ma wykonać się ten harmonogram?" }, "serverSchedules": { + "action": "Akcja", "areYouSure": "Usuń zaplanowane (zadanie)?", "cancel": "Anuluj", "cannotSee": "Nie widzisz wszystkiego?", "cannotSeeOnMobile": "Spróbój kliknąć na zadanie dla detali.", + "child": "ID dziecka harmonogramu ", + "close": "Zamknij", + "command": "Komenda", "confirm": "Zapisz", - "confirmDelete": "Czy chcesz usunąć ten zaplanowany task? Jest to nieodwracalne." + "confirmDelete": "Czy chcesz usunąć ten zaplanowany task? Jest to nieodwracalne.", + "create": "Utwórz nowy harmonogram", + "cron": "Crong String", + "delete": "Usuń", + "details": "Detale harmonogramu", + "edit": "Edytuj", + "enabled": "Włączony", + "every": "Co", + "interval": "Regularność", + "name": "Nazwa", + "nextRun": "Następne uruchomienie", + "no": "Nie", + "scheduledTasks": "Zaplanowane zadania", + "yes": "Tak" }, "serverStats": { "cpuUsage": "Użycie procesora", @@ -444,7 +523,8 @@ "serverTerm": { "commandInput": "Wpisz swoją komendę", "delay-explained": "Crafty niedawno się odpalił, właczanie serwera będzie trochę opóźnione", - "downloading": "Pobieranie...", + "importing": "Importowanie...", + "installing": "Instalowanie...", "restart": "Restart", "sendCommand": "Wyślij komendę", "start": "Start", @@ -469,6 +549,7 @@ "importServer": "Importuj egzystujący serwer", "importServerButton": "Importuj serwer!", "importZip": "Importuj z ZIPa", + "labelZipFile": "Wybierz swój plik ZIP", "maxMem": "Maks. RAMu", "minMem": "Min. RAMu", "myNewServer": "Mój nowy serwer", @@ -478,7 +559,8 @@ "resetForm": "Resetuj formę", "save": "Zapisz", "selectRole": "Zaznacz rolę (lub kilka)", - "selectRoot": "Wybierz archiwum głównej ścieżki | (TBF, Select Archive Root Dir)", + "selectRoot": "Wybierz główny katalog archiwa", + "selectServer": "Wybierz Serwer", "selectType": "Wybierz typ serwera", "selectVersion": "Wybiesz wersje", "selectZipDir": "Wybierz ścieżkę w archiwóm którą chcesz abyśmy wypakowali", @@ -486,9 +568,13 @@ "serverName": "Nazwa serwera", "serverPath": "Ścieżka serwera", "serverPort": "Port serwera", + "serverSelect": "Wybierz Serwer", "serverType": "Typ serwera", "serverVersion": "Wersja serwera", + "serverUpload": "Wgraj ZIP Serwera", "sizeInGB": "Wielkość w GB", + "uploadButton": "Wgraj", + "uploadZip": "Wgraj plik Zip dla imprtowania serwera", "zipPath": "Server Path" }, "sidebar": { @@ -496,6 +582,7 @@ "credits": "Podziękowania", "dashboard": "Panel", "documentation": "Dokumentacja", + "inApp": "Dokumentacja w Aplikacji", "navigation": "Nawigacja", "newServer": "Stwórz nowy serwer", "servers": "Serwery" @@ -520,6 +607,7 @@ "lastLogin": "Ostatni login: ", "lastUpdate": "Ostatni update: ", "leaveBlank": "Jeśli chcesz zmienić użytkownika bez zmieniania hasła, nic nie wpisuj.", + "manager": "Zarządca", "member": "Użytkownik?", "notExist": "Nie możesz usunąć czegoś, co nie istnieje!", "pageTitle": "Edytuj użytkownika", @@ -528,6 +616,7 @@ "permName": "Nazwa permisji", "repeat": "Powtórz hasło", "roleName": "Nazwa roli", + "selectManager": "Wybierz zarządce dla tej roli", "super": "SuperUżytkownik", "userLang": "Język użytkownika", "userName": "Nazwa użytkownika", @@ -535,6 +624,7 @@ "userRoles": "Role użytkownika", "userRolesDesc": "Role, które ten użytkownik posiada.", "userSettings": "Ustawienia użytkownika", + "userTheme": "Wygląd UI", "uses": "Ilość użyć (-1==Bez limitu)" } -} \ No newline at end of file +} From cf01524fdae95a3c8528a2576be2d74c878d9d34 Mon Sep 17 00:00:00 2001 From: Zedifus Date: Sun, 18 Jun 2023 14:46:51 +0100 Subject: [PATCH 11/13] Update changelog !597 --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b5ecd424..71817d87 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,7 +12,7 @@ TBD ### Tweaks - Remove bedrock servers in serverjars options ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/595)) ### Lang -TBD +- Update es_ES & pl_PL lang, thank you `.lucyy_` & `terrariadlc` ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/597))

## --- [4.1.1] - 2023/05/23 From c303ca4012d4730e50facf1a9ce1f2e78bbd52d4 Mon Sep 17 00:00:00 2001 From: Zedifus Date: Sun, 18 Jun 2023 15:36:49 +0100 Subject: [PATCH 12/13] Update overgeneral-exceptions Fixes deprecation warning: pylint: Command line or configuration file:1: UserWarning: Specifying exception names in the overgeneral-exceptions option without module name is deprecated and support for it will be removed in pylint 3.0. Use fully qualified name (maybe 'builtins.BaseException' ?) instead. --- .pylintrc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.pylintrc b/.pylintrc index b9811f3a..e4e3f119 100644 --- a/.pylintrc +++ b/.pylintrc @@ -606,5 +606,5 @@ preferred-modules= # Exceptions that will emit a warning when being caught. Defaults to # "BaseException, Exception". -overgeneral-exceptions=BaseException, - Exception +overgeneral-exceptions=builtins.BaseException, + builtins.Exception From 36731340486a61b5e8ee86d7240911f7cee91504 Mon Sep 17 00:00:00 2001 From: Zedifus Date: Sun, 18 Jun 2023 15:44:02 +0100 Subject: [PATCH 13/13] Update changelog !596 Missed from MR --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 71817d87..ad18ace9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ TBD - Optimize player management page ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/593)) ### Tweaks - Remove bedrock servers in serverjars options ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/595)) +- Bump cryptography & pyOpenSSL ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/596)) ### Lang - Update es_ES & pl_PL lang, thank you `.lucyy_` & `terrariadlc` ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/597))