diff --git a/app/classes/shared/import_helper.py b/app/classes/shared/import_helper.py index 769ebc3a..b5f8d193 100644 --- a/app/classes/shared/import_helper.py +++ b/app/classes/shared/import_helper.py @@ -3,6 +3,7 @@ import time import shutil import logging import threading +import urllib from app.classes.controllers.server_perms_controller import PermissionsServers from app.classes.controllers.servers_controller import ServersController @@ -214,3 +215,36 @@ class ImportHelpers: os.chmod(full_jar_path, 0o2760) # deletes temp dir FileHelpers.del_dirs(temp_dir) + + def download_bedrock_server(self, path, new_id): + download_thread = threading.Thread( + target=self.download_threaded_bedrock_server, + daemon=True, + args=(path, new_id), + name=f"{new_id}_download", + ) + download_thread.start() + + def download_threaded_bedrock_server(self, path, new_id): + # downloads zip from remote url + bedrock_url = Helpers.get_latest_bedrock_url() + if bedrock_url.lower().startswith("https"): + urllib.request.urlretrieve( + bedrock_url, + os.path.join(path, "bedrock_server.zip"), + ) + + unzip_path = os.path.join(path, "bedrock_server.zip") + unzip_path = self.helper.wtol_path(unzip_path) + # unzips archive that was downloaded. + FileHelpers.unzip_file(unzip_path) + # adjusts permissions for execution if os is not windows + if not self.helper.is_os_windows(): + os.chmod(os.path.join(path, "bedrock_server"), 0o0744) + + # we'll delete the zip we downloaded now + os.remove(os.path.join(path, "bedrock_server.zip")) + ServersController.finish_import(new_id) + server_users = PermissionsServers.get_server_user_list(new_id) + for user in server_users: + self.helper.websocket_helper.broadcast_user(user, "send_start_reload", {}) diff --git a/app/classes/shared/main_controller.py b/app/classes/shared/main_controller.py index cfda4c8d..68645b86 100644 --- a/app/classes/shared/main_controller.py +++ b/app/classes/shared/main_controller.py @@ -697,6 +697,49 @@ class Controller: ) return new_id + def create_bedrock_server(self, server_name, user_id): + server_id = Helpers.create_uuid() + new_server_dir = os.path.join(self.helper.servers_dir, server_id) + backup_path = os.path.join(self.helper.backup_path, server_id) + server_exe = "bedrock_server" + if Helpers.is_os_windows(): + # if this is windows we will override the linux bedrock server name. + server_exe = "bedrock_server.exe" + new_server_dir = Helpers.wtol_path(new_server_dir) + backup_path = Helpers.wtol_path(backup_path) + new_server_dir.replace(" ", "^ ") + backup_path.replace(" ", "^ ") + + Helpers.ensure_dir_exists(new_server_dir) + Helpers.ensure_dir_exists(backup_path) + + full_jar_path = os.path.join(new_server_dir, server_exe) + + if Helpers.is_os_windows(): + server_command = f'"{full_jar_path}"' + else: + server_command = f"./{server_exe}" + logger.debug("command: " + server_command) + server_log_file = "" + server_stop = "stop" + + new_id = self.register_server( + server_name, + server_id, + new_server_dir, + backup_path, + server_command, + server_exe, + server_log_file, + server_stop, + "19132", + user_id, + server_type="minecraft-bedrock", + ) + ServersController.set_import(new_id) + self.import_helper.download_bedrock_server(new_server_dir, new_id) + return new_id + def import_bedrock_zip_server( self, server_name: str, diff --git a/app/classes/shared/server.py b/app/classes/shared/server.py index bd8d29f6..2a80965b 100644 --- a/app/classes/shared/server.py +++ b/app/classes/shared/server.py @@ -338,7 +338,7 @@ class ServerInstance: "eula =true", ] - if not e_flag: + if not e_flag and self.settings["type"] == "minecraft-java": if user_id: self.helper.websocket_helper.broadcast_user( user_id, "send_eula_bootbox", {"id": self.server_id} diff --git a/app/classes/web/server_handler.py b/app/classes/web/server_handler.py index c13198ed..1c1d6fc6 100644 --- a/app/classes/web/server_handler.py +++ b/app/classes/web/server_handler.py @@ -97,6 +97,7 @@ class ServerHandler(BaseHandler): "version_data": self.helper.get_version_string(), "user_data": exec_user, "user_role": exec_user_role, + "online": Helpers.check_internet(), "roles": list_roles, "super_user": exec_user["superuser"], "user_crafty_permissions": exec_user_crafty_permissions, @@ -173,7 +174,6 @@ class ServerHandler(BaseHandler): ) return - page_data["online"] = Helpers.check_internet() page_data["server_types"] = self.controller.server_jars.get_serverjar_data() page_data["js_server_types"] = json.dumps( self.controller.server_jars.get_serverjar_data() @@ -548,25 +548,14 @@ class ServerHandler(BaseHandler): self.get_remote_ip(), ) else: - if len(server_parts) != 2: - self.redirect("/panel/error?error=Invalid server data") - return - server_type, server_version = server_parts - # TODO: add server type check here and call the correct server - # add functions if not a jar - new_server_id = self.controller.create_jar_server( - server_type, - server_version, + + new_server_id = self.controller.create_bedrock_server( server_name, - min_mem, - max_mem, - port, exec_user["user_id"], ) self.controller.management.add_to_audit_log( exec_user["user_id"], - f"created a {server_version} {str(server_type).capitalize()} " - f'server named "{server_name}"', + "created a Bedrock " f'server named "{server_name}"', # Example: Admin created a 1.16.5 Bukkit server named "survival" new_server_id, self.get_remote_ip(), diff --git a/app/frontend/templates/base.html b/app/frontend/templates/base.html index 1ab50da8..bfe530b9 100755 --- a/app/frontend/templates/base.html +++ b/app/frontend/templates/base.html @@ -378,7 +378,7 @@ } bootbox.confirm({ title: "{% raw translate('error', 'eulaTitle', data['lang']) %}", - message: "{% raw translate('error', 'eulaMsg', data['lang']) %}

