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-codebase-improvements
This commit is contained in:
commit
89b6e239bc
@ -176,6 +176,7 @@ class ServersController:
|
||||
|
||||
for server in authorized_servers:
|
||||
latest = HelperServerStats.get_server_stats_by_id(server.get("server_id"))
|
||||
|
||||
# TODO
|
||||
user_permissions = PermissionsServers.get_user_id_permissions_list(
|
||||
user_id, server.get("server_id")
|
||||
|
@ -1,17 +1,18 @@
|
||||
import os
|
||||
import logging
|
||||
import datetime
|
||||
import typing as t
|
||||
|
||||
from playhouse.shortcuts import model_to_dict
|
||||
|
||||
from app.classes.models.servers import Servers, HelperServers
|
||||
from app.classes.shared.helpers import Helpers
|
||||
from app.classes.shared.main_models import DatabaseShortcuts
|
||||
from app.classes.shared.migration import MigrationManager
|
||||
|
||||
try:
|
||||
from peewee import (
|
||||
SqliteDatabase,
|
||||
Model,
|
||||
DatabaseProxy,
|
||||
ForeignKeyField,
|
||||
CharField,
|
||||
AutoField,
|
||||
@ -19,6 +20,7 @@ try:
|
||||
BooleanField,
|
||||
IntegerField,
|
||||
FloatField,
|
||||
DoesNotExist,
|
||||
)
|
||||
|
||||
except ModuleNotFoundError as e:
|
||||
@ -27,7 +29,6 @@ except ModuleNotFoundError as e:
|
||||
logger = logging.getLogger(__name__)
|
||||
peewee_logger = logging.getLogger("peewee")
|
||||
peewee_logger.setLevel(logging.INFO)
|
||||
database_stats_proxy = DatabaseProxy()
|
||||
|
||||
|
||||
# **********************************************************************************
|
||||
@ -59,7 +60,6 @@ class ServerStats(Model):
|
||||
|
||||
class Meta:
|
||||
table_name = "server_stats"
|
||||
database = database_stats_proxy
|
||||
|
||||
|
||||
# **********************************************************************************
|
||||
@ -70,7 +70,7 @@ class HelperServerStats:
|
||||
self.database = database
|
||||
|
||||
@staticmethod
|
||||
def init_database(server_id):
|
||||
def init_database(server_id) -> t.Optional[SqliteDatabase]:
|
||||
try:
|
||||
server = HelperServers.get_server_data_by_id(server_id)
|
||||
db_folder = os.path.join(f"{server['path']}", "db_stats")
|
||||
@ -93,17 +93,17 @@ class HelperServerStats:
|
||||
f"{helper_stats.migration_dir}", "stats"
|
||||
)
|
||||
helper_stats.db_path = db_file
|
||||
database_stats_proxy.initialize(database)
|
||||
migration_manager = MigrationManager(database, helper_stats)
|
||||
migration_manager.up() # Automatically runs migrations
|
||||
database_stats_proxy.initialize(database)
|
||||
return database
|
||||
except Exception as ex:
|
||||
logger.warning(
|
||||
f"Error try to look for the db_stats files for server : {ex}"
|
||||
)
|
||||
return None
|
||||
|
||||
@staticmethod
|
||||
def select_database(server_id):
|
||||
def select_database(server_id) -> t.Optional[SqliteDatabase]:
|
||||
try:
|
||||
server = HelperServers.get_server_data_by_id(server_id)
|
||||
db_file = os.path.join(
|
||||
@ -114,29 +114,25 @@ class HelperServerStats:
|
||||
database = SqliteDatabase(
|
||||
db_file, pragmas={"journal_mode": "wal", "cache_size": -1024 * 10}
|
||||
)
|
||||
database_stats_proxy.initialize(database)
|
||||
return database
|
||||
except Exception as ex:
|
||||
logger.warning(
|
||||
f"Error try to look for the db_stats files for server : {ex}"
|
||||
)
|
||||
return None
|
||||
|
||||
@staticmethod
|
||||
def get_all_servers_stats():
|
||||
servers = HelperServers.get_all_defined_servers()
|
||||
server_data = []
|
||||
try:
|
||||
for s in servers:
|
||||
HelperServerStats.select_database(s.get("server_id"))
|
||||
latest = (
|
||||
ServerStats.select()
|
||||
.where(ServerStats.server_id == s.get("server_id"))
|
||||
.order_by(ServerStats.created.desc())
|
||||
.limit(1)
|
||||
)
|
||||
for server in servers:
|
||||
stats = HelperServerStats.get_server_stats_by_id(server["server_id"])
|
||||
|
||||
server_data.append(
|
||||
{
|
||||
"server_data": s,
|
||||
"stats": DatabaseShortcuts.return_rows(latest)[0],
|
||||
"server_data": server,
|
||||
"stats": stats,
|
||||
"user_command_permission": True,
|
||||
}
|
||||
)
|
||||
@ -149,7 +145,7 @@ class HelperServerStats:
|
||||
@staticmethod
|
||||
def insert_server_stats(server_stats):
|
||||
server_id = server_stats.get("id", 0)
|
||||
HelperServerStats.select_database(server_id)
|
||||
database = HelperServerStats.select_database(server_id)
|
||||
|
||||
if server_id == 0:
|
||||
logger.warning("Stats saving failed with error: Server unknown (id = 0)")
|
||||
@ -165,7 +161,7 @@ class HelperServerStats:
|
||||
ServerStats.mem_percent: server_stats.get("mem_percent", 0),
|
||||
ServerStats.world_name: server_stats.get("world_name", ""),
|
||||
ServerStats.world_size: server_stats.get("world_size", ""),
|
||||
ServerStats.server_port: server_stats.get("server_port", ""),
|
||||
ServerStats.server_port: server_stats.get("server_port", 0),
|
||||
ServerStats.int_ping_results: server_stats.get(
|
||||
"int_ping_results", False
|
||||
),
|
||||
@ -175,67 +171,75 @@ class HelperServerStats:
|
||||
ServerStats.desc: server_stats.get("desc", False),
|
||||
ServerStats.version: server_stats.get("version", False),
|
||||
}
|
||||
).execute()
|
||||
).execute(database)
|
||||
|
||||
@staticmethod
|
||||
def remove_old_stats(server_id, minimum_to_exist):
|
||||
HelperServerStats.select_database(server_id)
|
||||
ServerStats.delete().where(ServerStats.created < minimum_to_exist).execute()
|
||||
database = HelperServerStats.select_database(server_id)
|
||||
ServerStats.delete().where(ServerStats.created < minimum_to_exist).execute(
|
||||
database
|
||||
)
|
||||
|
||||
@staticmethod
|
||||
def get_latest_server_stats(server_id):
|
||||
HelperServerStats.select_database(server_id)
|
||||
database = HelperServerStats.select_database(server_id)
|
||||
return (
|
||||
ServerStats.select()
|
||||
.where(ServerStats.server_id == server_id)
|
||||
.order_by(ServerStats.created.desc())
|
||||
.limit(1)
|
||||
.execute(database)
|
||||
)
|
||||
|
||||
@staticmethod
|
||||
def get_server_stats_by_id(server_id):
|
||||
HelperServerStats.select_database(server_id)
|
||||
database = HelperServerStats.select_database(server_id)
|
||||
stats = (
|
||||
ServerStats.select()
|
||||
.where(ServerStats.server_id == server_id)
|
||||
.order_by(ServerStats.created.desc())
|
||||
.limit(1)
|
||||
.first(database)
|
||||
)
|
||||
return DatabaseShortcuts.return_rows(stats)[0]
|
||||
return model_to_dict(stats)
|
||||
|
||||
@staticmethod
|
||||
def server_id_exists(server_id):
|
||||
HelperServerStats.select_database(server_id)
|
||||
if not HelperServers.get_server_data_by_id(server_id):
|
||||
return False
|
||||
return True
|
||||
database = HelperServerStats.select_database(server_id)
|
||||
# We can't use .exists because it doesn't seem to use the database parameter
|
||||
return (
|
||||
ServerStats.select()
|
||||
.where(ServerStats.server_id == server_id)
|
||||
.count(database)
|
||||
!= 0
|
||||
)
|
||||
|
||||
@staticmethod
|
||||
def sever_crashed(server_id):
|
||||
HelperServerStats.select_database(server_id)
|
||||
database = HelperServerStats.select_database(server_id)
|
||||
ServerStats.update(crashed=True).where(
|
||||
ServerStats.server_id == server_id
|
||||
).execute()
|
||||
).execute(database)
|
||||
|
||||
@staticmethod
|
||||
def set_download(server_id):
|
||||
HelperServerStats.select_database(server_id)
|
||||
database = HelperServerStats.select_database(server_id)
|
||||
ServerStats.update(downloading=True).where(
|
||||
ServerStats.server_id == server_id
|
||||
).execute()
|
||||
).execute(database)
|
||||
|
||||
@staticmethod
|
||||
def finish_download(server_id):
|
||||
HelperServerStats.select_database(server_id)
|
||||
database = HelperServerStats.select_database(server_id)
|
||||
ServerStats.update(downloading=False).where(
|
||||
ServerStats.server_id == server_id
|
||||
).execute()
|
||||
).execute(database)
|
||||
|
||||
@staticmethod
|
||||
def get_download_status(server_id):
|
||||
HelperServerStats.select_database(server_id)
|
||||
database = HelperServerStats.select_database(server_id)
|
||||
download_status = (
|
||||
ServerStats.select().where(ServerStats.server_id == server_id).get()
|
||||
ServerStats.select().where(ServerStats.server_id == server_id).get(database)
|
||||
)
|
||||
return download_status.downloading
|
||||
|
||||
@ -244,107 +248,109 @@ class HelperServerStats:
|
||||
if server_id is None:
|
||||
return
|
||||
|
||||
HelperServerStats.select_database(server_id)
|
||||
database = HelperServerStats.select_database(server_id)
|
||||
ServerStats.update(crashed=False).where(
|
||||
ServerStats.server_id == server_id
|
||||
).execute()
|
||||
).execute(database)
|
||||
|
||||
@staticmethod
|
||||
def is_crashed(server_id):
|
||||
HelperServerStats.select_database(server_id)
|
||||
svr = ServerStats.select().where(ServerStats.server_id == server_id).get()
|
||||
# pylint: disable=singleton-comparison
|
||||
if svr.crashed == True:
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
database = HelperServerStats.select_database(server_id)
|
||||
svr = (
|
||||
ServerStats.select().where(ServerStats.server_id == server_id).get(database)
|
||||
)
|
||||
return svr.crashed
|
||||
|
||||
@staticmethod
|
||||
def set_update(server_id, value):
|
||||
if server_id is None:
|
||||
return
|
||||
|
||||
HelperServerStats.select_database(server_id)
|
||||
database = HelperServerStats.select_database(server_id)
|
||||
try:
|
||||
# Checks if server even exists
|
||||
ServerStats.select().where(ServerStats.server_id == server_id)
|
||||
except Exception as ex:
|
||||
ServerStats.select().where(ServerStats.server_id == server_id).execute(
|
||||
database
|
||||
)
|
||||
except DoesNotExist as ex:
|
||||
logger.error(f"Database entry not found! {ex}")
|
||||
return
|
||||
ServerStats.update(updating=value).where(
|
||||
ServerStats.server_id == server_id
|
||||
).execute()
|
||||
).execute(database)
|
||||
|
||||
@staticmethod
|
||||
def get_update_status(server_id):
|
||||
HelperServerStats.select_database(server_id)
|
||||
database = HelperServerStats.select_database(server_id)
|
||||
update_status = (
|
||||
ServerStats.select().where(ServerStats.server_id == server_id).get()
|
||||
ServerStats.select().where(ServerStats.server_id == server_id).get(database)
|
||||
)
|
||||
return update_status.updating
|
||||
|
||||
@staticmethod
|
||||
def set_first_run(server_id):
|
||||
HelperServerStats.select_database(server_id)
|
||||
database = HelperServerStats.select_database(server_id)
|
||||
# Sets first run to false
|
||||
try:
|
||||
# Checks if server even exists
|
||||
ServerStats.select().where(ServerStats.server_id == server_id)
|
||||
except Exception as ex:
|
||||
except DoesNotExist as ex:
|
||||
logger.error(f"Database entry not found! {ex}")
|
||||
return
|
||||
ServerStats.update(first_run=False).where(
|
||||
ServerStats.server_id == server_id
|
||||
).execute()
|
||||
).execute(database)
|
||||
|
||||
@staticmethod
|
||||
def get_first_run(server_id):
|
||||
HelperServerStats.select_database(server_id)
|
||||
first_run = ServerStats.select().where(ServerStats.server_id == server_id).get()
|
||||
database = HelperServerStats.select_database(server_id)
|
||||
first_run = (
|
||||
ServerStats.select().where(ServerStats.server_id == server_id).get(database)
|
||||
)
|
||||
return first_run.first_run
|
||||
|
||||
@staticmethod
|
||||
def get_ttl_without_player(server_id):
|
||||
HelperServerStats.select_database(server_id)
|
||||
database = HelperServerStats.select_database(server_id)
|
||||
last_stat = (
|
||||
ServerStats.select()
|
||||
.where(ServerStats.server_id == server_id)
|
||||
.order_by(ServerStats.created.desc())
|
||||
.first()
|
||||
.first(database)
|
||||
)
|
||||
last_stat_with_player = (
|
||||
ServerStats.select()
|
||||
.where(ServerStats.server_id == server_id)
|
||||
.where(ServerStats.online > 0)
|
||||
.order_by(ServerStats.created.desc())
|
||||
.first()
|
||||
.first(database)
|
||||
)
|
||||
return last_stat.created - last_stat_with_player.created
|
||||
|
||||
@staticmethod
|
||||
def can_stop_no_players(server_id, time_limit):
|
||||
HelperServerStats.select_database(server_id)
|
||||
can = False
|
||||
ttl_no_players = HelperServerStats.get_ttl_without_player(server_id)
|
||||
if (time_limit == -1) or (ttl_no_players > time_limit):
|
||||
can = True
|
||||
return can
|
||||
return (time_limit == -1) or (ttl_no_players > time_limit)
|
||||
|
||||
@staticmethod
|
||||
def set_waiting_start(server_id, value):
|
||||
HelperServerStats.select_database(server_id)
|
||||
database = HelperServerStats.select_database(server_id)
|
||||
try:
|
||||
# Checks if server even exists
|
||||
ServerStats.select().where(ServerStats.server_id == server_id)
|
||||
except Exception as ex:
|
||||
ServerStats.select().where(ServerStats.server_id == server_id).execute(
|
||||
database
|
||||
)
|
||||
except DoesNotExist as ex:
|
||||
logger.error(f"Database entry not found! {ex}")
|
||||
return
|
||||
ServerStats.update(waiting_start=value).where(
|
||||
ServerStats.server_id == server_id
|
||||
).execute()
|
||||
).execute(database)
|
||||
|
||||
@staticmethod
|
||||
def get_waiting_start(server_id):
|
||||
HelperServerStats.select_database(server_id)
|
||||
database = HelperServerStats.select_database(server_id)
|
||||
waiting_start = (
|
||||
ServerStats.select().where(ServerStats.server_id == server_id).get()
|
||||
ServerStats.select().where(ServerStats.server_id == server_id).get(database)
|
||||
)
|
||||
return waiting_start.waiting_start
|
||||
|
@ -713,6 +713,7 @@ class Server:
|
||||
)
|
||||
# cancel the watcher task
|
||||
self.server_scheduler.remove_job("c_" + str(self.server_id))
|
||||
self.server_scheduler.remove_job("stats_" + str(self.server_id))
|
||||
return
|
||||
|
||||
HelperServerStats.sever_crashed(self.server_id)
|
||||
@ -1142,6 +1143,7 @@ class Server:
|
||||
"desc": raw_ping_result.get("desc"),
|
||||
"version": raw_ping_result.get("version"),
|
||||
"icon": raw_ping_result.get("icon"),
|
||||
"crashed": self.is_crashed,
|
||||
}
|
||||
)
|
||||
if len(self.helper.websocket_helper.clients) > 0:
|
||||
@ -1166,6 +1168,7 @@ class Server:
|
||||
"desc": raw_ping_result.get("desc"),
|
||||
"version": raw_ping_result.get("version"),
|
||||
"icon": raw_ping_result.get("icon"),
|
||||
"crashed": self.is_crashed,
|
||||
},
|
||||
)
|
||||
total_players += int(raw_ping_result.get("online"))
|
||||
|
@ -1,51 +1,51 @@
|
||||
{
|
||||
"404": {
|
||||
"contact": "בבקשה צרו קשר עם תמיכת Crafty Control באמצעות דיסקורד",
|
||||
"contact": "בבקשה צרו קשר עם תמיכת פאנל קראפטי באמצעות דיסקורד",
|
||||
"notFound": "דף לא נימצא",
|
||||
"unableToFind": "לא הצלחנו למצוא את הדף שאתם מחפשים. בבקשה נסו שוב, או בצעו ריענון."
|
||||
},
|
||||
"accessDenied": {
|
||||
"accessDenied": "גישה נדחתה",
|
||||
"contact": "בבקשה צרו קשר עם תמיכת Crafty Control באמצעות דיסקורד",
|
||||
"contact": "בבקשה צרו קשר עם תמיכת פאנל קראפטי באמצעות דיסקורד",
|
||||
"contactAdmin": "צרו קשר עם מנהל השרת שלכם לקבלת גישה למשאב זה, או אם אתם חושב שיש לכם גישה למשאב זה, פנו לתמיכה.",
|
||||
"noAccess": "אין לך גישה למשאב זה"
|
||||
},
|
||||
"apiKeys": {
|
||||
"apiKeys": "מפתחות API",
|
||||
"auth": "Authorized? ",
|
||||
"apiKeys": "API מפתחות",
|
||||
"auth": "מורשים? ",
|
||||
"buttons": "כפתורים",
|
||||
"config": "הגדרה",
|
||||
"crafty": "Crafty: ",
|
||||
"created": "Created",
|
||||
"createNew": "צור מפתח API חדש",
|
||||
"crafty": "קראפטי: ",
|
||||
"created": "נוצר",
|
||||
"createNew": "חדש API צור מפתח",
|
||||
"deleteKeyConfirmation": "האם ברצונך למחוק מפתח API זה? אי אפשר לבטל את זה.",
|
||||
"deleteKeyConfirmationTitle": "להסיר את מפתח ה-API ${keyId}?",
|
||||
"deleteKeyConfirmationTitle": "? ${keyId} API-להסיר את מפתח ה",
|
||||
"getToken": "קבלת אסימון",
|
||||
"name": "שם",
|
||||
"nameDesc": "איך תרצו לקרוא לאסימון ה-API הזה? ",
|
||||
"nameDesc": "הזה API-איך תרצו לקרוא לאסימון ה",
|
||||
"no": "לא",
|
||||
"pageTitle": "ערוך מפתחות API של משתמש",
|
||||
"pageTitle": "של משתמש זה API עריכת מפתחות",
|
||||
"permName": "שם הגישה",
|
||||
"perms": "גישות",
|
||||
"server": "שרת: ",
|
||||
"superUser": "סופר מתשמש",
|
||||
"superUser": "משתמש על",
|
||||
"yes": "כן"
|
||||
},
|
||||
"base": {
|
||||
"doesNotWorkWithoutJavascript": "<strong>אזהרה: </strong>Crafty לא עובד כשורה כאשר JavaScript אינו מופעל!"
|
||||
"doesNotWorkWithoutJavascript": "<strong>אזהרה: </strong>קראפטי לא עובד כשורה כאשר ג'אווה סקריפט אינו מופעל!"
|
||||
},
|
||||
"credits": {
|
||||
"developmentTeam": "צוות פיתוח",
|
||||
"hugeDesc": "תודה ענקית",
|
||||
"pageDescription": "בלי האנשים האלה, לא היה לכם את Crafty",
|
||||
"pageDescription": "בלי האנשים האלה, לא היה לכם את קראפטי",
|
||||
"pageTitle": "קרדיטים",
|
||||
"patreonDesc": "לתומכי הפטראון שלנו!",
|
||||
"subscriptionLevel": "רמה",
|
||||
"subscriberName": "שם",
|
||||
"patreonOther": "אחר",
|
||||
"patreonSupporter": "תומכי פטראון",
|
||||
"patreonUpdate": "העדכון אחרון:",
|
||||
"retiredStaff": "צוות לשעבר",
|
||||
"subscriberName": "שם",
|
||||
"subscriptionLevel": "רמה",
|
||||
"supportTeam": "צוות תמיכה וכותבי ויקי",
|
||||
"thankYou": "תודה רבה",
|
||||
"translationDesc": "לקהילה שלנו שמתרגמים!",
|
||||
@ -75,7 +75,7 @@
|
||||
"delay-explained": "השירות/סוכן התחיל לאחרונה והוא מעכב את הדלקת שרת המיינקראפט",
|
||||
"host": "אחסון",
|
||||
"kill": "כיבוי מידי",
|
||||
"killing": "מכבה מידית...",
|
||||
"killing": "...מכבה מידית",
|
||||
"lastBackup": "אחרון:",
|
||||
"max": "מקסימום",
|
||||
"memUsage": "שימוש בזיכרון",
|
||||
@ -96,7 +96,7 @@
|
||||
"status": "סטאטוס",
|
||||
"stop": "עצור",
|
||||
"version": "גרסה",
|
||||
"welcome": "ברוכים הבאים ל-Crafty Controller"
|
||||
"welcome": "ברוכים הבאים ל-פאנל קראפטי"
|
||||
},
|
||||
"datatables": {
|
||||
"i18n": {
|
||||
@ -109,53 +109,53 @@
|
||||
"colvis": "נראות עמודה",
|
||||
"colvisRestore": "שיחזור נראות",
|
||||
"copy": "העתק",
|
||||
"copyKeys": "הקש ctrl או u2318 + C כדי להעתיק את נתוני הטבלה ללוח המערכת שלך.<br><br>כדי לבטל, לחצו על הודעה זו או והקישו על escape.",
|
||||
"copyKeys": "ctrl או u2318 + C כדי להעתיק את נתוני הטבלה ללוח המערכת שלך.<br><br>escape-כדי לבטל, לחצו על הודעה זו או והקישו על.",
|
||||
"copySuccess": {
|
||||
"1": "הועתקה שורה אחת ללוח",
|
||||
"_": "הועתקו %d שורות ללוח"
|
||||
"_": "הועתקו %d שורות ללוח",
|
||||
"1": "הועתקה שורה אחת ללוח"
|
||||
},
|
||||
"copyTitle": "העתקה ללוח",
|
||||
"csv": "CSV",
|
||||
"excel": "Excel",
|
||||
"pageLength": {
|
||||
"1": "הצגת שורה אחת",
|
||||
"_": "הצג %d שורות",
|
||||
"-1": "הצגת כל השורות",
|
||||
"_": "הצג %d שורות"
|
||||
"1": "הצגת שורה אחת"
|
||||
},
|
||||
"pdf": "PDF",
|
||||
"print": "הדפסה"
|
||||
},
|
||||
"decimal": "",
|
||||
"emptyTable": "אין נתונים זמינים בטבלה",
|
||||
"info": "Showing _START_ to _END_ of _TOTAL_ entries",
|
||||
"info": "רשומות _TOTAL_ מ _END_ עד _START_ מראה",
|
||||
"infoEmpty": "מציג 0 עד 0 מתוך 0 ערכים",
|
||||
"infoFiltered": "(filtered from _MAX_ total entries)",
|
||||
"infoFiltered": "(רשומות _MAX_ מסונן מתוך)",
|
||||
"infoPostFix": "",
|
||||
"lengthMenu": "Show _MENU_ entries",
|
||||
"loadingRecords": "טוען...",
|
||||
"lengthMenu": "רשומות _MENU_ הצגת",
|
||||
"loadingRecords": "...טוען",
|
||||
"paginate": {
|
||||
"first": "ראשון",
|
||||
"last": "אחרון",
|
||||
"next": "הבא",
|
||||
"previous": "הקודם"
|
||||
},
|
||||
"processing": "מעבד...",
|
||||
"processing": "...מעבד",
|
||||
"search": "לחפש:",
|
||||
"select": {
|
||||
"cells": {
|
||||
"_": "נבחרו %d תאים",
|
||||
"0": "לחצו על תא כדי לבחור אותו",
|
||||
"1": "תא %d נבחר",
|
||||
"_": "נבחרו %d תאים"
|
||||
"1": "תא %d נבחר"
|
||||
},
|
||||
"columns": {
|
||||
"_": "נבחרו %d עמודות",
|
||||
"0": "לחצו על עמודה כדי לבחור בה",
|
||||
"1": "עמודה %d נבחרה",
|
||||
"_": "נבחרו %d עמודות"
|
||||
"1": "עמודה %d נבחרה"
|
||||
},
|
||||
"rows": {
|
||||
"_": "נבחרו %d שורות",
|
||||
"0": "לחצו על שורה כדי לבחור בה",
|
||||
"1": "נבחרה שורה %d",
|
||||
"_": "נבחרו %d שורות"
|
||||
"1": "נבחרה שורה %d"
|
||||
}
|
||||
},
|
||||
"thousands": ",",
|
||||
@ -163,15 +163,15 @@
|
||||
}
|
||||
},
|
||||
"error": {
|
||||
"contact": "בבקשה צרו קשר עם תמיכת Crafty Control באמצעות דיסקורד",
|
||||
"contact": "בבקשה צרו קשר עם תמיכת פאנל קראפטי באמצעות דיסקורד",
|
||||
"embarassing": "אוי, טוב, זה מביך.",
|
||||
"error": "שגיאה!",
|
||||
"eulaAgree": "אתם מסכימים?",
|
||||
"eulaMsg": "עליכם להסכים להסכם הרישיון למשתמש הקצה. עותק של הסכם הרישיון למשתמש הקצה של מוג'אנג מקושר תחת הודעה זו.",
|
||||
"eulaTitle": "להסכים להסכם רישיון משתמש קצה של מוג'אנג",
|
||||
"hereIsTheError": "הנה השגיאה",
|
||||
"internet": "גילינו שמכונה שמריצה את Crafty אין חיבור לאינטרנט. חיבורי לקוחות לשרת עשויים להיות מוגבלים.",
|
||||
"no-file": "נראה שאיננו מצליחים לאתר את הקובץ המבוקש. בדוק שוב את הנתיב. האם ל-Crafty יש הרשאות מתאימות?",
|
||||
"internet": "גילינו שלמכונה(מחשב) שמריצה את קראפטי אין חיבור לאינטרנט. חיבורי לקוחות לשרת עשויים להיות מוגבלים.",
|
||||
"no-file": "נראה שאיננו מצליחים לאתר את הקובץ המבוקש. בדוק שוב את הנתיב. האם ל-קראפטי יש הרשאות מתאימות?",
|
||||
"noJava": "השרת {} לא הצליח להתחיל עם קוד השגיאה: גילינו ש-Java אינו מותקן. אנא התקינו את Java ואז הפעילו את השרת.",
|
||||
"not-downloaded": "לא הצלחנו למצוא את קובץ ההפעלה שלך. האם זה סיים להוריד? האם ההרשאות מוגדרות בשביל הפעלה?",
|
||||
"portReminder": "זיהינו שזו הפעם הראשונה ש-{} מופעל. הקפידו להעביר את היציאה {} דרך הנתב/חומת האש שלכם כדי להפוך אותה לנגישה מרחוק מהאינטרנט.",
|
||||
@ -229,7 +229,7 @@
|
||||
"doesNotExist": "אתה לא יכול למחוק משהו שעדיין לא קיים",
|
||||
"pageTitle": "ערוך תפקיד",
|
||||
"pageTitleNew": "תפקיד חדש",
|
||||
"permAccess": "גישה?",
|
||||
"permAccess": "?גישה",
|
||||
"permName": "שם הרשאה",
|
||||
"permsServer": "הרשאות לתפקיד זה עבור השרתים שצוינו",
|
||||
"roleConfigArea": "אזור הגדרת תפקידים",
|
||||
@ -240,13 +240,13 @@
|
||||
"roleTitle": "הגדרות תפקידים",
|
||||
"roleUserName": "שם משתמש",
|
||||
"roleUsers": "תפקידי המשתמשים: ",
|
||||
"serverAccess": "גישה?",
|
||||
"serverAccess": "?גישה",
|
||||
"serverName": "שם שרת",
|
||||
"serversDesc": "לשרתים מותר לגשת לתפקיד זה"
|
||||
},
|
||||
"serverBackups": {
|
||||
"backupAtMidnight": "גיבוי אוטומטי בחצות?",
|
||||
"backupNow": "גיבוי עכשיו!",
|
||||
"backupNow": "!גיבוי עכשיו",
|
||||
"backupTask": "החלה משימת גיבוי.",
|
||||
"cancel": "לבטל",
|
||||
"clickExclude": "לחצו כדי לבחור מה לא יהיה בגיבוי",
|
||||
@ -256,13 +256,13 @@
|
||||
"confirmRestore": "האם אתם בטוחים שברצונכם לשחזר מגיבוי זה. כל קבצי השרת הנוכחיים ישתנו למצב גיבוי ולא יהיה אפשר לשחזר.",
|
||||
"currentBackups": "גיבויים נוכחיים",
|
||||
"delete": "למחוק",
|
||||
"destroyBackup": "Destroy backup \" + file_to_del + \"?",
|
||||
"destroyBackup": "?\" + file_to_del + \" להרוס גיבוי",
|
||||
"download": "הורדה",
|
||||
"excludedBackups": "נתיבים שלא נכללו: ",
|
||||
"excludedChoose": "בחרו את הנתיבים שברצונכם לא לכלול בגיבויים",
|
||||
"exclusionsTitle": "אי הכללות גיבוי",
|
||||
"maxBackups": "מקסימום גיבויים",
|
||||
"maxBackupsDesc": "Crafty לא יאחסן יותר מ-N גיבויים, ימחק את הישן ביותר (הזן 0 כדי לשמור את כולם)",
|
||||
"maxBackupsDesc": "גיבויים, ימחק את הישן ביותר (הזן 0 כדי לשמור את כולם) N-קראפטי לא יאחסן יותר מ",
|
||||
"options": "אפשרויות",
|
||||
"path": "נתיב",
|
||||
"restore": "לשחזר",
|
||||
@ -273,14 +273,14 @@
|
||||
"storageLocationDesc": "איפו אתם רוצים לאחסן גיבויים?"
|
||||
},
|
||||
"serverConfig": {
|
||||
"bePatientDelete": "אנא חכו בסבלנות בזמן שאנו מסירים את השרת שלכם מלוח Crafty. מסך זה ייסגר בעוד מספר רגעים.",
|
||||
"bePatientDeleteFiles": "אנא חכו בסבלנות בזמן שאנו מסירים את השרת שלך מהחלונית Crafty ומוחקים את כל הקבצים. מסך זה ייסגר בעוד מספר רגעים.",
|
||||
"bePatientDelete": "אנא חכו בסבלנות בזמן שאנו מסירים את השרת שלכם מלוח קראפטי. מסך זה ייסגר בעוד מספר רגעים.",
|
||||
"bePatientDeleteFiles": "אנא חכו בסבלנות בזמן שאנו מסירים את השרת שלך מהחלונית קראפטי ומוחקים את כל הקבצים. מסך זה ייסגר בעוד מספר רגעים.",
|
||||
"bePatientUpdate": "אנא חכו בסבלנות בזמן שאנו מעדכנים את השרת. זמני ההורדה עשויים להשתנות בהתאם למהירויות האינטרנט שלך.<br /> מסך זה יתרענן בעוד רגע",
|
||||
"cancel": "ביטול",
|
||||
"crashTime": "פסק זמן לקריסה",
|
||||
"crashTimeDesc": "כמה זמן עלינו להמתין לפני שנראה שהשרת שלך קרס?",
|
||||
"deleteFilesQuestion": "למחוק קבצי שרת מהמחשב?",
|
||||
"deleteFilesQuestionMessage": "האם תרצו ש-Crafty תמחק את כל קבצי השרת מהמחשב המארח? <br><br><strong>זה כולל גיבויים של שרתים.</strong>",
|
||||
"deleteFilesQuestionMessage": "האם תרצו ש-קראפטי תמחק את כל קבצי השרת מהמחשב המארח? <br><br><strong>זה כולל גיבויים של שרתים.</strong>",
|
||||
"deleteServer": "מחיקת שרת",
|
||||
"deleteServerQuestion": "מחיקת שרת?",
|
||||
"deleteServerQuestionMessage": "האם אתם בטוחים שברצונכם למחוק את השרת הזה? אחרי זה אין דרך חזרה...",
|
||||
@ -302,7 +302,7 @@
|
||||
"serverExecutionCommand": "פקודת ביצוע שרת",
|
||||
"serverExecutionCommandDesc": "מה יושק בטרמינל נסתר",
|
||||
"serverIP": "אייפי של השרת",
|
||||
"serverIPDesc": "Crafty צריך כתובת אייפי בשביל להתחבר לסטטיסטיקה (נסה IP אמיתי במקום 127.0.0.1 אם יש לך בעיות)",
|
||||
"serverIPDesc": "קראפטי צריך כתובת אייפי בשביל להתחבר לסטטיסטיקה (נסה IP אמיתי במקום 127.0.0.1 אם יש לך בעיות)",
|
||||
"serverLogLocation": "מיקום יומן שרת",
|
||||
"serverLogLocationDesc": "נתיב מלא לקובץ היומן",
|
||||
"serverName": "שם שרת",
|
||||
@ -310,7 +310,7 @@
|
||||
"serverPath": "ספריית עבודה של שרת",
|
||||
"serverPathDesc": "נתיב מלא מוחלט (לא כולל קובץ הפעלה)",
|
||||
"serverPort": "פורט שרת",
|
||||
"serverPortDesc": "Crafty צריך פורט בשביל להתחבר לנתונים סטטיסטיים",
|
||||
"serverPortDesc": "קראפטי צריך פורט בשביל להתחבר לנתונים סטטיסטיים",
|
||||
"serverStopCommand": "פקודת עצירת שרת",
|
||||
"serverStopCommandDesc": "פקודה לשלוח את התוכנית כדי לעצור אותה",
|
||||
"stopBeforeDeleting": "בבקשה לעצור את השרת לפני מחיקתו",
|
||||
@ -321,7 +321,7 @@
|
||||
"serverConfigHelp": {
|
||||
"desc": "כאן אתם יכולים לשנות את הגדרות השרת שלכם",
|
||||
"perms": [
|
||||
"מומלץ <code>לא</code> לשנות את הנתיבים של שרת המנוהל על ידי Crafty.",
|
||||
"מומלץ <code>לא</code> לשנות את הנתיבים של שרת המנוהל על ידי קראפטי.",
|
||||
"שינוי נתיבים <code>יכול</code> לשבור דברים, במיוחד במערכות הפעלה מסוג לינוקס שבהן הרשאות הקבצים נעולות יותר.",
|
||||
"<br /><br/>",
|
||||
"אם אתם מרגישים צורך לשנות את מיקום השרת, אתם רשאים לעשות זאת כל עוד אתם נותנים למשתמש \"crafty\" הרשאת קריאה / כתיבה לנתיב השרת.",
|
||||
@ -354,7 +354,7 @@
|
||||
"createFileQuestion": "איזה שם אתם רוצים לקובץ החדש?",
|
||||
"default": "ברירת מחדל",
|
||||
"delete": "למחוק",
|
||||
"deleteItemQuestion": "Are you sure you want to delete \" + name + \"?",
|
||||
"deleteItemQuestion": "?\" + name + \" האם אתם בטוחים שאתם רוצים למחוק את",
|
||||
"deleteItemQuestionMessage": "You are deleting \\\"\" + path + \"\\\"!<br/><br/>This action will be irreversible and it'll be lost forever!",
|
||||
"download": "הורדה",
|
||||
"editingFile": "עריכת קובץ",
|
||||
@ -364,7 +364,7 @@
|
||||
"keybindings": "מקשי קיצור",
|
||||
"loadingRecords": "טוען קבצים...",
|
||||
"noDelete": "לא",
|
||||
"noscript": "מנהל הקבצים לא עובד ללא JavaScript",
|
||||
"noscript": "מנהל הקבצים לא עובד ללא ג'אווה סקריפט",
|
||||
"rename": "שנה שם",
|
||||
"renameItemQuestion": "מה צריך להיות השם החדש?",
|
||||
"save": "שמור",
|
||||
@ -435,21 +435,21 @@
|
||||
},
|
||||
"serverTerm": {
|
||||
"commandInput": "הקלידו את הפקודה שלכם",
|
||||
"delay-explained": "The service/agent has recently started and is delaying the start of the minecraft server instance",
|
||||
"downloading": "מוריד...",
|
||||
"delay-explained": "השירות/סוכן התחיל לאחרונה והוא מעכב את הדלקת שרת המיינקראפט",
|
||||
"downloading": "...מוריד",
|
||||
"restart": "הפעלה מחדש",
|
||||
"sendCommand": "שליחת פקודה",
|
||||
"start": "התחלה",
|
||||
"starting": "התחלה מאוחרת",
|
||||
"stop": "עצור",
|
||||
"stopScroll": "לעצור את הגלילה האוטומטית",
|
||||
"updating": "מתעדכן..."
|
||||
"updating": "...מתעדכן"
|
||||
},
|
||||
"serverWizard": {
|
||||
"absoluteServerPath": "נתיב מוחלט לשרת שלך",
|
||||
"absoluteZipPath": "נתיב מוחלט לשרת שלך",
|
||||
"addRole": "הוסף שרת לתפקידים קיימים",
|
||||
"autoCreate": "אם אף אחד לא נבחר, Crafty תעשה אחד!",
|
||||
"autoCreate": "אם אף אחד לא נבחר, קראפטי תעשה אחד!",
|
||||
"bePatient": "אנא התאזר בסבלנות בזמן שאנו ' + (מייבאים? 'ייבוא': 'מורידים') + ' השרת",
|
||||
"buildServer": "בניית שרת!",
|
||||
"clickRoot": "לחץ כאן כדי לבחור Root Dir",
|
||||
@ -493,20 +493,20 @@
|
||||
"servers": "שרתים"
|
||||
},
|
||||
"userConfig": {
|
||||
"apiKey": "מפתחות API",
|
||||
"apiKey": "API מפתחות",
|
||||
"auth": "מורשה? ",
|
||||
"config": "הגדרות",
|
||||
"configArea": "אזור הגדרות משתמש",
|
||||
"configAreaDesc": "כאן אתה משנה את כל הגדרות המשתמש שלך",
|
||||
"confirmDelete": "האם אתה בטוח שברצונך למחוק משתמש זה? פעולה זו היא בלתי הפיכה.",
|
||||
"craftyPermDesc": "הרשאות Crafty יש למשתמש הזה ",
|
||||
"craftyPerms": "Crafty הרשאות: ",
|
||||
"craftyPermDesc": "הרשאות קראפטי יש למשתמש הזה ",
|
||||
"craftyPerms": "הרשאות קראפטי: ",
|
||||
"created": "נוצר: ",
|
||||
"deleteUser": "מחק משתמש: ",
|
||||
"deleteUserB": "מחק משתמש",
|
||||
"delSuper": "אינך יכול למחוק משתמש-על",
|
||||
"enabled": "מופעל",
|
||||
"gravDesc": "אימייל זה מיועד אך ורק לשימוש עם Gravatar™. Crafty לא תשתמש בשום מקרה באימייל זה לשום דבר מלבד חיפוש Gravatar™ שלך",
|
||||
"gravDesc": "אימייל זה מיועד אך ורק לשימוש עם Gravatar™. קראפטי לא תשתמש בשום מקרה באימייל זה לשום דבר מלבד חיפוש Gravatar™ שלך",
|
||||
"gravEmail": "אימייל Gravatar™",
|
||||
"lastIP": "אייפי אחרון: ",
|
||||
"lastLogin": "כניסה אחרונה: ",
|
||||
|
Loading…
Reference in New Issue
Block a user