mirror of
https://gitlab.com/crafty-controller/crafty-4.git
synced 2024-08-30 18:23:09 +00:00
Merge branch 'dev' into experimental/lukas-cleanup
This commit is contained in:
commit
6407900609
@ -35,20 +35,16 @@ class CraftyPermsController:
|
||||
)
|
||||
|
||||
@staticmethod
|
||||
def can_add_user(): # Add back argument 'user_id' when you work on this
|
||||
return True
|
||||
# TODO: Complete if we need a User Addition limit
|
||||
# return crafty_permissions.can_add_in_crafty(
|
||||
# user_id, Enum_Permissions_Crafty.User_Config
|
||||
# )
|
||||
def can_add_user(user_id):
|
||||
return PermissionsCrafty.can_add_in_crafty(
|
||||
user_id, EnumPermissionsCrafty.USER_CONFIG
|
||||
)
|
||||
|
||||
@staticmethod
|
||||
def can_add_role(): # Add back argument 'user_id' when you work on this
|
||||
return True
|
||||
# TODO: Complete if we need a Role Addition limit
|
||||
# return crafty_permissions.can_add_in_crafty(
|
||||
# user_id, Enum_Permissions_Crafty.Roles_Config
|
||||
# )
|
||||
def can_add_role(user_id):
|
||||
return PermissionsCrafty.can_add_in_crafty(
|
||||
user_id, EnumPermissionsCrafty.ROLES_CONFIG
|
||||
)
|
||||
|
||||
@staticmethod
|
||||
def list_all_crafty_permissions_quantity_limits():
|
||||
@ -68,6 +64,14 @@ class CraftyPermsController:
|
||||
def add_server_creation(user_id):
|
||||
return PermissionsCrafty.add_server_creation(user_id)
|
||||
|
||||
@staticmethod
|
||||
def add_user_creation(user_id):
|
||||
return PermissionsCrafty.add_user_creation(user_id)
|
||||
|
||||
@staticmethod
|
||||
def add_role_creation(user_id):
|
||||
return PermissionsCrafty.add_role_creation(user_id)
|
||||
|
||||
@staticmethod
|
||||
def get_api_key_permissions_list(key: ApiKeys):
|
||||
return PermissionsCrafty.get_api_key_permissions_list(key)
|
||||
|
@ -29,9 +29,8 @@ class ServerPermsController:
|
||||
return permissions_mask
|
||||
|
||||
@staticmethod
|
||||
def get_role_permissions(role_id):
|
||||
permissions_list = PermissionsServers.get_role_permissions_list(role_id)
|
||||
return permissions_list
|
||||
def get_role_permissions_dict(role_id):
|
||||
return PermissionsServers.get_role_permissions_dict(role_id)
|
||||
|
||||
@staticmethod
|
||||
def add_role_server(server_id, role_id, rs_permissions="00000000"):
|
||||
@ -71,10 +70,6 @@ class ServerPermsController:
|
||||
permission_mask, permission_tested, value
|
||||
)
|
||||
|
||||
@staticmethod
|
||||
def get_role_permissions_list(role_id):
|
||||
return PermissionsServers.get_role_permissions_list(role_id)
|
||||
|
||||
@staticmethod
|
||||
def get_user_id_permissions_list(user_id: str, server_id: str):
|
||||
return PermissionsServers.get_user_id_permissions_list(user_id, server_id)
|
||||
|
@ -173,6 +173,20 @@ class PermissionsCrafty:
|
||||
UserCrafty.user_id == user_id
|
||||
).execute()
|
||||
|
||||
@staticmethod
|
||||
def add_user_creation(user_id):
|
||||
user_crafty = PermissionsCrafty.get_user_crafty(user_id)
|
||||
user_crafty.created_user += 1
|
||||
UserCrafty.save(user_crafty)
|
||||
return user_crafty.created_user
|
||||
|
||||
@staticmethod
|
||||
def add_role_creation(user_id):
|
||||
user_crafty = PermissionsCrafty.get_user_crafty(user_id)
|
||||
user_crafty.created_role += 1
|
||||
UserCrafty.save(user_crafty)
|
||||
return user_crafty.created_role
|
||||
|
||||
@staticmethod
|
||||
def get_api_key_permissions_list(key: ApiKeys):
|
||||
user = HelperUsers.get_user(key.user_id)
|
||||
|
@ -1,3 +1,4 @@
|
||||
import typing as t
|
||||
from enum import Enum
|
||||
import logging
|
||||
from peewee import (
|
||||
@ -151,6 +152,18 @@ class PermissionsServers:
|
||||
permissions_list = PermissionsServers.get_permissions(permissions_mask)
|
||||
return permissions_list
|
||||
|
||||
@staticmethod
|
||||
def get_role_permissions_dict(role_id):
|
||||
permissions_dict: t.Dict[str, t.List[EnumPermissionsServer]] = {}
|
||||
role_servers = RoleServers.select(
|
||||
RoleServers.server_id, RoleServers.permissions
|
||||
).where(RoleServers.role_id == role_id)
|
||||
for role_server in role_servers:
|
||||
permissions_dict[
|
||||
role_server.server_id_id
|
||||
] = PermissionsServers.get_permissions(role_server.permissions)
|
||||
return permissions_dict
|
||||
|
||||
@staticmethod
|
||||
def update_role_permission(role_id, server_id, permissions_mask):
|
||||
RoleServers.update(permissions=permissions_mask).where(
|
||||
|
@ -15,9 +15,13 @@ from tornado import iostream
|
||||
|
||||
# TZLocal is set as a hidden import on win pipeline
|
||||
from tzlocal import get_localzone
|
||||
from cron_validator import CronValidator
|
||||
from croniter import croniter
|
||||
|
||||
from app.classes.models.server_permissions import EnumPermissionsServer
|
||||
from app.classes.models.roles import HelperRoles
|
||||
from app.classes.models.server_permissions import (
|
||||
EnumPermissionsServer,
|
||||
PermissionsServers,
|
||||
)
|
||||
from app.classes.models.crafty_permissions import EnumPermissionsCrafty
|
||||
from app.classes.models.management import HelpersManagement
|
||||
from app.classes.shared.helpers import Helpers
|
||||
@ -39,15 +43,21 @@ class PanelHandler(BaseHandler):
|
||||
def get_role_servers(self) -> set:
|
||||
servers = set()
|
||||
for server in self.controller.list_defined_servers():
|
||||
argument = int(
|
||||
float(
|
||||
bleach.clean(
|
||||
self.get_argument(f"server_{server['server_id']}_access", "0")
|
||||
)
|
||||
argument = self.get_argument(f"server_{server['server_id']}_access", "0")
|
||||
if argument == "0":
|
||||
continue
|
||||
|
||||
permission_mask = "0" * len(EnumPermissionsServer)
|
||||
for permission in self.controller.server_perms.list_defined_permissions():
|
||||
argument = self.get_argument(
|
||||
f"permission_{server['server_id']}_{permission.name}", "0"
|
||||
)
|
||||
)
|
||||
if argument:
|
||||
servers.add(server["server_id"])
|
||||
if argument == "1":
|
||||
permission_mask = self.controller.server_perms.set_permission(
|
||||
permission_mask, permission, "1"
|
||||
)
|
||||
|
||||
servers.add((server["server_id"], permission_mask))
|
||||
return servers
|
||||
|
||||
def get_perms_quantity(self) -> Tuple[str, dict]:
|
||||
@ -85,19 +95,9 @@ class PanelHandler(BaseHandler):
|
||||
permission
|
||||
) in self.controller.crafty_perms.list_defined_crafty_permissions():
|
||||
argument = self.get_argument(f"permission_{permission.name}", None)
|
||||
if argument is not None:
|
||||
if argument is not None and argument == "1":
|
||||
permissions_mask = self.controller.crafty_perms.set_permission(
|
||||
permissions_mask, permission, 1 if argument == "1" else 0
|
||||
)
|
||||
return permissions_mask
|
||||
|
||||
def get_perms_server(self) -> str:
|
||||
permissions_mask = "00000000"
|
||||
for permission in self.controller.server_perms.list_defined_permissions():
|
||||
argument = self.get_argument(f"permission_{permission.name}", None)
|
||||
if argument is not None:
|
||||
permissions_mask = self.controller.server_perms.set_permission(
|
||||
permissions_mask, permission, 1 if argument == "1" else 0
|
||||
permissions_mask, permission, "1"
|
||||
)
|
||||
return permissions_mask
|
||||
|
||||
@ -158,7 +158,7 @@ class PanelHandler(BaseHandler):
|
||||
if not self.controller.servers.server_id_authorized_api_key(
|
||||
server_id, api_key
|
||||
):
|
||||
print(
|
||||
logger.debug(
|
||||
f"API key {api_key.name} (id: {api_key.token_id}) "
|
||||
f"does not have permission"
|
||||
)
|
||||
@ -168,7 +168,9 @@ class PanelHandler(BaseHandler):
|
||||
if not self.controller.servers.server_id_authorized(
|
||||
server_id, exec_user["user_id"]
|
||||
):
|
||||
print(f'User {exec_user["user_id"]} does not have permission')
|
||||
logger.debug(
|
||||
f'User {exec_user["user_id"]} does not have permission'
|
||||
)
|
||||
self.redirect("/panel/error?error=Invalid Server ID")
|
||||
return None
|
||||
return server_id
|
||||
@ -768,6 +770,7 @@ class PanelHandler(BaseHandler):
|
||||
page_data["user"]["last_update"] = "N/A"
|
||||
page_data["user"]["roles"] = set()
|
||||
page_data["user"]["hints"] = True
|
||||
page_data["superuser"] = superuser
|
||||
|
||||
if EnumPermissionsCrafty.USER_CONFIG not in exec_user_crafty_permissions:
|
||||
self.redirect(
|
||||
@ -956,6 +959,7 @@ class PanelHandler(BaseHandler):
|
||||
page_data["role-servers"] = page_role_servers
|
||||
page_data["roles_all"] = self.controller.roles.get_all_roles()
|
||||
page_data["servers_all"] = self.controller.list_defined_servers()
|
||||
page_data["superuser"] = superuser
|
||||
page_data[
|
||||
"permissions_all"
|
||||
] = self.controller.crafty_perms.list_defined_crafty_permissions()
|
||||
@ -1086,7 +1090,7 @@ class PanelHandler(BaseHandler):
|
||||
page_data[
|
||||
"permissions_all"
|
||||
] = self.controller.server_perms.list_defined_permissions()
|
||||
page_data["permissions_list"] = set()
|
||||
page_data["permissions_dict"] = {}
|
||||
template = "panel/panel_edit_role.html"
|
||||
|
||||
elif page == "edit_role":
|
||||
@ -1099,8 +1103,8 @@ class PanelHandler(BaseHandler):
|
||||
"permissions_all"
|
||||
] = self.controller.server_perms.list_defined_permissions()
|
||||
page_data[
|
||||
"permissions_list"
|
||||
] = self.controller.server_perms.get_role_permissions(role_id)
|
||||
"permissions_dict"
|
||||
] = self.controller.server_perms.get_role_permissions_dict(role_id)
|
||||
page_data["user-roles"] = user_roles
|
||||
page_data["users"] = self.controller.users.get_all_users()
|
||||
|
||||
@ -1460,11 +1464,9 @@ class PanelHandler(BaseHandler):
|
||||
else:
|
||||
interval_type = ""
|
||||
cron_string = bleach.clean(self.get_argument("cron", ""))
|
||||
try:
|
||||
CronValidator.parse(cron_string)
|
||||
except Exception as e:
|
||||
if not croniter.is_valid(cron_string):
|
||||
self.redirect(
|
||||
f"/panel/error?error=INVALID FORMAT: Invalid Cron Format. {e}"
|
||||
"/panel/error?error=INVALID FORMAT: Invalid Cron Format."
|
||||
)
|
||||
return
|
||||
action = bleach.clean(self.get_argument("action", None))
|
||||
@ -1618,11 +1620,9 @@ class PanelHandler(BaseHandler):
|
||||
else:
|
||||
interval_type = ""
|
||||
cron_string = bleach.clean(self.get_argument("cron", ""))
|
||||
try:
|
||||
CronValidator.parse(cron_string)
|
||||
except Exception as e:
|
||||
if not croniter.is_valid(cron_string):
|
||||
self.redirect(
|
||||
f"/panel/error?error=INVALID FORMAT: Invalid Cron Format. {e}"
|
||||
"/panel/error?error=INVALID FORMAT: Invalid Cron Format."
|
||||
)
|
||||
return
|
||||
action = bleach.clean(self.get_argument("action", None))
|
||||
@ -1925,6 +1925,15 @@ class PanelHandler(BaseHandler):
|
||||
"/panel/error?error=Unauthorized access: not a user editor"
|
||||
)
|
||||
return
|
||||
|
||||
if (
|
||||
not self.controller.crafty_perms.can_add_user(exec_user["user_id"])
|
||||
and not exec_user["superuser"]
|
||||
):
|
||||
self.redirect(
|
||||
"/panel/error?error=Unauthorized access: quantity limit reached"
|
||||
)
|
||||
return
|
||||
elif username is None or username == "":
|
||||
self.redirect("/panel/error?error=Invalid username")
|
||||
return
|
||||
@ -1969,6 +1978,7 @@ class PanelHandler(BaseHandler):
|
||||
server_id=0,
|
||||
source_ip=self.get_remote_ip(),
|
||||
)
|
||||
self.controller.crafty_perms.add_user_creation(exec_user["user_id"])
|
||||
self.redirect("/panel/panel_config")
|
||||
|
||||
elif page == "edit_role":
|
||||
@ -1993,16 +2003,40 @@ class PanelHandler(BaseHandler):
|
||||
return
|
||||
|
||||
servers = self.get_role_servers()
|
||||
permissions_mask = self.get_perms_server()
|
||||
|
||||
role_data = {"role_name": role_name, "servers": servers}
|
||||
self.controller.roles.update_role(
|
||||
role_id, role_data=role_data, permissions_mask=permissions_mask
|
||||
# TODO: use update_role_advanced when API v2 gets merged
|
||||
base_data = self.controller.roles.get_role_with_servers(role_id)
|
||||
|
||||
server_ids = {server[0] for server in servers}
|
||||
server_permissions_map = {server[0]: server[1] for server in servers}
|
||||
|
||||
added_servers = server_ids.difference(set(base_data["servers"]))
|
||||
removed_servers = set(base_data["servers"]).difference(server_ids)
|
||||
same_servers = server_ids.intersection(set(base_data["servers"]))
|
||||
logger.debug(
|
||||
f"role: {role_id} +server:{added_servers} -server{removed_servers}"
|
||||
)
|
||||
for server_id in added_servers:
|
||||
PermissionsServers.get_or_create(
|
||||
role_id, server_id, server_permissions_map[server_id]
|
||||
)
|
||||
for server_id in same_servers:
|
||||
PermissionsServers.update_role_permission(
|
||||
role_id, server_id, server_permissions_map[server_id]
|
||||
)
|
||||
if len(removed_servers) != 0:
|
||||
PermissionsServers.delete_roles_permissions(role_id, removed_servers)
|
||||
|
||||
up_data = {
|
||||
"role_name": role_name,
|
||||
"last_update": Helpers.get_time_as_string(),
|
||||
}
|
||||
# TODO: do the last_update on the db side
|
||||
HelperRoles.update_role(role_id, up_data)
|
||||
|
||||
self.controller.management.add_to_audit_log(
|
||||
exec_user["user_id"],
|
||||
f"Edited role {role_name} (RID:{role_id}) with servers {servers}",
|
||||
f"edited role {role_name} (RID:{role_id}) with servers {servers}",
|
||||
server_id=0,
|
||||
source_ip=self.get_remote_ip(),
|
||||
)
|
||||
@ -2016,6 +2050,14 @@ class PanelHandler(BaseHandler):
|
||||
"/panel/error?error=Unauthorized access: not a role editor"
|
||||
)
|
||||
return
|
||||
elif (
|
||||
not self.controller.crafty_perms.can_add_role(exec_user["user_id"])
|
||||
and not exec_user["superuser"]
|
||||
):
|
||||
self.redirect(
|
||||
"/panel/error?error=Unauthorized access: quantity limit reached"
|
||||
)
|
||||
return
|
||||
elif role_name is None or role_name == "":
|
||||
self.redirect("/panel/error?error=Invalid role name")
|
||||
return
|
||||
@ -2026,25 +2068,19 @@ class PanelHandler(BaseHandler):
|
||||
return
|
||||
|
||||
servers = self.get_role_servers()
|
||||
permissions_mask = self.get_perms_server()
|
||||
|
||||
role_id = self.controller.roles.add_role(role_name)
|
||||
self.controller.roles.update_role(
|
||||
role_id, {"servers": servers}, permissions_mask
|
||||
)
|
||||
# TODO: use add_role_advanced when API v2 gets merged
|
||||
for server in servers:
|
||||
PermissionsServers.get_or_create(role_id, server[0], server[1])
|
||||
|
||||
self.controller.management.add_to_audit_log(
|
||||
exec_user["user_id"],
|
||||
f"Added role {role_name} (RID:{role_id})",
|
||||
server_id=0,
|
||||
source_ip=self.get_remote_ip(),
|
||||
)
|
||||
self.controller.management.add_to_audit_log(
|
||||
exec_user["user_id"],
|
||||
f"Edited role {role_name} (RID:{role_id}) with servers {servers}",
|
||||
f"created role {role_name} (RID:{role_id})",
|
||||
server_id=0,
|
||||
source_ip=self.get_remote_ip(),
|
||||
)
|
||||
self.controller.crafty_perms.add_role_creation(exec_user["user_id"])
|
||||
self.redirect("/panel/panel_config")
|
||||
|
||||
else:
|
||||
|
@ -37,180 +37,238 @@
|
||||
<div class="col-sm-12 grid-margin">
|
||||
<div class="card">
|
||||
<div class="card-body pt-0">
|
||||
<ul class="nav nav-tabs col-md-12 tab-simple-styled " role="tablist">
|
||||
<li class="nav-item">
|
||||
<a class="nav-link active" href="/panel/edit_role?id={{ data['role']['role_id'] }}&subpage=config" role="tab" aria-selected="true">
|
||||
<i class="fas fa-cogs"></i>{{ translate('rolesConfig', 'config', data['lang']) }}</a>
|
||||
</li>
|
||||
<!-- <li class="nav-item">
|
||||
<a class="nav-link" href="/panel/edit_role?id={{ data['role']['role_id'] }}&subpage=other" role="tab" aria-selected="false">
|
||||
<i class="fas fa-folder-tree"></i>Other</a>
|
||||
</li> -->
|
||||
</ul>
|
||||
<div class="row">
|
||||
<div class="col-md-6 col-sm-12">
|
||||
{% if data['new_role'] %}
|
||||
<form class="forms-sample" method="post" action="/panel/add_role">
|
||||
{% else %}
|
||||
<form class="forms-sample" method="post" action="/panel/edit_role">
|
||||
{% end %}
|
||||
{% raw xsrf_form_html() %}
|
||||
<input type="hidden" name="id" value="{{ data['role']['role_id'] }}">
|
||||
<input type="hidden" name="subpage" value="config">
|
||||
<ul class="nav nav-tabs col-md-12 tab-simple-styled " role="tablist">
|
||||
<li class="nav-item">
|
||||
<a class="nav-link active" href="/panel/edit_role?id={{ data['role']['role_id'] }}&subpage=config" role="tab" aria-selected="true">
|
||||
<i class="fas fa-cogs"></i>{{ translate('rolesConfig', 'config', data['lang']) }}</a>
|
||||
</li>
|
||||
<!-- <li class="nav-item">
|
||||
<a class="nav-link" href="/panel/edit_role?id={{ data['role']['role_id'] }}&subpage=other" role="tab" aria-selected="false">
|
||||
<i class="fas fa-folder-tree"></i>Other</a>
|
||||
</li> -->
|
||||
</ul>
|
||||
<div class="">
|
||||
<div class="">
|
||||
<form class="forms-sample" method="post" action="{{ '/panel/add_role' if data['new_role'] else '/panel/edit_role' }}">
|
||||
{% raw xsrf_form_html() %}
|
||||
<input type="hidden" name="id" value="{{ data['role']['role_id'] }}">
|
||||
<input type="hidden" name="subpage" value="config">
|
||||
|
||||
<div class="card">
|
||||
<div class="card-header header-sm d-flex justify-content-between align-items-center">
|
||||
<h4 class="card-title"><i class="fas fa-user-tag"></i> {{ translate('rolesConfig', 'roleTitle', data['lang']) }}</h4>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="form-group">
|
||||
<label for="role_name">{{ translate('rolesConfig', 'roleName', data['lang']) }} <small class="text-muted ml-1"> - {{ translate('rolesConfig', 'roleDesc', data['lang']) }}</small> </label>
|
||||
<input type="text" class="form-control" name="role_name" id="role_name" value="{{ data['role']['role_name'] }}" placeholder="Role Name" >
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<div class="card-header header-sm d-flex justify-content-between align-items-center">
|
||||
<h4 class="card-title"><i class="fas fa-server"></i> {{ translate('rolesConfig', 'roleServers', data['lang']) }} <small class="text-muted ml-1"> {{ translate('rolesConfig', 'serversDesc', data['lang']) }}</small> </h4>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="form-group">
|
||||
<div class="table-responsive">
|
||||
<table class="table table-hover">
|
||||
<thead>
|
||||
<tr class="rounded">
|
||||
<th>{{ translate('rolesConfig', 'serverName', data['lang']) }}</th>
|
||||
<th>{{ translate('rolesConfig', 'serverAccess', data['lang']) }}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for server in data['servers_all'] %}
|
||||
<tr>
|
||||
<td>{{ server['server_name'] }}</td>
|
||||
<td>
|
||||
{% if server['server_id'] in data['role']['servers'] %}
|
||||
<input type="checkbox" class="" id="server_{{ server['server_id'] }}_access" name="server_{{ server['server_id'] }}_access" checked="" value="1">
|
||||
{% else %}
|
||||
<input type="checkbox" class="" id="server_{{ server['server_id'] }}_access" name="server_{{ server['server_id'] }}_access" value="1">
|
||||
{% end %}
|
||||
</td>
|
||||
</tr>
|
||||
{% end %}
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<div class="card-header header-sm d-flex justify-content-between align-items-center">
|
||||
<h4 class="card-title"><i class="fas fa-user-lock"></i> {{ translate('rolesConfig', 'rolePerms', data['lang']) }}<small class="text-muted ml-1"> - {{ translate('rolesConfig', 'permsServer', data['lang']) }} </small></h4>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="form-group">
|
||||
<div class="table-responsive">
|
||||
<table class="table table-hover">
|
||||
<thead>
|
||||
<tr class="rounded">
|
||||
<th>{{ translate('rolesConfig', 'permName', data['lang']) }}</th>
|
||||
<th>{{ translate('rolesConfig', 'permAccess', data['lang']) }}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for permission in data['permissions_all'] %}
|
||||
<tr>
|
||||
<td>{{ permission.name }}</td>
|
||||
<td>
|
||||
{% if permission in data['permissions_list'] %}
|
||||
<input type="checkbox" class="" id="permission_{{ permission.name }}" name="permission_{{ permission.name }}" checked="" value="1">
|
||||
{% else %}
|
||||
<input type="checkbox" class="" id="permission_{{ permission.name }}" name="permission_{{ permission.name }}" value="1">
|
||||
{% end %}
|
||||
</td>
|
||||
</tr>
|
||||
{% end %}
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<button type="submit" class="btn btn-success mr-2"><i class="fas fa-save"></i> {{ translate('panelConfig', 'save', data['lang']) }}</button>
|
||||
<button type="reset" onclick="location.href='/panel/panel_config'" class="btn btn-light"><i class="fas fa-undo-alt"></i> {{ translate('panelConfig', 'cancel', data['lang']) }}</button>
|
||||
</form>
|
||||
|
||||
</div>
|
||||
<div class="col-md-3 col-sm-12">
|
||||
<div class="card">
|
||||
<div class="card-header header-sm d-flex justify-content-between align-items-center">
|
||||
<h4 class="card-title"><i class="fas fa-users"></i> {{ translate('rolesConfig', 'roleUsers', data['lang']) }}</h4>
|
||||
<div class="card">
|
||||
<div class="card-header header-sm d-flex justify-content-between align-items-center">
|
||||
<h4 class="card-title"><i class="fas fa-user-tag"></i> {{ translate('rolesConfig', 'roleTitle', data['lang']) }}</h4>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="form-group">
|
||||
<label for="role_name">{{ translate('rolesConfig', 'roleName', data['lang']) }} <small class="text-muted ml-1"> - {{ translate('rolesConfig', 'roleDesc', data['lang']) }}</small> </label>
|
||||
<input type="text" class="form-control" name="role_name" id="role_name" value="{{ data['role']['role_name'] }}" placeholder="Role Name" >
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="table-responsive">
|
||||
<table class="table table-hover">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<div class="card-header header-sm d-flex justify-content-between align-items-center">
|
||||
<h4 class="card-title"><i class="fas fa-server"></i> {{ translate('rolesConfig', 'roleServers', data['lang']) }} <small class="text-muted ml-1"> {{ translate('rolesConfig', 'serversDesc', data['lang']) }}</small> </h4>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="form-group">
|
||||
<div class="table-responsive rotate-table-parent">
|
||||
<table class="table table-hover rotate-table">
|
||||
<thead>
|
||||
<style>
|
||||
.rotate-table-parent {
|
||||
padding-top: 2.5rem;
|
||||
padding-right: 4rem;
|
||||
}
|
||||
|
||||
/* https://css-tricks.com/rotated-table-column-headers-now-with-fewer-magic-numbers/ */
|
||||
table.rotate-table {
|
||||
--table-border-width: 1px;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
th.rotate-column-header {
|
||||
/* Something you can count on */
|
||||
height: 140px;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
th.rotate-column-header > div {
|
||||
transform:
|
||||
/* Magic Numbers */
|
||||
translate(0px, 51px)
|
||||
/* 315 is 360 - 45 */
|
||||
rotate(315deg);
|
||||
width: 30px;
|
||||
}
|
||||
th.rotate-column-header > div > span {
|
||||
border-bottom: 1px solid #ccc;
|
||||
padding: 5px 10px;
|
||||
}
|
||||
th.rotate {
|
||||
white-space: nowrap;
|
||||
position: relative;
|
||||
}
|
||||
th.rotate > div {
|
||||
/* place div at bottom left of the th parent */
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
/* Make sure short labels still meet the corner of the parent otherwise you'll get a gap */
|
||||
text-align: left;
|
||||
/* Move the top left corner of the span's bottom-border to line up with the top left corner of the td's border-right border so that the border corners are matched
|
||||
* Rotate 315 (-45) degrees about matched border corners */
|
||||
transform:
|
||||
translate(calc(100% - var(--table-border-width) / 2), var(--table-border-width))
|
||||
rotate(-45deg);
|
||||
transform-origin: 0% calc(100% - var(--table-border-width));
|
||||
transition: transform 500ms;
|
||||
width: 100%;
|
||||
}
|
||||
th.rotate > div > span {
|
||||
/* make sure the bottom of the span is matched up with the bottom of the parent div */
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
border-bottom: var(--table-border-width) solid #383e5d;
|
||||
transition: border-bottom-color 500ms;
|
||||
padding-bottom: 5px;
|
||||
user-select: none;
|
||||
}
|
||||
table.rotate-table > tbody td {
|
||||
border-right: var(--table-border-width) solid #383e5d;
|
||||
/* make sure this is at least as wide as sqrt(2) * height of the tallest letter in your font or the headers will overlap each other*/
|
||||
min-width: 30px;
|
||||
padding-top: 2px;
|
||||
padding-left: 5px;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
@media screen and (min-width: 1650px) {
|
||||
th.rotate > div {
|
||||
transform: translate(15px, 0px) rotate(0deg);
|
||||
}
|
||||
th.rotate > div > span {
|
||||
border-bottom-color: transparent;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
<tr class="rounded">
|
||||
<th>{{ translate('rolesConfig', 'roleUserName', data['lang']) }}</th>
|
||||
<th></th>
|
||||
<th>{{ translate('rolesConfig', 'serverName', data['lang']) }}</th>
|
||||
<th class="rotate"><div><span>{{ translate('rolesConfig', 'serverAccess', data['lang']) }}</span></div></th>
|
||||
{% for permission in data['permissions_all'] %}
|
||||
<th class="rotate"><div><span>{{ permission.name }}</span></div></th>
|
||||
{% end %}
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for user in data['users'] %}
|
||||
{% for ruser in data['user-roles'][user.user_id] %}
|
||||
{% if ruser == data['role']['role_name'] %}
|
||||
<tr>
|
||||
<td>{{ user.username }}</td>
|
||||
<td>
|
||||
<a href="/panel/edit_user?id={{user.user_id}}"><i class="fas fa-user-edit"></i></a>
|
||||
</td>
|
||||
</tr>
|
||||
{% for server in data['servers_all'] %}
|
||||
<tr>
|
||||
<td>{{ server['server_name'] }}</td>
|
||||
<td>
|
||||
<input type="checkbox" class="" onclick="enable_disable(event)" data-id="{{server['server_id']}}"
|
||||
id="server_{{ server['server_id'] }}_access"
|
||||
name="server_{{ server['server_id'] }}_access"
|
||||
{{ 'checked' if server['server_id'] in data['role']['servers'] else '' }}
|
||||
autocomplete="off" value="1">
|
||||
</td>
|
||||
{% for permission in data['permissions_all'] %}
|
||||
{% if server['server_id'] in data['role']['servers'] %}
|
||||
<td>
|
||||
<input type="checkbox" class="{{server['server_id']}}_perms"
|
||||
id="permission_{{ server['server_id'] }}_{{ permission.name }}"
|
||||
name="permission_{{ server['server_id'] }}_{{ permission.name }}"
|
||||
{{ 'checked' if permission in data['permissions_dict'].get(server['server_id'], []) else '' }}
|
||||
autocomplete="off" value="1">
|
||||
</td>
|
||||
{% else %}
|
||||
<td>
|
||||
<input type="checkbox" class="{{server['server_id']}}_perms"
|
||||
id="permission_{{ server['server_id'] }}_{{ permission.name }}"
|
||||
name="permission_{{ server['server_id'] }}_{{ permission.name }}"
|
||||
autocomplete="off" value="1" disabled>
|
||||
</td>
|
||||
{% end %}
|
||||
{% end %}
|
||||
{% end %}
|
||||
</tr>
|
||||
{% end %}
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<br>
|
||||
</div>
|
||||
<div class="col-md-3 col-sm-12">
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<h4 class="card-title">{{ translate('rolesConfig', 'roleConfigArea', data['lang']) }}</h4>
|
||||
<p class="card-description"> {{ translate('rolesConfig', 'configDesc', data['lang']) }}</p>
|
||||
<blockquote class="blockquote">
|
||||
<p class="mb-0">
|
||||
{{ translate('rolesConfig', 'created', data['lang']) }} {{ str(data['role']['created']) }}
|
||||
<br />
|
||||
{{ translate('rolesConfig', 'configUpdate', data['lang']) }} {{ str(data['role']['last_update']) }}
|
||||
<br />
|
||||
</p>
|
||||
</blockquote>
|
||||
<div class="text-center">
|
||||
{% if data['new_role'] %}
|
||||
<a class="btn btn-sm btn-danger disabled"><i class="fas fa-trash"></i>{{ translate('rolesConfig', 'delRole', data['lang']) }}</a><br />
|
||||
<small>{{ translate('rolesConfig', 'doesNotExist', data['lang']) }}</small>
|
||||
{% else %}
|
||||
<a href="/panel/remove_role?id={{ data['role']['role_id'] }}" class="btn btn-sm btn-danger"><i class="fas fa-trash"></i>{{ translate('rolesConfig', 'delRole', data['lang']) }}</a>
|
||||
{% end %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<div class="card-header header-sm d-flex justify-content-between align-items-center">
|
||||
<h4 class="card-title"><i class="fas fa-settings"></i> {{ translate('panelConfig', 'save', data['lang']) }}</h4>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<button type="submit" class="btn btn-success mr-2"><i class="fas fa-save"></i> {{ translate('panelConfig', 'save', data['lang']) }}</button>
|
||||
<button type="reset" onclick="location.href='/panel/panel_config'" class="btn btn-light"><i class="fas fa-undo-alt"></i> {{ translate('panelConfig', 'cancel', data['lang']) }}</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<div class="card">
|
||||
<div class="card-header header-sm d-flex justify-content-between align-items-center">
|
||||
<h4 class="card-title"><i class="fas fa-users"></i> {{ translate('rolesConfig', 'roleUsers', data['lang']) }}</h4>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="table-responsive">
|
||||
<table class="table table-hover">
|
||||
<thead>
|
||||
<tr class="rounded">
|
||||
<th>{{ translate('rolesConfig', 'roleUserName', data['lang']) }}</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for user in data['users'] %}
|
||||
{% for ruser in data['user-roles'][user.user_id] %}
|
||||
{% if ruser == data['role']['role_name'] %}
|
||||
<tr>
|
||||
<td>{{ user.username }}</td>
|
||||
<td>
|
||||
<a href="/panel/edit_user?id={{user.user_id}}"><i class="fas fa-user-edit"></i></a>
|
||||
</td>
|
||||
</tr>
|
||||
{% end %}
|
||||
{% end %}
|
||||
{% end %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<h4 class="card-title">{{ translate('rolesConfig', 'roleConfigArea', data['lang']) }}</h4>
|
||||
<p class="card-description"> {{ translate('rolesConfig', 'configDesc', data['lang']) }}</p>
|
||||
<blockquote class="blockquote">
|
||||
<p class="mb-0">
|
||||
{{ translate('rolesConfig', 'created', data['lang']) }} {{ str(data['role']['created']) }}
|
||||
<br />
|
||||
{{ translate('rolesConfig', 'configUpdate', data['lang']) }} {{ str(data['role']['last_update']) }}
|
||||
<br />
|
||||
</p>
|
||||
</blockquote>
|
||||
<div class="text-center">
|
||||
{% if data['new_role'] %}
|
||||
<a class="btn btn-sm btn-danger disabled"><i class="fas fa-trash"></i>{{ translate('rolesConfig', 'delRole', data['lang']) }}</a><br />
|
||||
<small>{{ translate('rolesConfig', 'doesNotExist', data['lang']) }}</small>
|
||||
{% else %}
|
||||
<a href="/panel/remove_role?id={{ data['role']['role_id'] }}" class="btn btn-sm btn-danger"><i class="fas fa-trash"></i>{{ translate('rolesConfig', 'delRole', data['lang']) }}</a>
|
||||
{% end %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
<!-- content-wrapper ends -->
|
||||
|
||||
@ -219,7 +277,19 @@
|
||||
{% block js %}
|
||||
<script>
|
||||
|
||||
function enable_disable(event) {
|
||||
let server_id = event.target.getAttribute('data-id');
|
||||
console.log(server_id);
|
||||
if (document.getElementById("server_" + server_id + "_access").checked) {
|
||||
$('.'+server_id+'_perms').attr('disabled', false);
|
||||
$('.'+server_id+'_perms').attr('enabled', true);
|
||||
}else{
|
||||
$('.'+server_id+'_perms').prop('checked', false);
|
||||
$('.'+server_id+'_perms').attr('disabled', true);
|
||||
$('.'+server_id+'_perms').attr('enabled', false);
|
||||
}
|
||||
|
||||
}
|
||||
//used to get cookies from browser - this is part of tornados xsrf protection - it's for extra security
|
||||
function getCookie(name) {
|
||||
var r = document.cookie.match("\\b" + name + "=([^;]*)\\b");
|
||||
@ -233,4 +303,4 @@
|
||||
|
||||
</script>
|
||||
|
||||
{% end %}
|
||||
{% end %}
|
||||
|
@ -158,13 +158,14 @@
|
||||
</div>
|
||||
|
||||
<!-- Put Permissions Crafty part here -->
|
||||
|
||||
{% if data['superuser'] %}
|
||||
<div class="card">
|
||||
<div class="card-header header-sm d-flex justify-content-between align-items-center">
|
||||
<h4 class="card-title"><i class="fas fa-user-lock"></i> {{ translate('userConfig', 'craftyPerms',
|
||||
data['lang']) }} <small class="text-muted ml-1"> - {{ translate('userConfig', 'craftyPermDesc',
|
||||
data['lang']) }}</small></h4>
|
||||
</div>
|
||||
|
||||
<div class="card-body">
|
||||
<div class="form-group">
|
||||
<div class="table-responsive">
|
||||
@ -200,7 +201,7 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% end %}
|
||||
<div class="form-check-flat">
|
||||
<label for="enabled" class="form-check-label ml-4 mb-4">
|
||||
{% if data['user']['enabled'] %}
|
||||
|
@ -389,7 +389,7 @@
|
||||
"command": "Command",
|
||||
"command-explain": "What command do you want us to execute? Do not include the '/'",
|
||||
"cron": "Cron",
|
||||
"cron-explain": "Enter your cron string",
|
||||
"cron-explain": "Enter your cron string -- NOTE: 0 = Monday on last option.",
|
||||
"custom": "Custom Command",
|
||||
"days": "Days",
|
||||
"enabled": "Enabled",
|
||||
|
532
app/translations/it_IT.json
Normal file
532
app/translations/it_IT.json
Normal file
@ -0,0 +1,532 @@
|
||||
{
|
||||
"404": {
|
||||
"contact": "Contatta il supporto di Crafty Control tramite Discord",
|
||||
"unableToFind": "Non siamo riusciti a trovare la pagina che cercavi. Per favore prova di nuovo, oppure torna indietro e riprova.",
|
||||
"notFound": "Pagina non trovata"
|
||||
},
|
||||
"accessDenied": {
|
||||
"accessDenied": "Accesso negato",
|
||||
"contact": "Contatta il supporto di Crafty Control tramite Discord",
|
||||
"contactAdmin": "Contatta l'amministratore del tuo server per l'accesso a questa risorsa, o se pensi tu debba aver accesso a questa risorsa, contatta il supporto tecnico.",
|
||||
"noAccess": "Non hai accesso a questa risorsa"
|
||||
},
|
||||
"apiKeys": {
|
||||
"apiKeys": "Chiavi API",
|
||||
"auth": "Autorizzato? ",
|
||||
"buttons": "Pulsanti",
|
||||
"config": "Configura",
|
||||
"crafty": "Crafty: ",
|
||||
"created": "Creato",
|
||||
"createNew": "Crea un nuovo Token API",
|
||||
"deleteKeyConfirmation": "Vuoi cancellare questa chiave API? Non puoi tornare indietro.",
|
||||
"deleteKeyConfirmationTitle": "Rimuovere la chiave API ${keyId}?",
|
||||
"getToken": "Prendi un Token",
|
||||
"name": "Nome",
|
||||
"nameDesc": "Come desideri chiamare questo Token API? ",
|
||||
"no": "No",
|
||||
"pageTitle": "Modifica le chiavi API degli utenti",
|
||||
"permName": "Nome Permesso",
|
||||
"perms": "Permessi",
|
||||
"server": "Server: ",
|
||||
"superUser": "Super User",
|
||||
"yes": "Sì"
|
||||
},
|
||||
"base": {
|
||||
"doesNotWorkWithoutJavascript": "<strong>Avviso: </strong>Crafty non funziona a dovere se JavaScript è disabilitato!"
|
||||
},
|
||||
"credits": {
|
||||
"developmentTeam": "Squadra di Svuluppo",
|
||||
"hugeDesc": "Un enorme",
|
||||
"pageDescription": "Senza queste persone, non avremmo Crafty",
|
||||
"pageTitle": "Crediti",
|
||||
"patreonDesc": "ai nostri supporter di Patreon!",
|
||||
"patreonLevel": "Livello",
|
||||
"patreonName": "Nome",
|
||||
"patreonOther": "Altro",
|
||||
"patreonSupporter": "Supporter Patreon",
|
||||
"patreonUpdate": "Ultimo aggiornamento:",
|
||||
"retiredStaff": "Staff ritirato",
|
||||
"supportTeam": "Squadra di supporto e documentazione",
|
||||
"thankYou": "GRAZIE",
|
||||
"translationDesc": "alla nostra community di traduttori!",
|
||||
"translationName": "Nome",
|
||||
"translationTitle": "Traduttore in lingua",
|
||||
"translator": "Traduttori"
|
||||
},
|
||||
"dashboard": {
|
||||
"dashboard": "Pannello di Controllo",
|
||||
"memUsage": "Utilizzo della memoria",
|
||||
"cpuUsage": "Utilizzo del Processore",
|
||||
"host": "Host",
|
||||
"players": "Giocatori",
|
||||
"backups": "Backups",
|
||||
"newServer": "Crea un Nuovo Server",
|
||||
"allServers": "Tutti i Server",
|
||||
"server": "Server",
|
||||
"actions": "Azioni",
|
||||
"size": "Dimensioni della Cartella del Server",
|
||||
"motd": "MOTD",
|
||||
"version": "Versione",
|
||||
"status": "Stato",
|
||||
"online": "Online",
|
||||
"offline": "Offline",
|
||||
"lastBackup": "Ultimo:",
|
||||
"nextBackup": "Prossimo:",
|
||||
"servers": "Servers",
|
||||
"cannotSeeOnMobile": "Non vedi nulla da mobile?",
|
||||
"cannotSee": "Non vedi qualcosa?",
|
||||
"cannotSeeOnMobile2": "Prova a scorrere la tabella orizzontalmente.",
|
||||
"max": "Massimo",
|
||||
"avg": "Media",
|
||||
"bePatientStart": "Per favore sii paziente mentre avviamo il server.<br /> Questa schermata si aggiornerà a breveThis screen will refresh in a moment",
|
||||
"bePatientStop": "Per favore sii paziente while we stop the server.<br /> Questa schermata si aggiornerà a breve",
|
||||
"bePatientRestart": "Per favore sii paziente mentre riavviamo il server.<br /> Questa schermata si aggiornerà a breve",
|
||||
"bePatientClone": "Per favore sii paziente mentre cloniamo il server.<br /> Questa schermata si aggiornerà a breve",
|
||||
"sendingCommand": "Invio il tuo comando",
|
||||
"cpuCurFreq": "Velocità attuale CPU",
|
||||
"cpuMaxFreq": "Velocità massima CPU",
|
||||
"cpuCores": "CPU Cores",
|
||||
"start": "Start",
|
||||
"stop": "Stop",
|
||||
"clone": "Clona",
|
||||
"kill": "Termina il Processo",
|
||||
"restart": "Riavvia",
|
||||
"killing": "Terminando il processo...",
|
||||
"starting": "Avvio ritardato",
|
||||
"delay-explained": "Il servizio/agente è stato avviato di recente e sta ritardando l'avvio del server di Minecraft",
|
||||
"no-servers": "Attualmente non ci sono server. Per cominciare, cliccalick",
|
||||
"welcome": "Benvenuto su Crafty Controller",
|
||||
"crashed": "Crashato"
|
||||
},
|
||||
"datatables": {
|
||||
"i18n": {
|
||||
"decimal": "",
|
||||
"emptyTable": "Nessun dato disponibile nella tabella",
|
||||
"info": "Mostro da _START_ a _END_ di _TOTAL_ record",
|
||||
"infoEmpty": "Mostro da 0 a 0 di 0 record",
|
||||
"infoFiltered": "(filtrato da _MAX_ record totali)",
|
||||
"infoPostFix": "",
|
||||
"thousands": ",",
|
||||
"lengthMenu": "Mostra _MENU_ record",
|
||||
"loadingRecords": "Carico...",
|
||||
"processing": "Calcolo...",
|
||||
"search": "Cerca:",
|
||||
"zeroRecords": "Nessun record corrispondente trovato",
|
||||
"paginate": {
|
||||
"first": "Prima",
|
||||
"last": "Ultima",
|
||||
"next": "Prossima",
|
||||
"previous": "Precedente"
|
||||
},
|
||||
"aria": {
|
||||
"sortAscending": ": attiva per ordinare le colonne in modo ascendente",
|
||||
"sortDescending": ": attiva per ordinare le colonne in modo discendente"
|
||||
},
|
||||
"buttons": {
|
||||
"collection": "Collection <span class='ui-button-icon-primary ui-icon ui-icon-triangle-1-s'\/>",
|
||||
"colvis": "Visibilità colonne",
|
||||
"colvisRestore": "Ripristina visibilità",
|
||||
"copy": "Copy",
|
||||
"copyKeys": "Premi ctrl or u2318 + C per copiare i dati della tabella negli appunti di sistema.<br><br>Per cancellare, clicca questo messaggio o premi esc.",
|
||||
"copySuccess": {
|
||||
"1": "Copiata 1 riga negli appunti",
|
||||
"_": "Copiate %d righe negli appunti"
|
||||
},
|
||||
"copyTitle": "Copia negli appunti di sistema",
|
||||
"csv": "CSV",
|
||||
"excel": "Excel",
|
||||
"pageLength": {
|
||||
"-1": "Mostra tutte le righe",
|
||||
"1": "Mostra 1 riga",
|
||||
"_": "Mostra %d righe"
|
||||
},
|
||||
"pdf": "PDF",
|
||||
"print": "Stampa"
|
||||
},
|
||||
"select": {
|
||||
"rows": {
|
||||
"0": "Clicca su una riga per selezionarla",
|
||||
"1": "%d riga selezionata",
|
||||
"_": "%d righe selezionate"
|
||||
},
|
||||
"cells": {
|
||||
"0": "Clicca su una cella per selezionarla",
|
||||
"1": "%d cella selezionata",
|
||||
"_": "%d celle selezionate"
|
||||
},
|
||||
"columns": {
|
||||
"0": "Clicca su una colonna per selezionarla",
|
||||
"1": "%d colonna selezionata",
|
||||
"_": "%d colonne selezionate"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"error": {
|
||||
"contact": "Contact Crafty Control Support via Discord",
|
||||
"embarassing": "Oh my, well, this is embarrassing.",
|
||||
"error": "Error!",
|
||||
"eulaAgree": "Do you agree?",
|
||||
"eulaMsg": "You must agree to the EULA. A copy of the Mojang EULA is linked under this message.",
|
||||
"eulaTitle": "Agree To EULA",
|
||||
"hereIsTheError": "Here is the error",
|
||||
"internet": "We have detected the machine running Crafty has no connection to the internet. Client connections to the server may be limited.",
|
||||
"no-file": "We can't seem to locate the requested file. Double check the path. Does Crafty have proper permissions?",
|
||||
"noJava": "Server {} failed to start with error code: We have detected Java is not installed. Please install java then start the server.",
|
||||
"not-downloaded": "We can't seem to find your executable file. Has it finished downloading? Are the permissions set to executable?",
|
||||
"portReminder": "We have detected this is the first time {} has been run. Make sure to forward port {} through your router/firewall to make this remotely accessible from the internet.",
|
||||
"start-error": "Server {} failed to start with error code: {}",
|
||||
"terribleFailure": "What a Terrible Failure!"
|
||||
},
|
||||
"footer": {
|
||||
"allRightsReserved": "Tutti i diritti Riservati",
|
||||
"copyright": "Copyright",
|
||||
"version": "Versione"
|
||||
},
|
||||
"login": {
|
||||
"forgotPassword": "Password dimenticata",
|
||||
"login": "Accedi",
|
||||
"password": "Password",
|
||||
"username": "Nome utente"
|
||||
},
|
||||
"notify": {
|
||||
"activityLog": "Registri di Attività",
|
||||
"backupComplete": "Il Backup per il server {} è stato completato correttamente",
|
||||
"backupStarted": "Il Backup per il server {} è cominciato",
|
||||
"downloadLogs": "Scaricare i registri di Supporto?",
|
||||
"finishedPreparing": "Abbiamo finito di preparare i tuoi registri di supporto.Per favore clicca Scarica per scaricarli",
|
||||
"logout": "Disconnessione",
|
||||
"preparingLogs": "Per favore aspetta mentre prepariamo i tuoi registri... Ti invieremo una notifica quando saranno pronti. Potrebbe volerci un po' per installazioni grosse.",
|
||||
"supportLogs": "Registri di supporto"
|
||||
},
|
||||
"panelConfig": {
|
||||
"adminControls": "Controllo admin",
|
||||
"allowedServers": "Server permessi",
|
||||
"assignedRoles": "Ruoli assegnati",
|
||||
"cancel": "Cancella",
|
||||
"clearComms": "Pulisci i comandi non eseguiti",
|
||||
"delete": "Elimina",
|
||||
"edit": "Modifica",
|
||||
"enabled": "Abilitato",
|
||||
"newRole": "Aggiungi nuovo ruolo",
|
||||
"newUser": "Aggiungi nuovo utente",
|
||||
"pageTitle": "Configurazioni del pannello",
|
||||
"role": "Ruolo",
|
||||
"roles": "Ruoli",
|
||||
"roleUsers": "Utenti del ruolo",
|
||||
"save": "Salva",
|
||||
"superConfirm": "Procedi solo se vuoi che questo utente abbia accesso a TUTTO (tutti gli utenti, server, impostazioni del pannello, ecc...). Può anche revocare i tuoi poteri da superuser.",
|
||||
"superConfirmTitle": "Abilitare lo superuser? Sei sicuro?",
|
||||
"user": "Utente",
|
||||
"users": "Utenti"
|
||||
},
|
||||
"rolesConfig": {
|
||||
"config": "Configura ruolo",
|
||||
"configDesc": "Qui è dove puoi modificare la configurazione del ruolo",
|
||||
"configUpdate": "Ultimo aggiornamento: ",
|
||||
"created": "Creato il: ",
|
||||
"delRole": "Elimina ruolo",
|
||||
"doesNotExist": "Non puoi eliminare qualcosa che ancora non esiste",
|
||||
"pageTitle": "Modifica ruolo",
|
||||
"pageTitleNew": "Nuovo ruolo",
|
||||
"permAccess": "Abilitato?",
|
||||
"permName": "Nome permesso",
|
||||
"permsServer": "Permessi che questo ruolo ha per questi specifici server",
|
||||
"roleConfigArea": "Area di configurazione del ruolo",
|
||||
"roleDesc": "Come vorresti chiamare questo ruolo?",
|
||||
"roleName": "Nome del ruolo: ",
|
||||
"rolePerms": "Permessi del ruolo",
|
||||
"roleServers": "Server abilitati",
|
||||
"roleTitle": "Impostazioni del ruolo",
|
||||
"roleUserName": "Nome Utente",
|
||||
"roleUsers": "Utenti con il ruolo: ",
|
||||
"serverAccess": "Abilitato?",
|
||||
"serverName": "Nome del Server",
|
||||
"serversDesc": "Server a cui questo ruolo è consentito l'accesso"
|
||||
},
|
||||
"serverBackups": {
|
||||
"backupAtMidnight": "Auto-backup a mezzanotte?",
|
||||
"backupNow": "Effettua il Backup Ora!",
|
||||
"backupTask": "Un'azione di backup è cominciata.",
|
||||
"cancel": "Cancella",
|
||||
"clickExclude": "Clicca per selezionare le esclusioni",
|
||||
"compress": "Comprimi backup",
|
||||
"confirm": "Conferma",
|
||||
"confirmDelete": "Vuoi eliminare questo backup? Non puoi tornare indietro.",
|
||||
"confirmRestore": "Sei sicuro di voler ripristinare qeusto backup? Tutti i file correnti verranno sovrascritti allo stato di backup e saranno irrecuperabili.",
|
||||
"currentBackups": "Backup attuali",
|
||||
"delete": "Elimina",
|
||||
"destroyBackup": "Distruggere il backup \" + file_to_del + \"?",
|
||||
"download": "Scarica",
|
||||
"excludedBackups": "Percorsi esclusi: ",
|
||||
"excludedChoose": "Scegli i percorsi che desideri escludere dai tuoi backups",
|
||||
"exclusionsTitle": "Fai un backup delle esclusioni",
|
||||
"maxBackups": "Backup massimi",
|
||||
"maxBackupsDesc": "Crafty non memorizzerà più di N backup, cancellando quelli più vecchi (inserisci 0 per mantenerli tutti)",
|
||||
"options": "Opzioni",
|
||||
"path": "Percorso",
|
||||
"restore": "Ripristina",
|
||||
"restoring": "Ripristinando il backup. Potrebber volerci un momento. Per favore sii paziente.",
|
||||
"save": "Salva",
|
||||
"size": "Dimensioni",
|
||||
"storageLocation": "Percorso di memorizzazione",
|
||||
"storageLocationDesc": "Dove vuoi memorizzare i backup?"
|
||||
},
|
||||
"serverConfig": {
|
||||
"bePatientDelete": "Per favore sii paziente mentre rimuoviamo il tuo server dal pannello di Crafty. Questa schermata si chiuderà in pochi istanti.",
|
||||
"bePatientDeleteFiles": "Per favore sii paziente mentre rimuoviamo il tuo server dal pannello di Crafty e cancelliamo tutti i files. Questa schermata si chiuderà in pochi istanti.",
|
||||
"bePatientUpdate": "Per favore sii paziente mentre aggiorniamo il server. I tempi di download possono variare dalla tua velocità di internet.<br /> Questa schermata si aggiornerà a breve",
|
||||
"cancel": "Cancella",
|
||||
"crashTime": "Crash Timeout",
|
||||
"crashTimeDesc": "Quanto dobbiamo aspettare per considerare il tuo server crashato per colpa di un timeout?",
|
||||
"deleteFilesQuestion": "Eliminare i file del server dalla macchina?",
|
||||
"deleteFilesQuestionMessage": "Vuoi che crafty cancelli tutti i file del server dalla macchina? <br><br><strong>Questo include i backup del server.</strong>",
|
||||
"deleteServer": "Eliminare il server",
|
||||
"deleteServerQuestion": "Eliminare il server?",
|
||||
"deleteServerQuestionMessage": "Sei sicuro di voler eliminare questo server? Dopo la conferma non puoi tornare indietro...",
|
||||
"exeUpdateURL": "URL di aggiornamento dell'eseguibile del server",
|
||||
"exeUpdateURLDesc": "URL di download diretto per gli aggiornamenti del server.",
|
||||
"noDelete": "No, torna indietro",
|
||||
"noDeleteFiles": "No, eliminalo dal pannello di controllo e basta",
|
||||
"removeOldLogsAfter": "Rimuovi i registri vecchi dopo",
|
||||
"removeOldLogsAfterDesc": "Di quanti giorni dovrà essere vecchio un registro per essere cancellato (inserendo 0 non verranno cancellati)",
|
||||
"save": "Salva",
|
||||
"sendingDelete": "Elimino il server",
|
||||
"sendingRequest": "Invio la tua richiesta...",
|
||||
"serverAutoStart": "Avvio automatico del server",
|
||||
"serverAutostartDelay": "Ritardo d'avvio automatico",
|
||||
"serverAutostartDelayDesc": "Ritardo in secondi per l'avvio automatico (se abilitato qui sotto)",
|
||||
"serverCrashDetection": "Rilevamento dei crash del Server",
|
||||
"serverExecutable": "Eseguibile del server",
|
||||
"serverExecutableDesc": "il file Eseguibile del server",
|
||||
"serverExecutionCommand": "Comando d'esecuzione del server",
|
||||
"serverExecutionCommandDesc": "Quello che verrà lanciato in un terminale nascosto",
|
||||
"serverIP": "IP del server",
|
||||
"serverIPDesc": "L'IP a cui Crafty si dovrà collegare per le statistiche (Prova un IP reale se 127.0.0.1 causa problemi)",
|
||||
"serverLogLocation": "Percorso dei Registri",
|
||||
"serverLogLocationDesc": "Percorso assoluto dei file di Registro",
|
||||
"serverName": "Nome del Server",
|
||||
"serverNameDesc": "Come desideri chiamare questo Server",
|
||||
"serverPath": "Cartella operativa del server",
|
||||
"serverPathDesc": "Percorso assoluto completo (non includere l'eseguibile)",
|
||||
"serverPort": "Porta del server",
|
||||
"serverPortDesc": "La Porta a cui Crafty si dovrà collegare per le statistiche",
|
||||
"serverStopCommand": "Comando d'arresto del server",
|
||||
"serverStopCommandDesc": "Comando inviato al server per l'arresto",
|
||||
"stopBeforeDeleting": "Per favore arresta il server prima di eliminarlo",
|
||||
"update": "Aggiorna l'eseguibile",
|
||||
"yesDelete": "Sì, elimina",
|
||||
"yesDeleteFiles": "Sì, elimina i files"
|
||||
},
|
||||
"serverConfigHelp": {
|
||||
"desc": "Qui è dove puoi cambiare la configurazione del tuo server",
|
||||
"perms": [
|
||||
"Raccomandiamo di <code>NON</code> cambiare il percorso di un server gestito da Crafty.",
|
||||
"Modificare il percorso <code>POTREBBE</code> rompere cose, specialmente su sistemi operativi Linux, dove i permessi dei file sono più stringenti.",
|
||||
"<br /><br/>",
|
||||
"Se senti di dover cambiare la posizione di un server, puoi farlo, ma dovrai dare all'utente \"crafty\" i permessi di leggere e scrivere nel nuovo percorso.",
|
||||
"<br />",
|
||||
"<br />",
|
||||
"Su Linux puoi farlo con questi comandi:<br />",
|
||||
"<code>",
|
||||
" sudo chown crafty:crafty /path/to/your/server -R<br />",
|
||||
" sudo chmod 2775 /path/to/your/server -R<br />",
|
||||
"</code>"
|
||||
],
|
||||
"title": "Area di configurazione del server"
|
||||
},
|
||||
"serverDetails": {
|
||||
"backup": "Backup",
|
||||
"config": "Configura",
|
||||
"files": "Files",
|
||||
"logs": "Registri",
|
||||
"playerControls": "Gestisci i giocatori",
|
||||
"schedule": "Programma",
|
||||
"serverDetails": "Dettagli del Server",
|
||||
"terminal": "Terminale"
|
||||
},
|
||||
"serverFiles": {
|
||||
"clickUpload": "Clicca qui per selezionare i file",
|
||||
"close": "Chiudi",
|
||||
"createDir": "Crea Cartella",
|
||||
"createDirQuestion": "Che nome vuoi dare alla nuova cartella?",
|
||||
"createFile": "Crea file",
|
||||
"createFileQuestion": "Che nome vuoi dare al nuovo file?",
|
||||
"default": "Default",
|
||||
"delete": "Elimina",
|
||||
"deleteItemQuestion": "Sei sicuro di voler eliminare \" + name + \"?",
|
||||
"deleteItemQuestionMessage": "Stai eliminando \\\"\" + path + \"\\\"!<br/><br/>Questa azione è irreversible e sarà perso per sempre!",
|
||||
"download": "Scarica",
|
||||
"editingFile": "Modificando i files",
|
||||
"error": "Si è verificato un errore nel recuperare i files",
|
||||
"fileReadError": "Errore nella lettura del file",
|
||||
"files": "Files",
|
||||
"keybindings": "Scorciatoie da tastiera",
|
||||
"loadingRecords": "Caricando i files...",
|
||||
"noDelete": "No",
|
||||
"noscript": "Il gestore file non funziona senza JavaScript",
|
||||
"rename": "Rinomina",
|
||||
"renameItemQuestion": "Quale sarà il nuovo nome?",
|
||||
"save": "Salva",
|
||||
"stayHere": "NON ABBANDONARE QUESTA PAGINA!",
|
||||
"unsupportedLanguage": "Avviso: Questo non è un tipo di file supportato",
|
||||
"unzip": "Scompatta",
|
||||
"upload": "Carica",
|
||||
"uploadTitle": "Carica i Files su: ",
|
||||
"waitUpload": "Per favore aspetta mentre carichiamo i tuoi files... Potrebbe volerci un momento.",
|
||||
"yesDelete": "Sì, conosco le conseguenze"
|
||||
},
|
||||
"serverPlayerManagement": {
|
||||
"bannedPlayers": "Giocatori Banditi",
|
||||
"loadingBannedPlayers": "Carico i giocatori banditi",
|
||||
"players": "Giocatori"
|
||||
},
|
||||
"serverScheduleConfig": {
|
||||
"backup": "Fai un Backup del Server",
|
||||
"basic": "Basic",
|
||||
"children": "Azioni figlie legate a questa: ",
|
||||
"command": "Comando",
|
||||
"command-explain": "Quale comando vuoi che eseguiamo? Non includere la '/'",
|
||||
"cron": "Cron",
|
||||
"cron-explain": "Inserisci la stringa CRON",
|
||||
"custom": "Comando personalizzato",
|
||||
"days": "Giorni",
|
||||
"enabled": "Abilitata",
|
||||
"hours": "Ore",
|
||||
"interval": "Intervallo",
|
||||
"interval-explain": "Ogni quanto vuoi che questa azione venga eseguita?",
|
||||
"minutes": "Minuti",
|
||||
"offset": "Offset di ritardo",
|
||||
"offset-explain": "Quanto dobbiamo aspettare prima di eseguire questo dopo aver eseguito la prima azione? (Secondi)",
|
||||
"one-time": "Elimina dopo l'esecuzione",
|
||||
"parent": "Seleziona un'azione programmata padre",
|
||||
"parent-explain": "Quale azione dovrebbe far eseguire questa?",
|
||||
"reaction": "Reazione",
|
||||
"restart": "Riavvia il Server",
|
||||
"start": "Avvia il server",
|
||||
"stop": "Arresta il Server",
|
||||
"time": "Orario",
|
||||
"time-explain": "A che ora vuoi eseguire la tua azione programmata?"
|
||||
},
|
||||
"serverSchedules": {
|
||||
"areYouSure": "Eliminare l'azione programmata?",
|
||||
"cancel": "Cancella",
|
||||
"cannotSee": "Non vedi tutto?",
|
||||
"cannotSeeOnMobile": "Prova a cliccare su un'azione programmata per tutti i dettagli.",
|
||||
"confirm": "Conferma",
|
||||
"confirmDelete": "Vuoi eliminare l'azione programmata? Non puoi tornare indietro."
|
||||
},
|
||||
"serverStats": {
|
||||
"cpuUsage": "Utilizzo del Processore",
|
||||
"description": "Descrizione",
|
||||
"errorCalculatingUptime": "Errore nel calcolo dei tempi di operazione",
|
||||
"memUsage": "Utilizzo della memoria",
|
||||
"offline": "Offline",
|
||||
"online": "Online",
|
||||
"players": "Giocatori",
|
||||
"serverStarted": "Server Avviato",
|
||||
"serverStatus": "Stato del Server",
|
||||
"serverTime": "UTC Time",
|
||||
"serverTimeZone": "Timezone del Server",
|
||||
"serverUptime": "Tempo di operazione del Server",
|
||||
"starting": "Avvio ritardato",
|
||||
"unableToConnect": "Impossibile connettersi",
|
||||
"version": "Versione"
|
||||
},
|
||||
"serverTerm": {
|
||||
"commandInput": "Inserisci il comando",
|
||||
"delay-explained": "Il servizio/agente è stato avviato di recente e sta ritardando l'avvio del server di Minecraft",
|
||||
"downloading": "Scaricando...",
|
||||
"restart": "Riavvia",
|
||||
"sendCommand": "Invia il comando",
|
||||
"start": "Avvia",
|
||||
"starting": "Avvio ritardato",
|
||||
"stop": "Ferma",
|
||||
"stopScroll": "Ferma lo scorrimento automatico",
|
||||
"updating": "Aggiornando..."
|
||||
},
|
||||
"serverWizard": {
|
||||
"absoluteServerPath": "Percorso Assoluto al tuo Server",
|
||||
"absoluteZipPath": "Percorso Assoluto del Server",
|
||||
"addRole": "Aggiungi il Server a Ruoli Esistenti",
|
||||
"autoCreate": "Se non sono selezionati, Crafty ne creerà per te!",
|
||||
"bePatient": "Per favore attendi mentre ' + (importing ? 'importiamo' : 'scarichiamo') + ' il Server",
|
||||
"buildServer": "Compila il Server!",
|
||||
"clickRoot": "Clicca qui per selezionare la Directory Radice",
|
||||
"close": "Chiudi",
|
||||
"defaultPort": "25565 default",
|
||||
"downloading": "Scaricando il Server...",
|
||||
"explainRoot": "Per favore clicca il pulsante qui sotto per selezionare la cartella radice del server all'interno dell'archivio",
|
||||
"importing": "Importando il Server...",
|
||||
"importServer": "Importa un Server Esistente",
|
||||
"importServerButton": "Importa Server!",
|
||||
"importZip": "Importa da un File Zip",
|
||||
"maxMem": "Memoria Massima",
|
||||
"minMem": "Memoria minima",
|
||||
"myNewServer": "Il mio nuovo Server",
|
||||
"newServer": "Crea un Nuovo Server",
|
||||
"quickSettings": "Impostazioni Rapide",
|
||||
"quickSettingsDescription": "Non ti preoccupare, puoi cambiarle più tardi",
|
||||
"resetForm": "Reset Form",
|
||||
"save": "Salva",
|
||||
"selectRole": "Seleziona i Ruoli",
|
||||
"selectRoot": "Seleziona la directory radice dell'archivio",
|
||||
"selectType": "Seleziona un Tipo",
|
||||
"selectVersion": "Seleziona una versione",
|
||||
"selectZipDir": "Seleziona il percorso in memoria in cui scompatteremo i file",
|
||||
"serverJar": "File eseguibile del Server",
|
||||
"serverName": "Nome Server",
|
||||
"serverPath": "Percorso del Server",
|
||||
"serverPort": "Porta del Server",
|
||||
"serverType": "Tipo di Server",
|
||||
"serverVersion": "Versione del Server",
|
||||
"sizeInGB": "Dimensione in GB",
|
||||
"zipPath": "Percorso del Server"
|
||||
},
|
||||
"sidebar": {
|
||||
"contribute": "Contribuisci",
|
||||
"credits": "Crediti",
|
||||
"dashboard": "Pannello di controllo",
|
||||
"documentation": "Documentazione",
|
||||
"navigation": "Navigazione",
|
||||
"newServer": "Crea un Nuovo Server",
|
||||
"servers": "Servers"
|
||||
},
|
||||
"userConfig": {
|
||||
"apiKey": "Chiavi API",
|
||||
"auth": "Autorizzato? ",
|
||||
"config": "Configura",
|
||||
"configArea": "Area di configurazione utente",
|
||||
"configAreaDesc": "Qui è dove modifichi tutte le impostazioni utente",
|
||||
"confirmDelete": "Sei sicuro di voler eliminare qeusto utente? Quest'azione è irreversibile.",
|
||||
"craftyPermDesc": "I permessi Crafty che questo utente possiede ",
|
||||
"craftyPerms": "Permessi di Crafty: ",
|
||||
"created": "Creato il: ",
|
||||
"deleteUser": "Elimina Utente: ",
|
||||
"deleteUserB": "Elimina Utente",
|
||||
"delSuper": "Non puoi eliminare uno superuser",
|
||||
"enabled": "Abilitato",
|
||||
"gravDesc": "Questa email è solamente per l'uso di Gravatar™. Crafty non userà l'email in alcuna circostanza, se non per associare il Gravatar™",
|
||||
"gravEmail": "Gravatar™ Email",
|
||||
"lastIP": "Ultimo indirizzo IP: ",
|
||||
"lastLogin": "Ultimo accesso: ",
|
||||
"lastUpdate": "Ultimo aggiornamento: ",
|
||||
"leaveBlank": "Per modificare l'utente senza cambiare la passowrd, lascia il campo in bianco.",
|
||||
"member": "È membro?",
|
||||
"notExist": "Non puoi eliminare qualcosa che non esiste!",
|
||||
"pageTitle": "Modifica Utente",
|
||||
"pageTitleNew": "Crea Utente",
|
||||
"password": "Password",
|
||||
"permName": "Nome del Permesso",
|
||||
"repeat": "Ripeti la Password",
|
||||
"roleName": "Nome del ruolo",
|
||||
"super": "Super User",
|
||||
"userLang": "Linguaggio dell'utente",
|
||||
"userName": "Nome utente",
|
||||
"userNameDesc": "Come vuoi chiamare questo utente?",
|
||||
"userRoles": "Ruoli dell'utente",
|
||||
"userRolesDesc": "Ruoli di cui l'utente fa parte.",
|
||||
"userSettings": "Impostazioni Utente",
|
||||
"uses": "Numero di usi permessi (-1==Nessun limite)"
|
||||
}
|
||||
}
|
@ -1,347 +0,0 @@
|
||||
{
|
||||
"404": {
|
||||
"contact": "Contatta l'assistenza di Crafty Controller su Discord!",
|
||||
"notFound": "Pagina non trovata",
|
||||
"unableToFind": "We were unable to find the page you are looking for. Please try again, or go back and refresh."
|
||||
},
|
||||
"accessDenied": {
|
||||
"accessDenied": "Accesso negato",
|
||||
"contact": "Contatta il supporto di Crafty Control tramite Discord",
|
||||
"contactAdmin": "Contatta l'amministratore del tuo server per accedere a questa risorsa, o, se pensi tu debba avere accesso a tale risorsa, contatta il supporto.",
|
||||
"noAccess": "Non hai accesso a questa risorsa"
|
||||
},
|
||||
"base": {
|
||||
"doesNotWorkWithoutJavascript": "<strong>Warning: </strong>Crafty doesn't work properly when JavaScript isn't enabled!"
|
||||
},
|
||||
"dashboard": {
|
||||
"actions": "Azioni",
|
||||
"allServers": "Tutti i Servers",
|
||||
"avg": "Media",
|
||||
"backups": "Backups",
|
||||
"bePatientClone": "Per favore sii paziente mentre cloniamo il server.<br /> Questa schermata si aggiornerà in un momento",
|
||||
"bePatientRestart": "Per favore sii paziente mentre riavviamo il server.<br /> Questa schermata si aggiornerà in un momento",
|
||||
"bePatientStart": "Per favore sii paziente mentre accendiamo il server.<br /> Questa schermata si aggiornerà in un momento",
|
||||
"bePatientStop": "Per favore sii paziente mentre spegniamo il server.<br /> Questa schermata si aggiornerà in un momento",
|
||||
"cannotSee": "Non vedi nulla?",
|
||||
"cannotSeeOnMobile": "Non vedi nulla da mobile?",
|
||||
"cannotSeeOnMobile2": "Prova a scorrere sulla tabella lateralmente.",
|
||||
"clone": "Clona",
|
||||
"cpuCores": "Core della CPU",
|
||||
"cpuCurFreq": "Frequenza Attuale della CPU",
|
||||
"cpuMaxFreq": "Frequenza Massima della CPU",
|
||||
"cpuUsage": "Uso della CPU",
|
||||
"dashboard": "Dashboard",
|
||||
"delay-explained": "Il servizio è partito di recente e sta ritardando l'avvio dell'istanza del Server di Minecraft",
|
||||
"host": "Host",
|
||||
"kill": "Termina il processo",
|
||||
"killing": "Terminando il processo...",
|
||||
"lastBackup": "Ultimo:",
|
||||
"max": "Massimo",
|
||||
"memUsage": "Uso della Memoria",
|
||||
"motd": "Slogan",
|
||||
"newServer": "Crea un nuovo Server",
|
||||
"nextBackup": "Prossimo:",
|
||||
"no-servers": "Attualmente non ci sono server. Per cominciare, clicca",
|
||||
"offline": "Offline",
|
||||
"online": "Online",
|
||||
"players": "Giocatori",
|
||||
"restart": "Riavvia",
|
||||
"sendingCommand": "Inviando il tuo comando",
|
||||
"server": "Server",
|
||||
"servers": "Server",
|
||||
"start": "Avvia",
|
||||
"starting": "Avvio ritardato",
|
||||
"status": "Stato",
|
||||
"stop": "Ferma",
|
||||
"version": "Versione",
|
||||
"welcome": "Benvenuto su Crafty Controller",
|
||||
"world": "Mondo"
|
||||
},
|
||||
"datatables": {
|
||||
"i18n": {
|
||||
"aria": {
|
||||
"sortAscending": ": attiva per ordinare le colonne in modo ascendente",
|
||||
"sortDescending": ": attiva per ordinare le colonne in modo discendente"
|
||||
},
|
||||
"buttons": {
|
||||
"collection": "Collezione <span class='ui-button-icon-primary ui-icon ui-icon-triangle-1-s'/>",
|
||||
"colvis": "Visibilità della colonna",
|
||||
"colvisRestore": "Ripristina Visibilità",
|
||||
"copy": "Copia",
|
||||
"copyKeys": "Premi Ctrl o u2318 + C per copiare i dati della tabella negli appunti di sistema.<br><br> Per cancellare, clicca questo messaggio o premi ESC.",
|
||||
"copySuccess": {
|
||||
"1": "Copiata 1 riga negli appunti",
|
||||
"_": "Copiate %d righe negli appunti"
|
||||
},
|
||||
"copyTitle": "Copia negli appunti",
|
||||
"csv": "CSV",
|
||||
"excel": "Excel",
|
||||
"pageLength": {
|
||||
"1": "Mostra 1 riga",
|
||||
"-1": "Mostra tutte le righe",
|
||||
"_": "Mostra %d righe"
|
||||
},
|
||||
"pdf": "PDF",
|
||||
"print": "Print"
|
||||
},
|
||||
"decimal": "",
|
||||
"emptyTable": "Nessun dato disponibile nella tabella",
|
||||
"info": "Visualizzando da _START_ fino a _END_ di _TOTAL_ voci",
|
||||
"infoEmpty": "Visualizzando da 0 fino a 0 di 0 voci",
|
||||
"infoFiltered": "(Filtrato da_MAX_ voci totali)",
|
||||
"infoPostFix": "",
|
||||
"lengthMenu": "Mostra le voci di _MENU_ ",
|
||||
"loadingRecords": "Caricamento...",
|
||||
"paginate": {
|
||||
"first": "Primo",
|
||||
"last": "Ultimo",
|
||||
"next": "Prossima",
|
||||
"previous": "Precedente"
|
||||
},
|
||||
"processing": "Caricamento...",
|
||||
"search": "Cerca:",
|
||||
"select": {
|
||||
"cells": {
|
||||
"0": "Click on a cel to select it",
|
||||
"1": "%d cell selected",
|
||||
"_": "%d cells selected"
|
||||
},
|
||||
"columns": {
|
||||
"0": "Click on a column to select it",
|
||||
"1": "%d column selected",
|
||||
"_": "%d columns selected"
|
||||
},
|
||||
"rows": {
|
||||
"0": "Click on a row to select it",
|
||||
"1": "%d row selected",
|
||||
"_": "%d rows selected"
|
||||
}
|
||||
},
|
||||
"thousands": ",",
|
||||
"zeroRecords": "Nessuna voce corrispondente trovata"
|
||||
}
|
||||
},
|
||||
"error": {
|
||||
"closedPort": "Ci siamo accorti che la porta {} potrebbe non essere aperta, o un firewall potrebbe tenerla chiusa. Le connessioni remote al server potrebbero essere limitate.",
|
||||
"contact": "Contatta l'assistenza di Crafty Controller su Discord!",
|
||||
"embarassing": "Oh mamma, beh, questo è imbarazzante.",
|
||||
"error": "Errore!",
|
||||
"eulaAgree": "Accetti l'EULA?",
|
||||
"eulaMsg": "Devi accettare l'EULA. Una copia dell'EULA di Mojang è allegata sotto questo messaggio.",
|
||||
"eulaTitle": "Accetta il Contratto con l'Utente Finale",
|
||||
"hereIsTheError": "Ecco l'errore",
|
||||
"internet": "Ci siamo accorti che il server che fa girare Crafty non ha connessione a internet. Le connessioni dei Client potrebbero essere limitate.",
|
||||
"start-error": "Il server {} non è partito, con codice errore: {}",
|
||||
"terribleFailure": "Che crash epico!"
|
||||
},
|
||||
"footer": {
|
||||
"allRightsReserved": "Tutti i diritti riservati",
|
||||
"copyright": "Copyright",
|
||||
"version": "Versione"
|
||||
},
|
||||
"login": {
|
||||
"forgotPassword": "Password dimenticata",
|
||||
"login": "Log In",
|
||||
"password": "Password",
|
||||
"username": "Nome utente"
|
||||
},
|
||||
"panelConfig": {
|
||||
"cancel": "Cancella",
|
||||
"delete": "Elimina",
|
||||
"save": "Salva"
|
||||
},
|
||||
"serverBackups": {
|
||||
"backupAtMidnight": "Backup automatico a mezzanotte?",
|
||||
"backupNow": "Fai un Backup ora!",
|
||||
"backupTask": "È cominciato un processo di backup.",
|
||||
"cancel": "Cancella",
|
||||
"confirm": "Conferma",
|
||||
"confirmDelete": "Vuoi cancellare questo Backup? Questa azione non è annullabile.",
|
||||
"currentBackups": "Backup attuali",
|
||||
"delete": "Cancella",
|
||||
"destroyBackup": "Cancellare backup \" + file_to_del + \"?",
|
||||
"download": "Download",
|
||||
"maxBackups": "Backup massimi",
|
||||
"maxBackupsDesc": "Crafty non immagazzinerà più di N backup, cancellerà quelli più vecchi (inserisci 0 per mantenerli tutti)",
|
||||
"options": "Opzioni",
|
||||
"path": "Percorso",
|
||||
"save": "Salva",
|
||||
"size": "Dimensione",
|
||||
"storageLocation": "Percorso del backup",
|
||||
"storageLocationDesc": "Dove vuoi memorizzare i backup?"
|
||||
},
|
||||
"serverConfig": {
|
||||
"bePatientDelete": "Per favore sii paziente mentre rimuoviamo il server dal pannello. Questa schermata si aggiornerà in un momento.",
|
||||
"bePatientDeleteFiles": "Per favore sii paziente mentre rimuoviamo il server dal pannello ed eliminiamo i file. Questa schermata sparirà in un momento.",
|
||||
"bePatientUpdate": "Per favore sii paziente mentre aggiorniamo il server. I tempi di scaricamento possono variare in base alla tua velocità di Internet.<br /> Questa schermata si aggiornerà in un momento.",
|
||||
"cancel": "Cancella",
|
||||
"deleteFilesQuestion": "Eliminare i file del Server dalla macchina?",
|
||||
"deleteFilesQuestionMessage": "Vorresti che Crafty eliminasse tutti i file del Server dalla macchina Host?",
|
||||
"deleteServer": "Elimina Server",
|
||||
"deleteServerQuestion": "Eliminare il Server?",
|
||||
"deleteServerQuestionMessage": "Sei sicuro di voler eliminare questo server? Dopo la conferma non si può tornare indietro...",
|
||||
"exeUpdateURL": "URL per gli aggiornamenti dell'Eseguibile del Server",
|
||||
"exeUpdateURLDesc": "URL Diretto per il download di aggiornamenti.",
|
||||
"noDelete": "No, torna indietro",
|
||||
"noDeleteFiles": "No, rimuovili dal pannello e basta",
|
||||
"removeOldLogsAfter": "Rimuovi log più vecchi di ",
|
||||
"removeOldLogsAfterDesc": "Di quanti giorni dovrebbe essere vecchio un log per essere cancellato (0 per non cancellarne)",
|
||||
"save": "Salva",
|
||||
"sendingDelete": "Eliminando il Server",
|
||||
"sendingRequest": "Invio la tua richiesta...",
|
||||
"serverAutoStart": "Avvio automatico del Server",
|
||||
"serverAutostartDelay": "Ritardo Automatico dell'Avvio",
|
||||
"serverAutostartDelayDesc": "Il ritardo per far partire il server (Se abilitato più sotto)",
|
||||
"serverCrashDetection": "Rilevamento dei Crash del Server",
|
||||
"serverExecutable": "Eseguibile del Server",
|
||||
"serverExecutableDesc": "Il file Eseguibile del server",
|
||||
"serverExecutionCommand": "Comando di Esecuzione del Server",
|
||||
"serverExecutionCommandDesc": "Quello che verrà eseguito in un terminale nascosto",
|
||||
"serverIP": "Server IP",
|
||||
"serverIPDesc": "L'IP a cui Crafty dovrebbe connettersi per le statistiche (Prova un IP reale piuttosto di 127.0.0.1 se hai qualche problema)",
|
||||
"serverLogLocation": "Posizione del Log del Server",
|
||||
"serverLogLocationDesc": "Percorso Assoluto per Intero del File di Log",
|
||||
"serverName": "Nome del Server",
|
||||
"serverNameDesc": "Come vorresti chiamare questo server",
|
||||
"serverPath": "Cartella di Operazioni del Server",
|
||||
"serverPathDesc": "Percorso Assoluto per Intero (Escludendo l'eseguibile)",
|
||||
"serverPort": "Porta del Server",
|
||||
"serverPortDesc": "La Porta a cui Crafty dovrebbe connettersi per le statistiche",
|
||||
"serverStopCommand": "Comando per terminare il server",
|
||||
"serverStopCommandDesc": "Comando da inviare al server per fermarlo",
|
||||
"stopBeforeDeleting": "Per favore ferma il Server prima di eliminarlo",
|
||||
"update": "Aggiorna l'Eseguibile",
|
||||
"yesDelete": "Sì, eliminalo",
|
||||
"yesDeleteFiles": "Sì, cancella i file"
|
||||
},
|
||||
"serverConfigHelp": {
|
||||
"desc": "Qui è dove puoi cambiare la configurazione del tuo Server",
|
||||
"perms": [
|
||||
"È raccomandabile <code>NON</code> cambiare i percorsi di un Server gestito da Crafty.",
|
||||
"Cambiare i percorsi <code>PUO'</code> rompere cose, specialmente su sistemi tipo Linux dove i permessi dei file sono più restrittivi.",
|
||||
"<br /><br/>",
|
||||
"Se credi di dover cambiare il percorso di un server puoi farlo, a patto di dare all'utente \"crafty\" i permessi di leggere e scrivere nel percorso del server.",
|
||||
"<br />",
|
||||
"<br />",
|
||||
"Su Linux questa operazione si esegue con questi comandi:<br />",
|
||||
"<code>",
|
||||
" sudo chown crafty:crafty /percorso/al/tuo/server -R<br />",
|
||||
" sudo chmod 2775 /percorso/al/tuo/server -R<br />",
|
||||
"</code>"
|
||||
],
|
||||
"title": "Area di Configurazione del Server"
|
||||
},
|
||||
"serverDetails": {
|
||||
"backup": "Backup",
|
||||
"config": "Config",
|
||||
"files": "Files",
|
||||
"logs": "Logs",
|
||||
"playerControls": "Player Management",
|
||||
"schedule": "Pianifica",
|
||||
"serverDetails": "Dettagli del Server",
|
||||
"terminal": "Terminale"
|
||||
},
|
||||
"serverFiles": {
|
||||
"clickUpload": "Clicca qui per selezionare i tuoi file",
|
||||
"close": "Chiudi",
|
||||
"createDir": "Crea Cartella",
|
||||
"createDirQuestion": "Che nome vuoi dare alla nuova cartella?",
|
||||
"createFile": "Crea file",
|
||||
"createFileQuestion": "Che nome vuoi dare al nuovo file?",
|
||||
"default": "Default",
|
||||
"delete": "Cancella",
|
||||
"deleteItemQuestion": "Sei sicuro di voler eliminare \" + name + \"?",
|
||||
"deleteItemQuestionMessage": "Stai eliminando \\\"\" + path + \"\\\"!<br/><br/>Questa azione è irreversibile e non potrai tornare indietro!",
|
||||
"download": "Scarica",
|
||||
"editingFile": "Modificare file",
|
||||
"error": "Errore nel recuperare files",
|
||||
"fileReadError": "Errore nel leggere i file",
|
||||
"files": "Files",
|
||||
"keybindings": "Combinazioni di tasti",
|
||||
"noDelete": "No",
|
||||
"noscript": "Il File Manager non funziona senza JavaScript",
|
||||
"rename": "Rinomina",
|
||||
"renameItemQuestion": "Qual è il nuovo nome?",
|
||||
"save": "Salva",
|
||||
"stayHere": "NON ABBANDONARE QUESTA PAGINA!",
|
||||
"unsupportedLanguage": "Attenzione: Questo non è un tipo di file supportato",
|
||||
"unzip": "Estrai",
|
||||
"upload": "Carica",
|
||||
"uploadTitle": "Carica i file: ",
|
||||
"waitUpload": "Per favore attendi mentre carichiamo i tuoi file... Potrebbe volerci un po' di tempo.",
|
||||
"yesDelete": "Sì, capisco le conseguenze"
|
||||
},
|
||||
"serverPlayerManagement": {
|
||||
"bannedPlayers": "Giocatori Bannati",
|
||||
"loadingBannedPlayers": "Carico i Giocatori Bannati",
|
||||
"players": "Giocatori"
|
||||
},
|
||||
"serverStats": {
|
||||
"cpuUsage": "Utilizzo della CPU",
|
||||
"description": "Descrizione",
|
||||
"errorCalculatingUptime": "Errore nel calcolare il periodo di esecuzione del server",
|
||||
"memUsage": "Utilizzo della Memoria",
|
||||
"offline": "Offline",
|
||||
"online": "Online",
|
||||
"players": "Giocatori",
|
||||
"serverStarted": "Server Avviato",
|
||||
"serverStatus": "Stato del server",
|
||||
"serverTime": "Zona UTC",
|
||||
"serverUptime": "Tempo di esecuzione",
|
||||
"starting": "Avvio ritardato",
|
||||
"unableToConnect": "Non riesco a connettermi",
|
||||
"version": "Versione"
|
||||
},
|
||||
"serverTerm": {
|
||||
"commandInput": "Inserisci il tuo comando",
|
||||
"delay-explained": "Il servizio è partito di recente e sta ritardando l'avvio dell'istanza del Server di Minecraft",
|
||||
"restart": "Riavvia",
|
||||
"sendCommand": "Invia il comando",
|
||||
"start": "Avvia",
|
||||
"starting": "Avvio ritardato",
|
||||
"stop": "Ferma",
|
||||
"stopScroll": "Ferma lo scorrimento automatico",
|
||||
"updating": "Aggiornando..."
|
||||
},
|
||||
"serverWizard": {
|
||||
"absoluteServerPath": "Percorso assoluto del server",
|
||||
"absoluteZipPath": "Percorso assoluto del tuo Server in Zip",
|
||||
"addRole": "Aggiungi il Server a Ruoli Esistenti",
|
||||
"autoCreate": "Se non sono selezionati, Crafty ne creerà uno!",
|
||||
"bePatient": "Per favore sii paziente mentre ' + (importing ? 'importiamo' : 'scarichiamo') + ' il server",
|
||||
"buildServer": "Costruisci il Server!",
|
||||
"defaultPort": "25565 default",
|
||||
"downloading": "Scaricando il Server...",
|
||||
"importing": "Importando il Server...",
|
||||
"importServer": "Importa un Server esistente",
|
||||
"importServerButton": "Importa Server!",
|
||||
"importZip": "Importa da un file Zip",
|
||||
"maxMem": "Memoria Massima",
|
||||
"minMem": "Memoria Minima",
|
||||
"myNewServer": "Il mio nuovo server",
|
||||
"newServer": "Crea un nuovo Server",
|
||||
"quickSettings": "Impostazioni rapide",
|
||||
"quickSettingsDescription": "Non preoccuparti, puoi cambiare queste impostazioni in seguito",
|
||||
"resetForm": "Ripulisci il form",
|
||||
"selectRole": "Seleziona il o i ruoli",
|
||||
"selectType": "Seleziona un tipo",
|
||||
"selectVersion": "Seleziona un Server",
|
||||
"serverJar": "JarFile del server",
|
||||
"serverName": "Nome Server",
|
||||
"serverPath": "Percorso del Server",
|
||||
"serverPort": "Porta del Server",
|
||||
"serverType": "Tipo di Server",
|
||||
"serverVersion": "Versione Server",
|
||||
"sizeInGB": "Dimensione in GB",
|
||||
"zipPath": "Percorso Server"
|
||||
},
|
||||
"sidebar": {
|
||||
"contribute": "Contribuisci",
|
||||
"credits": "Crediti",
|
||||
"dashboard": "Dashboard",
|
||||
"documentation": "Documentazione",
|
||||
"navigation": "Navigazione",
|
||||
"newServer": "Crea un nuovo Server",
|
||||
"servers": "Servers"
|
||||
}
|
||||
}
|
@ -4,7 +4,7 @@ argon2-cffi==20.1
|
||||
bleach==4.1
|
||||
cached_property==1.5.2
|
||||
colorama==0.4
|
||||
cron-validator==1.0.3
|
||||
crontier==1.3.5
|
||||
cryptography==3.4.8
|
||||
libgravatar==1.0.0
|
||||
peewee==3.13
|
||||
|
Loading…
Reference in New Issue
Block a user