EULA

{% raw translate('error', 'eulaAgree', data['lang']) %}", + message: "{% raw translate('error', 'eulaMsg', data['lang']) %}

EULA

{% raw translate('error', 'eulaAgree', data['lang']) %}", buttons: { confirm: { label: 'Yes', diff --git a/app/frontend/templates/server/bedrock_wizard.html b/app/frontend/templates/server/bedrock_wizard.html index 42ab590c..465a9e10 100644 --- a/app/frontend/templates/server/bedrock_wizard.html +++ b/app/frontend/templates/server/bedrock_wizard.html @@ -7,445 +7,575 @@
-
-
-
-
-
-
- -

{{ translate('serverWizard', 'importServer', data['lang']) }}

-
-

- -

- {% raw xsrf_form_html() %} - -
- -
-
- - -
-
- -
-
- - -
-
- -
-
- - -
-
+ +
+
+
+ {% if data['online'] %} +
+
+
+

{{ translate('serverWizard', 'newServer', data['lang']) }}

+
+

+ + {% raw xsrf_form_html() %} +

+
+
+ +
-
-

{{ translate('serverWizard', 'quickSettings', data['lang']) }} - {{ translate('serverWizard', 'quickSettingsDescription', data['lang']) }}

-
-
+
-
-
- - +
+ +
+
+
+
+
+

+ {{ translate('serverWizard', 'addRole', data['lang']) }} + - {{ translate('serverWizard', 'autoCreate', + data['lang']) }} +

-
-
-
-
-
-
-

- {{ translate('serverWizard', 'addRole', data['lang']) }} - {{ translate('serverWizard', 'autoCreate', data['lang']) }} -

-
-
-
-
- {% for r in data['roles'] %} - - {% end %} -
-
-
+
+
+
+ {% for r in data['roles'] %} + + {% end %}
- - - - -

-
+
+
+ +
+ +

-
-
-
- -

{{ translate('serverWizard', 'importZip', data['lang']) }}

-
-

- -

- {% raw xsrf_form_html() %} - - -
-
-
-
- - -
-
- -
-
- - -
-
- -
-
- -
- -
-
- - -
-
- - -
-
-
+ {% end %} +
+
+
+ +

{{ translate('serverWizard', 'importServer', data['lang']) }}

+
+

