Bert Verhelst
3 years ago
62 changed files with 8818 additions and 2667 deletions
@ -1,21 +0,0 @@ |
|||||
--- |
|
||||
name: Ask for help |
|
||||
about: You can ask any question related to Uptime Kuma. |
|
||||
title: '' |
|
||||
labels: help |
|
||||
assignees: '' |
|
||||
|
|
||||
--- |
|
||||
**Is it a duplicate question?** |
|
||||
Please search in Issues without filters: https://github.com/louislam/uptime-kuma/issues?q= |
|
||||
|
|
||||
**Describe your problem** |
|
||||
Please describe what you are asking for |
|
||||
|
|
||||
**Info** |
|
||||
Uptime Kuma Version: |
|
||||
Using Docker?: Yes/No |
|
||||
Docker Version: |
|
||||
Node.js Version (Without Docker only): |
|
||||
OS: |
|
||||
Browser: |
|
@ -0,0 +1,76 @@ |
|||||
|
name: "❓ Ask for help" |
||||
|
description: "Submit any question related to Uptime Kuma" |
||||
|
title: "[Help]: <title>" |
||||
|
labels: [help] |
||||
|
body: |
||||
|
- type: textarea |
||||
|
id: steps-to-reproduce |
||||
|
validations: |
||||
|
required: true |
||||
|
attributes: |
||||
|
label: "📝 Describe your problem" |
||||
|
description: "Please walk us through it step by step." |
||||
|
placeholder: "Describe what are you asking for..." |
||||
|
- type: input |
||||
|
id: uptime-kuma-version |
||||
|
attributes: |
||||
|
label: "🐻 Uptime-Kuma version" |
||||
|
description: "Which version of Uptime-Kuma are you running?" |
||||
|
placeholder: "Ex. 1.9.x" |
||||
|
validations: |
||||
|
required: true |
||||
|
- type: input |
||||
|
id: operating-system |
||||
|
attributes: |
||||
|
label: "💻 Operating System" |
||||
|
description: "Which OS is your server/device running on?" |
||||
|
placeholder: "Ex. Ubuntu 20.04" |
||||
|
validations: |
||||
|
required: true |
||||
|
- type: input |
||||
|
id: browser-vendor |
||||
|
attributes: |
||||
|
label: "🌐 Browser" |
||||
|
description: "Which browser are you running on?" |
||||
|
placeholder: "Ex. Firefox" |
||||
|
validations: |
||||
|
required: true |
||||
|
- type: input |
||||
|
id: docker-version |
||||
|
attributes: |
||||
|
label: "🐋 Docker" |
||||
|
description: "If running with Docker, which version are you running?" |
||||
|
placeholder: "Ex. 20.10.9" |
||||
|
validations: |
||||
|
required: false |
||||
|
- type: input |
||||
|
id: docker-image-tag |
||||
|
attributes: |
||||
|
label: "🏷️ Docker Image Tag" |
||||
|
description: "Which Docker image tag are you using? If running '1' or 'latest', please specify image hash." |
||||
|
placeholder: "Ex. 1.9.1" |
||||
|
validations: |
||||
|
required: false |
||||
|
- type: input |
||||
|
id: nodejs-version |
||||
|
attributes: |
||||
|
label: "🟩 NodeJS Version" |
||||
|
description: "If running with Node.js? which version are you running?" |
||||
|
placeholder: "14.x" |
||||
|
validations: |
||||
|
required: false |
||||
|
- type: checkboxes |
||||
|
id: no-duplicate-issues |
||||
|
attributes: |
||||
|
label: "⚠️ Please verify that this question has NOT been raised before." |
||||
|
description: "Search in the issues sections by clicking [HERE](https://github.com/louislam/uptime-kuma/issues?q=)" |
||||
|
options: |
||||
|
- label: "I checked and didn't find similar question" |
||||
|
required: true |
||||
|
- type: checkboxes |
||||
|
attributes: |
||||
|
label: "🛡️ Security Policy" |
||||
|
description: Please review the security policy before reporting security related issues/bugs. |
||||
|
options: |
||||
|
- label: I agree to have read this project [Security Policy](https://github.com/louislam/uptime-kuma/security/policy) |
||||
|
required: true |
@ -1,42 +0,0 @@ |
|||||
--- |
|
||||
name: Bug report |
|
||||
about: Create a report to help us improve |
|
||||
title: '' |
|
||||
labels: bug |
|
||||
assignees: '' |
|
||||
|
|
||||
--- |
|
||||
|
|
||||
**Is it a duplicate question?** |
|
||||
Please search in Issues without filters: https://github.com/louislam/uptime-kuma/issues?q= |
|
||||
|
|
||||
**Describe the bug** |
|
||||
A clear and concise description of what the bug is. |
|
||||
|
|
||||
**To Reproduce** |
|
||||
Steps to reproduce the behavior: |
|
||||
|
|
||||
1. Go to '...' |
|
||||
2. Click on '....' |
|
||||
3. Scroll down to '....' |
|
||||
4. See error |
|
||||
|
|
||||
**Expected behavior** |
|
||||
A clear and concise description of what you expected to happen. |
|
||||
|
|
||||
**Info** |
|
||||
Uptime Kuma Version: |
|
||||
Using Docker?: Yes/No |
|
||||
Docker Version: |
|
||||
Node.js Version (Without Docker only): |
|
||||
OS: |
|
||||
Browser: |
|
||||
|
|
||||
**Screenshots** |
|
||||
If applicable, add screenshots to help explain your problem. |
|
||||
|
|
||||
**Error Log** |
|
||||
It is easier for us to find out the problem. |
|
||||
|
|
||||
Docker: `docker logs <container id>` |
|
||||
PM2: `~/.pm2/logs/` (e.g. `/home/ubuntu/.pm2/logs`) |
|
@ -0,0 +1,100 @@ |
|||||
|
name: "🐛 Bug Report" |
||||
|
description: "Submit a bug report to help us improve" |
||||
|
title: "[Bug]: <title>" |
||||
|
labels: [bug] |
||||
|
body: |
||||
|
- type: textarea |
||||
|
id: steps-to-reproduce |
||||
|
validations: |
||||
|
required: true |
||||
|
attributes: |
||||
|
label: "👟 Reproduction steps" |
||||
|
description: "How do you trigger this bug? Please walk us through it step by step." |
||||
|
placeholder: "..." |
||||
|
- type: textarea |
||||
|
id: expected-behavior |
||||
|
validations: |
||||
|
required: true |
||||
|
attributes: |
||||
|
label: "👍 Expected behavior" |
||||
|
description: "What did you think would happen?" |
||||
|
placeholder: "..." |
||||
|
- type: textarea |
||||
|
id: actual-behavior |
||||
|
validations: |
||||
|
required: true |
||||
|
attributes: |
||||
|
label: "👎 Actual Behavior" |
||||
|
description: "What actually happen?" |
||||
|
placeholder: "..." |
||||
|
- type: input |
||||
|
id: uptime-kuma-version |
||||
|
attributes: |
||||
|
label: "🐻 Uptime-Kuma version" |
||||
|
description: "Which version of Uptime-Kuma are you running?" |
||||
|
placeholder: "Ex. 1.9.x" |
||||
|
validations: |
||||
|
required: true |
||||
|
- type: input |
||||
|
id: operating-system |
||||
|
attributes: |
||||
|
label: "💻 Operating System" |
||||
|
description: "Which OS is your server/device running on?" |
||||
|
placeholder: "Ex. Ubuntu 20.04" |
||||
|
validations: |
||||
|
required: true |
||||
|
- type: input |
||||
|
id: browser-vendor |
||||
|
attributes: |
||||
|
label: "🌐 Browser" |
||||
|
description: "Which browser are you running on?" |
||||
|
placeholder: "Ex. Firefox" |
||||
|
validations: |
||||
|
required: true |
||||
|
- type: input |
||||
|
id: docker-version |
||||
|
attributes: |
||||
|
label: "🐋 Docker" |
||||
|
description: "If running with Docker, which version are you running?" |
||||
|
placeholder: "Ex. 20.10.9" |
||||
|
validations: |
||||
|
required: false |
||||
|
- type: input |
||||
|
id: docker-image-tag |
||||
|
attributes: |
||||
|
label: "🏷️ Docker Image Tag" |
||||
|
description: "Which Docker image tag are you using? If running '1' or 'latest', please specify image hash." |
||||
|
placeholder: "Ex. 1.9.1" |
||||
|
validations: |
||||
|
required: false |
||||
|
- type: input |
||||
|
id: nodejs-version |
||||
|
attributes: |
||||
|
label: "🟩 NodeJS Version" |
||||
|
description: "If running with Node.js? which version are you running?" |
||||
|
placeholder: "14.x" |
||||
|
validations: |
||||
|
required: false |
||||
|
- type: textarea |
||||
|
id: logs |
||||
|
attributes: |
||||
|
label: "📝 Relevant log output" |
||||
|
description: Please copy and paste any relevant log output. This will be automatically formatted into code, so no need for backticks. |
||||
|
render: shell |
||||
|
validations: |
||||
|
required: false |
||||
|
- type: checkboxes |
||||
|
id: no-duplicate-issues |
||||
|
attributes: |
||||
|
label: "⚠️ Please verify that this bug has NOT been raised before." |
||||
|
description: "Search in the issues sections by clicking [HERE](https://github.com/louislam/uptime-kuma/issues?q=)" |
||||
|
options: |
||||
|
- label: "I checked and didn't find similar issue" |
||||
|
required: true |
||||
|
- type: checkboxes |
||||
|
attributes: |
||||
|
label: "🛡️ Security Policy" |
||||
|
description: Please review the security policy before reporting security related issues/bugs. |
||||
|
options: |
||||
|
- label: I agree to have read this project [Security Policy](https://github.com/louislam/uptime-kuma/security/policy) |
||||
|
required: true |
@ -1,22 +0,0 @@ |
|||||
--- |
|
||||
name: Feature request |
|
||||
about: Suggest an idea for this project |
|
||||
title: '' |
|
||||
labels: enhancement |
|
||||
assignees: '' |
|
||||
|
|
||||
--- |
|
||||
**Is it a duplicate question?** |
|
||||
Please search in Issues without filters: https://github.com/louislam/uptime-kuma/issues?q= |
|
||||
|
|
||||
**Is your feature request related to a problem? Please describe.** |
|
||||
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] |
|
||||
|
|
||||
**Describe the solution you'd like** |
|
||||
A clear and concise description of what you want to happen. |
|
||||
|
|
||||
**Describe alternatives you've considered** |
|
||||
A clear and concise description of any alternative solutions or features you've considered. |
|
||||
|
|
||||
**Additional context** |
|
||||
Add any other context or screenshots about the feature request here. |
|
@ -0,0 +1,59 @@ |
|||||
|
name: 🚀 Feature Request |
||||
|
description: "Submit a proposal for a new feature" |
||||
|
title: "[Feature]: <title>" |
||||
|
labels: [enhancement] |
||||
|
body: |
||||
|
- type: dropdown |
||||
|
id: feature-area |
||||
|
attributes: |
||||
|
label: "🏷️ Feature Request Type" |
||||
|
description: "What kind of feature request is this?" |
||||
|
multiple: true |
||||
|
options: |
||||
|
- API |
||||
|
- New Notification |
||||
|
- New Monitor |
||||
|
- UI Feature |
||||
|
- Other |
||||
|
validations: |
||||
|
required: true |
||||
|
- type: textarea |
||||
|
id: feature-description |
||||
|
validations: |
||||
|
required: true |
||||
|
attributes: |
||||
|
label: "🔖 Feature description" |
||||
|
description: "A clear and concise description of what the feature request is." |
||||
|
placeholder: "You should add ..." |
||||
|
- type: textarea |
||||
|
id: solution |
||||
|
validations: |
||||
|
required: true |
||||
|
attributes: |
||||
|
label: "✔️ Solution" |
||||
|
description: "A clear and concise description of what you want to happen." |
||||
|
placeholder: "In my use-case, ..." |
||||
|
- type: textarea |
||||
|
id: alternatives |
||||
|
validations: |
||||
|
required: false |
||||
|
attributes: |
||||
|
label: "❓ Alternatives" |
||||
|
description: "A clear and concise description of any alternative solutions or features you've considered." |
||||
|
placeholder: "I have considered ..." |
||||
|
- type: textarea |
||||
|
id: additional-context |
||||
|
validations: |
||||
|
required: false |
||||
|
attributes: |
||||
|
label: "📝 Additional Context" |
||||
|
description: "Add any other context or screenshots about the feature request here." |
||||
|
placeholder: "..." |
||||
|
- type: checkboxes |
||||
|
id: no-duplicate-issues |
||||
|
attributes: |
||||
|
label: "⚠️ Please verify that this feature request has NOT been suggested before." |
||||
|
description: "Search in the issues sections by clicking [HERE](https://github.com/louislam/uptime-kuma/issues?q=)" |
||||
|
options: |
||||
|
- label: "I checked and didn't find similar feature request" |
||||
|
required: true |
@ -0,0 +1,26 @@ |
|||||
|
# Description |
||||
|
|
||||
|
Fixes #(issue) |
||||
|
|
||||
|
## Type of change |
||||
|
|
||||
|
Please delete options that are not relevant. |
||||
|
|
||||
|
- Bug fix (non-breaking change which fixes an issue) |
||||
|
- User Interface |
||||
|
- New feature (non-breaking change which adds functionality) |
||||
|
- Breaking change (fix or feature that would cause existing functionality to not work as expected) |
||||
|
- Translation update |
||||
|
- Other |
||||
|
- This change requires a documentation update |
||||
|
|
||||
|
## Checklist |
||||
|
|
||||
|
- [ ] My code follows the style guidelines of this project |
||||
|
- [ ] I ran ESLint and other linters for modified files |
||||
|
- [ ] I have performed a self-review of my own code and test it |
||||
|
- [ ] I have commented my code, particularly in hard-to-understand areas |
||||
|
- [ ] My changes generate no new warnings |
||||
|
- [ ] My code needed automated testing. I have added them (this is optional task) |
||||
|
|
||||
|
## Screenshots (if any) |
@ -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 user |
||||
|
ADD twofa_last_token VARCHAR(6); |
||||
|
|
||||
|
COMMIT; |
@ -0,0 +1,18 @@ |
|||||
|
-- You should not modify if this have pushed to Github, unless it does serious wrong with the db. |
||||
|
BEGIN TRANSACTION; |
||||
|
|
||||
|
CREATE TABLE [notification_sent_history] ( |
||||
|
[id] INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, |
||||
|
[type] VARCHAR(50) NOT NULL, |
||||
|
[monitor_id] INTEGER NOT NULL, |
||||
|
[days] INTEGER NOT NULL, |
||||
|
UNIQUE([type], [monitor_id], [days]) |
||||
|
); |
||||
|
|
||||
|
CREATE INDEX [good_index] ON [notification_sent_history] ( |
||||
|
[type], |
||||
|
[monitor_id], |
||||
|
[days] |
||||
|
); |
||||
|
|
||||
|
COMMIT; |
File diff suppressed because it is too large
@ -0,0 +1,89 @@ |
|||||
|
//
|
||||
|
// bark.js
|
||||
|
// UptimeKuma
|
||||
|
//
|
||||
|
// Created by Lakr Aream on 2021/10/24.
|
||||
|
// Copyright © 2021 Lakr Aream. All rights reserved.
|
||||
|
//
|
||||
|
|
||||
|
const NotificationProvider = require("./notification-provider"); |
||||
|
const { DOWN, UP } = require("../../src/util"); |
||||
|
const { default: axios } = require("axios"); |
||||
|
|
||||
|
// bark is an APN bridge that sends notifications to Apple devices.
|
||||
|
|
||||
|
const barkNotificationGroup = "UptimeKuma"; |
||||
|
const barkNotificationAvatar = "https://github.com/louislam/uptime-kuma/raw/master/public/icon.png"; |
||||
|
const barkNotificationSound = "telegraph"; |
||||
|
const successMessage = "Successes!"; |
||||
|
|
||||
|
class Bark extends NotificationProvider { |
||||
|
name = "Bark"; |
||||
|
|
||||
|
async send(notification, msg, monitorJSON = null, heartbeatJSON = null) { |
||||
|
try { |
||||
|
var barkEndpoint = notification.barkEndpoint; |
||||
|
|
||||
|
// check if the endpoint has a "/" suffix, if so, delete it first
|
||||
|
if (barkEndpoint.endsWith("/")) { |
||||
|
barkEndpoint = barkEndpoint.substring(0, barkEndpoint.length - 1); |
||||
|
} |
||||
|
|
||||
|
if (msg != null && heartbeatJSON != null && heartbeatJSON["status"] == UP) { |
||||
|
let title = "UptimeKuma Monitor Up"; |
||||
|
return await this.postNotification(title, msg, barkEndpoint); |
||||
|
} |
||||
|
|
||||
|
if (msg != null && heartbeatJSON != null && heartbeatJSON["status"] == DOWN) { |
||||
|
let title = "UptimeKuma Monitor Down"; |
||||
|
return await this.postNotification(title, msg, barkEndpoint); |
||||
|
} |
||||
|
|
||||
|
if (msg != null) { |
||||
|
let title = "UptimeKuma Message"; |
||||
|
return await this.postNotification(title, msg, barkEndpoint); |
||||
|
} |
||||
|
|
||||
|
} catch (error) { |
||||
|
throw error; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// add additional parameter for better on device styles (iOS 15 optimized)
|
||||
|
appendAdditionalParameters(postUrl) { |
||||
|
// grouping all our notifications
|
||||
|
postUrl += "?group=" + barkNotificationGroup; |
||||
|
// set icon to uptime kuma icon, 11kb should be fine
|
||||
|
postUrl += "&icon=" + barkNotificationAvatar; |
||||
|
// picked a sound, this should follow system's mute status when arrival
|
||||
|
postUrl += "&sound=" + barkNotificationSound; |
||||
|
return postUrl; |
||||
|
} |
||||
|
|
||||
|
// thrown if failed to check result, result code should be in range 2xx
|
||||
|
checkResult(result) { |
||||
|
if (result.status == null) { |
||||
|
throw new Error("Bark notification failed with invalid response!"); |
||||
|
} |
||||
|
if (result.status < 200 || result.status >= 300) { |
||||
|
throw new Error("Bark notification failed with status code " + result.status); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
async postNotification(title, subtitle, endpoint) { |
||||
|
// url encode title and subtitle
|
||||
|
title = encodeURIComponent(title); |
||||
|
subtitle = encodeURIComponent(subtitle); |
||||
|
let postUrl = endpoint + "/" + title + "/" + subtitle; |
||||
|
postUrl = this.appendAdditionalParameters(postUrl); |
||||
|
let result = await axios.get(postUrl); |
||||
|
this.checkResult(result); |
||||
|
if (result.statusText != null) { |
||||
|
return "Bark notification succeed: " + result.statusText; |
||||
|
} |
||||
|
// because returned in range 200 ..< 300
|
||||
|
return successMessage; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
module.exports = Bark; |
@ -0,0 +1,42 @@ |
|||||
|
const NotificationProvider = require("./notification-provider"); |
||||
|
const axios = require("axios"); |
||||
|
|
||||
|
class ClickSendSMS extends NotificationProvider { |
||||
|
|
||||
|
name = "clicksendsms"; |
||||
|
|
||||
|
async send(notification, msg, monitorJSON = null, heartbeatJSON = null) { |
||||
|
let okMsg = "Sent Successfully."; |
||||
|
try { |
||||
|
console.log({ notification }); |
||||
|
let config = { |
||||
|
headers: { |
||||
|
"Content-Type": "application/json", |
||||
|
"Authorization": "Basic " + Buffer.from(notification.clicksendsmsLogin + ":" + notification.clicksendsmsPassword).toString('base64'), |
||||
|
"Accept": "text/json", |
||||
|
} |
||||
|
}; |
||||
|
let data = { |
||||
|
messages: [ |
||||
|
{ |
||||
|
"body": msg.replace(/[^\x00-\x7F]/g, ""), |
||||
|
"to": notification.clicksendsmsToNumber, |
||||
|
"source": "uptime-kuma", |
||||
|
"from": notification.clicksendsmsSenderName, |
||||
|
} |
||||
|
] |
||||
|
}; |
||||
|
let resp = await axios.post("https://rest.clicksend.com/v3/sms/send", data, config); |
||||
|
if (resp.data.data.messages[0].status !== "SUCCESS") { |
||||
|
let error = "Something gone wrong. Api returned " + resp.data.data.messages[0].status + "."; |
||||
|
this.throwGeneralAxiosError(error); |
||||
|
} |
||||
|
|
||||
|
return okMsg; |
||||
|
} catch (error) { |
||||
|
this.throwGeneralAxiosError(error); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
module.exports = ClickSendSMS; |
@ -0,0 +1,39 @@ |
|||||
|
const { RateLimiter } = require("limiter"); |
||||
|
const { debug } = require("../src/util"); |
||||
|
|
||||
|
class KumaRateLimiter { |
||||
|
constructor(config) { |
||||
|
this.errorMessage = config.errorMessage; |
||||
|
this.rateLimiter = new RateLimiter(config); |
||||
|
} |
||||
|
|
||||
|
async pass(callback, num = 1) { |
||||
|
const remainingRequests = await this.removeTokens(num); |
||||
|
debug("Rate Limit (remainingRequests):" + remainingRequests); |
||||
|
if (remainingRequests < 0) { |
||||
|
if (callback) { |
||||
|
callback({ |
||||
|
ok: false, |
||||
|
msg: this.errorMessage, |
||||
|
}); |
||||
|
} |
||||
|
return false; |
||||
|
} |
||||
|
return true; |
||||
|
} |
||||
|
|
||||
|
async removeTokens(num = 1) { |
||||
|
return await this.rateLimiter.removeTokens(num); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
const loginRateLimiter = new KumaRateLimiter({ |
||||
|
tokensPerInterval: 20, |
||||
|
interval: "minute", |
||||
|
fireImmediately: true, |
||||
|
errorMessage: "Too frequently, try again later." |
||||
|
}); |
||||
|
|
||||
|
module.exports = { |
||||
|
loginRateLimiter |
||||
|
}; |
@ -0,0 +1,37 @@ |
|||||
|
const { checkLogin } = require("../util-server"); |
||||
|
const Database = require("../database"); |
||||
|
|
||||
|
module.exports = (socket) => { |
||||
|
|
||||
|
// Post or edit incident
|
||||
|
socket.on("getDatabaseSize", async (callback) => { |
||||
|
try { |
||||
|
checkLogin(socket); |
||||
|
callback({ |
||||
|
ok: true, |
||||
|
size: Database.getSize(), |
||||
|
}); |
||||
|
} catch (error) { |
||||
|
callback({ |
||||
|
ok: false, |
||||
|
msg: error.message, |
||||
|
}); |
||||
|
} |
||||
|
}); |
||||
|
|
||||
|
socket.on("shrinkDatabase", async (callback) => { |
||||
|
try { |
||||
|
checkLogin(socket); |
||||
|
Database.shrink(); |
||||
|
callback({ |
||||
|
ok: true, |
||||
|
}); |
||||
|
} catch (error) { |
||||
|
callback({ |
||||
|
ok: false, |
||||
|
msg: error.message, |
||||
|
}); |
||||
|
} |
||||
|
}); |
||||
|
|
||||
|
}; |
@ -0,0 +1,15 @@ |
|||||
|
<template> |
||||
|
<div class="mb-3"> |
||||
|
<label for="Bark Endpoint" class="form-label">{{ $t("Bark Endpoint") }}<span style="color: red;"><sup>*</sup></span></label> |
||||
|
<input id="Bark Endpoint" v-model="$parent.notification.barkEndpoint" type="text" class="form-control" required> |
||||
|
<div class="form-text"> |
||||
|
<p><span style="color: red;"><sup>*</sup></span>{{ $t("Required") }}</p> |
||||
|
</div> |
||||
|
<i18n-t tag="div" keypath="wayToGetTeamsURL" class="form-text"> |
||||
|
<a |
||||
|
href="https://github.com/Finb/Bark" |
||||
|
target="_blank" |
||||
|
>{{ $t("here") }}</a> |
||||
|
</i18n-t> |
||||
|
</div> |
||||
|
</template> |
@ -0,0 +1,38 @@ |
|||||
|
<template> |
||||
|
<div class="mb-3"> |
||||
|
<label for="clicksendsms-login" class="form-label">API Username</label> |
||||
|
<div class="form-text"> |
||||
|
{{ $t("apiCredentials") }} |
||||
|
<a href="http://dashboard.clicksend.com/account/subaccounts" target="_blank">here</a> |
||||
|
</div> |
||||
|
<input id="clicksendsms-login" v-model="$parent.notification.clicksendsmsLogin" type="text" class="form-control" required> |
||||
|
<label for="clicksendsms-key" class="form-label">API Key</label> |
||||
|
<HiddenInput id="clicksendsms-key" v-model="$parent.notification.clicksendsmsPassword" :required="true" autocomplete="one-time-code"></HiddenInput> |
||||
|
</div> |
||||
|
<div class="mb-3"> |
||||
|
<div class="form-text"> |
||||
|
{{ $t("checkPrice", [$t("clicksendsms")]) }} |
||||
|
<a href="https://www.clicksend.com/us/pricing" target="_blank">https://clicksend.com/us/pricing</a> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="mb-3"> |
||||
|
<label for="clicksendsms-to-number" class="form-label">Recipient Number</label> |
||||
|
<input id="clicksendsms-to-number" v-model="$parent.notification.clicksendsmsToNumber" type="text" minlength="8" maxlength="14" class="form-control" required> |
||||
|
</div> |
||||
|
<div class="mb-3"> |
||||
|
<label for="clicksendsms-sender-name" class="form-label">From Name/Number - |
||||
|
<a href="https://help.clicksend.com/article/4kgj7krx00-what-is-a-sender-id-or-sender-number" target="_blank">More Info</a> |
||||
|
</label> |
||||
|
<input id="clicksendsms-sender-name" v-model="$parent.notification.clicksendsmsSenderName" type="text" minlength="3" maxlength="11" class="form-control"> |
||||
|
<div class="form-text">Leave blank to use a shared sender number.</div> |
||||
|
</div> |
||||
|
</template> |
||||
|
<script> |
||||
|
import HiddenInput from "../HiddenInput.vue"; |
||||
|
|
||||
|
export default { |
||||
|
components: { |
||||
|
HiddenInput, |
||||
|
}, |
||||
|
}; |
||||
|
</script> |
@ -0,0 +1,310 @@ |
|||||
|
export default { |
||||
|
languageName: "Hrvatski", |
||||
|
checkEverySecond: "Provjera svake {0} sekunde", |
||||
|
retryCheckEverySecond: "Ponovni pokušaj svake {0} sekunde", |
||||
|
retriesDescription: "Broj ponovnih pokušaja prije nego će se servis označiti kao DOWN te poslati obavijest", |
||||
|
ignoreTLSError: "Ignoriraj TLS/SSL pogreške za HTTPS web stranice", |
||||
|
upsideDownModeDescription: "Preokreni logiku statusa. Ako je usluga dostupna, smatra se da je DOWN.", |
||||
|
maxRedirectDescription: "Maksimalan broj preusmjeravanja. Postaviti na 0 kako bi se preusmjeravanja onemogućila.", |
||||
|
acceptedStatusCodesDescription: "Odaberite statusne kodove koji se smatraju uspješnim odgovorom.", |
||||
|
passwordNotMatchMsg: "Lozinke se ne poklapaju.", |
||||
|
notificationDescription: "Obavijesti će funkcionirati samo ako su dodijeljene monitoru.", |
||||
|
keywordDescription: "Ključna riječ za pretragu kao običan HTML ili u JSON formatu. Pretraga je case-sensitive.", |
||||
|
pauseDashboardHome: "Pauziraj", |
||||
|
deleteMonitorMsg: "Jeste li sigurni da želite izbrisati monitor?", |
||||
|
deleteNotificationMsg: "Jeste li sigurni da želite izbrisati ovu obavijest za sve monitore?", |
||||
|
resoverserverDescription: "Cloudflare je zadani DNS poslužitelj. Možete to promijeniti u bilo kojem trenutku.", |
||||
|
rrtypeDescription: "Odaberite vrstu DNS zapisa o resursu kojeg želite pratiti", |
||||
|
pauseMonitorMsg: "Jeste li sigurni da želite pauzirati?", |
||||
|
enableDefaultNotificationDescription: "Ova će obavijesti biti omogućena za sve nove monitore. Možete ju ručno onemogućiti za pojedini monitor.", |
||||
|
clearEventsMsg: "Jeste li sigurni da želite izbrisati sve zapise o događajima za ovaj monitor?", |
||||
|
clearHeartbeatsMsg: "Jeste li sigurni da želite izbrisati sve zapise o provjerama za ovaj monitor?", |
||||
|
confirmClearStatisticsMsg: "Jeste li sigurni da želite izbrisati SVE statistike?", |
||||
|
importHandleDescription: "Odaberite opciju \"Preskoči postojeće\" ako želite preskočiti uvoz postojećih monitora i obavijesti ako dođe do poklapanja u imenu. Opcija \"Prepiši\" će izbrisati postojeće monitore i obavijesti.", |
||||
|
confirmImportMsg: "Jeste li sigurni da želite pokrenuti uvoz? Provjerite jeste li odabrali ispravnu opciju uvoza.", |
||||
|
twoFAVerifyLabel: "Unesite svoj 2FA token:", |
||||
|
tokenValidSettingsMsg: "Token je važeći! Sada možete spremiti postavke dvofaktorske autentikacije.", |
||||
|
confirmEnableTwoFAMsg: "Želite li omogućiti dvofaktorsku autentikaciju?", |
||||
|
confirmDisableTwoFAMsg: "Are you sure you want to disable dvofaktorsku autentikaciju?", |
||||
|
Settings: "Postavke", |
||||
|
Dashboard: "Kontrolna ploča", |
||||
|
"New Update": "Novo ažuriranje", |
||||
|
Language: "Jezik", |
||||
|
Appearance: "Izgled", |
||||
|
Theme: "Tema", |
||||
|
General: "Općenito", |
||||
|
"Primary Base URL": "Osnovni URL", |
||||
|
Version: "Inačica", |
||||
|
"Check Update On GitHub": "Provjeri dostupnost nove inačice na GitHubu", |
||||
|
List: "Popis", |
||||
|
Add: "Dodaj", |
||||
|
"Add New Monitor": "Dodaj novi Monitor", |
||||
|
"Quick Stats": "Statistika", |
||||
|
Up: "Dostupno", |
||||
|
Down: "Nedostupno", |
||||
|
Pending: "U tijeku", |
||||
|
Unknown: "Nepoznato", |
||||
|
Pause: "Pauzirano", |
||||
|
Name: "Naziv monitora", |
||||
|
Status: "Status", |
||||
|
DateTime: "Vremenska oznaka", |
||||
|
Message: "Izvještaj", |
||||
|
"No important events": "Nema važnih događaja", |
||||
|
Resume: "Nastavi", |
||||
|
Edit: "Uredi", |
||||
|
Delete: "Obriši", |
||||
|
Current: "Trenutno", |
||||
|
Uptime: "Uptime", |
||||
|
"Cert Exp.": "Istek cert.", |
||||
|
days: "dana", |
||||
|
day: "dan", |
||||
|
"-day": "-dnevno", |
||||
|
hour: "sat", |
||||
|
"-hour": "-satno", |
||||
|
Response: "Odgovor", |
||||
|
Ping: "Odziv", |
||||
|
"Monitor Type": "Vrsta Monitora", |
||||
|
Keyword: "Ključna riječ", |
||||
|
"Friendly Name": "Lijep naziv", |
||||
|
URL: "URL", |
||||
|
Hostname: "Domaćin", |
||||
|
Port: "Port", |
||||
|
"Heartbeat Interval": "Interval provjere", |
||||
|
Retries: "Ponovnih pokušaja", |
||||
|
"Heartbeat Retry Interval": "Interval ponovnih pokušaja", |
||||
|
Advanced: "Napredne postavke", |
||||
|
"Upside Down Mode": "Obrnuti način", |
||||
|
"Max. Redirects": "Maksimalan broj preusmjeravanja", |
||||
|
"Accepted Status Codes": "Prihvaćeni statusni kodovi", |
||||
|
"Push URL": "Push URL", |
||||
|
needPushEvery: "Potrebno je slati zahtjeve na URL svakih {0} sekundi.", |
||||
|
pushOptionalParams: "Neobavezni parametri: {0}", |
||||
|
Save: "Spremi", |
||||
|
Notifications: "Obavijesti", |
||||
|
"Not available, please setup.": "Obavijesti nisu dostupne, potrebno dodati novu obavijest.", |
||||
|
"Setup Notification": "Dodaj obavijest", |
||||
|
Light: "Svijetli način", |
||||
|
Dark: "Tamni način", |
||||
|
Auto: "Automatski", |
||||
|
"Theme - Heartbeat Bar": "Tema - Statusna traka", |
||||
|
Normal: "Normalno", |
||||
|
Bottom: "Ispod", |
||||
|
None: "Isključeno", |
||||
|
Timezone: "Vremenska zona", |
||||
|
"Search Engine Visibility": "Vidljivost pretraživačima", |
||||
|
"Allow indexing": "Dopusti indeksiranje", |
||||
|
"Discourage search engines from indexing site": "Sprječavanje indeksiranja stranice", |
||||
|
"Change Password": "Promjena lozinke", |
||||
|
"Current Password": "Trenutna lozinka", |
||||
|
"New Password": "Nova lozinka", |
||||
|
"Repeat New Password": "Potvrdite novu lozinku", |
||||
|
"Update Password": "Spremi novu lozinku", |
||||
|
"Disable Auth": "Onemogući autentikaciju", |
||||
|
"Enable Auth": "Omogući autentikaciju", |
||||
|
Logout: "Odjava", |
||||
|
Leave: "Poništi", |
||||
|
"I understand, please disable": "Razumijem, onemogući", |
||||
|
Confirm: "Potvrda", |
||||
|
Yes: "Da", |
||||
|
No: "Ne", |
||||
|
Username: "Korisničko ime", |
||||
|
Password: "Lozinka", |
||||
|
"Remember me": "Zapamti me", |
||||
|
Login: "Prijava", |
||||
|
"No Monitors, please": "Nema monitora, ", |
||||
|
"add one": "dodaj jednog", |
||||
|
"Notification Type": "Tip obavijesti", |
||||
|
Email: "E-pošta", |
||||
|
Test: "Test", |
||||
|
"Certificate Info": "Informacije o certifikatu", |
||||
|
"Resolver Server": "DNS poslužitelj", |
||||
|
"Resource Record Type": "Vrsta DNS zapisa", |
||||
|
"Last Result": "Posljednji rezultat", |
||||
|
"Create your admin account": "Stvori administratorski račun", |
||||
|
"Repeat Password": "Potvrda lozinke", |
||||
|
"Import Backup": "Uvoz sigurnosne kopije", |
||||
|
"Export Backup": "Izvoz sigurnosne kopije", |
||||
|
Export: "Izvoz", |
||||
|
Import: "Uvoz", |
||||
|
respTime: "Vrijeme odgovora (ms)", |
||||
|
notAvailableShort: "N/A", |
||||
|
"Default enabled": "Omogući za nove monitore", |
||||
|
"Apply on all existing monitors": "Primijeni na postojeće monitore", |
||||
|
Create: "Create", |
||||
|
"Clear Data": "Clear Data", |
||||
|
Events: "Events", |
||||
|
Heartbeats: "Provjere", |
||||
|
"Auto Get": "Automatski dohvat", |
||||
|
backupDescription: "Moguće je napraviti sigurnosnu kopiju svih monitora i obavijesti koja će biti spremljena kao JSON datoteka.", |
||||
|
backupDescription2: "Napomena: povijest i podaci o događajima nisu uključeni u sigurnosnu kopiju.", |
||||
|
backupDescription3: "Osjetljivi podaci poput tokena za obavijesti jesu uključeni u sigurnosnu kopiju. Zato je potrebno čuvati izvoz na sigurnom mjestu.", |
||||
|
alertNoFile: "Datoteka za uvoz nije odabrana.", |
||||
|
alertWrongFileType: "Datoteka za uvoz nije u JSON formatu.", |
||||
|
"Clear all statistics": "Obriši sve statistike", |
||||
|
"Skip existing": "Preskoči postojeće", |
||||
|
Overwrite: "Prepiši", |
||||
|
Options: "Opcije", |
||||
|
"Keep both": "Zadrži sve", |
||||
|
"Verify Token": "Provjeri Token", |
||||
|
"Setup 2FA": "Postavi dvofaktorsku autentikaciju", |
||||
|
"Enable 2FA": "Omogući dvofaktorsku autentikaciju", |
||||
|
"Disable 2FA": "Onemogući dvofaktorsku autentikaciju", |
||||
|
"2FA Settings": "Postavke 2FA", |
||||
|
"Two Factor Authentication": "Dvofaktorska autentikacija", |
||||
|
Active: "Aktivna", |
||||
|
Inactive: "Neaktivna", |
||||
|
Token: "Token", |
||||
|
"Show URI": "Pokaži URI", |
||||
|
Tags: "Oznake", |
||||
|
"Add New below or Select...": "Dodajte novu oznaku ispod ili odaberite...", |
||||
|
"Tag with this name already exist.": "Oznaka s tim nazivom već postoji", |
||||
|
"Tag with this value already exist.": "Oznaka s tom vrijednošću već postoji.", |
||||
|
color: "Boja", |
||||
|
"value (optional)": "Vrijednost (neobavezno)", |
||||
|
Gray: "Siva", |
||||
|
Red: "Crvena", |
||||
|
Orange: "Narančasta", |
||||
|
Green: "Zelena", |
||||
|
Blue: "Plava", |
||||
|
Indigo: "Indigo", |
||||
|
Purple: "Ljubičasta", |
||||
|
Pink: "Ružičasta", |
||||
|
"Search...": "Pretraga...", |
||||
|
"Avg. Ping": "Prosječni odziv", |
||||
|
"Avg. Response": "Prosječni odgovor", |
||||
|
"Entry Page": "Entry Page", |
||||
|
statusPageNothing: "Ovdje nema ničega, dodajte grupu ili monitor.", |
||||
|
"No Services": "Nema usluga", |
||||
|
"All Systems Operational": "Svi sustavi su operativni", |
||||
|
"Partially Degraded Service": "Usluga djelomično nedostupna", |
||||
|
"Degraded Service": "Usluga nedostupna", |
||||
|
"Add Group": "Dodaj grupu", |
||||
|
"Add a monitor": "Dodaj monitor", |
||||
|
"Edit Status Page": "Uredi Statusnu stranicu", |
||||
|
"Go to Dashboard": "Na Kontrolnu ploču", |
||||
|
"Status Page": "Statusna stranica", |
||||
|
defaultNotificationName: "Moja {notification} obavijest ({number})", |
||||
|
here: "ovdje", |
||||
|
Required: "Potrebno", |
||||
|
telegram: "Telegram", |
||||
|
"Bot Token": "Token bota", |
||||
|
wayToGetTelegramToken: "Token možete nabaviti preko {0}.", |
||||
|
"Chat ID": "ID razgovora", |
||||
|
supportTelegramChatID: "Podržani su ID-jevi izravnih razgovora, grupa i kanala", |
||||
|
wayToGetTelegramChatID: "ID razgovora možete saznati tako da botu pošaljete poruku te odete na ovaj URL:", |
||||
|
"YOUR BOT TOKEN HERE": "OVDJE IDE TOKEN BOTA", |
||||
|
chatIDNotFound: "ID razgovora nije pronađen; prvo morate poslati poruku botu", |
||||
|
webhook: "Webhook", |
||||
|
"Post URL": "Post URL", |
||||
|
"Content Type": "Tip sadržaja (Content Type)", |
||||
|
webhookJsonDesc: "{0} je dobra opcija za moderne HTTP poslužitelje poput Express.js-a", |
||||
|
webhookFormDataDesc: "{multipart} je moguća alternativa za PHP, samo je potrebno parsirati JSON koristeći {decodeFunction}", |
||||
|
smtp: "E-pošta (SMTP)", |
||||
|
secureOptionNone: "Bez sigurnosti / STARTTLS (25, 587)", |
||||
|
secureOptionTLS: "TLS (465)", |
||||
|
"Ignore TLS Error": "Ignoriraj greške TLS-a", |
||||
|
"From Email": "Adresa za \"From\" polje", |
||||
|
emailCustomSubject: "Prilagođeno \"Subject\" polje", |
||||
|
"To Email": "Odredišne adrese e-pošte", |
||||
|
smtpCC: "Cc", |
||||
|
smtpBCC: "Bcc", |
||||
|
discord: "Discord", |
||||
|
"Discord Webhook URL": "URL Discord webhooka", |
||||
|
wayToGetDiscordURL: "Ovo možete dobiti tako da odete na Postavke servera -> Integracije -> Napravi webhook", |
||||
|
"Bot Display Name": "Nadimak Bota unutar servera", |
||||
|
"Prefix Custom Message": "Prefiks prilagođene poruke", |
||||
|
"Hello @everyone is...": "Pozdrav {'@'}everyone...", |
||||
|
teams: "Microsoft Teams", |
||||
|
"Webhook URL": "URL Teams webhooka", |
||||
|
wayToGetTeamsURL: "Više informacija o Teams webhookovima možete pročitati {0}.", |
||||
|
signal: "Signal", |
||||
|
Number: "Broj", |
||||
|
Recipients: "Primatelji", |
||||
|
needSignalAPI: "Potreban je klijent s REST sučeljem.", |
||||
|
wayToCheckSignalURL: "Više informacija o postavljanju Signal klijenta:", |
||||
|
signalImportant: "VAŽNO: Grupe i brojevi se ne mogu istovremeno koristiti kao primatelji!", |
||||
|
gotify: "Gotify", |
||||
|
"Application Token": "Token Aplikacije", |
||||
|
"Server URL": "URL poslužitelja", |
||||
|
Priority: "Prioritet", |
||||
|
slack: "Slack", |
||||
|
"Icon Emoji": "Emotikon", |
||||
|
"Channel Name": "Naziv kanala", |
||||
|
"Uptime Kuma URL": "Uptime Kuma URL", |
||||
|
aboutWebhooks: "Dodatne informacije o webhookovima su dostupne na: {0}", |
||||
|
aboutChannelName: "Unesite ime {0} kanala u polju Naziv kanala ako želite zaobići webhook kanal. Primjerice: #neki-kanal", |
||||
|
aboutKumaURL: "Ako je polje \"Uptime Kuma URL\" prazno, koristi se zadana vrijednost koja vodi na GitHub stranicu projekta.", |
||||
|
emojiCheatSheet: "Popis emotikona: {0}", |
||||
|
"rocket.chat": "Rocket.Chat", |
||||
|
pushover: "Pushover", |
||||
|
pushy: "Pushy", |
||||
|
octopush: "Octopush", |
||||
|
promosms: "PromoSMS", |
||||
|
clicksendsms: "ClickSend SMS", |
||||
|
lunasea: "LunaSea", |
||||
|
apprise: "Apprise (Support 50+ Notification services)", |
||||
|
pushbullet: "Pushbullet", |
||||
|
line: "LINE", |
||||
|
mattermost: "Mattermost", |
||||
|
"User Key": "Korisnički ključ", |
||||
|
Device: "Uređaji", |
||||
|
"Message Title": "Naslov poruke", |
||||
|
"Notification Sound": "Zvuk obavijesti", |
||||
|
"More info on:": "Više informacija na: {0}", |
||||
|
pushoverDesc1: "Hitni prioritet (2) ima zadani istek vremena od 30 sekundi između ponovnih pokušaja te će isteći nakon 1 sata.", |
||||
|
pushoverDesc2: "Ako želite slati obavijesti na više uređaja, ispunite polje \"Uređaji\".", |
||||
|
"SMS Type": "Tip SMS-a", |
||||
|
octopushTypePremium: "Premium (Brzo - preporučeno za obavijesti)", |
||||
|
octopushTypeLowCost: "Low Cost (Sporo - mobilni operateri ponekad blokiraju ove poruke)", |
||||
|
checkPrice: "Provjerite {0} cijene:", |
||||
|
apiCredentials: "Vjerodajnice za API", |
||||
|
octopushLegacyHint: "Koristite li staru inačicu usluge Octopush (2011-2020) ili noviju inačicu?", |
||||
|
"Check octopush prices": "Provjerite cijene usluge Octopush {0}.", |
||||
|
octopushPhoneNumber: "Telefonski broj (međunarodni format, primjerice: +38512345678) ", |
||||
|
octopushSMSSender: "Naziv SMS pošiljatelja : 3-11 alfanumeričkih znakova i razmak (a-zA-Z0-9)", |
||||
|
"LunaSea Device ID": "LunaSea ID Uređaja", |
||||
|
"Apprise URL": "URL usluge Apprise", |
||||
|
"Example:": "Primjerice: {0}", |
||||
|
"Read more:": "Pročitajte više: {0}", |
||||
|
"Status:": "Status: {0}", |
||||
|
"Read more": "Pročitaj više", |
||||
|
appriseInstalled: "Apprise je instaliran.", |
||||
|
appriseNotInstalled: "Apprise nije instaliran. {0}", |
||||
|
"Access Token": "Pristupni token", |
||||
|
"Channel access token": "Token za pristup kanalu", |
||||
|
"Line Developers Console": "LINE razvojnoj konzoli", |
||||
|
lineDevConsoleTo: "LINE razvojna konzola - {0}", |
||||
|
"Basic Settings": "Osnovne Postavke", |
||||
|
"User ID": "Korisnički ID", |
||||
|
"Messaging API": "API za razmjenu poruka", |
||||
|
wayToGetLineChannelToken: "Prvo, pristupite {0}, kreirajte pružatelja usluga te kanal (API za razmjenu poruka), zatim možete dobiti token za pristup kanalu te korisnički ID za polja iznad.", |
||||
|
"Icon URL": "URL slike", |
||||
|
aboutIconURL: "Možete postaviti poveznicu na sliku u polju \"URL slike\" kako biste spriječili korištenje zadane slike. Ovo se polje neće koristiti ako je postavljeno polje \"Emotikon\".", |
||||
|
aboutMattermostChannelName: "Možete promijeniti kanal u kojeg webhook šalje tako da ispunite polje \"Naziv kanala\". Ta opcija mora biti omogućena unutar Mattermost postavki za webhook. Primjerice: #neki-kanal", |
||||
|
matrix: "Matrix", |
||||
|
promosmsTypeEco: "SMS ECO - jeftina, ali spora opcija koja je često preopterećena. Ograničeno samo na primatelje unutar Poljske.", |
||||
|
promosmsTypeFlash: "SMS FLASH - Poruka se automatski pojavljuje na uređaju primatelja. Ograničeno samo na primatelje unutar Poljske.", |
||||
|
promosmsTypeFull: "SMS FULL - Premium razina usluge, dozvoljava postavljanje naziva SMS pošiljatelja (Naziv mora biti registriran). Usluga pouzdana za obavijesti.", |
||||
|
promosmsTypeSpeed: "SMS SPEED - Usluga najvećeg prioriteta. Brza i pouzdana, ali skupa (otprilike dvostruko skuplja od cijene usluge SMS FULL).", |
||||
|
promosmsPhoneNumber: "Telefonski broj (za primatelje unutar Poljske nije potrebno navoditi pozivni broj države)", |
||||
|
promosmsSMSSender: "Naziv SMS pošiljatelja: Registriran naziv ili jedan od zadanih: InfoSMS, SMS Info, MaxSMS, INFO, SMS", |
||||
|
"Feishu WebHookUrl": "Feishu URL webhooka", |
||||
|
matrixHomeserverURL: "URL Matrix homeservera (uključujući http(s):// te port, ako je potrebno)", |
||||
|
"Internal Room Id": "Interni ID sobe", |
||||
|
matrixDesc1: "Interni ID sobe se može pronaći u naprednim postavkama sobe unutar Matrix klijenta. ID sobe nalikuje idućem zapisu: !QMdRCpUIfLwsfjxye6:home.server.", |
||||
|
matrixDesc2: "Preporučuje se stvaranje novog korisnika te suzdržavanje od korištenja pristupnog tokena vlastitog Matrix korisnika. Novog korisnika potrebno je dodati u sobe u kojima želite primati obavijesti. Pristupni token možete dobiti pokretanjem naredbe {0}", |
||||
|
Method: "Metoda", |
||||
|
Body: "Tijelo", |
||||
|
Headers: "Zaglavlja", |
||||
|
PushUrl: "Push URL", |
||||
|
HeadersInvalidFormat: "Zaglavlja nisu nije valjani JSON: ", |
||||
|
BodyInvalidFormat: "Tijelo zahtjeva nije valjani JSON: ", |
||||
|
"Monitor History": "Povijest monitora", |
||||
|
clearDataOlderThan: "Podaci o povijesti monitora čuvaju se {0} dana.", |
||||
|
PasswordsDoNotMatch: "Lozinke se ne poklapaju.", |
||||
|
records: "zapisa", |
||||
|
"One record": "Jedan zapis", |
||||
|
"Showing {from} to {to} of {count} records": "Prikaz zapisa {from}-{to} od sveukupno {count}", |
||||
|
steamApiKeyDescription: "Za praćenje Steam poslužitelja za igru, potrebno je imati Steam Web-API ključ. Možete registrirati vlastiti ključ ovdje: ", |
||||
|
"Current User": "Trenutni korisnik", |
||||
|
}; |
@ -0,0 +1,283 @@ |
|||||
|
export default { |
||||
|
languageName: "Vietnamese", |
||||
|
checkEverySecond: "Kiểm tra mỗi {0} giây.", |
||||
|
retryCheckEverySecond: "Thử lại mỗi {0} giây.", |
||||
|
retriesDescription: "Số lần thử lại tối đa trước khi dịch vụ được đánh dấu là down và gửi thông báo.", |
||||
|
ignoreTLSError: "Bỏ qua lỗi TLS/SSL với các web HTTPS.", |
||||
|
upsideDownModeDescription: "Trạng thái đảo ngược, nếu dịch vụ có thể truy cập được nghĩa là DOWN.", |
||||
|
maxRedirectDescription: "Số lần chuyển hướng (redirect) tối đa. Đặt thành 0 để tắt chuyển hướng", |
||||
|
acceptedStatusCodesDescription: "Chọn mã code trạng thái được coi là phản hồi thành công.", |
||||
|
passwordNotMatchMsg: "Mật khẩu nhập lại không khớp.", |
||||
|
notificationDescription: "Vui lòng chỉ định một kênh thông báo.", |
||||
|
keywordDescription: "Từ khoá tìm kiếm phản hồi ở dạng html hoặc JSON, có phân biệt chữ HOA - thường", |
||||
|
pauseDashboardHome: "Tạm dừng", |
||||
|
deleteMonitorMsg: "Bạn chắc chắn muốn xóa monitor này chứ?", |
||||
|
deleteNotificationMsg: "Bạn có chắc chắn muốn xóa kênh thông báo này cho tất cả monitor?", |
||||
|
resoverserverDescription: "Cloudflare là máy chủ mặc định, bạn có thể thay đổi bất cứ lúc nào.", |
||||
|
rrtypeDescription: "Hãy chọn RR-Type mà bạn muốn giám sát", |
||||
|
pauseMonitorMsg: "Bạn chắc chắn muốn tạm dừng chứ?", |
||||
|
enableDefaultNotificationDescription: "Bật làm mặc định cho mọi monitor mới về sau. Bạn vẫn có thể tắt thông báo riêng cho từng monitor.", |
||||
|
clearEventsMsg: "Bạn chắc chắn muốn xoá TẤT CẢ sự kiện cho monitor này chứ?", |
||||
|
clearHeartbeatsMsg: "Bạn chắc chắn muốn xoá TẤT CẢ heartbeats cho monitor này chứ?", |
||||
|
confirmClearStatisticsMsg: "Bạn chắc chắn muốn xoá TẤT CẢ số liệu thống kê?", |
||||
|
importHandleDescription: "Chọn 'Skip existing' nếu bạn muốn bỏ qua mọi monitor và kênh thông báo trùng tên. 'Overwrite' sẽ ghi đè lên tất cả các monitor và kênh thông báo.", |
||||
|
confirmImportMsg: "Bạn có chắc chắn muốn khôi phục bản bản sao lưu này không?.", |
||||
|
twoFAVerifyLabel: "Vui lòng nhập mã token của bạn để xác minh rằng 2FA đang hoạt động", |
||||
|
tokenValidSettingsMsg: "Mã token hợp lệ! Bạn có thể lưu cài đặt 2FA bây giờ.", |
||||
|
confirmEnableTwoFAMsg: "Bạn chắc chắn muốn bật 2FA chứ?", |
||||
|
confirmDisableTwoFAMsg: "Bạn chắc chắn muốn tắt 2FA chứ?", |
||||
|
Settings: "Cài đặt", |
||||
|
Dashboard: "Dashboard", |
||||
|
"New Update": "Bản cập nhật mới", |
||||
|
Language: "Ngôn ngữ", |
||||
|
Appearance: "Giao diện", |
||||
|
Theme: "Theme", |
||||
|
General: "Chung", |
||||
|
Version: "Phiên bản", |
||||
|
"Check Update On GitHub": "Kiểm tra bản cập nhật mới trên GitHub", |
||||
|
List: "List", |
||||
|
Add: "Thêm", |
||||
|
"Add New Monitor": "Thêm mới Monitor", |
||||
|
"Quick Stats": "Thống kê nhanh", |
||||
|
Up: "Lên", |
||||
|
Down: "Xuống", |
||||
|
Pending: "Chờ xử lý", |
||||
|
Unknown: "Không xác định", |
||||
|
Pause: "Tạm dừng", |
||||
|
Name: "Tên", |
||||
|
Status: "Trạng thái", |
||||
|
DateTime: "Ngày tháng", |
||||
|
Message: "Tin nhắn", |
||||
|
"No important events": "Không có sự kiện quan trọng nào", |
||||
|
Resume: "Khôi phục", |
||||
|
Edit: "Sửa", |
||||
|
Delete: "Xoá", |
||||
|
Current: "Hiện tại", |
||||
|
Uptime: "Uptime", |
||||
|
"Cert Exp.": "Cert hết hạn", |
||||
|
days: "ngày", |
||||
|
day: "ngày", |
||||
|
"-day": "-ngày", |
||||
|
hour: "giờ", |
||||
|
"-hour": "-giờ", |
||||
|
Response: "Phản hồi", |
||||
|
Ping: "Ping", |
||||
|
"Monitor Type": "Kiểu monitor", |
||||
|
Keyword: "Từ khoá", |
||||
|
"Friendly Name": "Tên dễ hiểu", |
||||
|
URL: "URL", |
||||
|
Hostname: "Hostname", |
||||
|
Port: "Port", |
||||
|
"Heartbeat Interval": "Tần suất heartbeat", |
||||
|
Retries: "Thử lại", |
||||
|
"Heartbeat Retry Interval": "Tần suất thử lại của Heartbeat", |
||||
|
Advanced: "Nâng cao", |
||||
|
"Upside Down Mode": "Trạng thái đảo ngược", |
||||
|
"Max. Redirects": "Chuyển hướng tối đa", |
||||
|
"Accepted Status Codes": "Codes trạng thái chấp nhận", |
||||
|
Save: "Lưu", |
||||
|
Notifications: "Thông báo", |
||||
|
"Not available, please setup.": "Chưa sẵn sàng, hãy cài đặt.", |
||||
|
"Setup Notification": "Cài đặt thông báo", |
||||
|
Light: "Sáng", |
||||
|
Dark: "Tối", |
||||
|
Auto: "Tự động", |
||||
|
"Theme - Heartbeat Bar": "Theme - Heartbeat Bar", |
||||
|
Normal: "Bình thường", |
||||
|
Bottom: "Dưới", |
||||
|
None: "Không có", |
||||
|
Timezone: "Múi giờ", |
||||
|
"Search Engine Visibility": "Hiển thị với các công cụ tìm kiếm", |
||||
|
"Allow indexing": "Cho phép indexing", |
||||
|
"Discourage search engines from indexing site": "Ngăn chặn các công cụ tìm kiếm indexing trang", |
||||
|
"Change Password": "Thay đổi mật khẩu", |
||||
|
"Current Password": "Mật khẩu hiện tại", |
||||
|
"New Password": "Mật khẩu mới", |
||||
|
"Repeat New Password": "Lặp lại mật khẩu mới", |
||||
|
"Update Password": "Cập nhật mật khẩu", |
||||
|
"Disable Auth": "Tắt xác minh", |
||||
|
"Enable Auth": "Bật xác minh", |
||||
|
Logout: "Đăng xuất", |
||||
|
Leave: "Rời", |
||||
|
"I understand, please disable": "Tôi hiểu, làm ơn hãy tắt!", |
||||
|
Confirm: "Xác nhận", |
||||
|
Yes: "Có", |
||||
|
No: "Không", |
||||
|
Username: "Tài khoản", |
||||
|
Password: "Mật khẩu", |
||||
|
"Remember me": "Lưu phiên đăng nhập", |
||||
|
Login: "Đăng nhập", |
||||
|
"No Monitors, please": "Không có monitor nào", |
||||
|
"add one": "Thêm mới", |
||||
|
"Notification Type": "Kiểu thông báo", |
||||
|
Email: "Email", |
||||
|
Test: "Thử", |
||||
|
"Certificate Info": "Thông tin Certificate", |
||||
|
"Resolver Server": "Máy chủ Resolver", |
||||
|
"Resource Record Type": "Loại bản ghi", |
||||
|
"Last Result": "Kết quả cuối cùng", |
||||
|
"Create your admin account": "Tạo tài khoản quản trị", |
||||
|
"Repeat Password": "Lặp lại mật khẩu", |
||||
|
"Import Backup": "Khôi phục bản sao lưu", |
||||
|
"Export Backup": "Xuất bản sao lưu", |
||||
|
Export: "Xuất", |
||||
|
Import: "Khôi phục", |
||||
|
respTime: "Thời gian phản hồi (ms)", |
||||
|
notAvailableShort: "N/A", |
||||
|
"Default enabled": "Mặc định bật", |
||||
|
"Apply on all existing monitors": "Áp dụng cho tất cả monitor đang có", |
||||
|
Create: "Tạo", |
||||
|
"Clear Data": "Xoá dữ liệu", |
||||
|
Events: "Sự kiện", |
||||
|
Heartbeats: "Heartbeats", |
||||
|
"Auto Get": "Tự động lấy", |
||||
|
backupDescription: "Bạn có thể sao lưu tất cả các màn hình và tất cả các thông báo vào một file JSON.", |
||||
|
backupDescription2: "PS: Không bao gồm dữ liệu lịch sử các sự kiện.", |
||||
|
backupDescription3: "Hãy lưu giữ file này cẩn thận vì trong file đó chứa cả các mã token thông báo.", |
||||
|
alertNoFile: "Hãy chọn file để khôi phục.", |
||||
|
alertWrongFileType: "Hãy chọn file JSON.", |
||||
|
"Clear all statistics": "Xoá tất cả thống kê", |
||||
|
"Skip existing": "Skip existing", |
||||
|
Overwrite: "Ghi đè", |
||||
|
Options: "Tuỳ chọn", |
||||
|
"Keep both": "Giữ lại cả hai", |
||||
|
"Verify Token": "Xác minh Token", |
||||
|
"Setup 2FA": "Cài đặt 2FA", |
||||
|
"Enable 2FA": "Bật 2FA", |
||||
|
"Disable 2FA": "Tắt 2FA", |
||||
|
"2FA Settings": "Cài đặt 2FA", |
||||
|
"Two Factor Authentication": "Xác thực hai yếu tố", |
||||
|
Active: "Hoạt động", |
||||
|
Inactive: "Ngừng hoạt động", |
||||
|
Token: "Token", |
||||
|
"Show URI": "Hiển thị URI", |
||||
|
Tags: "Tags", |
||||
|
"Add New below or Select...": "Thêm mới ở dưới hoặc Chọn...", |
||||
|
"Tag with this name already exist.": "Tag với tên đã tồn tại.", |
||||
|
"Tag with this value already exist.": "Tag với value đã tồn tại.", |
||||
|
color: "Màu sắc", |
||||
|
"value (optional)": "Value (tuỳ chọn)", |
||||
|
Gray: "Xám", |
||||
|
Red: "Đỏ", |
||||
|
Orange: "Cam", |
||||
|
Green: "Xanh lá", |
||||
|
Blue: "Xanh da trời", |
||||
|
Indigo: "Chàm", |
||||
|
Purple: "Tím", |
||||
|
Pink: "Hồng", |
||||
|
"Search...": "Tìm kiếm...", |
||||
|
"Avg. Ping": "Ping Trung bình", |
||||
|
"Avg. Response": "Phản hồi trung bình", |
||||
|
"Entry Page": "Entry Page", |
||||
|
statusPageNothing: "Không có gì, hãy thêm nhóm monitor hoặc monitor.", |
||||
|
"No Services": "Không có dịch vụ", |
||||
|
"All Systems Operational": "Tất cả các hệ thống hoạt động", |
||||
|
"Partially Degraded Service": "Dịch vụ xuống cấp một phần", |
||||
|
"Degraded Service": "Degraded Service", |
||||
|
"Add Group": "Thêm nhóm", |
||||
|
"Add a monitor": "Thêm monitor", |
||||
|
"Edit Status Page": "Sửa trang trạng thái", |
||||
|
"Go to Dashboard": "Đi tới Dashboard", |
||||
|
"Status Page": "Trang trạng thái", |
||||
|
defaultNotificationName: "My {notification} Alerts ({number})", |
||||
|
here: "tại đây", |
||||
|
Required: "Bắt buộc", |
||||
|
telegram: "Telegram", |
||||
|
"Bot Token": "Bot Token", |
||||
|
"You can get a token from": "Bạn có thể lấy mã token từ", |
||||
|
"Chat ID": "Chat ID", |
||||
|
supportTelegramChatID: "Hỗ trợ chat trực tiếp / Nhóm / Kênh Chat ID", |
||||
|
wayToGetTelegramChatID: "Bạn có thể lấy chat id của mình bằng cách gửi tin nhắn tới bot và truy cập url này để xem chat_id:", |
||||
|
"YOUR BOT TOKEN HERE": "MÃ BOT TOKEN CỦA BẠN", |
||||
|
chatIDNotFound: "Không tìm thấy Chat ID, vui lòng gửi tin nhắn cho bot này trước", |
||||
|
webhook: "Webhook", |
||||
|
"Post URL": "URL đăng", |
||||
|
"Content Type": "Loại nội dung", |
||||
|
webhookJsonDesc: "{0} phù hợp với bất kỳ máy chủ http hiện đại nào như express.js", |
||||
|
webhookFormDataDesc: "{multipart} phù hợp với PHP, bạn chỉ cần phân tích cú pháp json bằng {decodeFunction}", |
||||
|
smtp: "Email (SMTP)", |
||||
|
secureOptionNone: "None / STARTTLS (25, 587)", |
||||
|
secureOptionTLS: "TLS (465)", |
||||
|
"Ignore TLS Error": "Bỏ qua lỗi TLS", |
||||
|
"From Email": "Từ Email", |
||||
|
"To Email": "Tới Email", |
||||
|
smtpCC: "CC", |
||||
|
smtpBCC: "BCC", |
||||
|
discord: "Discord", |
||||
|
"Discord Webhook URL": "Discord Webhook URL", |
||||
|
wayToGetDiscordURL: "Để lấy Discord, hãy vào: Server Settings -> Integrations -> Create Webhook", |
||||
|
"Bot Display Name": "Tên hiển thị của Bot", |
||||
|
"Prefix Custom Message": "Tiền tố tin nhắn tuỳ chọn", |
||||
|
"Hello @everyone is...": "Xin chào {'@'} mọi người đang...", |
||||
|
teams: "Microsoft Teams", |
||||
|
"Webhook URL": "Webhook URL", |
||||
|
wayToGetTeamsURL: "Bạn có thể học cách tạo webhook url {0}.", |
||||
|
signal: "Signal", |
||||
|
Number: "Số", |
||||
|
Recipients: "Người nhận", |
||||
|
needSignalAPI: "Bạn cần một tín hiệu client với REST API.", |
||||
|
wayToCheckSignalURL: "Bạn có thể kiểm tra url này để xem cách thiết lập:", |
||||
|
signalImportant: "QUAN TRỌNG: Bạn không thể kết hợp các nhóm và số trong người nhận!", |
||||
|
gotify: "Gotify", |
||||
|
"Application Token": "Mã Token ứng dụng", |
||||
|
"Server URL": "URL máy chủ", |
||||
|
Priority: "Mức ưu tiên", |
||||
|
slack: "Slack", |
||||
|
"Icon Emoji": "Icon Emoji", |
||||
|
"Channel Name": "Tên Channel", |
||||
|
"Uptime Kuma URL": "Uptime Kuma URL", |
||||
|
aboutWebhooks: "Thông tin thêm về webhook trên: {0}", |
||||
|
aboutChannelName: "Nhập tên kênh trên {0} trường Channel Name nếu bạn muốn bỏ qua kênh webhook. vd: #other-channel", |
||||
|
aboutKumaURL: "Nếu bạn để trống trường Uptime Kuma URL, mặc định sẽ là trang Project Github.", |
||||
|
emojiCheatSheet: "Bảng tra cứu Emoji: {0}", |
||||
|
"rocket.chat": "Rocket.chat", |
||||
|
pushover: "Pushover", |
||||
|
pushy: "Pushy", |
||||
|
octopush: "Octopush", |
||||
|
promosms: "PromoSMS", |
||||
|
lunasea: "LunaSea", |
||||
|
apprise: "Thông báo (Hỗ trợ 50+ dịch vụ thông báo)", |
||||
|
pushbullet: "Pushbullet", |
||||
|
line: "Line Messenger", |
||||
|
mattermost: "Mattermost", |
||||
|
"User Key": "User Key", |
||||
|
Device: "Thiết bị", |
||||
|
"Message Title": "Tiêu đề tin nhắn", |
||||
|
"Notification Sound": "Âm thanh thông báo", |
||||
|
"More info on:": "Thông tin chi tiết tại: {0}", |
||||
|
pushoverDesc1: "Mức ưu tiên khẩn cấp (2) có thời gian chờ mặc định là 30 giây giữa các lần thử lại và sẽ hết hạn sau 1 giờ.", |
||||
|
pushoverDesc2: "Nếu bạn muốn gửi thông báo đến các thiết bị khác nhau, hãy điền vào trường Thiết bị.", |
||||
|
"SMS Type": "SMS Type", |
||||
|
octopushTypePremium: "Premium (Nhanh - Khuyến nghị nên dùng cho cảnh báo)", |
||||
|
octopushTypeLowCost: "Giá rẻ (Chậm, thỉnh thoảng bị chặn)", |
||||
|
"Check octopush prices": "Kiểm tra giá octopush {0}.", |
||||
|
octopushPhoneNumber: "Số điện thoại (Định dạng intl, vd : +33612345678) ", |
||||
|
octopushSMSSender: "SMS người gửi : 3-11 ký tự chữ, số và dấu cách (a-zA-Z0-9)", |
||||
|
"LunaSea Device ID": "LunaSea ID thiết bị", |
||||
|
"Apprise URL": "Apprise URL", |
||||
|
"Example:": "Ví dụ: {0}", |
||||
|
"Read more:": "Đọc thêm: {0}", |
||||
|
"Status:": "Trạng thái: {0}", |
||||
|
"Read more": "Đọc thêm", |
||||
|
appriseInstalled: "Đã cài đặt Apprise.", |
||||
|
appriseNotInstalled: "Chưa cài đặt Apprise. {0}", |
||||
|
"Access Token": "Token truy cập", |
||||
|
"Channel access token": "Token kênh truy cập", |
||||
|
"Line Developers Console": "Line Developers Console", |
||||
|
lineDevConsoleTo: "Line Developers Console - {0}", |
||||
|
"Basic Settings": "Cài đặt cơ bản", |
||||
|
"User ID": "User ID", |
||||
|
"Messaging API": "Messaging API", |
||||
|
wayToGetLineChannelToken: "Trước tiên, hãy truy cập {0},tạo nhà cung cấp và kênh (Messaging API), sau đó bạn có thể nhận mã token truy cập kênh và id người dùng từ các mục menu được đề cập ở trên.", |
||||
|
"Icon URL": "Icon URL", |
||||
|
aboutIconURL: "Bạn có thể cung cấp liên kết đến ảnh trong \"Icon URL\" để ghi đè ảnh hồ sơ mặc định. Sẽ không được sử dụng nếu Biểu tượng cảm xúc được thiết lập.", |
||||
|
aboutMattermostChannelName: "Bạn có thể ghi đè kênh mặc định mà webhook đăng lên bằng cách nhập tên kênh vào trường \"Channel Name\". Điều này cần được bật trong cài đặt Mattermost webhook. Ví dụ: #other-channel", |
||||
|
matrix: "Matrix", |
||||
|
promosmsTypeEco: "SMS ECO - rẻ nhưng chậm và thường xuyên quá tải. Chỉ dành cho người Ba Lan.", |
||||
|
promosmsTypeFlash: "SMS FLASH - Tin nhắn sẽ tự động hiển thị trên thiết bị của người nhận. Chỉ dành cho người Ba Lan.", |
||||
|
promosmsTypeFull: "SMS FULL - SMS cao cấp, Bạn có thể sử dụng Tên Người gửi (Bạn cần đăng ký tên trước). Đáng tin cậy cho các cảnh báo.", |
||||
|
promosmsTypeSpeed: "SMS SPEED - Ưu tiên cao nhất trong hệ thống. Rất nhanh chóng và đáng tin cậy nhưng tốn kém, (giá gấp đôi SMS FULL).", |
||||
|
promosmsPhoneNumber: "Số điện thoại (Bỏ qua mã vùng với người Ba Lan)", |
||||
|
promosmsSMSSender: "SMS Tên người gửi: Tên đã đăng ký trước hoặc tên mặc định: InfoSMS, SMS Info, MaxSMS, INFO, SMS", |
||||
|
"Feishu WebHookUrl": "Feishu WebHookUrl", |
||||
|
}; |
@ -0,0 +1,310 @@ |
|||||
|
export default { |
||||
|
languageName: "繁體中文 (台灣)", |
||||
|
checkEverySecond: "每 {0} 秒檢查一次", |
||||
|
retryCheckEverySecond: "每 {0} 秒重試一次", |
||||
|
retriesDescription: "在服務被標記為離線並傳送通知前的最大重試次數", |
||||
|
ignoreTLSError: "忽略 HTTPS 網站的 TLS/SSL 錯誤", |
||||
|
upsideDownModeDescription: "反轉顯示狀態。若服務可以連線,將顯示離線。", |
||||
|
maxRedirectDescription: "最大重新導向跟隨次數。設為 0 將停用重新導向。", |
||||
|
acceptedStatusCodesDescription: "選擇視為成功回應的狀態碼。", |
||||
|
passwordNotMatchMsg: "密碼不相符。", |
||||
|
notificationDescription: "必須將通知指派給監測器才能運作。", |
||||
|
keywordDescription: "HTML 或 JSON 回應的搜尋關鍵字。區分大小寫。", |
||||
|
pauseDashboardHome: "暫停", |
||||
|
deleteMonitorMsg: "您確定要刪除此監測器嗎?", |
||||
|
deleteNotificationMsg: "您確定要為所有監測器刪除此通知嗎?", |
||||
|
resoverserverDescription: "Cloudflare 為預設伺服器。您可以隨時更換解析伺服器。", |
||||
|
rrtypeDescription: "選擇您想要監測的資源記錄", |
||||
|
pauseMonitorMsg: "您確定要暫停嗎?", |
||||
|
enableDefaultNotificationDescription: "預設情況下,新監測器將啟用此通知。您仍可分別停用各監測器的通知。", |
||||
|
clearEventsMsg: "您確定要刪除此監測器的所有事件嗎?", |
||||
|
clearHeartbeatsMsg: "您確定要刪除此監測器的所有心跳嗎?", |
||||
|
confirmClearStatisticsMsg: "您確定要刪除所有統計資料嗎?", |
||||
|
importHandleDescription: "若您想跳過所有相同名稱的監測器或通知,請選擇 '略過現有'。選擇 '覆寫' 將刪除所有現有的監測器及通知。", |
||||
|
confirmImportMsg: "您確定要匯入備份嗎?請確認是否選擇正確的匯入設定。", |
||||
|
twoFAVerifyLabel: "請輸入權杖以驗證雙步驟驗證:", |
||||
|
tokenValidSettingsMsg: "權杖有效!您可以儲存雙步驟驗證設定了。", |
||||
|
confirmEnableTwoFAMsg: "您確定要啟用雙步驟驗證嗎?", |
||||
|
confirmDisableTwoFAMsg: "您確定要停用雙步驟驗證嗎?", |
||||
|
Settings: "設定", |
||||
|
Dashboard: "儀表板", |
||||
|
"New Update": "新版本", |
||||
|
Language: "語言", |
||||
|
Appearance: "外觀", |
||||
|
Theme: "主題", |
||||
|
General: "一般", |
||||
|
"Primary Base URL": "主要基底 URL", |
||||
|
Version: "版本", |
||||
|
"Check Update On GitHub": "在 GitHub 檢查更新", |
||||
|
List: "清單", |
||||
|
Add: "新增", |
||||
|
"Add New Monitor": "新增監測器", |
||||
|
"Quick Stats": "狀態概覽", |
||||
|
Up: "正常", |
||||
|
Down: "離線", |
||||
|
Pending: "等待中", |
||||
|
Unknown: "未知", |
||||
|
Pause: "暫停", |
||||
|
Name: "名稱", |
||||
|
Status: "狀態", |
||||
|
DateTime: "日期時間", |
||||
|
Message: "訊息", |
||||
|
"No important events": "無重要事件", |
||||
|
Resume: "繼續", |
||||
|
Edit: "編輯", |
||||
|
Delete: "刪除", |
||||
|
Current: "目前", |
||||
|
Uptime: "運作率", |
||||
|
"Cert Exp.": "憑證期限", |
||||
|
days: "天", |
||||
|
day: "天", |
||||
|
"-day": "天", |
||||
|
hour: "小時", |
||||
|
"-hour": "小時", |
||||
|
Response: "回應", |
||||
|
Ping: "Ping", |
||||
|
"Monitor Type": "監測器類型", |
||||
|
Keyword: "關鍵字", |
||||
|
"Friendly Name": "易記名稱", |
||||
|
URL: "網址", |
||||
|
Hostname: "主機名稱", |
||||
|
Port: "連接埠", |
||||
|
"Heartbeat Interval": "心跳間隔", |
||||
|
Retries: "重試次數", |
||||
|
"Heartbeat Retry Interval": "心跳重試間隔", |
||||
|
Advanced: "進階", |
||||
|
"Upside Down Mode": "顛倒模式", |
||||
|
"Max. Redirects": "最大重新導向次數", |
||||
|
"Accepted Status Codes": "可接受的狀態碼", |
||||
|
"Push URL": "推送網址", |
||||
|
needPushEvery: "您應每 {0} 秒呼叫此網址。", |
||||
|
pushOptionalParams: "選填參數:{0}", |
||||
|
Save: "儲存", |
||||
|
Notifications: "通知", |
||||
|
"Not available, please setup.": "無法使用,請先設定。", |
||||
|
"Setup Notification": "設定通知", |
||||
|
Light: "亮色", |
||||
|
Dark: "深色", |
||||
|
Auto: "自動", |
||||
|
"Theme - Heartbeat Bar": "主題 - 心跳條", |
||||
|
Normal: "正常", |
||||
|
Bottom: "下方", |
||||
|
None: "無", |
||||
|
Timezone: "時區", |
||||
|
"Search Engine Visibility": "搜尋引擎可見度", |
||||
|
"Allow indexing": "允許索引", |
||||
|
"Discourage search engines from indexing site": "不建議搜尋引擎索引網頁", |
||||
|
"Change Password": "修改密碼", |
||||
|
"Current Password": "目前密碼", |
||||
|
"New Password": "新密碼", |
||||
|
"Repeat New Password": "確認新密碼", |
||||
|
"Update Password": "更新密碼", |
||||
|
"Disable Auth": "停用驗證", |
||||
|
"Enable Auth": "啟用驗證", |
||||
|
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": "憑證資訊", |
||||
|
"Resolver Server": "解析伺服器", |
||||
|
"Resource Record Type": "資源記錄類型", |
||||
|
"Last Result": "最後結果", |
||||
|
"Create your admin account": "建立您的管理員帳號", |
||||
|
"Repeat Password": "確認密碼", |
||||
|
"Import Backup": "匯入備份", |
||||
|
"Export Backup": "匯出備份", |
||||
|
Export: "匯出", |
||||
|
Import: "匯入", |
||||
|
respTime: "回應時間 (毫秒)", |
||||
|
notAvailableShort: "N/A", |
||||
|
"Default enabled": "啟用預設", |
||||
|
"Apply on all existing monitors": "套用到目前所有的監測器", |
||||
|
Create: "建立", |
||||
|
"Clear Data": "清除資料", |
||||
|
Events: "活動", |
||||
|
Heartbeats: "心跳", |
||||
|
"Auto Get": "自動取得", |
||||
|
backupDescription: "您可以將所有監測器及通知備份成一個 JSON 檔案。", |
||||
|
backupDescription2: "提醒:不包含歷史紀錄及活動紀錄。", |
||||
|
backupDescription3: "如通知權杖等機密資料也會一同匯出。請妥善保存。", |
||||
|
alertNoFile: "請選擇要匯入的檔案。", |
||||
|
alertWrongFileType: "請選擇 JSON 檔案。", |
||||
|
"Clear all statistics": "清除所有統計資料", |
||||
|
"Skip existing": "略過現有", |
||||
|
Overwrite: "覆寫", |
||||
|
Options: "選項", |
||||
|
"Keep both": "保留兩者", |
||||
|
"Verify Token": "認證權杖", |
||||
|
"Setup 2FA": "設置雙步驟驗證", |
||||
|
"Enable 2FA": "啟用雙步驟驗證", |
||||
|
"Disable 2FA": "停用雙步驟驗證", |
||||
|
"2FA Settings": "雙步驟驗證設定", |
||||
|
"Two Factor Authentication": "雙步驟驗證", |
||||
|
Active: "啟用", |
||||
|
Inactive: "停用", |
||||
|
Token: "權杖", |
||||
|
"Show URI": "顯示 URI", |
||||
|
Tags: "標籤", |
||||
|
"Add New below or Select...": "在下方新增或選取...", |
||||
|
"Tag with this name already exist.": "已存在相同名稱的標籤。", |
||||
|
"Tag with this value already exist.": "已存在相同數值的標籤。", |
||||
|
color: "顏色", |
||||
|
"value (optional)": "數值 (選填)", |
||||
|
Gray: "灰色", |
||||
|
Red: "紅色", |
||||
|
Orange: "橘色", |
||||
|
Green: "綠色", |
||||
|
Blue: "藍色", |
||||
|
Indigo: "靛色", |
||||
|
Purple: "紫色", |
||||
|
Pink: "粉色", |
||||
|
"Search...": "搜尋...", |
||||
|
"Avg. Ping": "平均 Ping", |
||||
|
"Avg. Response": "平均回應", |
||||
|
"Entry Page": "入口頁面", |
||||
|
statusPageNothing: "空空如也,請新增群組或監測器。", |
||||
|
"No Services": "無服務", |
||||
|
"All Systems Operational": "所有系統正常運作", |
||||
|
"Partially Degraded Service": "部分服務效能降低", |
||||
|
"Degraded Service": "服務效能降低", |
||||
|
"Add Group": "新增群組", |
||||
|
"Add a monitor": "加入監測器", |
||||
|
"Edit Status Page": "編輯狀態頁", |
||||
|
"Go to Dashboard": "前往儀表板", |
||||
|
"Status Page": "狀態頁", |
||||
|
defaultNotificationName: "我的 {notification} 通知 ({number})", |
||||
|
here: "此處", |
||||
|
Required: "必填", |
||||
|
telegram: "Telegram", |
||||
|
"Bot Token": "機器人權杖", |
||||
|
wayToGetTelegramToken: "您可以從 {0} 取得權杖。", |
||||
|
"Chat ID": "聊天 ID", |
||||
|
supportTelegramChatID: "支援 對話/群組/頻道的聊天 ID", |
||||
|
wayToGetTelegramChatID: "傳送訊息給機器人,並前往以下網址以取得您的 chat ID:", |
||||
|
"YOUR BOT TOKEN HERE": "在此填入您的機器人權杖", |
||||
|
chatIDNotFound: "找不到 Chat ID;請先傳送訊息給機器人", |
||||
|
webhook: "Webhook", |
||||
|
"Post URL": "Post 網址", |
||||
|
"Content Type": "內容類型", |
||||
|
webhookJsonDesc: "{0} 適合任何現代的 HTTP 伺服器,如 Express.js", |
||||
|
webhookFormDataDesc: "{multipart} 適合 PHP。 JSON 必須先經由 {decodeFunction} 剖析。", |
||||
|
smtp: "Email (SMTP)", |
||||
|
secureOptionNone: "無 / STARTTLS (25, 587)", |
||||
|
secureOptionTLS: "TLS (465)", |
||||
|
"Ignore TLS Error": "忽略 TLS 錯誤", |
||||
|
"From Email": "寄件人", |
||||
|
emailCustomSubject: "自訂主旨", |
||||
|
"To Email": "收件人", |
||||
|
smtpCC: "CC", |
||||
|
smtpBCC: "BCC", |
||||
|
discord: "Discord", |
||||
|
"Discord Webhook URL": "Discord Webhook 網址", |
||||
|
wayToGetDiscordURL: "您可以前往伺服器設定 -> 整合 -> Webhook -> 新 Webhook 以取得", |
||||
|
"Bot Display Name": "機器人顯示名稱", |
||||
|
"Prefix Custom Message": "前綴自訂訊息", |
||||
|
"Hello @everyone is...": "Hello {'@'}everyone is...", |
||||
|
teams: "Microsoft Teams", |
||||
|
"Webhook URL": "Webhook 網址", |
||||
|
wayToGetTeamsURL: "您可以前往此頁面以了解如何建立 Webhook 網址 {0}。", |
||||
|
signal: "Signal", |
||||
|
Number: "號碼", |
||||
|
Recipients: "收件人", |
||||
|
needSignalAPI: "您需要有 REST API 的 Signal 客戶端。", |
||||
|
wayToCheckSignalURL: "您可以前往下列網址以了解如何設定:", |
||||
|
signalImportant: "注意: 不得混合收件人的群組和號碼!", |
||||
|
gotify: "Gotify", |
||||
|
"Application Token": "應用程式權杖", |
||||
|
"Server URL": "伺服器網址", |
||||
|
Priority: "優先度", |
||||
|
slack: "Slack", |
||||
|
"Icon Emoji": "Emoji 圖示", |
||||
|
"Channel Name": "頻道名稱", |
||||
|
"Uptime Kuma URL": "Uptime Kuma 網址", |
||||
|
aboutWebhooks: "更多關於 Webhook 的資訊: {0}", |
||||
|
aboutChannelName: "如果您不想使用 Webhook 頻道,請在 {0} 頻道名稱欄位填入您想使用的頻道。例如: #其他頻道", |
||||
|
aboutKumaURL: "如果您未填入 Uptime Kuma 網址。將預設使用專案 Github 頁面。", |
||||
|
emojiCheatSheet: "Emoji 一覽表: {0}", |
||||
|
"rocket.chat": "Rocket.Chat", |
||||
|
pushover: "Pushover", |
||||
|
pushy: "Pushy", |
||||
|
octopush: "Octopush", |
||||
|
promosms: "PromoSMS", |
||||
|
clicksendsms: "ClickSend SMS", |
||||
|
lunasea: "LunaSea", |
||||
|
apprise: "Apprise (支援 50 種以上的通知服務)", |
||||
|
pushbullet: "Pushbullet", |
||||
|
line: "Line Messenger", |
||||
|
mattermost: "Mattermost", |
||||
|
"User Key": "使用者金鑰", |
||||
|
Device: "裝置", |
||||
|
"Message Title": "訊息標題", |
||||
|
"Notification Sound": "通知音效", |
||||
|
"More info on:": "更多資訊: {0}", |
||||
|
pushoverDesc1: "緊急優先度 (2) 的重試間隔為 30 秒並且會在 1 小時後過期。", |
||||
|
pushoverDesc2: "如果您想要傳送通知到不同裝置,請填寫裝置欄位。", |
||||
|
"SMS Type": "簡訊類型", |
||||
|
octopushTypePremium: "Premium (快速 - 建議用於警報)", |
||||
|
octopushTypeLowCost: "Low Cost (緩慢 - 有時會被營運商阻擋)", |
||||
|
checkPrice: "查看 {0} 價格:", |
||||
|
apiCredentials: "API 認證", |
||||
|
octopushLegacyHint: "您使用的是舊版的 Octopush (2011-2020) 還是新版?", |
||||
|
"Check octopush prices": "查看 octopush 價格 {0}。", |
||||
|
octopushPhoneNumber: "電話號碼 (intl 格式,例如:+33612345678) ", |
||||
|
octopushSMSSender: "簡訊寄件人名稱:3-11位英數字元及空白 (a-zA-Z0-9)", |
||||
|
"LunaSea Device ID": "LunaSea 裝置 ID", |
||||
|
"Apprise URL": "Apprise 網址", |
||||
|
"Example:": "範例:{0}", |
||||
|
"Read more:": "深入瞭解:{0}", |
||||
|
"Status:": "狀態:{0}", |
||||
|
"Read more": "深入瞭解", |
||||
|
appriseInstalled: "已安裝 Apprise。", |
||||
|
appriseNotInstalled: "尚未安裝 Apprise。{0}", |
||||
|
"Access Token": "存取權杖", |
||||
|
"Channel access token": "頻道存取權杖", |
||||
|
"Line Developers Console": "Line 開發者控制台", |
||||
|
lineDevConsoleTo: "Line 開發者控制台 - {0}", |
||||
|
"Basic Settings": "基本設定", |
||||
|
"User ID": "使用者 ID", |
||||
|
"Messaging API": "Messaging API", |
||||
|
wayToGetLineChannelToken: "首先,前往 {0},建立 provider 和 channel (Messaging API)。接著您就可以從上面提到的選單項目中取得頻道存取權杖及使用者 ID。", |
||||
|
"Icon URL": "圖示網址", |
||||
|
aboutIconURL: "您可以在 \"圖示網址\" 中提供圖片網址以覆蓋預設個人檔案圖片。若已設定 Emoji 圖示,將忽略此設定。", |
||||
|
aboutMattermostChannelName: "您可以在 \"頻道名稱\" 欄位中填寫頻道名稱以覆蓋 Webhook 的預設頻道。必須在 Mattermost 的 Webhook 設定中啟用。例如:#其他頻道", |
||||
|
matrix: "Matrix", |
||||
|
promosmsTypeEco: "SMS ECO - 便宜,但是很慢且經常過載。僅限位於波蘭的收件人。", |
||||
|
promosmsTypeFlash: "SMS FLASH - 訊息會自動在收件人的裝置上顯示。僅限位於波蘭的收件人。", |
||||
|
promosmsTypeFull: "SMS FULL - 高級版,您可以使用您的寄件人名稱 (必須先註冊名稱。對於警報來說十分可靠。", |
||||
|
promosmsTypeSpeed: "SMS SPEED - 系統中的最高優先度。快速、可靠,但昂貴 (約 SMS FULL 的兩倍價格)。", |
||||
|
promosmsPhoneNumber: "電話號碼 (若收件人位於波蘭則無需輸入區域代碼)", |
||||
|
promosmsSMSSender: "簡訊寄件人名稱:預先註冊的名稱或以下的預設名稱:InfoSMS、SMS Info、MaxSMS、INFO、SMS", |
||||
|
"Feishu WebHookUrl": "飛書 WebHook 網址", |
||||
|
matrixHomeserverURL: "Homeserver 網址 (開頭為 http(s)://,結尾可能帶連接埠)", |
||||
|
"Internal Room Id": "Internal Room ID", |
||||
|
matrixDesc1: "您可以在 Matrix 客戶端的房間設定中的進階選項找到 internal room ID。應該看起來像 !QMdRCpUIfLwsfjxye6:home.server。", |
||||
|
matrixDesc2: "使用您自己的 Matrix 使用者存取權杖將賦予存取您的帳號和您加入的房間的完整權限。建議建立新使用者,並邀請至您想要接收通知的房間中。您可以執行 {0} 以取得存取權杖", |
||||
|
Method: "方法", |
||||
|
Body: "主體", |
||||
|
Headers: "標頭", |
||||
|
PushUrl: "Push URL", |
||||
|
HeadersInvalidFormat: "要求標頭不是有效的 JSON:", |
||||
|
BodyInvalidFormat: "請求主體不是有效的 JSON:", |
||||
|
"Monitor History": "監測器歷史紀錄", |
||||
|
clearDataOlderThan: "保留 {0} 天內的監測器歷史紀錄。", |
||||
|
PasswordsDoNotMatch: "密碼不相符。", |
||||
|
records: "記錄", |
||||
|
"One record": "一項記錄", |
||||
|
"Showing {from} to {to} of {count} records": "正在顯示 {count} 項記錄中的 {from} 至 {to} 項", |
||||
|
steamApiKeyDescription: "若要監測 Steam 遊戲伺服器,您將需要 Steam Web-API 金鑰。您可以在此註冊您的 API 金鑰:", |
||||
|
"Current User": "目前使用者", |
||||
|
}; |
Loading…
Reference in new issue