From 934d633d4d693b808db4c6afa524f7b7f51595ff Mon Sep 17 00:00:00 2001 From: Juan Cruz Vincenti Date: Thu, 11 Nov 2021 20:06:32 -0300 Subject: [PATCH 001/171] Add description to monitor * Add description to monitor model * Add description field to database * Add english and spanish translation for description * Closes: #482 --- db/patch-add-description-monitor.sql | 7 +++++++ server/database.js | 1 + server/model/monitor.js | 2 ++ server/server.js | 2 ++ src/components/MonitorList.vue | 3 +++ src/icon.js | 2 ++ src/languages/en.js | 1 + src/languages/es-ES.js | 1 + src/pages/Details.vue | 1 + src/pages/EditMonitor.vue | 6 ++++++ 10 files changed, 26 insertions(+) create mode 100644 db/patch-add-description-monitor.sql diff --git a/db/patch-add-description-monitor.sql b/db/patch-add-description-monitor.sql new file mode 100644 index 000000000..da1aa55bc --- /dev/null +++ b/db/patch-add-description-monitor.sql @@ -0,0 +1,7 @@ +-- You should not modify if this have pushed to Github, unless it does serious wrong with the db. +BEGIN TRANSACTION; + +ALTER TABLE monitor + ADD description TEXT default null; + +COMMIT; diff --git a/server/database.js b/server/database.js index afcace705..55f08a0c7 100644 --- a/server/database.js +++ b/server/database.js @@ -53,6 +53,7 @@ class Database { "patch-2fa-invalidate-used-token.sql": true, "patch-notification_sent_history.sql": true, "patch-monitor-basic-auth.sql": true, + "patch-add-description-monitor.sql": true, } /** diff --git a/server/model/monitor.js b/server/model/monitor.js index 6aa614b74..50f11e879 100644 --- a/server/model/monitor.js +++ b/server/model/monitor.js @@ -31,6 +31,7 @@ class Monitor extends BeanModel { return { id: this.id, name: this.name, + description: this.description, }; } @@ -54,6 +55,7 @@ class Monitor extends BeanModel { return { id: this.id, name: this.name, + description: this.description, url: this.url, method: this.method, body: this.body, diff --git a/server/server.js b/server/server.js index 868bbd5ef..794f67b42 100644 --- a/server/server.js +++ b/server/server.js @@ -568,6 +568,7 @@ exports.entryPage = "dashboard"; } bean.name = monitor.name; + bean.description = monitor.description; bean.type = monitor.type; bean.url = monitor.url; bean.method = monitor.method; @@ -1134,6 +1135,7 @@ exports.entryPage = "dashboard"; let monitor = { // Define the new variable from earlier here name: monitorListData[i].name, + description: monitorListData[i].description, type: monitorListData[i].type, url: monitorListData[i].url, method: monitorListData[i].method || "GET", diff --git a/src/components/MonitorList.vue b/src/components/MonitorList.vue index ef51e89cd..29d14d1f9 100644 --- a/src/components/MonitorList.vue +++ b/src/components/MonitorList.vue @@ -23,6 +23,9 @@
{{ item.name }} + + +
diff --git a/src/icon.js b/src/icon.js index e78992f20..55e662917 100644 --- a/src/icon.js +++ b/src/icon.js @@ -33,6 +33,7 @@ import { faFile, faAward, faLink, + faInfoCircle, } from "@fortawesome/free-solid-svg-icons"; library.add( @@ -65,6 +66,7 @@ library.add( faFile, faAward, faLink, + faInfoCircle, ); export { FontAwesomeIcon }; diff --git a/src/languages/en.js b/src/languages/en.js index fee80a760..d238bb666 100644 --- a/src/languages/en.js +++ b/src/languages/en.js @@ -46,6 +46,7 @@ export default { Unknown: "Unknown", Pause: "Pause", Name: "Name", + Description: "Description", Status: "Status", DateTime: "DateTime", Message: "Message", diff --git a/src/languages/es-ES.js b/src/languages/es-ES.js index d772db060..fe04d86a0 100644 --- a/src/languages/es-ES.js +++ b/src/languages/es-ES.js @@ -34,6 +34,7 @@ export default { Unknown: "Desconocido", Pause: "Pausar", Name: "Nombre", + Description: "Descripción", Status: "Estado", DateTime: "Fecha y Hora", Message: "Mensaje", diff --git a/src/pages/Details.vue b/src/pages/Details.vue index d40561fe0..12e86df4a 100644 --- a/src/pages/Details.vue +++ b/src/pages/Details.vue @@ -2,6 +2,7 @@

{{ monitor.name }}

+

{{ monitor.description }}

diff --git a/src/pages/EditMonitor.vue b/src/pages/EditMonitor.vue index 4a0d0408b..a0e68676b 100644 --- a/src/pages/EditMonitor.vue +++ b/src/pages/EditMonitor.vue @@ -41,6 +41,12 @@
+ +
+ + +
+
From fbf2df9e7af19bee7f02ea41d2ead5b90ccd2882 Mon Sep 17 00:00:00 2001 From: Juan Cruz Vincenti Date: Thu, 25 Nov 2021 18:11:13 -0300 Subject: [PATCH 002/171] Add conditional rendering to description * Modify Details component * Modify MonitorList component --- src/components/MonitorList.vue | 2 +- src/pages/Details.vue | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/MonitorList.vue b/src/components/MonitorList.vue index 29d14d1f9..19f2c837c 100644 --- a/src/components/MonitorList.vue +++ b/src/components/MonitorList.vue @@ -23,7 +23,7 @@
{{ item.name }} - +
diff --git a/src/pages/Details.vue b/src/pages/Details.vue index 12e86df4a..d96e42eb9 100644 --- a/src/pages/Details.vue +++ b/src/pages/Details.vue @@ -2,7 +2,7 @@

{{ monitor.name }}

-

{{ monitor.description }}

+

{{ monitor.description }}

From 3a188017228b2437820133827c36b03a7b9597f7 Mon Sep 17 00:00:00 2001 From: Justin Tisdale Date: Wed, 10 Aug 2022 21:46:43 -0400 Subject: [PATCH 003/171] Add Body Encoding field --- src/languages/en.js | 1 + src/pages/EditMonitor.vue | 17 +++++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/src/languages/en.js b/src/languages/en.js index b99516124..4433e2a5f 100644 --- a/src/languages/en.js +++ b/src/languages/en.js @@ -553,4 +553,5 @@ export default { disableCloudflaredNoAuthMsg: "You are in No Auth mode, password is not require.", trustProxyDescription: "Trust 'X-Forwarded-*' headers. If you want to get the correct client IP and your Uptime Kuma is behind such as Nginx or Apache, you should enable this.", wayToGetLineNotifyToken: "You can get an access token from {0}", + "Body Encoding": "Body Encoding" }; diff --git a/src/pages/EditMonitor.vue b/src/pages/EditMonitor.vue index ac6a3e2e5..7dcc7d64b 100644 --- a/src/pages/EditMonitor.vue +++ b/src/pages/EditMonitor.vue @@ -396,6 +396,22 @@
+ +
+ + +
+
@@ -644,6 +660,7 @@ export default { mqttTopic: "", mqttSuccessMessage: "", authMethod: null, + bodyEncoding: null }; if (this.$root.proxyList && !this.monitor.proxyId) { From 2b9bf095a609bbf2f2c517209b13cb57dbd1e1b1 Mon Sep 17 00:00:00 2001 From: Justin Tisdale Date: Thu, 11 Aug 2022 20:57:03 -0400 Subject: [PATCH 004/171] Add non-json support for http body --- db/patch-http-body-encoding.sql | 6 ++++++ server/database.js | 1 + server/model/monitor.js | 20 +++++++++++++++++++- server/server.js | 1 + src/pages/EditMonitor.vue | 13 +++++++------ 5 files changed, 34 insertions(+), 7 deletions(-) create mode 100644 db/patch-http-body-encoding.sql diff --git a/db/patch-http-body-encoding.sql b/db/patch-http-body-encoding.sql new file mode 100644 index 000000000..de02bede1 --- /dev/null +++ b/db/patch-http-body-encoding.sql @@ -0,0 +1,6 @@ +-- You should not modify if this have pushed to Github, unless it does serious wrong with the db. +BEGIN TRANSACTION; + +ALTER TABLE [monitor] ADD http_body_encoding TEXT; + +COMMIT; diff --git a/server/database.js b/server/database.js index b234d67d0..ecf6af728 100644 --- a/server/database.js +++ b/server/database.js @@ -62,6 +62,7 @@ class Database { "patch-add-clickable-status-page-link.sql": true, "patch-add-sqlserver-monitor.sql": true, "patch-add-other-auth.sql": { parents: [ "patch-monitor-basic-auth.sql" ] }, + "patch-http-body-encoding.sql": true }; /** diff --git a/server/model/monitor.js b/server/model/monitor.js index 2feef1356..af3d162a5 100644 --- a/server/model/monitor.js +++ b/server/model/monitor.js @@ -103,6 +103,7 @@ class Monitor extends BeanModel { authMethod: this.authMethod, authWorkstation: this.authWorkstation, authDomain: this.authDomain, + httpBodyEncoding: this.httpBodyEncoding }; if (includeSensitiveData) { @@ -241,16 +242,33 @@ class Monitor extends BeanModel { log.debug("monitor", `[${this.name}] Prepare Options for axios`); + // Set content-type header and body values based on the httpBodyEncoding type selected + // TODO: Check if this.headers already contains a content-type header set by the user; if so, don't inject one + let bodyValue = null; + let contentType = null; + + if (this.body && !this.httpBodyEncoding || this.httpBodyEncoding === "json"){ + bodyValue = JSON.parse(this.body); + contentType = "application/json"; + } else if (this.body && (this.httpBodyEncoding === "xml")) { + bodyValue = this.body; + contentType = "text/xml"; + } else if (this.body && (this.httpBodyEncoding === "form")) { + bodyValue = this.body; + contentType = "application/x-www-form-urlencoded"; + } + const options = { url: this.url, method: (this.method || "get").toLowerCase(), - ...(this.body ? { data: JSON.parse(this.body) } : {}), + ...(bodyValue ? { data: bodyValue } : {}), timeout: this.interval * 1000 * 0.8, headers: { "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9", "User-Agent": "Uptime-Kuma/" + version, ...(this.headers ? JSON.parse(this.headers) : {}), ...(basicAuthHeader), + ...(contentType ? { "Content-Type": contentType } : {}) }, maxRedirects: this.maxredirects, validateStatus: (status) => { diff --git a/server/server.js b/server/server.js index 2a2c4bf61..616a10cda 100644 --- a/server/server.js +++ b/server/server.js @@ -693,6 +693,7 @@ let needSetup = false; bean.authMethod = monitor.authMethod; bean.authWorkstation = monitor.authWorkstation; bean.authDomain = monitor.authDomain; + bean.httpBodyEncoding = monitor.httpBodyEncoding; await R.store(bean); diff --git a/src/pages/EditMonitor.vue b/src/pages/EditMonitor.vue index 7dcc7d64b..b4aceba7b 100644 --- a/src/pages/EditMonitor.vue +++ b/src/pages/EditMonitor.vue @@ -398,8 +398,8 @@
- - @@ -660,7 +660,7 @@ export default { mqttTopic: "", mqttSuccessMessage: "", authMethod: null, - bodyEncoding: null + httpBodyEncoding: "json" }; if (this.$root.proxyList && !this.monitor.proxyId) { @@ -698,7 +698,8 @@ export default { * @returns {boolean} Is the form input valid? */ isInputValid() { - if (this.monitor.body) { + //TODO: Handle validation for all 3 possible options + null value + if (this.monitor.body && (!this.monitor.httpBodyEncoding || this.monitor.httpBodyEncoding === "json")) { try { JSON.parse(this.monitor.body); } catch (err) { @@ -729,8 +730,8 @@ export default { return; } - // Beautify the JSON format - if (this.monitor.body) { + // Beautify the JSON format (only if httpBodyEncoding is not set or === json) + if (this.monitor.body && (!this.monitor.httpBodyEncoding || this.monitor.httpBodyEncoding === "json")) { this.monitor.body = JSON.stringify(JSON.parse(this.monitor.body), null, 4); } From 31cc328839c9462169070b4b67ba4044fb6716d8 Mon Sep 17 00:00:00 2001 From: Justin Tisdale Date: Thu, 11 Aug 2022 21:08:13 -0400 Subject: [PATCH 005/171] fix lint --- server/model/monitor.js | 2 +- src/languages/en.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/server/model/monitor.js b/server/model/monitor.js index 5d9c4cd42..8f30a0c1d 100644 --- a/server/model/monitor.js +++ b/server/model/monitor.js @@ -252,7 +252,7 @@ class Monitor extends BeanModel { let bodyValue = null; let contentType = null; - if (this.body && !this.httpBodyEncoding || this.httpBodyEncoding === "json"){ + if (this.body && !this.httpBodyEncoding || this.httpBodyEncoding === "json") { bodyValue = JSON.parse(this.body); contentType = "application/json"; } else if (this.body && (this.httpBodyEncoding === "xml")) { diff --git a/src/languages/en.js b/src/languages/en.js index e338d7785..31d926287 100644 --- a/src/languages/en.js +++ b/src/languages/en.js @@ -559,5 +559,5 @@ export default { disableCloudflaredNoAuthMsg: "You are in No Auth mode, password is not require.", trustProxyDescription: "Trust 'X-Forwarded-*' headers. If you want to get the correct client IP and your Uptime Kuma is behind such as Nginx or Apache, you should enable this.", wayToGetLineNotifyToken: "You can get an access token from {0}", - "Body Encoding": "Body Encoding" + "Body Encoding": "Body Encoding", }; From 5809088f27eb9604b043b782ac375f1feecc2e5a Mon Sep 17 00:00:00 2001 From: Justin Tisdale Date: Mon, 26 Sep 2022 15:52:43 -0400 Subject: [PATCH 006/171] Don't override a user-defined content-type header --- server/model/monitor.js | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/server/model/monitor.js b/server/model/monitor.js index 509b841c2..c541ecf36 100644 --- a/server/model/monitor.js +++ b/server/model/monitor.js @@ -249,20 +249,28 @@ class Monitor extends BeanModel { log.debug("monitor", `[${this.name}] Prepare Options for axios`); - // Set content-type header and body values based on the httpBodyEncoding type selected - // TODO: Check if this.headers already contains a content-type header set by the user; if so, don't inject one - let bodyValue = null; - let contentType = null; + + // Check if this.headers already contains a content-type header set by the user; if so, don't inject one + let contentTypeUserDefinedHeader = this.headers.find(function(header) { + return header[0].toLowerCase() == "content-type"; + }); + + let contentType = contentTypeUserDefinedHeader ? + contentTypeUserDefinedHeader[1] : + null; + + let bodyValue = null; + if (this.body && !this.httpBodyEncoding || this.httpBodyEncoding === "json") { bodyValue = JSON.parse(this.body); - contentType = "application/json"; + contentType = contentType ? contentType : "application/json"; } else if (this.body && (this.httpBodyEncoding === "xml")) { bodyValue = this.body; - contentType = "text/xml"; + contentType = contentType ? contentType : "text/xml"; } else if (this.body && (this.httpBodyEncoding === "form")) { bodyValue = this.body; - contentType = "application/x-www-form-urlencoded"; + contentType = contentType ? contentType : "application/x-www-form-urlencoded"; } const options = { From 6537f4fe746c157c8a87ff25bbcefeb7a62522f3 Mon Sep 17 00:00:00 2001 From: Justin Tisdale Date: Mon, 26 Sep 2022 17:09:10 -0400 Subject: [PATCH 007/171] content-type change --- server/model/monitor.js | 18 ++++-------------- 1 file changed, 4 insertions(+), 14 deletions(-) diff --git a/server/model/monitor.js b/server/model/monitor.js index c541ecf36..48b0b1d32 100644 --- a/server/model/monitor.js +++ b/server/model/monitor.js @@ -249,28 +249,18 @@ class Monitor extends BeanModel { log.debug("monitor", `[${this.name}] Prepare Options for axios`); - - - // Check if this.headers already contains a content-type header set by the user; if so, don't inject one - let contentTypeUserDefinedHeader = this.headers.find(function(header) { - return header[0].toLowerCase() == "content-type"; - }); - - let contentType = contentTypeUserDefinedHeader ? - contentTypeUserDefinedHeader[1] : - null; - + let contentType = null; let bodyValue = null; if (this.body && !this.httpBodyEncoding || this.httpBodyEncoding === "json") { bodyValue = JSON.parse(this.body); - contentType = contentType ? contentType : "application/json"; + contentType = "application/json"; } else if (this.body && (this.httpBodyEncoding === "xml")) { bodyValue = this.body; - contentType = contentType ? contentType : "text/xml"; + contentType = "text/xml"; } else if (this.body && (this.httpBodyEncoding === "form")) { bodyValue = this.body; - contentType = contentType ? contentType : "application/x-www-form-urlencoded"; + contentType = "application/x-www-form-urlencoded"; } const options = { From f6919aef1d3b59dd23229feef6f2815004f34a80 Mon Sep 17 00:00:00 2001 From: Justin Tisdale Date: Mon, 26 Sep 2022 17:10:56 -0400 Subject: [PATCH 008/171] remove TODO --- src/pages/EditMonitor.vue | 1 - 1 file changed, 1 deletion(-) diff --git a/src/pages/EditMonitor.vue b/src/pages/EditMonitor.vue index ba6676703..ea246c600 100644 --- a/src/pages/EditMonitor.vue +++ b/src/pages/EditMonitor.vue @@ -741,7 +741,6 @@ export default { * @returns {boolean} Is the form input valid? */ isInputValid() { - //TODO: Handle validation for all 3 possible options + null value if (this.monitor.body && (!this.monitor.httpBodyEncoding || this.monitor.httpBodyEncoding === "json")) { try { JSON.parse(this.monitor.body); From 4a7e96f9ea6235d797b3a0f68b8300d82aadfea6 Mon Sep 17 00:00:00 2001 From: Louis Lam Date: Thu, 6 Oct 2022 12:08:10 +0800 Subject: [PATCH 009/171] Init C# Project for building exe --- .dockerignore | 5 +- .gitignore | 3 + extra/exe-builder/App.config | 10 ++ extra/exe-builder/Program.cs | 59 +++++++++ extra/exe-builder/Properties/AssemblyInfo.cs | 36 ++++++ .../Properties/Resources.Designer.cs | 62 ++++++++++ extra/exe-builder/Properties/Resources.resx | 117 ++++++++++++++++++ .../Properties/Settings.Designer.cs | 23 ++++ .../exe-builder/Properties/Settings.settings | 7 ++ extra/exe-builder/UptimeKuma.csproj | 79 ++++++++++++ extra/exe-builder/UptimeKuma.sln | 16 +++ .../UptimeKuma.sln.DotSettings.user | 3 + 12 files changed, 418 insertions(+), 2 deletions(-) create mode 100644 extra/exe-builder/App.config create mode 100644 extra/exe-builder/Program.cs create mode 100644 extra/exe-builder/Properties/AssemblyInfo.cs create mode 100644 extra/exe-builder/Properties/Resources.Designer.cs create mode 100644 extra/exe-builder/Properties/Resources.resx create mode 100644 extra/exe-builder/Properties/Settings.Designer.cs create mode 100644 extra/exe-builder/Properties/Settings.settings create mode 100644 extra/exe-builder/UptimeKuma.csproj create mode 100644 extra/exe-builder/UptimeKuma.sln create mode 100644 extra/exe-builder/UptimeKuma.sln.DotSettings.user diff --git a/.dockerignore b/.dockerignore index babc429a2..22b71b38c 100644 --- a/.dockerignore +++ b/.dockerignore @@ -31,6 +31,7 @@ tsconfig.json /tmp /babel.config.js /ecosystem.config.js +extra/exe-builder ### .gitignore content (commented rules are duplicated) @@ -45,6 +46,6 @@ dist-ssr #!/data/.gitkeep #.vscode - - ### End of .gitignore content + + diff --git a/.gitignore b/.gitignore index 8eb05867b..8e0edeacb 100644 --- a/.gitignore +++ b/.gitignore @@ -16,3 +16,6 @@ dist-ssr cypress/videos cypress/screenshots + +extra/exe-builder/bin +extra/exe-builder/obj diff --git a/extra/exe-builder/App.config b/extra/exe-builder/App.config new file mode 100644 index 000000000..09265d8b6 --- /dev/null +++ b/extra/exe-builder/App.config @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/extra/exe-builder/Program.cs b/extra/exe-builder/Program.cs new file mode 100644 index 000000000..5516a1ff0 --- /dev/null +++ b/extra/exe-builder/Program.cs @@ -0,0 +1,59 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; +using System.Reflection; +using System.Threading.Tasks; +using System.Windows.Forms; +using UptimeKuma.Properties; + +namespace UptimeKuma { + static class Program { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new UptimeKumaApplicationContext()); + } + } + + public class UptimeKumaApplicationContext : ApplicationContext + { + private NotifyIcon trayIcon; + + public UptimeKumaApplicationContext() + { + // Initialize Tray Icon + trayIcon = new NotifyIcon(); + + trayIcon.Icon = Icon.ExtractAssociatedIcon(Assembly.GetExecutingAssembly().Location); + trayIcon.ContextMenu = new ContextMenu(new MenuItem[] { + new MenuItem("Check for Update", CheckForUpdate), + new MenuItem("About", About), + new MenuItem("Exit", Exit), + }); + + trayIcon.Visible = true; + } + + void Exit(object sender, EventArgs e) + { + // Hide tray icon, otherwise it will remain shown until user mouses over it + trayIcon.Visible = false; + Application.Exit(); + } + + void About(object sender, EventArgs e) + { + MessageBox.Show("Uptime Kuma v1.0.0" + Environment.NewLine + "© 2022 Louis Lam", "Info"); + } + + void CheckForUpdate(object sneder, EventArgs e) { + + } + } +} + diff --git a/extra/exe-builder/Properties/AssemblyInfo.cs b/extra/exe-builder/Properties/AssemblyInfo.cs new file mode 100644 index 000000000..2552870b3 --- /dev/null +++ b/extra/exe-builder/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Uptime Kuma")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Uptime Kuma")] +[assembly: AssemblyCopyright("Copyright © 2022 Louis Lam")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("2DB53988-1D93-4AC0-90C4-96ADEAAC5C04")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/extra/exe-builder/Properties/Resources.Designer.cs b/extra/exe-builder/Properties/Resources.Designer.cs new file mode 100644 index 000000000..8c8e559c5 --- /dev/null +++ b/extra/exe-builder/Properties/Resources.Designer.cs @@ -0,0 +1,62 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace UptimeKuma.Properties { + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", + "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", + "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState + .Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if ((resourceMan == null)) { + global::System.Resources.ResourceManager temp = + new global::System.Resources.ResourceManager("UptimeKuma.Properties.Resources", + typeof(Resources).Assembly); + resourceMan = temp; + } + + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState + .Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { return resourceCulture; } + set { resourceCulture = value; } + } + } +} \ No newline at end of file diff --git a/extra/exe-builder/Properties/Resources.resx b/extra/exe-builder/Properties/Resources.resx new file mode 100644 index 000000000..ffecec851 --- /dev/null +++ b/extra/exe-builder/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/extra/exe-builder/Properties/Settings.Designer.cs b/extra/exe-builder/Properties/Settings.Designer.cs new file mode 100644 index 000000000..6c63b395b --- /dev/null +++ b/extra/exe-builder/Properties/Settings.Designer.cs @@ -0,0 +1,23 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace UptimeKuma.Properties { + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute( + "Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + private static Settings defaultInstance = + ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default { + get { return defaultInstance; } + } + } +} \ No newline at end of file diff --git a/extra/exe-builder/Properties/Settings.settings b/extra/exe-builder/Properties/Settings.settings new file mode 100644 index 000000000..abf36c5d3 --- /dev/null +++ b/extra/exe-builder/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/extra/exe-builder/UptimeKuma.csproj b/extra/exe-builder/UptimeKuma.csproj new file mode 100644 index 000000000..d62166e41 --- /dev/null +++ b/extra/exe-builder/UptimeKuma.csproj @@ -0,0 +1,79 @@ + + + + + Debug + AnyCPU + {2DB53988-1D93-4AC0-90C4-96ADEAAC5C04} + WinExe + UptimeKuma + uptime-kuma + v4.7.2 + 512 + true + true + ..\..\public\favicon.ico + 10 + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + + + + + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + + + favicon.ico + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + + + \ No newline at end of file diff --git a/extra/exe-builder/UptimeKuma.sln b/extra/exe-builder/UptimeKuma.sln new file mode 100644 index 000000000..201d7e234 --- /dev/null +++ b/extra/exe-builder/UptimeKuma.sln @@ -0,0 +1,16 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UptimeKuma", "UptimeKuma.csproj", "{2DB53988-1D93-4AC0-90C4-96ADEAAC5C04}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {2DB53988-1D93-4AC0-90C4-96ADEAAC5C04}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2DB53988-1D93-4AC0-90C4-96ADEAAC5C04}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2DB53988-1D93-4AC0-90C4-96ADEAAC5C04}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2DB53988-1D93-4AC0-90C4-96ADEAAC5C04}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection +EndGlobal diff --git a/extra/exe-builder/UptimeKuma.sln.DotSettings.user b/extra/exe-builder/UptimeKuma.sln.DotSettings.user new file mode 100644 index 000000000..b4ca9dadf --- /dev/null +++ b/extra/exe-builder/UptimeKuma.sln.DotSettings.user @@ -0,0 +1,3 @@ + + True + True \ No newline at end of file From da778f05ac30a681eeb71735dd21fc86eaef4a23 Mon Sep 17 00:00:00 2001 From: Louis Lam Date: Fri, 7 Oct 2022 00:16:07 +0800 Subject: [PATCH 010/171] Update --- extra/exe-builder/Program.cs | 42 ++++++++++++++++++++++++++++++------ 1 file changed, 35 insertions(+), 7 deletions(-) diff --git a/extra/exe-builder/Program.cs b/extra/exe-builder/Program.cs index 5516a1ff0..840bc873c 100644 --- a/extra/exe-builder/Program.cs +++ b/extra/exe-builder/Program.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Diagnostics; using System.Drawing; using System.Linq; using System.Reflection; @@ -23,6 +24,7 @@ namespace UptimeKuma { public class UptimeKumaApplicationContext : ApplicationContext { private NotifyIcon trayIcon; + private Process process; public UptimeKumaApplicationContext() { @@ -31,19 +33,41 @@ namespace UptimeKuma { trayIcon.Icon = Icon.ExtractAssociatedIcon(Assembly.GetExecutingAssembly().Location); trayIcon.ContextMenu = new ContextMenu(new MenuItem[] { + new MenuItem("Open", Open), new MenuItem("Check for Update", CheckForUpdate), new MenuItem("About", About), new MenuItem("Exit", Exit), }); trayIcon.Visible = true; + + var startInfo = new ProcessStartInfo(); + startInfo.FileName = "node/node.exe"; + startInfo.Arguments = "server/server.js"; + startInfo.RedirectStandardOutput = true; + startInfo.RedirectStandardError = true; + startInfo.UseShellExecute = false; + startInfo.CreateNoWindow = true; + startInfo.WorkingDirectory = "core"; + + process = new Process(); + process.StartInfo = startInfo; + process.EnableRaisingEvents = true; + try { + process.Start(); + Open(null, null); + } catch (Exception e) { + MessageBox.Show("Startup failed: " + e.Message, "Uptime Kuma Error"); + throw; + } } - void Exit(object sender, EventArgs e) - { - // Hide tray icon, otherwise it will remain shown until user mouses over it - trayIcon.Visible = false; - Application.Exit(); + void Open(object sender, EventArgs e) { + Process.Start("http://localhost:3001"); + } + + void CheckForUpdate(object sender, EventArgs e) { + } void About(object sender, EventArgs e) @@ -51,8 +75,12 @@ namespace UptimeKuma { MessageBox.Show("Uptime Kuma v1.0.0" + Environment.NewLine + "© 2022 Louis Lam", "Info"); } - void CheckForUpdate(object sneder, EventArgs e) { - + void Exit(object sender, EventArgs e) + { + // Hide tray icon, otherwise it will remain shown until user mouses over it + trayIcon.Visible = false; + process.Close(); + Application.Exit(); } } } From 4c456547807dc3fb4d6de0a4da741ef252cb5c7e Mon Sep 17 00:00:00 2001 From: Louis Lam Date: Fri, 7 Oct 2022 18:38:14 +0800 Subject: [PATCH 011/171] WIP --- extra/exe-builder/Program.cs | 69 +++++++++++++++++++++-------- extra/exe-builder/UptimeKuma.csproj | 5 ++- 2 files changed, 55 insertions(+), 19 deletions(-) diff --git a/extra/exe-builder/Program.cs b/extra/exe-builder/Program.cs index 840bc873c..84ecda317 100644 --- a/extra/exe-builder/Program.cs +++ b/extra/exe-builder/Program.cs @@ -4,6 +4,7 @@ using System.Diagnostics; using System.Drawing; using System.Linq; using System.Reflection; +using System.Runtime.InteropServices; using System.Threading.Tasks; using System.Windows.Forms; using UptimeKuma.Properties; @@ -14,7 +15,7 @@ namespace UptimeKuma { /// The main entry point for the application. /// [STAThread] - static void Main() { + static void Main(string[] args) { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new UptimeKumaApplicationContext()); @@ -28,37 +29,44 @@ namespace UptimeKuma { public UptimeKumaApplicationContext() { - // Initialize Tray Icon trayIcon = new NotifyIcon(); trayIcon.Icon = Icon.ExtractAssociatedIcon(Assembly.GetExecutingAssembly().Location); trayIcon.ContextMenu = new ContextMenu(new MenuItem[] { - new MenuItem("Open", Open), - new MenuItem("Check for Update", CheckForUpdate), - new MenuItem("About", About), - new MenuItem("Exit", Exit), + new("Open", Open), + //new("Debug Console", DebugConsole), + new("Check for Update...", CheckForUpdate), + new("Visit GitHub...", VisitGitHub), + new("About", About), + new("Exit", Exit), }); + trayIcon.MouseDoubleClick += new MouseEventHandler(Open); + trayIcon.Visible = true; - var startInfo = new ProcessStartInfo(); - startInfo.FileName = "node/node.exe"; - startInfo.Arguments = "server/server.js"; - startInfo.RedirectStandardOutput = true; - startInfo.RedirectStandardError = true; - startInfo.UseShellExecute = false; - startInfo.CreateNoWindow = true; - startInfo.WorkingDirectory = "core"; + var startInfo = new ProcessStartInfo { + FileName = "node/node.exe", + Arguments = "server/server.js --data-dir=\"../data/\"", + RedirectStandardOutput = false, + RedirectStandardError = false, + UseShellExecute = false, + CreateNoWindow = true, + WorkingDirectory = "core" + }; process = new Process(); process.StartInfo = startInfo; process.EnableRaisingEvents = true; + process.Exited += new EventHandler(ProcessExited); + + try { process.Start(); - Open(null, null); + //Open(null, null); + } catch (Exception e) { MessageBox.Show("Startup failed: " + e.Message, "Uptime Kuma Error"); - throw; } } @@ -66,10 +74,19 @@ namespace UptimeKuma { Process.Start("http://localhost:3001"); } - void CheckForUpdate(object sender, EventArgs e) { + void DebugConsole(object sender, EventArgs e) { } + void CheckForUpdate(object sender, EventArgs e) { + Process.Start("https://github.com/louislam/uptime-kuma/releases"); + } + + void VisitGitHub(object sender, EventArgs e) + { + Process.Start("https://github.com/louislam/uptime-kuma"); + } + void About(object sender, EventArgs e) { MessageBox.Show("Uptime Kuma v1.0.0" + Environment.NewLine + "© 2022 Louis Lam", "Info"); @@ -79,9 +96,25 @@ namespace UptimeKuma { { // Hide tray icon, otherwise it will remain shown until user mouses over it trayIcon.Visible = false; - process.Close(); + process.Kill(); + } + + void ProcessExited(object sender, EventArgs e) { + + if (process.ExitCode != 0) { + var line = ""; + while (!process.StandardOutput.EndOfStream) + { + line += process.StandardOutput.ReadLine(); + } + + MessageBox.Show("Uptime Kuma exited unexpectedly. Exit code: " + process.ExitCode + " " + line); + } + + trayIcon.Visible = false; Application.Exit(); } + } } diff --git a/extra/exe-builder/UptimeKuma.csproj b/extra/exe-builder/UptimeKuma.csproj index d62166e41..c3c6aad27 100644 --- a/extra/exe-builder/UptimeKuma.csproj +++ b/extra/exe-builder/UptimeKuma.csproj @@ -13,7 +13,7 @@ true true ..\..\public\favicon.ico - 10 + 9 AnyCPU @@ -34,6 +34,9 @@ prompt 4 + + COPY "$(SolutionDir)bin\Debug\uptime-kuma.exe" "C:\Users\LouisLam\Desktop\uptime-kuma-win64\" + From 3eaccb560ed1a0590a6bb3bf7f73765bbe06db00 Mon Sep 17 00:00:00 2001 From: Louis Lam Date: Sat, 8 Oct 2022 16:23:11 +0800 Subject: [PATCH 012/171] Implement Download Logic --- extra/exe-builder/DownloadForm.Designer.cs | 84 +++++ extra/exe-builder/DownloadForm.cs | 65 ++++ extra/exe-builder/DownloadForm.resx | 377 +++++++++++++++++++++ extra/exe-builder/Program.cs | 23 +- extra/exe-builder/UptimeKuma.csproj | 9 + 5 files changed, 554 insertions(+), 4 deletions(-) create mode 100644 extra/exe-builder/DownloadForm.Designer.cs create mode 100644 extra/exe-builder/DownloadForm.cs create mode 100644 extra/exe-builder/DownloadForm.resx diff --git a/extra/exe-builder/DownloadForm.Designer.cs b/extra/exe-builder/DownloadForm.Designer.cs new file mode 100644 index 000000000..26a474e9c --- /dev/null +++ b/extra/exe-builder/DownloadForm.Designer.cs @@ -0,0 +1,84 @@ +using System.ComponentModel; + +namespace UptimeKuma { + partial class DownloadForm { + /// + /// Required designer variable. + /// + private IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) { + if (disposing && (components != null)) { + components.Dispose(); + } + + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(DownloadForm)); + this.progressBar = new System.Windows.Forms.ProgressBar(); + this.label = new System.Windows.Forms.Label(); + this.labelData = new System.Windows.Forms.Label(); + this.SuspendLayout(); + // + // progressBar + // + this.progressBar.Location = new System.Drawing.Point(12, 12); + this.progressBar.Name = "progressBar"; + this.progressBar.Size = new System.Drawing.Size(472, 41); + this.progressBar.TabIndex = 0; + // + // label + // + this.label.Location = new System.Drawing.Point(12, 59); + this.label.Name = "label"; + this.label.Size = new System.Drawing.Size(472, 23); + this.label.TabIndex = 1; + this.label.Text = "Preparing..."; + // + // labelData + // + this.labelData.Location = new System.Drawing.Point(12, 82); + this.labelData.Name = "labelData"; + this.labelData.Size = new System.Drawing.Size(472, 23); + this.labelData.TabIndex = 2; + // + // DownloadForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(496, 117); + this.Controls.Add(this.labelData); + this.Controls.Add(this.label); + this.Controls.Add(this.progressBar); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MaximizeBox = false; + this.Name = "DownloadForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Uptime Kuma"; + this.Load += new System.EventHandler(this.DownloadForm_Load); + this.ResumeLayout(false); + } + + private System.Windows.Forms.Label labelData; + + private System.Windows.Forms.Label label; + + private System.Windows.Forms.ProgressBar progressBar; + + #endregion + } +} + diff --git a/extra/exe-builder/DownloadForm.cs b/extra/exe-builder/DownloadForm.cs new file mode 100644 index 000000000..9c740e312 --- /dev/null +++ b/extra/exe-builder/DownloadForm.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.IO; +using System.Net; +using System.Windows.Forms; + +namespace UptimeKuma { + public partial class DownloadForm : Form { + private readonly Queue downloadQueue = new(); + private readonly WebClient webClient = new(); + + public DownloadForm() { + InitializeComponent(); + } + + private void DownloadForm_Load(object sender, EventArgs e) { + webClient.DownloadProgressChanged += DownloadProgressChanged; + webClient.DownloadFileCompleted += DownloadFileCompleted; + + if (!File.Exists("node")) { + downloadQueue.Enqueue(new DownloadItem { + URL = "https://nodejs.org/dist/v16.17.1/node-v16.17.1-win-x64.zip", + Filename = "node.zip" + }); + } + + if (!File.Exists("node")) { + downloadQueue.Enqueue(new DownloadItem { + URL = "https://github.com/louislam/uptime-kuma/archive/refs/tags/1.18.3.zip", + Filename = "core.zip" + }); + } + + DownloadNextFile(); + } + + void DownloadNextFile() { + if (downloadQueue.Count > 0) { + var item = downloadQueue.Dequeue(); + label.Text = item.URL; + webClient.DownloadFileAsync(new Uri(item.URL), item.Filename); + } else { + // TODO: Finished, extract? + } + } + + void DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e) { + progressBar.Value = e.ProgressPercentage; + var total = e.TotalBytesToReceive / 1024; + var current = e.BytesReceived / 1024; + labelData.Text = $"{current}KB/{total}KB"; + } + + void DownloadFileCompleted(object sender, AsyncCompletedEventArgs e) { + DownloadNextFile(); + } + } + + public class DownloadItem { + public string URL { get; set; } + public string Filename { get; set; } + } +} + diff --git a/extra/exe-builder/DownloadForm.resx b/extra/exe-builder/DownloadForm.resx new file mode 100644 index 000000000..e87e0c0d4 --- /dev/null +++ b/extra/exe-builder/DownloadForm.resx @@ -0,0 +1,377 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAMAMDAAAAEAIACoJQAANgAAACAgAAABACAAqBAAAN4lAAAQEAAAAQAgAGgEAACGNgAAKAAAADAA + AABgAAAAAQAgAAAAAAAAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA////BPT09Bfu7u4e8fHxJPPz8yv19fUy9fX1M/Pz8yvx8fEk9vb2HPPz8xXMzMwFAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + /wHv7+8f7u7uPPPz81Tx8fFs8fHxgPHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx + 8YLx8fGB8fHxcfHx8V3x8fFI9PT0MOvr6w0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADy8vIU8fHxS/Dw8Hbx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx + 8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fFr9PT0R/Dw8CIAAAABAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA8vLyFPHx8Vnx8fGB8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx + 8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx + 8YLx8fFs9fX1Mb+/vwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAICAgALy8vI88fHxfvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx + 8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx + 8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvLy8nby8vI8gICAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAzMzMBfHx8Vrx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx + 8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx + 8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8vLyYf///wwAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMzMwF8vLyYPHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx + 8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx + 8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx + 8W/z8/MWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADv7+9R8fHxgvHx8YLx8fGC8fHxgvHx + 8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx + 8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx + 8YLx8fGC8fHxgvHx8YLw8PB26urqDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPLy8ijx8fGC8fHxgvHx + 8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgu7w7Ifj79ud2u7PtNLrw83P677dzeu85c3r + u+rM67rwzOu68c7rverQ68Dj0uvD3NbuyM3b7c+64u7apujv5ZPx8fGC8fHxgvHx8YLx8fGC8fHxgvHx + 8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxXgAAAAEAAAAAAAAAAAAAAAAAAAAA4+PjCfDw + 8Hfx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLd7tSmzeu92MbqsvvG6bH/xumy/8fq + s//H6rP/yOq0/8jqtf/J6rb/yeq2/8rrt//K67j/y+u4/8vruf/M67r/zOu7/83ru//Q7MDx1u7Kz9/t + 163s8OuJ8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgu/v7y8AAAAAAAAAAAAA + AAAAAAAA7u7uPfHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC5PDdl8jqtuTE6a7/xOmv/8Xp + sP/G6bH/xumx/8bpsv/H6rP/x+qz/8jqtP/I6rX/yeq2/8nqtv/K67f/yuu4/8vruP/L67n/zOu6/8zr + u//N67v/zey8/87svf/P67742e3Mx+jv5ZLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvDw + 8HWAgIACAAAAAAAAAACqqqoD8vLyc/Hx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLf7degxOiu+cPo + rf/D6a7/xOmu/8Xpr//F6bD/xumx/8bpsf/G6bL/x+qz/8fqs//I6rT/yOq1/8nqtv/J6rb/yuu3/8rr + uP/L67j/y+u5/8zruv/M67v/zeu7/83svP/O7L3/zuy9/87svfzc7tK28fHxgvHx8YLx8fGC8fHxgvHx + 8YLx8fGC8fHxgvHx8YLx8fEkAAAAAAAAAADz8/Mq8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgunv + 5o3D6a/0wuis/8Lorf/D6K3/xOmu/8Tprv/F6a//xemw/8bpsf/G6bH/xumy/8fqs//H6rP/yOq0/8jq + tf/J6rb/yeq2/8rrt//K67j/y+u4/8vruf/M67r/zOu7/83ru//N7Lz/zuy9/87svf/O7L3/3e/TtPHx + 8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLy8vJNAAAAAAAAAADy8vJM8fHxgvHx8YLx8fGC8fHxgvHx + 8YLx8fGC8fHxgszqutDB6Kv/weir/8LorP/D6K3/w+it/8Tprv/E6a7/xemv/8XpsP/G6bH/xumx/8bp + sv/H6rP/x+qz/8jqtP/I6rX/yeq2/8nqtv/K67f/yuu4/8vruP/L67n/zOu6/8zru//N67v/zey8/87s + vf/O7L3/zuy++u3w6Yzx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLy8vJ1AAAAAAAAAADx8fFr8fHxgvHx + 8YLx8fGC8fHxgvHx8YLx8fGC6O/kjsDoqvzA6Kr/weir/8Loq//C6Kz/w+it/8Porf/E6a7/xOmu/8Xp + r//F6bD/xumx/8bpsf/G6bL/x+qz/8fqtP/I6rT/yOq1/8nqtv/J6rb/yuu3/8rruP/L67n/y+u5/8zr + uv/M67v/zeu7/83svP/O7L3/zuy9/93u07Xx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC////Bv// + /wfx8fGB8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC1ezJsr/nqf/A56n/weiq/8Hoq//C6Kv/wuis/8Po + rf/D6K3/xOmu/8Pprv+856T/uOed/7bmmv+05Zf/teWZ/7jnnf+86KP/wOio/8fqs//J6rb/yeq2/8rr + t//K67j/y+u5/8vruf/M67r/zOu7/83ru//N7Lz/zuy9/9buyNLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx + 8YLx8fGC8vLyE/Ly8hPx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGCy+q6zr/nqP/A56n/wOep/8Ho + qv/B6Kv/wuir/8LorP+u5Y//neF2/5bgav+V4Gr/luBr/5fhbP+Y4W7/meFv/5rhcf+b4nL/nOJ0/53i + dv+j5H//reaM/7nnnf/E6q//y+y4/8vruf/L67n/zOu6/8zru//N67v/zey8/9Lsxd/x8fGC8fHxgvHx + 8YLx8fGC8fHxgvHx8YLx8fGC7+/vIPb29hzx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGCx+m03L/n + qP+/56j/wOep/8Dnqf/B6Kr/weir/7nmn/+R32T/kt9l/5PfZ/+U4Gj/leBq/5bga/+X4W3/mOFu/5nh + b/+a4XH/m+Jy/5zidP+d4nX/nuN3/5/jeP+f4nn/weqq/8rruP/L67n/y+u5/8zruv/M67v/zeu7/9Ls + w+Lx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8PDwI/Hx8SXx8fGC8fHxgvHx8YLx8fGC8fHxgvHx + 8YLx8fGCxeix5L/nqP+/56j/v+eo/8Dnqf/A56n/weiq/7Pllv+Q3mP/kd9k/5LfZf+T32f/lOBo/5Xg + av+W4Gv/l+Ft/5jhbv+Z4W//muFx/5vicv+c4nT/neJ1/57jd/+f43j/xOmu/8rrt//K67j/y+u5/8vr + uf/M67r/zOu7/9Tsxtfx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC9PT0GO/v7yDx8fGC8fHxgvHx + 8YLx8fGC8fHxgvHx8YLx8fGCx+m037/nqP+/56j/v+eo/7/nqP/A56n/wOip/7TmmP+P3mH/kN5j/5Hf + ZP+S32b/k99n/5TgaP+V4Gr/luBr/5fhbf+Y4W7/meFw/5rhcf+b4nL/nOJ0/53idf+h5Hz/yuu2/8nq + t//K67f/yuu4/8vruf/L67n/zOu6/9ftysrx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC7e3tDvT0 + 9Bfx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGCyOq117/nqP+/56j/v+eo/7/nqP+/56j/wOep/7vn + of+O3mD/j95h/5DeY/+R32T/kt9m/5PfZ/+U4Gj/leBq/5bga/+X4W3/mOFu/5nhcP+a4nH/m+Jy/5zi + dP+r5Yr/yOq1/8nqtv/J6rf/yuu3/8rruP/L67n/y+u5/9zu1LHx8fGC8fHxgvHx8YLx8fGC8fHxgvHx + 8YLz8/OA////A+7u7g/x8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGCz+q+xb/nqP+/56j/v+eo/7/n + qP+/56j/v+eo/8Dnqf+S4Gb/jt5g/4/eYf+Q3mP/kd9k/5LfZv+T32f/lOBo/5Xgav+W4Gv/l+Ft/5jh + bv+Z4XD/muJx/5vic/+4553/yOq0/8jqtf/J6rb/yeq3/8rrt//K67j/y+u5/+bw4Zfx8fGC8fHxgvHx + 8YLx8fGC8fHxgvHx8YLx8fFrAAAAAP///wHz8/N88fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC1+zMrr/n + qP+/56j/v+eo/7/nqP+/56j/v+eo/7/nqP+f4Xn/jd5f/47eYP+P3mH/kN5j/5HfZP+S32b/k99n/5Tg + af+V4Gr/luBr/5fhbf+Y4W7/meFw/5vic//F6rD/x+q0/8jqtP/I6rX/yeq2/8nqt//K67f/zOu88u/x + 74Px8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLv7+9QAAAAAAAAAADw8PBm8fHxgvHx8YLx8fGC8fHxgvHx + 8YLx8fGC5e7gk7/nqP+/56j/v+eo/7/nqP+/56j/v+eo/7/nqP+u5I//jN1d/43eX/+O3mD/j95h/5De + Y/+R32T/kt9m/5PfZ/+U4Gn/leBq/5bga/+X4W3/mOFu/6rliP/G6rL/x+qz/8fqtP/I6rT/yOq1/8nq + tv/J6rf/1OzGy/Hx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YL19fUzAAAAAAAAAADy8vJO8fHxgvHx + 8YLx8fGC8fHxgvHx8YLx8fGC8fHxgsPoru2/56j/v+eo/7/nqP+/56j/v+eo/7/nqP++6Kf/j95i/4zd + Xf+N3l//jt5g/4/eYv+Q3mP/kd9k/5LfZv+T32f/lOBp/5Xgav+W4Gz/l+Ft/7voov/G6bL/xuqy/8fq + s//H6rT/yOq1/8jqtf/J6rb/4e/Zo/Hx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLw8PARAAAAAAAA + AADu7u4u8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgszpvMm/56j/v+eo/7/nqP+/56j/v+eo/7/n + qP+/56j/q+SL/4vdXP+M3V3/jd5f/47eYP+P3mL/kN9j/5HfZP+S32b/k99n/5Tgaf+V4Gr/qOOH/8Xp + sP/G6bH/xumy/8bqsv/H6rP/x+q0/8jqtf/K67jy8PHwhPHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx + 8WoAAAAAAAAAAAAAAADo6OgL8fHxgfHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxguDv2J2/56j/v+eo/7/n + qP+/56j/v+eo/7/nqP+/56j/v+eo/6Xjgv+L3Vz/jN1d/43eX/+O3mD/j95i/5DfY/+R32T/kt9m/5Pf + Z/+k44D/xOmu/8XpsP/F6bD/xumx/8bpsv/G6rL/x+qz/8fqtP/W7cnB8fHxgvHx8YLx8fGC8fHxgvHx + 8YLx8fGC8fHxgvPz80AAAAAAAAAAAAAAAAAAAAAA8PDwZ/Hx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx + 8YLD6K/rv+eo/7/nqP+/56j/v+eo/7/nqP+/56j/v+eo/7/nqP+u5I//kt5n/4zdXf+N3l//jt5g/4/e + Yv+Q32P/luFs/67kj//D6K3/xOmu/8Tpr//F6bD/xemw/8bpsf/G6bL/xuqy/8fqtP7o7+WR8fHxgvHx + 8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvPz8xYAAAAAAAAAAAAAAAAAAAAA8vLyPPHx8YLx8fGC8fHxgvHx + 8YLx8fGC8fHxgvHx8YLV7ci0v+eo/7/nqP+/56j/v+eo/7/nqP+/56j/v+eo/7/nqP+/56j/wOio/7Xl + mv+u5I7/rOSM/67kj/+35pz/wumr/8Lorf/D6K3/w+it/8Tprv/E6a//xemw/8XpsP/G6bH/xumy/9Ds + wNPx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8vLyZQAAAAAAAAAAAAAAAAAAAAAAAAAA////DPHx + 8YDx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGCx+m03L/nqP+/56j/v+eo/7/nqP+/56j/v+eo/7/n + qP+/56j/v+eo/7/nqP+/56j/wOep/8Doqv/B6Kr/weir/8LorP/C6K3/w+it/8Porv/E6a7/xOmv/8Xp + sP/F6bD/yOq18uvw6Yvx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC7+/vMQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAPHx8Vzx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC6O/ij8LorPG/56j/v+eo/7/n + qP+/56j/v+eo/7/nqP+/56j/v+eo/7/nqP+/56j/v+eo/8Dnqf/A6Kr/weiq/8Hoq//C6Kz/wuit/8Po + rf/D6K7/xOmu/8Tpr//F6bH74u/anvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLw8PB6////BQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPPz8yrx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxguHu + 2pnB56v2v+eo/7/nqP+/56j/v+eo/7/nqP+/56j/v+eo/7/nqP+/56j/v+eo/7/nqP/A56n/wOiq/8Ho + q//B6Kv/wuis/8Lorf/D6K3/w+mu/8Tprv3b7dKq8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx + 8YLx8fFJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHy8vJf8fHxgvHx8YLx8fGC8fHxgvHx + 8YLx8fGC8fHxgvHx8YLi7tyXwumt8L/nqP+/56j/v+eo/7/nqP+/56j/v+eo/7/nqP+/56j/v+eo/7/n + qP+/56j/wOep/8Doqv/B6Kv/weir/8LorP/C6K3/xOiv+d7u1aTx8fGC8fHxgvHx8YLx8fGC8fHxgvHx + 8YLx8fGC8fHxgvLy8nb///8KAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADv7+8Q8/Pze/Hx + 8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC6/Dpiszqu82/56j/v+eo/7/nqP+/56j/v+eo/7/n + qP+/56j/v+eo/7/nqP+/56j/v+eo/8Dnqf/A6Kr/weir/8Hoq//H6bTj5e7elfHx8YLx8fGC8fHxgvHx + 8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvPz8yoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA9fX1MvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLe7tShx+mz3r/n + qP+/56j/v+eo/7/nqP+/56j/v+eo/7/nqP+/56j/v+eo/7/nqP/A56n/xumy5drtz6rv8e+D8fHxgvHx + 8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8vLyTgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPHx8Unx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx + 8YLx8fGC8fHxgubv45DU68e2y+q6z8XoseTD6a7uweir9MPpru7F6bHly+q50tLsxLrl796U8fHxgvHx + 8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLy8vJh////AwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wHx8fFZ8fHxgvHx8YLx8fGC8fHxgvHx + 8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx + 8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8Wzf398IAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8D8/PzVfHx + 8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx + 8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8PDwZujo + 6AsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA////AfHx8Ujx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx + 8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx + 8YLx8fFa////BQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADz8/Mp8vLydvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx + 8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx + 8YLx8fGC8/PzfPHx8TcAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////CvLy8lDz8/N/8fHxgvHx + 8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx + 8YLx8fGC8fHxgvPz84Hx8fFa8PDwEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADw8PAR8vLyTvHx8X3x8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx + 8YLx8fGC8fHxgvHx8YLx8fF/8/PzVvT09BgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wXz8/Mq8/PzU/Hx8XDx8fGB8fHxgvHx8YLx8fGC8fHxgvHx + 8YLx8fGC8fHxgvHx8YLy8vJz8fHxWO/v7y////8IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8G7e3tHfLy + 8ifu7u4u8PDwNPT09C/y8vIo7+/vH+Pj4wkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAP///////wAA////////AAD///////8AAP//gAf//wAA//gAAD//AAD/wAAAB/8AAP+A + AAAB/wAA/gAAAAB/AAD8AAAAAD8AAPgAAAAAHwAA8AAAAAAPAADwAAAAAAcAAOAAAAAABwAA4AAAAAAD + AADAAAAAAAMAAMAAAAAAAwAAwAAAAAABAACAAAAAAAEAAIAAAAAAAQAAgAAAAAABAACAAAAAAAEAAIAA + AAAAAQAAgAAAAAABAACAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADAAAAAAAMAAMAAAAAABwAAwAAAAAAH + AADgAAAAAAcAAOAAAAAADwAA4AAAAAAPAADwAAAAAB8AAPAAAAAAHwAA+AAAAAA/AAD8AAAAAD8AAPwA + AAAAfwAA/gAAAAD/AAD/AAAAAf8AAP+AAAAD/wAA/8AAAAf/AAD/8AAAH/8AAP/8AAA//wAA//8AAf// + AAD//+AP//8AAP///////wAA////////AAD///////8AACgAAAAgAAAAQAAAAAEAIAAAAAAAABAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAgICAAu/v7xD09PQX7u7uHvDw8CP29vYb8vLyFOrq6gwAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICA + gALy8vIm7+/vT/Pz82fz8/N98fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvDw8Hrw8PBm7+/vUPT0 + 9C3o6OgLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOPj + 4wnz8/NC8vLydPHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx + 8YLx8fGC8fHxgvHx8YHy8vJj8/PzKoCAgAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADx8fEl8vLydfHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx + 8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxcfHx8SUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA9PT0LfHx8YDx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx + 8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8/PzgPLy8j0AAAABAAAAAAAA + AAAAAAAAAAAAAO3t7Rzx8fGA8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLr8OmM5O7emeTv + 3Z7h79mj5fDem+nv45Tu8u6H8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvLy + 8joAAAAAAAAAAAAAAAD///8E8fHxbvHx8YLx8fGC8fHxgvHx8YLx8fGC7vDshtns0K7N67zayeq288fq + s//I6rT/yOq1/8nqtv/K67f/y+u4/8vruf/P7L7w0+zF29vv0Lrn8OKX8fHxgvHx8YLx8fGC8fHxgvHx + 8YLx8fGC8/PzfvPz8xUAAAAAAAAAAPX19TLx8fGC8fHxgvHx8YLx8fGC8fHxgt3u1KXF6rHzxOmv/8Xp + sP/G6bH/xumy/8fqs//I6rT/yOq1/8nqtv/K67f/y+u4/8vruf/M67v/zey8/87svf/S7MPj4u7Zp/Hx + 8YLx8fGC8fHxgvHx8YLx8fGC8/PzVQAAAAAAAAAA8fHxavHx8YLx8fGC8fHxgvHx8YLf7defwuis/cPo + rf/E6a7/xOmv/8XpsP/G6bH/xumy/8fqs//I6rT/yOq1/8nqtv/K67f/y+u4/8vruv/M67v/zey8/87s + vf/N67z/3e7SufHx8YLx8fGC8fHxgvHx8YLz8/N8////Bf///w3x8fGC8fHxgvHx8YLx8fGC8fHxgsXp + sOnB6Kv/wuis/8Porf/E6a7/xOmv/8XpsP/G6bH/xumy/8fqs//I6rT/yOq1/8nqtv/K67f/y+u4/8vr + uv/M67v/zey8/87svf/O67z96/Hoj/Hx8YLx8fGC8fHxgvHx8YLy8vIm8/PzK/Hx8YLx8fGC8fHxgvHx + 8YLg79icwOep/8Hoqv/B6Kv/wuis/8Porf/E6a7/wuit/73opP+76KL/u+eh/77opv/D6a3/yeu1/8nq + tv/K67f/y+u5/8zruv/M67v/zey8/87svf/d7tSz8fHxgvHx8YLx8fGC8fHxgvHx8Tby8vI68fHxgvHx + 8YLx8fGC8fHxgtTrxre/56j/wOep/8Hoqv/B6Kv/uOad/53idv+V4Gn/leBq/5fhbP+Y4W//muFx/5vi + c/+e4Xb/puWD/7PmlP/D6a3/y+u5/8zruv/M67v/zey8/9rtzsHx8fGC8fHxgvHx8YLx8fGC8/PzQfPz + 80Lx8fGC8fHxgvHx8YLx8fGC0OvAwr/nqP+/56j/wOep/8Hoqv+o44b/kd9k/5LfZv+U4Gj/leBq/5fh + bf+Y4W//muFx/5vic/+d4nX/n+N3/7fnm//K67j/y+u5/8zruv/M67v/2u3QvPHx8YLx8fGC8fHxgvHx + 8YLy8vI98/PzP/Hx8YLx8fGC8fHxgvHx8YLQ6sK/v+eo/7/nqP+/56j/wOep/6jjhv+P3mL/kd9k/5Lf + Zv+U4Gj/leBr/5fhbf+Y4W//muFx/5zic/+d4nX/v+mm/8nqt//K67j/y+u5/8zruv/f79au8fHxgvHx + 8YLx8fGC8fHxgvX19TLx8fE38fHxgvHx8YLx8fGC8fHxgtTrybO/56j/v+eo/7/nqP+/56j/sOSS/47e + YP+P3mL/kd9k/5LfZv+U4Gj/leBr/5fhbf+Z4W//muJx/5/jd//H6bP/yeq2/8nqt//K67j/y+u5/+nv + 45Tx8fGC8fHxgvHx8YLx8fGC7+/vIPHx8SXx8fGC8fHxgvHx8YLx8fGC4e/Zm7/nqP+/56j/v+eo/7/n + qP+956X/jt5h/47eYP+P3mL/kd9k/5LfZv+U4Gn/luBr/5fhbf+Z4W//q+aK/8fqs//I6rT/yeq2/8nq + t//N7Lvw8fHxgvHx8YLx8fGC8fHxgvPz84D///8G6+vrDfHx8YLx8fGC8fHxgvHx8YLv8e+Dweis87/n + qP+/56j/v+eo/7/nqP+d4XX/jN1e/47eYP+P3mL/kd9k/5PfZ/+U4Gn/luBr/5fhbf+86KP/xuqy/8fq + s//I6rX/yeq2/9Tsx8nx8fGC8fHxgvHx8YLx8fGC8PDwaAAAAAAAAAAA8fHxbPHx8YLx8fGC8fHxgvHx + 8YLM6rrMv+eo/7/nqP+/56j/v+eo/7blmv+N3V//jN1e/47eYP+Q3mL/kd9k/5PfZ/+U4Gn/qeSH/8Xp + sP/G6bH/xuqy/8fqs//I6rX/5fDem/Hx8YLx8fGC8fHxgvHx8YLz8/M/AAAAAAAAAADz8/NB8fHxgvHx + 8YLx8fGC8fHxgt3s06O/56j/v+eo/7/nqP+/56j/v+eo/7Xmmf+U32n/jN1e/47eYP+Q3mL/k99o/6zk + i//D6a7/xemv/8XpsP/G6bH/xuqy/8vqu+jx8fGC8fHxgvHx8YLx8fGC8fHxgvPz8xUAAAAAAAAAAPT0 + 9Bfx8fGC8fHxgvHx8YLx8fGC8fHvg8Tpsee/56j/v+eo/7/nqP+/56j/v+eo/7/nqP+35pz/suWV/7Xm + mf/A6Kj/wuit/8Porf/E6a7/xemv/8XpsP/G6bH/3e3UqvHx8YLx8fGC8fHxgvHx8YLw8PBmAAAAAAAA + AAAAAAAAAAAAAPHx8W7x8fGC8fHxgvHx8YLx8fGC4u7cmMHnqvm/56j/v+eo/7/nqP+/56j/v+eo/7/n + qP+/56j/wOep/8Hoqv/C6Kz/wuit/8Porf/E6a7/xemv/9Hrwszx8fGC8fHxgvHx8YLx8fGC8fHxgvX1 + 9TEAAAAAAAAAAAAAAAAAAAAA7u7uO/Hx8YLx8fGC8fHxgvHx8YLx8fGC3e7SpMHoqfq/56j/v+eo/7/n + qP+/56j/v+eo/7/nqP+/56j/wOip/8Hoq//C6Kz/wuit/8Porf/O67zV8PHwhPHx8YLx8fGC8fHxgvHx + 8YLy8vJ2////BQAAAAAAAAAAAAAAAAAAAACqqqoD8PDwafHx8YLx8fGC8fHxgvHx8YLx8fGC4O/YnMTo + ruy/56j/v+eo/7/nqP+/56j/v+eo/7/nqP+/56j/wOip/8Hoq//C6Kz90uvEwe/x74Px8fGC8fHxgvHx + 8YLx8fGC8fHxgvPz8ykAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADz8/MW8fHxfPHx8YLx8fGC8fHxgvHx + 8YLx8fGC8PLuhdXtyLXF6bHlv+eo/7/nqP+/56j/v+eo/7/nqP/B6Kv0zeq8zOXv4JTx8fGC8fHxgvHx + 8YLx8fGC8fHxgvHx8YLy8vJNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADy8vIm8fHxgPHx + 8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLs8OmJ4e/Zm93u06Pf7def5+/hkvHx8YLx8fGC8fHxgvHx + 8YLx8fGC8fHxgvHx8YLx8fGC8fHxXf///wIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADy8vIo8/PzffHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx + 8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8VnMzMwFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD29vYb8fHxbvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx + 8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvPz83/v7+9BgICAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMzMwF8/PzQPLy8nnx8fGC8fHxgvHx8YLx8fGC8fHxgvHx + 8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvPz84Hx8fFc9PT0GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////B/X19TLx8fFc8PDwevHx + 8YLx8fGC8fHxgvHx8YLx8fGC8fHxgPHx8Wv09PRE9PT0FwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA7+/vEPb29hvw8PAj7+/vH/T09Be/v78EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////////8B///wAA//wAAD/wAAAP4AAAB+AA + AAfAAAADwAAAA4AAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAADwAAAA8AAAAPAAAAH4AAAB+AA + AA/wAAAP+AAAH/gAAD/+AAB//wAB///AA///+B////////////8oAAAAEAAAACAAAAABACAAAAAAAAAE + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////CfDw8BH///8GAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgICAAu7u7i7x8fFe8PDwevHx8YLx8fGC8fHxgvDw + 8Hvx8fFs7+/vT/Dw8CMAAAABAAAAAAAAAAAAAAAA5ubmCvLy8l/x8fGC8fHxgvHx8YLx8fGC8fHxgvHx + 8YLx8fGC8fHxgvHx8YLx8fGC8/PzZu7u7g8AAAAAAAAAAPHx8V3x8fGC8fHxgunv5o7Z7c200+vFytTs + xc7W7cnH2+7QueLu2qbu8OyH8fHxgvHx8YLx8fFu////BfHx8STx8fGC8fHxgtrtzq3D6a/8xemw/8bp + sv/I6rT/yeq2/8vruP/M67v/z+u++Nzu0bjx8fGC8fHxgu/v7zDx8fFI8fHxguzw6ojC56z3wuis/8Tp + rv/E6q3/weiq/8fqsv/J6rb/y+u5/8zru//N67z/6/HpjfHx8YLy8vJN8fHxXPHx8YLg79icv+eo/8Ho + qv+k4n//lOBo/5fhbf+a4XH/n+J5/7Pmlv/L67n/zOu7/+Xw353x8fGC8fHxXvHx8Vrx8fGC4O3Zm7/n + qP+/56j/nuF3/5HfZP+U4Gj/l+Ft/5ricf+x5pL/yeq3/8vruf/r8emN8fHxgu/v70/x8fFK8fHxguzw + 6ojA6Kn8v+eo/6njiP+O3mD/kd9k/5Tgaf+X4W3/vuim/8jqtP/N67zr8fHxgvHx8YLy8vI68/PzK/Hx + 8YLx8fGCx+m03L/nqP++6Kb/meBw/47eYP+S32X/q+SL/8XpsP/G6rL/1+zLvvHx8YLz8/OB8PDwEdXV + 1Qbx8fF98fHxgt/t1Z/A56j9v+eo/7/nqP+656H/vuim/8Lorf/E6a7/yOq18Ovw6Yvx8fGC8vLyYwAA + AAAAAAAA8fHxR/Hx8YLx8fGC2O3NrMDnqfq/56j/v+eo/7/nqP/B6Kv/xumy7OTu3Zfx8fGC8/PzgfLy + 8icAAAAAAAAAAP///wPz8/Nm8fHxgvHx8YLo7+SO0+zFuczquszM6bzJ1+zMru7w7Ibx8fGC8fHxgvHx + 8UcAAAAAAAAAAAAAAAAAAAAA4+PjCfHx8Vzx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgfPz + 80D///8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8/PzK/Ly8mDz8/N+8fHxgvHx8YLy8vJ68vLyUezs + 7BsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAevr6w3j4+MJAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//AAD8fwAA4AcAAMADAACAAQAAgAEAAIABAACAAQAAgAEAAIAB + AADAAwAAwAMAAOAHAADwDwAA/n8AAP//AAA= + + + \ No newline at end of file diff --git a/extra/exe-builder/Program.cs b/extra/exe-builder/Program.cs index 84ecda317..84aa6e456 100644 --- a/extra/exe-builder/Program.cs +++ b/extra/exe-builder/Program.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Diagnostics; using System.Drawing; +using System.IO; using System.Linq; using System.Reflection; using System.Runtime.InteropServices; @@ -42,9 +43,23 @@ namespace UptimeKuma { }); trayIcon.MouseDoubleClick += new MouseEventHandler(Open); - trayIcon.Visible = true; + if (File.Exists("core") && File.Exists("node")) { + // Go go go + StartProcess(); + } else { + DownloadFiles(); + } + } + + void DownloadFiles() { + var form = new DownloadForm(); + form.Closed += Exit; + form.Show(); + } + + void StartProcess() { var startInfo = new ProcessStartInfo { FileName = "node/node.exe", Arguments = "server/server.js --data-dir=\"../data/\"", @@ -58,8 +73,7 @@ namespace UptimeKuma { process = new Process(); process.StartInfo = startInfo; process.EnableRaisingEvents = true; - process.Exited += new EventHandler(ProcessExited); - + process.Exited += ProcessExited; try { process.Start(); @@ -96,7 +110,8 @@ namespace UptimeKuma { { // Hide tray icon, otherwise it will remain shown until user mouses over it trayIcon.Visible = false; - process.Kill(); + process?.Kill(); + Application.Exit(); } void ProcessExited(object sender, EventArgs e) { diff --git a/extra/exe-builder/UptimeKuma.csproj b/extra/exe-builder/UptimeKuma.csproj index c3c6aad27..aa0a8bf85 100644 --- a/extra/exe-builder/UptimeKuma.csproj +++ b/extra/exe-builder/UptimeKuma.csproj @@ -51,8 +51,17 @@ + + Form + + + DownloadForm.cs + + + DownloadForm.cs + ResXFileCodeGenerator Resources.Designer.cs From 655ba015a07c87e7b1a24ce8cafbe171103acad1 Mon Sep 17 00:00:00 2001 From: Louis Lam Date: Sat, 8 Oct 2022 23:47:27 +0800 Subject: [PATCH 013/171] WIP --- extra/exe-builder/DownloadForm.cs | 127 ++++++++++++++++++++++++++-- extra/exe-builder/Program.cs | 2 +- extra/exe-builder/UptimeKuma.csproj | 3 +- 3 files changed, 121 insertions(+), 11 deletions(-) diff --git a/extra/exe-builder/DownloadForm.cs b/extra/exe-builder/DownloadForm.cs index 9c740e312..5bb88b6d3 100644 --- a/extra/exe-builder/DownloadForm.cs +++ b/extra/exe-builder/DownloadForm.cs @@ -1,14 +1,19 @@ using System; using System.Collections.Generic; using System.ComponentModel; +using System.Diagnostics; using System.IO; +using System.IO.Compression; using System.Net; +using System.Threading; +using System.Threading.Tasks; using System.Windows.Forms; namespace UptimeKuma { public partial class DownloadForm : Form { private readonly Queue downloadQueue = new(); private readonly WebClient webClient = new(); + private DownloadItem currentDownloadItem; public DownloadForm() { InitializeComponent(); @@ -18,17 +23,19 @@ namespace UptimeKuma { webClient.DownloadProgressChanged += DownloadProgressChanged; webClient.DownloadFileCompleted += DownloadFileCompleted; - if (!File.Exists("node")) { + if (!Directory.Exists("node")) { downloadQueue.Enqueue(new DownloadItem { URL = "https://nodejs.org/dist/v16.17.1/node-v16.17.1-win-x64.zip", - Filename = "node.zip" + Filename = "node.zip", + TargetFolder = "node" }); } - if (!File.Exists("node")) { + if (!Directory.Exists("node")) { downloadQueue.Enqueue(new DownloadItem { URL = "https://github.com/louislam/uptime-kuma/archive/refs/tags/1.18.3.zip", - Filename = "core.zip" + Filename = "core.zip", + TargetFolder = "core" }); } @@ -38,28 +45,130 @@ namespace UptimeKuma { void DownloadNextFile() { if (downloadQueue.Count > 0) { var item = downloadQueue.Dequeue(); - label.Text = item.URL; - webClient.DownloadFileAsync(new Uri(item.URL), item.Filename); + + currentDownloadItem = item; + + // Download if the zip file is not existing + if (!File.Exists(item.Filename)) { + label.Text = item.URL; + webClient.DownloadFileAsync(new Uri(item.URL), item.Filename); + } else { + progressBar.Value = 100; + label.Text = "Use local " + item.Filename; + DownloadFileCompleted(null, null); + } } else { - // TODO: Finished, extract? + npmSetup(); } } + void npmSetup() { + if (Directory.Exists("core/node_modules")) { + // Application.Restart(); + } + + label.Text = "npm run setup"; + progressBar.Value = 50; + labelData.Text = ""; + + var startInfo = new ProcessStartInfo { + FileName = "cmd.exe", + Arguments = "run setup", + RedirectStandardOutput = false, + RedirectStandardError = false, + RedirectStandardInput = true, + UseShellExecute = false, + CreateNoWindow = false, + WorkingDirectory = "core" + }; + + var process = new Process(); + process.StartInfo = startInfo; + process.EnableRaisingEvents = true; + process.Exited += (object _, EventArgs e) => { + // Application.Restart(); + progressBar.Value = 100; + + if (process.ExitCode == 0) { + label.Text = "Done"; + } else { + label.Text = "Failed, exit code: " + process.ExitCode; + } + + }; + process.Start(); + process.StandardInput.WriteLine("\"../node/npm\" run setup"); + } + void DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e) { progressBar.Value = e.ProgressPercentage; var total = e.TotalBytesToReceive / 1024; var current = e.BytesReceived / 1024; - labelData.Text = $"{current}KB/{total}KB"; + + if (total > 0) { + labelData.Text = $"{current}KB/{total}KB"; + } } - void DownloadFileCompleted(object sender, AsyncCompletedEventArgs e) { + async void DownloadFileCompleted(object sender, AsyncCompletedEventArgs e) { + Extract(currentDownloadItem); DownloadNextFile(); } + + void Extract(DownloadItem item) { + if (Directory.Exists(item.TargetFolder)) { + var dir = new DirectoryInfo(item.TargetFolder); + dir.Delete(true); + } + + if (Directory.Exists("temp")) { + var dir = new DirectoryInfo("temp"); + dir.Delete(true); + } + + labelData.Text = $"Extracting {item.Filename}..."; + + ZipFile.ExtractToDirectory(item.Filename, "temp"); + + string[] dirList; + + // Move to the correct level + dirList = Directory.GetDirectories("temp"); + + + + if (dirList.Length > 0) { + var dir = dirList[0]; + + // As sometime ExtractToDirectory is still locking the directory, loop until ok + while (true) { + try { + Directory.Move(dir, item.TargetFolder); + break; + } catch (Exception exception) { + Thread.Sleep(1000); + } + } + + } else { + MessageBox.Show("Unexcepted Error: Cannot move extracted files, folder not found."); + } + + labelData.Text = $"Extracted"; + + if (Directory.Exists("temp")) { + var dir = new DirectoryInfo("temp"); + dir.Delete(true); + } + + File.Delete(item.Filename); + } } public class DownloadItem { public string URL { get; set; } public string Filename { get; set; } + public string TargetFolder { get; set; } } } diff --git a/extra/exe-builder/Program.cs b/extra/exe-builder/Program.cs index 84aa6e456..1b78f0385 100644 --- a/extra/exe-builder/Program.cs +++ b/extra/exe-builder/Program.cs @@ -45,7 +45,7 @@ namespace UptimeKuma { trayIcon.MouseDoubleClick += new MouseEventHandler(Open); trayIcon.Visible = true; - if (File.Exists("core") && File.Exists("node")) { + if (Directory.Exists("core") && Directory.Exists("node") && Directory.Exists("core/node_modules")) { // Go go go StartProcess(); } else { diff --git a/extra/exe-builder/UptimeKuma.csproj b/extra/exe-builder/UptimeKuma.csproj index aa0a8bf85..2ad857b2c 100644 --- a/extra/exe-builder/UptimeKuma.csproj +++ b/extra/exe-builder/UptimeKuma.csproj @@ -35,11 +35,12 @@ 4 - COPY "$(SolutionDir)bin\Debug\uptime-kuma.exe" "C:\Users\LouisLam\Desktop\uptime-kuma-win64\" + COPY "$(SolutionDir)bin\Debug\uptime-kuma.exe" "%UserProfile%\Desktop\uptime-kuma-win64\" + From a487347b3316cc3192b312a195ac44a46160d310 Mon Sep 17 00:00:00 2001 From: Louis Lam Date: Sun, 9 Oct 2022 03:47:06 +0800 Subject: [PATCH 014/171] [exe] install dependencies and download dist --- extra/exe-builder/DownloadForm.cs | 21 +++++++++++---------- extra/exe-builder/Program.cs | 2 +- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/extra/exe-builder/DownloadForm.cs b/extra/exe-builder/DownloadForm.cs index 5bb88b6d3..f16af4222 100644 --- a/extra/exe-builder/DownloadForm.cs +++ b/extra/exe-builder/DownloadForm.cs @@ -63,12 +63,6 @@ namespace UptimeKuma { } void npmSetup() { - if (Directory.Exists("core/node_modules")) { - // Application.Restart(); - } - - label.Text = "npm run setup"; - progressBar.Value = 50; labelData.Text = ""; var startInfo = new ProcessStartInfo { @@ -86,10 +80,12 @@ namespace UptimeKuma { process.StartInfo = startInfo; process.EnableRaisingEvents = true; process.Exited += (object _, EventArgs e) => { - // Application.Restart(); - progressBar.Value = 100; + progressBar.Value = 100; if (process.ExitCode == 0) { + Task.Delay(2000).ContinueWith((task) => { + Application.Restart(); + }); label.Text = "Done"; } else { label.Text = "Failed, exit code: " + process.ExitCode; @@ -97,7 +93,12 @@ namespace UptimeKuma { }; process.Start(); - process.StandardInput.WriteLine("\"../node/npm\" run setup"); + label.Text = "Installing dependencies and download dist files"; + progressBar.Value = 50; + + process.StandardInput.WriteLine("\"../node/npm\" ci --production"); + process.StandardInput.WriteLine("\"../node/npm\" run download-dist"); + process.StandardInput.WriteLine("exit"); } void DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e) { @@ -110,7 +111,7 @@ namespace UptimeKuma { } } - async void DownloadFileCompleted(object sender, AsyncCompletedEventArgs e) { + void DownloadFileCompleted(object sender, AsyncCompletedEventArgs e) { Extract(currentDownloadItem); DownloadNextFile(); } diff --git a/extra/exe-builder/Program.cs b/extra/exe-builder/Program.cs index 1b78f0385..82c76b05d 100644 --- a/extra/exe-builder/Program.cs +++ b/extra/exe-builder/Program.cs @@ -45,7 +45,7 @@ namespace UptimeKuma { trayIcon.MouseDoubleClick += new MouseEventHandler(Open); trayIcon.Visible = true; - if (Directory.Exists("core") && Directory.Exists("node") && Directory.Exists("core/node_modules")) { + if (Directory.Exists("core") && Directory.Exists("node") && Directory.Exists("core/node_modules") && Directory.Exists("core/dist")) { // Go go go StartProcess(); } else { From da16796ec45a3ecb12f16a1855bca0813beb2571 Mon Sep 17 00:00:00 2001 From: Nikita Lutsenko Date: Sat, 19 Nov 2022 16:10:30 -0800 Subject: [PATCH 015/171] Add ability to send Telegram notifications silently. --- server/notification-providers/telegram.js | 1 + src/components/notifications/Telegram.vue | 9 +++++++++ src/languages/en.js | 2 ++ 3 files changed, 12 insertions(+) diff --git a/server/notification-providers/telegram.js b/server/notification-providers/telegram.js index 2b0576224..88923e665 100644 --- a/server/notification-providers/telegram.js +++ b/server/notification-providers/telegram.js @@ -13,6 +13,7 @@ class Telegram extends NotificationProvider { params: { chat_id: notification.telegramChatID, text: msg, + disable_notification: notification.telegramSendSilently, }, }); return okMsg; diff --git a/src/components/notifications/Telegram.vue b/src/components/notifications/Telegram.vue index 9daf31ac6..4eb014ff7 100644 --- a/src/components/notifications/Telegram.vue +++ b/src/components/notifications/Telegram.vue @@ -28,6 +28,15 @@ {{ telegramGetUpdatesURL("masked") }}

+ +
+ + +
+ +
+ {{ $t("telegramSendSilentlyDescription") }} +
diff --git a/src/languages/en.js b/src/languages/en.js index 86abb7912..492689e56 100644 --- a/src/languages/en.js +++ b/src/languages/en.js @@ -214,6 +214,8 @@ export default { "Chat ID": "Chat ID", supportTelegramChatID: "Support Direct Chat / Group / Channel's Chat ID", wayToGetTelegramChatID: "You can get your chat ID by sending a message to the bot and going to this URL to view the chat_id:", + "Send Silently": "Send Silently", + telegramSendSilentlyDescription: "Sends the message silently. Users will receive a notification with no sound.", "YOUR BOT TOKEN HERE": "YOUR BOT TOKEN HERE", chatIDNotFound: "Chat ID is not found; please send a message to this bot first", webhook: "Webhook", From 608e3f5582604e6a7079859bcf722d7c645a4245 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mathias=20Haugsb=C3=B8?= Date: Tue, 27 Dec 2022 23:26:05 +0100 Subject: [PATCH 016/171] Feature: Clone existing monitor Closes #565 Closes #2319 Adds the feature of cloning existing monitor, I have briefly tested it with ping and https and ensured that all properties was cloned including notifications. --- src/languages/en.js | 2 ++ src/pages/Details.vue | 3 +++ src/pages/EditMonitor.vue | 27 ++++++++++++++++++++++++--- src/router.js | 4 ++++ 4 files changed, 33 insertions(+), 3 deletions(-) diff --git a/src/languages/en.js b/src/languages/en.js index e760f92ea..59ea0570d 100644 --- a/src/languages/en.js +++ b/src/languages/en.js @@ -57,6 +57,7 @@ export default { List: "List", Add: "Add", "Add New Monitor": "Add New Monitor", + "Clone Monitor": "Clone Monitor", "Quick Stats": "Quick Stats", Up: "Up", Down: "Down", @@ -70,6 +71,7 @@ export default { "No important events": "No important events", Resume: "Resume", Edit: "Edit", + Clone: "Clone", Delete: "Delete", Current: "Current", Uptime: "Uptime", diff --git a/src/pages/Details.vue b/src/pages/Details.vue index 6d6a8dd9c..40ed0358d 100644 --- a/src/pages/Details.vue +++ b/src/pages/Details.vue @@ -30,6 +30,9 @@ {{ $t("Edit") }} + + {{ $t("Clone") }} + diff --git a/src/pages/EditMonitor.vue b/src/pages/EditMonitor.vue index c9d5ad2f1..f0c99b5b5 100644 --- a/src/pages/EditMonitor.vue +++ b/src/pages/EditMonitor.vue @@ -620,13 +620,23 @@ export default { }, pageName() { - return this.$t((this.isAdd) ? "Add New Monitor" : "Edit"); + let name = "Add New Monitor"; + if (this.isClone) { + name = "Clone Monitor"; + } else if (this.isEdit) { + name = "Edit"; + } + return this.$t(name); }, isAdd() { return this.$route.path === "/add"; }, + isClone() { + return this.$route.path.startsWith("/clone"); + }, + isEdit() { return this.$route.path.startsWith("/edit"); }, @@ -804,11 +814,22 @@ message HealthCheckResponse { this.monitor.notificationIDList[this.$root.notificationList[i].id] = true; } } - } else if (this.isEdit) { + } else if (this.isEdit || this.isClone) { this.$root.getSocket().emit("getMonitor", this.$route.params.id, (res) => { if (res.ok) { this.monitor = res.monitor; + if (this.isClone) { + /** + * Cloning a monitor will include properties that can not be posted to backend + * as they are not valid columns in the SQLite table. + */ + this.monitor.id = undefined; // Remove id when cloning as we want a new id + this.monitor.includeSensitiveData = undefined; + this.monitor.maintenance = undefined; + this.monitor.tags = undefined; // FIXME: Cloning tags does not work yet + } + // Handling for monitors that are created before 1.7.0 if (this.monitor.retryInterval === 0) { this.monitor.retryInterval = this.monitor.interval; @@ -866,7 +887,7 @@ message HealthCheckResponse { this.monitor.headers = JSON.stringify(JSON.parse(this.monitor.headers), null, 4); } - if (this.isAdd) { + if (this.isAdd || this.isClone) { this.$root.add(this.monitor, async (res) => { if (res.ok) { diff --git a/src/router.js b/src/router.js index 380488264..a5938c22d 100644 --- a/src/router.js +++ b/src/router.js @@ -63,6 +63,10 @@ const routes = [ path: "/edit/:id", component: EditMonitor, }, + { + path: "/clone/:id", + component: EditMonitor, + }, ], }, { From 4d0bdae6bf4ead2617f9b9f71e97e5edf0466d7c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mathias=20Haugsb=C3=B8?= Date: Tue, 27 Dec 2022 23:27:23 +0100 Subject: [PATCH 017/171] Add jsdoc for Tag type Does not work properly but is still useful --- src/components/Tag.vue | 10 ++++++++-- src/components/TagsManager.vue | 20 +++++++++++++++++++- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/src/components/Tag.vue b/src/components/Tag.vue index 0325d9900..705408b2d 100644 --- a/src/components/Tag.vue +++ b/src/components/Tag.vue @@ -18,9 +18,15 @@ diff --git a/src/components/notifications/index.js b/src/components/notifications/index.js index 3c8b26210..ed9dde0f1 100644 --- a/src/components/notifications/index.js +++ b/src/components/notifications/index.js @@ -22,6 +22,7 @@ import Ntfy from "./Ntfy.vue"; import Octopush from "./Octopush.vue"; import OneBot from "./OneBot.vue"; import PagerDuty from "./PagerDuty.vue"; +import PagerTree from "./PagerTree.vue"; import PromoSMS from "./PromoSMS.vue"; import Pushbullet from "./Pushbullet.vue"; import PushDeer from "./PushDeer.vue"; @@ -76,6 +77,7 @@ const NotificationFormList = { "octopush": Octopush, "OneBot": OneBot, "PagerDuty": PagerDuty, + "PagerTree": PagerTree, "promosms": PromoSMS, "pushbullet": Pushbullet, "PushByTechulus": TechulusPush, diff --git a/src/lang/en.json b/src/lang/en.json index d907f4e0c..4383aca91 100644 --- a/src/lang/en.json +++ b/src/lang/en.json @@ -695,5 +695,14 @@ "Google Analytics ID": "Google Analytics ID", "Edit Tag": "Edit Tag", "Server Address": "Server Address", - "Learn More": "Learn More" + "Learn More": "Learn More", + "pagertreeIntegrationUrl": "Integration URL", + "pagertreeUrgency": "Urgency", + "pagertreeSilent": "Silent", + "pagertreeLow": "Low", + "pagertreeMedium": "Medium", + "pagertreeHigh": "High", + "pagertreeCritical": "Critical", + "pagertreeResolve": "Auto Resolve", + "pagertreeDoNothing": "Do Nothing" } From 1c0174c3192f862aa5bd17bad7c381e4a94fb638 Mon Sep 17 00:00:00 2001 From: Austin Miller Date: Mon, 6 Feb 2023 13:07:56 -0700 Subject: [PATCH 038/171] ESLint and verbiage changes --- src/components/notifications/PagerTree.vue | 8 +++----- src/lang/en.json | 3 ++- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/src/components/notifications/PagerTree.vue b/src/components/notifications/PagerTree.vue index 823eb23b4..0121f65ef 100644 --- a/src/components/notifications/PagerTree.vue +++ b/src/components/notifications/PagerTree.vue @@ -2,6 +2,9 @@
+ + {{ $t("here") }} +
@@ -23,11 +26,6 @@ diff --git a/src/lang/en.json b/src/lang/en.json index 4383aca91..f29f06465 100644 --- a/src/lang/en.json +++ b/src/lang/en.json @@ -704,5 +704,6 @@ "pagertreeHigh": "High", "pagertreeCritical": "Critical", "pagertreeResolve": "Auto Resolve", - "pagertreeDoNothing": "Do Nothing" + "pagertreeDoNothing": "Do Nothing", + "wayToGetPagerTreeIntegrationURL": "After creating the Uptime Kuma integration in PagerTree, copy the Endpoint. See full details {0}" } From 727acb32bf8423a5c56cf64776ce33eded9e5aa7 Mon Sep 17 00:00:00 2001 From: Brayan Lozano Date: Tue, 7 Feb 2023 21:18:26 -0500 Subject: [PATCH 039/171] Adds name + status + message to slack notification --- server/notification-providers/slack.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/notification-providers/slack.js b/server/notification-providers/slack.js index 5a5d40cb3..64a587387 100644 --- a/server/notification-providers/slack.js +++ b/server/notification-providers/slack.js @@ -42,7 +42,7 @@ class Slack extends NotificationProvider { const time = heartbeatJSON["time"]; const textMsg = "Uptime Kuma Alert"; let data = { - "text": monitorJSON ? textMsg + `: ${monitorJSON.name}` : textMsg, + "text": monitorJSON ? `${textMsg}\n${msg}` : textMsg, "channel": notification.slackchannel, "username": notification.slackusername, "icon_emoji": notification.slackiconemo, From d45aee450d3e01a9ee7a4a784ff99268e05fff76 Mon Sep 17 00:00:00 2001 From: Brayan Lozano Date: Tue, 7 Feb 2023 22:34:10 -0500 Subject: [PATCH 040/171] Removes unecessary ternary operator --- server/notification-providers/slack.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/notification-providers/slack.js b/server/notification-providers/slack.js index 64a587387..da89f0f7a 100644 --- a/server/notification-providers/slack.js +++ b/server/notification-providers/slack.js @@ -42,7 +42,7 @@ class Slack extends NotificationProvider { const time = heartbeatJSON["time"]; const textMsg = "Uptime Kuma Alert"; let data = { - "text": monitorJSON ? `${textMsg}\n${msg}` : textMsg, + "text": `${textMsg}\n${msg}`, "channel": notification.slackchannel, "username": notification.slackusername, "icon_emoji": notification.slackiconemo, From 8725e5daf91399fd59a5d016fcb3ae7ac98b9e25 Mon Sep 17 00:00:00 2001 From: Bobby Ore Date: Wed, 8 Feb 2023 14:08:25 -0600 Subject: [PATCH 041/171] Add ability to use User ID for LunaSea notifications --- server/notification-providers/lunasea.js | 15 ++++++++++----- src/components/notifications/LunaSea.vue | 13 +++++++++++-- 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/server/notification-providers/lunasea.js b/server/notification-providers/lunasea.js index 2985425ef..48f7b4f2b 100644 --- a/server/notification-providers/lunasea.js +++ b/server/notification-providers/lunasea.js @@ -8,15 +8,20 @@ class LunaSea extends NotificationProvider { async send(notification, msg, monitorJSON = null, heartbeatJSON = null) { let okMsg = "Sent Successfully."; - let lunaseadevice = "https://notify.lunasea.app/v1/custom/device/" + notification.lunaseaDevice; - + let lunaseaurl = ""; + if(notification.lunaseaNotificationType === "device") { + lunaseaurl = "https://notify.lunasea.app/v1/custom/device/" + notification.lunaseaId; + } else { + lunaseaurl = "https://notify.lunasea.app/v1/custom/user/" + notification.lunaseaId; + } + try { if (heartbeatJSON == null) { let testdata = { "title": "Uptime Kuma Alert", "body": msg, }; - await axios.post(lunaseadevice, testdata); + await axios.post(lunaseaurl, testdata); return okMsg; } @@ -25,7 +30,7 @@ class LunaSea extends NotificationProvider { "title": "UptimeKuma Alert: " + monitorJSON["name"], "body": "[🔴 Down] " + heartbeatJSON["msg"] + "\nTime (UTC): " + heartbeatJSON["time"], }; - await axios.post(lunaseadevice, downdata); + await axios.post(lunaseaurl, downdata); return okMsg; } @@ -34,7 +39,7 @@ class LunaSea extends NotificationProvider { "title": "UptimeKuma Alert: " + monitorJSON["name"], "body": "[✅ Up] " + heartbeatJSON["msg"] + "\nTime (UTC): " + heartbeatJSON["time"], }; - await axios.post(lunaseadevice, updata); + await axios.post(lunaseaurl, updata); return okMsg; } diff --git a/src/components/notifications/LunaSea.vue b/src/components/notifications/LunaSea.vue index 34a986885..6367af7eb 100644 --- a/src/components/notifications/LunaSea.vue +++ b/src/components/notifications/LunaSea.vue @@ -1,7 +1,16 @@ + +
+ + +
+
From 3c5f9981912d8f8efd49e54852c414b039a6e72e Mon Sep 17 00:00:00 2001 From: Louis Lam Date: Sun, 26 Feb 2023 03:23:02 +0800 Subject: [PATCH 108/171] Update mongodb to 4.14.0, possibly fix #2820 --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5e57a9325..e642d03b0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -41,7 +41,7 @@ "jsonwebtoken": "~9.0.0", "jwt-decode": "~3.1.2", "limiter": "~2.1.0", - "mongodb": "~4.13.0", + "mongodb": "~4.14.0", "mqtt": "~4.3.7", "mssql": "~8.1.4", "mysql2": "~2.3.3", @@ -14008,9 +14008,9 @@ } }, "node_modules/mongodb": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-4.13.0.tgz", - "integrity": "sha512-+taZ/bV8d1pYuHL4U+gSwkhmDrwkWbH1l4aah4YpmpscMwgFBkufIKxgP/G7m87/NUuQzc2Z75ZTI7ZOyqZLbw==", + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-4.14.0.tgz", + "integrity": "sha512-coGKkWXIBczZPr284tYKFLg+KbGPPLlSbdgfKAb6QqCFt5bo5VFZ50O3FFzsw4rnkqjwT6D8Qcoo9nshYKM7Mg==", "dependencies": { "bson": "^4.7.0", "mongodb-connection-string-url": "^2.5.4", @@ -29626,9 +29626,9 @@ "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" }, "mongodb": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-4.13.0.tgz", - "integrity": "sha512-+taZ/bV8d1pYuHL4U+gSwkhmDrwkWbH1l4aah4YpmpscMwgFBkufIKxgP/G7m87/NUuQzc2Z75ZTI7ZOyqZLbw==", + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-4.14.0.tgz", + "integrity": "sha512-coGKkWXIBczZPr284tYKFLg+KbGPPLlSbdgfKAb6QqCFt5bo5VFZ50O3FFzsw4rnkqjwT6D8Qcoo9nshYKM7Mg==", "requires": { "@aws-sdk/credential-providers": "^3.186.0", "bson": "^4.7.0", diff --git a/package.json b/package.json index a3f6066b9..fa0614a84 100644 --- a/package.json +++ b/package.json @@ -99,7 +99,7 @@ "jsonwebtoken": "~9.0.0", "jwt-decode": "~3.1.2", "limiter": "~2.1.0", - "mongodb": "~4.13.0", + "mongodb": "~4.14.0", "mqtt": "~4.3.7", "mssql": "~8.1.4", "mysql2": "~2.3.3", From 5b0b743f81d1eb00f9dbca4acdbfc13a7da1683e Mon Sep 17 00:00:00 2001 From: Louis Lam Date: Sun, 26 Feb 2023 17:00:54 +0800 Subject: [PATCH 109/171] Update to 1.20.2 --- package-lock.json | 4 ++-- package.json | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index e642d03b0..159d33667 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "uptime-kuma", - "version": "1.20.1", + "version": "1.20.2", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "uptime-kuma", - "version": "1.20.1", + "version": "1.20.2", "license": "MIT", "dependencies": { "@grpc/grpc-js": "~1.7.3", diff --git a/package.json b/package.json index fa0614a84..686947ec2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "uptime-kuma", - "version": "1.20.1", + "version": "1.20.2", "license": "MIT", "repository": { "type": "git", @@ -39,7 +39,7 @@ "build-docker-nightly-amd64": "docker buildx build -f docker/dockerfile --platform linux/amd64 -t louislam/uptime-kuma:nightly-amd64 --target nightly . --push --progress plain", "build-docker-pr-test": "docker buildx build -f docker/dockerfile --platform linux/amd64,linux/arm64 -t louislam/uptime-kuma:pr-test --target pr-test . --push", "upload-artifacts": "docker buildx build -f docker/dockerfile --platform linux/amd64 -t louislam/uptime-kuma:upload-artifact --build-arg VERSION --build-arg GITHUB_TOKEN --target upload-artifact . --progress plain", - "setup": "git checkout 1.20.1 && npm ci --production && npm run download-dist", + "setup": "git checkout 1.20.2 && npm ci --production && npm run download-dist", "download-dist": "node extra/download-dist.js", "mark-as-nightly": "node extra/mark-as-nightly.js", "reset-password": "node extra/reset-password.js", From b91c526d2e7c742d75a8179382c3b057adaa4f22 Mon Sep 17 00:00:00 2001 From: Louis Lam Date: Sun, 26 Feb 2023 17:56:01 +0800 Subject: [PATCH 110/171] [exe] Show server status --- extra/exe-builder/Program.cs | 28 ++++++++++++++++++-- extra/exe-builder/Properties/AssemblyInfo.cs | 2 +- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/extra/exe-builder/Program.cs b/extra/exe-builder/Program.cs index 1385e8303..c120d6df5 100644 --- a/extra/exe-builder/Program.cs +++ b/extra/exe-builder/Program.cs @@ -5,6 +5,7 @@ using System.Drawing; using System.IO; using System.Linq; using System.Net; +using System.Net.Sockets; using System.Reflection; using System.Runtime.InteropServices; using System.Threading.Tasks; @@ -33,19 +34,26 @@ namespace UptimeKuma { private NotifyIcon trayIcon; private Process process; + private MenuItem statusMenuItem; private MenuItem runWhenStarts; private RegistryKey registryKey = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true); - public UptimeKumaApplicationContext() - { + + public UptimeKumaApplicationContext() { + var startingText = "Starting server..."; trayIcon = new NotifyIcon(); + trayIcon.Text = startingText; runWhenStarts = new MenuItem("Run when system starts", RunWhenStarts); runWhenStarts.Checked = registryKey.GetValue(appName) != null; + statusMenuItem = new MenuItem(startingText); + statusMenuItem.Enabled = false; + trayIcon.Icon = Icon.ExtractAssociatedIcon(Assembly.GetExecutingAssembly().Location); trayIcon.ContextMenu = new ContextMenu(new MenuItem[] { + statusMenuItem, new("Open", Open), //new("Debug Console", DebugConsole), runWhenStarts, @@ -109,6 +117,22 @@ namespace UptimeKuma { process.Start(); //Open(null, null); + // Async task to check if the server is ready + Task.Run(() => { + var runningText = "Server is running"; + using TcpClient tcpClient = new TcpClient(); + while (true) { + try { + tcpClient.Connect("127.0.0.1", 3001); + statusMenuItem.Text = runningText; + trayIcon.Text = runningText; + break; + } catch (Exception) { + System.Threading.Thread.Sleep(2000); + } + } + }); + } catch (Exception e) { MessageBox.Show("Startup failed: " + e.Message, "Uptime Kuma Error"); } diff --git a/extra/exe-builder/Properties/AssemblyInfo.cs b/extra/exe-builder/Properties/AssemblyInfo.cs index 2552870b3..59b36bb81 100644 --- a/extra/exe-builder/Properties/AssemblyInfo.cs +++ b/extra/exe-builder/Properties/AssemblyInfo.cs @@ -10,7 +10,7 @@ using System.Runtime.InteropServices; [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("Uptime Kuma")] -[assembly: AssemblyCopyright("Copyright © 2022 Louis Lam")] +[assembly: AssemblyCopyright("Copyright © 2023 Louis Lam")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] From 42a69c16ca42de0b34688b95e1f2e0188ad2811b Mon Sep 17 00:00:00 2001 From: Matthew Nickson Date: Sun, 26 Feb 2023 16:47:34 +0000 Subject: [PATCH 111/171] Switched to crypto.randomBytes fpr key generation Keys are now 32 bytes long encoded in a URL safe base64 string Signed-off-by: Matthew Nickson --- server/auth.js | 7 ++++--- server/socket-handlers/api-key-socket-handler.js | 6 +++--- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/server/auth.js b/server/auth.js index eddae4c3c..c42a74c40 100644 --- a/server/auth.js +++ b/server/auth.js @@ -44,8 +44,9 @@ async function verifyAPIKey(key) { return false; } - let index = key.substring(0, key.indexOf("-")); - let clear = key.substring(key.indexOf("-") + 1, key.length); + // uk prefix + key ID is before _ + let index = key.substring(2, key.indexOf("_")); + let clear = key.substring(key.indexOf("_") + 1, key.length); let hash = await R.findOne("api_key", " id=? ", [ index ]); @@ -137,7 +138,7 @@ exports.basicAuth = async function (req, res, next) { }; /** - * Use X-API-Key header if API keys enabled, else use basic auth + * Use use API Key if API keys enabled, else use basic auth * @param {express.Request} req Express request object * @param {express.Response} res Express response object * @param {express.NextFunction} next diff --git a/server/socket-handlers/api-key-socket-handler.js b/server/socket-handlers/api-key-socket-handler.js index cf124cad3..546226f69 100644 --- a/server/socket-handlers/api-key-socket-handler.js +++ b/server/socket-handlers/api-key-socket-handler.js @@ -17,7 +17,7 @@ module.exports.apiKeySocketHandler = (socket) => { socket.on("addAPIKey", async (key, callback) => { try { checkLogin(socket); - let clearKey = crypto.randomUUID(); + let clearKey = crypto.randomBytes(32).toString("base64url"); let hashedKey = passwordHash.generate(clearKey); key["key"] = hashedKey; let bean = await APIKey.save(key, socket.userID); @@ -25,9 +25,9 @@ module.exports.apiKeySocketHandler = (socket) => { log.debug("apikeys", "Added API Key"); log.debug("apikeys", key); - // Append key ID to start of key seperated by -, used to get + // Append key ID and prefix to start of key seperated by _, used to get // correct hash when validating key. - let formattedKey = bean.id + "-" + clearKey; + let formattedKey = "uk" + bean.id + "_" + clearKey; await sendAPIKeyList(socket); // Enable API auth if the user creates a key, otherwise only basic From 11fa690e0915b9be166b861cf704c76db864e59d Mon Sep 17 00:00:00 2001 From: Matthew Nickson Date: Sun, 26 Feb 2023 18:07:57 +0000 Subject: [PATCH 112/171] Updated API Keys UI The UI has now been moved to the settings page. Signed-off-by: Matthew Nickson --- src/components/APIKeyDialog.vue | 214 ++++++++++++++++++ .../settings/APIKeys.vue} | 135 +++++------ src/icon.js | 2 - src/layouts/Layout.vue | 6 - src/pages/AddAPIKey.vue | 199 ---------------- src/pages/Settings.vue | 6 +- src/router.js | 15 +- 7 files changed, 290 insertions(+), 287 deletions(-) create mode 100644 src/components/APIKeyDialog.vue rename src/{pages/ManageAPIKeys.vue => components/settings/APIKeys.vue} (56%) delete mode 100644 src/pages/AddAPIKey.vue diff --git a/src/components/APIKeyDialog.vue b/src/components/APIKeyDialog.vue new file mode 100644 index 000000000..106ad8c74 --- /dev/null +++ b/src/components/APIKeyDialog.vue @@ -0,0 +1,214 @@ + + + + + diff --git a/src/pages/ManageAPIKeys.vue b/src/components/settings/APIKeys.vue similarity index 56% rename from src/pages/ManageAPIKeys.vue rename to src/components/settings/APIKeys.vue index ccfc0ce6d..3ecd53b7f 100644 --- a/src/pages/ManageAPIKeys.vue +++ b/src/components/settings/APIKeys.vue @@ -1,85 +1,83 @@ diff --git a/src/pages/Settings.vue b/src/pages/Settings.vue index a076a4d36..d3c153df1 100644 --- a/src/pages/Settings.vue +++ b/src/pages/Settings.vue @@ -7,9 +7,6 @@ {{ $t("Maintenance") }} - - {{ $t("API Keys") }} -

@@ -110,6 +107,9 @@ export default { security: { title: this.$t("Security"), }, + "api-keys": { + title: this.$t("API Keys") + }, proxies: { title: this.$t("Proxies"), }, diff --git a/src/router.js b/src/router.js index af86356ed..b9493f098 100644 --- a/src/router.js +++ b/src/router.js @@ -18,8 +18,7 @@ import NotFound from "./pages/NotFound.vue"; import DockerHosts from "./components/settings/Docker.vue"; import MaintenanceDetails from "./pages/MaintenanceDetails.vue"; import ManageMaintenance from "./pages/ManageMaintenance.vue"; -import ManageAPIKeys from "./pages/ManageAPIKeys.vue"; -import AddAPIKey from "./pages/AddAPIKey.vue"; +import APIKeys from "./components/settings/APIKeys.vue"; import Plugins from "./components/settings/Plugins.vue"; // Settings - Sub Pages @@ -115,6 +114,10 @@ const routes = [ path: "security", component: Security, }, + { + path: "api-keys", + component: APIKeys, + }, { path: "proxies", component: Proxies, @@ -157,14 +160,6 @@ const routes = [ path: "/maintenance/edit/:id", component: EditMaintenance, }, - { - path: "/apikeys", - component: ManageAPIKeys - }, - { - path: "/apikeys/add", - component: AddAPIKey - }, ], }, ], From 669f8700b236cc7727b6485d5f6126ee6f88e233 Mon Sep 17 00:00:00 2001 From: Matthew Nickson Date: Sun, 26 Feb 2023 19:36:50 +0000 Subject: [PATCH 113/171] Switched to nanoid for key generation To try and prevent any security issues, use an external package to generate key instead of doing it ourselves. Note: we have to use nanoid version 3 as nanoid version 4 requires ESM. Currently, nanoid v3 is still supported. Signed-off-by: Matthew Nickson --- package-lock.json | 5 ++--- package.json | 1 + server/socket-handlers/api-key-socket-handler.js | 5 +++-- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5e57a9325..328043b6f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -45,6 +45,7 @@ "mqtt": "~4.3.7", "mssql": "~8.1.4", "mysql2": "~2.3.3", + "nanoid": "^3.3.4", "node-cloudflared-tunnel": "~1.0.9", "node-radius-client": "~1.0.0", "nodemailer": "~6.6.5", @@ -14247,7 +14248,6 @@ "version": "3.3.4", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", - "dev": true, "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -29825,8 +29825,7 @@ "nanoid": { "version": "3.3.4", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", - "dev": true + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==" }, "native-duplexpair": { "version": "1.0.0", diff --git a/package.json b/package.json index a3f6066b9..7b5facab2 100644 --- a/package.json +++ b/package.json @@ -103,6 +103,7 @@ "mqtt": "~4.3.7", "mssql": "~8.1.4", "mysql2": "~2.3.3", + "nanoid": "^3.3.4", "node-cloudflared-tunnel": "~1.0.9", "node-radius-client": "~1.0.0", "nodemailer": "~6.6.5", diff --git a/server/socket-handlers/api-key-socket-handler.js b/server/socket-handlers/api-key-socket-handler.js index 546226f69..69b0b60de 100644 --- a/server/socket-handlers/api-key-socket-handler.js +++ b/server/socket-handlers/api-key-socket-handler.js @@ -1,7 +1,7 @@ const { checkLogin } = require("../util-server"); const { log } = require("../../src/util"); const { R } = require("redbean-node"); -const crypto = require("crypto"); +const { nanoid } = require("nanoid"); const passwordHash = require("../password-hash"); const apicache = require("../modules/apicache"); const APIKey = require("../model/api_key"); @@ -17,7 +17,8 @@ module.exports.apiKeySocketHandler = (socket) => { socket.on("addAPIKey", async (key, callback) => { try { checkLogin(socket); - let clearKey = crypto.randomBytes(32).toString("base64url"); + + let clearKey = nanoid(40); let hashedKey = passwordHash.generate(clearKey); key["key"] = hashedKey; let bean = await APIKey.save(key, socket.userID); From fee8fd932093aa466050fc49ea8fcdcf1912726b Mon Sep 17 00:00:00 2001 From: Louis Lam Date: Mon, 27 Feb 2023 18:45:54 +0800 Subject: [PATCH 114/171] [exe] Use `Environment.CurrentDirectory` instead of overriding fs --- extra/exe-builder/FS.cs | 65 ----------------------------- extra/exe-builder/Program.cs | 6 +++ extra/exe-builder/UptimeKuma.csproj | 1 - 3 files changed, 6 insertions(+), 66 deletions(-) delete mode 100644 extra/exe-builder/FS.cs diff --git a/extra/exe-builder/FS.cs b/extra/exe-builder/FS.cs deleted file mode 100644 index 99a636949..000000000 --- a/extra/exe-builder/FS.cs +++ /dev/null @@ -1,65 +0,0 @@ -using System.IO; -using System.Reflection; - -namespace UptimeKuma { - - /** - * Current Directory using App location - */ - public class Directory { - private static string baseDir; - - public static string FullPath(string path) { - return Path.Combine(GetBaseDir(), path); - } - - public static string GetBaseDir() { - if (baseDir == null) { - baseDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); - } - return baseDir; - } - - public static bool Exists(string path) { - return System.IO.Directory.Exists(FullPath(path)); - } - - public static void Delete(string path, bool recursive) { - System.IO.Directory.Delete(FullPath(path), recursive); - } - - public static void Move(string src, string dest) { - System.IO.Directory.Move(FullPath(src), FullPath(dest)); - } - - public static string[] GetDirectories(string path) { - return System.IO.Directory.GetDirectories(FullPath(path)); - } - } - - public class File { - - private static string FullPath(string path) { - return Directory.FullPath(path); - } - public static bool Exists(string path) { - return System.IO.File.Exists(FullPath(path)); - } - - public static FileStream Create(string path) { - return System.IO.File.Create(FullPath(path)); - } - - public static string ReadAllText(string path) { - return System.IO.File.ReadAllText(FullPath(path)); - } - - public static void Delete(string path) { - System.IO.File.Delete(FullPath(path)); - } - - public static void WriteAllText(string path, string content) { - System.IO.File.WriteAllText(FullPath(path), content); - } - } -} diff --git a/extra/exe-builder/Program.cs b/extra/exe-builder/Program.cs index c120d6df5..69cb1a73f 100644 --- a/extra/exe-builder/Program.cs +++ b/extra/exe-builder/Program.cs @@ -21,6 +21,12 @@ namespace UptimeKuma { /// [STAThread] static void Main(string[] args) { + var cwd = Path.GetDirectoryName(Application.ExecutablePath); + + if (cwd != null) { + Environment.CurrentDirectory = cwd; + } + Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new UptimeKumaApplicationContext()); diff --git a/extra/exe-builder/UptimeKuma.csproj b/extra/exe-builder/UptimeKuma.csproj index bd4e0dea9..ecd6a46b6 100644 --- a/extra/exe-builder/UptimeKuma.csproj +++ b/extra/exe-builder/UptimeKuma.csproj @@ -160,7 +160,6 @@ DownloadForm.cs - From bba8c6fe4ec917484031a68edade6cd793e8d489 Mon Sep 17 00:00:00 2001 From: Louis Lam Date: Mon, 27 Feb 2023 18:48:11 +0800 Subject: [PATCH 115/171] [exe] Open menu item is clickable after the server is ready --- extra/exe-builder/Program.cs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/extra/exe-builder/Program.cs b/extra/exe-builder/Program.cs index 69cb1a73f..31befa544 100644 --- a/extra/exe-builder/Program.cs +++ b/extra/exe-builder/Program.cs @@ -26,7 +26,7 @@ namespace UptimeKuma { if (cwd != null) { Environment.CurrentDirectory = cwd; } - + Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new UptimeKumaApplicationContext()); @@ -42,6 +42,7 @@ namespace UptimeKuma { private MenuItem statusMenuItem; private MenuItem runWhenStarts; + private MenuItem openMenuItem; private RegistryKey registryKey = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true); @@ -57,10 +58,13 @@ namespace UptimeKuma { statusMenuItem = new MenuItem(startingText); statusMenuItem.Enabled = false; + openMenuItem = new MenuItem("Open", Open); + openMenuItem.Enabled = false; + trayIcon.Icon = Icon.ExtractAssociatedIcon(Assembly.GetExecutingAssembly().Location); trayIcon.ContextMenu = new ContextMenu(new MenuItem[] { statusMenuItem, - new("Open", Open), + openMenuItem, //new("Debug Console", DebugConsole), runWhenStarts, new("Check for Update...", CheckForUpdate), @@ -131,6 +135,7 @@ namespace UptimeKuma { try { tcpClient.Connect("127.0.0.1", 3001); statusMenuItem.Text = runningText; + openMenuItem.Enabled = true; trayIcon.Text = runningText; break; } catch (Exception) { From fc8a324f41abe75cd60f0e482330ddfbec7d1c96 Mon Sep 17 00:00:00 2001 From: Louis Lam Date: Mon, 27 Feb 2023 18:52:19 +0800 Subject: [PATCH 116/171] [exe] single instance only --- extra/exe-builder/Program.cs | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/extra/exe-builder/Program.cs b/extra/exe-builder/Program.cs index 31befa544..6004f6d4b 100644 --- a/extra/exe-builder/Program.cs +++ b/extra/exe-builder/Program.cs @@ -8,6 +8,7 @@ using System.Net; using System.Net.Sockets; using System.Reflection; using System.Runtime.InteropServices; +using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; using Microsoft.Win32; @@ -35,6 +36,8 @@ namespace UptimeKuma { public class UptimeKumaApplicationContext : ApplicationContext { + private static Mutex mutex = null; + const string appName = "Uptime Kuma"; private NotifyIcon trayIcon; @@ -48,6 +51,14 @@ namespace UptimeKuma { public UptimeKumaApplicationContext() { + + // Single instance only + bool createdNew; + mutex = new Mutex(true, appName, out createdNew); + if (!createdNew) { + return; + } + var startingText = "Starting server..."; trayIcon = new NotifyIcon(); trayIcon.Text = startingText; From 97e276bdb5ae959bb0657e8961c14f86a5a51427 Mon Sep 17 00:00:00 2001 From: Matthew Nickson Date: Mon, 27 Feb 2023 18:19:56 +0000 Subject: [PATCH 117/171] Fixed processing error with add API key Also added padding below add button Signed-off-by: Matthew Nickson --- src/components/APIKeyDialog.vue | 2 +- src/components/settings/APIKeys.vue | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/components/APIKeyDialog.vue b/src/components/APIKeyDialog.vue index 106ad8c74..7a4c2464c 100644 --- a/src/components/APIKeyDialog.vue +++ b/src/components/APIKeyDialog.vue @@ -144,6 +144,7 @@ export default { this.$root.addAPIKey(this.key, async (res) => { this.keyaddmodal.hide(); + this.processing = false; if (res.ok) { this.clearKey = res.key; this.keymodal.show(); @@ -151,7 +152,6 @@ export default { } else { toast.error(res.msg); } - this.processing = false; }); }, } diff --git a/src/components/settings/APIKeys.vue b/src/components/settings/APIKeys.vue index 3ecd53b7f..757789937 100644 --- a/src/components/settings/APIKeys.vue +++ b/src/components/settings/APIKeys.vue @@ -157,6 +157,7 @@ export default { .add-btn { padding-top: 20px; + padding-bottom: 20px; } .item { From 7e178d93dfcd15f781c0c46b4368e057d160abf9 Mon Sep 17 00:00:00 2001 From: Matthew Nickson Date: Mon, 27 Feb 2023 18:44:32 +0000 Subject: [PATCH 118/171] Moved location of disable expiry checkbox Co-authored-by: Nelson Chan Signed-off-by: Matthew Nickson --- src/components/APIKeyDialog.vue | 43 ++++++++++++++++++--------------- 1 file changed, 24 insertions(+), 19 deletions(-) diff --git a/src/components/APIKeyDialog.vue b/src/components/APIKeyDialog.vue index 7a4c2464c..745efd4ab 100644 --- a/src/components/APIKeyDialog.vue +++ b/src/components/APIKeyDialog.vue @@ -22,25 +22,30 @@
- - -
- - +
+
+ +
+
+
+ + +
+
From 958354e4db31eb59e7f054fb6a236c5ad1b9045f Mon Sep 17 00:00:00 2001 From: Louis Lam Date: Tue, 28 Feb 2023 16:58:36 +0800 Subject: [PATCH 119/171] Minor --- server/database.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/database.js b/server/database.js index e4e5e4bb4..5a83e1fbf 100644 --- a/server/database.js +++ b/server/database.js @@ -68,11 +68,11 @@ class Database { "patch-monitor-add-resend-interval.sql": true, "patch-ping-packet-size.sql": true, "patch-maintenance-table2.sql": true, - "patch-api-key-table.sql": true, "patch-add-gamedig-monitor.sql": true, "patch-add-google-analytics-status-page-tag.sql": true, "patch-http-body-encoding.sql": true, "patch-add-description-monitor.sql": true, + "patch-api-key-table.sql": true, }; /** From b21c2adcc2ec7808e0e8688ef6f25702f0af5c6a Mon Sep 17 00:00:00 2001 From: Bobby Ore Date: Tue, 28 Feb 2023 09:47:35 -0600 Subject: [PATCH 120/171] Rework lunasea notification to allow for device id and user id --- server/notification-providers/lunasea.js | 4 ++-- src/components/notifications/LunaSea.vue | 27 ++++++++++++++++++------ 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/server/notification-providers/lunasea.js b/server/notification-providers/lunasea.js index 3df6fe1aa..4d7136f75 100644 --- a/server/notification-providers/lunasea.js +++ b/server/notification-providers/lunasea.js @@ -9,8 +9,8 @@ class LunaSea extends NotificationProvider { async send(notification, msg, monitorJSON = null, heartbeatJSON = null) { let okMsg = "Sent Successfully."; let lunaseaurl = ""; - if (notification.lunaseaNotificationType === "user") { - lunaseaurl = "https://notify.lunasea.app/v1/custom/user/" + notification.lunaseaDevice; + if (notification.lunaseaTarget === "user") { + lunaseaurl = "https://notify.lunasea.app/v1/custom/user/" + notification.lunaseaUserID; } else { lunaseaurl = "https://notify.lunasea.app/v1/custom/device/" + notification.lunaseaDevice; } diff --git a/src/components/notifications/LunaSea.vue b/src/components/notifications/LunaSea.vue index 230e3b0d3..1ee4a8a51 100644 --- a/src/components/notifications/LunaSea.vue +++ b/src/components/notifications/LunaSea.vue @@ -1,18 +1,33 @@ + + From 098645701771ee6c4bb05ad6eb865e31703e4c55 Mon Sep 17 00:00:00 2001 From: Binyamin Yawitz Date: Tue, 28 Feb 2023 12:45:35 -0500 Subject: [PATCH 121/171] Added Hebrew (he_IL) support --- src/i18n.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/i18n.js b/src/i18n.js index c0c07797d..2ab69c35e 100644 --- a/src/i18n.js +++ b/src/i18n.js @@ -17,6 +17,7 @@ const languageList = { "pt-BR": "Português (Brasileiro)", "fi": "Suomi", "fr-FR": "Français (France)", + "he-IL": "עברית", "hu": "Magyar", "hr-HR": "Hrvatski", "it-IT": "Italiano (Italian)", From 94c3861608e1bb606e7e4da31064933877880b0d Mon Sep 17 00:00:00 2001 From: Louis Lam Date: Wed, 1 Mar 2023 23:23:16 +0800 Subject: [PATCH 122/171] Update Apprise to 1.3.0 --- docker/alpine-base.dockerfile | 2 +- docker/debian-base.dockerfile | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docker/alpine-base.dockerfile b/docker/alpine-base.dockerfile index 276d6e450..7aa0e8dcc 100644 --- a/docker/alpine-base.dockerfile +++ b/docker/alpine-base.dockerfile @@ -4,5 +4,5 @@ WORKDIR /app # Install apprise, iputils for non-root ping, setpriv RUN apk add --no-cache iputils setpriv dumb-init python3 py3-cryptography py3-pip py3-six py3-yaml py3-click py3-markdown py3-requests py3-requests-oauthlib git && \ - pip3 --no-cache-dir install apprise==1.2.1 && \ + pip3 --no-cache-dir install apprise==1.3.0 && \ rm -rf /root/.cache diff --git a/docker/debian-base.dockerfile b/docker/debian-base.dockerfile index 026189c47..e7c51ded4 100644 --- a/docker/debian-base.dockerfile +++ b/docker/debian-base.dockerfile @@ -11,7 +11,7 @@ WORKDIR /app RUN apt update && \ apt --yes --no-install-recommends install python3 python3-pip python3-cryptography python3-six python3-yaml python3-click python3-markdown python3-requests python3-requests-oauthlib \ sqlite3 iputils-ping util-linux dumb-init git && \ - pip3 --no-cache-dir install apprise==1.2.1 && \ + pip3 --no-cache-dir install apprise==1.3.0 && \ rm -rf /var/lib/apt/lists/* && \ apt --yes autoremove From ad26f0e817dc76522b5d53655f05d6186a5f14c0 Mon Sep 17 00:00:00 2001 From: Nelson Chan Date: Thu, 2 Mar 2023 06:44:16 +0800 Subject: [PATCH 123/171] Fix: assign tags when cloning monitor --- src/pages/EditMonitor.vue | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/pages/EditMonitor.vue b/src/pages/EditMonitor.vue index fa1935b0c..5d71ce1e0 100644 --- a/src/pages/EditMonitor.vue +++ b/src/pages/EditMonitor.vue @@ -936,7 +936,16 @@ message HealthCheckResponse { this.monitor.includeSensitiveData = undefined; this.monitor.maintenance = undefined; this.monitor.name = this.$t("cloneOf", [ this.monitor.name ]); - this.monitor.tags = undefined; // FIXME: Cloning tags does not work yet + this.$refs.tagsManager.newTags = this.monitor.tags.map((monitorTag) => { + return { + id: monitorTag.tag_id, + name: monitorTag.name, + color: monitorTag.color, + value: monitorTag.value, + new: true, + }; + }); + this.monitor.tags = undefined; } // Handling for monitors that are created before 1.7.0 From bc87abf5c2eb550784b424e76b6623ef029aa9e9 Mon Sep 17 00:00:00 2001 From: Nelson Chan Date: Fri, 3 Mar 2023 05:57:36 +0800 Subject: [PATCH 124/171] Fix: Clear uptime cache on push beat --- server/routers/api-router.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/server/routers/api-router.js b/server/routers/api-router.js index 2d5f96617..a36159cae 100644 --- a/server/routers/api-router.js +++ b/server/routers/api-router.js @@ -7,6 +7,7 @@ const dayjs = require("dayjs"); const { UP, MAINTENANCE, DOWN, PENDING, flipStatus, log } = require("../../src/util"); const StatusPage = require("../model/status_page"); const { UptimeKumaServer } = require("../uptime-kuma-server"); +const { UptimeCacheList } = require("../uptime-cache-list"); const { makeBadge } = require("badge-maker"); const { badgeConstants } = require("../config"); @@ -86,6 +87,7 @@ router.get("/api/push/:pushToken", async (request, response) => { await R.store(bean); io.to(monitor.user_id).emit("heartbeat", bean.toJSON()); + UptimeCacheList.clearCache(monitor.id); Monitor.sendStats(io, monitor.id, monitor.user_id); response.json({ From 5f1b58e8362ce1c2380a91c5a3b98e64afdf217f Mon Sep 17 00:00:00 2001 From: DevMirza Date: Fri, 3 Mar 2023 08:50:53 +0000 Subject: [PATCH 125/171] Translated using Weblate (Arabic (ar_SY)) Currently translated at 100.0% (697 of 697 strings) Translated using Weblate (Urdu) Currently translated at 27.6% (193 of 697 strings) Translated using Weblate (Urdu) Currently translated at 17.7% (124 of 697 strings) Translated using Weblate (Hungarian) Currently translated at 74.0% (516 of 697 strings) Translated using Weblate (English) Currently translated at 100.0% (697 of 697 strings) Added translation using Weblate (Urdu) Co-authored-by: DevMirza Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ar_SY/ Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/en/ Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/hu/ Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ur/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/ar-SY.json | 55 ++++++++++--- src/lang/en.json | 2 +- src/lang/hu.json | 2 +- src/lang/ur.json | 195 ++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 240 insertions(+), 14 deletions(-) create mode 100644 src/lang/ur.json diff --git a/src/lang/ar-SY.json b/src/lang/ar-SY.json index 3a4cf140e..a83c9a3c5 100644 --- a/src/lang/ar-SY.json +++ b/src/lang/ar-SY.json @@ -1,5 +1,5 @@ { - "languageName": "العربية", + "languageName": "إنجليزي", "checkEverySecond": "تحقق من كل {0} ثانية", "retryCheckEverySecond": "أعد محاولة كل {0} ثانية", "resendEveryXTimes": "إعادة تقديم كل {0} مرات", @@ -15,10 +15,10 @@ "statusMaintenance": "صيانة", "Schedule maintenance": "جدولة الصيانة", "Affected Monitors": "الشاشات المتأثرة", - "Pick Affected Monitors...": "اختيار الشاشات المتأثرة ...", + "Pick Affected Monitors...": "اختر الشاشات المتأثرة …", "Start of maintenance": "بداية الصيانة", "All Status Pages": "جميع صفحات الحالة", - "Select status pages...": "حدد صفحات الحالة ...", + "Select status pages...": "حدد صفحات الحالة …", "recurringIntervalMessage": "ركض مرة واحدة كل يوم | قم بالتشغيل مرة واحدة كل يوم {0}", "affectedMonitorsDescription": "حدد المراقبين المتأثرة بالصيانة الحالية", "affectedStatusPages": "إظهار رسالة الصيانة هذه على صفحات الحالة المحددة", @@ -178,7 +178,7 @@ "Token": "رمز", "Show URI": "أظهر URI", "Tags": "العلامات", - "Add New below or Select...": "أضف جديدًا أدناه أو حدد ...", + "Add New below or Select...": "إضافة جديد أدناه أو تحديد …", "Tag with this name already exist.": "علامة مع هذا الاسم موجود بالفعل.", "Tag with this value already exist.": "علامة مع هذه القيمة موجودة بالفعل.", "color": "اللون", @@ -192,7 +192,7 @@ "Purple": "نفسجي", "Pink": "لون القرنفل", "Custom": "العادة", - "Search...": "يبحث...", + "Search...": "يبحث…", "Avg. Ping": "متوسط. بينغ", "Avg. Response": "متوسط. إجابة", "Entry Page": "صفحة الدخول", @@ -238,10 +238,10 @@ "smtpBCC": "BCC", "discord": "خلاف", "Discord Webhook URL": "Discord Webhook URL", - "wayToGetDiscordURL": "يمكنك الحصول على هذا عن طريق الانتقال إلى إعدادات الخادم -> التكامل -> إنشاء WebHook", + "wayToGetDiscordURL": "يمكنك الحصول على هذا بالانتقال إلى إعدادات الخادم -> عمليات التكامل -> عرض الخطافات على الويب -> خطاف ويب جديد", "Bot Display Name": "اسم عرض الروبوت", "Prefix Custom Message": "بادئة رسالة مخصصة", - "Hello @everyone is...": "مرحبًا {'@'} الجميع ...", + "Hello @everyone is...": "مرحبًا {'@'} الجميع…", "teams": "فرق Microsoft", "Webhook URL": "Webhook URL", "wayToGetTeamsURL": "يمكنك معرفة كيفية إنشاء عنوان URL webhook {0}.", @@ -352,8 +352,8 @@ "Security": "حماية", "Steam API Key": "مفتاح API Steam", "Shrink Database": "تقلص قاعدة البيانات", - "Pick a RR-Type...": "اختر نوع RR ...", - "Pick Accepted Status Codes...": "اختيار رموز الحالة المقبولة ...", + "Pick a RR-Type...": "اختر نوع RR …", + "Pick Accepted Status Codes...": "اختر أكواد الحالة المقبولة …", "Default": "تقصير", "HTTP Options": "خيارات HTTP", "Create Incident": "إنشاء حادث", @@ -597,7 +597,7 @@ "Domain": "اِختِصاص", "Workstation": "محطة العمل", "disableCloudflaredNoAuthMsg": "أنت في وضع مصادقة لا توجد كلمة مرور غير مطلوبة.", - "trustProxyDescription": "الثقة 'x-forward-*'. إذا كنت ترغب في الحصول على IP العميل الصحيح وكوما في الوقت المناسب مثل Nginx أو Apache ، فيجب عليك تمكين ذلك.", + "trustProxyDescription": "ثق في رؤوس \"X-Forwarded- *\". إذا كنت ترغب في الحصول على عنوان IP الصحيح للعميل وكان Uptime Kuma خلف وكيل مثل Nginx أو Apache ، فيجب عليك تمكين هذا.", "wayToGetLineNotifyToken": "يمكنك الحصول على رمز الوصول من {0}", "Examples": "أمثلة", "Home Assistant URL": "Home Assistant URL", @@ -617,7 +617,7 @@ "goAlertInfo": "الهدف هو تطبيق مفتوح المصدر لجدولة الجدولة التلقائية والإشعارات (مثل الرسائل القصيرة أو المكالمات الصوتية). إشراك الشخص المناسب تلقائيًا بالطريقة الصحيحة وفي الوقت المناسب! {0}", "goAlertIntegrationKeyInfo": "احصل على مفتاح تكامل API العام للخدمة في هذا التنسيق \"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee\" عادةً قيمة المعلمة الرمزية لعنوان url المنسق.", "goAlert": "المرمى", - "backupOutdatedWarning": "إهمال", + "backupOutdatedWarning": "مهمل: نظرًا لأنه تمت إضافة الكثير من الميزات وأن ميزة النسخ الاحتياطي هذه لم يتم الحفاظ عليها قليلاً ، فلا يمكنها إنشاء نسخة احتياطية كاملة أو استعادتها.", "backupRecommend": "يرجى النسخ الاحتياطي لحجم الصوت أو مجلد البيانات (./data/) مباشرة بدلاً من ذلك.", "Optional": "اختياري", "squadcast": "القاء فريقي", @@ -681,5 +681,36 @@ "Specific Monitor Type": "نوع شاشة محدد", "dataRetentionTimeError": "يجب أن تكون فترة الاستبقاء 0 أو أكبر", "infiniteRetention": "ضبط على 0 للاحتفاظ لا نهائي.", - "confirmDeleteTagMsg": "هل أنت متأكد من أنك تريد حذف هذه العلامة؟ لن يتم حذف الشاشات المرتبطة بهذه العلامة." + "confirmDeleteTagMsg": "هل أنت متأكد من أنك تريد حذف هذه العلامة؟ لن يتم حذف الشاشات المرتبطة بهذه العلامة.", + "Custom Monitor Type": "نوع الشاشة المخصص", + "Game": "لعبة", + "Don't know how to get the token? Please read the guide:": "لا أعرف كيفية الحصول على الرمز المميز؟ يرجى قراءة الدليل:", + "Subject:": "موضوع:", + "Valid To:": "صالحة ل:", + "Days Remaining:": "الأيام المتبقية:", + "Issuer:": "المُصدر:", + "Fingerprint:": "بصمة:", + "Most likely causes:": "الأسباب المرجحة:", + "Help": "يساعد", + "Accept characters:": "قبول الأحرف:", + "plugin": "البرنامج المساعد | الإضافات", + "install": "ثَبَّتَ", + "installing": "التثبيت", + "uninstall": "الغاء التثبيت", + "uninstalling": "إلغاء التثبيت", + "loadingError": "لا يمكن جلب البيانات ، يرجى المحاولة مرة أخرى في وقت لاحق.", + "Example:": "مثال: {0}", + "Google Analytics ID": "معرف Google Analytics", + "markdownSupported": "دعم صيغة Markdown", + "Edit Tag": "تحرير العلامة", + "Server Address": "عنوان المستقبل", + "Learn More": "يتعلم أكثر", + "Automations can optionally be triggered in Home Assistant:": "يمكن تشغيل الأتمتة اختياريًا في Home Assistant:", + "Trigger type:": "نوع الزناد:", + "Event type:": "نوع الحدث:", + "Event data:": "بيانات الحدث:", + "More info on:": "مزيد من المعلومات حول: {0}", + "What you can try:": "ماذا تستطيع أن تجرب:", + "Packet Size": "حجم الحزمة", + "confirmUninstallPlugin": "هل أنت متأكد من أنك تريد إلغاء تثبيت هذا المكون الإضافي؟" } diff --git a/src/lang/en.json b/src/lang/en.json index 8f28c8e3a..0034fc99e 100644 --- a/src/lang/en.json +++ b/src/lang/en.json @@ -2,7 +2,7 @@ "languageName": "English", "Settings": "Settings", "Dashboard": "Dashboard", - "Help": "Help", + "Help": "help", "New Update": "New Update", "Language": "Language", "Appearance": "Appearance", diff --git a/src/lang/hu.json b/src/lang/hu.json index bc2ded73e..81694ce7a 100644 --- a/src/lang/hu.json +++ b/src/lang/hu.json @@ -411,7 +411,7 @@ "successMessage": "Sikeres üzenet", "lastDay1": "A hónap utolsó napja", "Guild ID": "Guild ID", - "Help": "Súgó", + "Help": "Segítség", "statusMaintenance": "Karbantartás", "Maintenance": "Karbantartás", "Game": "Játék" diff --git a/src/lang/ur.json b/src/lang/ur.json new file mode 100644 index 000000000..41dc56b64 --- /dev/null +++ b/src/lang/ur.json @@ -0,0 +1,195 @@ +{ + "Dashboard": "ڈیش بورڈ", + "New Update": "نئی تازہ کاری", + "Language": "زبان", + "Appearance": "ظہور", + "Theme": "خیالیہ", + "General": "جنرل", + "Game": "کھیل", + "Version": "ورژن", + "List": "فہرست", + "Add": "شامل کریں۔", + "Add New Monitor": "نیا مانیٹر شامل کریں", + "Quick Stats": "فوری اعدادوشمار", + "Up": "اوپر", + "Down": "نیچے", + "statusMaintenance": "دیکھ بھال", + "Maintenance": "دیکھ بھال", + "Unknown": "نامعلوم", + "General Monitor Type": "جنرل مانیٹر کی قسم", + "Specific Monitor Type": "مانیٹر کی مخصوص قسم", + "markdownSupported": "مارک ڈاون نحو کی حمایت کی گئی", + "pauseDashboardHome": "توقف", + "Pause": "توقف", + "Name": "نام", + "Status": "حالت", + "DateTime": "تاریخ وقت", + "Message": "پیغام", + "Resume": "دوبارہ شروع کریں", + "Edit": "ترمیم", + "Delete": "حذف کریں", + "Current": "کرنٹ", + "Uptime": "اپ ٹائم", + "Cert Exp.": "Cert Exp .", + "Monitor": "مانیٹر | مانیٹر", + "day": "دن | دن", + "-day": "-دن", + "hour": "گھنٹہ", + "Response": "جواب", + "Check Update On GitHub": "GitHub پر اپ ڈیٹ چیک کریں", + "Ping": "پنگ", + "Monitor Type": "مانیٹر کی قسم", + "Friendly Name": "دوستانہ نام", + "URL": "URL", + "Hostname": "میزبان کا نام", + "Port": "بندرگاہ", + "Heartbeat Interval": "دل کی دھڑکن کا وقفہ", + "Heartbeat Retry Interval": "دل کی دھڑکن دوبارہ کوشش کا وقفہ", + "Advanced": "اعلی درجے کی", + "checkEverySecond": "ہر {0} سیکنڈ میں چیک کریں", + "retryCheckEverySecond": "ہر {0} سیکنڈ میں دوبارہ کوشش کریں", + "Help": "مدد", + "ignoreTLSError": "HTTPS ویب سائٹس کے لیے TLS/SSL کی خرابی کو نظر انداز کریں", + "upsideDownModeDescription": "اسٹیٹس کو الٹا پلٹائیں۔ اگر سروس قابل رسائی ہے، تو یہ نیچے ہے۔", + "Upside Down Mode": "الٹا ڈاؤن موڈ", + "Max. Redirects": "زیادہ سے زیادہ ری ڈائریکٹ کرتا ہے", + "Accepted Status Codes": "قبول شدہ اسٹیٹس کوڈز", + "Push URL": "یو آر ایل کو پش کریں", + "needPushEvery": "آپ کو اس URL کو ہر {0} سیکنڈ میں کال کرنا چاہیے۔", + "pushOptionalParams": "اختیاری پیرامیٹرز: {0}", + "Save": "محفوظ کریں", + "Notifications": "اطلاعات", + "Setup Notification": "سیٹ اپ نوٹیفکیشن", + "Light": "روشنی", + "Dark": "اندھیرا", + "Auto": "آٹو", + "Theme - Heartbeat Bar": "تھیم - دل کی دھڑکن بار", + "Normal": "نارمل", + "Bottom": "نیچے", + "None": "کوئی نہیں۔", + "Search Engine Visibility": "سرچ انجن کی مرئیت", + "Allow indexing": "اشاریہ سازی کی اجازت دیں", + "Change Password": "پاس ورڈ تبدیل کریں", + "Current Password": "موجودہ خفیہ لفظ", + "New Password": "نیا پاس ورڈ", + "Repeat New Password": "نیا پاس ورڈ دہرائیں", + "Update Password": "پاس ورڈ اپ ڈیٹ کریں", + "Disable Auth": "Auth کو غیر فعال کریں", + "Enable Auth": "Auth کو فعال کریں", + "Please use this option carefully!": "براہ کرم اس اختیار کو احتیاط سے استعمال کریں!", + "Logout": "لاگ آوٹ", + "Leave": "چھوڑو", + "I understand, please disable": "میں سمجھتا ہوں، براہ کرم غیر فعال کریں", + "Confirm": "تصدیق کریں", + "Yes": "جی ہاں", + "No": "نہیں", + "Username": "صارف نام", + "Password": "پاس ورڈ", + "Remember me": "مجھے پہچانتے ہو", + "Login": "لاگ ان کریں", + "No Monitors, please": "کوئی مانیٹر نہیں، براہ کرم", + "add one": "ایک شامل کریں", + "Notification Type": "اطلاع کی قسم", + "Email": "ای میل", + "Test": "پرکھ", + "Certificate Info": "سرٹیفکیٹ کی معلومات", + "Resource Record Type": "ریسورس ریکارڈ کی قسم", + "goAlert": "الرٹ جاؤ", + "SecretAccessKey": "کلیدی ID تک رسائی حاصل کریں", + "PhoneNumbers": "فون نمبر", + "TemplateCode": "ٹیمپلیٹ کوڈ", + "SignName": "سائن نام", + "Bark Endpoint": "بارک اینڈ پوائنٹ", + "Bark Group": "بارک گروپ", + "AccessKeyId": "کلیدی ID تک رسائی حاصل کریں", + "languageName": "انگریزی", + "Settings": "ترتیبات", + "Primary Base URL": "بنیادی بنیاد URL", + "Pending": "زیر التواء", + "Passive Monitor Type": "غیر فعال مانیٹر کی قسم", + "No important events": "کوئی اہم واقعات نہیں", + "-hour": "-گھنٹہ", + "shrinkDatabaseDescription": "SQLite کے لیے ڈیٹا بیس ویکیوم کو متحرک کریں۔ اگر آپ کا ڈیٹا بیس 1.10.0 کے بعد بنتا ہے، تو AUTO_VACUUM پہلے ہی فعال ہے اور اس کارروائی کی ضرورت نہیں ہے۔", + "goAlertIntegrationKeyInfo": "اس فارمیٹ میں سروس کے لیے عام API انٹیگریشن کلید حاصل کریں \"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeee\" عام طور پر کاپی شدہ URL کے ٹوکن پیرامیٹر کی قدر۔", + "Sms template must contain parameters: ": "ایس ایم ایس ٹیمپلیٹ میں پیرامیٹرز ہونا ضروری ہے: ", + "Keyword": "کلیدی لفظ", + "Retries": "دوبارہ کوشش کرتا ہے", + "Resend Notification if Down X times consequently": "نوٹیفکیشن دوبارہ بھیجیں اگر X بار لگاتار نیچے جائیں", + "resendEveryXTimes": "ہر {0} بار دوبارہ بھیجیں", + "resendDisabled": "دوبارہ بھیجنا غیر فعال ہے", + "retriesDescription": "سروس کو ڈاؤن کے بطور نشان زد کرنے اور ایک اطلاع بھیجے جانے سے پہلے زیادہ سے زیادہ کوششیں کریں", + "maxRedirectDescription": "فالو کرنے کے لیے ری ڈائریکٹس کی زیادہ سے زیادہ تعداد۔ ری ڈائریکٹ کو غیر فعال کرنے کے لیے 0 پر سیٹ کریں۔", + "Not available, please setup.": "دستیاب نہیں، براہ کرم سیٹ اپ کریں۔", + "Timezone": "ٹائم زون", + "Discourage search engines from indexing site": "انڈیکسنگ سائٹ سے سرچ انجنوں کی حوصلہ شکنی کریں", + "disableauth.message1": "کیا آپ واقعی تصدیق کو غیر فعال کرنا چاہتے ہیں؟", + "disableauth.message2": "یہ ان منظرناموں کے لیے ڈیزائن کیا گیا ہے جہاں آپ کا ارادہ ہے کہ آپ فریق ثالث کی توثیق کو لاگو کریں اپ ٹائم کوما جیسے کہ Cloudflare Access، Authelia یا دیگر تصدیقی میکانزم کے سامنے۔", + "Resolver Server": "حل کرنے والا سرور", + "Last Result": "آخری نتیجہ", + "Create your admin account": "اپنا ایڈمن اکاؤنٹ بنائیں", + "Repeat Password": "پاس ورڈ دوبارہ لکھیے", + "Import Backup": "بیک اپ درآمد کریں", + "Export Backup": "بیک اپ درآمد کریں", + "Import": "درآمد کریں", + "respTime": "ریسپ وقت (ایم ایس)", + "notAvailableShort": "N / A", + "Default enabled": "ڈیفالٹ فعال ہے", + "Create": "بنانا", + "Clear Data": "واضح اعداد و شمار", + "Events": "تقریبات", + "Heartbeats": "دل کی دھڑکنیں", + "Auto Get": "آٹو حاصل کریں", + "Schedule maintenance": "شیڈول کی بحالی", + "Affected Monitors": "متاثرہ مانیٹر", + "Start of maintenance": "بحالی کا آغاز", + "All Status Pages": "تمام اسٹیٹس پیجز", + "Select status pages...": "اسٹیٹس کے صفحات منتخب کریں…", + "alertWrongFileType": "براہ کرم ایک JSON فائل منتخب کریں۔", + "Clear all statistics": "تمام اعدادوشمار کو صاف کریں", + "Skip existing": "موجودہ کو چھوڑ دیں", + "Overwrite": "اوور رائٹ کریں", + "Options": "اختیارات", + "Verify Token": "ٹوکن کی تصدیق کریں", + "Setup 2FA": "2FA سیٹ اپ کریں", + "Enable 2FA": "2FA کو فعال کریں", + "2FA Settings": "2FA کی ترتیبات", + "Two Factor Authentication": "دو عنصر کی تصدیق", + "Active": "فعال", + "Inactive": "غیر فعال", + "Token": "ٹوکن", + "Show URI": "URI دکھائیں", + "Tags": "ٹیگز", + "Tag with this name already exist.": "اس نام کا ٹیگ پہلے سے موجود ہے۔", + "Tag with this value already exist.": "اس قدر کے ساتھ ٹیگ پہلے سے موجود ہے۔", + "color": "رنگ", + "value (optional)": "قدر (اختیاری)", + "Gray": "سرمئی", + "Red": "سرخ", + "Orange": "کینو", + "Blue": "نیلا", + "Indigo": "انڈگو", + "Purple": "جامنی", + "Pink": "گلابی", + "Custom": "اپنی مرضی کے مطابق", + "Avg. Response": "اوسط جواب", + "No Services": "کوئی خدمات نہیں", + "All Systems Operational": "تمام سسٹمز آپریشنل", + "Partially Degraded Service": "جزوی طور پر انحطاط شدہ سروس", + "Degraded Service": "ڈیگریڈڈ سروس", + "Add Group": "گروپ شامل کریں", + "Add a monitor": "مانیٹر شامل کریں", + "Edit Status Page": "اسٹیٹس پیج میں ترمیم کریں", + "Go to Dashboard": "ڈیش بورڈ پر جائیں", + "Export": "برآمد کریں", + "Apply on all existing monitors": "تمام موجودہ مانیٹر پر لاگو کریں", + "Pick Affected Monitors...": "متاثرہ مانیٹر منتخب کریں…", + "alertNoFile": "براہ کرم درآمد کرنے کے لیے ایک فائل منتخب کریں۔", + "Keep both": "دونوں رکھو", + "Disable 2FA": "2FA کو غیر فعال کریں", + "Add New below or Select...": "ذیل میں نیا شامل کریں یا منتخب کریں…", + "Green": "سبز", + "Search...": "تلاش کریں…", + "Avg. Ping": "دسمبر پنگ", + "Entry Page": "داخلہ صفحہ", + "statusPageNothing": "یہاں کچھ نہیں، براہ کرم ایک گروپ یا مانیٹر شامل کریں۔" +} From 9a1301d0a9a22ff384af0ae4d31c6e726f403c86 Mon Sep 17 00:00:00 2001 From: Michal Date: Fri, 3 Mar 2023 08:50:53 +0000 Subject: [PATCH 126/171] Translated using Weblate (Czech) Currently translated at 100.0% (704 of 704 strings) Translated using Weblate (Czech) Currently translated at 100.0% (704 of 704 strings) Translated using Weblate (Czech) Currently translated at 99.7% (692 of 694 strings) Translated using Weblate (Czech) Currently translated at 100.0% (677 of 677 strings) Translated using Weblate (Czech) Currently translated at 100.0% (674 of 674 strings) Translated using Weblate (Czech) Currently translated at 100.0% (669 of 669 strings) Translated using Weblate (Czech) Currently translated at 100.0% (667 of 667 strings) Translated using Weblate (Czech) Currently translated at 100.0% (697 of 697 strings) Translated using Weblate (Czech) Currently translated at 99.8% (696 of 697 strings) Co-authored-by: Michal Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/cs/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/cs-CZ.json | 56 +++++++++++++++++++++++++++++++++++++-------- 1 file changed, 47 insertions(+), 9 deletions(-) diff --git a/src/lang/cs-CZ.json b/src/lang/cs-CZ.json index dc8e26373..5680f4eb9 100644 --- a/src/lang/cs-CZ.json +++ b/src/lang/cs-CZ.json @@ -12,7 +12,7 @@ "grpcMethodDescription": "Název metody se převede do cammelCase formátu jako je sayHello, check, aj.", "acceptedStatusCodesDescription": "Vyberte stavové kódy, které jsou považovány za úspěšnou odpověď.", "Maintenance": "Údržba", - "statusMaintenance": "Údržba", + "statusMaintenance": "V údržbě", "Schedule maintenance": "Naplánovat údržbu", "Affected Monitors": "Dotčené dohledy", "Pick Affected Monitors...": "Vyberte dotčené dohledy…", @@ -24,9 +24,9 @@ "affectedStatusPages": "Zobrazit tuto zprávu o údržbě na vybraných stavových stránkách", "atLeastOneMonitor": "Vyberte alespoň jeden dotčený dohled", "passwordNotMatchMsg": "Hesla se neshodují.", - "notificationDescription": "Pro zajištění funkčnosti oznámení je nutné jej přiřadit dohledu.", + "notificationDescription": "Aby byla upozornění fungovalo, je nutné ho přiřadit k dohledu.", "keywordDescription": "Vyhledat klíčové slovo v prosté odpovědi HTML nebo JSON. Při hledání se rozlišuje velikost písmen.", - "pauseDashboardHome": "Pozastaveno", + "pauseDashboardHome": "Pauza", "deleteMonitorMsg": "Opravdu chcete odstranit tento dohled?", "deleteMaintenanceMsg": "Opravdu chcete odstranit tuto údržbu?", "deleteNotificationMsg": "Opravdu chcete odstranit toto oznámení pro všechny dohledy?", @@ -59,7 +59,7 @@ "Add New Monitor": "Přidat nový dohled", "Quick Stats": "Rychlý přehled", "Up": "Běží", - "Down": "Nedostupný", + "Down": "Nedostupné", "Pending": "Čekám", "Unknown": "Neznámý", "Pause": "Pauza", @@ -74,7 +74,7 @@ "Current": "Aktuální", "Uptime": "Doba provozu", "Cert Exp.": "Platnost certifikátu", - "Monitor": "Dohled | Dohledy", + "Monitor": "Dohled | Dohledů", "day": "den | dny/í", "-day": "-dní", "hour": "hodina", @@ -581,7 +581,7 @@ "Connection String": "Připojovací řetězec", "Query": "Dotaz", "settingsCertificateExpiry": "Platnost TLS certifikátu", - "certificationExpiryDescription": "Aktivovat oznámení nad HTTPS dohledy, pokud platnost TLS certifikátu vyprší za:", + "certificationExpiryDescription": "HTTPS dohledy upozorní na vypršení platnosti certifikátu TLS nastavenou dobu dopředu:", "Setup Docker Host": "Nastavit Docker hostitele", "Connection Type": "Typ připojení", "Docker Daemon": "Démon Dockeru", @@ -620,8 +620,8 @@ "backupRecommend": "Prosím, zálohujte si ručně celý svazek nebo datovou složku (./data/).", "Optional": "Volitelný", "squadcast": "Squadcast", - "SendKey": "SendKey", - "SMSManager API Docs": "Dokumentace SMSManager API ", + "SendKey": "Klíč k odesílání", + "SMSManager API Docs": "Dokumentace API služby SMSManager ", "Gateway Type": "Typ brány", "SMSManager": "SMSManager", "You can divide numbers with": "Čísla můžete oddělit pomocí", @@ -696,5 +696,43 @@ "Google Analytics ID": "ID Google Analytics", "Edit Tag": "Upravit štítek", "Server Address": "Adresa serveru", - "Learn More": "Zjistěte více" + "Learn More": "Zjistěte více", + "notificationRegional": "Místní", + "telegramMessageThreadID": "(Nepovinné) ID vlákna zprávy", + "telegramMessageThreadIDDescription": "Nepovinný jedinečný identifikátor cílového vlákna zprávy (tématu) fóra; pouze pro nadskupiny fóra", + "telegramProtectContentDescription": "Pokud je tato funkce povolena, budou zprávy bota v aplikaci Telegram chráněny před přeposíláním a ukládáním.", + "Body Encoding": "Kódování těla zprávy", + "telegramProtectContent": "Ochrana přeposílání/ukládání", + "telegramSendSilently": "Odeslat potichu", + "telegramSendSilentlyDescription": "Zprávu odešle tiše. Uživatelé obdrží oznámení bez zvuku.", + "Clone": "Klonovat", + "cloneOf": "Klonovat {0}", + "Clone Monitor": "Klonovat dohled", + "API Keys": "API klíče", + "Expiry": "Platnost", + "Don't expire": "Nevyprší", + "Continue": "Pokračovat", + "Add Another": "Přidat další", + "Key Added": "Klíč byl přidán", + "Expiry date": "Vyprší dne", + "No API Keys": "Žàdné API klíče", + "apiKey-active": "Aktivní", + "apiKey-expired": "Vypršel", + "Expires": "Vyprší", + "disableAPIKeyMsg": "Jste si jistý, že chcete deaktivovat tento API klíč?", + "Add API Key": "Přidat API klíč", + "apiKey-inactive": "Neaktivní", + "Generate": "Vygenerovat", + "apiKeyAddedMsg": "Váš klíč API byl přidán. Poznamenejte si jej, protože se již nebude zobrazovat.", + "deleteAPIKeyMsg": "Opravdu chcete tento klíč API odstranit?", + "pagertreeUrgency": "Urgence", + "pagertreeSilent": "Potichu", + "pagertreeLow": "Slabě", + "pagertreeCritical": "Kritické", + "pagertreeResolve": "Automatické řešení", + "pagertreeDoNothing": "Nedělej nic", + "pagertreeIntegrationUrl": "Integrační URL", + "pagertreeMedium": "Středně", + "pagertreeHigh": "Nahlas", + "wayToGetPagerTreeIntegrationURL": "Po vytvoření integrace Uptime Kuma v aplikaci PagerTree zkopírujte koncový bod. Zobrazit všechny podrobnosti {0}" } From 8d31187a74add3e150bae2d757793329edac6b77 Mon Sep 17 00:00:00 2001 From: krolli Date: Fri, 3 Mar 2023 08:50:53 +0000 Subject: [PATCH 127/171] Translated using Weblate (Hungarian) Currently translated at 74.0% (516 of 697 strings) Co-authored-by: krolli Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/hu/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/hu.json | 159 ++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 130 insertions(+), 29 deletions(-) diff --git a/src/lang/hu.json b/src/lang/hu.json index 81694ce7a..a59d8cd2c 100644 --- a/src/lang/hu.json +++ b/src/lang/hu.json @@ -1,7 +1,7 @@ { "languageName": "Magyar", "checkEverySecond": "Ellenőrzés {0} másodpercenként", - "retryCheckEverySecond": "Újrapróbál {0} másodpercenként.", + "retryCheckEverySecond": "Újrapróbálkozás minden {0} másodpercenként", "retriesDescription": "Maximális próbálkozás mielőtt a szolgáltatás 'Leállt' jelölést kap és értesítés kerül kiküldésre", "ignoreTLSError": "TLS/SSL hibák figyelmen kívül hagyása HTTPS weboldalaknál", "upsideDownModeDescription": "Az állapot megfordítása. Ha a szolgáltatás elérhető, akkor lesz leállt állapotú.", @@ -22,7 +22,7 @@ "confirmClearStatisticsMsg": "Biztos, hogy törölni akar MINDEN statisztikát?", "importHandleDescription": "Válassza a 'Meglévő kihagyását', ha ki szeretné hagyni az azonos nevő figyelőket vagy értesítésket. A 'Felülírás' törölni fog minden meglévő figyelőt és értesítést.", "confirmImportMsg": "Biztos, hogy importálja a mentést? Győződjön meg róla, hogy jól választotta ki az importálás opciót.", - "twoFAVerifyLabel": "Kérem, adja meg a token-t, hogy a 2FA működését ellenőrizzük", + "twoFAVerifyLabel": "Kérem add meg a token-t a 2FA ellenőrzéséhez:", "tokenValidSettingsMsg": "A token érvényes! El tudja menteni a 2FA beállításait.", "confirmEnableTwoFAMsg": "Biztosan engedélyezi a 2FA-t?", "confirmDisableTwoFAMsg": "Biztosan letiltja a 2FA-t?", @@ -54,7 +54,7 @@ "Delete": "Törlés", "Current": "Aktuális", "Uptime": "Uptime", - "Cert Exp.": "SSL lejárat", + "Cert Exp.": "Tanúsítvány Lejárata", "day": "nap", "-day": "-nap", "hour": "óra", @@ -135,7 +135,7 @@ "Auto Get": "Auto lekérd.", "backupDescription": "Mentheti az összes figyelőt és értesítést egy JSON fájlba.", "backupDescription2": "Megj: Történeti és esemény adatokat nem tartalmaz.", - "backupDescription3": "Érzékeny adatok, pl. szolgáltatás kulcsok is vannak az export fájlban. Figyeljen erre!", + "backupDescription3": "Érzékeny adatok, pl. értesítés tokenek is vannak az export fájlban. Figyeljen erre!", "alertNoFile": "Válaszzon ki egy fájlt az importáláshoz.", "alertWrongFileType": "Válasszon egy JSON fájlt.", "Clear all statistics": "Összes statisztika törlése", @@ -154,7 +154,7 @@ "Token": "Token", "Show URI": "URI megmutatása", "Tags": "Címkék", - "Add New below or Select...": "Adjon hozzá lentre vagy válasszon...", + "Add New below or Select...": "Új hozzáadása alább vagy Válasszon…", "Tag with this name already exist.": "Ilyen nevű címke már létezik.", "Tag with this value already exist.": "Ilyen értékű címke már létezik.", "color": "szín", @@ -167,7 +167,7 @@ "Indigo": "Indigó", "Purple": "Lila", "Pink": "Rózsaszín", - "Search...": "Keres...", + "Search...": "Keresés…", "Avg. Ping": "Átl. ping", "Avg. Response": "Átl. válasz", "Entry Page": "Nyitólap", @@ -188,7 +188,7 @@ "signal": "Signal", "gotify": "Gotify", "slack": "Slack", - "rocket.chat": "Rocket.chat", + "rocket.chat": "Rocket.Chat", "pushover": "Pushover", "pushy": "Pushy", "octopush": "Octopush", @@ -197,7 +197,7 @@ "apprise": "Apprise (50+ értesítési szolgáltatás)", "pushbullet": "Pushbullet", "line": "Line Messenger", - "mattermost": "A legfontosabb", + "mattermost": "Mattermost", "Status Page": "Státusz oldal", "Status Pages": "Státusz oldalak", "Primary Base URL": "Elsődleges URL", @@ -211,7 +211,7 @@ "wayToGetTelegramToken": "Innen kaphat token-t: {0}.", "Chat ID": "Csevegés ID", "supportTelegramChatID": "Támogatja a közvetlen csevegést, csoportnak küldést és csatona ID-t is", - "wayToGetTelegramChatID": "A csevegés ID-t kinyerheti azzal, hogy küld egy üzenetet a bot-nak és erre az URL-re ellátogat, ahol láthatja a chat_id:-t", + "wayToGetTelegramChatID": "A csevegés ID-t szerezhet ha küld egy üzenetet a bot-nak és ellátogat erre az URL-re, ahol láthatja a chat_id-t:", "YOUR BOT TOKEN HERE": "AZ ÖN BOT TOKENJE ITT", "chatIDNotFound": "Csevegés ID nem található, küldjön egy első üzenetet a bot-nak", "Post URL": "Cél URL (Post)", @@ -227,17 +227,17 @@ "smtpCC": "Másolat", "smtpBCC": "Titkos másolat", "Discord Webhook URL": "Discord cím (webhook URL)", - "wayToGetDiscordURL": "Kaphat egy ilyet, ha ellátogat a Server Settings -> Integrations -> Create Webhook oldalra", + "wayToGetDiscordURL": "Ezt itt szerezhetsz: Server Settings -> Integrations -> View Webhooks -> New Webhook", "Bot Display Name": "Bot megjelenő neve", "Prefix Custom Message": "Egyedi előtét üzenet", - "Hello @everyone is...": "Hello {'@'}mindenki...", + "Hello @everyone is...": "Hello {'@'}everyone …", "Webhook URL": "Cím (webhook URL)", "wayToGetTeamsURL": "Itt megnézheti, hogy kell ilyen URL-t készíteni: {0}.", "Number": "Szám", "Recipients": "Címzettek", "needSignalAPI": "Egy Signal kliensre van szüksége, amihez REST API tartozik.", "wayToCheckSignalURL": "Itt megnézheti, hogy hozhat létre egyet:", - "signalImportant": "FONTOS! Nem keverheti a csoportokat és számokat a címzetteknél.", + "signalImportant": "FONTOS! Nem keverheti a csoportokat és számokat a címzetteknél!", "Application Token": "Alkalmazás token", "Server URL": "Szerver URL", "Priority": "Prioritás", @@ -249,20 +249,20 @@ "aboutKumaURL": "Ha üresen hagyja a Uptime Kuma cím mezőt, akkor a projekt GitHub oldala lesz az alapértelmezett.", "emojiCheatSheet": "Emoji csalás: {0}", "clicksendsms": "ClickSend SMS", - "User Key": "Felhasználói kulcs", + "User Key": "Felhasználói Kulcs", "Device": "Eszköz", - "Message Title": "Üzenet címe", - "Notification Sound": "Értesítési hang", + "Message Title": "Üzenet Címe", + "Notification Sound": "Értesítési Hang", "More info on:": "További információ: {0}", "pushoverDesc1": "A vészhelyzeti prioritásnak (2) 30 másodperc az újrapróbálkozási alapértéke és egy óra után lejár.", "pushoverDesc2": "Ha különböző eszközökre szeretne értesítést küldeni, töltse ki az Eszköz mezőt.", "SMS Type": "SMS típusa", "octopushTypePremium": "Premium (Fast - recommended for alerting)", "octopushTypeLowCost": "Low Cost (Slow - sometimes blocked by operator)", - "checkPrice": "Nézze meg az {0} féle árat:", + "checkPrice": "Ellenőrizze {0} árat:", "apiCredentials": "API kulcsok", - "octopushLegacyHint": "Az Octopush régi (2011-2020) verzióját használja vagy az újat?", - "Check octopush prices": "Nézze meg az Octopush {0} féle árát.", + "octopushLegacyHint": "Az Octopush régi (2011-2020) verzióját használod vagy az újat?", + "Check octopush prices": "Csekkold az octopush {0} árakat.", "octopushPhoneNumber": "Telefonszám (nemz. formátum, pl : +36705554433) ", "octopushSMSSender": "SMS küldő neve : 3-11 betű/szám (a-zA-Z0-9) vagy szóköz", "LunaSea Device ID": "LunaSea eszköz ID", @@ -315,24 +315,24 @@ "Security": "Biztonság", "Steam API Key": "Steam API kulcs", "Shrink Database": "Adatbázis tömörítése", - "Pick a RR-Type...": "Válasszon egy RR-típust…", - "Pick Accepted Status Codes...": "Válasszon olyan kódot, ami elfogadottnak számít…", - "Default": "Alapért.", + "Pick a RR-Type...": "Válassz egy RR-típust…", + "Pick Accepted Status Codes...": "Válassz Elfogadható Állapot Kódokat…", + "Default": "Alapértelmezett", "HTTP Options": "HTTP beállítások", "Create Incident": "Incidens létrehozása", "Title": "Cím", "Content": "Tartalom", "Style": "Stílus", "info": "info", - "warning": "warning", - "danger": "danger", - "primary": "primary", - "light": "light", - "dark": "dark", + "warning": "figyelmeztetés", + "danger": "veszély", + "primary": "elsődleges", + "light": "világos", + "dark": "sötét", "Post": "Bejegyzés", "Please input title and content": "Adjon meg címet és tartalmat", "Created": "Létrehozva", - "Last Updated": "Utolsó mód.", + "Last Updated": "Utoljára Módosítva", "Unpin": "Leválaszt", "Switch to Light Theme": "Világos témára váltás", "Switch to Dark Theme": "Sötét témára váltás", @@ -408,11 +408,112 @@ "Affected Monitors": "Érintett monitorok", "Packet Size": "Csomag mérete", "IconUrl": "Ikon URL", - "successMessage": "Sikeres üzenet", + "successMessage": "Siker Üzenet", "lastDay1": "A hónap utolsó napja", "Guild ID": "Guild ID", "Help": "Segítség", "statusMaintenance": "Karbantartás", "Maintenance": "Karbantartás", - "Game": "Játék" + "Game": "Játék", + "markdownSupported": "Markdown szintaxis támogatott", + "Pick Affected Monitors...": "Érintett monitor(ok) kiválasztása…", + "All Status Pages": "Összes státusz oldal", + "topic": "Téma", + "topicExplanation": "MQTT téma a monitorhoz", + "webhookAdditionalHeadersDesc": "Hozzáad további fejléceket a webhook-hoz", + "error": "hiba", + "critical": "kritikus", + "Customize": "Testreszab", + "Custom Footer": "Egyedi Lábléc", + "Custom CSS": "Egyedi CSS", + "Proxies": "Proxyk", + "default": "Alapértelmezett", + "enabled": "Bekapcsolva", + "Certificate Chain": "Tanúsítvány Lánc", + "Valid": "Érvényes", + "Invalid": "Érvénytelen", + "User": "Felhasználó", + "Installed": "Telepítve", + "Not installed": "Nincs telepítve", + "Running": "Fut", + "Not running": "Nem fut", + "Remove Token": "Token Eltávolítása", + "Start": "Inditás", + "Stop": "Megállítás", + "Slug": "Slug", + "Accept characters:": "Karakterek engedélyezése:", + "Next": "Következő", + "The slug is already taken. Please choose another slug.": "Ez a slug már használatban van. Kérlek válassz másikat.", + "No Proxy": "Nincs Proxy", + "HTTP Basic Auth": "HTTP Basic Auth", + "New Status Page": "Új Állapot Oldal", + "Page Not Found": "Oldal Nem Található", + "Reverse Proxy": "Reverse Proxy", + "Backup": "Mentés", + "cloudflareWebsite": "Cloudflare Weboldal", + "Message:": "Üzenet:", + "Trust Proxy": "Trust Proxy", + "Other Software": "Egyébb Szoftware", + "Please read": "Olvasd el", + "Subject:": "Tárgy:", + "Valid To:": "Érvényes eddig:", + "Issuer:": "Kiállitó:", + "Fingerprint:": "Ujjlenyomat:", + "No status pages": "Nincsenek állapot oldalak", + "Domain Name Expiry Notification": "Domain Név Lejárás Értesítés", + "Date Created": "Létrehozva Ekkor", + "Footer Text": "Lábléc Szöveg", + "affectedMonitorsDescription": "Válaszd ki azokat a monitorokat amelyek a karbantartásban érintettek", + "affectedStatusPages": "Mutasd ezt az üzenetet a kiválasztott állapot oldalakon", + "atLeastOneMonitor": "Válassz legalább egy érintett monitort", + "endpoint": "végpont", + "promosmsLogin": "API Bejelentkezési Név", + "pushoversounds classical": "Klasszikus", + "pushoversounds cosmic": "Kozmikus", + "pushoversounds falling": "Esés", + "pushoversounds gamelan": "Gamelán", + "pushoversounds incoming": "Érkező", + "pushoversounds bike": "Bicikli", + "pushoversounds bugle": "Kürt", + "pushoversounds cashregister": "Pénztárgép", + "pushoversounds intermission": "Intermission", + "pushoversounds magic": "Varázslat", + "pushoversounds mechanical": "Mechanikus", + "pushoversounds pianobar": "Zongora", + "pushoversounds siren": "Sziréna", + "pushoversounds spacealarm": "Térriasztó", + "pushoversounds tugboat": "Vontatóhajó", + "pushoversounds alien": "Űrlény Riasztó (hosszú)", + "pushoversounds climb": "Mászás (hosszú)", + "pushoversounds persistent": "Állandó (hosszú)", + "pushoversounds echo": "Pushover Visszhang (hosszú)", + "pushoversounds updown": "Fent Lent (hosszú)", + "pushoversounds vibrate": "Csak Rezgés", + "pushoversounds none": "Egyik se (néma)", + "pushyAPIKey": "Titkos API Kulcs", + "pushyToken": "Eszköz token", + "Kook": "Kook", + "Free Mobile API Key": "Ingyenes Mobil API Kulcs", + "Enable TLS": "TLS bekapcsolása", + "proxyDescription": "A proxyk egy monitorhoz kell legyenek rendelve hogy működjenek.", + "Server Address": "Szerver Cím", + "resendEveryXTimes": "Újraküldés minden {0} időnként", + "resendDisabled": "Újraküldés kikapcsolva", + "Resend Notification if Down X times consequently": "Értesítés Újraküldése ha X-szer nem válaszol", + "Monitor": "Monitor | Monitorok", + "setAsDefault": "Beállítás Alapértelmezetnek", + "Proxy": "Proxy", + "Strategy": "Stratégia", + "Free Mobile User Identifier": "Ingyenes Mobil Felhasználó Azonosító", + "Schedule maintenance": "Karbantartás ütemezése", + "Select status pages...": "Státusz oldal kiválasztása…", + "Custom": "Egyedi", + "webhookAdditionalHeadersTitle": "További Fejlécek", + "deleteProxyMsg": "Biztos hogy kitörlöd ezt a proxy-t az összes monitorok-tól?", + "HTTP Headers": "HTTP Fejlécek", + "For example: nginx, Apache and Traefik.": "Például: nginx, Apache vagy Traefik.", + "dnsPortDescription": "DNS szerver portja. Alapéretelmezett az 53. Bármikor megváltoztathatja.", + "promosmsPassword": "API Jelszó", + "wayToGetKookBotToken": "Hozz létre egy app-ot és szerezz egy tokent itt: {0}", + "wayToGetKookGuildID": "Válts át 'Developer Mode'-ra a Kook beállításoknál majd jobb klikkelve a guildra megtalálod az ID-jét" } From 61699bb238956b837b8a8622c52232eb353fc00b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Francesco=20Giuffr=C3=A9?= Date: Fri, 3 Mar 2023 08:50:53 +0000 Subject: [PATCH 128/171] Translated using Weblate (Italian) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 59.6% (416 of 697 strings) Co-authored-by: Francesco Giuffré Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/it/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/it-IT.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/lang/it-IT.json b/src/lang/it-IT.json index cc6a397b7..077bccfba 100644 --- a/src/lang/it-IT.json +++ b/src/lang/it-IT.json @@ -416,5 +416,6 @@ "Page Not Found": "Pagina non trovata", "Affected Monitors": "Monitoraggi interessati", "Pick Affected Monitors...": "Seleziona i monitoraggi interessati…", - "Valid": "Valido" + "Valid": "Valido", + "Certificate Expiry Notification": "Notifica scadenza certificato" } From 22577b88e994da934b4801785c62f07671521043 Mon Sep 17 00:00:00 2001 From: Zandor Smith Date: Fri, 3 Mar 2023 08:50:53 +0000 Subject: [PATCH 129/171] Translated using Weblate (Dutch) Currently translated at 99.7% (695 of 697 strings) Translated using Weblate (Dutch) Currently translated at 92.8% (647 of 697 strings) Co-authored-by: Zandor Smith Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/nl/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/nl-NL.json | 223 ++++++++++++++++++++++++++++++++++++++------ 1 file changed, 196 insertions(+), 27 deletions(-) diff --git a/src/lang/nl-NL.json b/src/lang/nl-NL.json index 32c795456..ddd313e3d 100644 --- a/src/lang/nl-NL.json +++ b/src/lang/nl-NL.json @@ -1,14 +1,14 @@ { "languageName": "Nederlands", - "checkEverySecond": "Controleer elke {0} seconden.", + "checkEverySecond": "Controleer elke {0} seconden", "retriesDescription": "Maximum aantal nieuwe pogingen voordat de service wordt gemarkeerd als niet beschikbaar en er een melding wordt verzonden", "ignoreTLSError": "Negeer TLS/SSL-fout voor HTTPS-websites", - "upsideDownModeDescription": "Draai de status om. Als de service bereikbaar is, is deze OFFLINE.", + "upsideDownModeDescription": "Draai de status om. Als de service bereikbaar is, zal OFFLINE getoond worden.", "maxRedirectDescription": "Maximaal aantal te volgen omleidingen. Stel in op 0 om omleidingen uit te schakelen.", "acceptedStatusCodesDescription": "Selecteer statuscodes die als een succesvol antwoord worden beschouwd.", "passwordNotMatchMsg": "Het herhaalwachtwoord komt niet overeen.", "notificationDescription": "Wijs a.u.b. een melding toe aan de monitor(s) om het te laten werken.", - "keywordDescription": "Zoek trefwoord in gewone html of JSON-response en het is hoofdlettergevoelig", + "keywordDescription": "Zoek trefwoord in gewone html of JSON-response en het is hoofdlettergevoelig.", "pauseDashboardHome": "Gepauzeerd", "deleteMonitorMsg": "Weet u zeker dat u deze monitor wilt verwijderen?", "deleteNotificationMsg": "Weet u zeker dat u deze melding voor alle monitoren wilt verwijderen?", @@ -19,7 +19,7 @@ "clearEventsMsg": "Weet je zeker dat je alle evenementen voor deze monitor wilt verwijderen?", "clearHeartbeatsMsg": "Weet je zeker dat je alle heartbeats voor deze monitor wilt verwijderen?", "confirmClearStatisticsMsg": "Weet u zeker dat u alle statistieken wilt verwijderen?", - "twoFAVerifyLabel": "Voer uw 2FA controle token in voor verificatie", + "twoFAVerifyLabel": "Voer uw 2FA controle token in voor verificatie:", "tokenValidSettingsMsg": "Token is geldig! U kunt nu de 2FA-instellingen opslaan.", "confirmEnableTwoFAMsg": "Weet je zeker dat je 2FA wilt inschakelen?", "confirmDisableTwoFAMsg": "Weet je zeker dat je 2FA wilt uitschakelen?", @@ -58,7 +58,7 @@ "-hour": "-uur", "Response": "Antwoord", "Ping": "Ping", - "Monitor Type": "Monitortype:", + "Monitor Type": "Monitortype", "Keyword": "Trefwoord", "Friendly Name": "Vriendelijke naam", "URL": "URL", @@ -105,7 +105,7 @@ "Password": "Wachtwoord", "Remember me": "Wachtwoord onthouden", "Login": "Inloggen", - "No Monitors, please": "Geen monitoren, ", + "No Monitors, please": "Geen monitoren, alstublieft", "add one": "voeg een toe", "Notification Type": "Melding type", "Email": "E-mail", @@ -120,7 +120,7 @@ "Import": "Importeren", "respTime": "reactietijd (ms)", "notAvailableShort": "N.v.t.", - "Default enabled": "Default enabled", + "Default enabled": "Standaard ingeschakeld", "Apply on all existing monitors": "Pas toe op alle bestaande monitors", "Create": "Aanmaken", "Clear Data": "Data wissen", @@ -144,9 +144,9 @@ "Token": "Token", "Show URI": "Toon URI", "Clear all statistics": "Wis alle statistieken", - "retryCheckEverySecond": "Probeer elke {0} seconden.", + "retryCheckEverySecond": "Probeer elke {0} seconden", "importHandleDescription": "Kies 'Sla bestaande over' als je elke monitor of melding met dezelfde naam wilt overslaan. Kies 'Overschrijf' als je elke monitor of notificatie wilt verwijderen.", - "confirmImportMsg": "Weet je zeker dat je dit bestand wilt importeren?", + "confirmImportMsg": "Weet je zeker dat je dit bestand wilt importeren? Controleer of je de correcte importeer optie hebt geselecteerd.", "Heartbeat Retry Interval": "Heartbeat Retry Interval", "Import Backup": "Importeer Backup", "Export Backup": "Exporteer Backup", @@ -155,9 +155,9 @@ "Options": "Opties", "Keep both": "Bewaar beide", "Tags": "Labels", - "Add New below or Select...": "Voeg nieuwe toe of selecteer...", - "Tag with this name already exist.": "Label met deze naam bestaat al", - "Tag with this value already exist.": "Label met deze waarde bestaat al", + "Add New below or Select...": "Voeg nieuwe toe of selecteer…", + "Tag with this name already exist.": "Label met deze naam bestaat al.", + "Tag with this value already exist.": "Label met deze waarde bestaat al.", "color": "Kleur", "value (optional)": "waarde (optioneel)", "Gray": "Grijs", @@ -168,9 +168,9 @@ "Indigo": "Indigo", "Purple": "Paars", "Pink": "Roze", - "Search...": "Zoeken...", - "Avg. Ping": "Gemiddelde Ping", - "Avg. Response": "Gemiddelde Response", + "Search...": "Zoeken…", + "Avg. Ping": "Gemiddelde ping", + "Avg. Response": "Gemiddelde response", "Entry Page": "Entry Page", "statusPageNothing": "Niets hier, voeg een groep of monitor toe.", "No Services": "Geen diensten", @@ -234,10 +234,10 @@ "smtpCC": "CC", "smtpBCC": "BCC", "Discord Webhook URL": "Discord Webhook URL", - "wayToGetDiscordURL": "Je kunt dit krijgen door te gaan naar Server Instellingen -> Integraties -> Creëer Webhook", + "wayToGetDiscordURL": "Je kunt dit krijgen door te gaan naar Server Instellingen -> Integraties -> Bekijk webhooks -> Nieuwe webhook", "Bot Display Name": "Bot Weergave Naam", "Prefix Custom Message": "Prefix Aangepast Bericht", - "Hello @everyone is...": "Hallo {'@'}iedereen is...", + "Hello @everyone is...": "Hallo {'@'}iedereen is…", "Webhook URL": "Webhook URL", "wayToGetTeamsURL": "Je kunt hier leren hoe je een webhook URL kunt maken {0}.", "Number": "Nummer", @@ -300,14 +300,14 @@ "promosmsTypeSpeed": "SMS SPEED - Hoogste prioriteit in systeem. Is veel sneller en betrouwbaarder maar kost meer (ongeveer twee keer zoveel als volle SMS prijs).", "promosmsPhoneNumber": "Telefoon nummer (voor Poolse ontvangers. Je kunt gebieds codes overslaan)", "promosmsSMSSender": "SMS Ontvanger naam : Voor geregistreerde naam of een van de standaarden: InfoSMS, SMS Info, MaxSMS, INFO, SMS", - "Feishu WebHookUrl": "Feishu WebHookURL", + "Feishu WebHookUrl": "Feishu Webhook URL", "matrixHomeserverURL": "Homeserver URL (met http(s):// en optioneel poort)", "Internal Room Id": "Interne Room ID", "matrixDesc1": "Je kunt de interne room ID vinden door in de geavanceerde sectie van de room instellingen in je Matrix client te kijken. Het zou moeten uitzien als !QMdRCpUIfLwsfjxye6:home.server.", "matrixDesc2": "Het wordt ten zeerste aanbevolen om een nieuwe gebruiker aan te maken en niet de access token van je account te gebruiken, aangezien dit volledige toegang geeft tot je account en alle kamers waar je lid van bent. Maak in plaats daarvan een nieuwe gebruiker aan en nodig deze alleen uit voor de ruimte waarin je de melding wilt ontvangen. Je kunt de access token krijgen door het volgende uit te voeren {0}", "Monitor History": "Monitor Geschiedenis", "clearDataOlderThan": "Bewaar monitor geschiedenis voor {0} dagen.", - "PasswordsDoNotMatch": "Wachtwoorden komen niet overeen", + "PasswordsDoNotMatch": "Wachtwoorden komen niet overeen.", "records": "records", "One record": "Een record", "steamApiKeyDescription": "Om een Steam Game Server te monitoren heb je een Steam Web-API key nodig. Je kunt hier je API key registreren: ", @@ -315,15 +315,15 @@ "topic": "Onderwerp", "topicExplanation": "MQTT onderwerp om te monitoren", "successMessage": "Succesbericht", - "successMessageExplanation": "MQTT bericht dat als succes wordt beschouwd.", + "successMessageExplanation": "MQTT bericht dat als succes wordt beschouwd", "recent": "Recent", "Done": "Klaar", "Info": "Info", "Security": "Beveiliging", "Steam API Key": "Steam API Sleutel", "Shrink Database": "Verklein Database", - "Pick a RR-Type...": "Kies een RR-Type...", - "Pick Accepted Status Codes...": "Kies geaccepteerde Status Codes...", + "Pick a RR-Type...": "Kies een RR-Type…", + "Pick Accepted Status Codes...": "Kies geaccepteerde Status Codes…", "Default": "Standaard", "HTTP Options": "HTTP Opties", "Create Incident": "Creëer Incident", @@ -399,7 +399,7 @@ "SignName": "SignName", "Sms template must contain parameters: ": "Sms sjabloon moet de volgende parameters bevatten: ", "Bark Endpoint": "Bark Endpoint", - "WebHookUrl": "WebHookUrl", + "WebHookUrl": "Webhook URL", "SecretKey": "SecretKey", "For safety, must use secret key": "Voor de veiligheid moet je de secret key gebruiken", "Device Token": "Apparaat Token", @@ -464,7 +464,7 @@ "Footer Text": "Footer Tekst", "Show Powered By": "Laat \"Mogeljik gemaakt door\" zien", "Domain Names": "Domein Namen", - "pushoversounds pushover": "Pushover (default)", + "pushoversounds pushover": "Pushover (standaard)", "pushoversounds bike": "Bike", "pushoversounds bugle": "Bugle", "pushoversounds cashregister": "Cash Register", @@ -485,7 +485,7 @@ "pushoversounds persistent": "Persistent (long)", "pushoversounds echo": "Pushover Echo (long)", "pushoversounds updown": "Up Down (long)", - "pushoversounds vibrate": "Vibrate Only", + "pushoversounds vibrate": "Alleen trillen", "pushoversounds none": "None (silent)", "dnsPortDescription": "DNS-serverpoort. Standaard ingesteld op 53. Je kunt de poort op elk moment wijzigen.", "error": "fout", @@ -523,9 +523,178 @@ "Connection String": "Connection String", "Query": "Query", "settingsCertificateExpiry": "TLS Certificate Expiry", - "certificationExpiryDescription": "HTTPS Monitors trigger notification when TLS certificate expires in:", + "certificationExpiryDescription": "Stuur een melding bij het verlopen van het HTTPS TLS certificaat in:", "ntfy Topic": "ntfy Topic", "Domain": "Domein", "Workstation": "Werkstation", - "disableCloudflaredNoAuthMsg": "De \"Geen authenticatie\" modus staat aan, wachtwoord is niet vereist." + "disableCloudflaredNoAuthMsg": "De \"Geen authenticatie\" modus staat aan, wachtwoord is niet vereist.", + "backupOutdatedWarning": "Deprecated: Er zijn een hoop nieuwe functies toegevoegd en daarom is de backup functie niet onderhouden, het is op dit moment niet mogelijk om een volledige backup te maken en te herstellen.", + "RadiusSecret": "Radius Secret", + "RadiusSecretDescription": "Shared Secret tussen client en server", + "API Key": "API Key", + "Connection Type": "Verbindingstype", + "Docker Daemon": "Docker Daemon", + "Trust Proxy": "Trust Proxy", + "Setup Docker Host": "Docker Host instellen", + "tcp": "TCP / HTTP", + "Optional": "Optioneel", + "socket": "Socket", + "Docker Container": "Docker Container", + "Container Name / ID": "Container Naam / ID", + "Docker Host": "Docker Host", + "Docker Hosts": "Docker Hosts", + "Packet Size": "Packet Grootte", + "wayToGetLineNotifyToken": "Je kan een Access Token van {0} krijgen", + "Examples": "Voorbeelden", + "Home Assistant URL": "Home Assistant URL", + "default: notify all devices": "Standaard: stuur melding naar alle apparaten", + "Automations can optionally be triggered in Home Assistant:": "Automations kunnen optioneel worden getriggerd in Home Assistant:", + "Event data:": "Event data:", + "Then choose an action, for example switch the scene to where an RGB light is red.": "Kies een actie, bijvoorbeeld het activeren van een scene.", + "Frontend Version": "Frontend Versie", + "Frontend Version do not match backend version!": "Frontend versie komt niet overeen niet met de backend versie!", + "backupRecommend": "In plaats daarvan, maak een backup van je Docker volume of de data map (./data/).", + "squadcast": "Squadcast", + "or": "of", + "recurringInterval": "Interval", + "Recurring": "Terugkerend", + "strategyManual": "Actief/Inactief handmatig", + "warningTimezone": "De tijdzone van de server wordt gebruikt", + "weekdayShortMon": "ma", + "weekdayShortTue": "di", + "weekdayShortWed": "wo", + "weekdayShortThu": "do", + "weekdayShortFri": "vr", + "weekdayShortSat": "za", + "weekdayShortSun": "zo", + "dayOfWeek": "Dag van de week", + "dayOfMonth": "Dag van de maand", + "lastDay": "Laatste dag", + "lastDay2": "1 na laatste dag van de maand", + "lastDay4": "3 na laatste dag van de maand", + "No Maintenance": "Geen onderhoud", + "pauseMaintenanceMsg": "Weet je zeker dat je wilt pauzeren?", + "maintenanceStatus-under-maintenance": "In onderhoud", + "maintenanceStatus-inactive": "Inactief", + "maintenanceStatus-scheduled": "Ingepland", + "maintenanceStatus-ended": "Beëindigd", + "Display Timezone": "Toon tijdzone", + "Server Timezone": "Server tijdzone", + "statusPageMaintenanceEndDate": "Einde", + "IconUrl": "Icoon URL", + "Enable DNS Cache": "DNS Cache inschakelen", + "Enable": "Inschakelen", + "Disable": "Uitschakelen", + "Single Maintenance Window": "Enkel onderhoudsperiode", + "Effective Date Range": "Effectieve periode", + "Schedule Maintenance": "Onderhoud inplannen", + "Date and Time": "Datum en tijd", + "DateTime Range": "Datum en tijd periode", + "wayToGetZohoCliqURL": "Via deze link kun je uitvinden hoe je een webhook URL maakt {0}.", + "dataRetentionTimeError": "Bewaarperiode moet 0 of groter zijn", + "infiniteRetention": "Stel in op 0 voor oneindige bewaarperiode.", + "enableGRPCTls": "Toestaan om gRPC aanvragen te sturen over TLS verbinding", + "deleteMaintenanceMsg": "Weet je zeker dat je dit onderhoud wilt verwijderen?", + "recurringIntervalMessage": "1 keer per dag uitvoeren | 1 keer per elke {0} dagen uitvoeren", + "affectedStatusPages": "Toon het onderhoudsbericht op de geselecteerde status pagina's", + "promosmsPassword": "API Wachtwoord", + "Kook": "Kook", + "high": "hoog", + "Base URL": "Base URL", + "goAlert": "GoAlert", + "Octopush API Version": "Octopush API versie", + "HomeAssistant": "Home Assistant", + "affectedMonitorsDescription": "Selecteer de monitors die zullen worden aangetast door het huidige onderhoud", + "Custom": "Aangepast", + "Affected Monitors": "Aangetaste monitors", + "Resend Notification if Down X times consequently": "Verzend offline melding X keer opnieuw bij blijvend offline", + "Monitor": "Monitor | Monitors", + "Start of maintenance": "Start van onderhoud", + "All Status Pages": "Alle status pagina's", + "Select status pages...": "Selecteer status pagina's…", + "API Username": "API Gebruikersnaam", + "Trigger type:": "Trigger type:", + "Event type:": "Event type:", + "Guild ID": "Guild ID", + "uninstalling": "Aan het verwijderen", + "Lowcost": "Lowcost", + "Economy": "Economy", + "webhookAdditionalHeadersTitle": "Extra Headers", + "webhookAdditionalHeadersDesc": "Voegt extra headers toe die meegestuurd worden met de webhook.", + "Help": "Hulp", + "Game": "Game", + "statusMaintenance": "Onderhoud", + "Maintenance": "Onderhoud", + "Passive Monitor Type": "Passieve Monitor Type", + "Pick Affected Monitors...": "Kies aangetaste monitors…", + "Specific Monitor Type": "Specifieke Monitor Type", + "promosmsLogin": "API Login naam", + "Schedule maintenance": "Onderhoud inplannen", + "resendEveryXTimes": "Verstuur elke {0} keer opnieuw", + "resendDisabled": "Opnieuw versturen uitgeschakeld", + "General Monitor Type": "Algemeen Monitor Type", + "Notification Service": "Melding diensten", + "uninstall": "Verwijderen", + "HTTP Headers": "HTTP Headers", + "Domain Name Expiry Notification": "Domeinnaam verlopen melding", + "deleteDockerHostMsg": "Weet je zeker dat je deze Docker host wilt verwijderen voor alle monitors?", + "A list of Notification Services can be found in Home Assistant under \"Developer Tools > Services\" search for \"notification\" to find your device/phone name.": "Een lijst van melding diensten kan worden gevonden in Home Assistant onder \"Developer Tools > Services\" en zoek voor \"notification\" om je apparaat/telefoon naam te vinden.", + "lastDay1": "Laatste dag van de maand", + "lastDay3": "2 na laatste dag van de maand", + "maintenanceStatus-unknown": "Onbekend", + "dnsCacheDescription": "Het werkt niet in sommige IPv6 omgevingen, schakel het uit als je problemen ervaart.", + "confirmDeleteTagMsg": "Weet je zeker dat je dit label wilt verwijderen? Monitors die gekoppeld zijn aan dit label worden niet verwijderd.", + "atLeastOneMonitor": "Selecteer tenminste 1 aangetaste monitor", + "Enable TLS": "TLS inschakelen", + "smseagle": "SMSEagle", + "smseagleTo": "Telefoonnummer(s)", + "Custom Monitor Type": "Custom Monitor Type", + "trustProxyDescription": "'X-Forwarded-*' headers vertrouwen. Als je de correcte client IP wilt krijgen en de Uptime Kuma installatie is achter een proxy zoals Nginx of Apache, schakel dan dit in.", + "RadiusCalledStationId": "Called Station Id", + "RadiusCalledStationIdDescription": "Identifier of the called device", + "RadiusCallingStationId": "Calling Station Id", + "ZohoCliq": "ZohoCliq", + "Long-Lived Access Token": "Long-Lived Access Token", + "Long-Lived Access Token can be created by clicking on your profile name (bottom left) and scrolling to the bottom then click Create Token. ": "Long-Lived Access Token kan aangemaakt worden via je profiel naam (links onder) en door naar beneden te scrollen en te klikken op Token Aanmaken. ", + "Maintenance Time Window of a Day": "Onderhoud tijdsvak van een dag", + "octopushAPIKey": "\"API key\" van HTTP API inloggegevens van het controle paneel", + "octopushLogin": "\"Login\" van HTTP API inloggegevens controle paneel", + "grpcMethodDescription": "Methode naam moet in cammelCase formaat zijn zoals zegHallo, check, etc.", + "wayToGetKookBotToken": "Maak een applicatie en haal je bot token op bij {0}", + "wayToGetKookGuildID": "Switch naar 'Developer Mode' in de Kook instellingen, en klik met de rechter muisknop op de guild om de ID op te halen", + "Strategy": "Strategy", + "Free Mobile User Identifier": "Free Mobile User Identifier", + "Free Mobile API Key": "Free Mobile API Key", + "Proto Service Name": "Proto service naam", + "Proto Method": "Proto methode", + "Proto Content": "Proto inhoud", + "SendKey": "SendKey", + "SMSManager API Docs": "SMSManager API documentatie ", + "Gateway Type": "Gateway Type", + "SMSManager": "SMSManager", + "You can divide numbers with": "Je kunt nummers delen met", + "Bark Group": "Bark Group", + "Bark Sound": "Bark Sound", + "promosmsAllowLongSMS": "Sta lange SMS toe", + "smseagleRecipientType": "Ontvanger type", + "smseagleRecipient": "Ontvanger(s) (gescheiden met comma)", + "smseagleToken": "API access token", + "smseagleEncoding": "Stuur als Unicode", + "smseaglePriority": "Bericht prioriteit (0-9, standaard = 0)", + "Legacy Octopush-DM": "Legacy Octopush-DM", + "smseagleGroup": "Telefoonboek groep namen", + "Google Analytics ID": "Google Analytics ID", + "Edit Tag": "Tag bewerken", + "Server Address": "Server Adres", + "Learn More": "Meer leren", + "RadiusCallingStationIdDescription": "Identifier of the calling device", + "plugin": "Plugin | Plugins", + "installing": "Installeren", + "install": "Installeer", + "confirmUninstallPlugin": "Weet je zeker dat je deze plugin wilt verwijderen?", + "smseagleUrl": "SMSEagle apparaat URL", + "markdownSupported": "Markdown syntax ondersteund", + "Resend Notification if Down X times consecutively": "Melding x keer opnieuw sturen als monitor offline is", + "loadingError": "Kan de data niet ophalen, probeer het later opnieuw.", + "smseagleContact": "Telefoonboek contact namen" } From d1808fe9a3240142c32330c59f1d9a355a42c17b Mon Sep 17 00:00:00 2001 From: Lance <2124757129@qq.com> Date: Fri, 3 Mar 2023 08:50:53 +0000 Subject: [PATCH 130/171] Translated using Weblate (English) Currently translated at 100.0% (697 of 697 strings) Co-authored-by: Lance <2124757129@qq.com> Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/en/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/en.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lang/en.json b/src/lang/en.json index 0034fc99e..8f28c8e3a 100644 --- a/src/lang/en.json +++ b/src/lang/en.json @@ -2,7 +2,7 @@ "languageName": "English", "Settings": "Settings", "Dashboard": "Dashboard", - "Help": "help", + "Help": "Help", "New Update": "New Update", "Language": "Language", "Appearance": "Appearance", From f75ff2da98373830b864c63ca223fe5488898f33 Mon Sep 17 00:00:00 2001 From: AmadeusGraves Date: Fri, 3 Mar 2023 08:50:53 +0000 Subject: [PATCH 131/171] Translated using Weblate (Spanish) Currently translated at 98.9% (690 of 697 strings) Co-authored-by: AmadeusGraves Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/es/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/es-ES.json | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/src/lang/es-ES.json b/src/lang/es-ES.json index d8e46f8db..6065bdb3b 100644 --- a/src/lang/es-ES.json +++ b/src/lang/es-ES.json @@ -158,7 +158,7 @@ "Add New below or Select...": "Agregar nuevo a continuación o seleccionar…", "Tag with this name already exist.": "Una etiqueta con este nombre ya existe.", "Tag with this value already exist.": "Una etiqueta con este valor ya existe.", - "color": "color", + "color": "Color", "value (optional)": "valor (opcional)", "Gray": "Gris", "Red": "Rojo", @@ -608,7 +608,7 @@ "TemplateCode": "Código de Plantilla", "Bark Group": "Grupo de Bark", "Bark Sound": "Sonido de Bark", - "SecretKey": "Key Secreta", + "SecretKey": "Clave Secreta", "Huawei": "Huawei", "Retry": "Reintentar", "Proxy Server": "Servidor Proxy", @@ -621,12 +621,12 @@ "aboutKumaURL": "Si dejas vacío el campo URL Uptime Kuma, predeterminará la página GitHub del Proyecto.", "smtpDkimSettings": "Ajustes DKIM", "smtpDkimDomain": "Nombre de Dominio", - "smtpDkimKeySelector": "Selector de Key", - "smtpDkimPrivateKey": "Key Privada", + "smtpDkimKeySelector": "Selector de Clave", + "smtpDkimPrivateKey": "Clave Privada", "Integration Key": "Key de Integración", "Integration URL": "URL de Integración", "Device Token": "Token de Dispositivo", - "WeCom Bot Key": "Key de Bot WeCom", + "WeCom Bot Key": "Clave de Bot WeCom", "promosmsTypeEco": "SMS ECO - barato pero lento y a veces sobrecargado. Limitado sólo a destinatarios Polacos.", "promosmsTypeSpeed": "SMS SPEED - La mayor prioridad en el sistema. Muy rápido y confiable pero costoso (alrededor del doble del precio de SMS FULL).", "matrixHomeserverURL": "URL Servidor Casero (con http(s):// y opcionalmente el puerto)", @@ -686,7 +686,15 @@ "Learn More": "Aprende Más", "Pick a RR-Type...": "Seleccione un Tipo RR", "onebotHttpAddress": "Dirección HTTP OneBot", - "SendKey": "SendKey", + "SendKey": "Clave de Envío", "octopushAPIKey": "\"Clave API\" de las credenciales HTTP API en el panel de control", - "octopushLogin": "\"Inicio de Sesión\" a partir de las credenciales API HTTP en el panel de control" + "octopushLogin": "\"Inicio de Sesión\" a partir de las credenciales API HTTP en el panel de control", + "ntfy Topic": "Tema ntfy", + "Google Analytics ID": "ID Analíticas de Google", + "Edit Tag": "Editar Etiqueta", + "SignName": "Firma", + "Bark Endpoint": "Endpoint Bark", + "WebHookUrl": "WebHookUrl", + "High": "Alto", + "alertaApiEndpoint": "Endpoint API" } From 2f5d9e7e461ce30b421d7c04181a73d16c9ae8b7 Mon Sep 17 00:00:00 2001 From: Zoe Date: Fri, 3 Mar 2023 08:50:53 +0000 Subject: [PATCH 132/171] =?UTF-8?q?Translated=20using=20Weblate=20(Norwegi?= =?UTF-8?q?an=20Bokm=C3=A5l)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 41.1% (287 of 697 strings) Co-authored-by: Zoe Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/nb_NO/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/nb-NO.json | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/lang/nb-NO.json b/src/lang/nb-NO.json index 1ddc4d171..ca9a5f78c 100644 --- a/src/lang/nb-NO.json +++ b/src/lang/nb-NO.json @@ -281,5 +281,13 @@ "promosmsTypeFull": "SMS FULL - Premuimnivå SMS. Du kan bruke dit avsendernavn (Du må registerere et navn først). Pålitelig for alle varslinger.", "promosmsTypeSpeed": "SMS SPEED - Høyest prioritet i systemet.Veldig rask på pålitelig, men dyrt (omtrent det dobbeltet av SMS FULL pris).", "promosmsPhoneNumber": "Telefonnummber (for polske mottakere. Du trenger ikke områdekode.)", - "promosmsSMSSender": "SMS Avsendernavn : Forhåndsregistert navn eller en av standardnavnene: InfoSMS, SMS Info, MaxSMS, INFO, SMS" + "promosmsSMSSender": "SMS Avsendernavn : Forhåndsregistert navn eller en av standardnavnene: InfoSMS, SMS Info, MaxSMS, INFO, SMS", + "Help": "Hjelp", + "Game": "Spill", + "statusMaintenance": "Vedlikehold", + "Maintenance": "Maintenance", + "Passive Monitor Type": "Passiv Monitor Type", + "Specific Monitor Type": "Spesifik Monitor Type", + "General Monitor Type": "Generisk Monitor Type", + "markdownSupported": "Markdown syntax støttet" } From 16ce1f9ddf99bfff01e3ac01ab4cac976f8c5f0f Mon Sep 17 00:00:00 2001 From: Louis Lam Date: Fri, 3 Mar 2023 08:50:53 +0000 Subject: [PATCH 133/171] Translated using Weblate (Urdu) Currently translated at 27.5% (192 of 697 strings) Translated using Weblate (Hungarian) Currently translated at 74.0% (516 of 697 strings) Co-authored-by: Louis Lam Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/hu/ Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ur/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/hu.json | 3 ++- src/lang/ur.json | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/lang/hu.json b/src/lang/hu.json index a59d8cd2c..92beb2287 100644 --- a/src/lang/hu.json +++ b/src/lang/hu.json @@ -515,5 +515,6 @@ "dnsPortDescription": "DNS szerver portja. Alapéretelmezett az 53. Bármikor megváltoztathatja.", "promosmsPassword": "API Jelszó", "wayToGetKookBotToken": "Hozz létre egy app-ot és szerezz egy tokent itt: {0}", - "wayToGetKookGuildID": "Válts át 'Developer Mode'-ra a Kook beállításoknál majd jobb klikkelve a guildra megtalálod az ID-jét" + "wayToGetKookGuildID": "Válts át 'Developer Mode'-ra a Kook beállításoknál majd jobb klikkelve a guildra megtalálod az ID-jét", + "Resend Notification if Down X times consecutively": "Értesítés Újraküldése ha X-szer nem válaszol" } diff --git a/src/lang/ur.json b/src/lang/ur.json index 41dc56b64..d904ce3c0 100644 --- a/src/lang/ur.json +++ b/src/lang/ur.json @@ -191,5 +191,6 @@ "Search...": "تلاش کریں…", "Avg. Ping": "دسمبر پنگ", "Entry Page": "داخلہ صفحہ", - "statusPageNothing": "یہاں کچھ نہیں، براہ کرم ایک گروپ یا مانیٹر شامل کریں۔" + "statusPageNothing": "یہاں کچھ نہیں، براہ کرم ایک گروپ یا مانیٹر شامل کریں۔", + "Resend Notification if Down X times consecutively": "نوٹیفکیشن دوبارہ بھیجیں اگر X بار لگاتار نیچے جائیں" } From a990dc89d88ab594140f88a022d466ebd4e9d161 Mon Sep 17 00:00:00 2001 From: Oleg Logvinov Date: Fri, 3 Mar 2023 08:50:53 +0000 Subject: [PATCH 134/171] Translated using Weblate (Russian) Currently translated at 96.8% (675 of 697 strings) Co-authored-by: Oleg Logvinov Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ru/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/ru-RU.json | 41 +++++++++++++++++++++++++++++++++-------- 1 file changed, 33 insertions(+), 8 deletions(-) diff --git a/src/lang/ru-RU.json b/src/lang/ru-RU.json index 7ea1f6431..8b1e3bf22 100644 --- a/src/lang/ru-RU.json +++ b/src/lang/ru-RU.json @@ -233,10 +233,10 @@ "smtpCC": "Копия", "smtpBCC": "Скрытая копия", "Discord Webhook URL": "Discord вебхук URL", - "wayToGetDiscordURL": "Вы можете создать его в \"Настройки -> Интеграции -> Создать Вебхук\"", + "wayToGetDiscordURL": "Вы можете создать его в настройках канала \"Настройки -> Интеграции -> Создать Вебхук\"", "Bot Display Name": "Отображаемое имя бота", "Prefix Custom Message": "Свой префикс сообщения", - "Hello @everyone is...": "Привет {'@'} всем это…", + "Hello @everyone is...": "Привет {'@'}everyone это…", "Webhook URL": "URL вебхука", "wayToGetTeamsURL": "Как создать URL Вебхука вы можете узнать здесь - {0}.", "Number": "Номер", @@ -467,7 +467,7 @@ "onebotMessageType": "OneBot Message Type", "onebotGroupMessage": "Группа", "onebotPrivateMessage": "Private", - "onebotUserOrGroupId": "Группа/ID пользователя", + "onebotUserOrGroupId": "ID группы или пользователя", "onebotSafetyTips": "В целях безопасности необходимо установить токен доступа", "PushDeer Key": "PushDeer Key", "Footer Text": "Текст нижнего колонтитула", @@ -618,7 +618,7 @@ "Custom CSS": "Пользовательские CSS", "weekdayShortTue": "Вт", "dayOfWeek": "День недели", - "confirmDeleteTagMsg": "Вы уверены, что хотите удалить этот тег? Мониторы с этим тегом удалены не будут.", + "confirmDeleteTagMsg": "Вы уверены, что хотите удалить этот тег? Мониторы, связанные с этим тегом не будут удалены.", "loadingError": "Невозможно получить данные, пожалуйста попробуйте позже.", "Packet Size": "Размер пакета", "warningTimezone": "Используется часовой пояс сервера", @@ -630,7 +630,7 @@ "lastDay2": "Второй последний день месяца", "lastDay3": "Третий последний день месяца", "lastDay4": "Четвертый последний день месяца", - "No Maintenance": "Ничего не обслуживается", + "No Maintenance": "Без обслуживания", "pauseMaintenanceMsg": "Вы уверены что хотите поставить на паузу?", "maintenanceStatus-under-maintenance": "На техобслуживании", "maintenanceStatus-inactive": "Неактивен", @@ -647,7 +647,7 @@ "Single Maintenance Window": "Единое Окно Обслуживания", "Schedule Maintenance": "Запланировать обслуживание", "Date and Time": "Дата и Время", - "DateTime Range": "Промежуток Даты и Времени", + "DateTime Range": "Промежуток даты и времени", "uninstalling": "Удаляется", "dataRetentionTimeError": "Период хранения должен быть равен 0 или больше", "infiniteRetention": "Установите 0 для бессрочного хранения.", @@ -664,6 +664,31 @@ "install": "Установить", "installing": "Устанавливается", "uninstall": "Удалить", - "Recurring": "Повторяющийся", - "recurringInterval": "Интервал" + "Recurring": "Текущий", + "recurringInterval": "Интервал", + "smseagle": "SMSEagle", + "Google Analytics ID": "ID Google Аналитики", + "wayToGetZohoCliqURL": "Вы можете узнать как создать webhook URL тут {0}.", + "Effective Date Range": "Эффективный период", + "wayToGetKookGuildID": "Включите \"Developer mode\" в настройках Kook, а затем нажмите правой кнопкой по гильдии чтобы скопировать её ID.", + "Enable TLS": "Включить TLS", + "Integration Key": "Ключ интеграции", + "Integration URL": "URL интеграции", + "do nothing": "ничего не делать", + "smseagleTo": "Номер(а) телефона", + "smseagleGroup": "Имена групп в телефонной книжке", + "smseagleContact": "Имена контактов из телефонной книжки", + "smseagleRecipientType": "Тип получателя", + "smseagleRecipient": "Получатель (через запятую, если несколько)", + "smseagleToken": "Токен доступа API", + "smseagleUrl": "URL вашего SMSEagle устройства", + "smseagleEncoding": "Отправить в юникоде", + "smseaglePriority": "Приоритет сообщения (0-9, по умолчанию = 0)", + "Server Address": "Адрес сервера", + "Learn More": "Узнать больше", + "topicExplanation": "MQTT топик для мониторинга", + "Guild ID": "ID гильдии", + "Kook": "Kook", + "wayToGetKookBotToken": "Создайте приложение и получите токен вашего бота тут {0}.", + "Resend Notification if Down X times consecutively": "Повторная отправка уведомления при падении несколько раз" } From 6cea6dc0019010474a2ed68c09dd527fd768baab Mon Sep 17 00:00:00 2001 From: DevMirza Date: Fri, 3 Mar 2023 08:50:53 +0000 Subject: [PATCH 135/171] Translated using Weblate (Urdu) Currently translated at 56.6% (379 of 669 strings) Translated using Weblate (Urdu) Currently translated at 38.4% (268 of 697 strings) Co-authored-by: DevMirza Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ur/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/ur.json | 192 ++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 191 insertions(+), 1 deletion(-) diff --git a/src/lang/ur.json b/src/lang/ur.json index d904ce3c0..bb0c3667c 100644 --- a/src/lang/ur.json +++ b/src/lang/ur.json @@ -192,5 +192,195 @@ "Avg. Ping": "دسمبر پنگ", "Entry Page": "داخلہ صفحہ", "statusPageNothing": "یہاں کچھ نہیں، براہ کرم ایک گروپ یا مانیٹر شامل کریں۔", - "Resend Notification if Down X times consecutively": "نوٹیفکیشن دوبارہ بھیجیں اگر X بار لگاتار نیچے جائیں" + "Resend Notification if Down X times consecutively": "نوٹیفکیشن دوبارہ بھیجیں اگر X بار لگاتار نیچے جائیں", + "Status Page": "اسٹیٹس پیج", + "Status Pages": "اسٹیٹس پیجز", + "defaultNotificationName": "میرا {notification} الرٹ ({number})", + "here": "یہاں", + "Required": "درکار ہے", + "webhook": "ویب ہُک", + "Post URL": "یو آر ایل پوسٹ کریں", + "Content Type": "مواد کی قسم", + "webhookJsonDesc": "{0} کسی بھی جدید HTTP سرورز جیسے Express.js کے لیے اچھا ہے", + "webhookFormDataDesc": "{multipart} پی ایچ پی کے لیے اچھا ہے۔ JSON کو {decodeFunction} کے ساتھ پارس کرنے کی ضرورت ہوگی", + "webhookAdditionalHeadersTitle": "اضافی ہیڈرز", + "webhookAdditionalHeadersDesc": "ویب ہک کے ساتھ بھیجے گئے اضافی ہیڈر سیٹ کرتا ہے۔", + "Webhook URL": "ابھوک دیہی", + "Application Token": "ایپلیکیشن ٹوکن", + "Server URL": "سرور URL", + "Priority": "ترجیح", + "emojiCheatSheet": "ایموجی چیٹ شیٹ: {0}", + "Read more": "مزید پڑھ", + "appriseInstalled": "اپرائز انسٹال ہے۔", + "appriseNotInstalled": "اپرائز انسٹال نہیں ہے۔ {0}", + "Method": "طریقہ", + "Body": "جسم", + "Headers": "ہیڈرز", + "PushUrl": "یو آر ایل کو پش کریں", + "HeadersInvalidFormat": "درخواست کے ہیڈر درست نہیں ہیں JSON: ", + "BodyInvalidFormat": "درخواست کا باڈی درست نہیں ہے JSON: ", + "Monitor History": "تاریخ کی نگرانی کریں", + "clearDataOlderThan": "مانیٹر کی سرگزشت کا ڈیٹا {0} دنوں تک رکھیں۔", + "PasswordsDoNotMatch": "پاس ورڈ میچ نہیں کرتے.", + "records": "ریکارڈز", + "One record": "ایک ریکارڈ", + "Current User": "موجودہ صارف", + "topic": "موضوع", + "topicExplanation": "نگرانی کے لیے MQTT موضوع", + "successMessage": "کامیابی کا پیغام", + "successMessageExplanation": "MQTT پیغام جسے کامیابی سمجھا جائے گا", + "recent": "حالیہ", + "Done": "ہو گیا", + "Info": "معلومات", + "Security": "سیکورٹی", + "Steam API Key": "بھاپ API کلید", + "Shrink Database": "ڈیٹا بیس کو سکڑیں", + "Pick a RR-Type...": "RR قسم کا انتخاب کریں…", + "Pick Accepted Status Codes...": "قبول شدہ اسٹیٹس کوڈز منتخب کریں…", + "Default": "طے شدہ", + "HTTP Options": "HTTP اختیارات", + "Create Incident": "واقعہ بنائیں", + "Title": "عنوان", + "Content": "مواد", + "Style": "انداز", + "info": "معلومات", + "danger": "خطرہ", + "error": "غلطی", + "critical": "تنقیدی", + "primary": "بنیادی", + "light": "روشنی", + "dark": "اندھیرا", + "Post": "پوسٹ", + "Created": "بنایا", + "Last Updated": "آخری تازہ کاری", + "Unpin": "بادل ساحل", + "Switch to Light Theme": "لائٹ تھیم پر سوئچ کریں", + "Switch to Dark Theme": "ڈارک تھیم پر سوئچ کریں", + "Hide Tags": "ٹیگز چھپائیں", + "Description": "تفصیل", + "No monitors available.": "کوئی مانیٹر دستیاب نہیں۔", + "Add one": "ایک شامل کریں", + "Untitled Group": "بلا عنوان گروپ", + "Services": "خدمات", + "Discard": "رد کر دیں", + "steamApiKeyDescription": "سٹیم گیم سرور کی نگرانی کے لیے آپ کو سٹیم ویب API کلید درکار ہے۔ آپ اپنی API کلید یہاں رجسٹر کر سکتے ہیں: ", + "warning": "انتباہ", + "Please input title and content": "براہ کرم عنوان اور مواد درج کریں", + "Show Tags": "ٹیگز دکھائیں", + "No Monitors": "کوئی مانیٹر نہیں", + "Cancel": "منسوخ کریں", + "Powered by": "کی طرف سے طاقت", + "Custom CSS": "حسب ضرورت سی ایس ایس", + "deleteProxyMsg": "کیا آپ واقعی اس پراکسی کو تمام مانیٹر کے لیے حذف کرنا چاہتے ہیں؟", + "enableProxyDescription": "یہ پراکسی مانیٹر کی درخواستوں پر اس وقت تک اثر نہیں کرے گی جب تک کہ اسے فعال نہ کیا جائے۔ آپ ایکٹیویشن اسٹیٹس کے ذریعے تمام مانیٹرس سے پراکسی کو عارضی طور پر غیر فعال کر سکتے ہیں۔", + "setAsDefaultProxyDescription": "یہ پراکسی نئے مانیٹرز کے لیے بطور ڈیفالٹ فعال ہو جائے گی۔ آپ اب بھی ہر مانیٹر کے لیے الگ الگ پراکسی کو غیر فعال کر سکتے ہیں۔", + "Page Not Found": "صفحہ نہیں ملا", + "wayToGetCloudflaredURL": "({0} سے کلاؤڈ فلارڈ ڈاؤن لوڈ کریں)", + "Don't know how to get the token? Please read the guide:": "ٹوکن حاصل کرنے کا طریقہ نہیں جانتے؟ براہ کرم گائیڈ پڑھیں:", + "The current connection may be lost if you are currently connecting via Cloudflare Tunnel. Are you sure want to stop it? Type your current password to confirm it.": "اگر آپ فی الحال Cloudflare ٹنل کے ذریعے جڑ رہے ہیں تو موجودہ کنکشن ختم ہو سکتا ہے۔ کیا آپ واقعی اسے روکنا چاہتے ہیں؟ اس کی تصدیق کے لیے اپنا موجودہ پاس ورڈ ٹائپ کریں۔", + "RadiusCalledStationId": "اسٹیشن آئی ڈی کو کہتے ہیں", + "Certificate Expiry Notification": "سرٹیفکیٹ ختم ہونے کی اطلاع", + "Check how to config it for WebSocket": "اسے WebSocket کے لیے ترتیب دینے کا طریقہ چیک کریں", + "There might be a typing error in the address.": "ایڈریس میں ٹائپنگ کی غلطی ہو سکتی ہے۔", + "certificationExpiryDescription": "جب TLS سرٹیفکیٹ کی میعاد ختم ہو جاتی ہے تو HTTPS مانیٹر نوٹیفکیشن کو متحرک کرتے ہیں:", + "telegramMessageThreadID": "(اختیاری) میسج تھریڈ آئی ڈی", + "telegramMessageThreadIDDescription": "فورم کے ٹارگٹ میسج تھریڈ (موضوع) کے لیے اختیاری منفرد شناخت کنندہ؛ صرف فورم کے سپر گروپس کے لیے", + "chatIDNotFound": "چیٹ آئی ڈی نہیں ملی۔ براہ کرم پہلے اس بوٹ کو پیغام بھیجیں", + "disableCloudflaredNoAuthMsg": "آپ No Auth موڈ میں ہیں، پاس ورڈ کی ضرورت نہیں ہے۔", + "trustProxyDescription": "'X-Forwarded-*' ہیڈر پر بھروسہ کریں۔ اگر آپ صحیح کلائنٹ آئی پی حاصل کرنا چاہتے ہیں اور آپ کا اپ ٹائم کوما پراکسی جیسے Nginx یا Apache کے پیچھے ہے، تو آپ کو اسے فعال کرنا چاہیے۔", + "supportTelegramChatID": "براہ راست چیٹ / گروپ / چینل کی چیٹ آئی ڈی کو سپورٹ کریں", + "wayToGetTelegramChatID": "آپ بوٹ کو پیغام بھیج کر اور chat_id دیکھنے کے لیے اس URL پر جا کر اپنی چیٹ ID حاصل کر سکتے ہیں:", + "YOUR BOT TOKEN HERE": "یہاں آپ کا بوٹ ٹوکن", + "wayToGetLineNotifyToken": "آپ {0} سے ایک رسائی ٹوکن حاصل کر سکتے ہیں", + "Examples": "مثالیں", + "Running": "چل رہا ہے", + "Not running": "نہیں چل رہا ہے", + "Customize": "حسب ضرورت بنائیں", + "Custom Footer": "حسب ضرورت فوٹر", + "deleteStatusPageMsg": "کیا آپ واقعی اس اسٹیٹس پیج کو حذف کرنا چاہتے ہیں؟", + "Proxies": "پراکسیز", + "default": "طے شدہ", + "enabled": "فعال", + "setAsDefault": "ڈیفالٹ کے طور پر مقرر", + "proxyDescription": "پراکسیز کو کام کرنے کے لیے مانیٹر کو تفویض کیا جانا چاہیے۔", + "Certificate Chain": "سرٹیفکیٹ چین", + "Valid": "درست", + "Invalid": "غلط", + "User": "صارف", + "Installed": "انسٹال", + "Not installed": "انسٹال نہیں ہے", + "Remove Token": "ٹوکن کو ہٹا دیں", + "Start": "شروع کریں", + "Stop": "رک جاؤ", + "Add New Status Page": "نیا اسٹیٹس پیج شامل کریں", + "Slug": "سلگ", + "Accept characters:": "حروف کو قبول کریں:", + "startOrEndWithOnly": "صرف {0} سے شروع یا ختم کریں", + "No consecutive dashes": "کوئی لگاتار ڈیش نہیں ہے", + "Next": "اگلے", + "The slug is already taken. Please choose another slug.": "سلگ پہلے ہی لی گئی ہے۔ براہ کرم کوئی اور سلگ منتخب کریں۔", + "No Proxy": "کوئی پراکسی نہیں", + "Authentication": "تصدیق", + "HTTP Basic Auth": "HTTP بنیادی توثیق", + "New Status Page": "نیا اسٹیٹس پیج", + "Reverse Proxy": "ریورس پراکسی", + "Backup": "بیک اپ", + "About": "کے بارے میں", + "cloudflareWebsite": "Cloudflare ویب سائٹ", + "Message:": "پیغام:", + "HTTP Headers": "HTTP ہیڈر", + "Trust Proxy": "پراکسی پر اعتماد کریں", + "Other Software": "دوسرے سافٹ ویئر", + "For example: nginx, Apache and Traefik.": "مثال کے طور پر: nginx، Apache اور Traefik.", + "Please read": "مہربانی کر کے پڑھیں", + "Subject:": "مضمون:", + "Valid To:": "اس تاریخ تک کارآمد ہ:", + "Days Remaining:": "باقی دنوں:", + "Issuer:": "جاری کنندہ:", + "Fingerprint:": "فنگر پرنٹ:", + "No status pages": "کوئی اسٹیٹس پیجز نہیں", + "Domain Name Expiry Notification": "ڈومین نام کی میعاد ختم ہونے کی اطلاع", + "Proxy": "پراکسی", + "Date Created": "تاریخ تخلیق", + "Footer Text": "فوٹر ٹیکسٹ", + "Show Powered By": "شو کے ذریعہ تقویت یافتہ", + "Domain Names": "ڈومین کے نام", + "signedInDisp": "بطور {0} سائن ان", + "signedInDispDisabled": "توثیق غیر فعال۔", + "RadiusSecret": "رداس راز", + "RadiusSecretDescription": "کلائنٹ اور سرور کے درمیان مشترکہ راز", + "RadiusCalledStationIdDescription": "کہلائے گئے آلے کا شناخت کنندہ", + "RadiusCallingStationId": "کالنگ اسٹیشن آئی ڈی", + "RadiusCallingStationIdDescription": "کالنگ ڈیوائس کا شناخت کنندہ", + "API Username": "API صارف نام", + "API Key": "API کلید", + "Show update if available": "اگر دستیاب ہو تو اپ ڈیٹ دکھائیں", + "Also check beta release": "بیٹا ریلیز بھی چیک کریں", + "Using a Reverse Proxy?": "ایک ریورس پراکسی کا استعمال کرتے ہوئے؟", + "Steam Game Server": "بھاپ گیم سرور", + "Most likely causes:": "زیادہ تر ممکنہ وجوہات:", + "The resource is no longer available.": "وسیلہ اب دستیاب نہیں ہے۔", + "What you can try:": "تم کیا کوشش کر سکتے ہو:", + "Retype the address.": "ایڈریس دوبارہ ٹائپ کریں۔", + "Go back to the previous page.": "پچھلے صفحے پر واپس جائیں۔", + "Coming Soon": "جلد آرہا ہے", + "Connection String": "کنکشن سٹرنگ", + "Query": "استفسار", + "settingsCertificateExpiry": "TLS سرٹیفکیٹ کی میعاد ختم", + "Setup Docker Host": "ڈوکر ہوسٹ سیٹ اپ کریں", + "Connection Type": "کنکشن کی قسم", + "Docker Daemon": "ڈوکر ڈیمون", + "deleteDockerHostMsg": "کیا آپ واقعی تمام مانیٹر کے لیے اس ڈاکر ہوسٹ کو حذف کرنا چاہتے ہیں؟", + "socket": "ساکٹ", + "tcp": "TCP / HTTP", + "Docker Container": "ڈوکر کنٹینر", + "Container Name / ID": "کنٹینر کا نام / ID", + "Docker Host": "ڈاکر میزبان", + "Docker Hosts": "ڈاکر میزبان", + "Domain": "ڈومین", + "Workstation": "ورک سٹیشن", + "Packet Size": "پیکٹ کا سائز", + "Bot Token": "بوٹ ٹوکن", + "wayToGetTelegramToken": "آپ {0} سے ٹوکن حاصل کر سکتے ہیں۔", + "Chat ID": "چیٹ آئی ڈی" } From 68ea65bbd98379bf5fbce3de242a72ff5e18416e Mon Sep 17 00:00:00 2001 From: Kurt S Date: Fri, 3 Mar 2023 08:50:54 +0000 Subject: [PATCH 136/171] Translated using Weblate (German) Currently translated at 100.0% (697 of 697 strings) Co-authored-by: Kurt S Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/de/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/de-DE.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lang/de-DE.json b/src/lang/de-DE.json index 2e7bbb5f3..8d20e094b 100644 --- a/src/lang/de-DE.json +++ b/src/lang/de-DE.json @@ -677,7 +677,7 @@ "Proto Service Name": "Proto Service Name", "Proto Method": "Proto Methode", "Proto Content": "Proto Inhalt", - "Economy": "Economy-Modus", + "Economy": "Economy", "Lowcost": "Lowcost-Modus", "high": "High-Modus", "promosmsAllowLongSMS": "Erlaube lange SMS", From 3e97563ee45e099dbe2cd1bdb681487368313962 Mon Sep 17 00:00:00 2001 From: victorpahuus Date: Fri, 3 Mar 2023 08:50:54 +0000 Subject: [PATCH 137/171] Translated using Weblate (Danish) Currently translated at 72.0% (502 of 697 strings) Co-authored-by: victorpahuus Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/da/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/da-DK.json | 65 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 64 insertions(+), 1 deletion(-) diff --git a/src/lang/da-DK.json b/src/lang/da-DK.json index 1b0fe210b..4aaa666c5 100644 --- a/src/lang/da-DK.json +++ b/src/lang/da-DK.json @@ -444,5 +444,68 @@ "Using a Reverse Proxy?": "Bruger du en Reverse Proxy?", "deleteDockerHostMsg": "Er du sikker på, at du vil slette denne docker host for alle monitors?", "Docker Host": "Docker Host", - "Docker Hosts": "Docker Hosts" + "Docker Hosts": "Docker Hosts", + "loadingError": "Kan ikke hente dataene, prøv igen senere.", + "Custom": "Brugerdefineret", + "Monitor": "Monitor | Monitors", + "Specific Monitor Type": "Specifik monitor-type", + "topic": "Emne", + "Fingerprint:": "Fingerprint:", + "Issuer:": "Udsteder:", + "dayOfWeek": "Ugedag", + "dayOfMonth": "Dag i måneden", + "lastDay": "Sidste dag", + "lastDay1": "Sidste dag i måneden", + "weekdayShortThu": "Tor", + "weekdayShortFri": "Fre", + "weekdayShortSat": "Lør", + "weekdayShortSun": "Søn", + "weekdayShortWed": "Ons", + "lastDay2": "Anden sidste dag i måneden", + "lastDay3": "Tredje sidste dag i måneden", + "lastDay4": "Fjerde sidste dag i måneden", + "maintenanceStatus-under-maintenance": "Under vedligeholdelse", + "maintenanceStatus-inactive": "Inaktiv", + "maintenanceStatus-scheduled": "Planlagt", + "maintenanceStatus-ended": "Afsluttet", + "maintenanceStatus-unknown": "Ukendt", + "Display Timezone": "Vis tidszone", + "Server Timezone": "Serverens tidszone", + "IconUrl": "Ikon URL", + "Enable DNS Cache": "Aktiver DNS Cache", + "Enable": "Aktiver", + "Disable": "Deaktiver", + "dnsCacheDescription": "Det fungerer muligvis ikke i alle IPv6-miljøer, så deaktiver det, hvis du støder på problemer.", + "Maintenance Time Window of a Day": "Tidsvindue for vedligeholdelse af en dag", + "Schedule Maintenance": "Planlæg vedligeholdelse", + "Date and Time": "Dato og klokkeslæt", + "plugin": "Plugin | Plugins", + "install": "Installer", + "uninstall": "Afinstaller", + "uninstalling": "Afinstallerer", + "confirmUninstallPlugin": "Er du sikker på, at du vil afinstallere dette plugin?", + "installing": "Installerer", + "markdownSupported": "Markdown syntax understøttet", + "Affected Monitors": "Berørte monitors", + "All Status Pages": "Alle statussider", + "Pick Affected Monitors...": "Vælg berørte monitors…", + "Select status pages...": "Vælg statusside…", + "proxyDescription": "Proxyer skal være tilknyttet en monitor for at fungere.", + "Accept characters:": "Accepter tegn:", + "Authentication": "Godkendelse", + "wayToGetCloudflaredURL": "(Download cloudflared fra {0})", + "The current connection may be lost if you are currently connecting via Cloudflare Tunnel. Are you sure want to stop it? Type your current password to confirm it.": "Den aktuelle forbindelse kan gå tabt, hvis du er forbundet via Cloudflare Tunnel. Er du sikker på, at du vil stoppe det? Indtast din nuværende adgangskode for at bekræfte den.", + "Other Software": "Anden software", + "Date Created": "Dato oprettet", + "signedInDispDisabled": "Auth Deaktiveret.", + "certificationExpiryDescription": "HTTPS Monitors sender en notifikation, når TLS-certifikatet udløber om:", + "Also check beta release": "Se også betaudgivelsen", + "Show update if available": "Vis opdatering, hvis tilgængelig", + "wayToGetZohoCliqURL": "Du kan lære, hvordan du opretter et webhook URL {0}.", + "recurringInterval": "Interval", + "weekdayShortMon": "Man", + "weekdayShortTue": "Tir", + "dnsPortDescription": "DNS server port. Standardværdien er 53. Du kan altid ændre porten.", + "Valid To:": "Gyldig til:", + "Domain Name Expiry Notification": "Notifikation om udløb af domænenavn" } From fa2221781ee65d0beab3b49e6f76ee7b4f7beb77 Mon Sep 17 00:00:00 2001 From: MrEddX Date: Fri, 3 Mar 2023 08:50:54 +0000 Subject: [PATCH 138/171] Translated using Weblate (Bulgarian) Currently translated at 100.0% (704 of 704 strings) Translated using Weblate (Bulgarian) Currently translated at 100.0% (694 of 694 strings) Translated using Weblate (Bulgarian) Currently translated at 100.0% (677 of 677 strings) Translated using Weblate (Bulgarian) Currently translated at 100.0% (674 of 674 strings) Translated using Weblate (Bulgarian) Currently translated at 100.0% (667 of 667 strings) Co-authored-by: MrEddX Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/bg/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/bg-BG.json | 40 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/src/lang/bg-BG.json b/src/lang/bg-BG.json index ae2cdce61..d60620a25 100644 --- a/src/lang/bg-BG.json +++ b/src/lang/bg-BG.json @@ -696,5 +696,43 @@ "Google Analytics ID": "Google Analytics ID", "Edit Tag": "Редактиране на таг", "Learn More": "Научете повече", - "Server Address": "Сървър адрес" + "Server Address": "Сървър адрес", + "notificationRegional": "Регионални", + "Body Encoding": "Кодировка на тялото", + "telegramMessageThreadID": "(По избор) Thread ID на съобщението", + "telegramMessageThreadIDDescription": "Незадължителен уникален идентификатор за целевата нишка от съобщения (тема) на форума; само за форумни супергрупи", + "telegramProtectContent": "Защита на препращане/записване", + "telegramProtectContentDescription": "Ако е активирано, съобщенията от ботове в Telegram ще бъдат защитени от препращане и запазване.", + "telegramSendSilentlyDescription": "Изпраща съобщението тихо. Потребителите ще получат известие без звук.", + "telegramSendSilently": "Изпрати тихо", + "Clone Monitor": "Клониране на монитор", + "Clone": "Клонирай", + "cloneOf": "Клонинг на {0}", + "Expiry": "Валиден до", + "Expiry date": "Дата на изтичане", + "Add Another": "Добави друг", + "Key Added": "Ключът е добавен", + "Add API Key": "Добави API ключ", + "No API Keys": "Няма API ключове", + "apiKey-active": "Активен", + "Expires": "Изтича на", + "deleteAPIKeyMsg": "Сигурни ли сте, че желаете да изтриете този API ключ?", + "Generate": "Генерирай", + "API Keys": "API Ключове", + "Don't expire": "Не изтича", + "Continue": "Продължи", + "apiKeyAddedMsg": "Вашият API ключ е добавен. Моля, запишете го, тъй като той няма да бъде показан отново.", + "apiKey-expired": "Изтекъл", + "apiKey-inactive": "Неактивен", + "disableAPIKeyMsg": "Сигурни ли сте, че желаете да деактивирате този API ключ?", + "pagertreeUrgency": "Спешност", + "pagertreeSilent": "Тих", + "pagertreeLow": "Ниска", + "pagertreeHigh": "Висока", + "pagertreeResolve": "Автоматично разрешаване", + "pagertreeDoNothing": "Не прави нищо", + "wayToGetPagerTreeIntegrationURL": "След като създадете интеграция на Uptime Kuma в PagerTree, копирайте крайната точка. За пълни подробности вижте {0}", + "pagertreeIntegrationUrl": "URL Адрес за интеграция", + "pagertreeMedium": "Средна", + "pagertreeCritical": "Критична" } From 482d2657ca8e3e1dedc43b6fa52664f316f6d859 Mon Sep 17 00:00:00 2001 From: Super Admin Date: Fri, 3 Mar 2023 08:50:54 +0000 Subject: [PATCH 139/171] Translated using Weblate (Yue) Currently translated at 14.9% (100 of 667 strings) Translated using Weblate (Chinese (Traditional, Hong Kong)) Currently translated at 94.1% (628 of 667 strings) Co-authored-by: Super Admin Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/yue/ Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/zh_Hant_HK/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/yue.json | 3 ++- src/lang/zh-HK.json | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/lang/yue.json b/src/lang/yue.json index 98936dbc1..f2a5c4760 100644 --- a/src/lang/yue.json +++ b/src/lang/yue.json @@ -97,5 +97,6 @@ "Monitor Type": "監測器類型", "Heartbeat Interval": "檢查間距", "Add New Monitor": "新增監測器", - "Quick Stats": "綜合數據" + "Quick Stats": "綜合數據", + "markdownSupported": "可以用 Markdown" } diff --git a/src/lang/zh-HK.json b/src/lang/zh-HK.json index 8111b73dd..bc0f8cc7c 100644 --- a/src/lang/zh-HK.json +++ b/src/lang/zh-HK.json @@ -656,5 +656,6 @@ "PushDeer Key": "PushDeer Key", "onebotSafetyTips": "為了安全起見,必須設置存取 Token", "onebotUserOrGroupId": "群組/使用者 ID", - "onebotPrivateMessage": "私人" + "onebotPrivateMessage": "私人", + "notificationRegional": "地區性" } From 3f3c5dca9f4b32ca5b20e1048b504ef316fbb59c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20Faruk=20Gen=C3=A7?= Date: Fri, 3 Mar 2023 08:50:54 +0000 Subject: [PATCH 140/171] Translated using Weblate (Turkish) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 100.0% (669 of 669 strings) Co-authored-by: Ömer Faruk Genç Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/tr/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/tr-TR.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/lang/tr-TR.json b/src/lang/tr-TR.json index 80d273e1e..3c78c4bdd 100644 --- a/src/lang/tr-TR.json +++ b/src/lang/tr-TR.json @@ -696,5 +696,8 @@ "Google Analytics ID": "Google Analytics ID", "Edit Tag": "Etiketi Düzenle", "Learn More": "Daha fazla bilgi edin", - "Server Address": "Sunucu Adresi" + "Server Address": "Sunucu Adresi", + "telegramMessageThreadIDDescription": "Forumun hedef ileti dizisi (konusu) için isteğe bağlı benzersiz kimlik; yalnızca forum üst grupları için geçerli", + "telegramMessageThreadID": "(İsteğe bağlı) Mesaj Thread ID", + "notificationRegional": "Bölgesel" } From 2bb3b634c020eef9ebf7f45a65e0cd8d531d6038 Mon Sep 17 00:00:00 2001 From: 401Unauthorized Date: Fri, 3 Mar 2023 08:50:54 +0000 Subject: [PATCH 141/171] Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (669 of 669 strings) Co-authored-by: 401Unauthorized Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/zh_Hans/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/zh-CN.json | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/lang/zh-CN.json b/src/lang/zh-CN.json index a05395939..c4b428926 100644 --- a/src/lang/zh-CN.json +++ b/src/lang/zh-CN.json @@ -546,7 +546,7 @@ "pushoversounds cashregister": "Cash Register", "pushoversounds classical": "Classical", "pushoversounds cosmic": "Cosmic", - "pushoversounds falling": "Falling", + "pushoversounds falling": "下落", "pushoversounds gamelan": "Gamelan", "pushoversounds incoming": "Incoming", "pushoversounds intermission": "Intermission", @@ -698,5 +698,8 @@ "markdownSupported": "支持 Markdown 语法", "Google Analytics ID": "Google Analytics(分析)ID", "Learn More": "了解更多", - "Edit Tag": "编辑标签" + "Edit Tag": "编辑标签", + "telegramMessageThreadID": "(可选)消息线程 ID", + "telegramMessageThreadIDDescription": "Optional Unique identifier for the target message thread (topic) of the forum; for forum supergroups only", + "notificationRegional": "地区性" } From f2dc27c8fad9b87107a5f30386b1f744d3ddc360 Mon Sep 17 00:00:00 2001 From: Donker_Jumala Date: Fri, 3 Mar 2023 08:50:54 +0000 Subject: [PATCH 142/171] Translated using Weblate (Japanese) Currently translated at 40.8% (273 of 669 strings) Co-authored-by: Donker_Jumala Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ja/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/ja.json | 92 +++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 84 insertions(+), 8 deletions(-) diff --git a/src/lang/ja.json b/src/lang/ja.json index 06f0d3c31..d0d2f51b6 100644 --- a/src/lang/ja.json +++ b/src/lang/ja.json @@ -1,6 +1,6 @@ { "languageName": "日本語", - "checkEverySecond": "{0}秒ごとにチェックします。", + "checkEverySecond": "{0}秒ごとにチェックします", "retriesDescription": "サービスがダウンとしてマークされ、通知が送信されるまでの最大リトライ数", "ignoreTLSError": "HTTPS ウェブサイトの TLS/SSL エラーを無視する", "upsideDownModeDescription": "ステータスの扱いを逆にします。サービスに到達可能な場合は、DOWNとなる。", @@ -8,7 +8,7 @@ "acceptedStatusCodesDescription": "成功した応答とみなされるステータスコードを選択する。", "passwordNotMatchMsg": "繰り返しのパスワードが一致しません。", "notificationDescription": "監視を機能させるには、監視に通知を割り当ててください。", - "keywordDescription": "プレーンHTMLまたはJSON応答でキーワードを検索し、大文字と小文字を区別します", + "keywordDescription": "プレーンHTMLまたはJSON応答でキーワードを検索し、大文字と小文字を区別します。", "pauseDashboardHome": "一時停止", "deleteMonitorMsg": "この監視を削除してよろしいですか?", "deleteNotificationMsg": "全ての監視のこの通知を削除してよろしいですか?", @@ -137,7 +137,7 @@ "2FA Settings": "2段階認証の設定", "Two Factor Authentication": "2段階認証", "Clear all statistics": "すべての記録を削除", - "retryCheckEverySecond": "Retry every {0} seconds.", + "retryCheckEverySecond": "{0} 秒ごとにリトライします", "importHandleDescription": "同じ名前のすべての監視または通知方法を上書きしない場合は、「既存のをスキップ」を選択します。 「上書きする」は、既存のすべてのモニターと通知を削除します。", "confirmImportMsg": "バックアップをインポートしてもよろしいですか?希望するオプションを選択してください。", "Heartbeat Retry Interval": "異常検知後の再試行間隔", @@ -148,17 +148,17 @@ "Options": "オプション", "Keep both": "どちらも保持する", "Tags": "タグ", - "Add New below or Select...": "新規追加または選択...", + "Add New below or Select...": "新規追加または選択…", "Tag with this name already exist.": "この名前のタグはすでに存在しています。", "Tag with this value already exist.": "この値のタグはすでに存在しています。", "color": "色", "value (optional)": "値 (optional)", - "Search...": "検索...", + "Search...": "検索…", "Avg. Ping": "平均Ping時間", "Avg. Response": "平均応答時間", "Entry Page": "エントリーページ", "statusPageNothing": "ここには何もありません。グループまたは監視を追加してください。", - "No Services": "No Services", + "No Services": "サービス無し", "All Systems Operational": "すべてのサービスが稼働中", "Partially Degraded Service": "部分的にサービスが停止中", "Degraded Service": "サービスが停止中", @@ -193,9 +193,85 @@ "pushOptionalParams": "オプションのパラメーター: {0}", "disableauth.message1": "認証を無効にしてもよろしいですか?", "disableauth.message2": "これは、Cloudflare Access、Authelia、またはその他の認証メカニズムなど、Uptime Kuma の前にサードパーティ認証を実装するシナリオ向けに設計されています。", - "Please use this option carefully!": "このオプションは慎重に使用してください。", + "Please use this option carefully!": "このオプションは慎重に使用してください!", "Primary Base URL": "プライマリ ベース URL", "statusMaintenance": "メンテナンス", "Passive Monitor Type": "パッシブモニタータイプ", - "Specific Monitor Type": "特定のモニターの種類" + "Specific Monitor Type": "特定のモニターの種類", + "Security": "セキュリティ", + "Steam API Key": "Steam API Key", + "Default": "デフォルト", + "Title": "タイトル", + "No status pages": "ステータスページがありません", + "Proxy": "プロキシ", + "Date Created": "作成日", + "Content Type": "コンテンツタイプ", + "webhookAdditionalHeadersTitle": "追加ヘッダー", + "Server URL": "Server URL", + "Priority": "優先順位", + "Read more": "続きを読む", + "Show Tags": "タグを表示", + "Switch to Dark Theme": "ダークテーマに切り替える", + "Token": "Token", + "Show URI": "URIを表示する", + "Gray": "灰色", + "Red": "赤色", + "Green": "緑色", + "Blue": "青色", + "Indigo": "藍色", + "Purple": "紫色", + "Pink": "ピンク", + "Required": "必須", + "Select status pages...": "ステータスページを選択してください…", + "webhookAdditionalHeadersDesc": "Webhook で送信される追加ヘッダーを設定します。", + "Webhook URL": "Webhook URL", + "Application Token": "Application Token", + "steamApiKeyDescription": "Steam Game Server を監視するためには、Steam Web-API キーが必要です。APIキーの登録はこちらから行えます。 ", + "Monitor History": "監視履歴", + "clearDataOlderThan": "監視履歴データを {0} 日間、保持します。", + "PasswordsDoNotMatch": "パスワードが一致していません。", + "Current User": "現在のユーザー", + "topic": "トピック", + "Info": "Info", + "Create Incident": "インシデントを作成", + "Content": "内容", + "Please input title and content": "タイトルと内容を入力してください", + "Last Updated": "最終アップデート日時", + "Unpin": "ピンを外す", + "Switch to Light Theme": "ライトテーマに切り替える", + "Hide Tags": "タグを隠す", + "Description": "概要", + "Untitled Group": "名前の無いグループ", + "Services": "サービス", + "Discard": "破棄", + "Cancel": "キャンセル", + "Powered by": "Powered by", + "Customize": "カスタマイズ", + "Custom Footer": "カスタムフッター", + "Custom CSS": "カスタム CSS", + "deleteStatusPageMsg": "本当にこのステータスページを削除しますか?", + "Proxies": "プロキシ", + "default": "デフォルト", + "enabled": "有効", + "setAsDefault": "デフォルトに設定する", + "deleteProxyMsg": "本当にすべてのモニターからこのプロキシを削除しますか?", + "proxyDescription": "プロキシはモニターに割り当てられていないと機能しません。", + "setAsDefaultProxyDescription": "このプロキシは、新しいモニターに対してデフォルトで有効になっています。モニターごとに個別にプロキシを無効にすることができます。", + "Remove Token": "Tokenを削除", + "Stop": "止める", + "Add New Status Page": "新しいステータスページを追加", + "Next": "次へ", + "No Proxy": "プロキシなし", + "Authentication": "認証", + "HTTP Basic Auth": "HTTPベーシック認証", + "New Status Page": "新しいステータスページ", + "Page Not Found": "ページが見つかりません", + "Reverse Proxy": "リバースプロキシ", + "Backup": "バックアップ", + "About": "About", + "cloudflareWebsite": "Cloudflare Website", + "Don't know how to get the token? Please read the guide:": "トークンの取得方法が分かりませんか?ガイドをお読みください。", + "Custom": "カスタム", + "Created": "作成日時", + "Resend Notification if Down X times consecutively": "X回連続でダウンしたら通知を再送する" } From 40cd5d41e3d24eabb8031662ceb8cf7b16970b24 Mon Sep 17 00:00:00 2001 From: AnnAngela Date: Fri, 3 Mar 2023 08:50:54 +0000 Subject: [PATCH 143/171] Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (669 of 669 strings) Co-authored-by: AnnAngela Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/zh_Hans/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/zh-CN.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/lang/zh-CN.json b/src/lang/zh-CN.json index c4b428926..bd859a3fb 100644 --- a/src/lang/zh-CN.json +++ b/src/lang/zh-CN.json @@ -699,7 +699,7 @@ "Google Analytics ID": "Google Analytics(分析)ID", "Learn More": "了解更多", "Edit Tag": "编辑标签", - "telegramMessageThreadID": "(可选)消息线程 ID", - "telegramMessageThreadIDDescription": "Optional Unique identifier for the target message thread (topic) of the forum; for forum supergroups only", - "notificationRegional": "地区性" + "telegramMessageThreadID": "(可选)话题 ID", + "telegramMessageThreadIDDescription": "可选的唯一标识符,用以向该标识符对应的话题发送消息,仅限启用了话题功能的超级群组可用", + "notificationRegional": "地区性通知平台" } From f02e8be3e20f68f1eed84e61b02dd469f2303c0d Mon Sep 17 00:00:00 2001 From: 401Unauthorized Date: Fri, 3 Mar 2023 08:50:54 +0000 Subject: [PATCH 144/171] Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (674 of 674 strings) Translated using Weblate (Chinese (Simplified)) Currently translated at 99.5% (670 of 673 strings) Co-authored-by: 401Unauthorized Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/zh_Hans/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/zh-CN.json | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/lang/zh-CN.json b/src/lang/zh-CN.json index bd859a3fb..db0f11591 100644 --- a/src/lang/zh-CN.json +++ b/src/lang/zh-CN.json @@ -701,5 +701,10 @@ "Edit Tag": "编辑标签", "telegramMessageThreadID": "(可选)话题 ID", "telegramMessageThreadIDDescription": "可选的唯一标识符,用以向该标识符对应的话题发送消息,仅限启用了话题功能的超级群组可用", - "notificationRegional": "地区性通知平台" + "notificationRegional": "地区性通知平台", + "telegramSendSilently": "静默发送", + "Body Encoding": "响应体编码", + "telegramSendSilentlyDescription": "静默地发送消息。消息发布后用户会收到无声通知。", + "telegramProtectContent": "阻止转发/保存", + "telegramProtectContentDescription": "如果启用,Telegram 中的机器人消息将受到保护,不会被转发和保存。" } From db85f1758ad8f6032eaf7cca3b5d309270586723 Mon Sep 17 00:00:00 2001 From: Stian Meyer Date: Fri, 3 Mar 2023 08:50:54 +0000 Subject: [PATCH 145/171] =?UTF-8?q?Translated=20using=20Weblate=20(Norwegi?= =?UTF-8?q?an=20Bokm=C3=A5l)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 40.2% (271 of 674 strings) Co-authored-by: Stian Meyer Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/nb_NO/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/nb-NO.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/lang/nb-NO.json b/src/lang/nb-NO.json index ca9a5f78c..343a129a6 100644 --- a/src/lang/nb-NO.json +++ b/src/lang/nb-NO.json @@ -289,5 +289,6 @@ "Passive Monitor Type": "Passiv Monitor Type", "Specific Monitor Type": "Spesifik Monitor Type", "General Monitor Type": "Generisk Monitor Type", - "markdownSupported": "Markdown syntax støttet" + "markdownSupported": "Markdown syntax støttet", + "Resend Notification if Down X times consecutively": "Send notifikasjon på nytt dersom nede X antall ganger på rad" } From c8a830047b329b5e8d8cfcb64bd8adc37521f305 Mon Sep 17 00:00:00 2001 From: Cyril59310 Date: Fri, 3 Mar 2023 08:50:54 +0000 Subject: [PATCH 146/171] Translated using Weblate (French) Currently translated at 100.0% (677 of 677 strings) Translated using Weblate (French) Currently translated at 100.0% (674 of 674 strings) Co-authored-by: Cyril59310 Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/fr/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/fr-FR.json | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/lang/fr-FR.json b/src/lang/fr-FR.json index 26d713452..f45116338 100644 --- a/src/lang/fr-FR.json +++ b/src/lang/fr-FR.json @@ -696,5 +696,16 @@ "Google Analytics ID": "Identifiant Google Analytics", "Server Address": "Adresse du serveur", "Learn More": "En savoir plus", - "Edit Tag": "Modifier l'étiquette" + "Edit Tag": "Modifier l'étiquette", + "Body Encoding": "Encodage du corps", + "telegramMessageThreadID": "(Facultatif) ID du fil de message", + "telegramMessageThreadIDDescription": "(Facultatif) Identifiant unique pour le fil de discussion cible (sujet) du forum; pour les supergroupes du forum uniquement", + "telegramProtectContent": "Protéger le transfert/l'enregistrement", + "telegramProtectContentDescription": "S'il est activé, les messages du robot dans Telegram seront protégés contre le transfert et l'enregistrement.", + "telegramSendSilently": "Envoyer silencieusement", + "telegramSendSilentlyDescription": "Envoie le message silencieusement. Les utilisateurs recevront une notification sans son.", + "notificationRegional": "Régional", + "Clone Monitor": "Cloner la sonde", + "Clone": "Cloner", + "cloneOf": "Clone de {0}" } From efd4dece1b2617fd1dfcd24ad5b0601734e5d2c7 Mon Sep 17 00:00:00 2001 From: Abin Abraham Date: Fri, 3 Mar 2023 08:50:55 +0000 Subject: [PATCH 147/171] Translated using Weblate (Malayalam) Currently translated at 3.7% (25 of 674 strings) Added translation using Weblate (Malayalam) Co-authored-by: Abin Abraham Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ml/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/ml.json | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 src/lang/ml.json diff --git a/src/lang/ml.json b/src/lang/ml.json new file mode 100644 index 000000000..8cbfd148f --- /dev/null +++ b/src/lang/ml.json @@ -0,0 +1,27 @@ +{ + "Settings": "ക്രമീകരണം", + "Help": "സഹായം", + "New Update": "പുതിയ നവീകരണം", + "Language": "ഭാഷ", + "Appearance": "കാണപ്പെടുക", + "Theme": "ദൃശ്യക്രമീകരണം", + "General": "പൊതുവായത്", + "Version": "പതിപ്പ്", + "List": "പട്ടിക", + "Add": "ചേർക്കുക", + "Add New Monitor": "പുതിയ മോണിറ്റർ ചേർക്കുക", + "Quick Stats": "വേഗത്തിൽ ഇപ്പോളത്തെ അവസ്ഥ നോക്കുക", + "Up": "മുകളിൽ", + "Down": "താഴെ", + "statusMaintenance": "പരിപാലനം", + "Maintenance": "പരിപാലനം", + "Unknown": "അജ്ഞാതം", + "Passive Monitor Type": "പാർശമായ തിര നോട്ടം", + "Specific Monitor Type": "പ്രത്യേക തിര നോട്ടം", + "languageName": "മലയാളം", + "Dashboard": "നിയന്ത്രണോപകരണ സജ്ജീകരണം", + "Game": "കളികൾ", + "Check Update On GitHub": "പുതിയ മാറ്റങ്ങൾക്കായി GitHub നോക്കുക", + "Pending": "തീരുമാനം പ്രതീക്ഷിച്ചിരിക്കുന്ന", + "General Monitor Type": "പൊതുവരായ തിര നോട്ടം" +} From 1718890be7e34854b57dad3ba89c12e59e41813a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Furkan=20=C4=B0?= Date: Fri, 3 Mar 2023 08:50:55 +0000 Subject: [PATCH 148/171] Translated using Weblate (Turkish) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 100.0% (674 of 674 strings) Co-authored-by: Furkan İ Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/tr/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/tr-TR.json | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/lang/tr-TR.json b/src/lang/tr-TR.json index 3c78c4bdd..8c6b30d40 100644 --- a/src/lang/tr-TR.json +++ b/src/lang/tr-TR.json @@ -379,7 +379,7 @@ "alerta": "Alerta", "alertaApiEndpoint": "API Endpoint", "alertaEnvironment": "Environment", - "alertaApiKey": "API Key", + "alertaApiKey": "API Anahtarı", "alertaAlertState": "Uyarı Durumu", "alertaRecoverState": "Kurtarma Durumu", "deleteStatusPageMsg": "Bu durum sayfasını silmek istediğinizden emin misiniz?", @@ -693,11 +693,16 @@ "line": "Line Messenger", "mattermost": "Mattermost", "markdownSupported": "Markdown yazım formatı desteklenir", - "Google Analytics ID": "Google Analytics ID", + "Google Analytics ID": "Google Analytics Kodu", "Edit Tag": "Etiketi Düzenle", "Learn More": "Daha fazla bilgi edin", "Server Address": "Sunucu Adresi", "telegramMessageThreadIDDescription": "Forumun hedef ileti dizisi (konusu) için isteğe bağlı benzersiz kimlik; yalnızca forum üst grupları için geçerli", "telegramMessageThreadID": "(İsteğe bağlı) Mesaj Thread ID", - "notificationRegional": "Bölgesel" + "notificationRegional": "Bölgesel", + "telegramSendSilently": "Sessizce Gönder", + "telegramSendSilentlyDescription": "Mesajı sessizce gönderir. Kullanıcılar sessiz bir bildirim alacaktır.", + "telegramProtectContent": "Yönlendirmeyi/Kaydetmeyi Koru", + "telegramProtectContentDescription": "Etkinleştirilirse, Telegram'daki bot mesajları iletilmeye ve kaydedilmeye karşı korunacaktır.", + "Body Encoding": "JSON veya XML olabilen HTTP İstek Gövdesinin Kodlaması. İstek İçeriği Türü olarak da bilinir: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Type" } From a838432aefa4d5c9702bfe655aa2954dd52b199f Mon Sep 17 00:00:00 2001 From: AnnAngela Date: Fri, 3 Mar 2023 08:50:55 +0000 Subject: [PATCH 149/171] Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (677 of 677 strings) Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (674 of 674 strings) Co-authored-by: AnnAngela Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/zh_Hans/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/zh-CN.json | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/lang/zh-CN.json b/src/lang/zh-CN.json index db0f11591..40bfdd809 100644 --- a/src/lang/zh-CN.json +++ b/src/lang/zh-CN.json @@ -235,10 +235,10 @@ "smtpBCC": "密送", "discord": "Discord", "Discord Webhook URL": "Discord Webhook 网址", - "wayToGetDiscordURL": "要获取,可以前往服务器设置 -> 整合 -> 创建 Webhook", + "wayToGetDiscordURL": "可在服务器设置 -> 整合 -> 创建 Webhook中获取", "Bot Display Name": "机器人显示名称", "Prefix Custom Message": "自定义消息前缀", - "Hello @everyone is...": "{'@'}everyone,…", + "Hello @everyone is...": "{'@'}everyone,……", "teams": "Microsoft Teams", "Webhook URL": "Webhook 网址", "wayToGetTeamsURL": "您可以在{0}了解如何获取 Webhook URL。", @@ -703,8 +703,11 @@ "telegramMessageThreadIDDescription": "可选的唯一标识符,用以向该标识符对应的话题发送消息,仅限启用了话题功能的超级群组可用", "notificationRegional": "地区性通知平台", "telegramSendSilently": "静默发送", - "Body Encoding": "响应体编码", + "Body Encoding": "请求体编码", "telegramSendSilentlyDescription": "静默地发送消息。消息发布后用户会收到无声通知。", "telegramProtectContent": "阻止转发/保存", - "telegramProtectContentDescription": "如果启用,Telegram 中的机器人消息将受到保护,不会被转发和保存。" + "telegramProtectContentDescription": "如果启用,Telegram 中的机器人消息将受到保护,不会被转发和保存。", + "Clone Monitor": "克隆监控项", + "Clone": "克隆", + "cloneOf": "{0} 的克隆" } From 8b1affb9f4825832a6ce6fdcc881a17ccaf0e476 Mon Sep 17 00:00:00 2001 From: Ivan Dmitriev Date: Fri, 3 Mar 2023 08:50:55 +0000 Subject: [PATCH 150/171] Translated using Weblate (Russian) Currently translated at 95.7% (648 of 677 strings) Co-authored-by: Ivan Dmitriev Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ru/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/ru-RU.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/lang/ru-RU.json b/src/lang/ru-RU.json index 8b1e3bf22..ec8f8008d 100644 --- a/src/lang/ru-RU.json +++ b/src/lang/ru-RU.json @@ -690,5 +690,9 @@ "Guild ID": "ID гильдии", "Kook": "Kook", "wayToGetKookBotToken": "Создайте приложение и получите токен вашего бота тут {0}.", - "Resend Notification if Down X times consecutively": "Повторная отправка уведомления при падении несколько раз" + "Resend Notification if Down X times consecutively": "Повторная отправка уведомления при падении несколько раз", + "telegramProtectContent": "Запретить пересылку/сохранение", + "telegramProtectContentDescription": "Если включено, сообщения бота в Telegram будут запрещены для пересылки и сохранения.", + "telegramSendSilently": "Отправить без звука", + "telegramSendSilentlyDescription": "Пользователи получат уведомление без звука." } From cd61b28c85444662b5c58bfd7ad96a6ffdd3fb89 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20Faruk=20Gen=C3=A7?= Date: Fri, 3 Mar 2023 08:50:55 +0000 Subject: [PATCH 151/171] Translated using Weblate (Turkish) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 100.0% (677 of 677 strings) Co-authored-by: Ömer Faruk Genç Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/tr/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/tr-TR.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/lang/tr-TR.json b/src/lang/tr-TR.json index 8c6b30d40..26283a84f 100644 --- a/src/lang/tr-TR.json +++ b/src/lang/tr-TR.json @@ -704,5 +704,8 @@ "telegramSendSilentlyDescription": "Mesajı sessizce gönderir. Kullanıcılar sessiz bir bildirim alacaktır.", "telegramProtectContent": "Yönlendirmeyi/Kaydetmeyi Koru", "telegramProtectContentDescription": "Etkinleştirilirse, Telegram'daki bot mesajları iletilmeye ve kaydedilmeye karşı korunacaktır.", - "Body Encoding": "JSON veya XML olabilen HTTP İstek Gövdesinin Kodlaması. İstek İçeriği Türü olarak da bilinir: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Type" + "Body Encoding": "JSON veya XML olabilen HTTP İstek Gövdesinin Kodlaması. İstek İçeriği Türü olarak da bilinir: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Type", + "Clone Monitor": "Klon Monitör", + "Clone": "Klon", + "cloneOf": "{0} Monitörünün Klonu" } From 5005c56e5110f2e7f4e779ca0fa7890bbb01e1fc Mon Sep 17 00:00:00 2001 From: Nelson Chan Date: Fri, 3 Mar 2023 08:50:55 +0000 Subject: [PATCH 152/171] Translated using Weblate (Chinese (Traditional, Hong Kong)) Currently translated at 96.9% (673 of 694 strings) Translated using Weblate (Chinese (Traditional, Hong Kong)) Currently translated at 91.0% (632 of 694 strings) Co-authored-by: Nelson Chan Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/zh_Hant_HK/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/zh-HK.json | 47 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) diff --git a/src/lang/zh-HK.json b/src/lang/zh-HK.json index bc0f8cc7c..de226c986 100644 --- a/src/lang/zh-HK.json +++ b/src/lang/zh-HK.json @@ -657,5 +657,50 @@ "onebotSafetyTips": "為了安全起見,必須設置存取 Token", "onebotUserOrGroupId": "群組/使用者 ID", "onebotPrivateMessage": "私人", - "notificationRegional": "地區性" + "notificationRegional": "地區性", + "RadiusCalledStationIdDescription": "Called Device 識別碼", + "telegramSendSilently": "靜音發送", + "telegramMessageThreadID": "(選填) Message Thread ID", + "RadiusCallingStationIdDescription": "Calling Device 識別碼", + "Body Encoding": "Body Encoding", + "API Keys": "API Keys", + "deleteAPIKeyMsg": "你確定要刪除此 API Key?", + "disableAPIKeyMsg": "你確定要停用此 API Key?", + "apiKey-inactive": "已停用", + "apiKey-active": "有效", + "No API Keys": "沒有 API Keys", + "Add API Key": "新 API Key", + "Expiry date": "失效時間", + "Don't expire": "不會失效", + "apiKey-expired": "已失效", + "Expires": "失效時間", + "Key Added": "API Key 已產生", + "Add Another": "加另一個", + "Continue": "繼續", + "Generate": "產生", + "apiKeyAddedMsg": "你的 API Key 已被產生。此頁只會顯示一次,請適當保存。", + "Expiry": "過期", + "telegramSendSilentlyDescription": "選擇以靜音發送。用戶會收到無聲通知。", + "Clone Monitor": "復製監察器", + "Clone": "復製", + "cloneOf": "復製的 {0}", + "Proxy server has authentication": "Proxy 伺服器啟用了驗證功能", + "Proxy Server": "Proxy 伺服器", + "Proxy Protocol": "Proxy 通訊協定", + "Setup Proxy": "設定 Proxy", + "Topic": "Topic", + "Retry": "重試", + "High": "高", + "Huawei": "華為", + "Android": "Android", + "For safety, must use secret key": "為安全起見,必須使用 Secret Key", + "SecretKey": "SecretKey", + "WebHookUrl": "WebHookUrl", + "Bark Sound": "Bark 鈴聲", + "Bark Group": "Bark 群組", + "Bark Endpoint": "Bark Endpoint", + "Platform": "平台", + "Device Token": "裝置 Token", + "telegramProtectContent": "禁止轉發/儲存", + "telegramProtectContentDescription": "如果選擇,用戶將不能轉發/儲存收到的信息。" } From 1d7883208aab124a5a0533051c720f87bbb24aa5 Mon Sep 17 00:00:00 2001 From: 401Unauthorized Date: Fri, 3 Mar 2023 08:50:55 +0000 Subject: [PATCH 153/171] Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (694 of 694 strings) Co-authored-by: 401Unauthorized Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/zh_Hans/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/zh-CN.json | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/lang/zh-CN.json b/src/lang/zh-CN.json index 40bfdd809..3a46e96df 100644 --- a/src/lang/zh-CN.json +++ b/src/lang/zh-CN.json @@ -709,5 +709,22 @@ "telegramProtectContentDescription": "如果启用,Telegram 中的机器人消息将受到保护,不会被转发和保存。", "Clone Monitor": "克隆监控项", "Clone": "克隆", - "cloneOf": "{0} 的克隆" + "cloneOf": "{0} 的克隆", + "Expiry": "过期", + "Expiry date": "过期时间", + "Continue": "继续", + "Add Another": "添加另一个", + "Add API Key": "添加 API 密钥", + "No API Keys": "没有 API 密钥", + "apiKey-active": "有效", + "apiKey-expired": "已过期", + "Expires": "过期时间", + "apiKey-inactive": "已禁用", + "disableAPIKeyMsg": "你确定要禁用这个 API 密钥?", + "deleteAPIKeyMsg": "你确定要删除这个 API 密钥?", + "Generate": "生成", + "API Keys": "API 密钥", + "Don't expire": "从不过期", + "Key Added": "API 密钥已生成", + "apiKeyAddedMsg": "你的 API 密钥已生成。此页只会显示一次,请妥当保存。" } From eed49fed59fcf9e0415eb27b6c02b5e74410e99b Mon Sep 17 00:00:00 2001 From: Samuel PERRIER Date: Fri, 3 Mar 2023 08:50:55 +0000 Subject: [PATCH 154/171] Translated using Weblate (French) Currently translated at 100.0% (694 of 694 strings) Co-authored-by: Samuel PERRIER Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/fr/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/fr-FR.json | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/lang/fr-FR.json b/src/lang/fr-FR.json index f45116338..0552c298d 100644 --- a/src/lang/fr-FR.json +++ b/src/lang/fr-FR.json @@ -707,5 +707,22 @@ "notificationRegional": "Régional", "Clone Monitor": "Cloner la sonde", "Clone": "Cloner", - "cloneOf": "Clone de {0}" + "cloneOf": "Clone de {0}", + "Expiry date": "Date d'expiration", + "Add Another": "Ajouter un autre", + "Key Added": "Clé ajoutée", + "Expiry": "Expiration", + "Continue": "Continuer", + "Add API Key": "Ajouter une clé API", + "No API Keys": "Aucune clé API", + "apiKey-active": "Active", + "apiKey-expired": "Expirée", + "apiKey-inactive": "Inactive", + "Expires": "Expire", + "disableAPIKeyMsg": "Voulez-vous vraiment désactiver cette clé API ?", + "deleteAPIKeyMsg": "Voulez-vous vraiment supprimer cette clé API ?", + "Generate": "Générer", + "API Keys": "Clés API", + "apiKeyAddedMsg": "Votre clé API a été ajoutée. Veuillez la noter car elle ne pourra plus être affichée.", + "Don't expire": "N'expire pas" } From 9758e1b71a82427deff1b48f3263e06338beff99 Mon Sep 17 00:00:00 2001 From: Binyamin Yawitz Date: Fri, 3 Mar 2023 08:50:55 +0000 Subject: [PATCH 155/171] Translated using Weblate (Hebrew (Israel)) Currently translated at 100.0% (694 of 694 strings) Co-authored-by: Binyamin Yawitz Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/he_IL/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/he-IL.json | 214 +++++++++++++++++++++++++------------------- 1 file changed, 123 insertions(+), 91 deletions(-) diff --git a/src/lang/he-IL.json b/src/lang/he-IL.json index 1e4c01d33..c3b935597 100644 --- a/src/lang/he-IL.json +++ b/src/lang/he-IL.json @@ -1,13 +1,13 @@ { "languageName": "עברית", - "checkEverySecond": "בדוק כל {0} שניות", - "retryCheckEverySecond": "נסה שוב כל {0} שניות", - "resendEveryXTimes": "התראה שוב כל {0} פעמים", - "resendDisabled": "השליחה מחדש מושבתת", - "retriesDescription": "מקסימום ניסיונות חוזרים לפני שהשירות יסומן כלא פעיל ונשלחת התראה", + "checkEverySecond": "בדיקה כל {0} שניות", + "retryCheckEverySecond": "ניסיון חוזר כל {0} שניות", + "resendEveryXTimes": "שליחה שוב כל {0} פעמים", + "resendDisabled": "שליחה מחדש מושבתת", + "retriesDescription": "מקסימום ניסיונות חוזרים לפני שהשירות יסומן כלא פעיל ותשלח התראה", "ignoreTLSError": "התעלם משגיאת TLS/SSL עבור אתרי HTTPS", - "upsideDownModeDescription": "הפוך את הסטטוס על הפוך. אם ניתן להגיע לשירות, הוא לא פעיל.", - "maxRedirectDescription": "המספר המרבי של הפניות מחדש לעקוב. הגדר ל-0 כדי להשבית הפניות מחדש.", + "upsideDownModeDescription": "הפוך את יעד הסטטוס. אם ניתן להגיע לשירות, הוא ייחשב כלא פעיל.", + "maxRedirectDescription": "המספר המרבי של הפניות מחדש למעקב. ערך 0 ישבית הפניות מחדש לגמרי.", "enableGRPCTls": "אפשר לשלוח בקשת gRPC עם חיבור TLS", "grpcMethodDescription": "שם השיטה מומר לפורמט cammelCase כגון sayHello, check וכו.", "acceptedStatusCodesDescription": "בחר קודי סטטוס שנחשבים לתגובה מוצלחת.", @@ -23,7 +23,7 @@ "affectedMonitorsDescription": "בחר מוניטורים שמושפעים מהתחזוקה הנוכחית", "affectedStatusPages": "הצג הודעת תחזוקה זו בדפי סטטוס שנבחרו", "atLeastOneMonitor": "בחר לפחות מוניטור אחד מושפע", - "passwordNotMatchMsg": "הסיסמאות לא תואמות", + "passwordNotMatchMsg": "הסיסמאות שהזנתם אינן תואמות.", "notificationDescription": "יש להקצות התראות למוניטור כדי שהן יעבדו.", "keywordDescription": "חפש מילת מפתח בתגובת HTML או JSON רגילה. החיפוש תלוי רישיות.", "pauseDashboardHome": "עצור", @@ -43,37 +43,37 @@ "twoFAVerifyLabel": "אנא הזן את האסימון שלך כדי לאמת מערכת אדוש:", "tokenValidSettingsMsg": "האסימון תקף! כעת אתה יכול לשמור את הגדרות האדוש.", "confirmEnableTwoFAMsg": "האם אתה בטוח שברצונך להפעיל את מערכת אדוש?", - "confirmDisableTwoFAMsg": "Are you sure you want to disable 2FA?", + "confirmDisableTwoFAMsg": "האם אתם בטוחים שאתם רוצים להשבית אימות 2FA (אימות כפול)?", "Settings": "הגדרות", - "Dashboard": "פאנל ניהול", + "Dashboard": "לוח בקרה", "New Update": "עדכון חדש", "Language": "שפה", - "Appearance": "נראות", + "Appearance": "תצוגה", "Theme": "ערכת נושא", "General": "כללי", - "Primary Base URL": "כתובת האתר הראשית של הבסיס", + "Primary Base URL": "כתובת האתר הראשית", "Version": "גרסה", - "Check Update On GitHub": "לבדוק עדכונים בגיטהאב", + "Check Update On GitHub": "בדיקה לעדכונים מ-GitHub", "List": "רשימה", - "Add": "הוסף", + "Add": "הוספה", "Add New Monitor": "הוספת מוניטור חדש", - "Quick Stats": "נתונים בקצרה", - "Up": "פעיל", - "Down": "לא פעיל", + "Quick Stats": "סטטיסטיקות בקצרה", + "Up": "זמין", + "Down": "לא זמין", "Pending": "ממתין", "Unknown": "לא יודע", - "Pause": "עצור", + "Pause": "עצירה", "Name": "שם", "Status": "סטטוס", "DateTime": "תאריך שעה", "Message": "הודעה", "No important events": "אין אירועים חשובים", - "Resume": "המשך", + "Resume": "הפעלה", "Edit": "עריכה", "Delete": "מחיקה", - "Current": "עכשיו", + "Current": "נוכחי", "Uptime": "זמן פעילות", - "Cert Exp.": "Cert Exp.", + "Cert Exp.": "תפוגת תעודה.", "day": "יום | ימים", "-day": "-יום", "hour": "שעה", @@ -82,49 +82,49 @@ "Ping": "פינג", "Monitor Type": "סוג מוניטור", "Keyword": "מילת מפתח", - "Friendly Name": "שם ידידותי", + "Friendly Name": "שם תצוגה", "URL": "כתובת אתר", "Hostname": "שם המארח", "Port": "פורט", - "Heartbeat Interval": "מרווח פעימות", + "Heartbeat Interval": "מרווח פעימות (בין קריאה לקריאה)", "Retries": "נסיונות חוזרים", "Heartbeat Retry Interval": "מרווח נסיונות חוזר של פעימות", - "Resend Notification if Down X times consecutively": "שלח שוב הודעה אם ירד X פעמים כתוצאה מכך", + "Resend Notification if Down X times consecutively": "שליחת הודעה שוב אם לא פעיל X פעמים ברציפות", "Advanced": "מתקדם", "Upside Down Mode": "מצב הפוך", "Max. Redirects": "מקסימום הפניות מחדש", - "Accepted Status Codes": "קודי סטטוס מקובלים", - "Push URL": "דחף כתובת URL", - "needPushEvery": "עליך להתקשר לכתובת האתר הזו כל {0} שניות.", + "Accepted Status Codes": "קודי סטטוס מאושרים", + "Push URL": "כתובת URL ל-Push", + "needPushEvery": "יש לקרוא לכתובת הזו כל {0} שניות.", "pushOptionalParams": "פרמטרים אופציונליים: {0}", "Save": "שמירה", "Notifications": "התראות", - "Not available, please setup.": "לא זמין, אנא הגדר.", - "Setup Notification": "הודעת הגדרה", - "Light": "בהיר", - "Dark": "חושך", - "Auto": "אוטומטי", + "Not available, please setup.": "לא זמין, נא להגדיר.", + "Setup Notification": "הגדרת התראה", + "Light": "בהירה", + "Dark": "כהה", + "Auto": "אוטומטית", "Theme - Heartbeat Bar": "ערכת נושא - Heartbeat Bar", - "Normal": "נורמלי", - "Bottom": "למטה", - "None": "כלום", + "Normal": "רגיל", + "Bottom": "בתחתית האתר", + "None": "ללא", "Timezone": "אזור זמן", "Search Engine Visibility": "נראות במנועי חיפוש", - "Allow indexing": "אפשר הוספה לאינדקס", - "Discourage search engines from indexing site": "לא לעודד מנועי חיפוש לאינדקס אתרים", - "Change Password": "שנה סיסמא", + "Allow indexing": "לאפשר הוספה לאינדקס", + "Discourage search engines from indexing site": "לעודד מנועי חיפוש שלא לאנדקס את האתר", + "Change Password": "שינוי סיסמה", "Current Password": "סיסמה נוכחית", "New Password": "סיסמה חדשה", - "Repeat New Password": "חזור על סיסמה חדשה", - "Update Password": "עדכן סיסמה", - "Disable Auth": "השבתת אבטחה", - "Enable Auth": "הפעלת אבטחה", - "disableauth.message1": "האם אתה בטוח שברצונך להשבית את האבטחה?", - "disableauth.message2": "הוא מיועד לתרחישים שבהם אתה מתכוון ליישם אימות של צד שלישי מול Uptime Kuma כגון Cloudflare Access, Authelia או מנגנוני אימות אחרים.", - "Please use this option carefully!": "אנא השתמש באפשרות זו בזהירות!", + "Repeat New Password": "חזרה על הסיסמה חדשה", + "Update Password": "עידכון סיסמה", + "Disable Auth": "השבתת התחברות", + "Enable Auth": "הפעלת התחברות", + "disableauth.message1": "האם אתם בטוחים שברצונכםלהשבית את האבטחה?", + "disableauth.message2": "אופציה זו מיועדת לתרחישים בהם בכוונתכם ליישם אימות של צד שלישי מול Uptime Kuma כגון Cloudflare Access, Authelia או מנגנוני אימות אחרים.", + "Please use this option carefully!": "יש להשתמש באפשרות זו בזהירות!", "Logout": "התנתקות", "Leave": "יציאה", - "I understand, please disable": "אני מבין, אני רוצה להשבית", + "I understand, please disable": "מובן, אני רוצה להשבית", "Confirm": "אישור", "Yes": "כן", "No": "לא", @@ -234,7 +234,7 @@ "smtpBCC": "עותק מוסתר", "discord": "דיסקורד", "Discord Webhook URL": "כתובת אתר של Discord Webhook", - "wayToGetDiscordURL": "אתה יכול לקבל זאת על ידי מעבר להגדרות שרת -> אינטגרציות -> צור Webhook", + "wayToGetDiscordURL": "אתה יכול לקבל זאת על ידי מעבר להגדרות שרת -> אינטגרציות -> יצירת Webhook", "Bot Display Name": "שם תצוגה של בוט", "Prefix Custom Message": "קידומת הודעה מותאמת אישית", "Hello @everyone is...": "שלום {'@'}כולם…", @@ -286,10 +286,10 @@ "apiCredentials": "אישורי API", "octopushLegacyHint": "האם אתה משתמש בגרסה הישנה של Octopush (2011-2020) או בגרסה החדשה?", "Check octopush prices": "בדוק מחירי תמנון {0}.", - "octopushPhoneNumber": "מספר טלפון (פורמט אינטלי, למשל: +33612345678)", + "octopushPhoneNumber": "מספר טלפון (בפורמט בינלאומי, למשל: +972501234567) ", "octopushSMSSender": "שם שולח SMS: 3-11 תווים אלפאנומריים ורווח (a-zA-Z0-9)", "LunaSea Device ID": "מזהה מכשיר LunaSea", - "Apprise URL": "Apprise URL", + "Apprise URL": "כתובת URL ל-Apprize", "Example:": "דוגמה: {0}", "Read more:": "קרא עוד: {0}", "Status:": "סטטוס: {0}", @@ -302,7 +302,7 @@ "lineDevConsoleTo": "קו מפתחי קונסולת - {0}", "Basic Settings": "הגדרות בסיסיות", "User ID": "תעודת זהות של משתמש", - "Messaging API": "Messaging API", + "Messaging API": "API להודעות", "wayToGetLineChannelToken": "תחילה גש ל-{0}, צור ספק וערוץ (Messaging API), לאחר מכן תוכל לקבל את אסימון הגישה לערוץ ומזהה המשתמש מפריטי התפריט שהוזכרו לעיל.", "Icon URL": "כתובת אתר של סמל", "aboutIconURL": "אתה יכול לספק קישור לתמונה ב\"כתובת URL של סמל\" כדי לעקוף את תמונת הפרופיל המוגדרת כברירת מחדל. לא ישמש אם Icon Emoji מוגדר.", @@ -314,23 +314,23 @@ "promosmsTypeSpeed": "SMS SPEED - העדיפות הגבוהה ביותר במערכת. מאוד מהיר ואמין אבל יקר (בערך פי שניים ממחיר מלא של SMS).", "promosmsPhoneNumber": "מספר טלפון (לנמען פולני ניתן לדלג על אזורי חיוג)", "promosmsSMSSender": "שם שולח SMS: שם רשום מראש או אחת מברירות המחדל: InfoSMS, SMS Info, MaxSMS, INFO, SMS", - "Feishu WebHookUrl": "Feishu WebHookURL", + "Feishu WebHookUrl": "כתובת WebHook עבור Feishu", "matrixHomeserverURL": "כתובת האתר של שרת הבית (עם http(s):// ויציאה אופציונלית)", "Internal Room Id": "מזהה חדר פנימי", "matrixDesc1": "אתה יכול למצוא את מזהה החדר הפנימי על ידי עיון בחלק המתקדם של לקוח Matrix שלך בהגדרות החדר. זה צריך להיראות כמו !QMdRCpUIfLwsfjxye6:home.server.", "matrixDesc2": "מומלץ מאוד ליצור משתמש חדש ולא להשתמש באסימון הגישה של משתמש מטריקס משלך שכן הוא יאפשר גישה מלאה לחשבון שלך ולכל החדרים שהצטרפת אליהם. במקום זאת, צור משתמש חדש והזמן אותו רק לחדר שבו תרצה לקבל את ההתראה. תוכל לקבל את אסימון הגישה על ידי הפעלת {0}", - "Method": "Method", - "Body": "Body", - "Headers": "Headers", + "Method": "שיטה", + "Body": "תוכן (Body)", + "Headers": "האדרים (Headers)", "PushUrl": "Push URL", - "HeadersInvalidFormat": "כותרות הבקשה אינן JSON חוקיות:", - "BodyInvalidFormat": "גוף הבקשה אינו JSON חוקי:", + "HeadersInvalidFormat": "ההאדרים בבקשה אינם בתחביר JSON תקני: ", + "BodyInvalidFormat": "גוף הבקשה (Body) אינו JSON תקני: ", "Monitor History": "מעקב אחר היסטוריה", "clearDataOlderThan": "שמור את נתוני היסטוריית הצג למשך {0} ימים.", "PasswordsDoNotMatch": "סיסמאות לא תואמות.", "records": "רשומות", "One record": "שיא אחד", - "steamApiKeyDescription": "לניטור שרת משחקי Steam אתה צריך מפתח Steam Web-API. אתה יכול לרשום את מפתח ה-API שלך כאן:", + "steamApiKeyDescription": "לניטור שרת משחקי Steam יש צורך במפתח Steam Web-API. ניתן לרשום ולקבל את מפתח ה-API כאן: ", "Current User": "משתמש נוכחי", "topic": "נושא", "topicExplanation": "נושא MQTT למעקב", @@ -365,7 +365,7 @@ "Unpin": "ענן חוף", "Switch to Light Theme": "לעבור לנושא האור", "Switch to Dark Theme": "לעבור לנושא אפל", - "Show Tags": "Show Tags", + "Show Tags": "הצגת תגיות", "Hide Tags": "הסתר תגיות", "Description": "תיאור", "No monitors available.": "אין צגים זמינים.", @@ -378,7 +378,7 @@ "Powered by": "פועל על", "shrinkDatabaseDescription": "ואקום מסד נתונים להפעיל עבור SQLITE.אם בסיס הנתונים שלך נוצר לאחר 1.10.0, Auto_VACUUM כבר מופעל ואין צורך בפעולה זו.", "serwersms": "SerwerSMS.pl", - "serwersmsAPIUser": "API Username (incl. webapi_ prefix)", + "serwersmsAPIUser": "שם משתמש ל-API (כולל webapi_prefix)", "serwersmsAPIPassword": "סיסמת API", "serwersmsPhoneNumber": "מספר טלפון", "serwersmsSenderName": "שם שולח SMS (רשום באמצעות פורטל לקוחות)", @@ -420,12 +420,12 @@ "alertaAlertState": "מצב התראה", "alertaRecoverState": "לשחזר מדינה", "deleteStatusPageMsg": "האם אתה בטוח רוצה למחוק את דף הסטטוס הזה?", - "Proxies": "Proxies", + "Proxies": "מתווכים", "default": "בְּרִירַת מֶחדָל", "enabled": "מופעל", "setAsDefault": "נקבע כברירת מחדל", "deleteProxyMsg": "האם אתה בטוח רוצה למחוק את הפרוקסי הזה לכל המסכים?", - "proxyDescription": "Proxies must be assigned to a monitor to function.", + "proxyDescription": "מתווכים חייבים להיות משויכים למוניטור בשביל שיעבדו.", "enableProxyDescription": "פרוקסי זה לא ישפיע על בקשות צג עד שהוא יופעל.אתה יכול לשלוט באופן זמני להשבית את ה- Proxy מכל המסכים לפי מצב ההפעלה.", "setAsDefaultProxyDescription": "פרוקסי זה יופעל כברירת מחדל עבור צגים חדשים.אתה עדיין יכול להשבית את ה- Proxy בנפרד עבור כל צג.", "Certificate Chain": "שרשרת אישורים", @@ -434,13 +434,13 @@ "AccessKeyId": "מזהה AccessKey", "SecretAccessKey": "גישהלמפתחסוד", "PhoneNumbers": "מספר טלפוןs", - "TemplateCode": "TemplateCode", - "SignName": "שם שם", + "TemplateCode": "מזהה TemplateCode", + "SignName": "מזהה SignName", "Sms template must contain parameters: ": "תבנית SMS חייבת להכיל פרמטרים: ", - "Bark Endpoint": "Bark Endpoint", - "Bark Group": "Bark Group", - "Bark Sound": "Bark Sound", - "WebHookUrl": "WebHookUrl", + "Bark Endpoint": "כתובת יעד של Bark", + "Bark Group": "קבוצת Bark", + "Bark Sound": "צליל Bark", + "WebHookUrl": "כתובת ל-WebHookUrl", "SecretKey": "מפתח סודי", "For safety, must use secret key": "לבטיחות, חייב להשתמש במפתח סודיy", "Device Token": "אסימון מכשיר", @@ -451,7 +451,7 @@ "High": "High", "Retry": "נסה שוב", "Topic": "נוֹשֵׂא", - "WeCom Bot Key": "WeCom Bot Key", + "WeCom Bot Key": "מפתח בוט ל-WeCom", "Setup Proxy": "הגדרת פרוקסי", "Proxy Protocol": "פרוטוקול פרוקסי", "Proxy Server": "שרת פרוקסי", @@ -500,24 +500,24 @@ "Proxy": "פרוקסי", "Date Created": "תאריך יצירה", "HomeAssistant": "Home Assistant", - "onebotHttpAddress": "כתובת HTTP של OneBot ", + "onebotHttpAddress": "כתובת HTTP של OneBot", "onebotMessageType": "סוג ההודעה OneBot", "onebotGroupMessage": "קְבוּצָה", "onebotPrivateMessage": "פְּרָטִי", - "onebotUserOrGroupId": "מזהה קבוצה/משתמש ", - "onebotSafetyTips": "לבטיחות, חייב לקבוע אסימון גישה ", - "PushDeer Key": "PushDeer Key", - "Footer Text": "טקסט כותרת תחתונה ", - "Show Powered By": "הצג מופעל על ידי ", - "Domain Names": "שמות דומיין ", - "signedInDisp": "חתום כ- {0} ", + "onebotUserOrGroupId": "מזהה קבוצה/משתמש", + "onebotSafetyTips": "לבטיחות, חובה לקבוע טוקן גישה", + "PushDeer Key": "מפתח PushDeer", + "Footer Text": "טקסט לתחתית האתר (פוטר)", + "Show Powered By": "הצגת \"מופעל ע\"י\"", + "Domain Names": "שמות דומיין", + "signedInDisp": "חתום כ- {0}", "signedInDispDisabled": "Auth מושבת.", "RadiusSecret": "רדיוס סוד", "RadiusSecretDescription": "סוד משותף בין לקוח לשרת", "RadiusCalledStationId": "נקרא מזהה תחנה", - "RadiusCalledStationIdDescription": "מזהה של המכשיר הנקרא ", - "RadiusCallingStationId": "מזהה תחנת שיחה ", - "RadiusCallingStationIdDescription": "מזהה של מכשיר השיחה ", + "RadiusCalledStationIdDescription": "מזהה המכשיר שנקרא", + "RadiusCallingStationId": "מזהה תחנת הקריאה", + "RadiusCallingStationIdDescription": "מזהה של מכשיר הנקרא", "Certificate Expiry Notification": "הודעת תפוגה של אישור", "API Username": "שם משתמש API", "API Key": "מפתח API", @@ -525,7 +525,7 @@ "From Name/Number": "משם/מספר", "Leave blank to use a shared sender number.": "השאר ריק כדי להשתמש במספר שולח משותף.", "Octopush API Version": "גרסת API של תמנון", - "Legacy Octopush-DM": "Legacy Octopush-DM", + "Legacy Octopush-DM": "שיטת DM (מיושנת)", "endpoint": "נקודת קצה", "octopushAPIKey": "\"מפתח API \" מתוך תעודות API של HTTP בלוח הבקרה", "octopushLogin": "\"כניסה \" מתעודות API של HTTP בלוח הבקרה", @@ -540,7 +540,7 @@ "pushoversounds falling": "נופל", "pushoversounds gamelan": "gamelan", "pushoversounds incoming": "נִכנָס", - "pushoversounds intermission": "Intermission", + "pushoversounds intermission": "הפוגה", "pushoversounds magic": "קֶסֶם", "pushoversounds mechanical": "מֵכָנִי", "pushoversounds pianobar": "בר פסנתר", @@ -575,7 +575,7 @@ "certificationExpiryDescription": "HTTPS עוקב אחר התראה על התראה כאשר תעודת TLS פגה ב:", "Setup Docker Host": "הגדרת מארח Docker", "Connection Type": "סוג חיבור", - "Docker Daemon": "Docker Daemon", + "Docker Daemon": "שירות Docker", "deleteDockerHostMsg": "האם אתה בטוח רוצה למחוק את המארח של Docker לכל המוניטורים?", "socket": "Socket", "tcp": "TCP / HTTP", @@ -583,7 +583,7 @@ "Container Name / ID": "שם מכולה / מזהה", "Docker Host": "מארח דוקר", "Docker Hosts": "מארחי Docker", - "ntfy Topic": "ntfy Topic", + "ntfy Topic": "נושא ntfy", "Domain": "תְחוּם", "Workstation": "עמדת עבודה", "disableCloudflaredNoAuthMsg": "אתה לא נמצא במצב AUTH, אין צורך בסיסמה.", @@ -594,7 +594,7 @@ "Long-Lived Access Token": "אסימון גישה ארוכת שנים", "Long-Lived Access Token can be created by clicking on your profile name (bottom left) and scrolling to the bottom then click Create Token. ": "ניתן ליצור אסימון גישה לאורך זמן על ידי לחיצה על שם הפרופיל שלך (שמאל למטה) וגלילה לתחתית ואז לחץ על צור אסימון. ", "Notification Service": "Notification Service", - "default: notify all devices": "default: notify all devices", + "default: notify all devices": "ברירת מחדל: התראה לכלל המכשירים", "A list of Notification Services can be found in Home Assistant under \"Developer Tools > Services\" search for \"notification\" to find your device/phone name.": "רשימה של שירותי הודעה ניתן למצוא בעוזר הבית תחת \"כלי מפתחים> שירותים \" חפש \"הודעה \" כדי למצוא את שם המכשיר/טלפון שלך.", "Automations can optionally be triggered in Home Assistant:": "אוטומציות יכולות להיות מופעלות באופן אופציונלי לעוזר הבית:", "Trigger type:": "סוג ההדק:", @@ -603,7 +603,7 @@ "Then choose an action, for example switch the scene to where an RGB light is red.": "ואז בחר פעולה, למשל העבר את הסצינה למקום בו אור RGB הוא אדום.", "Frontend Version": "גרסת Frontend", "Frontend Version do not match backend version!": "גרסת Frontend לא תואמת את גרסת Backend!", - "Base URL": "Base URL", + "Base URL": "כתובת בסיס", "goAlertInfo": "SAETRERT הוא יישום קוד פתוח לתזמון שיחה, הסלמות והודעות אוטומטיות (כמו SMS או שיחות קוליות).לעסוק אוטומטית את האדם הנכון, בדרך הנכונה ובזמן הנכון!{0}", "goAlertIntegrationKeyInfo": "קבל מפתח אינטגרציה של API גנרי לשירות בפורמט זה \"AAAAAAAA-BBB-CCCC-DDDD-EEEEEEEEEEE \" בדרך כלל הערך של פרמטר האסימון של URL שהועתק.", "goAlert": "GoAlert", @@ -611,7 +611,7 @@ "backupRecommend": "אנא גבה את עוצמת הקול או את תיקיית הנתונים (./data/) ישירות במקום.", "Optional": "אופציונאלי", "squadcast": "Squadcast", - "SendKey": "SendKey", + "SendKey": "מזהה SendKey", "SMSManager API Docs": "מסמכי API של SmsManager ", "Gateway Type": "סוג שער", "SMSManager": "SMSManager", @@ -630,7 +630,7 @@ "weekdayShortSun": "ראשון", "dayOfWeek": "יום בשבוע", "dayOfMonth": "יום בחודש", - "lastDay": "Last Day", + "lastDay": "יום אחרון", "lastDay1": "היום האחרון של החודש", "lastDay2": "יום שני האחרון של החודש", "lastDay3": "יום 3 האחרון של החודש", @@ -666,8 +666,8 @@ "Economy": "חיסכון", "Lowcost": "זול", "high": "גבוהה", - "General Monitor Type": "מוניטור כללי", - "Passive Monitor Type": "מוניטור פסיבי", + "General Monitor Type": "סוג מוניטור כללי", + "Passive Monitor Type": "סוג מוניטור פסיבי", "Specific Monitor Type": "סוג מוניטור ספציפי", "Custom Monitor Type": "סוג צג מותאם אישית", "Monitor": "מוניטור | מוניטרים", @@ -682,7 +682,7 @@ "Help": "עזרה", "Game": "משחק", "Packet Size": "גודל חבילה", - "markdownSupported": "תחביר סימון נתמך (Markdown )", + "markdownSupported": "תחביר Markdown נתמך", "Custom": "מותאם אישית", "ZohoCliq": "זוהו קליק", "wayToGetZohoCliqURL": "אתה יכול ללמוד כיצד ליצור כתובת אתר ל-webhook {0}.", @@ -692,5 +692,37 @@ "Kook": "קוק", "wayToGetKookBotToken": "צור יישום וקבל את אסימון הבוט שלך ב-{0}", "wayToGetKookGuildID": "הפעל את 'מצב מפתח' בהגדרת קוק, ולחץ לחיצה ימנית על הגילדה כדי לקבל את המזהה שלה", - "Guild ID": "מזהה גילד" + "Guild ID": "מזהה גילד", + "Body Encoding": "קידוד Body", + "API Keys": "מפתחות API", + "Expiry": "תפוגה", + "Don't expire": "תוקף שלא פג", + "Continue": "להמשיך", + "Add Another": "להוסיף עוד", + "Key Added": "המפתח נוסף", + "Add API Key": "הוספת מפתח API", + "No API Keys": "אין מפתחות API", + "apiKey-active": "פעיל", + "apiKey-expired": "פג תוקף", + "apiKey-inactive": "לא פעיל", + "Expires": "תוקף", + "deleteAPIKeyMsg": "האם אתם בטוחים שאתם רוצים למחוק מפתח API זה?", + "Generate": "ייצור", + "telegramMessageThreadID": "מזהה ID לאשכול (אופציונאלי)", + "telegramMessageThreadIDDescription": "מזהה ייחודי אופציונאלי להזנת ההודעה לאשכול (הנושא) המתאים. נועד לסופר-קבוצות בלבד", + "telegramProtectContentDescription": "אם מופעל , הודעות הבוט ב-Telegram יהיו מוגנים מהעברה ושמירה שלהם.", + "Clone Monitor": "שכפול של Monitor", + "Expiry date": "תאריך תפוגה", + "apiKeyAddedMsg": "מפתח ה-API שלך נוסף. בבקשה רשמו אותו עבורכם כיוון שהוא לא יופיע שנית.", + "disableAPIKeyMsg": "האם אתם בטוחים שאתם רוצים להשבית מפתח API זה?", + "Clone": "שכפול", + "cloneOf": "שכפול של {0}", + "Google Analytics ID": "מזהה ID של Google Analytics", + "telegramProtectContent": "הגנת העברה \\ שמירה", + "notificationRegional": "לפי איזור", + "Server Address": "כתובת השרת", + "Edit Tag": "עריכת תגית", + "Learn More": "לקריאה נוספת", + "telegramSendSilently": "שליחה שקטה", + "telegramSendSilentlyDescription": "שליחת הודעות שקטה. משתמשים יקבלו ההתראה ללא צליל." } From 7bbfb640ba95bd3b62cd42a10b141f364ed74ac6 Mon Sep 17 00:00:00 2001 From: fuyuki Date: Fri, 3 Mar 2023 08:50:55 +0000 Subject: [PATCH 156/171] Translated using Weblate (Japanese) Currently translated at 56.6% (399 of 704 strings) Translated using Weblate (Japanese) Currently translated at 42.6% (300 of 704 strings) Translated using Weblate (Japanese) Currently translated at 40.3% (280 of 694 strings) Co-authored-by: fuyuki Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ja/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/ja.json | 131 ++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 129 insertions(+), 2 deletions(-) diff --git a/src/lang/ja.json b/src/lang/ja.json index d0d2f51b6..f29d9d5c5 100644 --- a/src/lang/ja.json +++ b/src/lang/ja.json @@ -61,7 +61,7 @@ "Advanced": "Advanced", "Upside Down Mode": "Upside Down Mode", "Max. Redirects": "最大リダイレクト数", - "Accepted Status Codes": "承認されたステータスコード", + "Accepted Status Codes": "正常なステータスコード", "Save": "保存", "Notifications": "通知", "Not available, please setup.": "利用できません。設定してください。", @@ -273,5 +273,132 @@ "Don't know how to get the token? Please read the guide:": "トークンの取得方法が分かりませんか?ガイドをお読みください。", "Custom": "カスタム", "Created": "作成日時", - "Resend Notification if Down X times consecutively": "X回連続でダウンしたら通知を再送する" + "Resend Notification if Down X times consecutively": "X回連続でダウンしたら通知を再送する", + "webhookJsonDesc": "{0}はExpress.jsのような最新のHTTPサーバに適しています。", + "webhookFormDataDesc": "{multipart}はPHPに適しています。このJSONは{decodeFunction}でデコードする必要があります。", + "appriseInstalled": "Appriseはインストール済みです。", + "emojiCheatSheet": "絵文字一覧: {0}", + "Inactive": "無効", + "defaultNotificationName": "{notification} 通知 ({number})", + "Post URL": "Post URL", + "Active": "有効", + "Pick a RR-Type...": "RR-Typeを選択…", + "Pick Accepted Status Codes...": "正常なステータスコードを選択…", + "appriseNotInstalled": "Apprise はインストールされていません。{0}", + "Method": "方式", + "Body": "ボディ", + "Headers": "ヘッダー", + "PushUrl": "Push URL", + "HeadersInvalidFormat": "リクエストヘッダーのJSONが無効です: ", + "BodyInvalidFormat": "リクエストボディのJSONが無効です: ", + "records": "レコード", + "One record": "レコード", + "topicExplanation": "監視するMQTTトピック", + "successMessage": "成功メッセージ", + "successMessageExplanation": "成功したとみなされるMQTTメッセージ", + "recent": "直近", + "Done": "完了", + "HTTP Options": "HTTPオプション", + "Style": "スタイル", + "info": "情報", + "warning": "警告", + "Valid To:": "有効期限:", + "Days Remaining:": "残りの有効日数:", + "Issuer:": "発行者:", + "Fingerprint:": "フィンガープリント:", + "Domain Name Expiry Notification": "ドメイン名有効期限通知", + "Footer Text": "フッター文章", + "Show Powered By": "Powered Byを表示", + "Domain Names": "ドメイン名", + "signedInDisp": "{0}としてログイン中", + "RadiusSecret": "Radius シークレット", + "RadiusSecretDescription": "クライアントとサーバー間の共有シークレット", + "RadiusCalledStationId": "Called Station Id", + "RadiusCallingStationId": "Calling Station Id", + "Subject:": "サブジェクト:", + "trustProxyDescription": "ヘッダー「X-Forwarded-*」を信頼します。Uptime Kumaがリバースプロキシの中にあり、正しいクライアントIPを取得する場合は、有効化してください。", + "Home Assistant URL": "ホームアシスタントURL", + "Examples": "例", + "telegramMessageThreadID": "(オプション) メッセージスレッドID", + "wayToGetLineNotifyToken": "{0}からアクセストークンを入手できます。", + "Packet Size": "パケットサイズ", + "Bot Token": "ボットトークン", + "Chat ID": "チャットID", + "critical": "致命的エラー", + "signedInDispDisabled": "認証が無効化されています。", + "RadiusCalledStationIdDescription": "着信側の識別子", + "telegramProtectContent": "転送や保存を制限", + "YOUR BOT TOKEN HERE": "入手したボットトークン", + "API Key": "APIキー", + "Show update if available": "アップデートがあれば表示する", + "Using a Reverse Proxy?": "リバースプロキシを使用中ですか?", + "Go back to the previous page.": "前のページに戻る", + "Coming Soon": "近日公開予定", + "Workstation": "ワークステーション", + "wayToGetTelegramToken": "{0}からトークンを入手できます。", + "telegramMessageThreadIDDescription": "オプションとしてフォーラムのスレッド(話題)のIDを指定してメッセージを送信することができます。スーパーグループでのみ利用できます。", + "telegramProtectContentDescription": "有効な場合、Telegram上のボットのメッセージの転送や保存が制限されます。", + "danger": "危険", + "error": "エラー", + "primary": "プライマリー", + "light": "ライト", + "dark": "ダーク", + "Post": "Post", + "No monitors available.": "監視対象がありません。", + "Add one": "追加", + "No Monitors": "監視対象なし", + "shrinkDatabaseDescription": "SQLiteデーターベースにVACUUMを実行します。データーベースがv1.10.0以降に作成されている場合、AUTO_VACUUMが既に有効なため実行する必要はありません。", + "enableProxyDescription": "このプロキシは有効化されない限り、監視リクエストには影響しません。無効化した場合、一時的にプロキシをすべての監視から無効化することができます。", + "Certificate Chain": "証明書チェーン", + "Valid": "有効", + "Invalid": "無効", + "User": "ユーザー", + "Installed": "インストール済み", + "Not installed": "未インストール", + "Running": "稼働中", + "Not running": "停止中", + "Slug": "スラッグ", + "Accept characters:": "使用可能な文字:", + "startOrEndWithOnly": "{0}のみ最初と最後の文字として使用可能", + "No consecutive dashes": "連続したダッシュ記号は使用不可", + "The slug is already taken. Please choose another slug.": "指定されたスラグは既に使用されています。別のスラグを使用してください。", + "wayToGetCloudflaredURL": "({0}からcloudflaredをダウンロード)", + "Message:": "メッセージ:", + "The current connection may be lost if you are currently connecting via Cloudflare Tunnel. Are you sure want to stop it? Type your current password to confirm it.": "Cloudflare Tunnelを経由した接続が遮断される可能性があります。停止してもよろしいですか? 確認のため、現在のパスワードを入力してください。", + "HTTP Headers": "HTTPヘッダー", + "Trust Proxy": "信頼できるプロキシ", + "Other Software": "その他のソフトウェア", + "For example: nginx, Apache and Traefik.": "例: nginxやApache、Traefikなど", + "RadiusCallingStationIdDescription": "発信側の識別子", + "Certificate Expiry Notification": "証明書有効期限通知", + "API Username": "APIユーザー名", + "Also check beta release": "ベータ版も表示する", + "Check how to config it for WebSocket": "WebSocketの設定方法について", + "Steam Game Server": "Steamゲームサーバー", + "Most likely causes:": "最も考えられる原因:", + "There might be a typing error in the address.": "アドレスの入力ミスの可能性があります。", + "What you can try:": "対応方法:", + "Retype the address.": "アドレスを入力し直してください。", + "The resource is no longer available.": "存在しないページです。", + "Connection String": "接続文字列", + "Query": "クエリ", + "settingsCertificateExpiry": "TLS証明書の有効期限", + "certificationExpiryDescription": "HTTPS監視のTLS証明書が以下の期限を迎えたときに通知を送信します。", + "Setup Docker Host": "Docker ホストを設定", + "Connection Type": "接続タイプ", + "Docker Daemon": "Docker デーモン", + "deleteDockerHostMsg": "すべての監視のDocker ホストを削除してもよろしいですか?", + "socket": "ソケット", + "tcp": "TCP / HTTP", + "Docker Container": "Docker コンテナー", + "Container Name / ID": "コンテナ名 / ID", + "Docker Host": "Docker ホスト", + "Docker Hosts": "Docker ホスト", + "Domain": "ドメイン", + "telegramSendSilently": "通知せずに送信", + "telegramSendSilentlyDescription": "通知せずにメッセージを送信します。通知音がなりません。", + "supportTelegramChatID": "チャットやグループ、チャンネルのチャットIDに対応", + "wayToGetTelegramChatID": "ボットにメッセージを送信し、以下のURLを開くとチャットIDのchat_idを入手できます。", + "chatIDNotFound": "チャットIDが存在しません。最初にメッセージをボットに送信してください。", + "disableCloudflaredNoAuthMsg": "認証が無効化されているため、パスワードは必要ありません。" } From 6af1306b89d8fcb9315e1ac4c183ab3dfd4a6df3 Mon Sep 17 00:00:00 2001 From: DevMirza Date: Fri, 3 Mar 2023 08:50:55 +0000 Subject: [PATCH 157/171] Translated using Weblate (Urdu) Currently translated at 57.6% (400 of 694 strings) Translated using Weblate (Turkish) Currently translated at 100.0% (694 of 694 strings) Co-authored-by: DevMirza Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/tr/ Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ur/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/tr-TR.json | 19 ++++++++++++++++++- src/lang/ur.json | 23 ++++++++++++++++++++++- 2 files changed, 40 insertions(+), 2 deletions(-) diff --git a/src/lang/tr-TR.json b/src/lang/tr-TR.json index 26283a84f..9e5cffc69 100644 --- a/src/lang/tr-TR.json +++ b/src/lang/tr-TR.json @@ -707,5 +707,22 @@ "Body Encoding": "JSON veya XML olabilen HTTP İstek Gövdesinin Kodlaması. İstek İçeriği Türü olarak da bilinir: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Type", "Clone Monitor": "Klon Monitör", "Clone": "Klon", - "cloneOf": "{0} Monitörünün Klonu" + "cloneOf": "{0} Monitörünün Klonu", + "Expiry": "son kullanma tarihi", + "Expiry date": "Son kullanma tarihi", + "Don't expire": "sona erme", + "Continue": "Devam etmek", + "Key Added": "Anahtar Eklendi", + "Add API Key": "API Anahtarı Ekle", + "No API Keys": "API Anahtarı Yok", + "apiKey-active": "Aktif", + "apiKey-expired": "Günü geçmiş", + "apiKey-inactive": "etkin değil", + "Expires": "süresi doluyor", + "disableAPIKeyMsg": "Bu API anahtarını devre dışı bırakmak istediğinizden emin misiniz?", + "deleteAPIKeyMsg": "Bu API anahtarını silmek istediğinizden emin misiniz?", + "Generate": "oluştur", + "API Keys": "api anahtarları", + "Add Another": "Başka birtane ekle", + "apiKeyAddedMsg": "API anahtarınız eklendi. Bir daha gösterilmeyeceği için lütfen not edin." } diff --git a/src/lang/ur.json b/src/lang/ur.json index bb0c3667c..40f17a85d 100644 --- a/src/lang/ur.json +++ b/src/lang/ur.json @@ -382,5 +382,26 @@ "Packet Size": "پیکٹ کا سائز", "Bot Token": "بوٹ ٹوکن", "wayToGetTelegramToken": "آپ {0} سے ٹوکن حاصل کر سکتے ہیں۔", - "Chat ID": "چیٹ آئی ڈی" + "Chat ID": "چیٹ آئی ڈی", + "default: notify all devices": "‏ڈیفالٹ: تمام آلات کو مطلع کریں", + "telegramSendSilently": "خاموشی سے بھیجیں", + "telegramSendSilentlyDescription": "خاموشی سے پیغام بھیجتا ہے۔ صارفین کو بغیر آواز کے ایک اطلاع موصول ہوگی۔", + "Long-Lived Access Token": "طویل المدت رسائی ٹوکن", + "Long-Lived Access Token can be created by clicking on your profile name (bottom left) and scrolling to the bottom then click Create Token. ": "آپ کے پروفائل کے نام (نیچے بائیں) پر کلک کرکے اور نیچے تک سکرول کرکے طویل المدت رسائی کا ٹوکن بنایا جاسکتا ہے پھر ٹوکن بنائیں پر کلک کریں۔ ", + "backupOutdatedWarning": "فرسودہ: چونکہ بہت ساری خصوصیات شامل کی گئی ہیں اور یہ بیک اپ خصوصیت تھوڑا سا غیر برقرار ہے، یہ مکمل بیک اپ پیدا یا بحال نہیں کر سکتا۔", + "telegramProtectContent": "فارورڈنگ/محفوظ کرنے کی حفاظت کریں", + "telegramProtectContentDescription": "فعال ہونے پر، ٹیلیگرام میں بوٹ پیغامات کو آگے بھیجنے اور محفوظ کرنے سے محفوظ رکھا جائے گا۔", + "Home Assistant URL": "ہوم اسسٹنٹ یو آر ایل", + "A list of Notification Services can be found in Home Assistant under \"Developer Tools > Services\" search for \"notification\" to find your device/phone name.": "آپ کے آلے/فون کا نام تلاش کرنے کے لیے \"اطلاعات\" تلاش کرنے کے لیے \"ڈیولپر ٹولز > سروسز\" کے تحت ہوم اسسٹنٹ میں اطلاعاتی خدمات کی فہرست مل سکتی ہے۔", + "Automations can optionally be triggered in Home Assistant:": "ہوم اسسٹنٹ میں آٹومیشن کو اختیاری طور پر متحرک کیا جا سکتا ہے:", + "Trigger type:": "محرک کی قسم:", + "Event type:": "تقریب کی قسم:", + "Event data:": "ایونٹ کا ڈیٹا:", + "Then choose an action, for example switch the scene to where an RGB light is red.": "پھر ایک عمل کا انتخاب کریں، مثال کے طور پر منظر کو اس طرف تبدیل کریں جہاں RGB لائٹ سرخ ہو۔", + "Frontend Version": "فرنٹ اینڈ ورژن", + "Frontend Version do not match backend version!": "فرنٹ اینڈ ورژن پسدید ورژن سے مماثل نہیں ہے!", + "backupRecommend": "براہ کرم اس کے بجائے براہ راست والیوم یا ڈیٹا فولڈر (./data/) کا بیک اپ لیں۔", + "Optional": "اختیاری", + "or": "یا", + "Notification Service": "نوٹیفکیشن سروس" } From 06ec7f2b61660213bc0129ec49485cfe2e1e0d4e Mon Sep 17 00:00:00 2001 From: tim-wiegers Date: Fri, 3 Mar 2023 08:50:55 +0000 Subject: [PATCH 158/171] Translated using Weblate (German) Currently translated at 100.0% (704 of 704 strings) Co-authored-by: tim-wiegers Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/de/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/de-DE.json | 72 ++++++++++++++++++++++++++++++++++----------- 1 file changed, 55 insertions(+), 17 deletions(-) diff --git a/src/lang/de-DE.json b/src/lang/de-DE.json index 8d20e094b..68bf1de31 100644 --- a/src/lang/de-DE.json +++ b/src/lang/de-DE.json @@ -2,7 +2,7 @@ "languageName": "Deutsch (Deutschland)", "Settings": "Einstellungen", "Dashboard": "Dashboard", - "New Update": "Update verfügbar", + "New Update": "Aktualisierung verfügbar", "Language": "Sprache", "Appearance": "Erscheinungsbild", "Theme": "Erscheinungsbild", @@ -278,7 +278,7 @@ "Access Token": "Zugriffstoken", "Channel access token": "Channel access token", "Line Developers Console": "Zeile Entwickler Konsole", - "lineDevConsoleTo": "Line Developers Console - {0}", + "lineDevConsoleTo": "Line Entwicklerkonsole - {0}", "Basic Settings": "Grundeinstellungen", "User ID": "User ID", "Messaging API": "Messaging API", @@ -348,7 +348,7 @@ "Services": "Dienste", "Discard": "Verwerfen", "Cancel": "Abbrechen", - "Powered by": "Powered by", + "Powered by": "Erstellt mit", "shrinkDatabaseDescription": "Löse VACUUM für die SQLite Datenbank aus. Wenn die Datenbank nach 1.10.0 erstellt wurde, ist AUTO_VACUUM bereits aktiviert und diese Aktion ist nicht erforderlich.", "serwersms": "SerwerSMS.pl", "serwersmsAPIUser": "API Benutzername (inkl. webapi_ prefix)", @@ -533,7 +533,7 @@ "Also check beta release": "Auch nach Beta Versionen schauen", "Using a Reverse Proxy?": "Wird ein Reverse Proxy genutzt?", "Check how to config it for WebSocket": "Prüfen, wie er für die Nutzung mit WebSocket konfiguriert wird", - "Steam Game Server": "Steam Game Server", + "Steam Game Server": "Steam Spielserver", "Most likely causes:": "Wahrscheinliche Ursachen:", "The resource is no longer available.": "Die Quelle ist nicht mehr verfügbar.", "There might be a typing error in the address.": "Es gibt einen Tippfehler in der Adresse.", @@ -599,7 +599,7 @@ "squadcast": "Squadcast", "SendKey": "SendKey", "SMSManager API Docs": "SMSManager API Dokumente", - "Gateway Type": "Gateway Type", + "Gateway Type": "Gateway Typ", "SMSManager": "SMSManager", "You can divide numbers with": "Du kannst Zahlen teilen mit", "or": "oder", @@ -659,7 +659,7 @@ "dataRetentionTimeError": "Aufbewahrungszeit muss 0 oder größer sein", "infiniteRetention": "Für unendliche Aufbewahrung auf 0 setzen.", "confirmDeleteTagMsg": "Möchten Sie dieses Tag wirklich löschen? Mit diesem Tag verknüpfte Monitore werden nicht gelöscht.", - "enableGRPCTls": "Erlaube das Senden von gRPC-Anfragen mit TLS-Verbindung", + "enableGRPCTls": "Senden von gRPC-Anforderungen mit TLS-Verbindung zulassen", "ZohoCliq": "ZohoCliq", "Monitor": "Überwachung | Monitore", "plugin": "Plugin | Plugins", @@ -668,18 +668,18 @@ "uninstall": "Deinstallieren", "uninstalling": "Deinstallation", "markdownSupported": "Markdown-Syntax unterstützt", - "wayToGetKookBotToken": "Anwendung erstellen und den Bot-Token {0} abrufen", - "wayToGetKookGuildID": "Schalten Sie den \"Entwicklermodus\" in den Kook-Einstellungen ein und klicken Sie mit der rechten Maustaste auf die Gilde, um ihre ID zu erhalten.", - "Guild ID": "Gilden-ID", + "wayToGetKookBotToken": "Erstellen Sie eine Anwendung und erhalten Sie Ihren Bot-Token unter {0}", + "wayToGetKookGuildID": "Schalten Sie den „Entwicklermodus“ in den Kook-Einstellungen ein und klicken Sie mit der rechten Maustaste auf die Gilde, um ihre ID zu erhalten", + "Guild ID": "Guild-ID", "Free Mobile User Identifier": "Kostenlose mobile Benutzerkennung", "Free Mobile API Key": "Kostenloser Mobile API-Schlüssel", "Enable TLS": "Aktiviere TLS", - "Proto Service Name": "Proto Service Name", - "Proto Method": "Proto Methode", - "Proto Content": "Proto Inhalt", - "Economy": "Economy", - "Lowcost": "Lowcost-Modus", - "high": "High-Modus", + "Proto Service Name": "Name des Proto-Dienstes", + "Proto Method": "Proto-Methode", + "Proto Content": "Proto-Inhalt", + "Economy": "Wirtschaft", + "Lowcost": "Kostengünstig", + "high": "hoch", "promosmsAllowLongSMS": "Erlaube lange SMS", "General Monitor Type": "Allgemeiner Monitortyp", "smseagle": "SMSEagle", @@ -689,12 +689,50 @@ "smseagleRecipientType": "Empfängertyp", "smseagleRecipient": "Empfänger (mehrere müssen mit Komma getrennt werden)", "smseagleToken": "API-Zugriffstoken", - "smseagleUrl": "Deine SMSEagle-Geräte-URL", + "smseagleUrl": "Ihre SMSEagle-Geräte-URL", "Kook": "Kook", "smseagleEncoding": "Als Unicode senden", "smseaglePriority": "Nachrichtenpriorität (0-9, Standard = 0)", "Google Analytics ID": "Google Analytics ID", "Edit Tag": "bearbeite Tag", "Server Address": "Server Adresse", - "Learn More": "Erfahre mehr" + "Learn More": "Erfahre mehr", + "Body Encoding": "Körperkodierung", + "Add API Key": "API Schlüssel hinzufügen", + "apiKey-active": "Aktiv", + "apiKey-expired": "Abgelaufen", + "apiKey-inactive": "Inaktiv", + "Expires": "Läuft ab", + "deleteAPIKeyMsg": "Bist du sicher, dass du diesen API Schlüssel löschen willst?", + "Generate": "Generieren", + "API Keys": "API Schlüssel", + "Expiry": "Ablauf", + "Expiry date": "Ablaufdatum", + "Don't expire": "Nicht ablaufen", + "Continue": "Weiter", + "Add Another": "Hinzufügen", + "Clone Monitor": "Duplikat von", + "Clone": "Duplizieren", + "cloneOf": "Duplikat von {0}", + "pagertreeIntegrationUrl": "Integrations URL", + "pagertreeUrgency": "Dringlichkeit", + "pagertreeSilent": "Leise", + "pagertreeLow": "Niedrig", + "pagertreeMedium": "Medium", + "pagertreeHigh": "Hoch", + "pagertreeCritical": "Kritisch", + "pagertreeResolve": "Automatisch Auflösen", + "No API Keys": "Keine API Schlüssel", + "disableAPIKeyMsg": "Bist du sicher, dass du diesen API Schlüssel deaktivieren willst?", + "pagertreeDoNothing": "Nichts tun", + "wayToGetPagerTreeIntegrationURL": "Nachdem du die Uptime Kuma Integration in PagerTree erstellt hast, kopiere den Endpunkt. Siehe details {0}", + "telegramProtectContent": "Schütze gegen Weiterleiten/Speichern der Nachricht", + "telegramProtectContentDescription": "Die Bot-Nachrichten in Telegram sind gegen Weiterleitung und Speichern geschützt.", + "notificationRegional": "Regional", + "Key Added": "Schlüssel hinzugefügt", + "apiKeyAddedMsg": "Ihr API Schlüssel wurde hinzugefügt. Bitte notieren Sie Ihn, da er nicht erneut angezeigt wird.", + "telegramMessageThreadID": "(Optional) Nachrichten Thread ID", + "telegramMessageThreadIDDescription": "Optionale eindeutige Kennung für den Ziel-Thread (Thema) des Forums; nur für Forum-Supergroups", + "telegramSendSilently": "Stumm Senden", + "telegramSendSilentlyDescription": "Sende die Nachricht stumm. Nutzer bekommen eine Benachrichtigung ohne Ton." } From 917f406f302bab84ed0d61bf2a17ecdad2143084 Mon Sep 17 00:00:00 2001 From: Justricity Date: Fri, 3 Mar 2023 08:50:55 +0000 Subject: [PATCH 159/171] Translated using Weblate (German) Currently translated at 100.0% (704 of 704 strings) Co-authored-by: Justricity Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/de/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/de-DE.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lang/de-DE.json b/src/lang/de-DE.json index 68bf1de31..07fd82e42 100644 --- a/src/lang/de-DE.json +++ b/src/lang/de-DE.json @@ -388,7 +388,7 @@ "Valid": "Gültig", "Invalid": "Ungültig", "AccessKeyId": "AccessKey ID", - "SecretAccessKey": "AccessKey Secret", + "SecretAccessKey": "Geheimer Zugangsschlüssel", "PhoneNumbers": "Telefonnummern", "TemplateCode": "Vorlagencode", "SignName": "Signaturname", From 9fb190cc3c00ce5ef6071173980d100132fab767 Mon Sep 17 00:00:00 2001 From: ilya12077 Date: Fri, 3 Mar 2023 08:50:56 +0000 Subject: [PATCH 160/171] Translated using Weblate (Russian) Currently translated at 93.1% (656 of 704 strings) Translated using Weblate (Russian) Currently translated at 92.1% (649 of 704 strings) Co-authored-by: ilya12077 Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ru/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/ru-RU.json | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/lang/ru-RU.json b/src/lang/ru-RU.json index ec8f8008d..4281fb425 100644 --- a/src/lang/ru-RU.json +++ b/src/lang/ru-RU.json @@ -233,7 +233,7 @@ "smtpCC": "Копия", "smtpBCC": "Скрытая копия", "Discord Webhook URL": "Discord вебхук URL", - "wayToGetDiscordURL": "Вы можете создать его в настройках канала \"Настройки -> Интеграции -> Создать Вебхук\"", + "wayToGetDiscordURL": "Вы можете создать его в настройках канала \"Настройки -> Интеграции -> Создать Вебхук\"", "Bot Display Name": "Отображаемое имя бота", "Prefix Custom Message": "Свой префикс сообщения", "Hello @everyone is...": "Привет {'@'}everyone это…", @@ -669,7 +669,7 @@ "smseagle": "SMSEagle", "Google Analytics ID": "ID Google Аналитики", "wayToGetZohoCliqURL": "Вы можете узнать как создать webhook URL тут {0}.", - "Effective Date Range": "Эффективный период", + "Effective Date Range": "Даты действия", "wayToGetKookGuildID": "Включите \"Developer mode\" в настройках Kook, а затем нажмите правой кнопкой по гильдии чтобы скопировать её ID.", "Enable TLS": "Включить TLS", "Integration Key": "Ключ интеграции", @@ -694,5 +694,10 @@ "telegramProtectContent": "Запретить пересылку/сохранение", "telegramProtectContentDescription": "Если включено, сообщения бота в Telegram будут запрещены для пересылки и сохранения.", "telegramSendSilently": "Отправить без звука", - "telegramSendSilentlyDescription": "Пользователи получат уведомление без звука." + "telegramSendSilentlyDescription": "Пользователи получат уведомление без звука.", + "Maintenance Time Window of a Day": "Суточный интервал для обслуживания", + "Clone Monitor": "Копия", + "Clone": "Копия", + "cloneOf": "Копия {0}", + "notificationRegional": "Региональный" } From b433a8fe5a64d5e6f898d234e22088f109c581aa Mon Sep 17 00:00:00 2001 From: 401Unauthorized Date: Fri, 3 Mar 2023 08:50:56 +0000 Subject: [PATCH 161/171] Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (704 of 704 strings) Co-authored-by: 401Unauthorized Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/zh_Hans/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/zh-CN.json | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/lang/zh-CN.json b/src/lang/zh-CN.json index 3a46e96df..e26b64c71 100644 --- a/src/lang/zh-CN.json +++ b/src/lang/zh-CN.json @@ -726,5 +726,15 @@ "API Keys": "API 密钥", "Don't expire": "从不过期", "Key Added": "API 密钥已生成", - "apiKeyAddedMsg": "你的 API 密钥已生成。此页只会显示一次,请妥当保存。" + "apiKeyAddedMsg": "你的 API 密钥已生成。此页只会显示一次,请妥当保存。", + "pagertreeUrgency": "紧急程度", + "pagertreeLow": "低", + "pagertreeCritical": "严重", + "pagertreeIntegrationUrl": "集成URL", + "pagertreeSilent": "静默", + "pagertreeMedium": "中", + "pagertreeHigh": "高", + "pagertreeResolve": "自动解除", + "pagertreeDoNothing": "什么都不做", + "wayToGetPagerTreeIntegrationURL": "在 PagerTree 中创建 Uptime Kuma 集成后,复制 Endpoint。在 {0} 查看详情" } From ce767d23507ff3fe15f0c50d4620aacb4f745ca9 Mon Sep 17 00:00:00 2001 From: Oleg Logvinov Date: Fri, 3 Mar 2023 08:50:56 +0000 Subject: [PATCH 162/171] Translated using Weblate (Russian) Currently translated at 93.1% (656 of 704 strings) Co-authored-by: Oleg Logvinov Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ru/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/ru-RU.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lang/ru-RU.json b/src/lang/ru-RU.json index 4281fb425..5c403f690 100644 --- a/src/lang/ru-RU.json +++ b/src/lang/ru-RU.json @@ -670,7 +670,7 @@ "Google Analytics ID": "ID Google Аналитики", "wayToGetZohoCliqURL": "Вы можете узнать как создать webhook URL тут {0}.", "Effective Date Range": "Даты действия", - "wayToGetKookGuildID": "Включите \"Developer mode\" в настройках Kook, а затем нажмите правой кнопкой по гильдии чтобы скопировать её ID.", + "wayToGetKookGuildID": "Включите \"Режим разработчика\" в настройках Kook, а затем нажмите правой кнопкой по гильдии чтобы скопировать её ID.", "Enable TLS": "Включить TLS", "Integration Key": "Ключ интеграции", "Integration URL": "URL интеграции", From 7c1cca38dcbce11363c37cf4e088e23eec0fb6ab Mon Sep 17 00:00:00 2001 From: AnnAngela Date: Fri, 3 Mar 2023 08:50:56 +0000 Subject: [PATCH 163/171] Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (704 of 704 strings) Co-authored-by: AnnAngela Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/zh_Hans/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/zh-CN.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lang/zh-CN.json b/src/lang/zh-CN.json index e26b64c71..5ec4e9728 100644 --- a/src/lang/zh-CN.json +++ b/src/lang/zh-CN.json @@ -730,11 +730,11 @@ "pagertreeUrgency": "紧急程度", "pagertreeLow": "低", "pagertreeCritical": "严重", - "pagertreeIntegrationUrl": "集成URL", + "pagertreeIntegrationUrl": "集成 URL 地址", "pagertreeSilent": "静默", "pagertreeMedium": "中", "pagertreeHigh": "高", "pagertreeResolve": "自动解除", "pagertreeDoNothing": "什么都不做", - "wayToGetPagerTreeIntegrationURL": "在 PagerTree 中创建 Uptime Kuma 集成后,复制 Endpoint。在 {0} 查看详情" + "wayToGetPagerTreeIntegrationURL": "在 PagerTree 中创建 Uptime Kuma 集成后,复制端点 URL 到此处。在 {0} 查看详情" } From 901795729b579dbe1bad5e15ade3515621445a91 Mon Sep 17 00:00:00 2001 From: ilya12077 Date: Fri, 3 Mar 2023 08:50:56 +0000 Subject: [PATCH 164/171] Translated using Weblate (Russian) Currently translated at 93.3% (657 of 704 strings) Co-authored-by: ilya12077 Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ru/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/ru-RU.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lang/ru-RU.json b/src/lang/ru-RU.json index 5c403f690..0cefb55b3 100644 --- a/src/lang/ru-RU.json +++ b/src/lang/ru-RU.json @@ -670,7 +670,7 @@ "Google Analytics ID": "ID Google Аналитики", "wayToGetZohoCliqURL": "Вы можете узнать как создать webhook URL тут {0}.", "Effective Date Range": "Даты действия", - "wayToGetKookGuildID": "Включите \"Режим разработчика\" в настройках Kook, а затем нажмите правой кнопкой по гильдии чтобы скопировать её ID.", + "wayToGetKookGuildID": "Включите \"Режим разработчика\" в настройках Kook, а затем нажмите правой кнопкой по гильдии чтобы скопировать её ID", "Enable TLS": "Включить TLS", "Integration Key": "Ключ интеграции", "Integration URL": "URL интеграции", @@ -687,7 +687,7 @@ "Server Address": "Адрес сервера", "Learn More": "Узнать больше", "topicExplanation": "MQTT топик для мониторинга", - "Guild ID": "ID гильдии", + "Guild ID": "Guild ID", "Kook": "Kook", "wayToGetKookBotToken": "Создайте приложение и получите токен вашего бота тут {0}.", "Resend Notification if Down X times consecutively": "Повторная отправка уведомления при падении несколько раз", From db5641c4bfae42b256b98420019eaaa8a187025e Mon Sep 17 00:00:00 2001 From: Cyril59310 Date: Fri, 3 Mar 2023 08:50:56 +0000 Subject: [PATCH 165/171] Translated using Weblate (French) Currently translated at 100.0% (704 of 704 strings) Co-authored-by: Cyril59310 Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/fr/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/fr-FR.json | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/lang/fr-FR.json b/src/lang/fr-FR.json index 0552c298d..1317da34c 100644 --- a/src/lang/fr-FR.json +++ b/src/lang/fr-FR.json @@ -724,5 +724,15 @@ "Generate": "Générer", "API Keys": "Clés API", "apiKeyAddedMsg": "Votre clé API a été ajoutée. Veuillez la noter car elle ne pourra plus être affichée.", - "Don't expire": "N'expire pas" + "Don't expire": "N'expire pas", + "pagertreeUrgency": "Urgence", + "pagertreeSilent": "Silencieux", + "pagertreeLow": "Faible", + "pagertreeMedium": "Moyen", + "pagertreeHigh": "Haut", + "pagertreeResolve": "Résolution automatique", + "pagertreeDoNothing": "Ne fais rien", + "pagertreeIntegrationUrl": "URL d'intégration", + "pagertreeCritical": "Critique", + "wayToGetPagerTreeIntegrationURL": "Après avoir créé l'intégration Uptime Kuma dans PagerTree, copiez le fichier Endpoint. Voir tous les détails {0}" } From 010c7d681f7f052fe0f83edf36b941ca2da0d92a Mon Sep 17 00:00:00 2001 From: Louis Lam Date: Sat, 4 Mar 2023 19:12:11 +0800 Subject: [PATCH 166/171] Fix ipv6 issue for ping --- server/util-server.js | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/server/util-server.js b/server/util-server.js index 129e15265..3d4314d64 100644 --- a/server/util-server.js +++ b/server/util-server.js @@ -87,11 +87,8 @@ exports.ping = async (hostname, size = 56) => { return await exports.pingAsync(hostname, false, size); } catch (e) { // If the host cannot be resolved, try again with ipv6 - if (e.message.includes("service not known")) { - return await exports.pingAsync(hostname, true, size); - } else { - throw e; - } + // As node-ping does not report a specific error for this, try again with ipv6 no matter what. + return await exports.pingAsync(hostname, true, size); } }; From 92c9b8bb63b563c7a7700929b6f9c42de1f9cbab Mon Sep 17 00:00:00 2001 From: Louis Lam Date: Sat, 4 Mar 2023 20:29:52 +0800 Subject: [PATCH 167/171] Fix ipv6 issue for ping --- server/util-server.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/server/util-server.js b/server/util-server.js index 3d4314d64..9f7805cf9 100644 --- a/server/util-server.js +++ b/server/util-server.js @@ -88,7 +88,14 @@ exports.ping = async (hostname, size = 56) => { } catch (e) { // If the host cannot be resolved, try again with ipv6 // As node-ping does not report a specific error for this, try again with ipv6 no matter what. - return await exports.pingAsync(hostname, true, size); + console.debug("ping", "IPv6 error message: " + e.message); + + if (!e.message) { + // TODO: Problem, the error message is always from the ipv6 ping! Misleading! + return await exports.pingAsync(hostname, true, size); + } else { + throw e; + } } }; From 7ec09d01185bbf35ff9fa2543167376aa0f2d44b Mon Sep 17 00:00:00 2001 From: Louis Lam Date: Sat, 4 Mar 2023 20:41:08 +0800 Subject: [PATCH 168/171] Fix ipv6 issue for ping --- server/util-server.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/server/util-server.js b/server/util-server.js index 9f7805cf9..2cf81f6aa 100644 --- a/server/util-server.js +++ b/server/util-server.js @@ -87,11 +87,10 @@ exports.ping = async (hostname, size = 56) => { return await exports.pingAsync(hostname, false, size); } catch (e) { // If the host cannot be resolved, try again with ipv6 - // As node-ping does not report a specific error for this, try again with ipv6 no matter what. console.debug("ping", "IPv6 error message: " + e.message); + // As node-ping does not report a specific error for this, try again if it is an empty message with ipv6 no matter what. if (!e.message) { - // TODO: Problem, the error message is always from the ipv6 ping! Misleading! return await exports.pingAsync(hostname, true, size); } else { throw e; From f17d23f5d8855bbe5fb0b242d9240427ca7b1238 Mon Sep 17 00:00:00 2001 From: Louis Lam Date: Sat, 4 Mar 2023 21:03:46 +0800 Subject: [PATCH 169/171] A script for sorting contributors from weblate --- extra/sort-contributors.js | 22 ++++++++++++++++++++++ package.json | 3 ++- 2 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 extra/sort-contributors.js diff --git a/extra/sort-contributors.js b/extra/sort-contributors.js new file mode 100644 index 000000000..418bc233d --- /dev/null +++ b/extra/sort-contributors.js @@ -0,0 +1,22 @@ +const fs = require("fs"); + +// Read the file from private/sort-contributors.txt +const file = fs.readFileSync("private/sort-contributors.txt", "utf8"); + +// Convert to an array of lines +let lines = file.split("\n"); + +// Remove empty lines +lines = lines.filter((line) => line !== ""); + +// Remove duplicates +lines = [ ...new Set(lines) ]; + +// Remove @weblate and @UptimeKumaBot +lines = lines.filter((line) => line !== "@weblate" && line !== "@UptimeKumaBot"); + +// Sort the lines +lines = lines.sort(); + +// Output the lines, concat with " " +console.log(lines.join(" ")); diff --git a/package.json b/package.json index 8f808687f..f413309a9 100644 --- a/package.json +++ b/package.json @@ -64,7 +64,8 @@ "cy:run:unit": "npx cypress run --browser chrome --headless --config-file ./config/cypress.frontend.config.js", "cypress-open": "concurrently -k -r \"node test/prepare-test-server.js && node server/server.js --port=3002 --data-dir=./data/test/\" \"cypress open --config-file ./config/cypress.config.js\"", "build-healthcheck-armv7": "cross-env GOOS=linux GOARCH=arm GOARM=7 go build -x -o ./extra/healthcheck-armv7 ./extra/healthcheck.go", - "depoly-demo-server": "node extra/deploy-demo-server.js" + "depoly-demo-server": "node extra/deploy-demo-server.js", + "sort-contributors": "node extra/sort-contributors.js" }, "dependencies": { "@grpc/grpc-js": "~1.7.3", From 3e6091299206e71afc9c217be652a75fa022a305 Mon Sep 17 00:00:00 2001 From: Louis Lam Date: Sat, 4 Mar 2023 21:08:21 +0800 Subject: [PATCH 170/171] Update node-ping --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9d636ba91..52f270557 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,7 @@ "license": "MIT", "dependencies": { "@grpc/grpc-js": "~1.7.3", - "@louislam/ping": "~0.4.2-mod.1", + "@louislam/ping": "~0.4.2-mod.2", "@louislam/sqlite3": "15.1.2", "args-parser": "~1.3.0", "axios": "~0.27.0", @@ -4213,9 +4213,9 @@ "integrity": "sha512-retLUN4TwCJ0QJDi9OCJwYVaXAz93NeOkEtEQL98M2bykBOxmURlP0YlfsuE46kItOOVZIWRYC3KsSLhQ1R2Qw==" }, "node_modules/@louislam/ping": { - "version": "0.4.2-mod.1", - "resolved": "https://registry.npmjs.org/@louislam/ping/-/ping-0.4.2-mod.1.tgz", - "integrity": "sha512-KkRDo8qcF9kzzR0Hh8Iqz+XNnzKOdobUquP7UyBYrjxAB1jNT3qO0gvAZeDUknF28LXBPSzkiVlf1NG+tb/iyQ==", + "version": "0.4.2-mod.2", + "resolved": "https://registry.npmjs.org/@louislam/ping/-/ping-0.4.2-mod.2.tgz", + "integrity": "sha512-4krrRGohYdhQOD+Mt0Q8e1Z05DEKntZ7TgiY1jYaqWrMz0H2XJyRh+mLPOUVPL5zSymiHsZiK2ZACXtp/d9Wxg==", "dependencies": { "command-exists": "~1.2.9", "q": "1.x", @@ -22231,9 +22231,9 @@ "integrity": "sha512-retLUN4TwCJ0QJDi9OCJwYVaXAz93NeOkEtEQL98M2bykBOxmURlP0YlfsuE46kItOOVZIWRYC3KsSLhQ1R2Qw==" }, "@louislam/ping": { - "version": "0.4.2-mod.1", - "resolved": "https://registry.npmjs.org/@louislam/ping/-/ping-0.4.2-mod.1.tgz", - "integrity": "sha512-KkRDo8qcF9kzzR0Hh8Iqz+XNnzKOdobUquP7UyBYrjxAB1jNT3qO0gvAZeDUknF28LXBPSzkiVlf1NG+tb/iyQ==", + "version": "0.4.2-mod.2", + "resolved": "https://registry.npmjs.org/@louislam/ping/-/ping-0.4.2-mod.2.tgz", + "integrity": "sha512-4krrRGohYdhQOD+Mt0Q8e1Z05DEKntZ7TgiY1jYaqWrMz0H2XJyRh+mLPOUVPL5zSymiHsZiK2ZACXtp/d9Wxg==", "requires": { "command-exists": "~1.2.9", "q": "1.x", diff --git a/package.json b/package.json index f413309a9..2b96e1036 100644 --- a/package.json +++ b/package.json @@ -69,7 +69,7 @@ }, "dependencies": { "@grpc/grpc-js": "~1.7.3", - "@louislam/ping": "~0.4.2-mod.1", + "@louislam/ping": "~0.4.2-mod.2", "@louislam/sqlite3": "15.1.2", "args-parser": "~1.3.0", "axios": "~0.27.0", From 0dce492226b58da0c3e20b6a4a3a04a4660b358c Mon Sep 17 00:00:00 2001 From: Louis Lam Date: Sat, 4 Mar 2023 21:08:39 +0800 Subject: [PATCH 171/171] Update to 1.21.0-beta.0 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 52f270557..d568f5d3d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "uptime-kuma", - "version": "1.20.2", + "version": "1.21.0-beta.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "uptime-kuma", - "version": "1.20.2", + "version": "1.21.0-beta.0", "license": "MIT", "dependencies": { "@grpc/grpc-js": "~1.7.3", diff --git a/package.json b/package.json index 2b96e1036..5b2bda4a4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "uptime-kuma", - "version": "1.20.2", + "version": "1.21.0-beta.0", "license": "MIT", "repository": { "type": "git",