+ + + {% raw xsrf_form_html() %} + +

+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
-
-

{{ translate('serverWizard', 'quickSettings', data['lang']) }} - {{ translate('serverWizard', 'quickSettingsDescription', data['lang']) }}

-
-
+
+
+

{{ translate('serverWizard', 'quickSettings', data['lang']) }} - {{ translate('serverWizard', 'quickSettingsDescription', + data['lang']) }}

+
+
-
-
- - -
+
+
+ + +
+
+
+
+
+
+
+

+ {{ translate('serverWizard', 'addRole', data['lang']) }} + - {{ translate('serverWizard', 'autoCreate', + data['lang']) }} +

- -
-
-
-
-
-

- {{ translate('serverWizard', 'addRole', data['lang']) }} - {{ translate('serverWizard', 'autoCreate', data['lang']) }} -

-
-
-
-
- {% for r in data['roles'] %} - - {% end %} -
-
-
-
+
+
+
+ {% for r in data['roles'] %} + + {% end %}
- +
+
+
+ + + + +

+
+
+
+
+
+
+ +

{{ translate('serverWizard', 'importZip', data['lang']) }}

+
+

+ +

+ {% raw xsrf_form_html() %} + + +
+
+
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ +
+ +
+
+ + +
+
+ + +
+
+
+
+ + + +
+

{{ translate('serverWizard', 'quickSettings', data['lang']) }} - {{ translate('serverWizard', 'quickSettingsDescription', + data['lang']) }}

+
+
+ +
+
+ + +
+
+ +
+
+
+
+
+

+ {{ translate('serverWizard', 'addRole', data['lang']) + }} - {{ translate('serverWizard', 'autoCreate', + data['lang']) }} +

-
- - -

-
+ + +
+ + +
+ +

+
+
{% end %} {% block js%} + -{% end %} +{% end %} \ No newline at end of file diff --git a/app/translations/de_DE.json b/app/translations/de_DE.json index 2becaa47..fb5a5d32 100644 --- a/app/translations/de_DE.json +++ b/app/translations/de_DE.json @@ -168,7 +168,7 @@ "embarassing": "Oh je, das ist peinlich.", "error": "Fehler!", "eulaAgree": "Stimmen Sie zu?", - "eulaMsg": "Sie müssen der EULA zustimmen. Eine Kopie der Mojang EULA ist unter dieser Nachricht verlinkt.", + "eulaMsg": "Sie müssen der EULA zustimmen. Eine Kopie der Minecraft EULA ist unter dieser Nachricht verlinkt.", "eulaTitle": "Der EULA zustimmen", "hereIsTheError": "Das ist der Fehler", "internet": "Wir haben festgestellt, dass der Rechner, auf dem Crafty läuft, keine Verbindung zum Internet hat. Client-Verbindungen zum Server können dadurch eingeschränkt sein.", diff --git a/app/translations/en_EN.json b/app/translations/en_EN.json index 0f510b90..9724aa54 100644 --- a/app/translations/en_EN.json +++ b/app/translations/en_EN.json @@ -168,7 +168,7 @@ "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.", + "eulaMsg": "You must agree to the EULA. A copy of the Minecraft EULA is linked under this message.", "eulaTitle": "Agree To EULA", "fileTooLarge": "Upload failed. File upload too large. Contact system administrator for assistance.", "hereIsTheError": "Here is the error", diff --git a/app/translations/es_ES.json b/app/translations/es_ES.json index 28f8d6e1..980eca0a 100644 --- a/app/translations/es_ES.json +++ b/app/translations/es_ES.json @@ -169,7 +169,7 @@ "embarassing": "Oh por, bueno, esto es vergonzoso.", "error": "Error!", "eulaAgree": "Estás de acuerdo?", - "eulaMsg": "Debes aceptar el EULA. Una copia del EULA de Mojang esta vinculada debajo de este mensaje.", + "eulaMsg": "Debes aceptar el EULA. Una copia del EULA de Minecraft esta vinculada debajo de este mensaje.", "eulaTitle": "Aceptar EULA", "fileTooLarge": "Subida fallida. Carga de archivo demasiado grande. Póngase en contacto con el administrador del sistema para obtener ayuda.", "hereIsTheError": "Aquí está el error.", @@ -537,4 +537,4 @@ "userSettings": "Configuracion de Usuario.", "uses": "Número de usos habilitados. (-1 == sin límite)." } -} +} \ No newline at end of file diff --git a/app/translations/fi_FI.json b/app/translations/fi_FI.json index c51dfbd0..2292da65 100644 --- a/app/translations/fi_FI.json +++ b/app/translations/fi_FI.json @@ -192,7 +192,7 @@ "embarassing": "No, tämähän on noloa.", "error": "Virhe!", "eulaAgree": "Oletko samaa mieltä?", - "eulaMsg": "Sinun on hyväksyttävä EULA. Kopio Mojang EULA:sta on linkitetty tämän viestin alla.", + "eulaMsg": "Sinun on hyväksyttävä EULA. Kopio Minecraft EULA:sta on linkitetty tämän viestin alla.", "eulaTitle": "Hyväksy EULA", "fileTooLarge": "Lataus epäonnistui. Tiedosto on liian suuri. Ota yhteyttä järjestelmänvalvojaan saadaksesi apua.", "hereIsTheError": "Tässä on virhe", @@ -560,4 +560,4 @@ "userSettings": "Käyttäjäasetukset", "uses": "Sallittujen käyttäkertojen määtä (-1 == Ei rajaa)" } -} +} \ No newline at end of file diff --git a/app/translations/fr_FR.json b/app/translations/fr_FR.json index 44d150f3..b1706e87 100644 --- a/app/translations/fr_FR.json +++ b/app/translations/fr_FR.json @@ -168,7 +168,7 @@ "embarassing": "Oulà, c'est embarrassant.", "error": "Erreur !", "eulaAgree": "Êtes-vous d'accord?", - "eulaMsg": "Vous devez accepter le EULA. Une copie du CLUF de Mojang est liée sous ce message.", + "eulaMsg": "Vous devez accepter le EULA. Une copie du CLUF de Minecraft est liée sous ce message.", "eulaTitle": "Accepter le EULA", "fileTooLarge": "Echec du chargement. Le fichier est trop gros. Demande de l'aide à l'administrateur système.", "hereIsTheError": "Il y a une erreur", @@ -536,4 +536,4 @@ "userSettings": "Paramètres Utilisateur", "uses": "Nombre d'utilisation Authorisé (-1 == Illimité)" } -} +} \ No newline at end of file diff --git a/app/translations/fy_NL.json b/app/translations/fy_NL.json index 2c4c0fd4..9342204f 100644 --- a/app/translations/fy_NL.json +++ b/app/translations/fy_NL.json @@ -167,7 +167,7 @@ "embarassing": "Och, dit is beskamsum.", "error": "Error!", "eulaAgree": "Binne jo akkoard?", - "eulaMsg": "Jo moatte ynstimme mei de EULA. In kopy fan 'e Mojang EULA is keppele ûnder dit berjocht.", + "eulaMsg": "Jo moatte ynstimme mei de EULA. In kopy fan 'e Minecraft EULA is keppele ûnder dit berjocht.", "eulaTitle": "Akseptearje mei EULA", "hereIsTheError": "Hjir is de error", "internet": "Wy hawwe ûntdutsen dat de masine dy't Crafty draait gjin ferbining hat mei it ynternet. Clientferbiningen mei de server kinne beheind wêze.", @@ -529,4 +529,4 @@ "userSettings": "Brûkersynstellingen", "uses": "Oantal gebrûk tastien (-1==Gjin limyt)" } -} +} \ No newline at end of file diff --git a/app/translations/hr_HR.json b/app/translations/hr_HR.json index 26b5ae2c..8d0658ee 100644 --- a/app/translations/hr_HR.json +++ b/app/translations/hr_HR.json @@ -167,7 +167,7 @@ "embarassing": "Uhh, ovo je sramotno.", "error": "Greška!", "eulaAgree": "Slažete li se?", - "eulaMsg": "Morate prihvatiti EULA-u. Poveznica Mojangove EULA-e se nalazi ispod ove poruke.", + "eulaMsg": "Morate prihvatiti EULA-u. Poveznica Minecraft EULA-e se nalazi ispod ove poruke.", "eulaTitle": "Prihvatite EULA-u", "hereIsTheError": "Ovdje je pogreška", "internet": "Otkrili smo da uređaj koji pokreće Crafty nije povezan s internetom. Povezivanje klijenta s poslužiteljem može biti ograničeno.", @@ -529,4 +529,4 @@ "userSettings": "Korisničke postavke", "uses": "Broj dopuštenih upotreba (-1==Bez ograničenja)" } -} +} \ No newline at end of file diff --git a/app/translations/id_ID.json b/app/translations/id_ID.json index 539aaa0b..10c22374 100644 --- a/app/translations/id_ID.json +++ b/app/translations/id_ID.json @@ -168,7 +168,7 @@ "embarassing": "Oh tidak, ini adalah hal yang memalukan", "error": "Error!", "eulaAgree": "Apakah anda setuju?", - "eulaMsg": "Anda harus menyetujui EULA. Salinan Mojang EULA ditautkan di bawah pesan ini.", + "eulaMsg": "Anda harus menyetujui EULA. Salinan Minecraft EULA ditautkan di bawah pesan ini.", "eulaTitle": "Setuju Ke EULA", "fileTooLarge": "Gagal menggungah. File yang ingin di unggah terlalu besar. Kontak administrator system untuk pengawasan", "hereIsTheError": "Disini Error nya", @@ -536,4 +536,4 @@ "userSettings": "Pengaturan Pengguna", "uses": "Jumlah penggunaan yang diizinkan (-1==No Limit)" } -} +} \ No newline at end of file diff --git a/app/translations/it_IT.json b/app/translations/it_IT.json index 28754bc9..eefb8594 100644 --- a/app/translations/it_IT.json +++ b/app/translations/it_IT.json @@ -167,7 +167,7 @@ "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.", + "eulaMsg": "You must agree to the EULA. A copy of the Minecraft 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.", @@ -529,4 +529,4 @@ "userSettings": "Impostazioni Utente", "uses": "Numero di usi permessi (-1==Nessun limite)" } -} +} \ No newline at end of file diff --git a/app/translations/lv_LV.json b/app/translations/lv_LV.json index 9ce3d82e..eb852755 100644 --- a/app/translations/lv_LV.json +++ b/app/translations/lv_LV.json @@ -168,7 +168,7 @@ "embarassing": "Ak nu, tas ir apkaunojoši.", "error": "Kļūda!", "eulaAgree": "Vai jūs piekrītat?", - "eulaMsg": "Jums ir jāpiekrīt EULA. Kopija no Mojang EULA ir saitēta zem šī ziņojuma.", + "eulaMsg": "Jums ir jāpiekrīt EULA. Kopija no Minecraft EULA ir saitēta zem šī ziņojuma.", "eulaTitle": "Piekrist EULA", "fileTooLarge": "Augšupielāde neizdevās. Faila augšupielāde ir pārāk liela. Sazinies ar sistēmas administratoru priekš palīdzības.", "hereIsTheError": "Rekur ir kļūda", @@ -536,4 +536,4 @@ "userSettings": "Lietotāju Iestatījumi", "uses": "Dauzums, cik reizes lietot (-1==Bez Limita)" } -} +} \ No newline at end of file diff --git a/app/translations/nl_BE.json b/app/translations/nl_BE.json index b715cdae..2ad43441 100644 --- a/app/translations/nl_BE.json +++ b/app/translations/nl_BE.json @@ -168,7 +168,7 @@ "embarassing": "Oh, nou, dit is gênant.", "error": "Fout!", "eulaAgree": "Bent u het eens?", - "eulaMsg": "U moet akkoord gaan met de EULA. Een kopie van de Mojang EULA is gelinkt onder dit bericht.", + "eulaMsg": "U moet akkoord gaan met de EULA. Een kopie van de Minecraft EULA is gelinkt onder dit bericht.", "eulaTitle": "Akkoord gaan met EULA", "fileTooLarge": "Uploaden mislukt. Bestand uploaden te groot. Neem contact op met de systeembeheerder voor assistentie", "hereIsTheError": "Hier is de fout", @@ -536,4 +536,4 @@ "userSettings": "Gebruikersinstellingen", "uses": "Aantal toegestane gebruiken (-1==Geen Limiet)" } -} +} \ No newline at end of file diff --git a/app/translations/nl_NL.json b/app/translations/nl_NL.json index 82f2f204..0b48898f 100644 --- a/app/translations/nl_NL.json +++ b/app/translations/nl_NL.json @@ -167,7 +167,7 @@ "embarassing": "Oh, oeps, dit is gênant.", "error": "Error!", "eulaAgree": "Stem je in met de EULA?", - "eulaMsg": "Je moet instemmen met de EULA. Een kopie van de Mojang EULA is onder dit bericht gelinkt.", + "eulaMsg": "Je moet instemmen met de EULA. Een kopie van de Minecraft EULA is onder dit bericht gelinkt.", "eulaTitle": "Instemmen met de EULA", "hereIsTheError": "Hier is de error", "internet": "We hebben gedetecteerd dat de serverhost geen internetverbinding heeft. Client connecties zijn mogelijk gelimiteerd.", @@ -529,4 +529,4 @@ "userSettings": "Gebruikersinstellingen", "uses": "Aantal keer toegestaan (-1==Geen limiet)" } -} +} \ No newline at end of file diff --git a/app/translations/pl_PL.json b/app/translations/pl_PL.json index 90d42e7a..8fb9739c 100644 --- a/app/translations/pl_PL.json +++ b/app/translations/pl_PL.json @@ -168,7 +168,7 @@ "embarassing": "Oh, więc, to jest żenujące.", "error": "Błąd!", "eulaAgree": "Czy się zgadzasz?", - "eulaMsg": "Musisz się zgodzić na EULA. Kopia EULA Mojangu jest zalinkowana pod tą wiadomością.", + "eulaMsg": "Musisz się zgodzić na EULA. Kopia EULA Minecraft jest zalinkowana pod tą wiadomością.", "eulaTitle": "Zgódź się na EULA", "fileTooLarge": "Upload nie udany. Plik jest za duży. Skontaktuj się z administratorem dla pomocy.", "hereIsTheError": "Tu jest problem", @@ -537,4 +537,4 @@ "userSettings": "Ustawienia użytkownika", "uses": "Ilość użyć (-1==Bez limitu)" } -} +} \ No newline at end of file diff --git a/app/translations/pt_BR.json b/app/translations/pt_BR.json index 2b61b75d..af23d2c9 100644 --- a/app/translations/pt_BR.json +++ b/app/translations/pt_BR.json @@ -168,7 +168,7 @@ "embarassing": "Oh. Bem, isso é constrangedor", "error": "Erro!", "eulaAgree": "Você concorda?", - "eulaMsg": "Você deve concordar com os Termos de Licença. Uma cópia dos Termos de Licença da Mojang está linkado abaixo desta mensagem.", + "eulaMsg": "Você deve concordar com os Termos de Licença. Uma cópia dos Termos de Licença da Minecraft está linkado abaixo desta mensagem.", "eulaTitle": "Concordar com os Termos de Licença", "fileTooLarge": "Upload falhou. Arquivo muito grande. Contato o administrador do sistema para assistência.", "hereIsTheError": "Aqui está o erro", @@ -537,4 +537,4 @@ "userSettings": "Configurações do Usuário", "uses": "Número de Usos Permitidos (-1==Sem Limite)" } -} +} \ No newline at end of file diff --git a/app/translations/zh_CN.json b/app/translations/zh_CN.json index 46234138..9b4be554 100644 --- a/app/translations/zh_CN.json +++ b/app/translations/zh_CN.json @@ -168,7 +168,7 @@ "embarassing": "哦,天哪,这太尴尬了。", "error": "错误!", "eulaAgree": "你同意吗?", - "eulaMsg": "你必须同意最终用户许可协议(EULA)。一份 Mojang EULA 副本的链接在此消息下方。", + "eulaMsg": "你必须同意最终用户许可协议(EULA)。一份 Minecraft EULA 副本的链接在此消息下方。", "eulaTitle": "同意最终用户许可协议(EULA)", "fileTooLarge": "上传失败。上传的文件过大。联系系统管理员以获取协助。", "hereIsTheError": "错误如下", @@ -536,4 +536,4 @@ "userSettings": "用户设置", "uses": "使用次数限制(-1==无限制)" } -} +} \ No newline at end of file