96 files changed
+7289
-2502
No files matched your search
@@ -1,45 +1,60 @@
|
||||
import axios from 'axios';
|
||||
import fs from 'fs-extra';
|
||||
import path from 'path';
|
||||
import { URLSearchParams } from 'url';
|
||||
import axios from "axios";
|
||||
import fs from "fs-extra";
|
||||
import path from "path";
|
||||
import { URLSearchParams } from "url";
|
||||
|
||||
// POEditor API information
|
||||
const API_TOKEN = process.env.POEDITOR_API;
|
||||
const PROJECT_ID = process.env.POEDITOR_PROJECT_ID;
|
||||
const LANGUAGES = (process.env.LANGUAGES || 'tr,en').split(',');
|
||||
const EXPORT_FORMAT = process.env.EXPORT_FORMAT || 'key_value_json';
|
||||
const LANGUAGES = (process.env.LANGUAGES || "tr,en").split(",");
|
||||
const EXPORT_FORMAT = process.env.EXPORT_FORMAT || "key_value_json";
|
||||
|
||||
// POEditor API endpoint
|
||||
const API_URL = 'https://api.poeditor.com/v2';
|
||||
const API_URL = "https://api.poeditor.com/v2";
|
||||
|
||||
function normalizeLanguageCode(language) {
|
||||
if (language.includes("-")) {
|
||||
const [base, region] = language.split("-");
|
||||
return `${base}-${region.toUpperCase()}`;
|
||||
}
|
||||
return language;
|
||||
}
|
||||
|
||||
// Function to download translations
|
||||
async function downloadTranslations() {
|
||||
try {
|
||||
console.log('Downloading translations from POEditor...');
|
||||
console.log("Downloading translations from POEditor...");
|
||||
console.log(`Using export format: ${EXPORT_FORMAT}`);
|
||||
|
||||
for (const language of LANGUAGES) {
|
||||
console.log(`Downloading translations for ${language} language...`);
|
||||
|
||||
// Get export URL from POEditor
|
||||
const exportResponse = await axios.post(`${API_URL}/projects/export`,
|
||||
const exportResponse = await axios.post(
|
||||
`${API_URL}/projects/export`,
|
||||
new URLSearchParams({
|
||||
api_token: API_TOKEN,
|
||||
id: PROJECT_ID,
|
||||
language: language,
|
||||
type: EXPORT_FORMAT
|
||||
type: EXPORT_FORMAT,
|
||||
})
|
||||
);
|
||||
|
||||
if (exportResponse.data.response.status !== 'success') {
|
||||
throw new Error(`Failed to get export URL for ${language} language: ${JSON.stringify(exportResponse.data)}`);
|
||||
if (exportResponse.data.response.status !== "success") {
|
||||
throw new Error(
|
||||
`Failed to get export URL for ${language} language: ${JSON.stringify(
|
||||
exportResponse.data
|
||||
)}`
|
||||
);
|
||||
}
|
||||
|
||||
const fileUrl = exportResponse.data.result.url;
|
||||
console.log(`Export URL obtained for ${language}`);
|
||||
|
||||
// Download translation file
|
||||
const downloadResponse = await axios.get(fileUrl, { responseType: 'json' });
|
||||
const downloadResponse = await axios.get(fileUrl, {
|
||||
responseType: "json",
|
||||
});
|
||||
const translations = downloadResponse.data;
|
||||
console.log(`Downloaded translations for ${language}`);
|
||||
|
||||
@@ -48,9 +63,11 @@ async function downloadTranslations() {
|
||||
|
||||
// If data is in array format, convert it to key-value format
|
||||
if (Array.isArray(translations)) {
|
||||
console.log(`Converting array format to key-value format for ${language}`);
|
||||
console.log(
|
||||
`Converting array format to key-value format for ${language}`
|
||||
);
|
||||
formattedTranslations = {};
|
||||
translations.forEach(item => {
|
||||
translations.forEach((item) => {
|
||||
if (item.term && item.definition) {
|
||||
formattedTranslations[item.term] = item.definition;
|
||||
}
|
||||
@@ -58,16 +75,19 @@ async function downloadTranslations() {
|
||||
}
|
||||
|
||||
// Determine the output filename based on language
|
||||
const filename = language === 'en' ? 'gb.json' : `${language}.json`;
|
||||
const outputPath = path.join(process.cwd(), 'temp', filename);
|
||||
const normalizedLanguage = normalizeLanguageCode(language);
|
||||
const filename = `${normalizedLanguage}.json`;
|
||||
const outputPath = path.join(process.cwd(), "temp", filename);
|
||||
await fs.writeJson(outputPath, formattedTranslations, { spaces: 2 });
|
||||
|
||||
console.log(`Translations for ${language} language successfully downloaded and saved as: ${filename}`);
|
||||
console.log(
|
||||
`Translations for ${language} language successfully downloaded and saved as: ${filename}`
|
||||
);
|
||||
}
|
||||
|
||||
console.log('All translations successfully downloaded!');
|
||||
console.log("All translations successfully downloaded!");
|
||||
} catch (error) {
|
||||
console.error('An error occurred while downloading translations:', error);
|
||||
console.error("An error occurred while downloading translations:", error);
|
||||
process.exit(1);
|
||||
}
|
||||
}
|
||||
@@ -76,15 +96,15 @@ async function downloadTranslations() {
|
||||
async function main() {
|
||||
try {
|
||||
// Clean temp folder
|
||||
await fs.emptyDir(path.join(process.cwd(), 'temp'));
|
||||
await fs.emptyDir(path.join(process.cwd(), "temp"));
|
||||
|
||||
// Download translations
|
||||
await downloadTranslations();
|
||||
} catch (error) {
|
||||
console.error('An error occurred during the process:', error);
|
||||
console.error("An error occurred during the process:", error);
|
||||
process.exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
// Run script
|
||||
main();
|
||||
main();
|
||||
@@ -7,13 +7,12 @@ on:
|
||||
languages:
|
||||
description: "Languages to synchronize (comma separated, e.g.: tr,en,es)"
|
||||
required: false
|
||||
default: "tr,en"
|
||||
default: "ar,zh-tw,cs,en,fi,fr,de,pt-br,ru,es,tr"
|
||||
format:
|
||||
description: "Export format (key_value_json or json)"
|
||||
required: false
|
||||
default: "key_value_json"
|
||||
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
pull-requests: write
|
||||
@@ -93,6 +92,12 @@ jobs:
|
||||
id: date
|
||||
run: echo "date=$(date +'%Y-%m-%d %H:%M:%S')" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Format client code
|
||||
run: |
|
||||
cd client
|
||||
npm ci
|
||||
npm run format
|
||||
|
||||
- name: Create Pull Request
|
||||
uses: peter-evans/create-pull-request@v7
|
||||
with:
|
||||
|
||||
@@ -56,7 +56,7 @@ If you have any questions, suggestions or comments, please use our [Discord chan
|
||||
|
||||
## 🧩 Features
|
||||
|
||||
- Completely open source, deployable on your servers
|
||||
- Completely open source, deployable on your servers or home devices (e.g Raspberry Pi 4 or 5)
|
||||
- Website monitoring
|
||||
- Page speed monitoring
|
||||
- Infrastructure monitoring (memory, disk usage, CPU performance etc) - requires [Capture](https://github.com/bluewave-labs/capture)
|
||||
@@ -65,18 +65,17 @@ If you have any questions, suggestions or comments, please use our [Discord chan
|
||||
- SSL monitoring
|
||||
- Port monitoring
|
||||
- Incidents at a glance
|
||||
- E-mail notifications
|
||||
- Status pages
|
||||
- E-mail, Webhooks, Discord, Telegram, Slack notifications
|
||||
- Scheduled maintenance
|
||||
- JSON query monitoring
|
||||
- Support for multiple languages
|
||||
|
||||
**Short term roadmap:**
|
||||
**Short term roadmap:** ([Milestone 2.2](https://github.com/bluewave-labs/Checkmate/milestone/8))
|
||||
|
||||
- Status pages (**in progress**) https://github.com/bluewave-labs/Checkmate/issues/1131
|
||||
- Translations (i18n) (**in progress**)
|
||||
- Better notification options (Webhooks, Discord, Telegram, Slack) (**in progress**) https://github.com/bluewave-labs/Checkmate/issues/1545
|
||||
- JSON query monitoring (**in progress**) https://github.com/bluewave-labs/Checkmate/issues/1573
|
||||
- Tagging/grouping monitors https://github.com/bluewave-labs/Checkmate/issues/1546
|
||||
- More configuration options
|
||||
- DNS monitoring
|
||||
- Better notifications
|
||||
- Network monitoring
|
||||
- ..and a few more features
|
||||
|
||||
## 🏗️ Screenshots
|
||||
|
||||
@@ -108,9 +107,9 @@ If you have any questions, suggestions or comments, please use our [Discord chan
|
||||
|
||||
## 🤝 Contributing
|
||||
|
||||
We are [Alex](http://github.com/ajhollid) (team lead), [Vishnu](http://github.com/vishnusn77), [Mohadeseh](http://github.com/mohicody), [Gorkem](http://github.com/gorkem-bwl/), [Owaise](http://github.com/Owaiseimdad), [Aryaman](https://github.com/Br0wnHammer) and [Mert](https://github/com/mertssmnoglu) helping individuals and businesses monitor their infra and servers.
|
||||
We are [Alex](http://github.com/ajhollid) (team lead), [Vishnu](http://github.com/vishnusn77), [Mohadeseh](http://github.com/mohicody), [Gorkem](http://github.com/gorkem-bwl/), [Owaise](http://github.com/Owaiseimdad), [Aryaman](https://github.com/Br0wnHammer) and [Mert](https://github.com/mertssmnoglu) helping individuals and businesses monitor their infra and servers.
|
||||
|
||||
We pride ourselves on building strong connections with contributors at every level. Despite being a young project, Checkmate has already earned 5000+ stars and attracted 60 contributors from around the globe.
|
||||
We pride ourselves on building strong connections with contributors at every level. Despite being a young project, Checkmate has already earned 5800+ stars and attracted 70+ contributors from around the globe.
|
||||
|
||||
Our repo is starred by employees from **Google, Microsoft, Intel, Cisco, Tencent, Electronic Arts, ByteDance, JP Morgan Chase, Deloitte, Accenture, Foxconn, Broadcom, China Telecom, Barclays, Capgemini, Wipro, Cloudflare, Dassault Systèmes and NEC**, so don’t hold back — jump in, contribute and learn with us!
|
||||
|
||||
|
||||
@@ -1,2 +1 @@
|
||||
|
||||
This directory contains the client side (frontend) of Checkmate.
|
||||
+20
-13
@@ -1,17 +1,24 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<link
|
||||
rel="icon"
|
||||
href="./checkmate_favicon.svg"
|
||||
/>
|
||||
<meta
|
||||
name="viewport"
|
||||
content="width=device-width, initial-scale=1.0"
|
||||
/>
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<link rel="icon" href="./checkmate_favicon.svg" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>Checkmate</title>
|
||||
</head>
|
||||
|
||||
<title>Checkmate</title>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div id="root"></div>
|
||||
<script type="module" src="/src/main.jsx"></script>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
<body>
|
||||
<div id="root"></div>
|
||||
<script
|
||||
type="module"
|
||||
src="/src/main.jsx"
|
||||
></script>
|
||||
</body>
|
||||
</html>
|
||||
+3
-1
@@ -8,7 +8,9 @@
|
||||
"build": "vite build",
|
||||
"build-dev": "vite build --mode development",
|
||||
"lint": "eslint . --ext js,jsx --report-unused-disable-directives --max-warnings 0",
|
||||
"preview": "vite preview"
|
||||
"preview": "vite preview",
|
||||
"format": "prettier --write .",
|
||||
"format-check": "prettier --check ."
|
||||
},
|
||||
"dependencies": {
|
||||
"@emotion/react": "^11.13.3",
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
{
|
||||
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
|
||||
"extends": [
|
||||
"config:recommended"
|
||||
],
|
||||
"labels": ["dependencies"]
|
||||
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
|
||||
"extends": ["config:recommended"],
|
||||
"labels": ["dependencies"]
|
||||
}
|
||||
@@ -3,28 +3,28 @@ import Button from "@mui/material/Button";
|
||||
import { styled } from "@mui/material/styles";
|
||||
|
||||
const RoundGradientButton = styled(Button)(({ theme }) => ({
|
||||
position: "relative",
|
||||
border: "5px solid transparent",
|
||||
backgroundClip: "padding-box",
|
||||
borderRadius: 30,
|
||||
fontSize: "1.2rem",
|
||||
color: theme.palette.primary.contrastText,
|
||||
backgroundColor: theme.palette.background.main,
|
||||
position: "relative",
|
||||
border: "5px solid transparent",
|
||||
backgroundClip: "padding-box",
|
||||
borderRadius: 30,
|
||||
fontSize: "1.2rem",
|
||||
color: theme.palette.primary.contrastText,
|
||||
backgroundColor: theme.palette.background.main,
|
||||
|
||||
"&:after": {
|
||||
position: "absolute",
|
||||
top: -3,
|
||||
left: -3,
|
||||
right: -3,
|
||||
bottom: -3,
|
||||
background:
|
||||
theme.palette.mode === "dark"
|
||||
? "linear-gradient(90deg, #842bd2, #ff5451, #8c52ff)"
|
||||
: "linear-gradient(90deg, #842bd2, #ff5451, #8c52ff)",
|
||||
content: '""',
|
||||
zIndex: -1,
|
||||
borderRadius: 30,
|
||||
},
|
||||
"&:after": {
|
||||
position: "absolute",
|
||||
top: -3,
|
||||
left: -3,
|
||||
right: -3,
|
||||
bottom: -3,
|
||||
background:
|
||||
theme.palette.mode === "dark"
|
||||
? "linear-gradient(90deg, #842bd2, #ff5451, #8c52ff)"
|
||||
: "linear-gradient(90deg, #842bd2, #ff5451, #8c52ff)",
|
||||
content: '""',
|
||||
zIndex: -1,
|
||||
borderRadius: 30,
|
||||
},
|
||||
}));
|
||||
|
||||
export default RoundGradientButton;
|
||||
@@ -31,78 +31,76 @@ import IconBox from "../../IconBox";
|
||||
*/
|
||||
|
||||
const EmptyView = ({
|
||||
icon,
|
||||
header,
|
||||
message = "No Data",
|
||||
headingLevel = "h2",
|
||||
justifyContent = "flex-start",
|
||||
height = "100%"
|
||||
icon,
|
||||
header,
|
||||
message = "No Data",
|
||||
headingLevel = "h2",
|
||||
justifyContent = "flex-start",
|
||||
height = "100%",
|
||||
}) => {
|
||||
const theme = useTheme();
|
||||
return (
|
||||
<Stack
|
||||
flex={1}
|
||||
direction="row"
|
||||
sx={{
|
||||
backgroundColor: theme.palette.primary.main,
|
||||
const theme = useTheme();
|
||||
return (
|
||||
<Stack
|
||||
flex={1}
|
||||
direction="row"
|
||||
sx={{
|
||||
backgroundColor: theme.palette.primary.main,
|
||||
|
||||
border: 1,
|
||||
borderStyle: "solid",
|
||||
borderColor: theme.palette.primary.lowContrast,
|
||||
borderRadius: 2,
|
||||
borderTopRightRadius: 4,
|
||||
borderBottomRightRadius: 4,
|
||||
}}
|
||||
>
|
||||
<Stack
|
||||
flex={1}
|
||||
alignItems="center"
|
||||
sx={{
|
||||
padding: theme.spacing(8),
|
||||
justifyContent,
|
||||
gap: theme.spacing(8),
|
||||
height,
|
||||
"& h2": {
|
||||
color: theme.palette.primary.contrastTextSecondary,
|
||||
fontSize: 15,
|
||||
fontWeight: 500,
|
||||
},
|
||||
border: 1,
|
||||
borderStyle: "solid",
|
||||
borderColor: theme.palette.primary.lowContrast,
|
||||
borderRadius: 2,
|
||||
borderTopRightRadius: 4,
|
||||
borderBottomRightRadius: 4,
|
||||
}}
|
||||
>
|
||||
<Stack
|
||||
flex={1}
|
||||
alignItems="center"
|
||||
sx={{
|
||||
padding: theme.spacing(8),
|
||||
justifyContent,
|
||||
gap: theme.spacing(8),
|
||||
height,
|
||||
"& h2": {
|
||||
color: theme.palette.primary.contrastTextSecondary,
|
||||
fontSize: 15,
|
||||
fontWeight: 500,
|
||||
},
|
||||
|
||||
"& tspan, & text": {
|
||||
fill: theme.palette.primary.contrastTextTertiary,
|
||||
},
|
||||
}}
|
||||
>
|
||||
<Stack
|
||||
alignSelf="flex-start"
|
||||
direction="row"
|
||||
alignItems="center"
|
||||
gap={theme.spacing(6)}
|
||||
>
|
||||
{icon && <IconBox>{icon}</IconBox>}
|
||||
{header && <Typography component="h2">{header}</Typography>}
|
||||
</Stack>
|
||||
<Stack
|
||||
flex={1}
|
||||
justifyContent="center"
|
||||
alignItems="center"
|
||||
>
|
||||
<Typography component={headingLevel}>
|
||||
{message}
|
||||
</Typography>
|
||||
</Stack>
|
||||
</Stack>
|
||||
</Stack>
|
||||
);
|
||||
"& tspan, & text": {
|
||||
fill: theme.palette.primary.contrastTextTertiary,
|
||||
},
|
||||
}}
|
||||
>
|
||||
<Stack
|
||||
alignSelf="flex-start"
|
||||
direction="row"
|
||||
alignItems="center"
|
||||
gap={theme.spacing(6)}
|
||||
>
|
||||
{icon && <IconBox>{icon}</IconBox>}
|
||||
{header && <Typography component="h2">{header}</Typography>}
|
||||
</Stack>
|
||||
<Stack
|
||||
flex={1}
|
||||
justifyContent="center"
|
||||
alignItems="center"
|
||||
>
|
||||
<Typography component={headingLevel}>{message}</Typography>
|
||||
</Stack>
|
||||
</Stack>
|
||||
</Stack>
|
||||
);
|
||||
};
|
||||
|
||||
EmptyView.propTypes = {
|
||||
message: PropTypes.string,
|
||||
icon: PropTypes.node,
|
||||
header: PropTypes.string,
|
||||
headingLevel: PropTypes.oneOf(['h1', 'h2', 'h3']),
|
||||
justifyContent: PropTypes.string,
|
||||
height: PropTypes.string
|
||||
message: PropTypes.string,
|
||||
icon: PropTypes.node,
|
||||
header: PropTypes.string,
|
||||
headingLevel: PropTypes.oneOf(["h1", "h2", "h3"]),
|
||||
justifyContent: PropTypes.string,
|
||||
height: PropTypes.string,
|
||||
};
|
||||
|
||||
export default EmptyView;
|
||||
@@ -18,7 +18,13 @@ const ChartBox = ({
|
||||
}) => {
|
||||
const theme = useTheme();
|
||||
if (isEmpty) {
|
||||
return <EmptyView icon={icon} header={header} message={noDataMessage} />;
|
||||
return (
|
||||
<EmptyView
|
||||
icon={icon}
|
||||
header={header}
|
||||
message={noDataMessage}
|
||||
/>
|
||||
);
|
||||
}
|
||||
return (
|
||||
<Stack
|
||||
@@ -95,5 +101,5 @@ ChartBox.propTypes = {
|
||||
header: PropTypes.string,
|
||||
height: PropTypes.string,
|
||||
noDataMessage: PropTypes.string,
|
||||
isEmpty: PropTypes.bool
|
||||
isEmpty: PropTypes.bool,
|
||||
};
|
||||
@@ -1,214 +1,255 @@
|
||||
import * as React from 'react';
|
||||
import Box from '@mui/material/Box';
|
||||
import Container from '@mui/material/Container';
|
||||
import IconButton from '@mui/material/IconButton';
|
||||
import Link from '@mui/material/Link';
|
||||
import Stack from '@mui/material/Stack';
|
||||
import Typography from '@mui/material/Typography';
|
||||
import { FaFacebook, FaLinkedin, FaGithub, FaTwitter, FaEnvelope } from 'react-icons/fa';
|
||||
|
||||
import * as React from "react";
|
||||
import Box from "@mui/material/Box";
|
||||
import Container from "@mui/material/Container";
|
||||
import IconButton from "@mui/material/IconButton";
|
||||
import Link from "@mui/material/Link";
|
||||
import Stack from "@mui/material/Stack";
|
||||
import Typography from "@mui/material/Typography";
|
||||
import { FaFacebook, FaLinkedin, FaGithub, FaTwitter, FaEnvelope } from "react-icons/fa";
|
||||
|
||||
function Copyright() {
|
||||
return (
|
||||
<Typography sx={{ color: 'text.secondary', mt: 1 }}>
|
||||
{'Copyright © '}
|
||||
<Link color="text.secondary" href="https://prism.uprock.com/">
|
||||
UpRock
|
||||
</Link>
|
||||
|
||||
{new Date().getFullYear()}
|
||||
</Typography>
|
||||
);
|
||||
return (
|
||||
<Typography sx={{ color: "text.secondary", mt: 1 }}>
|
||||
{"Copyright © "}
|
||||
<Link
|
||||
color="text.secondary"
|
||||
href="https://prism.uprock.com/"
|
||||
>
|
||||
UpRock
|
||||
</Link>
|
||||
|
||||
{new Date().getFullYear()}
|
||||
</Typography>
|
||||
);
|
||||
}
|
||||
|
||||
export default function Footer() {
|
||||
return (
|
||||
<Container
|
||||
sx={{
|
||||
display: 'flex',
|
||||
flexDirection: 'column',
|
||||
alignItems: 'center',
|
||||
gap: { xs: 4, sm: 8 },
|
||||
py: { xs: 24, sm: 24 },
|
||||
px: { xs: 12, sm: 12 },
|
||||
textAlign: { sm: 'center', md: 'left' },
|
||||
}}
|
||||
>
|
||||
|
||||
<Box
|
||||
sx={{
|
||||
display: 'flex',
|
||||
justifyContent: 'space-between',
|
||||
pt: { xs: 4, sm: 8 },
|
||||
width: '100%',
|
||||
borderColor: 'divider',
|
||||
}}
|
||||
>
|
||||
<div>
|
||||
<Link color="text.secondary" href="https://uprock.com/privacy-policy">
|
||||
Privacy Policy
|
||||
</Link>
|
||||
<Typography sx={{ display: 'inline', mx: 0.5, opacity: 0.5 }}>
|
||||
•
|
||||
</Typography>
|
||||
<Link color="text.secondary" href="https://uprock.com/terms-of-use">
|
||||
Terms of Service
|
||||
</Link>
|
||||
<Copyright />
|
||||
</div>
|
||||
<Stack
|
||||
direction="row"
|
||||
spacing={1}
|
||||
useFlexGap
|
||||
sx={{ justifyContent: 'left', color: 'text.secondary' }}
|
||||
>
|
||||
<IconButton
|
||||
color="inherit"
|
||||
size="small"
|
||||
href="mailto:prism@uprock.com?subject=Interested%20in%20UpRock%20Prism"
|
||||
aria-label="Contact Us"
|
||||
sx={{ alignSelf: 'center' }}
|
||||
>
|
||||
<FaEnvelope />
|
||||
</IconButton>
|
||||
<IconButton
|
||||
color="inherit"
|
||||
size="small"
|
||||
href="https://facebook.com/uprockcom"
|
||||
aria-label="Facebook"
|
||||
sx={{ alignSelf: 'center' }}
|
||||
>
|
||||
<FaFacebook />
|
||||
</IconButton>
|
||||
<IconButton
|
||||
color="inherit"
|
||||
size="small"
|
||||
href="https://x.com/uprockcom"
|
||||
aria-label="X"
|
||||
sx={{ alignSelf: 'center' }}
|
||||
>
|
||||
<FaTwitter />
|
||||
</IconButton>
|
||||
<IconButton
|
||||
color="inherit"
|
||||
size="small"
|
||||
href="https://www.linkedin.com/company/uprock/"
|
||||
aria-label="LinkedIn"
|
||||
sx={{ alignSelf: 'center' }}
|
||||
>
|
||||
<FaLinkedin />
|
||||
</IconButton>
|
||||
<IconButton
|
||||
color="inherit"
|
||||
size="small"
|
||||
href="https://github.com/uprockcom"
|
||||
aria-label="GitHub"
|
||||
sx={{ alignSelf: 'center' }}
|
||||
>
|
||||
<FaGithub />
|
||||
</IconButton>
|
||||
return (
|
||||
<Container
|
||||
sx={{
|
||||
display: "flex",
|
||||
flexDirection: "column",
|
||||
alignItems: "center",
|
||||
gap: { xs: 4, sm: 8 },
|
||||
py: { xs: 24, sm: 24 },
|
||||
px: { xs: 12, sm: 12 },
|
||||
textAlign: { sm: "center", md: "left" },
|
||||
}}
|
||||
>
|
||||
<Box
|
||||
sx={{
|
||||
display: "flex",
|
||||
justifyContent: "space-between",
|
||||
pt: { xs: 4, sm: 8 },
|
||||
width: "100%",
|
||||
borderColor: "divider",
|
||||
}}
|
||||
>
|
||||
<div>
|
||||
<Link
|
||||
color="text.secondary"
|
||||
href="https://uprock.com/privacy-policy"
|
||||
>
|
||||
Privacy Policy
|
||||
</Link>
|
||||
<Typography sx={{ display: "inline", mx: 0.5, opacity: 0.5 }}>
|
||||
•
|
||||
</Typography>
|
||||
<Link
|
||||
color="text.secondary"
|
||||
href="https://uprock.com/terms-of-use"
|
||||
>
|
||||
Terms of Service
|
||||
</Link>
|
||||
<Copyright />
|
||||
</div>
|
||||
<Stack
|
||||
direction="row"
|
||||
spacing={1}
|
||||
useFlexGap
|
||||
sx={{ justifyContent: "left", color: "text.secondary" }}
|
||||
>
|
||||
<IconButton
|
||||
color="inherit"
|
||||
size="small"
|
||||
href="mailto:prism@uprock.com?subject=Interested%20in%20UpRock%20Prism"
|
||||
aria-label="Contact Us"
|
||||
sx={{ alignSelf: "center" }}
|
||||
>
|
||||
<FaEnvelope />
|
||||
</IconButton>
|
||||
<IconButton
|
||||
color="inherit"
|
||||
size="small"
|
||||
href="https://facebook.com/uprockcom"
|
||||
aria-label="Facebook"
|
||||
sx={{ alignSelf: "center" }}
|
||||
>
|
||||
<FaFacebook />
|
||||
</IconButton>
|
||||
<IconButton
|
||||
color="inherit"
|
||||
size="small"
|
||||
href="https://x.com/uprockcom"
|
||||
aria-label="X"
|
||||
sx={{ alignSelf: "center" }}
|
||||
>
|
||||
<FaTwitter />
|
||||
</IconButton>
|
||||
<IconButton
|
||||
color="inherit"
|
||||
size="small"
|
||||
href="https://www.linkedin.com/company/uprock/"
|
||||
aria-label="LinkedIn"
|
||||
sx={{ alignSelf: "center" }}
|
||||
>
|
||||
<FaLinkedin />
|
||||
</IconButton>
|
||||
<IconButton
|
||||
color="inherit"
|
||||
size="small"
|
||||
href="https://github.com/uprockcom"
|
||||
aria-label="GitHub"
|
||||
sx={{ alignSelf: "center" }}
|
||||
>
|
||||
<FaGithub />
|
||||
</IconButton>
|
||||
</Stack>
|
||||
</Box>
|
||||
|
||||
</Stack>
|
||||
</Box>
|
||||
|
||||
<Box
|
||||
sx={{
|
||||
display: 'flex',
|
||||
flexDirection: 'column',
|
||||
alignItems: 'center',
|
||||
mt: 4,
|
||||
}}
|
||||
>
|
||||
<Typography variant="h2" sx={{ color: 'text.secondary' }}>
|
||||
Made with ❤️ by
|
||||
<Link href="https://uprock.com" color="inherit" sx={{ mx: 0.5 }}>
|
||||
UpRock
|
||||
</Link>
|
||||
&
|
||||
<Link href="https://bluewavelabs.ca" color="inherit" sx={{ mx: 0.5 }}>
|
||||
Bluewave Labs
|
||||
</Link>
|
||||
</Typography>
|
||||
<Box
|
||||
sx={{
|
||||
display: 'flex',
|
||||
alignItems: 'center',
|
||||
mt: 2,
|
||||
}}
|
||||
>
|
||||
<Typography variant="h2" sx={{ color: 'text.secondary', mr: 1 }}>
|
||||
Built on
|
||||
</Typography>
|
||||
<svg
|
||||
id="Layer_1"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlnsXlink="http://www.w3.org/1999/xlink"
|
||||
x="0px"
|
||||
y="0px"
|
||||
viewBox="0 0 397.7 311.7"
|
||||
xmlSpace="preserve"
|
||||
width="15"
|
||||
height="15"
|
||||
>
|
||||
<style type="text/css">
|
||||
{`.st0{fill:url(#SVGID_1_);}
|
||||
<Box
|
||||
sx={{
|
||||
display: "flex",
|
||||
flexDirection: "column",
|
||||
alignItems: "center",
|
||||
mt: 4,
|
||||
}}
|
||||
>
|
||||
<Typography
|
||||
variant="h2"
|
||||
sx={{ color: "text.secondary" }}
|
||||
>
|
||||
Made with ❤️ by
|
||||
<Link
|
||||
href="https://uprock.com"
|
||||
color="inherit"
|
||||
sx={{ mx: 0.5 }}
|
||||
>
|
||||
UpRock
|
||||
</Link>
|
||||
&
|
||||
<Link
|
||||
href="https://bluewavelabs.ca"
|
||||
color="inherit"
|
||||
sx={{ mx: 0.5 }}
|
||||
>
|
||||
Bluewave Labs
|
||||
</Link>
|
||||
</Typography>
|
||||
<Box
|
||||
sx={{
|
||||
display: "flex",
|
||||
alignItems: "center",
|
||||
mt: 2,
|
||||
}}
|
||||
>
|
||||
<Typography
|
||||
variant="h2"
|
||||
sx={{ color: "text.secondary", mr: 1 }}
|
||||
>
|
||||
Built on
|
||||
</Typography>
|
||||
<svg
|
||||
id="Layer_1"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlnsXlink="http://www.w3.org/1999/xlink"
|
||||
x="0px"
|
||||
y="0px"
|
||||
viewBox="0 0 397.7 311.7"
|
||||
xmlSpace="preserve"
|
||||
width="15"
|
||||
height="15"
|
||||
>
|
||||
<style type="text/css">
|
||||
{`.st0{fill:url(#SVGID_1_);}
|
||||
.st1{fill:url(#SVGID_2_);}
|
||||
.st2{fill:url(#SVGID_3_);}`}
|
||||
</style>
|
||||
<linearGradient
|
||||
id="SVGID_1_"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="360.8791"
|
||||
y1="351.4553"
|
||||
x2="141.213"
|
||||
y2="-69.2936"
|
||||
gradientTransform="matrix(1 0 0 -1 0 314)"
|
||||
>
|
||||
<stop offset="0" style={{ stopColor: 'rgb(0, 255, 163)' }} />
|
||||
<stop offset="1" style={{ stopColor: 'rgb(220, 31, 255)' }} />
|
||||
</linearGradient>
|
||||
<path
|
||||
className="st0"
|
||||
d="M64.6,237.9c2.4-2.4,5.7-3.8,9.2-3.8h317.4c5.8,0,8.7,7,4.6,11.1l-62.7,62.7c-2.4,2.4-5.7,3.8-9.2,3.8H6.5 c-5.8,0-8.7-7-4.6-11.1L64.6,237.9z"
|
||||
/>
|
||||
<linearGradient
|
||||
id="SVGID_2_"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="264.8291"
|
||||
y1="401.6014"
|
||||
x2="45.163"
|
||||
y2="-19.1475"
|
||||
gradientTransform="matrix(1 0 0 -1 0 314)"
|
||||
>
|
||||
<stop offset="0" style={{ stopColor: 'rgb(0, 255, 163)' }} />
|
||||
<stop offset="1" style={{ stopColor: 'rgb(220, 31, 255)' }} />
|
||||
</linearGradient>
|
||||
<path
|
||||
className="st1"
|
||||
d="M64.6,3.8C67.1,1.4,70.4,0,73.8,0h317.4c5.8,0,8.7,7,4.6,11.1l-62.7,62.7c-2.4,2.4-5.7,3.8-9.2,3.8H6.5 c-5.8,0-8.7-7-4.6-11.1L64.6,3.8z"
|
||||
/>
|
||||
<linearGradient
|
||||
id="SVGID_3_"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="312.5484"
|
||||
y1="376.688"
|
||||
x2="92.8822"
|
||||
y2="-44.061"
|
||||
gradientTransform="matrix(1 0 0 -1 0 314)"
|
||||
>
|
||||
<stop offset="0" style={{ stopColor: 'rgb(0, 255, 163)' }} />
|
||||
<stop offset="1" style={{ stopColor: 'rgb(220, 31, 255)' }} />
|
||||
</linearGradient>
|
||||
<path
|
||||
className="st2"
|
||||
d="M333.1,120.1c-2.4-2.4-5.7-3.8-9.2-3.8H6.5c-5.8,0-8.7,7-4.6,11.1l62.7,62.7c2.4,2.4,5.7,3.8,9.2,3.8h317.4 c5.8,0,8.7-7,4.6-11.1L333.1,120.1z"
|
||||
/>
|
||||
</svg>
|
||||
<Typography variant="h2" sx={{ color: 'text.secondary', ml: 1 }}>
|
||||
Solana
|
||||
</Typography>
|
||||
</Box>
|
||||
</Box>
|
||||
</Container>
|
||||
);
|
||||
</style>
|
||||
<linearGradient
|
||||
id="SVGID_1_"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="360.8791"
|
||||
y1="351.4553"
|
||||
x2="141.213"
|
||||
y2="-69.2936"
|
||||
gradientTransform="matrix(1 0 0 -1 0 314)"
|
||||
>
|
||||
<stop
|
||||
offset="0"
|
||||
style={{ stopColor: "rgb(0, 255, 163)" }}
|
||||
/>
|
||||
<stop
|
||||
offset="1"
|
||||
style={{ stopColor: "rgb(220, 31, 255)" }}
|
||||
/>
|
||||
</linearGradient>
|
||||
<path
|
||||
className="st0"
|
||||
d="M64.6,237.9c2.4-2.4,5.7-3.8,9.2-3.8h317.4c5.8,0,8.7,7,4.6,11.1l-62.7,62.7c-2.4,2.4-5.7,3.8-9.2,3.8H6.5 c-5.8,0-8.7-7-4.6-11.1L64.6,237.9z"
|
||||
/>
|
||||
<linearGradient
|
||||
id="SVGID_2_"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="264.8291"
|
||||
y1="401.6014"
|
||||
x2="45.163"
|
||||
y2="-19.1475"
|
||||
gradientTransform="matrix(1 0 0 -1 0 314)"
|
||||
>
|
||||
<stop
|
||||
offset="0"
|
||||
style={{ stopColor: "rgb(0, 255, 163)" }}
|
||||
/>
|
||||
<stop
|
||||
offset="1"
|
||||
style={{ stopColor: "rgb(220, 31, 255)" }}
|
||||
/>
|
||||
</linearGradient>
|
||||
<path
|
||||
className="st1"
|
||||
d="M64.6,3.8C67.1,1.4,70.4,0,73.8,0h317.4c5.8,0,8.7,7,4.6,11.1l-62.7,62.7c-2.4,2.4-5.7,3.8-9.2,3.8H6.5 c-5.8,0-8.7-7-4.6-11.1L64.6,3.8z"
|
||||
/>
|
||||
<linearGradient
|
||||
id="SVGID_3_"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="312.5484"
|
||||
y1="376.688"
|
||||
x2="92.8822"
|
||||
y2="-44.061"
|
||||
gradientTransform="matrix(1 0 0 -1 0 314)"
|
||||
>
|
||||
<stop
|
||||
offset="0"
|
||||
style={{ stopColor: "rgb(0, 255, 163)" }}
|
||||
/>
|
||||
<stop
|
||||
offset="1"
|
||||
style={{ stopColor: "rgb(220, 31, 255)" }}
|
||||
/>
|
||||
</linearGradient>
|
||||
<path
|
||||
className="st2"
|
||||
d="M333.1,120.1c-2.4-2.4-5.7-3.8-9.2-3.8H6.5c-5.8,0-8.7,7-4.6,11.1l62.7,62.7c2.4,2.4,5.7,3.8,9.2,3.8h317.4 c5.8,0,8.7-7,4.6-11.1L333.1,120.1z"
|
||||
/>
|
||||
</svg>
|
||||
<Typography
|
||||
variant="h2"
|
||||
sx={{ color: "text.secondary", ml: 1 }}
|
||||
>
|
||||
Solana
|
||||
</Typography>
|
||||
</Box>
|
||||
</Box>
|
||||
</Container>
|
||||
);
|
||||
}
|
||||
@@ -29,7 +29,7 @@ const ConfigBox = styled(Stack)(({ theme }) => ({
|
||||
},
|
||||
"& h1, & h2": {
|
||||
color: theme.palette.primary.contrastTextSecondary,
|
||||
}
|
||||
},
|
||||
}));
|
||||
|
||||
export default ConfigBox;
|
||||
@@ -7,7 +7,7 @@ import ConfigBox from "../ConfigBox";
|
||||
* ConfigRow is a styled container used to layout content in a row format with specific padding, border, and spacing.
|
||||
* It serves as the wrapper for ConfigBox, with the left section displaying the title and description,
|
||||
* and the right section displaying the children.
|
||||
*
|
||||
*
|
||||
* @component
|
||||
* @example
|
||||
* return (
|
||||
@@ -19,31 +19,40 @@ import ConfigBox from "../ConfigBox";
|
||||
*/
|
||||
|
||||
const ConfigRow = ({ title, description, children }) => {
|
||||
const theme = useTheme();
|
||||
const theme = useTheme();
|
||||
|
||||
return (
|
||||
<ConfigBox>
|
||||
<Box>
|
||||
<Typography component="h2" variant="h2">
|
||||
{title}
|
||||
</Typography>
|
||||
{description && (
|
||||
<Typography variant="body2" mt={theme.spacing(2)}>
|
||||
{description}
|
||||
</Typography>
|
||||
)}
|
||||
</Box>
|
||||
<Stack gap={theme.spacing(15)} mt={theme.spacing(4)}>
|
||||
{children}
|
||||
</Stack>
|
||||
</ConfigBox>
|
||||
);
|
||||
return (
|
||||
<ConfigBox>
|
||||
<Box>
|
||||
<Typography
|
||||
component="h2"
|
||||
variant="h2"
|
||||
>
|
||||
{title}
|
||||
</Typography>
|
||||
{description && (
|
||||
<Typography
|
||||
variant="body2"
|
||||
mt={theme.spacing(2)}
|
||||
>
|
||||
{description}
|
||||
</Typography>
|
||||
)}
|
||||
</Box>
|
||||
<Stack
|
||||
gap={theme.spacing(15)}
|
||||
mt={theme.spacing(4)}
|
||||
>
|
||||
{children}
|
||||
</Stack>
|
||||
</ConfigBox>
|
||||
);
|
||||
};
|
||||
|
||||
ConfigRow.propTypes = {
|
||||
title: PropTypes.string.isRequired,
|
||||
description: PropTypes.string,
|
||||
children: PropTypes.node,
|
||||
title: PropTypes.string.isRequired,
|
||||
description: PropTypes.string,
|
||||
children: PropTypes.node,
|
||||
};
|
||||
|
||||
export default ConfigRow;
|
||||
@@ -42,10 +42,14 @@ const FilterHeader = ({ header, options, value, onChange, multiple = true }) =>
|
||||
return header;
|
||||
}
|
||||
|
||||
return header + " | " + selected
|
||||
.map((value) => options.find((option) => option.value === value)?.label)
|
||||
.filter(Boolean)
|
||||
.join(", ");
|
||||
return (
|
||||
header +
|
||||
" | " +
|
||||
selected
|
||||
.map((value) => options.find((option) => option.value === value)?.label)
|
||||
.filter(Boolean)
|
||||
.join(", ")
|
||||
);
|
||||
}}
|
||||
MenuProps={{
|
||||
anchorOrigin: {
|
||||
|
||||
@@ -36,199 +36,198 @@ const ImageUpload = ({
|
||||
error,
|
||||
}) => {
|
||||
const theme = useTheme();
|
||||
const { t } = useTranslation();
|
||||
const [uploadComplete, setUploadComplete] = useState(false);
|
||||
const [completedFile, setCompletedFile] = useState(null);
|
||||
const [file, setFile] = useState(null);
|
||||
const [progress, setProgress] = useState({ value: 0, isLoading: false });
|
||||
const intervalRef = useRef(null);
|
||||
const [localError, setLocalError] = useState(null);
|
||||
const [isDragging, setIsDragging] = useState(false);
|
||||
const { t } = useTranslation();
|
||||
const [uploadComplete, setUploadComplete] = useState(false);
|
||||
const [completedFile, setCompletedFile] = useState(null);
|
||||
const [file, setFile] = useState(null);
|
||||
const [progress, setProgress] = useState({ value: 0, isLoading: false });
|
||||
const intervalRef = useRef(null);
|
||||
const [localError, setLocalError] = useState(null);
|
||||
const [isDragging, setIsDragging] = useState(false);
|
||||
|
||||
const roundStyle = previewIsRound ? { borderRadius: "50%" } : {};
|
||||
|
||||
const handleImageChange = useCallback(
|
||||
(file) => {
|
||||
if (!file) return;
|
||||
(file) => {
|
||||
if (!file) return;
|
||||
|
||||
const isValidType = accept.some((type) =>
|
||||
file.type.includes(type)
|
||||
);
|
||||
const isValidSize = file.size <= maxSize;
|
||||
|
||||
if (!isValidType) {
|
||||
setLocalError(t('invalidFileFormat'));
|
||||
return;
|
||||
}
|
||||
if (!isValidSize) {
|
||||
setLocalError(t('invalidFileSize'));
|
||||
return;
|
||||
}
|
||||
|
||||
setLocalError(null);
|
||||
|
||||
const previewFile = {
|
||||
src: URL.createObjectURL(file),
|
||||
name: file.name,
|
||||
file,
|
||||
};
|
||||
|
||||
setFile(previewFile);
|
||||
setProgress({ value: 0, isLoading: true });
|
||||
|
||||
intervalRef.current = setInterval(() => {
|
||||
setProgress((prev) => {
|
||||
const buffer = 12;
|
||||
if (prev.value + buffer >= 100) {
|
||||
clearInterval(intervalRef.current);
|
||||
setUploadComplete(true);
|
||||
setCompletedFile(previewFile);
|
||||
return { value: 100, isLoading: false };
|
||||
}
|
||||
return { value: prev.value + buffer, isLoading: true };
|
||||
});
|
||||
}, 120);
|
||||
},
|
||||
[maxSize, accept]
|
||||
);
|
||||
const isValidType = accept.some((type) => file.type.includes(type));
|
||||
const isValidSize = file.size <= maxSize;
|
||||
|
||||
useEffect(() => {
|
||||
if (uploadComplete && completedFile) {
|
||||
onChange?.(completedFile);
|
||||
setUploadComplete(false);
|
||||
setCompletedFile(null);
|
||||
}
|
||||
}, [uploadComplete, completedFile, onChange]);
|
||||
if (!isValidType) {
|
||||
setLocalError(t("invalidFileFormat"));
|
||||
return;
|
||||
}
|
||||
if (!isValidSize) {
|
||||
setLocalError(t("invalidFileSize"));
|
||||
return;
|
||||
}
|
||||
|
||||
setLocalError(null);
|
||||
|
||||
const previewFile = {
|
||||
src: URL.createObjectURL(file),
|
||||
name: file.name,
|
||||
file,
|
||||
};
|
||||
|
||||
setFile(previewFile);
|
||||
setProgress({ value: 0, isLoading: true });
|
||||
|
||||
intervalRef.current = setInterval(() => {
|
||||
setProgress((prev) => {
|
||||
const buffer = 12;
|
||||
if (prev.value + buffer >= 100) {
|
||||
clearInterval(intervalRef.current);
|
||||
setUploadComplete(true);
|
||||
setCompletedFile(previewFile);
|
||||
return { value: 100, isLoading: false };
|
||||
}
|
||||
return { value: prev.value + buffer, isLoading: true };
|
||||
});
|
||||
}, 120);
|
||||
},
|
||||
[maxSize, accept]
|
||||
);
|
||||
|
||||
useEffect(() => {
|
||||
if (uploadComplete && completedFile) {
|
||||
onChange?.(completedFile);
|
||||
setUploadComplete(false);
|
||||
setCompletedFile(null);
|
||||
}
|
||||
}, [uploadComplete, completedFile, onChange]);
|
||||
|
||||
return (
|
||||
<>
|
||||
{src ? (
|
||||
<Stack direction="row" justifyContent="center">
|
||||
<Image
|
||||
alt="Uploaded preview"
|
||||
src={src}
|
||||
width="250px"
|
||||
height="250px"
|
||||
sx={{ ...roundStyle }}
|
||||
/>
|
||||
</Stack>
|
||||
) : (
|
||||
<>
|
||||
<Box
|
||||
className="image-field-wrapper"
|
||||
mt={theme.spacing(8)}
|
||||
onDragEnter={() => setIsDragging(true)}
|
||||
onDragLeave={() => setIsDragging(false)}
|
||||
onDrop={() => setIsDragging(false)}
|
||||
sx={{
|
||||
position: "relative",
|
||||
height: "fit-content",
|
||||
border: "dashed",
|
||||
borderRadius: theme.shape.borderRadius,
|
||||
borderColor: isDragging
|
||||
? theme.palette.primary.main
|
||||
: theme.palette.primary.lowContrast,
|
||||
backgroundColor: isDragging
|
||||
? "hsl(215, 87%, 51%, 0.05)"
|
||||
: "transparent",
|
||||
borderWidth: "2px",
|
||||
transition: "0.2s",
|
||||
"&:hover": {
|
||||
borderColor: theme.palette.primary.main,
|
||||
backgroundColor: "hsl(215, 87%, 51%, 0.05)",
|
||||
},
|
||||
}}
|
||||
>
|
||||
<TextField
|
||||
type="file"
|
||||
onChange={(e) => handleImageChange(e?.target?.files?.[0])}
|
||||
sx={{
|
||||
width: "100%",
|
||||
"& .MuiInputBase-input[type='file']": {
|
||||
opacity: 0,
|
||||
cursor: "pointer",
|
||||
maxWidth: "500px",
|
||||
minHeight: "175px",
|
||||
zIndex: 1,
|
||||
},
|
||||
"& fieldset": {
|
||||
padding: 0,
|
||||
border: "none",
|
||||
},
|
||||
}}
|
||||
/>
|
||||
<Stack
|
||||
alignItems="center"
|
||||
gap="4px"
|
||||
sx={{
|
||||
position: "absolute",
|
||||
top: "50%",
|
||||
left: "50%",
|
||||
transform: "translate(-50%, -50%)",
|
||||
zIndex: 0,
|
||||
width: "100%",
|
||||
}}
|
||||
>
|
||||
<IconButton
|
||||
sx={{
|
||||
pointerEvents: "none",
|
||||
borderRadius: theme.shape.borderRadius,
|
||||
border: `solid ${theme.shape.borderThick}px ${theme.palette.primary.lowContrast}`,
|
||||
boxShadow: theme.shape.boxShadow,
|
||||
}}
|
||||
>
|
||||
<CloudUploadIcon />
|
||||
</IconButton>
|
||||
<Typography
|
||||
component="h2"
|
||||
color={theme.palette.primary.contrastTextTertiary}
|
||||
>
|
||||
<Typography
|
||||
component="span"
|
||||
fontSize="inherit"
|
||||
color="info"
|
||||
fontWeight={500}
|
||||
>
|
||||
{t('ClickUpload')}
|
||||
</Typography>{" "}
|
||||
or {t('DragandDrop')}
|
||||
</Typography>
|
||||
<Typography
|
||||
component="p"
|
||||
color={theme.palette.primary.contrastTextTertiary}
|
||||
sx={{ opacity: 0.6 }}
|
||||
>({t('MaxSize')}: {Math.round(maxSize / 1024 / 1024)}MB)
|
||||
</Typography>
|
||||
</Stack>
|
||||
</Box>
|
||||
{(localError || progress.isLoading || progress.value !== 0) && (
|
||||
<ProgressUpload
|
||||
icon={<ImageIcon />}
|
||||
label={file?.name || "Upload failed"}
|
||||
size={file?.size}
|
||||
progress={progress.value}
|
||||
onClick={() => {
|
||||
clearInterval(intervalRef.current);
|
||||
setFile(null);
|
||||
setProgress({ value: 0, isLoading: false });
|
||||
setLocalError(null);
|
||||
onChange(undefined);
|
||||
}}
|
||||
error={localError || error}
|
||||
/>
|
||||
)}
|
||||
<Typography
|
||||
component="p"
|
||||
color={theme.palette.primary.contrastTextTertiary}
|
||||
sx={{ opacity: 0.6 }}
|
||||
>
|
||||
{t('SupportedFormats')}: {accept.join(", ").toUpperCase()}
|
||||
</Typography>
|
||||
</>
|
||||
)}
|
||||
</>
|
||||
);
|
||||
<>
|
||||
{src ? (
|
||||
<Stack
|
||||
direction="row"
|
||||
justifyContent="center"
|
||||
>
|
||||
<Image
|
||||
alt="Uploaded preview"
|
||||
src={src}
|
||||
width="250px"
|
||||
height="250px"
|
||||
sx={{ ...roundStyle }}
|
||||
/>
|
||||
</Stack>
|
||||
) : (
|
||||
<>
|
||||
<Box
|
||||
className="image-field-wrapper"
|
||||
mt={theme.spacing(8)}
|
||||
onDragEnter={() => setIsDragging(true)}
|
||||
onDragLeave={() => setIsDragging(false)}
|
||||
onDrop={() => setIsDragging(false)}
|
||||
sx={{
|
||||
position: "relative",
|
||||
height: "fit-content",
|
||||
border: "dashed",
|
||||
borderRadius: theme.shape.borderRadius,
|
||||
borderColor: isDragging
|
||||
? theme.palette.primary.main
|
||||
: theme.palette.primary.lowContrast,
|
||||
backgroundColor: isDragging ? "hsl(215, 87%, 51%, 0.05)" : "transparent",
|
||||
borderWidth: "2px",
|
||||
transition: "0.2s",
|
||||
"&:hover": {
|
||||
borderColor: theme.palette.primary.main,
|
||||
backgroundColor: "hsl(215, 87%, 51%, 0.05)",
|
||||
},
|
||||
}}
|
||||
>
|
||||
<TextField
|
||||
type="file"
|
||||
onChange={(e) => handleImageChange(e?.target?.files?.[0])}
|
||||
sx={{
|
||||
width: "100%",
|
||||
"& .MuiInputBase-input[type='file']": {
|
||||
opacity: 0,
|
||||
cursor: "pointer",
|
||||
maxWidth: "500px",
|
||||
minHeight: "175px",
|
||||
zIndex: 1,
|
||||
},
|
||||
"& fieldset": {
|
||||
padding: 0,
|
||||
border: "none",
|
||||
},
|
||||
}}
|
||||
/>
|
||||
<Stack
|
||||
alignItems="center"
|
||||
gap="4px"
|
||||
sx={{
|
||||
position: "absolute",
|
||||
top: "50%",
|
||||
left: "50%",
|
||||
transform: "translate(-50%, -50%)",
|
||||
zIndex: 0,
|
||||
width: "100%",
|
||||
}}
|
||||
>
|
||||
<IconButton
|
||||
sx={{
|
||||
pointerEvents: "none",
|
||||
borderRadius: theme.shape.borderRadius,
|
||||
border: `solid ${theme.shape.borderThick}px ${theme.palette.primary.lowContrast}`,
|
||||
boxShadow: theme.shape.boxShadow,
|
||||
}}
|
||||
>
|
||||
<CloudUploadIcon />
|
||||
</IconButton>
|
||||
<Typography
|
||||
component="h2"
|
||||
color={theme.palette.primary.contrastTextTertiary}
|
||||
>
|
||||
<Typography
|
||||
component="span"
|
||||
fontSize="inherit"
|
||||
color="info"
|
||||
fontWeight={500}
|
||||
>
|
||||
{t("ClickUpload")}
|
||||
</Typography>{" "}
|
||||
or {t("DragandDrop")}
|
||||
</Typography>
|
||||
<Typography
|
||||
component="p"
|
||||
color={theme.palette.primary.contrastTextTertiary}
|
||||
sx={{ opacity: 0.6 }}
|
||||
>
|
||||
({t("MaxSize")}: {Math.round(maxSize / 1024 / 1024)}MB)
|
||||
</Typography>
|
||||
</Stack>
|
||||
</Box>
|
||||
{(localError || progress.isLoading || progress.value !== 0) && (
|
||||
<ProgressUpload
|
||||
icon={<ImageIcon />}
|
||||
label={file?.name || "Upload failed"}
|
||||
size={file?.size}
|
||||
progress={progress.value}
|
||||
onClick={() => {
|
||||
clearInterval(intervalRef.current);
|
||||
setFile(null);
|
||||
setProgress({ value: 0, isLoading: false });
|
||||
setLocalError(null);
|
||||
onChange(undefined);
|
||||
}}
|
||||
error={localError || error}
|
||||
/>
|
||||
)}
|
||||
<Typography
|
||||
component="p"
|
||||
color={theme.palette.primary.contrastTextTertiary}
|
||||
sx={{ opacity: 0.6 }}
|
||||
>
|
||||
{t("SupportedFormats")}: {accept.join(", ").toUpperCase()}
|
||||
</Typography>
|
||||
</>
|
||||
)}
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
||||
ImageUpload.propTypes = {
|
||||
@@ -240,4 +239,4 @@ ImageUpload.propTypes = {
|
||||
error: PropTypes.string,
|
||||
};
|
||||
|
||||
export default ImageUpload;
|
||||
export default ImageUpload;
|
||||
@@ -158,7 +158,15 @@ const StatusLabel = ({ status, text, customStyles }) => {
|
||||
};
|
||||
|
||||
StatusLabel.propTypes = {
|
||||
status: PropTypes.oneOf(["up", "down", "paused", "pending", "cannot resolve", "published", "unpublished"]),
|
||||
status: PropTypes.oneOf([
|
||||
"up",
|
||||
"down",
|
||||
"paused",
|
||||
"pending",
|
||||
"cannot resolve",
|
||||
"published",
|
||||
"unpublished",
|
||||
]),
|
||||
text: PropTypes.string,
|
||||
customStyles: PropTypes.object,
|
||||
};
|
||||
|
||||
@@ -21,107 +21,44 @@ const LanguageSelector = () => {
|
||||
value={language}
|
||||
onChange={handleChange}
|
||||
size="small"
|
||||
sx={{
|
||||
height: 28,
|
||||
width: 64,
|
||||
backgroundColor: theme.palette.primary.main,
|
||||
color: theme.palette.primary.contrastText,
|
||||
borderRadius: theme.shape.borderRadius,
|
||||
fontSize: 10,
|
||||
"& .MuiOutlinedInput-notchedOutline": {
|
||||
borderColor: theme.palette.primary.lowContrast,
|
||||
borderRadius: theme.shape.borderRadius,
|
||||
},
|
||||
"&:hover .MuiOutlinedInput-notchedOutline": {
|
||||
borderColor: theme.palette.primary.lowContrast,
|
||||
},
|
||||
"&.Mui-focused .MuiOutlinedInput-notchedOutline": {
|
||||
borderColor: theme.palette.primary.lowContrast,
|
||||
},
|
||||
"& .MuiSvgIcon-root": {
|
||||
color: theme.palette.primary.contrastText,
|
||||
width: 16,
|
||||
height: 16,
|
||||
right: 4,
|
||||
top: "calc(50% - 8px)",
|
||||
},
|
||||
"& .MuiSelect-select": {
|
||||
padding: "2px 20px 2px 8px",
|
||||
display: "flex",
|
||||
alignItems: "center",
|
||||
fontSize: 10,
|
||||
},
|
||||
}}
|
||||
MenuProps={{
|
||||
PaperProps: {
|
||||
sx: {
|
||||
backgroundColor: theme.palette.primary.main,
|
||||
borderRadius: theme.shape.borderRadius,
|
||||
marginTop: 1,
|
||||
width: 64,
|
||||
"& .MuiMenuItem-root": {
|
||||
padding: "2px 8px",
|
||||
minHeight: 28,
|
||||
fontSize: 10,
|
||||
},
|
||||
},
|
||||
},
|
||||
anchorOrigin: {
|
||||
vertical: "bottom",
|
||||
horizontal: "left",
|
||||
},
|
||||
transformOrigin: {
|
||||
vertical: "top",
|
||||
horizontal: "left",
|
||||
},
|
||||
}}
|
||||
sx={{ minWidth: 80 }}
|
||||
>
|
||||
{languages.map((lang) => {
|
||||
const flag = lang ? `fi fi-${lang}` : null;
|
||||
let parsedLang = lang === "en" ? "gb" : lang;
|
||||
|
||||
// Fix for Czech
|
||||
if (parsedLang === "cs") {
|
||||
parsedLang = "cz";
|
||||
}
|
||||
if (parsedLang.includes("-")) {
|
||||
parsedLang = parsedLang.split("-")[1].toLowerCase();
|
||||
console.log("parsedLang", parsedLang);
|
||||
}
|
||||
|
||||
const flag = parsedLang ? `fi fi-${parsedLang}` : null;
|
||||
|
||||
return (
|
||||
<MenuItem
|
||||
key={lang}
|
||||
value={lang}
|
||||
sx={{
|
||||
color: theme.palette.primary.contrastText,
|
||||
"&:hover": {
|
||||
backgroundColor: theme.palette.primary.lowContrast,
|
||||
},
|
||||
"&.Mui-selected": {
|
||||
backgroundColor: theme.palette.primary.lowContrast,
|
||||
"&:hover": {
|
||||
backgroundColor: theme.palette.primary.lowContrast,
|
||||
},
|
||||
},
|
||||
}}
|
||||
>
|
||||
<Stack
|
||||
direction="row"
|
||||
spacing={2}
|
||||
spacing={theme.spacing(2)}
|
||||
alignItems="center"
|
||||
ml={0.5}
|
||||
>
|
||||
<Box
|
||||
component="span"
|
||||
sx={{
|
||||
width: 16,
|
||||
height: 12,
|
||||
display: "flex",
|
||||
alignItems: "center",
|
||||
"& img": {
|
||||
width: "100%",
|
||||
height: "100%",
|
||||
objectFit: "cover",
|
||||
borderRadius: 0.5,
|
||||
},
|
||||
}}
|
||||
>
|
||||
{flag && <span className={flag} />}
|
||||
</Box>
|
||||
<Box
|
||||
component="span"
|
||||
sx={{ textTransform: "uppercase", fontSize: 10 }}
|
||||
sx={{ textTransform: "uppercase" }}
|
||||
>
|
||||
{lang}
|
||||
</Box>
|
||||
|
||||
@@ -30,4 +30,4 @@
|
||||
max-width: 1400px;
|
||||
margin: 0 auto;
|
||||
flex: 1;
|
||||
}
|
||||
}
|
||||
@@ -4,17 +4,11 @@ import PropTypes from "prop-types";
|
||||
import { useTranslation } from "react-i18next";
|
||||
import { useTheme } from "@emotion/react";
|
||||
|
||||
const CreateMonitorHeader = ({
|
||||
isAdmin,
|
||||
label,
|
||||
isLoading = true,
|
||||
path,
|
||||
bulkPath,
|
||||
}) => {
|
||||
const CreateMonitorHeader = ({ isAdmin, label, isLoading = true, path, bulkPath }) => {
|
||||
const navigate = useNavigate();
|
||||
const { t } = useTranslation();
|
||||
const theme = useTheme();
|
||||
|
||||
|
||||
// Use the provided label or fall back to the translated default
|
||||
|
||||
if (!isAdmin) return null;
|
||||
|
||||
@@ -28,8 +28,9 @@ const MonitorStatusHeader = ({ path, isLoading = false, isAdmin, monitor }) => {
|
||||
gap={theme.spacing(4)}
|
||||
>
|
||||
<PulseDot color={statusColor[determineState(monitor)]} />
|
||||
<Typography variant="h2"
|
||||
style={{fontFamily : "monospace" , fontWeight : 'bolder'}}
|
||||
<Typography
|
||||
variant="h2"
|
||||
style={{ fontFamily: "monospace", fontWeight: "bolder" }}
|
||||
>
|
||||
{monitor?.url?.replace(/^https?:\/\//, "") || "..."}
|
||||
</Typography>
|
||||
|
||||
@@ -1,109 +1,115 @@
|
||||
import React from "react";
|
||||
import {
|
||||
Typography,
|
||||
Box,
|
||||
Button,
|
||||
CircularProgress
|
||||
} from "@mui/material";
|
||||
import { Typography, Box, Button, CircularProgress } from "@mui/material";
|
||||
import { useTranslation } from "react-i18next";
|
||||
import { useTheme } from "@emotion/react";
|
||||
import TextInput from "../../../Components/Inputs/TextInput";
|
||||
import Checkbox from "../../../Components/Inputs/Checkbox";
|
||||
|
||||
const TabComponent = ({
|
||||
type,
|
||||
integrations,
|
||||
handleIntegrationChange,
|
||||
handleInputChange,
|
||||
handleTestNotification,
|
||||
isLoading
|
||||
const TabComponent = ({
|
||||
type,
|
||||
integrations,
|
||||
handleIntegrationChange,
|
||||
handleInputChange,
|
||||
handleTestNotification,
|
||||
isLoading,
|
||||
}) => {
|
||||
const theme = useTheme();
|
||||
const { t } = useTranslation();
|
||||
|
||||
// Helper to get the field state key (e.g., slackWebhook, telegramToken)
|
||||
const getFieldKey = (typeId, fieldId) => {
|
||||
return `${typeId}${fieldId.charAt(0).toUpperCase() + fieldId.slice(1)}`;
|
||||
};
|
||||
|
||||
// Check if all fields have values to enable test button
|
||||
const areAllFieldsFilled = () => {
|
||||
return type.fields.every(field => {
|
||||
const fieldKey = getFieldKey(type.id, field.id);
|
||||
return integrations[fieldKey];
|
||||
});
|
||||
};
|
||||
|
||||
return (
|
||||
<>
|
||||
<Typography variant="subtitle1" component="h4" sx={{
|
||||
fontWeight: 'bold',
|
||||
color: theme.palette.primary.contrastTextSecondary
|
||||
}}>
|
||||
{type.label}
|
||||
</Typography>
|
||||
|
||||
<Typography sx={{
|
||||
mt: theme.spacing(0.5),
|
||||
mb: theme.spacing(1.5),
|
||||
color: theme.palette.primary.contrastTextTertiary
|
||||
}}>
|
||||
{type.description}
|
||||
</Typography>
|
||||
|
||||
<Box sx={{ pl: theme.spacing(1.5) }}>
|
||||
<Checkbox
|
||||
id={`enable-${type.id}`}
|
||||
label={t('notifications.enableNotifications', { platform: type.label })}
|
||||
isChecked={integrations[type.id]}
|
||||
onChange={(e) => handleIntegrationChange(type.id, e.target.checked)}
|
||||
disabled={isLoading}
|
||||
/>
|
||||
</Box>
|
||||
|
||||
{type.fields.map(field => {
|
||||
const fieldKey = getFieldKey(type.id, field.id);
|
||||
|
||||
return (
|
||||
<Box key={field.id} sx={{ mt: theme.spacing(1) }}>
|
||||
<Typography sx={{
|
||||
mb: theme.spacing(2),
|
||||
fontWeight: 'bold',
|
||||
color: theme.palette.primary.contrastTextSecondary
|
||||
}}>
|
||||
{field.label}
|
||||
</Typography>
|
||||
|
||||
<TextInput
|
||||
id={`${type.id}-${field.id}`}
|
||||
type={field.type}
|
||||
placeholder={field.placeholder}
|
||||
value={integrations[fieldKey]}
|
||||
onChange={(e) => handleInputChange(fieldKey, e.target.value)}
|
||||
disabled={!integrations[type.id] || isLoading}
|
||||
/>
|
||||
</Box>
|
||||
);
|
||||
})}
|
||||
|
||||
<Box sx={{ mt: theme.spacing(1) }}>
|
||||
<Button
|
||||
variant="text"
|
||||
color="info"
|
||||
onClick={() => handleTestNotification(type.id)}
|
||||
disabled={!integrations[type.id] || !areAllFieldsFilled() || isLoading}
|
||||
>
|
||||
{isLoading ? (
|
||||
<CircularProgress
|
||||
size={theme.spacing(8)}
|
||||
sx={{ mr: theme.spacing(1), color: theme.palette.accent.main}}
|
||||
/>
|
||||
) : null}
|
||||
{t('notifications.testNotification')}
|
||||
</Button>
|
||||
</Box>
|
||||
</>
|
||||
);
|
||||
const theme = useTheme();
|
||||
const { t } = useTranslation();
|
||||
|
||||
// Helper to get the field state key (e.g., slackWebhook, telegramToken)
|
||||
const getFieldKey = (typeId, fieldId) => {
|
||||
return `${typeId}${fieldId.charAt(0).toUpperCase() + fieldId.slice(1)}`;
|
||||
};
|
||||
|
||||
// Check if all fields have values to enable test button
|
||||
const areAllFieldsFilled = () => {
|
||||
return type.fields.every((field) => {
|
||||
const fieldKey = getFieldKey(type.id, field.id);
|
||||
return integrations[fieldKey];
|
||||
});
|
||||
};
|
||||
|
||||
return (
|
||||
<>
|
||||
<Typography
|
||||
variant="subtitle1"
|
||||
component="h4"
|
||||
sx={{
|
||||
fontWeight: "bold",
|
||||
color: theme.palette.primary.contrastTextSecondary,
|
||||
}}
|
||||
>
|
||||
{type.label}
|
||||
</Typography>
|
||||
|
||||
<Typography
|
||||
sx={{
|
||||
mt: theme.spacing(0.5),
|
||||
mb: theme.spacing(1.5),
|
||||
color: theme.palette.primary.contrastTextTertiary,
|
||||
}}
|
||||
>
|
||||
{type.description}
|
||||
</Typography>
|
||||
|
||||
<Box sx={{ pl: theme.spacing(1.5) }}>
|
||||
<Checkbox
|
||||
id={`enable-${type.id}`}
|
||||
label={t("notifications.enableNotifications", { platform: type.label })}
|
||||
isChecked={integrations[type.id]}
|
||||
onChange={(e) => handleIntegrationChange(type.id, e.target.checked)}
|
||||
disabled={isLoading}
|
||||
/>
|
||||
</Box>
|
||||
|
||||
{type.fields.map((field) => {
|
||||
const fieldKey = getFieldKey(type.id, field.id);
|
||||
|
||||
return (
|
||||
<Box
|
||||
key={field.id}
|
||||
sx={{ mt: theme.spacing(1) }}
|
||||
>
|
||||
<Typography
|
||||
sx={{
|
||||
mb: theme.spacing(2),
|
||||
fontWeight: "bold",
|
||||
color: theme.palette.primary.contrastTextSecondary,
|
||||
}}
|
||||
>
|
||||
{field.label}
|
||||
</Typography>
|
||||
|
||||
<TextInput
|
||||
id={`${type.id}-${field.id}`}
|
||||
type={field.type}
|
||||
placeholder={field.placeholder}
|
||||
value={integrations[fieldKey]}
|
||||
onChange={(e) => handleInputChange(fieldKey, e.target.value)}
|
||||
disabled={!integrations[type.id] || isLoading}
|
||||
/>
|
||||
</Box>
|
||||
);
|
||||
})}
|
||||
|
||||
<Box sx={{ mt: theme.spacing(1) }}>
|
||||
<Button
|
||||
variant="text"
|
||||
color="info"
|
||||
onClick={() => handleTestNotification(type.id)}
|
||||
disabled={!integrations[type.id] || !areAllFieldsFilled() || isLoading}
|
||||
>
|
||||
{isLoading ? (
|
||||
<CircularProgress
|
||||
size={theme.spacing(8)}
|
||||
sx={{ mr: theme.spacing(1), color: theme.palette.accent.main }}
|
||||
/>
|
||||
) : null}
|
||||
{t("notifications.testNotification")}
|
||||
</Button>
|
||||
</Box>
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
||||
export default TabComponent;
|
||||
export default TabComponent;
|
||||
@@ -5,7 +5,7 @@ import { useTheme } from "@emotion/react";
|
||||
|
||||
/**
|
||||
* TabPanel component that displays content for the selected tab.
|
||||
*
|
||||
*
|
||||
* @component
|
||||
* @param {Object} props - The component props.
|
||||
* @param {React.ReactNode} props.children - The content to be displayed when this tab panel is selected.
|
||||
@@ -15,32 +15,27 @@ import { useTheme } from "@emotion/react";
|
||||
* @returns {React.ReactElement|null} The rendered tab panel or null if not selected.
|
||||
*/
|
||||
function TabPanel({ children, value, index, ...other }) {
|
||||
const theme = useTheme();
|
||||
|
||||
return (
|
||||
<div
|
||||
role="tabpanel"
|
||||
hidden={value !== index}
|
||||
id={`notification-tabpanel-${index}`}
|
||||
aria-labelledby={`notification-tab-${index}`}
|
||||
{...other}
|
||||
>
|
||||
{value === index && (
|
||||
<Box sx={{ pt: theme.spacing(3) }}>
|
||||
{children}
|
||||
</Box>
|
||||
)}
|
||||
</div>
|
||||
);
|
||||
const theme = useTheme();
|
||||
|
||||
return (
|
||||
<div
|
||||
role="tabpanel"
|
||||
hidden={value !== index}
|
||||
id={`notification-tabpanel-${index}`}
|
||||
aria-labelledby={`notification-tab-${index}`}
|
||||
{...other}
|
||||
>
|
||||
{value === index && <Box sx={{ pt: theme.spacing(3) }}>{children}</Box>}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
TabPanel.propTypes = {
|
||||
children: PropTypes.node,
|
||||
|
||||
children: PropTypes.node,
|
||||
|
||||
index: PropTypes.number.isRequired,
|
||||
|
||||
value: PropTypes.number.isRequired
|
||||
index: PropTypes.number.isRequired,
|
||||
|
||||
value: PropTypes.number.isRequired,
|
||||
};
|
||||
|
||||
export default TabPanel;
|
||||
export default TabPanel;
|
||||
@@ -1,128 +1,129 @@
|
||||
import { useState } from 'react';
|
||||
import { useState } from "react";
|
||||
import { useTranslation } from "react-i18next";
|
||||
import { networkService } from '../../../Utils/NetworkService';
|
||||
import { createToast } from '../../../Utils/toastUtils';
|
||||
import { networkService } from "../../../Utils/NetworkService";
|
||||
import { createToast } from "../../../Utils/toastUtils";
|
||||
|
||||
// Define constants for notification types to avoid magic values
|
||||
const NOTIFICATION_TYPES = {
|
||||
SLACK: 'slack',
|
||||
DISCORD: 'discord',
|
||||
TELEGRAM: 'telegram',
|
||||
WEBHOOK: 'webhook'
|
||||
SLACK: "slack",
|
||||
DISCORD: "discord",
|
||||
TELEGRAM: "telegram",
|
||||
WEBHOOK: "webhook",
|
||||
};
|
||||
|
||||
// Define constants for field IDs
|
||||
const FIELD_IDS = {
|
||||
WEBHOOK: 'webhook',
|
||||
TOKEN: 'token',
|
||||
CHAT_ID: 'chatId',
|
||||
URL: 'url'
|
||||
WEBHOOK: "webhook",
|
||||
TOKEN: "token",
|
||||
CHAT_ID: "chatId",
|
||||
URL: "url",
|
||||
};
|
||||
|
||||
/**
|
||||
* Custom hook for notification-related operations
|
||||
*/
|
||||
const useNotifications = () => {
|
||||
const [loading, setLoading] = useState(false);
|
||||
const [error, setError] = useState(undefined);
|
||||
const { t } = useTranslation();
|
||||
const [loading, setLoading] = useState(false);
|
||||
const [error, setError] = useState(undefined);
|
||||
const { t } = useTranslation();
|
||||
|
||||
/**
|
||||
* Send a test notification
|
||||
* @param {string} type - The notification type (slack, discord, telegram, webhook)
|
||||
* @param {object} config - Configuration object with necessary params
|
||||
*/
|
||||
const sendTestNotification = async (type, config) => {
|
||||
setLoading(true);
|
||||
setError(undefined);
|
||||
|
||||
// Validation based on notification type
|
||||
let payload = { platform: type };
|
||||
let isValid = true;
|
||||
let errorMessage = '';
|
||||
|
||||
switch(type) {
|
||||
case NOTIFICATION_TYPES.SLACK:
|
||||
payload.webhookUrl = config.webhook;
|
||||
if (typeof payload.webhookUrl === 'undefined' || payload.webhookUrl === '') {
|
||||
isValid = false;
|
||||
errorMessage = t('notifications.slack.webhookRequired');
|
||||
}
|
||||
break;
|
||||
|
||||
case NOTIFICATION_TYPES.DISCORD:
|
||||
payload.webhookUrl = config.webhook;
|
||||
if (typeof payload.webhookUrl === 'undefined' || payload.webhookUrl === '') {
|
||||
isValid = false;
|
||||
errorMessage = t('notifications.discord.webhookRequired');
|
||||
}
|
||||
break;
|
||||
|
||||
case NOTIFICATION_TYPES.TELEGRAM:
|
||||
payload.botToken = config.token;
|
||||
payload.chatId = config.chatId;
|
||||
if (typeof payload.botToken === 'undefined' || payload.botToken === '' ||
|
||||
typeof payload.chatId === 'undefined' || payload.chatId === '') {
|
||||
isValid = false;
|
||||
errorMessage = t('notifications.telegram.fieldsRequired');
|
||||
}
|
||||
break;
|
||||
|
||||
case NOTIFICATION_TYPES.WEBHOOK:
|
||||
payload.webhookUrl = config.url;
|
||||
payload.platform = NOTIFICATION_TYPES.SLACK;
|
||||
if (typeof payload.webhookUrl === 'undefined' || payload.webhookUrl === '') {
|
||||
isValid = false;
|
||||
errorMessage = t('notifications.webhook.urlRequired');
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
isValid = false;
|
||||
errorMessage = t('notifications.unsupportedType');
|
||||
}
|
||||
/**
|
||||
* Send a test notification
|
||||
* @param {string} type - The notification type (slack, discord, telegram, webhook)
|
||||
* @param {object} config - Configuration object with necessary params
|
||||
*/
|
||||
const sendTestNotification = async (type, config) => {
|
||||
setLoading(true);
|
||||
setError(undefined);
|
||||
|
||||
// If validation fails, show error and return
|
||||
if (isValid === false) {
|
||||
createToast({
|
||||
body: errorMessage,
|
||||
variant: "error"
|
||||
});
|
||||
setLoading(false);
|
||||
return;
|
||||
}
|
||||
// Validation based on notification type
|
||||
let payload = { platform: type };
|
||||
let isValid = true;
|
||||
let errorMessage = "";
|
||||
|
||||
try {
|
||||
const response = await networkService.testNotification({
|
||||
platform: type,
|
||||
payload: payload
|
||||
});
|
||||
|
||||
if (response.data.success === true) {
|
||||
createToast({
|
||||
body: t('notifications.testSuccess'),
|
||||
variant: "info"
|
||||
});
|
||||
} else {
|
||||
throw new Error(response.data.msg || t('notifications.testFailed'));
|
||||
}
|
||||
} catch (error) {
|
||||
const errorMsg = error.response?.data?.msg || error.message || t('notifications.networkError');
|
||||
createToast({
|
||||
body: `${t('notifications.testFailed')}: ${errorMsg}`,
|
||||
variant: "error"
|
||||
});
|
||||
setError(errorMsg);
|
||||
} finally {
|
||||
setLoading(false);
|
||||
}
|
||||
};
|
||||
switch (type) {
|
||||
case NOTIFICATION_TYPES.SLACK:
|
||||
payload.webhookUrl = config.webhook;
|
||||
if (typeof payload.webhookUrl === "undefined" || payload.webhookUrl === "") {
|
||||
isValid = false;
|
||||
errorMessage = t("notifications.slack.webhookRequired");
|
||||
}
|
||||
break;
|
||||
|
||||
return [
|
||||
loading,
|
||||
error,
|
||||
sendTestNotification
|
||||
];
|
||||
case NOTIFICATION_TYPES.DISCORD:
|
||||
payload.webhookUrl = config.webhook;
|
||||
if (typeof payload.webhookUrl === "undefined" || payload.webhookUrl === "") {
|
||||
isValid = false;
|
||||
errorMessage = t("notifications.discord.webhookRequired");
|
||||
}
|
||||
break;
|
||||
|
||||
case NOTIFICATION_TYPES.TELEGRAM:
|
||||
payload.botToken = config.token;
|
||||
payload.chatId = config.chatId;
|
||||
if (
|
||||
typeof payload.botToken === "undefined" ||
|
||||
payload.botToken === "" ||
|
||||
typeof payload.chatId === "undefined" ||
|
||||
payload.chatId === ""
|
||||
) {
|
||||
isValid = false;
|
||||
errorMessage = t("notifications.telegram.fieldsRequired");
|
||||
}
|
||||
break;
|
||||
|
||||
case NOTIFICATION_TYPES.WEBHOOK:
|
||||
payload.webhookUrl = config.url;
|
||||
payload.platform = NOTIFICATION_TYPES.SLACK;
|
||||
if (typeof payload.webhookUrl === "undefined" || payload.webhookUrl === "") {
|
||||
isValid = false;
|
||||
errorMessage = t("notifications.webhook.urlRequired");
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
isValid = false;
|
||||
errorMessage = t("notifications.unsupportedType");
|
||||
}
|
||||
|
||||
// If validation fails, show error and return
|
||||
if (isValid === false) {
|
||||
createToast({
|
||||
body: errorMessage,
|
||||
variant: "error",
|
||||
});
|
||||
setLoading(false);
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
const response = await networkService.testNotification({
|
||||
platform: type,
|
||||
payload: payload,
|
||||
});
|
||||
|
||||
if (response.data.success === true) {
|
||||
createToast({
|
||||
body: t("notifications.testSuccess"),
|
||||
variant: "info",
|
||||
});
|
||||
} else {
|
||||
throw new Error(response.data.msg || t("notifications.testFailed"));
|
||||
}
|
||||
} catch (error) {
|
||||
const errorMsg =
|
||||
error.response?.data?.msg || error.message || t("notifications.networkError");
|
||||
createToast({
|
||||
body: `${t("notifications.testFailed")}: ${errorMsg}`,
|
||||
variant: "error",
|
||||
});
|
||||
setError(errorMsg);
|
||||
} finally {
|
||||
setLoading(false);
|
||||
}
|
||||
};
|
||||
|
||||
return [loading, error, sendTestNotification];
|
||||
};
|
||||
|
||||
export default useNotifications;
|
||||
export default useNotifications;
|
||||
@@ -93,7 +93,7 @@ const ProgressUpload = ({ icon, label, size, progress = 0, onClick, error }) =>
|
||||
<Typography
|
||||
component="h2"
|
||||
mb={theme.spacing(1.5)}
|
||||
sx={{ wordBreak: 'break-all' }}
|
||||
sx={{ wordBreak: "break-all" }}
|
||||
>
|
||||
{error ? error : label}
|
||||
</Typography>
|
||||
|
||||
@@ -121,7 +121,7 @@ function Sidebar() {
|
||||
const dispatch = useDispatch();
|
||||
const { t } = useTranslation();
|
||||
const authState = useSelector((state) => state.auth);
|
||||
|
||||
|
||||
const menu = getMenu(t);
|
||||
const otherMenuItems = getOtherMenuItems(t);
|
||||
const accountMenuItems = getAccountMenuItems(t);
|
||||
@@ -147,7 +147,7 @@ function Sidebar() {
|
||||
} else {
|
||||
setSidebarReady(false);
|
||||
}
|
||||
}, [collapsed]);
|
||||
}, [collapsed]);
|
||||
|
||||
const renderAccountMenuItems = () => {
|
||||
let filteredAccountMenuItems = [...accountMenuItems];
|
||||
@@ -170,8 +170,8 @@ function Sidebar() {
|
||||
<MenuItem
|
||||
key={item.name}
|
||||
onClick={() => {
|
||||
closePopup()
|
||||
navigate(item.path)
|
||||
closePopup();
|
||||
navigate(item.path);
|
||||
}}
|
||||
sx={{
|
||||
gap: theme.spacing(2),
|
||||
@@ -231,7 +231,7 @@ function Sidebar() {
|
||||
*/
|
||||
sx={{
|
||||
position: "relative",
|
||||
borderRight: `1px solid ${theme.palette.primary.lowContrast}`,
|
||||
borderRight: `1px solid ${theme.palette.primary.lowContrast}`,
|
||||
borderColor: theme.palette.primary.lowContrast,
|
||||
borderRadius: 0,
|
||||
backgroundColor: theme.palette.primary.main,
|
||||
@@ -732,11 +732,15 @@ function Sidebar() {
|
||||
{authState.user?.firstName} {authState.user?.lastName}
|
||||
</Typography>
|
||||
<Typography sx={{ textTransform: "capitalize" }}>
|
||||
{authState.user?.role?.includes("superadmin") ? t("roles.superAdmin") :
|
||||
authState.user?.role?.includes("admin") ? t("roles.admin") :
|
||||
authState.user?.role?.includes("user") ? t("roles.teamMember") :
|
||||
authState.user?.role?.includes("demo") ? t("roles.demoUser") :
|
||||
authState.user?.role}
|
||||
{authState.user?.role?.includes("superadmin")
|
||||
? t("roles.superAdmin")
|
||||
: authState.user?.role?.includes("admin")
|
||||
? t("roles.admin")
|
||||
: authState.user?.role?.includes("user")
|
||||
? t("roles.teamMember")
|
||||
: authState.user?.role?.includes("demo")
|
||||
? t("roles.demoUser")
|
||||
: authState.user?.role}
|
||||
</Typography>
|
||||
</Box>
|
||||
<Stack
|
||||
|
||||
@@ -1,101 +1,108 @@
|
||||
import React from 'react';
|
||||
import { Typography, IconButton, Stack, Box } from '@mui/material';
|
||||
import CloseIcon from '@mui/icons-material/Close';
|
||||
import { useTheme } from '@emotion/react';
|
||||
import { useSelector, useDispatch } from 'react-redux';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
import { setStarPromptOpen } from '../../Features/UI/uiSlice';
|
||||
import React from "react";
|
||||
import { Typography, IconButton, Stack, Box } from "@mui/material";
|
||||
import CloseIcon from "@mui/icons-material/Close";
|
||||
import { useTheme } from "@emotion/react";
|
||||
import { useSelector, useDispatch } from "react-redux";
|
||||
import { useTranslation } from "react-i18next";
|
||||
import { setStarPromptOpen } from "../../Features/UI/uiSlice";
|
||||
|
||||
const StarPrompt = ({
|
||||
repoUrl = 'https://github.com/bluewave-labs/checkmate'
|
||||
}) => {
|
||||
const theme = useTheme();
|
||||
const dispatch = useDispatch();
|
||||
const { t } = useTranslation();
|
||||
const isOpen = useSelector((state) => state.ui?.starPromptOpen ?? true);
|
||||
const mode = useSelector((state) => state.ui.mode);
|
||||
const StarPrompt = ({ repoUrl = "https://github.com/bluewave-labs/checkmate" }) => {
|
||||
const theme = useTheme();
|
||||
const dispatch = useDispatch();
|
||||
const { t } = useTranslation();
|
||||
const isOpen = useSelector((state) => state.ui?.starPromptOpen ?? true);
|
||||
const mode = useSelector((state) => state.ui.mode);
|
||||
|
||||
const handleClose = () => {
|
||||
dispatch(setStarPromptOpen(false));
|
||||
};
|
||||
const handleClose = () => {
|
||||
dispatch(setStarPromptOpen(false));
|
||||
};
|
||||
|
||||
const handleStarClick = () => {
|
||||
window.open(repoUrl, '_blank');
|
||||
};
|
||||
const handleStarClick = () => {
|
||||
window.open(repoUrl, "_blank");
|
||||
};
|
||||
|
||||
if (!isOpen) return null;
|
||||
if (!isOpen) return null;
|
||||
|
||||
return (
|
||||
<Stack
|
||||
direction="column"
|
||||
sx={{
|
||||
width: '100%',
|
||||
padding: `${theme.spacing(6)} ${theme.spacing(6)}`,
|
||||
borderTop: `1px solid ${theme.palette.primary.lowContrast}`,
|
||||
borderBottom: `1px solid ${theme.palette.primary.lowContrast}`,
|
||||
borderRadius: 0,
|
||||
gap: theme.spacing(1.5),
|
||||
backgroundColor: theme.palette.primary.main,
|
||||
}}
|
||||
>
|
||||
<Stack direction="row" justifyContent="space-between" alignItems="center" width="100%" pl={theme.spacing(4)}>
|
||||
<Typography
|
||||
variant="subtitle2"
|
||||
sx={{
|
||||
color: mode === 'dark' ? theme.palette.primary.contrastText : theme.palette.text.primary,
|
||||
mt: theme.spacing(3)
|
||||
}}
|
||||
>
|
||||
{t('starPromptTitle')}
|
||||
</Typography>
|
||||
<IconButton
|
||||
onClick={handleClose}
|
||||
size="small"
|
||||
sx={{
|
||||
color: theme.palette.text.primary,
|
||||
padding: 0,
|
||||
marginTop: theme.spacing(-5),
|
||||
'&:hover': {
|
||||
backgroundColor: 'transparent',
|
||||
opacity: 0.8
|
||||
},
|
||||
}}
|
||||
>
|
||||
<CloseIcon sx={{ fontSize: '1.25rem' }} />
|
||||
</IconButton>
|
||||
</Stack>
|
||||
return (
|
||||
<Stack
|
||||
direction="column"
|
||||
sx={{
|
||||
width: "100%",
|
||||
padding: `${theme.spacing(6)} ${theme.spacing(6)}`,
|
||||
borderTop: `1px solid ${theme.palette.primary.lowContrast}`,
|
||||
borderBottom: `1px solid ${theme.palette.primary.lowContrast}`,
|
||||
borderRadius: 0,
|
||||
gap: theme.spacing(1.5),
|
||||
backgroundColor: theme.palette.primary.main,
|
||||
}}
|
||||
>
|
||||
<Stack
|
||||
direction="row"
|
||||
justifyContent="space-between"
|
||||
alignItems="center"
|
||||
width="100%"
|
||||
pl={theme.spacing(4)}
|
||||
>
|
||||
<Typography
|
||||
variant="subtitle2"
|
||||
sx={{
|
||||
color:
|
||||
mode === "dark"
|
||||
? theme.palette.primary.contrastText
|
||||
: theme.palette.text.primary,
|
||||
mt: theme.spacing(3),
|
||||
}}
|
||||
>
|
||||
{t("starPromptTitle")}
|
||||
</Typography>
|
||||
<IconButton
|
||||
onClick={handleClose}
|
||||
size="small"
|
||||
sx={{
|
||||
color: theme.palette.text.primary,
|
||||
padding: 0,
|
||||
marginTop: theme.spacing(-5),
|
||||
"&:hover": {
|
||||
backgroundColor: "transparent",
|
||||
opacity: 0.8,
|
||||
},
|
||||
}}
|
||||
>
|
||||
<CloseIcon sx={{ fontSize: "1.25rem" }} />
|
||||
</IconButton>
|
||||
</Stack>
|
||||
|
||||
<Typography
|
||||
variant="body1"
|
||||
sx={{
|
||||
color: theme.palette.text.secondary,
|
||||
fontSize: '0.938rem',
|
||||
lineHeight: 1.5,
|
||||
mb: 1,
|
||||
px: theme.spacing(4)
|
||||
}}
|
||||
>
|
||||
{t('starPromptDescription')}
|
||||
</Typography>
|
||||
<Typography
|
||||
variant="body1"
|
||||
sx={{
|
||||
color: theme.palette.text.secondary,
|
||||
fontSize: "0.938rem",
|
||||
lineHeight: 1.5,
|
||||
mb: 1,
|
||||
px: theme.spacing(4),
|
||||
}}
|
||||
>
|
||||
{t("starPromptDescription")}
|
||||
</Typography>
|
||||
|
||||
<Box
|
||||
component="img"
|
||||
src={`https://img.shields.io/github/stars/bluewave-labs/checkmate?label=checkmate&style=social${mode === 'dark' ? '&color=white' : ''}`}
|
||||
alt="GitHub stars"
|
||||
onClick={handleStarClick}
|
||||
sx={{
|
||||
cursor: 'pointer',
|
||||
transform: 'scale(0.65)',
|
||||
transformOrigin: 'left center',
|
||||
'&:hover': {
|
||||
opacity: 0.8
|
||||
},
|
||||
pl: theme.spacing(4),
|
||||
filter: mode === 'dark' ? 'invert(1)' : 'none'
|
||||
}}
|
||||
/>
|
||||
</Stack>
|
||||
);
|
||||
<Box
|
||||
component="img"
|
||||
src={`https://img.shields.io/github/stars/bluewave-labs/checkmate?label=checkmate&style=social${mode === "dark" ? "&color=white" : ""}`}
|
||||
alt="GitHub stars"
|
||||
onClick={handleStarClick}
|
||||
sx={{
|
||||
cursor: "pointer",
|
||||
transform: "scale(0.65)",
|
||||
transformOrigin: "left center",
|
||||
"&:hover": {
|
||||
opacity: 0.8,
|
||||
},
|
||||
pl: theme.spacing(4),
|
||||
filter: mode === "dark" ? "invert(1)" : "none",
|
||||
}}
|
||||
/>
|
||||
</Stack>
|
||||
);
|
||||
};
|
||||
|
||||
export default StarPrompt;
|
||||
@@ -80,7 +80,7 @@ const StatBox = ({
|
||||
};
|
||||
|
||||
const responsiveWidths = {
|
||||
default: `calc(25% - (3 * ${theme.spacing(8)} / 4))`,
|
||||
default: `calc(25% - (3 * ${theme.spacing(8)} / 4))`,
|
||||
md: `calc(50% - (1 * ${theme.spacing(8)} / 2))`,
|
||||
};
|
||||
|
||||
|
||||
@@ -20,7 +20,11 @@ const CustomTabList = ({ value, onChange, children, ...props }) => {
|
||||
"& .MuiTabs-root": { height: "fit-content", minHeight: "0" },
|
||||
}}
|
||||
>
|
||||
<TabList value={value} onChange={onChange} {...props}>
|
||||
<TabList
|
||||
value={value}
|
||||
onChange={onChange}
|
||||
{...props}
|
||||
>
|
||||
{children}
|
||||
</TabList>
|
||||
</Box>
|
||||
|
||||
@@ -94,7 +94,10 @@ const PasswordPanel = () => {
|
||||
const action = await dispatch(update({ localData }));
|
||||
if (action.payload.success) {
|
||||
createToast({
|
||||
body: t("passwordPanel.passwordChangedSuccess", "Your password was changed successfully."),
|
||||
body: t(
|
||||
"passwordPanel.passwordChangedSuccess",
|
||||
"Your password was changed successfully."
|
||||
),
|
||||
});
|
||||
setLocalData({
|
||||
password: "",
|
||||
@@ -104,7 +107,10 @@ const PasswordPanel = () => {
|
||||
} else {
|
||||
// TODO: Check for other errors?
|
||||
createToast({
|
||||
body: t("passwordPanel.passwordInputIncorrect", "Your password input was incorrect."),
|
||||
body: t(
|
||||
"passwordPanel.passwordInputIncorrect",
|
||||
"Your password input was incorrect."
|
||||
),
|
||||
});
|
||||
setErrors({ password: "*" + action.payload.msg + "." });
|
||||
}
|
||||
@@ -153,7 +159,10 @@ const PasswordPanel = () => {
|
||||
<TextInput
|
||||
type="password"
|
||||
id="edit-current-password"
|
||||
placeholder={t("passwordPanel.enterCurrentPassword", "Enter your current password")}
|
||||
placeholder={t(
|
||||
"passwordPanel.enterCurrentPassword",
|
||||
"Enter your current password"
|
||||
)}
|
||||
autoComplete="current-password"
|
||||
value={localData.password}
|
||||
onChange={handleChange}
|
||||
@@ -219,7 +228,10 @@ const PasswordPanel = () => {
|
||||
<Box sx={{ maxWidth: "70ch" }}>
|
||||
<Alert
|
||||
variant="warning"
|
||||
body={t("passwordPanel.passwordRequirements", "New password must contain at least 8 characters and must have at least one uppercase letter, one lowercase letter, one number and one special character.")}
|
||||
body={t(
|
||||
"passwordPanel.passwordRequirements",
|
||||
"New password must contain at least 8 characters and must have at least one uppercase letter, one lowercase letter, one number and one special character."
|
||||
)}
|
||||
/>
|
||||
</Box>
|
||||
)}
|
||||
|
||||
@@ -85,13 +85,13 @@ const ProfilePanel = () => {
|
||||
// Resets picture-related states and clears interval
|
||||
const removePicture = () => {
|
||||
errors["picture"] && clearError("picture");
|
||||
setFile(undefined);
|
||||
setFile(undefined);
|
||||
setLocalData((prev) => ({
|
||||
...prev,
|
||||
file: undefined,
|
||||
deleteProfileImage: true,
|
||||
deleteProfileImage: true,
|
||||
}));
|
||||
};
|
||||
};
|
||||
|
||||
// Opens the picture update modal
|
||||
const openPictureModal = () => {
|
||||
@@ -102,9 +102,9 @@ const ProfilePanel = () => {
|
||||
// Closes the picture update modal and resets related states
|
||||
const closePictureModal = () => {
|
||||
if (errors["picture"]) clearError("picture");
|
||||
setFile(undefined);
|
||||
setIsOpen("");
|
||||
};
|
||||
setFile(undefined);
|
||||
setIsOpen("");
|
||||
};
|
||||
|
||||
// Updates profile image displayed on UI
|
||||
const handleUpdatePicture = () => {
|
||||
@@ -116,24 +116,23 @@ const ProfilePanel = () => {
|
||||
setIsOpen("");
|
||||
if (errors["unchanged"]) clearError("unchanged");
|
||||
};
|
||||
|
||||
|
||||
// Handles form submission to update user profile
|
||||
const handleSaveProfile = async (event) => {
|
||||
event.preventDefault();
|
||||
const nameChanged =
|
||||
localData.firstName !== user.firstName ||
|
||||
localData.lastName !== user.lastName;
|
||||
localData.firstName !== user.firstName || localData.lastName !== user.lastName;
|
||||
|
||||
const avatarChanged =
|
||||
localData.deleteProfileImage === true ||
|
||||
(localData.file && localData.file !== `data:image/png;base64,${user.avatarImage}`);
|
||||
localData.deleteProfileImage === true ||
|
||||
(localData.file && localData.file !== `data:image/png;base64,${user.avatarImage}`);
|
||||
|
||||
if (!nameChanged && !avatarChanged) {
|
||||
createToast({
|
||||
body: "Unable to update profile — no changes detected.",
|
||||
});
|
||||
setErrors({ unchanged: "unable to update profile" });
|
||||
return;
|
||||
createToast({
|
||||
body: "Unable to update profile — no changes detected.",
|
||||
});
|
||||
setErrors({ unchanged: "unable to update profile" });
|
||||
return;
|
||||
}
|
||||
|
||||
const action = await dispatch(update({ localData }));
|
||||
@@ -205,7 +204,7 @@ const ProfilePanel = () => {
|
||||
>
|
||||
{/* This 0.9 is a bit magic numbering, refactor */}
|
||||
<Box flex={0.9}>
|
||||
<Typography component="h1">{t('FirstName')}</Typography>
|
||||
<Typography component="h1">{t("FirstName")}</Typography>
|
||||
</Box>
|
||||
<TextInput
|
||||
id="edit-first-name"
|
||||
@@ -223,7 +222,7 @@ const ProfilePanel = () => {
|
||||
gap={SPACING_GAP}
|
||||
>
|
||||
<Box flex={0.9}>
|
||||
<Typography component="h1">{t('LastName')}</Typography>
|
||||
<Typography component="h1">{t("LastName")}</Typography>
|
||||
</Box>
|
||||
<TextInput
|
||||
id="edit-last-name"
|
||||
@@ -241,12 +240,12 @@ const ProfilePanel = () => {
|
||||
gap={SPACING_GAP}
|
||||
>
|
||||
<Stack flex={0.9}>
|
||||
<Typography component="h1">{t('email')}</Typography>
|
||||
<Typography component="h1">{t("email")}</Typography>
|
||||
<Typography
|
||||
component="p"
|
||||
sx={{ opacity: 0.6 }}
|
||||
>
|
||||
{t('EmailDescriptionText')}
|
||||
{t("EmailDescriptionText")}
|
||||
</Typography>
|
||||
</Stack>
|
||||
<TextInput
|
||||
@@ -264,12 +263,12 @@ const ProfilePanel = () => {
|
||||
gap={SPACING_GAP}
|
||||
>
|
||||
<Stack flex={0.9}>
|
||||
<Typography component="h1">{t('YourPhoto')}</Typography>
|
||||
<Typography component="h1">{t("YourPhoto")}</Typography>
|
||||
<Typography
|
||||
component="p"
|
||||
sx={{ opacity: 0.6 }}
|
||||
>
|
||||
{t('PhotoDescriptionText')}
|
||||
{t("PhotoDescriptionText")}
|
||||
</Typography>
|
||||
</Stack>
|
||||
<Stack
|
||||
@@ -293,14 +292,14 @@ const ProfilePanel = () => {
|
||||
color="error"
|
||||
onClick={handleDeletePicture}
|
||||
>
|
||||
{t('delete')}
|
||||
{t("delete")}
|
||||
</Button>
|
||||
<Button
|
||||
variant="contained" // CAIO_REVIEW
|
||||
color="accent"
|
||||
onClick={openPictureModal}
|
||||
>
|
||||
{t('update')}
|
||||
{t("update")}
|
||||
</Button>
|
||||
</Stack>
|
||||
</Stack>
|
||||
@@ -325,7 +324,7 @@ const ProfilePanel = () => {
|
||||
disabled={Object.keys(errors).length !== 0 && !errors?.picture && true}
|
||||
sx={{ px: theme.spacing(12) }}
|
||||
>
|
||||
{t('save')}
|
||||
{t("save")}
|
||||
</Button>
|
||||
</Box>
|
||||
</Stack>
|
||||
@@ -344,12 +343,12 @@ const ProfilePanel = () => {
|
||||
spellCheck="false"
|
||||
>
|
||||
<Box mb={theme.spacing(6)}>
|
||||
<Typography component="h1">{t('DeleteAccountTitle')}</Typography>
|
||||
<Typography component="h1">{t("DeleteAccountTitle")}</Typography>
|
||||
<Typography
|
||||
component="p"
|
||||
sx={{ opacity: 0.6 }}
|
||||
>
|
||||
{t('DeleteDescriptionText')}
|
||||
{t("DeleteDescriptionText")}
|
||||
</Typography>
|
||||
</Box>
|
||||
<Button
|
||||
@@ -357,17 +356,17 @@ const ProfilePanel = () => {
|
||||
color="error"
|
||||
onClick={() => setIsOpen("delete")}
|
||||
>
|
||||
{t('DeleteAccountButton')}
|
||||
{t("DeleteAccountButton")}
|
||||
</Button>
|
||||
</Box>
|
||||
)}
|
||||
<Dialog
|
||||
open={isModalOpen("delete")}
|
||||
theme={theme}
|
||||
title={t('DeleteWarningTitle')}
|
||||
description={t('DeleteAccountWarning')}
|
||||
title={t("DeleteWarningTitle")}
|
||||
description={t("DeleteAccountWarning")}
|
||||
onCancel={() => setIsOpen("")}
|
||||
confirmationButtonLabel={t('DeleteAccountButton')}
|
||||
confirmationButtonLabel={t("DeleteAccountButton")}
|
||||
onConfirm={handleDeleteAccount}
|
||||
isLoading={isLoading}
|
||||
/>
|
||||
@@ -389,13 +388,13 @@ const ProfilePanel = () => {
|
||||
: user?.avatarImage
|
||||
? `data:image/png;base64,${user.avatarImage}`
|
||||
: ""
|
||||
}
|
||||
}
|
||||
onChange={(newFile) => {
|
||||
if (newFile) {
|
||||
setFile(newFile);
|
||||
clearError("unchanged");
|
||||
}
|
||||
}}
|
||||
}}
|
||||
previewIsRound
|
||||
maxSize={3 * 1024 * 1024}
|
||||
/>
|
||||
@@ -410,7 +409,7 @@ const ProfilePanel = () => {
|
||||
color="info"
|
||||
onClick={removePicture}
|
||||
>
|
||||
{t('remove')}
|
||||
{t("remove")}
|
||||
</Button>
|
||||
<Button
|
||||
variant="contained"
|
||||
@@ -418,7 +417,7 @@ const ProfilePanel = () => {
|
||||
onClick={handleUpdatePicture}
|
||||
disabled={!!errors.picture || !file?.src}
|
||||
>
|
||||
{t('update')}
|
||||
{t("update")}
|
||||
</Button>
|
||||
</Stack>
|
||||
</GenericDialog>
|
||||
|
||||
@@ -48,7 +48,8 @@ const TeamPanel = () => {
|
||||
{row.firstName + " " + row.lastName}
|
||||
</Typography>
|
||||
<Typography>
|
||||
{t("teamPanel.table.created")} {new Date(row.createdAt).toLocaleDateString()}
|
||||
{t("teamPanel.table.created")}{" "}
|
||||
{new Date(row.createdAt).toLocaleDateString()}
|
||||
</Typography>
|
||||
</Stack>
|
||||
);
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
.wallet-adapter-dropdown {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
gap: var(--env-var-spacing-1);
|
||||
flex-wrap: wrap;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
gap: var(--env-var-spacing-1);
|
||||
}
|
||||
|
||||
.wallet-adapter-button {
|
||||
@@ -15,37 +15,39 @@
|
||||
height: var(--env-var-height-2) !important;
|
||||
font-size: var(--env-var-font-size-medium-plus) !important;
|
||||
font-weight: 500 !important;
|
||||
margin: 0;
|
||||
padding: calc((var(--env-var-height-2) - var(--env-var-font-size-medium-plus) * 1.2) / 2) var(--env-var-spacing-1);
|
||||
margin: 0;
|
||||
padding: calc(
|
||||
(var(--env-var-height-2) - var(--env-var-font-size-medium-plus) * 1.2) / 2
|
||||
)
|
||||
var(--env-var-spacing-1);
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.wallet-adapter-modal-title {
|
||||
font-size: var(--font-size-h5) !important;
|
||||
font-size: var(--font-size-h5) !important;
|
||||
}
|
||||
|
||||
/* Separator styling */
|
||||
.wallet-adapter-modal-divider {
|
||||
background-color: var(--border-color) !important;
|
||||
margin: var(--spacing-md) 0 !important;
|
||||
background-color: var(--border-color) !important;
|
||||
margin: var(--spacing-md) 0 !important;
|
||||
}
|
||||
|
||||
/* Responsive fixes */
|
||||
@media (max-width: 1200px) {
|
||||
@media (max-width: 1200px) {
|
||||
.wallet-adapter-button {
|
||||
font-size: var(--env-var-font-size-medium) !important;
|
||||
padding: calc((var(--env-var-height-2) - var(--env-var-font-size-medium) * 1.2) / 2)
|
||||
var(--env-var-spacing-1-minus) !important;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 900px) {
|
||||
.wallet-adapter-modal-wrapper {
|
||||
flex-direction: column !important;
|
||||
}
|
||||
|
||||
.wallet-adapter-modal-divider {
|
||||
margin: var(--spacing-sm) 0 !important;
|
||||
}
|
||||
}
|
||||
@media (max-width: 900px) {
|
||||
.wallet-adapter-modal-wrapper {
|
||||
flex-direction: column !important;
|
||||
}
|
||||
|
||||
.wallet-adapter-modal-divider {
|
||||
margin: var(--spacing-sm) 0 !important;
|
||||
}
|
||||
}
|
||||
@@ -2,26 +2,26 @@ import { useState } from "react";
|
||||
import { networkService } from "../main";
|
||||
|
||||
export const useBulkMonitors = () => {
|
||||
const [isLoading, setIsLoading] = useState(false);
|
||||
const [isLoading, setIsLoading] = useState(false);
|
||||
|
||||
const createBulkMonitors = async (file, user) => {
|
||||
setIsLoading(true);
|
||||
const createBulkMonitors = async (file, user) => {
|
||||
setIsLoading(true);
|
||||
|
||||
const formData = new FormData();
|
||||
formData.append("csvFile", file);
|
||||
formData.append("userId", user._id);
|
||||
formData.append("teamId", user.teamId);
|
||||
const formData = new FormData();
|
||||
formData.append("csvFile", file);
|
||||
formData.append("userId", user._id);
|
||||
formData.append("teamId", user.teamId);
|
||||
|
||||
try {
|
||||
const response = await networkService.createBulkMonitors(formData);
|
||||
return [true, response.data, null]; // [success, data, error]
|
||||
} catch (err) {
|
||||
const errorMessage = err?.response?.data?.msg || err.message;
|
||||
return [false, null, errorMessage];
|
||||
} finally {
|
||||
setIsLoading(false);
|
||||
}
|
||||
};
|
||||
try {
|
||||
const response = await networkService.createBulkMonitors(formData);
|
||||
return [true, response.data, null]; // [success, data, error]
|
||||
} catch (err) {
|
||||
const errorMessage = err?.response?.data?.msg || err.message;
|
||||
return [false, null, errorMessage];
|
||||
} finally {
|
||||
setIsLoading(false);
|
||||
}
|
||||
};
|
||||
|
||||
return [createBulkMonitors, isLoading];
|
||||
return [createBulkMonitors, isLoading];
|
||||
};
|
||||
@@ -2,7 +2,6 @@ import { useCallback } from "react";
|
||||
import { useTheme } from "@mui/material";
|
||||
|
||||
const useMonitorUtils = () => {
|
||||
|
||||
const getMonitorWithPercentage = useCallback((monitor, theme) => {
|
||||
let uptimePercentage = "";
|
||||
let percentageColor = "";
|
||||
|
||||
@@ -20,18 +20,20 @@ const useSendTestEmail = () => {
|
||||
setError(null);
|
||||
|
||||
// Send the test email with or without configuration
|
||||
const response = await networkService.sendTestEmail({
|
||||
const response = await networkService.sendTestEmail({
|
||||
to: user.email,
|
||||
emailConfig
|
||||
emailConfig,
|
||||
});
|
||||
|
||||
|
||||
if (typeof response?.data?.data?.messageId !== "undefined") {
|
||||
createToast({
|
||||
body: t("settingsTestEmailSuccess", "Test email sent successfully"),
|
||||
});
|
||||
} else {
|
||||
throw new Error(response?.data?.error || t("settingsTestEmailFailed", "Failed to send test email"));
|
||||
|
||||
throw new Error(
|
||||
response?.data?.error ||
|
||||
t("settingsTestEmailFailed", "Failed to send test email")
|
||||
);
|
||||
}
|
||||
} catch (error) {
|
||||
createToast({
|
||||
@@ -39,10 +41,14 @@ const useSendTestEmail = () => {
|
||||
});
|
||||
setError(error);
|
||||
createToast({
|
||||
body: t("settingsTestEmailFailedWithReason", "Failed to send test email: {{reason}}", {
|
||||
reason: error.message || t("settingsTestEmailUnknownError", "Unknown error")
|
||||
}),
|
||||
variant: "error"
|
||||
body: t(
|
||||
"settingsTestEmailFailedWithReason",
|
||||
"Failed to send test email: {{reason}}",
|
||||
{
|
||||
reason: error.message || t("settingsTestEmailUnknownError", "Unknown error"),
|
||||
}
|
||||
),
|
||||
variant: "error",
|
||||
});
|
||||
} finally {
|
||||
setIsSending(false);
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import React from 'react';
|
||||
import AppBar from '../../Components/Common/AppBar';
|
||||
import Footer from '../../Components/Common/Footer';
|
||||
import React from "react";
|
||||
import AppBar from "../../Components/Common/AppBar";
|
||||
import Footer from "../../Components/Common/Footer";
|
||||
import { useTranslation } from "react-i18next";
|
||||
|
||||
const AboutUs = () => {
|
||||
|
||||
@@ -31,21 +31,19 @@ const Account = ({ open = "profile" }) => {
|
||||
let tabList = [
|
||||
{ name: t("menu.profile"), value: "profile" },
|
||||
{ name: t("menu.password"), value: "password" },
|
||||
{ name: t("menu.team"), value: "team" }
|
||||
{ name: t("menu.team"), value: "team" },
|
||||
];
|
||||
const hideTeams = !requiredRoles.some((role) => user.role.includes(role));
|
||||
if (hideTeams) {
|
||||
tabList = [
|
||||
{ name: t("menu.profile"), value: "profile" },
|
||||
{ name: t("menu.password"), value: "password" }
|
||||
{ name: t("menu.password"), value: "password" },
|
||||
];
|
||||
}
|
||||
|
||||
// Remove password for demo
|
||||
if (user.role.includes("demo")) {
|
||||
tabList = [
|
||||
{ name: t("menu.profile"), value: "profile" }
|
||||
];
|
||||
tabList = [{ name: t("menu.profile"), value: "profile" }];
|
||||
}
|
||||
|
||||
const handleKeyDown = (event) => {
|
||||
@@ -70,7 +68,11 @@ const Account = ({ open = "profile" }) => {
|
||||
py={theme.spacing(12)}
|
||||
>
|
||||
<TabContext value={tab}>
|
||||
<CustomTabList value={tab} onChange={handleTabChange} aria-label="account tabs">
|
||||
<CustomTabList
|
||||
value={tab}
|
||||
onChange={handleTabChange}
|
||||
aria-label="account tabs"
|
||||
>
|
||||
{tabList.map((item, index) => (
|
||||
<Tab
|
||||
label={item.name}
|
||||
|
||||
@@ -75,11 +75,11 @@ const EmailStep = ({ form, errors, onSubmit, onChange }) => {
|
||||
width: "30%",
|
||||
px: theme.spacing(6),
|
||||
borderRadius: `${theme.shape.borderRadius}px !important`,
|
||||
'&.MuiButtonBase-root': {
|
||||
borderRadius: `${theme.shape.borderRadius}px !important`
|
||||
"&.MuiButtonBase-root": {
|
||||
borderRadius: `${theme.shape.borderRadius}px !important`,
|
||||
},
|
||||
'&.MuiButton-root': {
|
||||
borderRadius: `${theme.shape.borderRadius}px !important`
|
||||
"&.MuiButton-root": {
|
||||
borderRadius: `${theme.shape.borderRadius}px !important`,
|
||||
},
|
||||
"&.Mui-focusVisible": {
|
||||
outline: `2px solid ${theme.palette.primary.main}`,
|
||||
|
||||
@@ -79,11 +79,11 @@ const PasswordStep = ({ form, errors, onSubmit, onChange, onBack }) => {
|
||||
sx={{
|
||||
px: theme.spacing(5),
|
||||
borderRadius: `${theme.shape.borderRadius}px !important`,
|
||||
'&.MuiButtonBase-root': {
|
||||
borderRadius: `${theme.shape.borderRadius}px !important`
|
||||
"&.MuiButtonBase-root": {
|
||||
borderRadius: `${theme.shape.borderRadius}px !important`,
|
||||
},
|
||||
'&.MuiButton-root': {
|
||||
borderRadius: `${theme.shape.borderRadius}px !important`
|
||||
"&.MuiButton-root": {
|
||||
borderRadius: `${theme.shape.borderRadius}px !important`,
|
||||
},
|
||||
"& svg.MuiSvgIcon-root": {
|
||||
mr: theme.spacing(3),
|
||||
@@ -108,11 +108,11 @@ const PasswordStep = ({ form, errors, onSubmit, onChange, onBack }) => {
|
||||
width: "30%",
|
||||
px: theme.spacing(4),
|
||||
borderRadius: `${theme.shape.borderRadius}px !important`,
|
||||
'&.MuiButtonBase-root': {
|
||||
borderRadius: `${theme.shape.borderRadius}px !important`
|
||||
"&.MuiButtonBase-root": {
|
||||
borderRadius: `${theme.shape.borderRadius}px !important`,
|
||||
},
|
||||
'&.MuiButton-root': {
|
||||
borderRadius: `${theme.shape.borderRadius}px !important`
|
||||
"&.MuiButton-root": {
|
||||
borderRadius: `${theme.shape.borderRadius}px !important`,
|
||||
},
|
||||
"&.Mui-focusVisible": {
|
||||
outline: `2px solid ${theme.palette.primary.main}`,
|
||||
|
||||
@@ -43,8 +43,6 @@ const Login = () => {
|
||||
const [errors, setErrors] = useState({});
|
||||
const [step, setStep] = useState(0);
|
||||
|
||||
|
||||
|
||||
useEffect(() => {
|
||||
if (authToken) {
|
||||
navigate("/uptime");
|
||||
@@ -84,7 +82,9 @@ const Login = () => {
|
||||
);
|
||||
if (error) {
|
||||
const errorMessage = error.details[0].message;
|
||||
const translatedMessage = errorMessage.startsWith('auth') ? t(errorMessage) : errorMessage;
|
||||
const translatedMessage = errorMessage.startsWith("auth")
|
||||
? t(errorMessage)
|
||||
: errorMessage;
|
||||
setErrors((prev) => ({ ...prev, email: translatedMessage }));
|
||||
createToast({ body: translatedMessage });
|
||||
} else {
|
||||
@@ -103,7 +103,9 @@ const Login = () => {
|
||||
createToast({
|
||||
body:
|
||||
error.details && error.details.length > 0
|
||||
? (error.details[0].message.startsWith('auth') ? t(error.details[0].message) : error.details[0].message)
|
||||
? error.details[0].message.startsWith("auth")
|
||||
? t(error.details[0].message)
|
||||
: error.details[0].message
|
||||
: t("Error validating data."),
|
||||
});
|
||||
} else {
|
||||
@@ -227,9 +229,9 @@ const Login = () => {
|
||||
email={form.email}
|
||||
errorEmail={errors.email}
|
||||
/>
|
||||
|
||||
|
||||
{/* Registration link */}
|
||||
<Box textAlign="center" >
|
||||
<Box textAlign="center">
|
||||
<Typography
|
||||
className="forgot-p"
|
||||
display="inline-block"
|
||||
@@ -241,11 +243,11 @@ const Login = () => {
|
||||
component="span"
|
||||
color={theme.palette.accent.main}
|
||||
ml={theme.spacing(2)}
|
||||
sx={{
|
||||
cursor: 'pointer',
|
||||
'&:hover': {
|
||||
color: theme.palette.accent.darker
|
||||
}
|
||||
sx={{
|
||||
cursor: "pointer",
|
||||
"&:hover": {
|
||||
color: theme.palette.accent.darker,
|
||||
},
|
||||
}}
|
||||
onClick={() => navigate("/register")}
|
||||
>
|
||||
|
||||
@@ -100,9 +100,7 @@ const NewPasswordConfirmed = () => {
|
||||
</IconBox>
|
||||
</Stack>
|
||||
<Typography component="h1">{t("passwordreset")}</Typography>
|
||||
<Typography mb={theme.spacing(2)}>
|
||||
{t("authNewPasswordConfirmed")}
|
||||
</Typography>
|
||||
<Typography mb={theme.spacing(2)}>{t("authNewPasswordConfirmed")}</Typography>
|
||||
</Box>
|
||||
<Button
|
||||
variant="contained"
|
||||
|
||||
@@ -105,7 +105,7 @@ const LandingPage = ({ isSuperAdmin, onSignup }) => {
|
||||
);
|
||||
}}
|
||||
/>
|
||||
)
|
||||
),
|
||||
}}
|
||||
/>
|
||||
</Typography>
|
||||
|
||||
@@ -68,11 +68,14 @@ function StepTwo({ form, errors, onSubmit, onChange, onBack }) {
|
||||
onInput={(e) => (e.target.value = e.target.value.toLowerCase())}
|
||||
onChange={onChange}
|
||||
error={errors.email ? true : false}
|
||||
helperText={errors.email && (
|
||||
errors.email.includes("required") ? t("authRegisterEmailRequired") :
|
||||
errors.email.includes("valid email") ? t("authRegisterEmailInvalid") :
|
||||
t(errors.email)
|
||||
)}
|
||||
helperText={
|
||||
errors.email &&
|
||||
(errors.email.includes("required")
|
||||
? t("authRegisterEmailRequired")
|
||||
: errors.email.includes("valid email")
|
||||
? t("authRegisterEmailInvalid")
|
||||
: t(errors.email))
|
||||
}
|
||||
ref={inputRef}
|
||||
/>
|
||||
<Stack
|
||||
|
||||
@@ -199,9 +199,7 @@ const CreateDistributedUptime = () => {
|
||||
<ConfigBox>
|
||||
<Box>
|
||||
<Typography component="h2">{t("settingsGeneralSettings")}</Typography>
|
||||
<Typography component="p">
|
||||
{t("distributedUptimeCreateSelectURL")}
|
||||
</Typography>
|
||||
<Typography component="p">{t("distributedUptimeCreateSelectURL")}</Typography>
|
||||
</Box>
|
||||
<Stack gap={theme.spacing(15)}>
|
||||
<TextInput
|
||||
@@ -293,7 +291,9 @@ const CreateDistributedUptime = () => {
|
||||
</ConfigBox>
|
||||
<ConfigBox>
|
||||
<Box>
|
||||
<Typography component="h2">{t("distributedUptimeCreateIncidentNotification")}</Typography>
|
||||
<Typography component="h2">
|
||||
{t("distributedUptimeCreateIncidentNotification")}
|
||||
</Typography>
|
||||
<Typography component="p">
|
||||
{t("distributedUptimeCreateIncidentDescription")}
|
||||
</Typography>
|
||||
@@ -312,7 +312,9 @@ const CreateDistributedUptime = () => {
|
||||
</ConfigBox>
|
||||
<ConfigBox>
|
||||
<Box>
|
||||
<Typography component="h2">{t("distributedUptimeCreateAdvancedSettings")}</Typography>
|
||||
<Typography component="h2">
|
||||
{t("distributedUptimeCreateAdvancedSettings")}
|
||||
</Typography>
|
||||
</Box>
|
||||
<Stack gap={theme.spacing(12)}>
|
||||
<Select
|
||||
|
||||
@@ -17,7 +17,7 @@ const MESSAGES = [
|
||||
|
||||
const ChatBot = ({ sx }) => {
|
||||
const theme = useTheme();
|
||||
const { t } = useTranslation();
|
||||
const { t } = useTranslation();
|
||||
return (
|
||||
<ColContainer
|
||||
backgroundColor={theme.palette.chatbot.background}
|
||||
|
||||
@@ -12,7 +12,7 @@ import { useTranslation } from "react-i18next";
|
||||
const Controls = ({ isDeleteOpen, setIsDeleteOpen, isDeleting, monitorId }) => {
|
||||
const theme = useTheme();
|
||||
const navigate = useNavigate();
|
||||
const { t } = useTranslation();
|
||||
const { t } = useTranslation();
|
||||
|
||||
return (
|
||||
<Stack
|
||||
|
||||
@@ -76,7 +76,9 @@ const DeviceTicker = ({ data, width = "100%", connectionStatus }) => {
|
||||
<Typography>{city}</Typography>
|
||||
</td>
|
||||
<td style={{ textAlign: "right", paddingLeft: theme.spacing(4) }}>
|
||||
<Typography>{Math.floor(dataPoint.responseTime)} {t("ms")}</Typography>
|
||||
<Typography>
|
||||
{Math.floor(dataPoint.responseTime)} {t("ms")}
|
||||
</Typography>
|
||||
</td>
|
||||
<td style={{ textAlign: "right", paddingLeft: theme.spacing(4) }}>
|
||||
<Typography color={theme.palette.warning.main}>
|
||||
|
||||
@@ -10,9 +10,7 @@ const MonitorHeader = ({ monitor }) => {
|
||||
<Stack direction="row">
|
||||
<Stack gap={theme.spacing(2)}>
|
||||
<Typography variant="h1">{monitor.name}</Typography>
|
||||
<Typography variant="h2">
|
||||
{t("distributedUptimeDetailsMonitorHeader")}
|
||||
</Typography>
|
||||
<Typography variant="h2">{t("distributedUptimeDetailsMonitorHeader")}</Typography>
|
||||
</Stack>
|
||||
</Stack>
|
||||
);
|
||||
|
||||
@@ -2,7 +2,14 @@ import { useState, useEffect } from "react";
|
||||
import { networkService } from "../../../main";
|
||||
import { createToast } from "../../../Utils/toastUtils";
|
||||
import { useSelector } from "react-redux";
|
||||
const useChecksFetch = ({ selectedMonitor, selectedMonitorType, filter, dateRange, page, rowsPerPage }) => {
|
||||
const useChecksFetch = ({
|
||||
selectedMonitor,
|
||||
selectedMonitorType,
|
||||
filter,
|
||||
dateRange,
|
||||
page,
|
||||
rowsPerPage,
|
||||
}) => {
|
||||
//Redux
|
||||
const { user } = useSelector((state) => state.auth);
|
||||
|
||||
|
||||
@@ -30,7 +30,7 @@ const useMonitorsFetch = ({ teamId }) => {
|
||||
acc[monitor._id] = {
|
||||
_id: monitor._id,
|
||||
name: monitor.name,
|
||||
type: monitor.type
|
||||
type: monitor.type,
|
||||
};
|
||||
return acc;
|
||||
}, {});
|
||||
|
||||
@@ -18,8 +18,10 @@ const Incidents = () => {
|
||||
// Redux state
|
||||
const { user } = useSelector((state) => state.auth);
|
||||
const { t } = useTranslation();
|
||||
|
||||
const BREADCRUMBS = [{ name: t("incidentsPageTitle", "Incidents"), path: "/incidents" }];
|
||||
|
||||
const BREADCRUMBS = [
|
||||
{ name: t("incidentsPageTitle", "Incidents"), path: "/incidents" },
|
||||
];
|
||||
|
||||
// Local state
|
||||
const [selectedMonitor, setSelectedMonitor] = useState("0");
|
||||
|
||||
@@ -6,7 +6,10 @@ import { useSelector, useDispatch } from "react-redux";
|
||||
|
||||
// Utility and Network
|
||||
import { infrastructureMonitorValidation } from "../../../Validation/validation";
|
||||
import { createInfrastructureMonitor, updateInfrastructureMonitor } from "../../../Features/InfrastructureMonitors/infrastructureMonitorsSlice";
|
||||
import {
|
||||
createInfrastructureMonitor,
|
||||
updateInfrastructureMonitor,
|
||||
} from "../../../Features/InfrastructureMonitors/infrastructureMonitorsSlice";
|
||||
import { useHardwareMonitorsFetch } from "../Details/Hooks/useHardwareMonitorsFetch";
|
||||
import { capitalizeFirstLetter } from "../../../Utils/stringUtils";
|
||||
import { useTranslation } from "react-i18next";
|
||||
@@ -55,7 +58,7 @@ const CreateInfrastructureMonitor = () => {
|
||||
const dispatch = useDispatch();
|
||||
const navigate = useNavigate();
|
||||
const { monitorId } = useParams();
|
||||
const { t } = useTranslation();
|
||||
const { t } = useTranslation();
|
||||
|
||||
// Determine if we are creating or editing
|
||||
const isCreate = typeof monitorId === "undefined";
|
||||
@@ -90,20 +93,26 @@ const CreateInfrastructureMonitor = () => {
|
||||
setInfrastructureMonitor({
|
||||
url: monitor.url.replace(/^https?:\/\//, ""),
|
||||
name: monitor.name || "",
|
||||
notifications: monitor.notifications?.filter(n => typeof n === "object") || [],
|
||||
notifications: monitor.notifications?.filter((n) => typeof n === "object") || [],
|
||||
notify_email: (monitor.notifications?.length ?? 0) > 0,
|
||||
interval: monitor.interval / MS_PER_MINUTE,
|
||||
cpu: monitor.thresholds?.usage_cpu !== undefined,
|
||||
usage_cpu: monitor.thresholds?.usage_cpu ? monitor.thresholds.usage_cpu * 100 : "",
|
||||
|
||||
|
||||
memory: monitor.thresholds?.usage_memory !== undefined,
|
||||
usage_memory: monitor.thresholds?.usage_memory ? monitor.thresholds.usage_memory * 100 : "",
|
||||
|
||||
usage_memory: monitor.thresholds?.usage_memory
|
||||
? monitor.thresholds.usage_memory * 100
|
||||
: "",
|
||||
|
||||
disk: monitor.thresholds?.usage_disk !== undefined,
|
||||
usage_disk: monitor.thresholds?.usage_disk ? monitor.thresholds.usage_disk * 100 : "",
|
||||
|
||||
usage_disk: monitor.thresholds?.usage_disk
|
||||
? monitor.thresholds.usage_disk * 100
|
||||
: "",
|
||||
|
||||
temperature: monitor.thresholds?.usage_temperature !== undefined,
|
||||
usage_temperature: monitor.thresholds?.usage_temperature ? monitor.thresholds.usage_temperature * 100 : "",
|
||||
usage_temperature: monitor.thresholds?.usage_temperature
|
||||
? monitor.thresholds.usage_temperature * 100
|
||||
: "",
|
||||
secret: monitor.secret || "",
|
||||
});
|
||||
setHttps(monitor.url.startsWith("https"));
|
||||
@@ -199,7 +208,9 @@ const CreateInfrastructureMonitor = () => {
|
||||
: await dispatch(updateInfrastructureMonitor({ monitorId, monitor: form }));
|
||||
if (action.meta.requestStatus === "fulfilled") {
|
||||
createToast({
|
||||
body: isCreate ? t("infrastructureMonitorCreated") : t("infrastructureMonitorUpdated"),
|
||||
body: isCreate
|
||||
? t("infrastructureMonitorCreated")
|
||||
: t("infrastructureMonitorUpdated"),
|
||||
});
|
||||
navigate("/infrastructure");
|
||||
} else {
|
||||
@@ -236,22 +247,23 @@ const CreateInfrastructureMonitor = () => {
|
||||
const handleNotifications = (event, type) => {
|
||||
const { value, checked } = event.target;
|
||||
let notifications = [...infrastructureMonitor.notifications];
|
||||
|
||||
|
||||
if (checked) {
|
||||
if (!notifications.some((n) => n.type === type && n.address === value)) {
|
||||
notifications.push({ type, address: value });
|
||||
}
|
||||
} else {
|
||||
notifications = notifications.filter((n) => !(n.type === type && n.address === value));
|
||||
notifications = notifications.filter(
|
||||
(n) => !(n.type === type && n.address === value)
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
setInfrastructureMonitor((prev) => ({
|
||||
...prev,
|
||||
notifications,
|
||||
...(type === "email" ? { notify_email: checked } : {})
|
||||
...(type === "email" ? { notify_email: checked } : {}),
|
||||
}));
|
||||
};
|
||||
|
||||
|
||||
return (
|
||||
<Box className="create-infrastructure-monitor">
|
||||
@@ -260,8 +272,10 @@ const CreateInfrastructureMonitor = () => {
|
||||
{ name: "Infrastructure monitors", path: "/infrastructure" },
|
||||
...(isCreate
|
||||
? [{ name: "Create", path: "/infrastructure/create" }]
|
||||
: [{ name: "Details", path: `/infrastructure/${monitorId}` }, { name: "Configure", path: `/infrastructure/configure/${monitorId}` }]
|
||||
),
|
||||
: [
|
||||
{ name: "Details", path: `/infrastructure/${monitorId}` },
|
||||
{ name: "Configure", path: `/infrastructure/configure/${monitorId}` },
|
||||
]),
|
||||
]}
|
||||
/>
|
||||
<Stack
|
||||
@@ -281,7 +295,7 @@ const CreateInfrastructureMonitor = () => {
|
||||
component="span"
|
||||
fontSize="inherit"
|
||||
>
|
||||
{t(isCreate? "infrastructureCreateYour": "infrastructureEditYour")}{" "}
|
||||
{t(isCreate ? "infrastructureCreateYour" : "infrastructureEditYour")}{" "}
|
||||
</Typography>
|
||||
<Typography
|
||||
component="span"
|
||||
@@ -294,7 +308,12 @@ const CreateInfrastructureMonitor = () => {
|
||||
</Typography>
|
||||
<ConfigBox>
|
||||
<Stack gap={theme.spacing(6)}>
|
||||
<Typography component="h2" variant="h2">{t("settingsGeneralSettings")}</Typography>
|
||||
<Typography
|
||||
component="h2"
|
||||
variant="h2"
|
||||
>
|
||||
{t("settingsGeneralSettings")}
|
||||
</Typography>
|
||||
<Typography component="p">
|
||||
{t("infrastructureCreateGeneralSettingsDescription")}
|
||||
</Typography>
|
||||
@@ -323,25 +342,25 @@ const CreateInfrastructureMonitor = () => {
|
||||
disabled={!isCreate}
|
||||
/>
|
||||
{isCreate && (
|
||||
<Box>
|
||||
<Typography component="p">{t("infrastructureProtocol")}</Typography>
|
||||
<ButtonGroup>
|
||||
<Button
|
||||
variant="group"
|
||||
filled={https.toString()}
|
||||
onClick={() => setHttps(true)}
|
||||
>
|
||||
{t("https")}
|
||||
</Button>
|
||||
<Button
|
||||
variant="group"
|
||||
filled={(!https).toString()}
|
||||
onClick={() => setHttps(false)}
|
||||
>
|
||||
{t("http")}
|
||||
</Button>
|
||||
</ButtonGroup>
|
||||
</Box>
|
||||
<Box>
|
||||
<Typography component="p">{t("infrastructureProtocol")}</Typography>
|
||||
<ButtonGroup>
|
||||
<Button
|
||||
variant="group"
|
||||
filled={https.toString()}
|
||||
onClick={() => setHttps(true)}
|
||||
>
|
||||
{t("https")}
|
||||
</Button>
|
||||
<Button
|
||||
variant="group"
|
||||
filled={(!https).toString()}
|
||||
onClick={() => setHttps(false)}
|
||||
>
|
||||
{t("http")}
|
||||
</Button>
|
||||
</ButtonGroup>
|
||||
</Box>
|
||||
)}
|
||||
<TextInput
|
||||
type="text"
|
||||
@@ -368,7 +387,12 @@ const CreateInfrastructureMonitor = () => {
|
||||
</ConfigBox>
|
||||
<ConfigBox>
|
||||
<Box>
|
||||
<Typography component="h2" variant="h2">{t("distributedUptimeCreateIncidentNotification")}</Typography>
|
||||
<Typography
|
||||
component="h2"
|
||||
variant="h2"
|
||||
>
|
||||
{t("distributedUptimeCreateIncidentNotification")}
|
||||
</Typography>
|
||||
<Typography component="p">
|
||||
{t("distributedUptimeCreateIncidentDescription")}
|
||||
</Typography>
|
||||
@@ -385,7 +409,12 @@ const CreateInfrastructureMonitor = () => {
|
||||
</ConfigBox>
|
||||
<ConfigBox>
|
||||
<Box>
|
||||
<Typography component="h2" variant="h2">{t("infrastructureCustomizeAlerts")}</Typography>
|
||||
<Typography
|
||||
component="h2"
|
||||
variant="h2"
|
||||
>
|
||||
{t("infrastructureCustomizeAlerts")}
|
||||
</Typography>
|
||||
<Typography component="p">
|
||||
{t("infrastructureAlertNotificationDescription")}
|
||||
</Typography>
|
||||
@@ -432,7 +461,12 @@ const CreateInfrastructureMonitor = () => {
|
||||
</ConfigBox>
|
||||
<ConfigBox>
|
||||
<Box>
|
||||
<Typography component="h2" variant="h2">{t("distributedUptimeCreateAdvancedSettings")}</Typography>
|
||||
<Typography
|
||||
component="h2"
|
||||
variant="h2"
|
||||
>
|
||||
{t("distributedUptimeCreateAdvancedSettings")}
|
||||
</Typography>
|
||||
</Box>
|
||||
<Stack gap={theme.spacing(12)}>
|
||||
<Select
|
||||
@@ -455,7 +489,7 @@ const CreateInfrastructureMonitor = () => {
|
||||
onClick={handleCreateInfrastructureMonitor}
|
||||
loading={monitorState?.isLoading}
|
||||
>
|
||||
{t(isCreate? "infrastructureCreateMonitor": "infrastructureEditMonitor")}
|
||||
{t(isCreate ? "infrastructureCreateMonitor" : "infrastructureEditMonitor")}
|
||||
</Button>
|
||||
</Stack>
|
||||
</Stack>
|
||||
|
||||
@@ -16,8 +16,8 @@ const Gauge = ({ value, heading, metricOne, valueOne, metricTwo, valueTwo }) =>
|
||||
mb: theme.spacing(2),
|
||||
mt: theme.spacing(2),
|
||||
pr: theme.spacing(2),
|
||||
textAlign: 'right'
|
||||
}
|
||||
textAlign: "right",
|
||||
};
|
||||
|
||||
return (
|
||||
<BaseContainer>
|
||||
@@ -32,14 +32,19 @@ const Gauge = ({ value, heading, metricOne, valueOne, metricTwo, valueTwo }) =>
|
||||
flexDirection: "column",
|
||||
alignItems: "center",
|
||||
width: "100%",
|
||||
backgroundColor: theme.palette.gradient.color1
|
||||
backgroundColor: theme.palette.gradient.color1,
|
||||
}}
|
||||
>
|
||||
<CustomGauge
|
||||
progress={value}
|
||||
radius={100}
|
||||
/>
|
||||
<Typography component="h2" sx={{ fontWeight: 600 }}>{heading}</Typography>
|
||||
<Typography
|
||||
component="h2"
|
||||
sx={{ fontWeight: 600 }}
|
||||
>
|
||||
{heading}
|
||||
</Typography>
|
||||
</Box>
|
||||
<Box
|
||||
sx={{
|
||||
|
||||
@@ -2,11 +2,10 @@ import { useEffect, useState } from "react";
|
||||
import { networkService } from "../../../../main";
|
||||
|
||||
const useHardwareMonitorsFetch = ({ monitorId, dateRange }) => {
|
||||
|
||||
// Abort early if creating monitor
|
||||
if (!monitorId) {
|
||||
return { monitor: undefined, isLoading: false, networkError: undefined };
|
||||
}
|
||||
if (!monitorId) {
|
||||
return { monitor: undefined, isLoading: false, networkError: undefined };
|
||||
}
|
||||
const [isLoading, setIsLoading] = useState(true);
|
||||
const [networkError, setNetworkError] = useState(false);
|
||||
const [monitor, setMonitor] = useState(undefined);
|
||||
|
||||
@@ -53,10 +53,10 @@ const Filter = ({
|
||||
|
||||
return (
|
||||
<Box
|
||||
sx={{
|
||||
m: theme.spacing(2),
|
||||
ml: theme.spacing(4),
|
||||
}}
|
||||
sx={{
|
||||
m: theme.spacing(2),
|
||||
ml: theme.spacing(4),
|
||||
}}
|
||||
>
|
||||
<FilterHeader
|
||||
header={t("status")}
|
||||
@@ -80,10 +80,10 @@ const Filter = ({
|
||||
};
|
||||
|
||||
Filter.propTypes = {
|
||||
selectedStatus: PropTypes.arrayOf(PropTypes.string),
|
||||
setSelectedStatus: PropTypes.func.isRequired,
|
||||
setToFilterStatus: PropTypes.func.isRequired,
|
||||
handleReset: PropTypes.func.isRequired,
|
||||
selectedStatus: PropTypes.arrayOf(PropTypes.string),
|
||||
setSelectedStatus: PropTypes.func.isRequired,
|
||||
setToFilterStatus: PropTypes.func.isRequired,
|
||||
handleReset: PropTypes.func.isRequired,
|
||||
};
|
||||
|
||||
export default Filter;
|
||||
@@ -73,7 +73,7 @@ const InfrastructureMonitors = () => {
|
||||
);
|
||||
}
|
||||
|
||||
if (!isLoading && typeof summary?.totalMonitors === "undefined" ) {
|
||||
if (!isLoading && typeof summary?.totalMonitors === "undefined") {
|
||||
return (
|
||||
<Fallback
|
||||
vowelStart={true}
|
||||
|
||||
@@ -134,9 +134,7 @@ const Integrations = () => {
|
||||
}}
|
||||
>
|
||||
<Typography component="h1">{t("integrations")}</Typography>
|
||||
<Typography mb={theme.spacing(12)}>
|
||||
{t("integrationsPrism")}
|
||||
</Typography>
|
||||
<Typography mb={theme.spacing(12)}>{t("integrationsPrism")}</Typography>
|
||||
<Grid
|
||||
container
|
||||
spacing={theme.spacing(12)}
|
||||
|
||||
@@ -50,7 +50,7 @@ const MaintenanceTable = ({
|
||||
);
|
||||
setPage(0);
|
||||
};
|
||||
|
||||
|
||||
const { t } = useTranslation();
|
||||
|
||||
const headers = [
|
||||
|
||||
@@ -310,7 +310,12 @@ const PageSpeedConfigure = () => {
|
||||
</Stack>
|
||||
<ConfigBox>
|
||||
<Box>
|
||||
<Typography component="h2" variant="h2">{t("settingsGeneralSettings")}</Typography>
|
||||
<Typography
|
||||
component="h2"
|
||||
variant="h2"
|
||||
>
|
||||
{t("settingsGeneralSettings")}
|
||||
</Typography>
|
||||
<Typography component="p">
|
||||
{t("pageSpeedConfigureSettingsDescription")}
|
||||
</Typography>
|
||||
@@ -349,7 +354,12 @@ const PageSpeedConfigure = () => {
|
||||
</ConfigBox>
|
||||
<ConfigBox>
|
||||
<Box>
|
||||
<Typography component="h2" variant="h2">{t("distributedUptimeCreateIncidentNotification")}</Typography>
|
||||
<Typography
|
||||
component="h2"
|
||||
variant="h2"
|
||||
>
|
||||
{t("distributedUptimeCreateIncidentNotification")}
|
||||
</Typography>
|
||||
<Typography component="p">
|
||||
{t("distributedUptimeCreateIncidentDescription")}
|
||||
</Typography>
|
||||
@@ -394,9 +404,7 @@ const PageSpeedConfigure = () => {
|
||||
value=""
|
||||
onChange={() => logger.warn("disabled")}
|
||||
/>
|
||||
<Typography mt={theme.spacing(4)}>
|
||||
{t("seperateEmails")}
|
||||
</Typography>
|
||||
<Typography mt={theme.spacing(4)}>{t("seperateEmails")}</Typography>
|
||||
</Box>
|
||||
) : (
|
||||
""
|
||||
@@ -405,7 +413,12 @@ const PageSpeedConfigure = () => {
|
||||
</ConfigBox>
|
||||
<ConfigBox>
|
||||
<Box>
|
||||
<Typography component="h2" variant="h2">{t("distributedUptimeCreateAdvancedSettings")}</Typography>
|
||||
<Typography
|
||||
component="h2"
|
||||
variant="h2"
|
||||
>
|
||||
{t("distributedUptimeCreateAdvancedSettings")}
|
||||
</Typography>
|
||||
</Box>
|
||||
<Stack gap={theme.spacing(20)}>
|
||||
<Select
|
||||
|
||||
@@ -216,10 +216,13 @@ const CreatePageSpeed = () => {
|
||||
</Typography>
|
||||
<ConfigBox>
|
||||
<Box>
|
||||
<Typography component="h2" variant="h2">{t("settingsGeneralSettings")}</Typography>
|
||||
<Typography component="p">
|
||||
{t("distributedUptimeCreateSelectURL")}
|
||||
<Typography
|
||||
component="h2"
|
||||
variant="h2"
|
||||
>
|
||||
{t("settingsGeneralSettings")}
|
||||
</Typography>
|
||||
<Typography component="p">{t("distributedUptimeCreateSelectURL")}</Typography>
|
||||
</Box>
|
||||
<Stack gap={theme.spacing(15)}>
|
||||
<TextInput
|
||||
@@ -251,7 +254,12 @@ const CreatePageSpeed = () => {
|
||||
</ConfigBox>
|
||||
<ConfigBox>
|
||||
<Box>
|
||||
<Typography component="h2" variant="h2">{t("distributedUptimeCreateChecks")}</Typography>
|
||||
<Typography
|
||||
component="h2"
|
||||
variant="h2"
|
||||
>
|
||||
{t("distributedUptimeCreateChecks")}
|
||||
</Typography>
|
||||
<Typography component="p">
|
||||
{t("distributedUptimeCreateChecksDescription")}
|
||||
</Typography>
|
||||
@@ -300,7 +308,12 @@ const CreatePageSpeed = () => {
|
||||
</ConfigBox>
|
||||
<ConfigBox>
|
||||
<Box>
|
||||
<Typography component="h2" variant="h2">{t("distributedUptimeCreateIncidentNotification")}</Typography>
|
||||
<Typography
|
||||
component="h2"
|
||||
variant="h2"
|
||||
>
|
||||
{t("distributedUptimeCreateIncidentNotification")}
|
||||
</Typography>
|
||||
<Typography component="p">
|
||||
{t("distributedUptimeCreateIncidentDescription")}
|
||||
</Typography>
|
||||
@@ -320,7 +333,12 @@ const CreatePageSpeed = () => {
|
||||
</ConfigBox>
|
||||
<ConfigBox>
|
||||
<Box>
|
||||
<Typography component="h2" variant="h2">{t("distributedUptimeCreateAdvancedSettings")}</Typography>
|
||||
<Typography
|
||||
component="h2"
|
||||
variant="h2"
|
||||
>
|
||||
{t("distributedUptimeCreateAdvancedSettings")}
|
||||
</Typography>
|
||||
</Box>
|
||||
<Stack gap={theme.spacing(12)}>
|
||||
<Select
|
||||
|
||||
@@ -10,7 +10,7 @@ import { useTranslation } from "react-i18next";
|
||||
const PerformanceReport = ({ shouldRender, audits }) => {
|
||||
const theme = useTheme();
|
||||
const { t } = useTranslation();
|
||||
|
||||
|
||||
if (!shouldRender) {
|
||||
return <SkeletonLayout />;
|
||||
}
|
||||
|
||||
@@ -12,150 +12,158 @@ import ThemeSwitch from "../Components/ThemeSwitch";
|
||||
import LanguageSelector from "../Components/LanguageSelector";
|
||||
|
||||
const ServerUnreachable = () => {
|
||||
const theme = useTheme();
|
||||
const navigate = useNavigate();
|
||||
const { t } = useTranslation();
|
||||
|
||||
// State for tracking connection check status
|
||||
const [isCheckingConnection, setIsCheckingConnection] = useState(false);
|
||||
const theme = useTheme();
|
||||
const navigate = useNavigate();
|
||||
const { t } = useTranslation();
|
||||
|
||||
const handleRetry = React.useCallback(async () => {
|
||||
setIsCheckingConnection(true);
|
||||
try {
|
||||
// Try to connect to the backend with a simple API call
|
||||
// We'll use any lightweight endpoint that doesn't require authentication
|
||||
await networkService.axiosInstance.get('/health', { timeout: 5000 });
|
||||
|
||||
// If successful, show toast and navigate to login page
|
||||
createToast({
|
||||
body: t("backendReconnected", "Connection to server restored"),
|
||||
});
|
||||
navigate("/login");
|
||||
} catch (error) {
|
||||
// If still unreachable, stay on this page and show toast
|
||||
createToast({
|
||||
body: t("backendStillUnreachable", "Server is still unreachable"),
|
||||
});
|
||||
} finally {
|
||||
setIsCheckingConnection(false);
|
||||
}
|
||||
}, [navigate, t]);
|
||||
// State for tracking connection check status
|
||||
const [isCheckingConnection, setIsCheckingConnection] = useState(false);
|
||||
|
||||
return (
|
||||
<Stack
|
||||
className="login-page auth"
|
||||
overflow="hidden"
|
||||
>
|
||||
<Box
|
||||
className="background-pattern-svg"
|
||||
sx={{
|
||||
"& svg g g:last-of-type path": {
|
||||
stroke: theme.palette.primary.lowContrast,
|
||||
},
|
||||
}}
|
||||
>
|
||||
<Background style={{ width: "100%" }} />
|
||||
</Box>
|
||||
|
||||
{/* Header with logo */}
|
||||
<Stack
|
||||
direction="row"
|
||||
alignItems="center"
|
||||
justifyContent="space-between"
|
||||
px={theme.spacing(12)}
|
||||
gap={theme.spacing(4)}
|
||||
>
|
||||
<Stack
|
||||
direction="row"
|
||||
alignItems="center"
|
||||
gap={theme.spacing(4)}
|
||||
>
|
||||
<Logo style={{ borderRadius: theme.shape.borderRadius }} />
|
||||
<Typography sx={{ userSelect: "none" }}>Checkmate</Typography>
|
||||
</Stack>
|
||||
<Stack
|
||||
direction="row"
|
||||
spacing={2}
|
||||
alignItems="center"
|
||||
>
|
||||
<LanguageSelector />
|
||||
<ThemeSwitch />
|
||||
</Stack>
|
||||
</Stack>
|
||||
<Stack
|
||||
width="100%"
|
||||
maxWidth={600}
|
||||
flex={1}
|
||||
justifyContent="center"
|
||||
px={{ xs: theme.spacing(12), lg: theme.spacing(20) }}
|
||||
pb={theme.spacing(20)}
|
||||
mx="auto"
|
||||
rowGap={theme.spacing(8)}
|
||||
sx={{
|
||||
"& > .MuiStack-root": {
|
||||
border: 1,
|
||||
borderRadius: theme.spacing(5),
|
||||
borderColor: theme.palette.primary.lowContrast,
|
||||
backgroundColor: theme.palette.primary.main,
|
||||
padding: {
|
||||
xs: theme.spacing(12),
|
||||
sm: theme.spacing(20),
|
||||
},
|
||||
},
|
||||
}}
|
||||
>
|
||||
<Stack spacing={theme.spacing(6)} alignItems="center">
|
||||
<Box sx={{
|
||||
width: theme.spacing(220),
|
||||
mx: 'auto',
|
||||
'& .alert.row-stack': {
|
||||
width: '100%',
|
||||
alignItems: 'center',
|
||||
gap: theme.spacing(3)
|
||||
}
|
||||
}}>
|
||||
<Alert
|
||||
variant="error"
|
||||
body={t("backendUnreachable", "Server Unreachable")}
|
||||
hasIcon={true}
|
||||
/>
|
||||
</Box>
|
||||
<Box mt={theme.spacing(2)}>
|
||||
<Typography
|
||||
variant="body1"
|
||||
align="center"
|
||||
color={theme.palette.primary.contrastTextSecondary}
|
||||
>
|
||||
{t("backendUnreachableMessage", "The Checkmate server is not responding. Please check your deployment configuration or try again later.")}
|
||||
</Typography>
|
||||
</Box>
|
||||
<Box sx={{ mt: theme.spacing(4) }}>
|
||||
<Button
|
||||
variant="contained"
|
||||
color="accent"
|
||||
onClick={handleRetry}
|
||||
disabled={isCheckingConnection}
|
||||
className="dashboard-style-button"
|
||||
sx={{
|
||||
px: theme.spacing(6),
|
||||
borderRadius: `${theme.shape.borderRadius}px !important`,
|
||||
'&.MuiButtonBase-root': {
|
||||
borderRadius: `${theme.shape.borderRadius}px !important`
|
||||
},
|
||||
'&.MuiButton-root': {
|
||||
borderRadius: `${theme.shape.borderRadius}px !important`
|
||||
}
|
||||
}}
|
||||
>
|
||||
{isCheckingConnection ?
|
||||
t("retryingConnection", "Retrying Connection...") :
|
||||
t("retryConnection", "Retry Connection")}
|
||||
</Button>
|
||||
</Box>
|
||||
</Stack>
|
||||
</Stack>
|
||||
</Stack>
|
||||
);
|
||||
const handleRetry = React.useCallback(async () => {
|
||||
setIsCheckingConnection(true);
|
||||
try {
|
||||
// Try to connect to the backend with a simple API call
|
||||
// We'll use any lightweight endpoint that doesn't require authentication
|
||||
await networkService.axiosInstance.get("/health", { timeout: 5000 });
|
||||
|
||||
// If successful, show toast and navigate to login page
|
||||
createToast({
|
||||
body: t("backendReconnected", "Connection to server restored"),
|
||||
});
|
||||
navigate("/login");
|
||||
} catch (error) {
|
||||
// If still unreachable, stay on this page and show toast
|
||||
createToast({
|
||||
body: t("backendStillUnreachable", "Server is still unreachable"),
|
||||
});
|
||||
} finally {
|
||||
setIsCheckingConnection(false);
|
||||
}
|
||||
}, [navigate, t]);
|
||||
|
||||
return (
|
||||
<Stack
|
||||
className="login-page auth"
|
||||
overflow="hidden"
|
||||
>
|
||||
<Box
|
||||
className="background-pattern-svg"
|
||||
sx={{
|
||||
"& svg g g:last-of-type path": {
|
||||
stroke: theme.palette.primary.lowContrast,
|
||||
},
|
||||
}}
|
||||
>
|
||||
<Background style={{ width: "100%" }} />
|
||||
</Box>
|
||||
|
||||
{/* Header with logo */}
|
||||
<Stack
|
||||
direction="row"
|
||||
alignItems="center"
|
||||
justifyContent="space-between"
|
||||
px={theme.spacing(12)}
|
||||
gap={theme.spacing(4)}
|
||||
>
|
||||
<Stack
|
||||
direction="row"
|
||||
alignItems="center"
|
||||
gap={theme.spacing(4)}
|
||||
>
|
||||
<Logo style={{ borderRadius: theme.shape.borderRadius }} />
|
||||
<Typography sx={{ userSelect: "none" }}>Checkmate</Typography>
|
||||
</Stack>
|
||||
<Stack
|
||||
direction="row"
|
||||
spacing={2}
|
||||
alignItems="center"
|
||||
>
|
||||
<LanguageSelector />
|
||||
<ThemeSwitch />
|
||||
</Stack>
|
||||
</Stack>
|
||||
<Stack
|
||||
width="100%"
|
||||
maxWidth={600}
|
||||
flex={1}
|
||||
justifyContent="center"
|
||||
px={{ xs: theme.spacing(12), lg: theme.spacing(20) }}
|
||||
pb={theme.spacing(20)}
|
||||
mx="auto"
|
||||
rowGap={theme.spacing(8)}
|
||||
sx={{
|
||||
"& > .MuiStack-root": {
|
||||
border: 1,
|
||||
borderRadius: theme.spacing(5),
|
||||
borderColor: theme.palette.primary.lowContrast,
|
||||
backgroundColor: theme.palette.primary.main,
|
||||
padding: {
|
||||
xs: theme.spacing(12),
|
||||
sm: theme.spacing(20),
|
||||
},
|
||||
},
|
||||
}}
|
||||
>
|
||||
<Stack
|
||||
spacing={theme.spacing(6)}
|
||||
alignItems="center"
|
||||
>
|
||||
<Box
|
||||
sx={{
|
||||
width: theme.spacing(220),
|
||||
mx: "auto",
|
||||
"& .alert.row-stack": {
|
||||
width: "100%",
|
||||
alignItems: "center",
|
||||
gap: theme.spacing(3),
|
||||
},
|
||||
}}
|
||||
>
|
||||
<Alert
|
||||
variant="error"
|
||||
body={t("backendUnreachable", "Server Unreachable")}
|
||||
hasIcon={true}
|
||||
/>
|
||||
</Box>
|
||||
<Box mt={theme.spacing(2)}>
|
||||
<Typography
|
||||
variant="body1"
|
||||
align="center"
|
||||
color={theme.palette.primary.contrastTextSecondary}
|
||||
>
|
||||
{t(
|
||||
"backendUnreachableMessage",
|
||||
"The Checkmate server is not responding. Please check your deployment configuration or try again later."
|
||||
)}
|
||||
</Typography>
|
||||
</Box>
|
||||
<Box sx={{ mt: theme.spacing(4) }}>
|
||||
<Button
|
||||
variant="contained"
|
||||
color="accent"
|
||||
onClick={handleRetry}
|
||||
disabled={isCheckingConnection}
|
||||
className="dashboard-style-button"
|
||||
sx={{
|
||||
px: theme.spacing(6),
|
||||
borderRadius: `${theme.shape.borderRadius}px !important`,
|
||||
"&.MuiButtonBase-root": {
|
||||
borderRadius: `${theme.shape.borderRadius}px !important`,
|
||||
},
|
||||
"&.MuiButton-root": {
|
||||
borderRadius: `${theme.shape.borderRadius}px !important`,
|
||||
},
|
||||
}}
|
||||
>
|
||||
{isCheckingConnection
|
||||
? t("retryingConnection", "Retrying Connection...")
|
||||
: t("retryConnection", "Retry Connection")}
|
||||
</Button>
|
||||
</Box>
|
||||
</Stack>
|
||||
</Stack>
|
||||
</Stack>
|
||||
);
|
||||
};
|
||||
|
||||
export default ServerUnreachable;
|
||||
@@ -12,7 +12,12 @@ const SettingsAbout = () => {
|
||||
return (
|
||||
<ConfigBox>
|
||||
<Box>
|
||||
<Typography component="h1" variant="h2">{t("settingsAbout")}</Typography>
|
||||
<Typography
|
||||
component="h1"
|
||||
variant="h2"
|
||||
>
|
||||
{t("settingsAbout")}
|
||||
</Typography>
|
||||
</Box>
|
||||
<Box>
|
||||
<Typography component="h2">Checkmate {2.1}</Typography>
|
||||
|
||||
@@ -23,7 +23,12 @@ const SettingsDemoMonitors = ({ isAdmin, HEADER_SX, handleChange, isLoading }) =
|
||||
<>
|
||||
<ConfigBox>
|
||||
<Box>
|
||||
<Typography component="h1" variant="h2">{t("settingsDemoMonitors")}</Typography>
|
||||
<Typography
|
||||
component="h1"
|
||||
variant="h2"
|
||||
>
|
||||
{t("settingsDemoMonitors")}
|
||||
</Typography>
|
||||
<Typography sx={HEADER_SX}>{t("settingsDemoMonitorsDescription")}</Typography>
|
||||
</Box>
|
||||
<Box>
|
||||
@@ -48,7 +53,12 @@ const SettingsDemoMonitors = ({ isAdmin, HEADER_SX, handleChange, isLoading }) =
|
||||
</ConfigBox>
|
||||
<ConfigBox>
|
||||
<Box>
|
||||
<Typography component="h1" variant="h2">{t("settingsSystemReset")}</Typography>
|
||||
<Typography
|
||||
component="h1"
|
||||
variant="h2"
|
||||
>
|
||||
{t("settingsSystemReset")}
|
||||
</Typography>
|
||||
<Typography sx={{ mt: theme.spacing(2) }}>
|
||||
{t("settingsSystemResetDescription")}
|
||||
</Typography>
|
||||
|
||||
@@ -52,18 +52,18 @@ const SettingsEmail = ({
|
||||
systemEmailUser: settingsData?.settings?.systemEmailUser,
|
||||
systemEmailAddress: settingsData?.settings?.systemEmailAddress,
|
||||
systemEmailPassword: password || settingsData?.settings?.systemEmailPassword,
|
||||
systemEmailConnectionHost: settingsData?.settings?.systemEmailConnectionHost
|
||||
systemEmailConnectionHost: settingsData?.settings?.systemEmailConnectionHost,
|
||||
};
|
||||
|
||||
|
||||
// Basic validation
|
||||
if (!emailConfig.systemEmailHost || !emailConfig.systemEmailPort) {
|
||||
createToast({
|
||||
body: t("settingsEmailRequiredFields", "Email host and port are required"),
|
||||
variant: "error"
|
||||
variant: "error",
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
// Send test email with current form values
|
||||
sendTestEmail(emailConfig);
|
||||
};
|
||||
@@ -75,7 +75,12 @@ const SettingsEmail = ({
|
||||
return (
|
||||
<ConfigBox>
|
||||
<Box>
|
||||
<Typography component="h1" variant="h2">{t("settingsEmail")}</Typography>
|
||||
<Typography
|
||||
component="h1"
|
||||
variant="h2"
|
||||
>
|
||||
{t("settingsEmail")}
|
||||
</Typography>
|
||||
<Typography sx={HEADER_SX}>{t("settingsEmailDescription")}</Typography>
|
||||
</Box>
|
||||
<Box>
|
||||
|
||||
@@ -41,7 +41,12 @@ const SettingsPagespeed = ({
|
||||
return (
|
||||
<ConfigBox>
|
||||
<Box>
|
||||
<Typography component="h1" variant="h2">{t("pageSpeedApiKeyFieldTitle")}</Typography>
|
||||
<Typography
|
||||
component="h1"
|
||||
variant="h2"
|
||||
>
|
||||
{t("pageSpeedApiKeyFieldTitle")}
|
||||
</Typography>
|
||||
<Typography sx={HEADING_SX}>{t("pageSpeedApiKeyFieldDescription")}</Typography>
|
||||
</Box>
|
||||
<Stack gap={theme.spacing(20)}>
|
||||
|
||||
@@ -15,7 +15,12 @@ const SettingsTimeZone = ({ HEADING_SX, handleChange, timezone }) => {
|
||||
return (
|
||||
<ConfigBox>
|
||||
<Box>
|
||||
<Typography component="h1" variant="h2">{t("settingsGeneralSettings")}</Typography>
|
||||
<Typography
|
||||
component="h1"
|
||||
variant="h2"
|
||||
>
|
||||
{t("settingsGeneralSettings")}
|
||||
</Typography>
|
||||
<Typography sx={HEADING_SX}>
|
||||
<Typography component="span">{t("settingsDisplayTimezone")}</Typography>-{" "}
|
||||
{t("settingsDisplayTimezoneDescription")}
|
||||
|
||||
@@ -16,7 +16,12 @@ const SettingsUI = ({ HEADING_SX, handleChange, mode, language }) => {
|
||||
return (
|
||||
<ConfigBox>
|
||||
<Box>
|
||||
<Typography component="h1" variant="h2">{t("settingsAppearance")}</Typography>
|
||||
<Typography
|
||||
component="h1"
|
||||
variant="h2"
|
||||
>
|
||||
{t("settingsAppearance")}
|
||||
</Typography>
|
||||
<Typography sx={HEADING_SX}>{t("settingsAppearanceDescription")}</Typography>
|
||||
</Box>
|
||||
<Stack gap={theme.spacing(20)}>
|
||||
|
||||
@@ -9,7 +9,12 @@ const ConfigStack = ({ title, description, children }) => {
|
||||
return (
|
||||
<ConfigBox>
|
||||
<Stack gap={theme.spacing(6)}>
|
||||
<Typography component="h2" variant="h2">{title}</Typography>
|
||||
<Typography
|
||||
component="h2"
|
||||
variant="h2"
|
||||
>
|
||||
{title}
|
||||
</Typography>
|
||||
<Typography component="p">{description}</Typography>
|
||||
</Stack>
|
||||
{children}
|
||||
|
||||
@@ -34,10 +34,13 @@ const TabSettings = ({
|
||||
<Stack gap={theme.spacing(10)}>
|
||||
<ConfigBox>
|
||||
<Stack>
|
||||
<Typography component="h2" variant="h2">{t("access")}</Typography>
|
||||
<Typography component="p">
|
||||
{t("statusPageCreateSettings")}
|
||||
<Typography
|
||||
component="h2"
|
||||
variant="h2"
|
||||
>
|
||||
{t("access")}
|
||||
</Typography>
|
||||
<Typography component="p">{t("statusPageCreateSettings")}</Typography>
|
||||
</Stack>
|
||||
<Stack gap={theme.spacing(18)}>
|
||||
<Checkbox
|
||||
@@ -51,7 +54,12 @@ const TabSettings = ({
|
||||
</ConfigBox>
|
||||
<ConfigBox>
|
||||
<Stack gap={theme.spacing(6)}>
|
||||
<Typography component="h2" variant="h2">{t("basicInformation")}</Typography>
|
||||
<Typography
|
||||
component="h2"
|
||||
variant="h2"
|
||||
>
|
||||
{t("basicInformation")}
|
||||
</Typography>
|
||||
<Typography component="p">
|
||||
{t("statusPageCreateBasicInfoDescription")}
|
||||
</Typography>
|
||||
@@ -82,7 +90,12 @@ const TabSettings = ({
|
||||
</ConfigBox>
|
||||
<ConfigBox>
|
||||
<Stack gap={theme.spacing(6)}>
|
||||
<Typography component="h2" variant="h2">{t("timezone")}</Typography>
|
||||
<Typography
|
||||
component="h2"
|
||||
variant="h2"
|
||||
>
|
||||
{t("timezone")}
|
||||
</Typography>
|
||||
<Typography component="p">
|
||||
{t("statusPageCreateSelectTimeZoneDescription")}
|
||||
</Typography>
|
||||
@@ -100,7 +113,12 @@ const TabSettings = ({
|
||||
</ConfigBox>
|
||||
<ConfigBox>
|
||||
<Stack gap={theme.spacing(6)}>
|
||||
<Typography component="h2" variant="h2">{t("settingsAppearance")}</Typography>
|
||||
<Typography
|
||||
component="h2"
|
||||
variant="h2"
|
||||
>
|
||||
{t("settingsAppearance")}
|
||||
</Typography>
|
||||
<Typography component="p">
|
||||
{t("statusPageCreateAppearanceDescription")}
|
||||
</Typography>
|
||||
|
||||
@@ -23,7 +23,6 @@ const Tabs = ({
|
||||
setTab,
|
||||
TAB_LIST,
|
||||
}) => {
|
||||
|
||||
const theme = useTheme();
|
||||
return (
|
||||
<TabContext value={TAB_LIST[tab]}>
|
||||
@@ -63,7 +62,6 @@ const Tabs = ({
|
||||
setSelectedMonitors={setSelectedMonitors}
|
||||
/>
|
||||
)}
|
||||
|
||||
</TabContext>
|
||||
);
|
||||
};
|
||||
|
||||
@@ -194,7 +194,7 @@ const CreateStatusPage = () => {
|
||||
color: statusPage?.color,
|
||||
logo: newLogo,
|
||||
showCharts: statusPage?.showCharts ?? true,
|
||||
showUptimePercentage: statusPage?.showUptimePercentage ?? true
|
||||
showUptimePercentage: statusPage?.showUptimePercentage ?? true,
|
||||
};
|
||||
});
|
||||
setSelectedMonitors(statusPageMonitors);
|
||||
|
||||
@@ -34,7 +34,7 @@ const PublicStatus = () => {
|
||||
const [statusPage, monitors, isLoading, networkError, fetchStatusPage] =
|
||||
useStatusPageFetch(false, url);
|
||||
const [deleteStatusPage, isDeleting] = useStatusPageDelete(fetchStatusPage, url);
|
||||
|
||||
|
||||
// Breadcrumbs
|
||||
const crumbs = [
|
||||
{ name: t("statusBreadCrumbsStatusPages"), path: "/status" },
|
||||
|
||||
@@ -4,7 +4,8 @@ import { Button, Typography } from "@mui/material";
|
||||
import { useTranslation } from "react-i18next";
|
||||
import PropTypes from "prop-types";
|
||||
|
||||
const UploadFile = ({ onFileSelect }) => { // Changed prop to onFileSelect
|
||||
const UploadFile = ({ onFileSelect }) => {
|
||||
// Changed prop to onFileSelect
|
||||
const theme = useTheme();
|
||||
const [file, setFile] = useState();
|
||||
const [error, setError] = useState("");
|
||||
@@ -18,17 +19,17 @@ const UploadFile = ({ onFileSelect }) => { // Changed prop to onFileSelect
|
||||
const handleFileChange = (e) => {
|
||||
setError("");
|
||||
const selectedFile = e.target.files[0];
|
||||
|
||||
|
||||
// Basic file validation
|
||||
if (!selectedFile) return;
|
||||
|
||||
if (!selectedFile.name.endsWith('.csv')) {
|
||||
|
||||
if (!selectedFile.name.endsWith(".csv")) {
|
||||
setError(t("bulkImport.invalidFileType"));
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
setFile(selectedFile);
|
||||
onFileSelect(selectedFile); // Pass the file directly to parent
|
||||
onFileSelect(selectedFile); // Pass the file directly to parent
|
||||
};
|
||||
|
||||
return (
|
||||
@@ -63,11 +64,10 @@ const UploadFile = ({ onFileSelect }) => { // Changed prop to onFileSelect
|
||||
</Button>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
UploadFile.prototype = {
|
||||
onFileSelect: PropTypes.func.isRequired,
|
||||
};
|
||||
|
||||
export default UploadFile;
|
||||
export default UploadFile;
|
||||
@@ -61,7 +61,12 @@ const BulkImport = () => {
|
||||
</Typography>
|
||||
<ConfigBox>
|
||||
<Box>
|
||||
<Typography component="h2" variant="h2">{t("bulkImport.selectFileTips")}</Typography>
|
||||
<Typography
|
||||
component="h2"
|
||||
variant="h2"
|
||||
>
|
||||
{t("bulkImport.selectFileTips")}
|
||||
</Typography>
|
||||
<Typography component="p">
|
||||
<Trans
|
||||
i18nKey="bulkImport.selectFileDescription"
|
||||
|
||||
@@ -343,7 +343,12 @@ const Configure = () => {
|
||||
</Stack>
|
||||
<ConfigBox>
|
||||
<Box>
|
||||
<Typography component="h2" variant="h2">{t("settingsGeneralSettings")}</Typography>
|
||||
<Typography
|
||||
component="h2"
|
||||
variant="h2"
|
||||
>
|
||||
{t("settingsGeneralSettings")}
|
||||
</Typography>
|
||||
<Typography component="p">
|
||||
{t("distributedUptimeCreateSelectURL")}
|
||||
</Typography>
|
||||
@@ -389,7 +394,10 @@ const Configure = () => {
|
||||
</ConfigBox>
|
||||
<ConfigBox>
|
||||
<Box>
|
||||
<Typography component="h2" variant="h2">
|
||||
<Typography
|
||||
component="h2"
|
||||
variant="h2"
|
||||
>
|
||||
{t("distributedUptimeCreateIncidentNotification")}
|
||||
</Typography>
|
||||
<Typography component="p">
|
||||
@@ -457,7 +465,12 @@ const Configure = () => {
|
||||
</ConfigBox>
|
||||
<ConfigBox>
|
||||
<Box>
|
||||
<Typography component="h2" variant="h2">{t("ignoreTLSError")}</Typography>
|
||||
<Typography
|
||||
component="h2"
|
||||
variant="h2"
|
||||
>
|
||||
{t("ignoreTLSError")}
|
||||
</Typography>
|
||||
<Typography component="p">{t("ignoreTLSErrorDescription")}</Typography>
|
||||
</Box>
|
||||
<Stack>
|
||||
@@ -477,7 +490,10 @@ const Configure = () => {
|
||||
</ConfigBox>
|
||||
<ConfigBox>
|
||||
<Box>
|
||||
<Typography component="h2" variant="h2">
|
||||
<Typography
|
||||
component="h2"
|
||||
variant="h2"
|
||||
>
|
||||
{t("distributedUptimeCreateAdvancedSettings")}
|
||||
</Typography>
|
||||
</Box>
|
||||
|
||||
@@ -261,7 +261,12 @@ const CreateMonitor = () => {
|
||||
</Typography>
|
||||
<ConfigBox>
|
||||
<Box>
|
||||
<Typography component="h2" variant="h2">{t("distributedUptimeCreateChecks")}</Typography>
|
||||
<Typography
|
||||
component="h2"
|
||||
variant="h2"
|
||||
>
|
||||
{t("distributedUptimeCreateChecks")}
|
||||
</Typography>
|
||||
<Typography component="p">
|
||||
{t("distributedUptimeCreateChecksDescription")}
|
||||
</Typography>
|
||||
@@ -342,7 +347,12 @@ const CreateMonitor = () => {
|
||||
</ConfigBox>
|
||||
<ConfigBox>
|
||||
<Box>
|
||||
<Typography component="h2" variant="h2">{t("settingsGeneralSettings")}</Typography>
|
||||
<Typography
|
||||
component="h2"
|
||||
variant="h2"
|
||||
>
|
||||
{t("settingsGeneralSettings")}
|
||||
</Typography>
|
||||
<Typography component="p">{t("uptimeCreateSelectURL")}</Typography>
|
||||
</Box>
|
||||
<Stack gap={theme.spacing(15)}>
|
||||
@@ -386,7 +396,10 @@ const CreateMonitor = () => {
|
||||
</ConfigBox>
|
||||
<ConfigBox>
|
||||
<Box>
|
||||
<Typography component="h2" variant="h2">
|
||||
<Typography
|
||||
component="h2"
|
||||
variant="h2"
|
||||
>
|
||||
{t("distributedUptimeCreateIncidentNotification")}
|
||||
</Typography>
|
||||
<Typography component="p">
|
||||
@@ -417,7 +430,12 @@ const CreateMonitor = () => {
|
||||
</ConfigBox>
|
||||
<ConfigBox>
|
||||
<Box>
|
||||
<Typography component="h2" variant="h2">{t("ignoreTLSError")}</Typography>
|
||||
<Typography
|
||||
component="h2"
|
||||
variant="h2"
|
||||
>
|
||||
{t("ignoreTLSError")}
|
||||
</Typography>
|
||||
<Typography component="p">{t("ignoreTLSErrorDescription")}</Typography>
|
||||
</Box>
|
||||
<Stack>
|
||||
@@ -437,7 +455,10 @@ const CreateMonitor = () => {
|
||||
</ConfigBox>
|
||||
<ConfigBox>
|
||||
<Box>
|
||||
<Typography component="h2" variant="h2">
|
||||
<Typography
|
||||
component="h2"
|
||||
variant="h2"
|
||||
>
|
||||
{t("distributedUptimeCreateAdvancedSettings")}
|
||||
</Typography>
|
||||
</Box>
|
||||
|
||||
@@ -150,7 +150,10 @@ const UptimeDataTable = ({
|
||||
id: "responseTime",
|
||||
content: t("responseTime"),
|
||||
render: (row) => (
|
||||
<Box display="flex" justifyContent="center">
|
||||
<Box
|
||||
display="flex"
|
||||
justifyContent="center"
|
||||
>
|
||||
<BarChart checks={row.monitor.checks.slice().reverse()} />
|
||||
</Box>
|
||||
),
|
||||
|
||||
@@ -1162,21 +1162,25 @@ class NetworkService {
|
||||
async sendTestEmail(config) {
|
||||
// Extract recipient and email configuration
|
||||
const { to, emailConfig } = config;
|
||||
|
||||
|
||||
// If emailConfig is provided, use the new endpoint with direct parameters
|
||||
if (emailConfig) {
|
||||
return this.axiosInstance.post(`/settings/test-email`, {
|
||||
return this.axiosInstance.post(`/settings/test-email`, {
|
||||
to,
|
||||
systemEmailHost: emailConfig.systemEmailHost,
|
||||
systemEmailPort: emailConfig.systemEmailPort,
|
||||
systemEmailAddress: emailConfig.systemEmailAddress,
|
||||
systemEmailPassword: emailConfig.systemEmailPassword,
|
||||
// Only include these if they are present
|
||||
...(emailConfig.systemEmailConnectionHost && { systemEmailConnectionHost: emailConfig.systemEmailConnectionHost }),
|
||||
...(emailConfig.systemEmailUser && { systemEmailUser: emailConfig.systemEmailUser })
|
||||
...(emailConfig.systemEmailConnectionHost && {
|
||||
systemEmailConnectionHost: emailConfig.systemEmailConnectionHost,
|
||||
}),
|
||||
...(emailConfig.systemEmailUser && {
|
||||
systemEmailUser: emailConfig.systemEmailUser,
|
||||
}),
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
// Fallback to original behavior for backward compatibility
|
||||
return this.axiosInstance.post(`/settings/test-email`, { to });
|
||||
}
|
||||
|
||||
@@ -167,7 +167,7 @@ const Greeting = ({ type = "" }) => {
|
||||
fontSize="inherit"
|
||||
color={theme.palette.primary.contrastTextTertiary}
|
||||
>
|
||||
{t("greeting.prepend", { defaultValue: prepend })}, {" "}
|
||||
{t("greeting.prepend", { defaultValue: prepend })},{" "}
|
||||
</Typography>
|
||||
<Typography
|
||||
component="span"
|
||||
@@ -183,7 +183,8 @@ const Greeting = ({ type = "" }) => {
|
||||
lineHeight={1}
|
||||
color={theme.palette.primary.contrastTextTertiary}
|
||||
>
|
||||
{t("greeting.append", { defaultValue: append })} — {t("greeting.overview", { type: t(`menu.${type}`) })}
|
||||
{t("greeting.append", { defaultValue: append })} —{" "}
|
||||
{t("greeting.overview", { type: t(`menu.${type}`) })}
|
||||
</Typography>
|
||||
</Box>
|
||||
);
|
||||
|
||||
@@ -3,7 +3,7 @@ import { initReactI18next } from "react-i18next";
|
||||
import { setLanguage } from "../Features/UI/uiSlice";
|
||||
import store from "../store";
|
||||
|
||||
const primaryLanguage = "gb";
|
||||
const primaryLanguage = "en";
|
||||
|
||||
const translations = import.meta.glob("../locales/*.json", { eager: true });
|
||||
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
/**
|
||||
* Update errors if passed id matches the error.details[0].path, otherwise remove
|
||||
* the error for the id
|
||||
* @param {*} prev Previous errors *
|
||||
* @param {*} prev Previous errors *
|
||||
* @param {*} id ID of the field whose error is to be either updated or removed
|
||||
* @param {*} error the error object
|
||||
* @param {*} error the error object
|
||||
* @returns the Update Errors with the specific field with id being either removed or updated
|
||||
*/
|
||||
|
||||
|
||||
const buildErrors = (prev, id, error) => {
|
||||
const updatedErrors = { ...prev };
|
||||
if (error && id == error.details[0].path) {
|
||||
@@ -43,7 +42,7 @@ const getTouchedFieldErrors = (validation, touchedErrors) => {
|
||||
return newErrors;
|
||||
};
|
||||
/**
|
||||
*
|
||||
*
|
||||
* @param {*} form The form object of the submitted form data
|
||||
* @param {*} validation The Joi validation rules
|
||||
* @param {*} setErrors The function used to set the local errors
|
||||
@@ -69,7 +68,7 @@ const hasValidationErrors = (form, validation, setErrors) => {
|
||||
"_id",
|
||||
"__v",
|
||||
"createdAt",
|
||||
"updatedAt"
|
||||
"updatedAt",
|
||||
].includes(err.path[0])
|
||||
) {
|
||||
newErrors[err.path[0]] = err.message ?? "Validation error";
|
||||
|
||||
@@ -52,8 +52,8 @@ html {
|
||||
--env-var-default-1: 24px;
|
||||
--env-var-default-2: 40px;
|
||||
|
||||
--env-var-shadow-1: 0px 4px 24px -4px rgba(16, 24, 40, 0.08),
|
||||
0px 3px 3px -3px rgba(16, 24, 40, 0.03);
|
||||
--env-var-shadow-1:
|
||||
0px 4px 24px -4px rgba(16, 24, 40, 0.08), 0px 3px 3px -3px rgba(16, 24, 40, 0.03);
|
||||
}
|
||||
|
||||
.MuiInputBase-root.Mui-disabled input {
|
||||
|
||||
@@ -0,0 +1,557 @@
|
||||
{
|
||||
"dontHaveAccount": "",
|
||||
"email": "",
|
||||
"forgotPassword": "",
|
||||
"password": "",
|
||||
"signUp": "",
|
||||
"submit": "",
|
||||
"title": "",
|
||||
"continue": "",
|
||||
"enterEmail": "",
|
||||
"authLoginTitle": "",
|
||||
"authLoginEnterPassword": "",
|
||||
"commonPassword": "",
|
||||
"commonBack": "",
|
||||
"authForgotPasswordTitle": "",
|
||||
"authForgotPasswordResetPassword": "",
|
||||
"createPassword": "",
|
||||
"createAPassword": "",
|
||||
"authRegisterAlreadyHaveAccount": "",
|
||||
"commonAppName": "",
|
||||
"authLoginEnterEmail": "",
|
||||
"authRegisterTitle": "",
|
||||
"authRegisterStepOneTitle": "",
|
||||
"authRegisterStepOneDescription": "",
|
||||
"authRegisterStepTwoTitle": "",
|
||||
"authRegisterStepTwoDescription": "",
|
||||
"authRegisterStepThreeTitle": "",
|
||||
"authRegisterStepThreeDescription": "",
|
||||
"authForgotPasswordDescription": "",
|
||||
"authForgotPasswordSendInstructions": "",
|
||||
"authForgotPasswordBackTo": "",
|
||||
"authCheckEmailTitle": "",
|
||||
"authCheckEmailDescription": "",
|
||||
"authCheckEmailResendEmail": "",
|
||||
"authCheckEmailBackTo": "",
|
||||
"goBackTo": "",
|
||||
"authCheckEmailDidntReceiveEmail": "",
|
||||
"authCheckEmailClickToResend": "",
|
||||
"authSetNewPasswordTitle": "",
|
||||
"authSetNewPasswordDescription": "",
|
||||
"authSetNewPasswordNewPassword": "",
|
||||
"authSetNewPasswordConfirmPassword": "",
|
||||
"confirmPassword": "",
|
||||
"authSetNewPasswordResetPassword": "",
|
||||
"authSetNewPasswordBackTo": "",
|
||||
"authPasswordMustBeAtLeast": "",
|
||||
"authPasswordCharactersLong": "",
|
||||
"authPasswordMustContainAtLeast": "",
|
||||
"authPasswordSpecialCharacter": "",
|
||||
"authPasswordOneNumber": "",
|
||||
"authPasswordUpperCharacter": "",
|
||||
"authPasswordLowerCharacter": "",
|
||||
"authPasswordConfirmAndPassword": "",
|
||||
"authPasswordMustMatch": "",
|
||||
"authRegisterCreateAccount": "",
|
||||
"authRegisterCreateSuperAdminAccount": "",
|
||||
"authRegisterSignUpWithEmail": "",
|
||||
"authRegisterBySigningUp": "",
|
||||
"distributedStatusHeaderText": "",
|
||||
"distributedStatusSubHeaderText": "",
|
||||
"settingsGeneralSettings": "",
|
||||
"settingsDisplayTimezone": "",
|
||||
"settingsDisplayTimezoneDescription": "",
|
||||
"settingsAppearance": "",
|
||||
"settingsAppearanceDescription": "",
|
||||
"settingsThemeMode": "",
|
||||
"settingsLanguage": "",
|
||||
"settingsDistributedUptime": "",
|
||||
"settingsDistributedUptimeDescription": "",
|
||||
"settingsEnabled": "",
|
||||
"settingsDisabled": "",
|
||||
"settingsHistoryAndMonitoring": "",
|
||||
"settingsHistoryAndMonitoringDescription": "",
|
||||
"settingsTTLLabel": "",
|
||||
"settingsTTLOptionalLabel": "",
|
||||
"settingsClearAllStats": "",
|
||||
"settingsClearAllStatsButton": "",
|
||||
"settingsClearAllStatsDialogTitle": "",
|
||||
"settingsClearAllStatsDialogDescription": "",
|
||||
"settingsClearAllStatsDialogConfirm": "",
|
||||
"settingsDemoMonitors": "",
|
||||
"settingsDemoMonitorsDescription": "",
|
||||
"settingsAddDemoMonitors": "",
|
||||
"settingsAddDemoMonitorsButton": "",
|
||||
"settingsRemoveAllMonitors": "",
|
||||
"settingsRemoveAllMonitorsButton": "",
|
||||
"settingsRemoveAllMonitorsDialogTitle": "",
|
||||
"settingsRemoveAllMonitorsDialogConfirm": "",
|
||||
"settingsWallet": "",
|
||||
"settingsWalletDescription": "",
|
||||
"settingsAbout": "",
|
||||
"settingsDevelopedBy": "",
|
||||
"settingsSave": "",
|
||||
"settingsSuccessSaved": "",
|
||||
"settingsFailedToSave": "",
|
||||
"settingsStatsCleared": "",
|
||||
"settingsFailedToClearStats": "",
|
||||
"settingsDemoMonitorsAdded": "",
|
||||
"settingsFailedToAddDemoMonitors": "",
|
||||
"settingsMonitorsDeleted": "",
|
||||
"settingsFailedToDeleteMonitors": "",
|
||||
"starPromptTitle": "",
|
||||
"starPromptDescription": "",
|
||||
"https": "",
|
||||
"http": "",
|
||||
"monitor": "",
|
||||
"aboutus": "",
|
||||
"now": "",
|
||||
"delete": "",
|
||||
"configure": "",
|
||||
"networkError": "",
|
||||
"responseTime": "",
|
||||
"ms": "",
|
||||
"bar": "",
|
||||
"area": "",
|
||||
"country": "",
|
||||
"city": "",
|
||||
"response": "",
|
||||
"checkConnection": "",
|
||||
"passwordreset": "",
|
||||
"authRegisterStepOnePersonalDetails": "",
|
||||
"authCheckEmailOpenEmailButton": "",
|
||||
"authNewPasswordConfirmed": "",
|
||||
"monitorStatusUp": "",
|
||||
"monitorStatusDown": "",
|
||||
"webhookSendSuccess": "",
|
||||
"webhookSendError": "",
|
||||
"webhookUnsupportedPlatform": "",
|
||||
"distributedRightCategoryTitle": "",
|
||||
"distributedStatusServerMonitors": "",
|
||||
"distributedStatusServerMonitorsDescription": "",
|
||||
"distributedUptimeCreateSelectURL": "",
|
||||
"distributedUptimeCreateChecks": "",
|
||||
"distributedUptimeCreateChecksDescription": "",
|
||||
"distributedUptimeCreateIncidentNotification": "",
|
||||
"distributedUptimeCreateIncidentDescription": "",
|
||||
"distributedUptimeCreateAdvancedSettings": "",
|
||||
"distributedUptimeDetailsNoMonitorHistory": "",
|
||||
"distributedUptimeDetailsFooterHeading": "",
|
||||
"distributedUptimeDetailsFooterBuilt": "",
|
||||
"distributedUptimeDetailsFooterSolana": "",
|
||||
"distributedUptimeDetailsMonitorHeader": "",
|
||||
"distributedUptimeDetailsStatusHeaderUptime": "",
|
||||
"distributedUptimeDetailsStatusHeaderLastUpdate": "",
|
||||
"notifications": {
|
||||
"enableNotifications": "",
|
||||
"testNotification": "",
|
||||
"addOrEditNotifications": "",
|
||||
"slack": {
|
||||
"label": "",
|
||||
"description": "",
|
||||
"webhookLabel": "",
|
||||
"webhookPlaceholder": "",
|
||||
"webhookRequired": ""
|
||||
},
|
||||
"discord": {
|
||||
"label": "",
|
||||
"description": "",
|
||||
"webhookLabel": "",
|
||||
"webhookPlaceholder": "",
|
||||
"webhookRequired": ""
|
||||
},
|
||||
"telegram": {
|
||||
"label": "",
|
||||
"description": "",
|
||||
"tokenLabel": "",
|
||||
"tokenPlaceholder": "",
|
||||
"chatIdLabel": "",
|
||||
"chatIdPlaceholder": "",
|
||||
"fieldsRequired": ""
|
||||
},
|
||||
"webhook": {
|
||||
"label": "",
|
||||
"description": "",
|
||||
"urlLabel": "",
|
||||
"urlPlaceholder": "",
|
||||
"urlRequired": ""
|
||||
},
|
||||
"testNotificationDevelop": "",
|
||||
"integrationButton": "",
|
||||
"testSuccess": "",
|
||||
"testFailed": "",
|
||||
"unsupportedType": "",
|
||||
"networkError": ""
|
||||
},
|
||||
"testLocale": "",
|
||||
"add": "",
|
||||
"monitors": "",
|
||||
"distributedUptimeStatusCreateStatusPage": "",
|
||||
"distributedUptimeStatusCreateStatusPageAccess": "",
|
||||
"distributedUptimeStatusCreateStatusPageReady": "",
|
||||
"distributedUptimeStatusBasicInfoHeader": "",
|
||||
"distributedUptimeStatusBasicInfoDescription": "",
|
||||
"distributedUptimeStatusLogoHeader": "",
|
||||
"distributedUptimeStatusLogoDescription": "",
|
||||
"distributedUptimeStatusLogoUploadButton": "",
|
||||
"distributedUptimeStatusStandardMonitorsHeader": "",
|
||||
"distributedUptimeStatusStandardMonitorsDescription": "",
|
||||
"distributedUptimeStatusCreateYour": "",
|
||||
"distributedUptimeStatusEditYour": "",
|
||||
"distributedUptimeStatusPublishedLabel": "",
|
||||
"distributedUptimeStatusCompanyNameLabel": "",
|
||||
"distributedUptimeStatusPageAddressLabel": "",
|
||||
"distributedUptimeStatus30Days": "",
|
||||
"distributedUptimeStatus60Days": "",
|
||||
"distributedUptimeStatus90Days": "",
|
||||
"distributedUptimeStatusPageNotSetUp": "",
|
||||
"distributedUptimeStatusContactAdmin": "",
|
||||
"distributedUptimeStatusPageNotPublic": "",
|
||||
"distributedUptimeStatusPageDeleteDialog": "",
|
||||
"distributedUptimeStatusPageDeleteConfirm": "",
|
||||
"distributedUptimeStatusPageDeleteDescription": "",
|
||||
"distributedUptimeStatusDevices": "",
|
||||
"distributedUptimeStatusUpt": "",
|
||||
"distributedUptimeStatusUptBurned": "",
|
||||
"distributedUptimeStatusUptLogo": "",
|
||||
"incidentsTableNoIncidents": "",
|
||||
"incidentsTablePaginationLabel": "",
|
||||
"incidentsTableMonitorName": "",
|
||||
"incidentsTableStatus": "",
|
||||
"incidentsTableDateTime": "",
|
||||
"incidentsTableStatusCode": "",
|
||||
"incidentsTableMessage": "",
|
||||
"incidentsOptionsHeader": "",
|
||||
"incidentsOptionsHeaderFilterBy": "",
|
||||
"incidentsOptionsHeaderFilterAll": "",
|
||||
"incidentsOptionsHeaderFilterDown": "",
|
||||
"incidentsOptionsHeaderFilterCannotResolve": "",
|
||||
"incidentsOptionsHeaderShow": "",
|
||||
"incidentsOptionsHeaderLastHour": "",
|
||||
"incidentsOptionsHeaderLastDay": "",
|
||||
"incidentsOptionsHeaderLastWeek": "",
|
||||
"incidentsOptionsPlaceholderAllServers": "",
|
||||
"infrastructureCreateYour": "",
|
||||
"infrastructureCreateGeneralSettingsDescription": "",
|
||||
"infrastructureServerRequirement": "",
|
||||
"infrastructureCustomizeAlerts": "",
|
||||
"infrastructureAlertNotificationDescription": "",
|
||||
"infrastructureCreateMonitor": "",
|
||||
"infrastructureProtocol": "",
|
||||
"infrastructureServerUrlLabel": "",
|
||||
"infrastructureDisplayNameLabel": "",
|
||||
"infrastructureAuthorizationSecretLabel": "",
|
||||
"gb": "",
|
||||
"mb": "",
|
||||
"mem": "",
|
||||
"memoryUsage": "",
|
||||
"cpu": "",
|
||||
"cpuUsage": "",
|
||||
"cpuTemperature": "",
|
||||
"diskUsage": "",
|
||||
"used": "",
|
||||
"total": "",
|
||||
"cores": "",
|
||||
"frequency": "",
|
||||
"status": "",
|
||||
"cpuPhysical": "",
|
||||
"cpuLogical": "",
|
||||
"cpuFrequency": "",
|
||||
"avgCpuTemperature": "",
|
||||
"memory": "",
|
||||
"disk": "",
|
||||
"uptime": "",
|
||||
"os": "",
|
||||
"host": "",
|
||||
"actions": "",
|
||||
"integrations": "",
|
||||
"integrationsPrism": "",
|
||||
"integrationsSlack": "",
|
||||
"integrationsSlackInfo": "",
|
||||
"integrationsDiscord": "",
|
||||
"integrationsDiscordInfo": "",
|
||||
"integrationsZapier": "",
|
||||
"integrationsZapierInfo": "",
|
||||
"commonSave": "",
|
||||
"createYour": "",
|
||||
"createMonitor": "",
|
||||
"pause": "",
|
||||
"resume": "",
|
||||
"editing": "",
|
||||
"url": "",
|
||||
"access": "",
|
||||
"timezone": "",
|
||||
"features": "",
|
||||
"administrator": "",
|
||||
"loginHere": "",
|
||||
"displayName": "",
|
||||
"urlMonitor": "",
|
||||
"portToMonitor": "",
|
||||
"websiteMonitoring": "",
|
||||
"websiteMonitoringDescription": "",
|
||||
"pingMonitoring": "",
|
||||
"pingMonitoringDescription": "",
|
||||
"dockerContainerMonitoring": "",
|
||||
"dockerContainerMonitoringDescription": "",
|
||||
"portMonitoring": "",
|
||||
"portMonitoringDescription": "",
|
||||
"createMaintenanceWindow": "",
|
||||
"createMaintenance": "",
|
||||
"editMaintenance": "",
|
||||
"maintenanceWindowName": "",
|
||||
"friendlyNameInput": "",
|
||||
"friendlyNamePlaceholder": "",
|
||||
"maintenanceRepeat": "",
|
||||
"maintenance": "",
|
||||
"duration": "",
|
||||
"addMonitors": "",
|
||||
"window": "",
|
||||
"cancel": "",
|
||||
"message": "",
|
||||
"low": "",
|
||||
"high": "",
|
||||
"statusCode": "",
|
||||
"date&Time": "",
|
||||
"type": "",
|
||||
"statusPageName": "",
|
||||
"publicURL": "",
|
||||
"repeat": "",
|
||||
"edit": "",
|
||||
"createA": "",
|
||||
"remove": "",
|
||||
"maintenanceWindowDescription": "",
|
||||
"startTime": "",
|
||||
"timeZoneInfo": "",
|
||||
"monitorsToApply": "",
|
||||
"nextWindow": "",
|
||||
"notFoundButton": "",
|
||||
"pageSpeedConfigureSettingsDescription": "",
|
||||
"monitorDisplayName": "",
|
||||
"whenNewIncident": "",
|
||||
"notifySMS": "",
|
||||
"notifyEmails": "",
|
||||
"seperateEmails": "",
|
||||
"checkFrequency": "",
|
||||
"matchMethod": "",
|
||||
"expectedValue": "",
|
||||
"deleteDialogTitle": "",
|
||||
"deleteDialogDescription": "",
|
||||
"pageSpeedMonitor": "",
|
||||
"shown": "",
|
||||
"ago": "",
|
||||
"companyName": "",
|
||||
"pageSpeedDetailsPerformanceReport": "",
|
||||
"pageSpeedDetailsPerformanceReportCalculator": "",
|
||||
"checkingEvery": "",
|
||||
"statusPageCreateSettings": "",
|
||||
"basicInformation": "",
|
||||
"statusPageCreateBasicInfoDescription": "",
|
||||
"statusPageCreateSelectTimeZoneDescription": "",
|
||||
"statusPageCreateAppearanceDescription": "",
|
||||
"statusPageCreateSettingsCheckboxLabel": "",
|
||||
"statusPageCreateBasicInfoStatusPageAddress": "",
|
||||
"statusPageCreateTabsContent": "",
|
||||
"statusPageCreateTabsContentDescription": "",
|
||||
"statusPageCreateTabsContentFeaturesDescription": "",
|
||||
"showCharts": "",
|
||||
"showUptimePercentage": "",
|
||||
"removeLogo": "",
|
||||
"statusPageStatus": "",
|
||||
"statusPageStatusContactAdmin": "",
|
||||
"statusPageStatusNotPublic": "",
|
||||
"statusPageStatusNoPage": "",
|
||||
"statusPageStatusServiceStatus": "",
|
||||
"deleteStatusPage": "",
|
||||
"deleteStatusPageConfirm": "",
|
||||
"deleteStatusPageDescription": "",
|
||||
"uptimeCreate": "",
|
||||
"uptimeCreateJsonPath": "",
|
||||
"uptimeCreateJsonPathQuery": "",
|
||||
"maintenanceTableActionMenuDialogTitle": "",
|
||||
"infrastructureEditYour": "",
|
||||
"infrastructureEditMonitor": "",
|
||||
"infrastructureMonitorCreated": "",
|
||||
"infrastructureMonitorUpdated": "",
|
||||
"errorInvalidTypeId": "",
|
||||
"errorInvalidFieldId": "",
|
||||
"inviteNoTokenFound": "",
|
||||
"pageSpeedWarning": "",
|
||||
"pageSpeedLearnMoreLink": "",
|
||||
"pageSpeedAddApiKey": "",
|
||||
"update": "",
|
||||
"invalidFileFormat": "",
|
||||
"invalidFileSize": "",
|
||||
"ClickUpload": "",
|
||||
"DragandDrop": "",
|
||||
"MaxSize": "",
|
||||
"SupportedFormats": "",
|
||||
"FirstName": "",
|
||||
"LastName": "",
|
||||
"EmailDescriptionText": "",
|
||||
"YourPhoto": "",
|
||||
"PhotoDescriptionText": "",
|
||||
"save": "",
|
||||
"DeleteDescriptionText": "",
|
||||
"DeleteAccountWarning": "",
|
||||
"DeleteWarningTitle": "",
|
||||
"authRegisterFirstName": "",
|
||||
"authRegisterLastName": "",
|
||||
"authRegisterEmail": "",
|
||||
"authRegisterEmailRequired": "",
|
||||
"bulkImport": {
|
||||
"title": "",
|
||||
"selectFileTips": "",
|
||||
"selectFileDescription": "",
|
||||
"selectFile": "",
|
||||
"parsingFailed": "",
|
||||
"uploadSuccess": "",
|
||||
"validationFailed": "",
|
||||
"noFileSelected": "",
|
||||
"fallbackPage": ""
|
||||
},
|
||||
"welcomeBack": "",
|
||||
"authRegisterLoginLink": "",
|
||||
"validationNameRequired": "",
|
||||
"validationNameTooLong": "",
|
||||
"validationNameInvalidCharacters": "",
|
||||
"settingsSystemReset": "",
|
||||
"settingsSystemResetDescription": "",
|
||||
"DeleteAccountTitle": "",
|
||||
"DeleteAccountButton": "",
|
||||
"authRegisterEmailInvalid": "",
|
||||
"publicLink": "",
|
||||
"doNotHaveAccount": "",
|
||||
"registerHere": "",
|
||||
"backendUnreachable": "",
|
||||
"backendUnreachableMessage": "",
|
||||
"backendUnreachableError": "",
|
||||
"retryConnection": "",
|
||||
"retryingConnection": "",
|
||||
"backendReconnected": "",
|
||||
"backendStillUnreachable": "",
|
||||
"backendConnectionError": "",
|
||||
"maskedPageSpeedKeyPlaceholder": "",
|
||||
"pageSpeedApiKeyFieldTitle": "",
|
||||
"pageSpeedApiKeyFieldLabel": "",
|
||||
"pageSpeedApiKeyFieldDescription": "",
|
||||
"pageSpeedApiKeyFieldResetLabel": "",
|
||||
"reset": "",
|
||||
"ignoreTLSError": "",
|
||||
"tlsErrorIgnored": "",
|
||||
"ignoreTLSErrorDescription": "",
|
||||
"createNew": "",
|
||||
"greeting": {
|
||||
"prepend": "",
|
||||
"append": "",
|
||||
"overview": ""
|
||||
},
|
||||
"monitorStatus": {
|
||||
"up": "",
|
||||
"down": "",
|
||||
"paused": ""
|
||||
},
|
||||
"roles": {
|
||||
"superAdmin": "",
|
||||
"admin": "",
|
||||
"teamMember": "",
|
||||
"demoUser": ""
|
||||
},
|
||||
"teamPanel": {
|
||||
"teamMembers": "",
|
||||
"filter": {
|
||||
"all": "",
|
||||
"member": ""
|
||||
},
|
||||
"inviteTeamMember": "",
|
||||
"inviteNewTeamMember": "",
|
||||
"inviteDescription": "",
|
||||
"email": "",
|
||||
"selectRole": "",
|
||||
"inviteLink": "",
|
||||
"cancel": "",
|
||||
"noMembers": "",
|
||||
"getToken": "",
|
||||
"emailToken": "",
|
||||
"table": {
|
||||
"name": "",
|
||||
"email": "",
|
||||
"role": "",
|
||||
"created": ""
|
||||
}
|
||||
},
|
||||
"monitorState": {
|
||||
"paused": "",
|
||||
"resumed": "",
|
||||
"active": ""
|
||||
},
|
||||
"menu": {
|
||||
"uptime": "",
|
||||
"pagespeed": "",
|
||||
"infrastructure": "",
|
||||
"distributedUptime": "",
|
||||
"incidents": "",
|
||||
"statusPages": "",
|
||||
"maintenance": "",
|
||||
"integrations": "",
|
||||
"settings": "",
|
||||
"support": "",
|
||||
"discussions": "",
|
||||
"docs": "",
|
||||
"changelog": "",
|
||||
"profile": "",
|
||||
"password": "",
|
||||
"team": "",
|
||||
"logOut": ""
|
||||
},
|
||||
"settingsEmail": "",
|
||||
"settingsEmailDescription": "",
|
||||
"settingsEmailHost": "",
|
||||
"settingsEmailPort": "",
|
||||
"settingsEmailAddress": "",
|
||||
"settingsEmailPassword": "",
|
||||
"settingsEmailUser": "",
|
||||
"settingsEmailFieldResetLabel": "",
|
||||
"state": "",
|
||||
"statusBreadCrumbsStatusPages": "",
|
||||
"statusBreadCrumbsDetails": "",
|
||||
"authForgotPasswordInstructions": "",
|
||||
"settingsThemeModeLight": "",
|
||||
"settingsThemeModeDark": "",
|
||||
"settingsClearAllStatsDialogCancel": "",
|
||||
"commonSaving": "",
|
||||
"navControls": "",
|
||||
"incidentsPageTitle": "",
|
||||
"passwordPanel": {
|
||||
"passwordChangedSuccess": "",
|
||||
"passwordInputIncorrect": "",
|
||||
"currentPassword": "",
|
||||
"enterCurrentPassword": "",
|
||||
"newPassword": "",
|
||||
"enterNewPassword": "",
|
||||
"confirmNewPassword": "",
|
||||
"passwordRequirements": "",
|
||||
"saving": ""
|
||||
},
|
||||
"uptimeCreateSelectURL": "",
|
||||
"settingsEmailConnectionHost": "",
|
||||
"sendTestEmail": "",
|
||||
"emailSent": "",
|
||||
"failedToSendEmail": "",
|
||||
"settingsTestEmail": "",
|
||||
"settingsTestEmailSuccess": "",
|
||||
"settingsTestEmailFailed": "",
|
||||
"settingsTestEmailFailedWithReason": "",
|
||||
"settingsTestEmailUnknownError": "",
|
||||
"settingsEmailRequiredFields": "",
|
||||
"statusMsg": {
|
||||
"paused": "",
|
||||
"up": "",
|
||||
"down": "",
|
||||
"pending": ""
|
||||
},
|
||||
"settingsURLTitle": "",
|
||||
"settingsURLDescription": "",
|
||||
"settingsURLSelectTitle": "",
|
||||
"settingsURLEnabled": "",
|
||||
"settingURLDisabled": ""
|
||||
}
|
||||
@@ -0,0 +1,557 @@
|
||||
{
|
||||
"dontHaveAccount": "",
|
||||
"email": "E-mail",
|
||||
"forgotPassword": "Zapomenuté heslo",
|
||||
"password": "",
|
||||
"signUp": "Registace",
|
||||
"submit": "Odeslat",
|
||||
"title": "",
|
||||
"continue": "Pokračovat",
|
||||
"enterEmail": "Zadejte svůj e-mail",
|
||||
"authLoginTitle": "Přihlášení",
|
||||
"authLoginEnterPassword": "Zadejte své heslo",
|
||||
"commonPassword": "Heslo",
|
||||
"commonBack": "Zpět",
|
||||
"authForgotPasswordTitle": "Zapomněli jste heslo?",
|
||||
"authForgotPasswordResetPassword": "Resetovat heslo",
|
||||
"createPassword": "",
|
||||
"createAPassword": "",
|
||||
"authRegisterAlreadyHaveAccount": "Máte již účet?",
|
||||
"commonAppName": "Checkmate",
|
||||
"authLoginEnterEmail": "Zadejte svůj e-mail",
|
||||
"authRegisterTitle": "Vytvoření účtu",
|
||||
"authRegisterStepOneTitle": "",
|
||||
"authRegisterStepOneDescription": "Začněte tím, že zadáte své údaje",
|
||||
"authRegisterStepTwoTitle": "",
|
||||
"authRegisterStepTwoDescription": "Řekněte nám o sobě víc",
|
||||
"authRegisterStepThreeTitle": "Téměř hotovo!",
|
||||
"authRegisterStepThreeDescription": "Zkontrolujte své údaje",
|
||||
"authForgotPasswordDescription": "Není se čeho obávat, zašleme vám instrukce k obnově.",
|
||||
"authForgotPasswordSendInstructions": "",
|
||||
"authForgotPasswordBackTo": "",
|
||||
"authCheckEmailTitle": "",
|
||||
"authCheckEmailDescription": "Odkaz pro obnovu hesla zašleme na",
|
||||
"authCheckEmailResendEmail": "Znovu odeslat e-mail",
|
||||
"authCheckEmailBackTo": "",
|
||||
"goBackTo": "",
|
||||
"authCheckEmailDidntReceiveEmail": "Neobdrželi jste e-mail?",
|
||||
"authCheckEmailClickToResend": "Klepněte pro opětovné odeslání",
|
||||
"authSetNewPasswordTitle": "Nastavení nového hesla",
|
||||
"authSetNewPasswordDescription": "Nové heslo se musí lišit od těch, které jste použili dříve.",
|
||||
"authSetNewPasswordNewPassword": "Nové heslo",
|
||||
"authSetNewPasswordConfirmPassword": "",
|
||||
"confirmPassword": "",
|
||||
"authSetNewPasswordResetPassword": "Resetovat heslo",
|
||||
"authSetNewPasswordBackTo": "",
|
||||
"authPasswordMustBeAtLeast": "Musí být alespoň",
|
||||
"authPasswordCharactersLong": "",
|
||||
"authPasswordMustContainAtLeast": "",
|
||||
"authPasswordSpecialCharacter": "",
|
||||
"authPasswordOneNumber": "",
|
||||
"authPasswordUpperCharacter": "",
|
||||
"authPasswordLowerCharacter": "",
|
||||
"authPasswordConfirmAndPassword": "",
|
||||
"authPasswordMustMatch": "",
|
||||
"authRegisterCreateAccount": "",
|
||||
"authRegisterCreateSuperAdminAccount": "Začněte tím, že si vytvoříte účet superadministrátora",
|
||||
"authRegisterSignUpWithEmail": "Registrovat přes e-mail",
|
||||
"authRegisterBySigningUp": "Registrací souhlasíte s našimi",
|
||||
"distributedStatusHeaderText": "",
|
||||
"distributedStatusSubHeaderText": "",
|
||||
"settingsGeneralSettings": "Obecná nastavení",
|
||||
"settingsDisplayTimezone": "",
|
||||
"settingsDisplayTimezoneDescription": "",
|
||||
"settingsAppearance": "Vzhled",
|
||||
"settingsAppearanceDescription": "",
|
||||
"settingsThemeMode": "",
|
||||
"settingsLanguage": "Jazyk",
|
||||
"settingsDistributedUptime": "",
|
||||
"settingsDistributedUptimeDescription": "",
|
||||
"settingsEnabled": "Zapnuto",
|
||||
"settingsDisabled": "Vypnuto",
|
||||
"settingsHistoryAndMonitoring": "Historie a monitorování",
|
||||
"settingsHistoryAndMonitoringDescription": "",
|
||||
"settingsTTLLabel": "",
|
||||
"settingsTTLOptionalLabel": "",
|
||||
"settingsClearAllStats": "",
|
||||
"settingsClearAllStatsButton": "",
|
||||
"settingsClearAllStatsDialogTitle": "",
|
||||
"settingsClearAllStatsDialogDescription": "",
|
||||
"settingsClearAllStatsDialogConfirm": "",
|
||||
"settingsDemoMonitors": "",
|
||||
"settingsDemoMonitorsDescription": "",
|
||||
"settingsAddDemoMonitors": "",
|
||||
"settingsAddDemoMonitorsButton": "",
|
||||
"settingsRemoveAllMonitors": "",
|
||||
"settingsRemoveAllMonitorsButton": "",
|
||||
"settingsRemoveAllMonitorsDialogTitle": "",
|
||||
"settingsRemoveAllMonitorsDialogConfirm": "",
|
||||
"settingsWallet": "",
|
||||
"settingsWalletDescription": "",
|
||||
"settingsAbout": "",
|
||||
"settingsDevelopedBy": "Vyvinuto společností Bluewave Labs.",
|
||||
"settingsSave": "Uložit",
|
||||
"settingsSuccessSaved": "Nastavení bylo úspěšně uloženo",
|
||||
"settingsFailedToSave": "Nepodařilo se uložit nastavení",
|
||||
"settingsStatsCleared": "",
|
||||
"settingsFailedToClearStats": "",
|
||||
"settingsDemoMonitorsAdded": "",
|
||||
"settingsFailedToAddDemoMonitors": "",
|
||||
"settingsMonitorsDeleted": "",
|
||||
"settingsFailedToDeleteMonitors": "",
|
||||
"starPromptTitle": "",
|
||||
"starPromptDescription": "",
|
||||
"https": "",
|
||||
"http": "",
|
||||
"monitor": "",
|
||||
"aboutus": "",
|
||||
"now": "",
|
||||
"delete": "",
|
||||
"configure": "",
|
||||
"networkError": "",
|
||||
"responseTime": "",
|
||||
"ms": "",
|
||||
"bar": "",
|
||||
"area": "",
|
||||
"country": "",
|
||||
"city": "",
|
||||
"response": "",
|
||||
"checkConnection": "",
|
||||
"passwordreset": "",
|
||||
"authRegisterStepOnePersonalDetails": "Zadejte své osobní údaje",
|
||||
"authCheckEmailOpenEmailButton": "",
|
||||
"authNewPasswordConfirmed": "",
|
||||
"monitorStatusUp": "",
|
||||
"monitorStatusDown": "",
|
||||
"webhookSendSuccess": "",
|
||||
"webhookSendError": "",
|
||||
"webhookUnsupportedPlatform": "",
|
||||
"distributedRightCategoryTitle": "",
|
||||
"distributedStatusServerMonitors": "",
|
||||
"distributedStatusServerMonitorsDescription": "",
|
||||
"distributedUptimeCreateSelectURL": "",
|
||||
"distributedUptimeCreateChecks": "",
|
||||
"distributedUptimeCreateChecksDescription": "",
|
||||
"distributedUptimeCreateIncidentNotification": "",
|
||||
"distributedUptimeCreateIncidentDescription": "",
|
||||
"distributedUptimeCreateAdvancedSettings": "",
|
||||
"distributedUptimeDetailsNoMonitorHistory": "",
|
||||
"distributedUptimeDetailsFooterHeading": "",
|
||||
"distributedUptimeDetailsFooterBuilt": "",
|
||||
"distributedUptimeDetailsFooterSolana": "",
|
||||
"distributedUptimeDetailsMonitorHeader": "",
|
||||
"distributedUptimeDetailsStatusHeaderUptime": "",
|
||||
"distributedUptimeDetailsStatusHeaderLastUpdate": "",
|
||||
"notifications": {
|
||||
"enableNotifications": "",
|
||||
"testNotification": "",
|
||||
"addOrEditNotifications": "",
|
||||
"slack": {
|
||||
"label": "",
|
||||
"description": "",
|
||||
"webhookLabel": "",
|
||||
"webhookPlaceholder": "",
|
||||
"webhookRequired": ""
|
||||
},
|
||||
"discord": {
|
||||
"label": "",
|
||||
"description": "",
|
||||
"webhookLabel": "",
|
||||
"webhookPlaceholder": "",
|
||||
"webhookRequired": ""
|
||||
},
|
||||
"telegram": {
|
||||
"label": "",
|
||||
"description": "",
|
||||
"tokenLabel": "",
|
||||
"tokenPlaceholder": "",
|
||||
"chatIdLabel": "",
|
||||
"chatIdPlaceholder": "",
|
||||
"fieldsRequired": ""
|
||||
},
|
||||
"webhook": {
|
||||
"label": "",
|
||||
"description": "",
|
||||
"urlLabel": "",
|
||||
"urlPlaceholder": "",
|
||||
"urlRequired": ""
|
||||
},
|
||||
"testNotificationDevelop": "",
|
||||
"integrationButton": "",
|
||||
"testSuccess": "",
|
||||
"testFailed": "",
|
||||
"unsupportedType": "",
|
||||
"networkError": ""
|
||||
},
|
||||
"testLocale": "",
|
||||
"add": "",
|
||||
"monitors": "",
|
||||
"distributedUptimeStatusCreateStatusPage": "",
|
||||
"distributedUptimeStatusCreateStatusPageAccess": "",
|
||||
"distributedUptimeStatusCreateStatusPageReady": "",
|
||||
"distributedUptimeStatusBasicInfoHeader": "",
|
||||
"distributedUptimeStatusBasicInfoDescription": "",
|
||||
"distributedUptimeStatusLogoHeader": "",
|
||||
"distributedUptimeStatusLogoDescription": "",
|
||||
"distributedUptimeStatusLogoUploadButton": "",
|
||||
"distributedUptimeStatusStandardMonitorsHeader": "",
|
||||
"distributedUptimeStatusStandardMonitorsDescription": "",
|
||||
"distributedUptimeStatusCreateYour": "",
|
||||
"distributedUptimeStatusEditYour": "",
|
||||
"distributedUptimeStatusPublishedLabel": "",
|
||||
"distributedUptimeStatusCompanyNameLabel": "",
|
||||
"distributedUptimeStatusPageAddressLabel": "",
|
||||
"distributedUptimeStatus30Days": "",
|
||||
"distributedUptimeStatus60Days": "",
|
||||
"distributedUptimeStatus90Days": "",
|
||||
"distributedUptimeStatusPageNotSetUp": "",
|
||||
"distributedUptimeStatusContactAdmin": "",
|
||||
"distributedUptimeStatusPageNotPublic": "",
|
||||
"distributedUptimeStatusPageDeleteDialog": "",
|
||||
"distributedUptimeStatusPageDeleteConfirm": "",
|
||||
"distributedUptimeStatusPageDeleteDescription": "",
|
||||
"distributedUptimeStatusDevices": "",
|
||||
"distributedUptimeStatusUpt": "",
|
||||
"distributedUptimeStatusUptBurned": "",
|
||||
"distributedUptimeStatusUptLogo": "",
|
||||
"incidentsTableNoIncidents": "",
|
||||
"incidentsTablePaginationLabel": "",
|
||||
"incidentsTableMonitorName": "",
|
||||
"incidentsTableStatus": "",
|
||||
"incidentsTableDateTime": "",
|
||||
"incidentsTableStatusCode": "",
|
||||
"incidentsTableMessage": "",
|
||||
"incidentsOptionsHeader": "",
|
||||
"incidentsOptionsHeaderFilterBy": "",
|
||||
"incidentsOptionsHeaderFilterAll": "",
|
||||
"incidentsOptionsHeaderFilterDown": "",
|
||||
"incidentsOptionsHeaderFilterCannotResolve": "",
|
||||
"incidentsOptionsHeaderShow": "",
|
||||
"incidentsOptionsHeaderLastHour": "",
|
||||
"incidentsOptionsHeaderLastDay": "",
|
||||
"incidentsOptionsHeaderLastWeek": "",
|
||||
"incidentsOptionsPlaceholderAllServers": "",
|
||||
"infrastructureCreateYour": "",
|
||||
"infrastructureCreateGeneralSettingsDescription": "",
|
||||
"infrastructureServerRequirement": "",
|
||||
"infrastructureCustomizeAlerts": "",
|
||||
"infrastructureAlertNotificationDescription": "",
|
||||
"infrastructureCreateMonitor": "",
|
||||
"infrastructureProtocol": "",
|
||||
"infrastructureServerUrlLabel": "",
|
||||
"infrastructureDisplayNameLabel": "",
|
||||
"infrastructureAuthorizationSecretLabel": "",
|
||||
"gb": "",
|
||||
"mb": "",
|
||||
"mem": "",
|
||||
"memoryUsage": "",
|
||||
"cpu": "",
|
||||
"cpuUsage": "",
|
||||
"cpuTemperature": "",
|
||||
"diskUsage": "",
|
||||
"used": "",
|
||||
"total": "",
|
||||
"cores": "",
|
||||
"frequency": "",
|
||||
"status": "",
|
||||
"cpuPhysical": "",
|
||||
"cpuLogical": "",
|
||||
"cpuFrequency": "",
|
||||
"avgCpuTemperature": "",
|
||||
"memory": "",
|
||||
"disk": "",
|
||||
"uptime": "",
|
||||
"os": "",
|
||||
"host": "",
|
||||
"actions": "",
|
||||
"integrations": "",
|
||||
"integrationsPrism": "",
|
||||
"integrationsSlack": "",
|
||||
"integrationsSlackInfo": "",
|
||||
"integrationsDiscord": "",
|
||||
"integrationsDiscordInfo": "",
|
||||
"integrationsZapier": "",
|
||||
"integrationsZapierInfo": "",
|
||||
"commonSave": "",
|
||||
"createYour": "",
|
||||
"createMonitor": "",
|
||||
"pause": "",
|
||||
"resume": "",
|
||||
"editing": "",
|
||||
"url": "",
|
||||
"access": "",
|
||||
"timezone": "",
|
||||
"features": "",
|
||||
"administrator": "",
|
||||
"loginHere": "",
|
||||
"displayName": "",
|
||||
"urlMonitor": "",
|
||||
"portToMonitor": "",
|
||||
"websiteMonitoring": "",
|
||||
"websiteMonitoringDescription": "",
|
||||
"pingMonitoring": "",
|
||||
"pingMonitoringDescription": "",
|
||||
"dockerContainerMonitoring": "",
|
||||
"dockerContainerMonitoringDescription": "",
|
||||
"portMonitoring": "",
|
||||
"portMonitoringDescription": "",
|
||||
"createMaintenanceWindow": "",
|
||||
"createMaintenance": "",
|
||||
"editMaintenance": "",
|
||||
"maintenanceWindowName": "",
|
||||
"friendlyNameInput": "",
|
||||
"friendlyNamePlaceholder": "",
|
||||
"maintenanceRepeat": "",
|
||||
"maintenance": "",
|
||||
"duration": "",
|
||||
"addMonitors": "",
|
||||
"window": "",
|
||||
"cancel": "",
|
||||
"message": "",
|
||||
"low": "",
|
||||
"high": "",
|
||||
"statusCode": "",
|
||||
"date&Time": "",
|
||||
"type": "",
|
||||
"statusPageName": "",
|
||||
"publicURL": "",
|
||||
"repeat": "",
|
||||
"edit": "",
|
||||
"createA": "",
|
||||
"remove": "",
|
||||
"maintenanceWindowDescription": "",
|
||||
"startTime": "",
|
||||
"timeZoneInfo": "",
|
||||
"monitorsToApply": "",
|
||||
"nextWindow": "",
|
||||
"notFoundButton": "",
|
||||
"pageSpeedConfigureSettingsDescription": "",
|
||||
"monitorDisplayName": "",
|
||||
"whenNewIncident": "",
|
||||
"notifySMS": "",
|
||||
"notifyEmails": "",
|
||||
"seperateEmails": "",
|
||||
"checkFrequency": "",
|
||||
"matchMethod": "",
|
||||
"expectedValue": "",
|
||||
"deleteDialogTitle": "",
|
||||
"deleteDialogDescription": "",
|
||||
"pageSpeedMonitor": "",
|
||||
"shown": "",
|
||||
"ago": "",
|
||||
"companyName": "",
|
||||
"pageSpeedDetailsPerformanceReport": "",
|
||||
"pageSpeedDetailsPerformanceReportCalculator": "",
|
||||
"checkingEvery": "",
|
||||
"statusPageCreateSettings": "",
|
||||
"basicInformation": "",
|
||||
"statusPageCreateBasicInfoDescription": "",
|
||||
"statusPageCreateSelectTimeZoneDescription": "",
|
||||
"statusPageCreateAppearanceDescription": "",
|
||||
"statusPageCreateSettingsCheckboxLabel": "",
|
||||
"statusPageCreateBasicInfoStatusPageAddress": "",
|
||||
"statusPageCreateTabsContent": "",
|
||||
"statusPageCreateTabsContentDescription": "",
|
||||
"statusPageCreateTabsContentFeaturesDescription": "",
|
||||
"showCharts": "",
|
||||
"showUptimePercentage": "",
|
||||
"removeLogo": "",
|
||||
"statusPageStatus": "",
|
||||
"statusPageStatusContactAdmin": "",
|
||||
"statusPageStatusNotPublic": "",
|
||||
"statusPageStatusNoPage": "",
|
||||
"statusPageStatusServiceStatus": "",
|
||||
"deleteStatusPage": "",
|
||||
"deleteStatusPageConfirm": "",
|
||||
"deleteStatusPageDescription": "",
|
||||
"uptimeCreate": "",
|
||||
"uptimeCreateJsonPath": "",
|
||||
"uptimeCreateJsonPathQuery": "",
|
||||
"maintenanceTableActionMenuDialogTitle": "",
|
||||
"infrastructureEditYour": "",
|
||||
"infrastructureEditMonitor": "",
|
||||
"infrastructureMonitorCreated": "",
|
||||
"infrastructureMonitorUpdated": "",
|
||||
"errorInvalidTypeId": "",
|
||||
"errorInvalidFieldId": "",
|
||||
"inviteNoTokenFound": "",
|
||||
"pageSpeedWarning": "",
|
||||
"pageSpeedLearnMoreLink": "",
|
||||
"pageSpeedAddApiKey": "",
|
||||
"update": "",
|
||||
"invalidFileFormat": "",
|
||||
"invalidFileSize": "",
|
||||
"ClickUpload": "",
|
||||
"DragandDrop": "",
|
||||
"MaxSize": "",
|
||||
"SupportedFormats": "",
|
||||
"FirstName": "",
|
||||
"LastName": "",
|
||||
"EmailDescriptionText": "",
|
||||
"YourPhoto": "",
|
||||
"PhotoDescriptionText": "",
|
||||
"save": "",
|
||||
"DeleteDescriptionText": "",
|
||||
"DeleteAccountWarning": "",
|
||||
"DeleteWarningTitle": "",
|
||||
"authRegisterFirstName": "",
|
||||
"authRegisterLastName": "",
|
||||
"authRegisterEmail": "",
|
||||
"authRegisterEmailRequired": "",
|
||||
"bulkImport": {
|
||||
"title": "",
|
||||
"selectFileTips": "",
|
||||
"selectFileDescription": "",
|
||||
"selectFile": "",
|
||||
"parsingFailed": "",
|
||||
"uploadSuccess": "",
|
||||
"validationFailed": "",
|
||||
"noFileSelected": "",
|
||||
"fallbackPage": ""
|
||||
},
|
||||
"welcomeBack": "",
|
||||
"authRegisterLoginLink": "",
|
||||
"validationNameRequired": "",
|
||||
"validationNameTooLong": "",
|
||||
"validationNameInvalidCharacters": "",
|
||||
"settingsSystemReset": "",
|
||||
"settingsSystemResetDescription": "",
|
||||
"DeleteAccountTitle": "",
|
||||
"DeleteAccountButton": "",
|
||||
"authRegisterEmailInvalid": "",
|
||||
"publicLink": "",
|
||||
"doNotHaveAccount": "",
|
||||
"registerHere": "",
|
||||
"backendUnreachable": "",
|
||||
"backendUnreachableMessage": "",
|
||||
"backendUnreachableError": "",
|
||||
"retryConnection": "",
|
||||
"retryingConnection": "",
|
||||
"backendReconnected": "",
|
||||
"backendStillUnreachable": "",
|
||||
"backendConnectionError": "",
|
||||
"maskedPageSpeedKeyPlaceholder": "",
|
||||
"pageSpeedApiKeyFieldTitle": "",
|
||||
"pageSpeedApiKeyFieldLabel": "",
|
||||
"pageSpeedApiKeyFieldDescription": "",
|
||||
"pageSpeedApiKeyFieldResetLabel": "",
|
||||
"reset": "",
|
||||
"ignoreTLSError": "",
|
||||
"tlsErrorIgnored": "",
|
||||
"ignoreTLSErrorDescription": "",
|
||||
"createNew": "",
|
||||
"greeting": {
|
||||
"prepend": "",
|
||||
"append": "",
|
||||
"overview": ""
|
||||
},
|
||||
"monitorStatus": {
|
||||
"up": "",
|
||||
"down": "",
|
||||
"paused": ""
|
||||
},
|
||||
"roles": {
|
||||
"superAdmin": "",
|
||||
"admin": "",
|
||||
"teamMember": "",
|
||||
"demoUser": ""
|
||||
},
|
||||
"teamPanel": {
|
||||
"teamMembers": "",
|
||||
"filter": {
|
||||
"all": "",
|
||||
"member": ""
|
||||
},
|
||||
"inviteTeamMember": "",
|
||||
"inviteNewTeamMember": "",
|
||||
"inviteDescription": "",
|
||||
"email": "",
|
||||
"selectRole": "",
|
||||
"inviteLink": "",
|
||||
"cancel": "",
|
||||
"noMembers": "",
|
||||
"getToken": "",
|
||||
"emailToken": "",
|
||||
"table": {
|
||||
"name": "",
|
||||
"email": "",
|
||||
"role": "",
|
||||
"created": ""
|
||||
}
|
||||
},
|
||||
"monitorState": {
|
||||
"paused": "",
|
||||
"resumed": "",
|
||||
"active": ""
|
||||
},
|
||||
"menu": {
|
||||
"uptime": "",
|
||||
"pagespeed": "",
|
||||
"infrastructure": "",
|
||||
"distributedUptime": "",
|
||||
"incidents": "",
|
||||
"statusPages": "",
|
||||
"maintenance": "",
|
||||
"integrations": "",
|
||||
"settings": "",
|
||||
"support": "",
|
||||
"discussions": "",
|
||||
"docs": "",
|
||||
"changelog": "",
|
||||
"profile": "",
|
||||
"password": "",
|
||||
"team": "",
|
||||
"logOut": ""
|
||||
},
|
||||
"settingsEmail": "",
|
||||
"settingsEmailDescription": "",
|
||||
"settingsEmailHost": "",
|
||||
"settingsEmailPort": "",
|
||||
"settingsEmailAddress": "",
|
||||
"settingsEmailPassword": "",
|
||||
"settingsEmailUser": "",
|
||||
"settingsEmailFieldResetLabel": "",
|
||||
"state": "",
|
||||
"statusBreadCrumbsStatusPages": "",
|
||||
"statusBreadCrumbsDetails": "",
|
||||
"authForgotPasswordInstructions": "",
|
||||
"settingsThemeModeLight": "",
|
||||
"settingsThemeModeDark": "",
|
||||
"settingsClearAllStatsDialogCancel": "",
|
||||
"commonSaving": "",
|
||||
"navControls": "",
|
||||
"incidentsPageTitle": "",
|
||||
"passwordPanel": {
|
||||
"passwordChangedSuccess": "",
|
||||
"passwordInputIncorrect": "",
|
||||
"currentPassword": "",
|
||||
"enterCurrentPassword": "",
|
||||
"newPassword": "",
|
||||
"enterNewPassword": "",
|
||||
"confirmNewPassword": "",
|
||||
"passwordRequirements": "",
|
||||
"saving": ""
|
||||
},
|
||||
"uptimeCreateSelectURL": "",
|
||||
"settingsEmailConnectionHost": "",
|
||||
"sendTestEmail": "",
|
||||
"emailSent": "",
|
||||
"failedToSendEmail": "",
|
||||
"settingsTestEmail": "",
|
||||
"settingsTestEmailSuccess": "",
|
||||
"settingsTestEmailFailed": "",
|
||||
"settingsTestEmailFailedWithReason": "",
|
||||
"settingsTestEmailUnknownError": "",
|
||||
"settingsEmailRequiredFields": "",
|
||||
"statusMsg": {
|
||||
"paused": "",
|
||||
"up": "",
|
||||
"down": "",
|
||||
"pending": ""
|
||||
},
|
||||
"settingsURLTitle": "",
|
||||
"settingsURLDescription": "",
|
||||
"settingsURLSelectTitle": "",
|
||||
"settingsURLEnabled": "",
|
||||
"settingURLDisabled": ""
|
||||
}
|
||||
@@ -0,0 +1,557 @@
|
||||
{
|
||||
"dontHaveAccount": "Noch kein Konto",
|
||||
"email": "E-Mail",
|
||||
"forgotPassword": "Passwort vergessen",
|
||||
"password": "passwort",
|
||||
"signUp": "Registrieren",
|
||||
"submit": "Absenden",
|
||||
"title": "Titel",
|
||||
"continue": "Weiter",
|
||||
"enterEmail": "Geben Sie Ihre E-Mail-Adresse ein",
|
||||
"authLoginTitle": "Anmelden",
|
||||
"authLoginEnterPassword": "Geben Sie Ihr Passwort ein",
|
||||
"commonPassword": "Passwort",
|
||||
"commonBack": "Zurück",
|
||||
"authForgotPasswordTitle": "Passwort vergessen?",
|
||||
"authForgotPasswordResetPassword": "Passwort zurücksetzen",
|
||||
"createPassword": "Erstelle dein Passwort",
|
||||
"createAPassword": "Passwort",
|
||||
"authRegisterAlreadyHaveAccount": "Hast du schon eine Account?",
|
||||
"commonAppName": "Checkmate",
|
||||
"authLoginEnterEmail": "",
|
||||
"authRegisterTitle": "",
|
||||
"authRegisterStepOneTitle": "",
|
||||
"authRegisterStepOneDescription": "",
|
||||
"authRegisterStepTwoTitle": "",
|
||||
"authRegisterStepTwoDescription": "",
|
||||
"authRegisterStepThreeTitle": "",
|
||||
"authRegisterStepThreeDescription": "",
|
||||
"authForgotPasswordDescription": "",
|
||||
"authForgotPasswordSendInstructions": "",
|
||||
"authForgotPasswordBackTo": "",
|
||||
"authCheckEmailTitle": "",
|
||||
"authCheckEmailDescription": "",
|
||||
"authCheckEmailResendEmail": "",
|
||||
"authCheckEmailBackTo": "",
|
||||
"goBackTo": "",
|
||||
"authCheckEmailDidntReceiveEmail": "",
|
||||
"authCheckEmailClickToResend": "",
|
||||
"authSetNewPasswordTitle": "",
|
||||
"authSetNewPasswordDescription": "",
|
||||
"authSetNewPasswordNewPassword": "",
|
||||
"authSetNewPasswordConfirmPassword": "",
|
||||
"confirmPassword": "",
|
||||
"authSetNewPasswordResetPassword": "",
|
||||
"authSetNewPasswordBackTo": "",
|
||||
"authPasswordMustBeAtLeast": "",
|
||||
"authPasswordCharactersLong": "",
|
||||
"authPasswordMustContainAtLeast": "",
|
||||
"authPasswordSpecialCharacter": "",
|
||||
"authPasswordOneNumber": "",
|
||||
"authPasswordUpperCharacter": "",
|
||||
"authPasswordLowerCharacter": "",
|
||||
"authPasswordConfirmAndPassword": "",
|
||||
"authPasswordMustMatch": "",
|
||||
"authRegisterCreateAccount": "",
|
||||
"authRegisterCreateSuperAdminAccount": "",
|
||||
"authRegisterSignUpWithEmail": "",
|
||||
"authRegisterBySigningUp": "",
|
||||
"distributedStatusHeaderText": "",
|
||||
"distributedStatusSubHeaderText": "",
|
||||
"settingsGeneralSettings": "",
|
||||
"settingsDisplayTimezone": "",
|
||||
"settingsDisplayTimezoneDescription": "",
|
||||
"settingsAppearance": "",
|
||||
"settingsAppearanceDescription": "",
|
||||
"settingsThemeMode": "",
|
||||
"settingsLanguage": "",
|
||||
"settingsDistributedUptime": "",
|
||||
"settingsDistributedUptimeDescription": "",
|
||||
"settingsEnabled": "",
|
||||
"settingsDisabled": "",
|
||||
"settingsHistoryAndMonitoring": "",
|
||||
"settingsHistoryAndMonitoringDescription": "",
|
||||
"settingsTTLLabel": "",
|
||||
"settingsTTLOptionalLabel": "",
|
||||
"settingsClearAllStats": "",
|
||||
"settingsClearAllStatsButton": "",
|
||||
"settingsClearAllStatsDialogTitle": "",
|
||||
"settingsClearAllStatsDialogDescription": "",
|
||||
"settingsClearAllStatsDialogConfirm": "",
|
||||
"settingsDemoMonitors": "",
|
||||
"settingsDemoMonitorsDescription": "",
|
||||
"settingsAddDemoMonitors": "",
|
||||
"settingsAddDemoMonitorsButton": "",
|
||||
"settingsRemoveAllMonitors": "",
|
||||
"settingsRemoveAllMonitorsButton": "",
|
||||
"settingsRemoveAllMonitorsDialogTitle": "",
|
||||
"settingsRemoveAllMonitorsDialogConfirm": "",
|
||||
"settingsWallet": "",
|
||||
"settingsWalletDescription": "",
|
||||
"settingsAbout": "",
|
||||
"settingsDevelopedBy": "",
|
||||
"settingsSave": "",
|
||||
"settingsSuccessSaved": "",
|
||||
"settingsFailedToSave": "",
|
||||
"settingsStatsCleared": "",
|
||||
"settingsFailedToClearStats": "",
|
||||
"settingsDemoMonitorsAdded": "",
|
||||
"settingsFailedToAddDemoMonitors": "",
|
||||
"settingsMonitorsDeleted": "",
|
||||
"settingsFailedToDeleteMonitors": "",
|
||||
"starPromptTitle": "",
|
||||
"starPromptDescription": "",
|
||||
"https": "",
|
||||
"http": "",
|
||||
"monitor": "",
|
||||
"aboutus": "",
|
||||
"now": "",
|
||||
"delete": "",
|
||||
"configure": "",
|
||||
"networkError": "",
|
||||
"responseTime": "",
|
||||
"ms": "",
|
||||
"bar": "",
|
||||
"area": "",
|
||||
"country": "",
|
||||
"city": "",
|
||||
"response": "",
|
||||
"checkConnection": "",
|
||||
"passwordreset": "",
|
||||
"authRegisterStepOnePersonalDetails": "",
|
||||
"authCheckEmailOpenEmailButton": "",
|
||||
"authNewPasswordConfirmed": "",
|
||||
"monitorStatusUp": "",
|
||||
"monitorStatusDown": "",
|
||||
"webhookSendSuccess": "",
|
||||
"webhookSendError": "",
|
||||
"webhookUnsupportedPlatform": "",
|
||||
"distributedRightCategoryTitle": "",
|
||||
"distributedStatusServerMonitors": "",
|
||||
"distributedStatusServerMonitorsDescription": "",
|
||||
"distributedUptimeCreateSelectURL": "",
|
||||
"distributedUptimeCreateChecks": "",
|
||||
"distributedUptimeCreateChecksDescription": "",
|
||||
"distributedUptimeCreateIncidentNotification": "",
|
||||
"distributedUptimeCreateIncidentDescription": "",
|
||||
"distributedUptimeCreateAdvancedSettings": "",
|
||||
"distributedUptimeDetailsNoMonitorHistory": "",
|
||||
"distributedUptimeDetailsFooterHeading": "",
|
||||
"distributedUptimeDetailsFooterBuilt": "",
|
||||
"distributedUptimeDetailsFooterSolana": "",
|
||||
"distributedUptimeDetailsMonitorHeader": "",
|
||||
"distributedUptimeDetailsStatusHeaderUptime": "",
|
||||
"distributedUptimeDetailsStatusHeaderLastUpdate": "",
|
||||
"notifications": {
|
||||
"enableNotifications": "",
|
||||
"testNotification": "",
|
||||
"addOrEditNotifications": "",
|
||||
"slack": {
|
||||
"label": "",
|
||||
"description": "",
|
||||
"webhookLabel": "",
|
||||
"webhookPlaceholder": "",
|
||||
"webhookRequired": ""
|
||||
},
|
||||
"discord": {
|
||||
"label": "",
|
||||
"description": "",
|
||||
"webhookLabel": "",
|
||||
"webhookPlaceholder": "",
|
||||
"webhookRequired": ""
|
||||
},
|
||||
"telegram": {
|
||||
"label": "",
|
||||
"description": "",
|
||||
"tokenLabel": "",
|
||||
"tokenPlaceholder": "",
|
||||
"chatIdLabel": "",
|
||||
"chatIdPlaceholder": "",
|
||||
"fieldsRequired": ""
|
||||
},
|
||||
"webhook": {
|
||||
"label": "",
|
||||
"description": "",
|
||||
"urlLabel": "",
|
||||
"urlPlaceholder": "",
|
||||
"urlRequired": ""
|
||||
},
|
||||
"testNotificationDevelop": "",
|
||||
"integrationButton": "",
|
||||
"testSuccess": "",
|
||||
"testFailed": "",
|
||||
"unsupportedType": "",
|
||||
"networkError": ""
|
||||
},
|
||||
"testLocale": "",
|
||||
"add": "",
|
||||
"monitors": "",
|
||||
"distributedUptimeStatusCreateStatusPage": "",
|
||||
"distributedUptimeStatusCreateStatusPageAccess": "",
|
||||
"distributedUptimeStatusCreateStatusPageReady": "",
|
||||
"distributedUptimeStatusBasicInfoHeader": "",
|
||||
"distributedUptimeStatusBasicInfoDescription": "",
|
||||
"distributedUptimeStatusLogoHeader": "",
|
||||
"distributedUptimeStatusLogoDescription": "",
|
||||
"distributedUptimeStatusLogoUploadButton": "",
|
||||
"distributedUptimeStatusStandardMonitorsHeader": "",
|
||||
"distributedUptimeStatusStandardMonitorsDescription": "",
|
||||
"distributedUptimeStatusCreateYour": "",
|
||||
"distributedUptimeStatusEditYour": "",
|
||||
"distributedUptimeStatusPublishedLabel": "",
|
||||
"distributedUptimeStatusCompanyNameLabel": "",
|
||||
"distributedUptimeStatusPageAddressLabel": "",
|
||||
"distributedUptimeStatus30Days": "",
|
||||
"distributedUptimeStatus60Days": "",
|
||||
"distributedUptimeStatus90Days": "",
|
||||
"distributedUptimeStatusPageNotSetUp": "",
|
||||
"distributedUptimeStatusContactAdmin": "",
|
||||
"distributedUptimeStatusPageNotPublic": "",
|
||||
"distributedUptimeStatusPageDeleteDialog": "",
|
||||
"distributedUptimeStatusPageDeleteConfirm": "",
|
||||
"distributedUptimeStatusPageDeleteDescription": "",
|
||||
"distributedUptimeStatusDevices": "",
|
||||
"distributedUptimeStatusUpt": "",
|
||||
"distributedUptimeStatusUptBurned": "",
|
||||
"distributedUptimeStatusUptLogo": "",
|
||||
"incidentsTableNoIncidents": "",
|
||||
"incidentsTablePaginationLabel": "",
|
||||
"incidentsTableMonitorName": "",
|
||||
"incidentsTableStatus": "",
|
||||
"incidentsTableDateTime": "",
|
||||
"incidentsTableStatusCode": "",
|
||||
"incidentsTableMessage": "",
|
||||
"incidentsOptionsHeader": "",
|
||||
"incidentsOptionsHeaderFilterBy": "",
|
||||
"incidentsOptionsHeaderFilterAll": "",
|
||||
"incidentsOptionsHeaderFilterDown": "",
|
||||
"incidentsOptionsHeaderFilterCannotResolve": "",
|
||||
"incidentsOptionsHeaderShow": "",
|
||||
"incidentsOptionsHeaderLastHour": "",
|
||||
"incidentsOptionsHeaderLastDay": "",
|
||||
"incidentsOptionsHeaderLastWeek": "",
|
||||
"incidentsOptionsPlaceholderAllServers": "",
|
||||
"infrastructureCreateYour": "",
|
||||
"infrastructureCreateGeneralSettingsDescription": "",
|
||||
"infrastructureServerRequirement": "",
|
||||
"infrastructureCustomizeAlerts": "",
|
||||
"infrastructureAlertNotificationDescription": "",
|
||||
"infrastructureCreateMonitor": "",
|
||||
"infrastructureProtocol": "",
|
||||
"infrastructureServerUrlLabel": "",
|
||||
"infrastructureDisplayNameLabel": "",
|
||||
"infrastructureAuthorizationSecretLabel": "",
|
||||
"gb": "",
|
||||
"mb": "",
|
||||
"mem": "",
|
||||
"memoryUsage": "",
|
||||
"cpu": "",
|
||||
"cpuUsage": "",
|
||||
"cpuTemperature": "",
|
||||
"diskUsage": "",
|
||||
"used": "",
|
||||
"total": "",
|
||||
"cores": "",
|
||||
"frequency": "",
|
||||
"status": "",
|
||||
"cpuPhysical": "",
|
||||
"cpuLogical": "",
|
||||
"cpuFrequency": "",
|
||||
"avgCpuTemperature": "",
|
||||
"memory": "",
|
||||
"disk": "",
|
||||
"uptime": "",
|
||||
"os": "",
|
||||
"host": "",
|
||||
"actions": "",
|
||||
"integrations": "",
|
||||
"integrationsPrism": "",
|
||||
"integrationsSlack": "",
|
||||
"integrationsSlackInfo": "",
|
||||
"integrationsDiscord": "",
|
||||
"integrationsDiscordInfo": "",
|
||||
"integrationsZapier": "",
|
||||
"integrationsZapierInfo": "",
|
||||
"commonSave": "",
|
||||
"createYour": "",
|
||||
"createMonitor": "",
|
||||
"pause": "",
|
||||
"resume": "",
|
||||
"editing": "",
|
||||
"url": "",
|
||||
"access": "",
|
||||
"timezone": "",
|
||||
"features": "",
|
||||
"administrator": "",
|
||||
"loginHere": "",
|
||||
"displayName": "",
|
||||
"urlMonitor": "",
|
||||
"portToMonitor": "",
|
||||
"websiteMonitoring": "",
|
||||
"websiteMonitoringDescription": "",
|
||||
"pingMonitoring": "",
|
||||
"pingMonitoringDescription": "",
|
||||
"dockerContainerMonitoring": "",
|
||||
"dockerContainerMonitoringDescription": "",
|
||||
"portMonitoring": "",
|
||||
"portMonitoringDescription": "",
|
||||
"createMaintenanceWindow": "",
|
||||
"createMaintenance": "",
|
||||
"editMaintenance": "",
|
||||
"maintenanceWindowName": "",
|
||||
"friendlyNameInput": "",
|
||||
"friendlyNamePlaceholder": "",
|
||||
"maintenanceRepeat": "",
|
||||
"maintenance": "",
|
||||
"duration": "",
|
||||
"addMonitors": "",
|
||||
"window": "",
|
||||
"cancel": "",
|
||||
"message": "",
|
||||
"low": "",
|
||||
"high": "",
|
||||
"statusCode": "",
|
||||
"date&Time": "",
|
||||
"type": "",
|
||||
"statusPageName": "",
|
||||
"publicURL": "",
|
||||
"repeat": "",
|
||||
"edit": "",
|
||||
"createA": "",
|
||||
"remove": "",
|
||||
"maintenanceWindowDescription": "",
|
||||
"startTime": "",
|
||||
"timeZoneInfo": "",
|
||||
"monitorsToApply": "",
|
||||
"nextWindow": "",
|
||||
"notFoundButton": "",
|
||||
"pageSpeedConfigureSettingsDescription": "",
|
||||
"monitorDisplayName": "",
|
||||
"whenNewIncident": "",
|
||||
"notifySMS": "",
|
||||
"notifyEmails": "",
|
||||
"seperateEmails": "",
|
||||
"checkFrequency": "",
|
||||
"matchMethod": "",
|
||||
"expectedValue": "",
|
||||
"deleteDialogTitle": "",
|
||||
"deleteDialogDescription": "",
|
||||
"pageSpeedMonitor": "",
|
||||
"shown": "",
|
||||
"ago": "",
|
||||
"companyName": "",
|
||||
"pageSpeedDetailsPerformanceReport": "",
|
||||
"pageSpeedDetailsPerformanceReportCalculator": "",
|
||||
"checkingEvery": "",
|
||||
"statusPageCreateSettings": "",
|
||||
"basicInformation": "",
|
||||
"statusPageCreateBasicInfoDescription": "",
|
||||
"statusPageCreateSelectTimeZoneDescription": "",
|
||||
"statusPageCreateAppearanceDescription": "",
|
||||
"statusPageCreateSettingsCheckboxLabel": "",
|
||||
"statusPageCreateBasicInfoStatusPageAddress": "",
|
||||
"statusPageCreateTabsContent": "",
|
||||
"statusPageCreateTabsContentDescription": "",
|
||||
"statusPageCreateTabsContentFeaturesDescription": "",
|
||||
"showCharts": "",
|
||||
"showUptimePercentage": "",
|
||||
"removeLogo": "",
|
||||
"statusPageStatus": "",
|
||||
"statusPageStatusContactAdmin": "",
|
||||
"statusPageStatusNotPublic": "",
|
||||
"statusPageStatusNoPage": "",
|
||||
"statusPageStatusServiceStatus": "",
|
||||
"deleteStatusPage": "",
|
||||
"deleteStatusPageConfirm": "",
|
||||
"deleteStatusPageDescription": "",
|
||||
"uptimeCreate": "",
|
||||
"uptimeCreateJsonPath": "",
|
||||
"uptimeCreateJsonPathQuery": "",
|
||||
"maintenanceTableActionMenuDialogTitle": "",
|
||||
"infrastructureEditYour": "",
|
||||
"infrastructureEditMonitor": "",
|
||||
"infrastructureMonitorCreated": "",
|
||||
"infrastructureMonitorUpdated": "",
|
||||
"errorInvalidTypeId": "",
|
||||
"errorInvalidFieldId": "",
|
||||
"inviteNoTokenFound": "",
|
||||
"pageSpeedWarning": "",
|
||||
"pageSpeedLearnMoreLink": "",
|
||||
"pageSpeedAddApiKey": "",
|
||||
"update": "",
|
||||
"invalidFileFormat": "",
|
||||
"invalidFileSize": "",
|
||||
"ClickUpload": "",
|
||||
"DragandDrop": "",
|
||||
"MaxSize": "",
|
||||
"SupportedFormats": "",
|
||||
"FirstName": "",
|
||||
"LastName": "",
|
||||
"EmailDescriptionText": "",
|
||||
"YourPhoto": "",
|
||||
"PhotoDescriptionText": "",
|
||||
"save": "",
|
||||
"DeleteDescriptionText": "",
|
||||
"DeleteAccountWarning": "",
|
||||
"DeleteWarningTitle": "",
|
||||
"authRegisterFirstName": "",
|
||||
"authRegisterLastName": "",
|
||||
"authRegisterEmail": "",
|
||||
"authRegisterEmailRequired": "",
|
||||
"bulkImport": {
|
||||
"title": "",
|
||||
"selectFileTips": "",
|
||||
"selectFileDescription": "",
|
||||
"selectFile": "",
|
||||
"parsingFailed": "",
|
||||
"uploadSuccess": "",
|
||||
"validationFailed": "",
|
||||
"noFileSelected": "",
|
||||
"fallbackPage": ""
|
||||
},
|
||||
"welcomeBack": "",
|
||||
"authRegisterLoginLink": "",
|
||||
"validationNameRequired": "",
|
||||
"validationNameTooLong": "",
|
||||
"validationNameInvalidCharacters": "",
|
||||
"settingsSystemReset": "",
|
||||
"settingsSystemResetDescription": "",
|
||||
"DeleteAccountTitle": "",
|
||||
"DeleteAccountButton": "",
|
||||
"authRegisterEmailInvalid": "",
|
||||
"publicLink": "",
|
||||
"doNotHaveAccount": "",
|
||||
"registerHere": "",
|
||||
"backendUnreachable": "",
|
||||
"backendUnreachableMessage": "",
|
||||
"backendUnreachableError": "",
|
||||
"retryConnection": "",
|
||||
"retryingConnection": "",
|
||||
"backendReconnected": "",
|
||||
"backendStillUnreachable": "",
|
||||
"backendConnectionError": "",
|
||||
"maskedPageSpeedKeyPlaceholder": "",
|
||||
"pageSpeedApiKeyFieldTitle": "",
|
||||
"pageSpeedApiKeyFieldLabel": "",
|
||||
"pageSpeedApiKeyFieldDescription": "",
|
||||
"pageSpeedApiKeyFieldResetLabel": "",
|
||||
"reset": "",
|
||||
"ignoreTLSError": "",
|
||||
"tlsErrorIgnored": "",
|
||||
"ignoreTLSErrorDescription": "",
|
||||
"createNew": "",
|
||||
"greeting": {
|
||||
"prepend": "",
|
||||
"append": "",
|
||||
"overview": ""
|
||||
},
|
||||
"monitorStatus": {
|
||||
"up": "",
|
||||
"down": "",
|
||||
"paused": ""
|
||||
},
|
||||
"roles": {
|
||||
"superAdmin": "",
|
||||
"admin": "",
|
||||
"teamMember": "",
|
||||
"demoUser": ""
|
||||
},
|
||||
"teamPanel": {
|
||||
"teamMembers": "",
|
||||
"filter": {
|
||||
"all": "",
|
||||
"member": ""
|
||||
},
|
||||
"inviteTeamMember": "",
|
||||
"inviteNewTeamMember": "",
|
||||
"inviteDescription": "",
|
||||
"email": "",
|
||||
"selectRole": "",
|
||||
"inviteLink": "",
|
||||
"cancel": "",
|
||||
"noMembers": "",
|
||||
"getToken": "",
|
||||
"emailToken": "",
|
||||
"table": {
|
||||
"name": "",
|
||||
"email": "",
|
||||
"role": "",
|
||||
"created": ""
|
||||
}
|
||||
},
|
||||
"monitorState": {
|
||||
"paused": "",
|
||||
"resumed": "",
|
||||
"active": ""
|
||||
},
|
||||
"menu": {
|
||||
"uptime": "",
|
||||
"pagespeed": "",
|
||||
"infrastructure": "",
|
||||
"distributedUptime": "",
|
||||
"incidents": "",
|
||||
"statusPages": "",
|
||||
"maintenance": "",
|
||||
"integrations": "",
|
||||
"settings": "",
|
||||
"support": "",
|
||||
"discussions": "",
|
||||
"docs": "",
|
||||
"changelog": "",
|
||||
"profile": "",
|
||||
"password": "",
|
||||
"team": "",
|
||||
"logOut": ""
|
||||
},
|
||||
"settingsEmail": "",
|
||||
"settingsEmailDescription": "",
|
||||
"settingsEmailHost": "",
|
||||
"settingsEmailPort": "",
|
||||
"settingsEmailAddress": "",
|
||||
"settingsEmailPassword": "",
|
||||
"settingsEmailUser": "",
|
||||
"settingsEmailFieldResetLabel": "",
|
||||
"state": "",
|
||||
"statusBreadCrumbsStatusPages": "",
|
||||
"statusBreadCrumbsDetails": "",
|
||||
"authForgotPasswordInstructions": "",
|
||||
"settingsThemeModeLight": "",
|
||||
"settingsThemeModeDark": "",
|
||||
"settingsClearAllStatsDialogCancel": "",
|
||||
"commonSaving": "",
|
||||
"navControls": "",
|
||||
"incidentsPageTitle": "",
|
||||
"passwordPanel": {
|
||||
"passwordChangedSuccess": "",
|
||||
"passwordInputIncorrect": "",
|
||||
"currentPassword": "",
|
||||
"enterCurrentPassword": "",
|
||||
"newPassword": "",
|
||||
"enterNewPassword": "",
|
||||
"confirmNewPassword": "",
|
||||
"passwordRequirements": "",
|
||||
"saving": ""
|
||||
},
|
||||
"uptimeCreateSelectURL": "",
|
||||
"settingsEmailConnectionHost": "",
|
||||
"sendTestEmail": "",
|
||||
"emailSent": "",
|
||||
"failedToSendEmail": "",
|
||||
"settingsTestEmail": "",
|
||||
"settingsTestEmailSuccess": "",
|
||||
"settingsTestEmailFailed": "",
|
||||
"settingsTestEmailFailedWithReason": "",
|
||||
"settingsTestEmailUnknownError": "",
|
||||
"settingsEmailRequiredFields": "",
|
||||
"statusMsg": {
|
||||
"paused": "",
|
||||
"up": "",
|
||||
"down": "",
|
||||
"pending": ""
|
||||
},
|
||||
"settingsURLTitle": "",
|
||||
"settingsURLDescription": "",
|
||||
"settingsURLSelectTitle": "",
|
||||
"settingsURLEnabled": "",
|
||||
"settingURLDisabled": ""
|
||||
}
|
||||
@@ -1,7 +1,5 @@
|
||||
{
|
||||
"dontHaveAccount": "Don't have account",
|
||||
"doNotHaveAccount": "Do not have an account?",
|
||||
"registerHere": "Register here",
|
||||
"email": "E-mail",
|
||||
"forgotPassword": "Forgot Password",
|
||||
"password": "Password",
|
||||
@@ -16,13 +14,10 @@
|
||||
"commonBack": "Back",
|
||||
"authForgotPasswordTitle": "Forgot password?",
|
||||
"authForgotPasswordResetPassword": "Reset password",
|
||||
"authForgotPasswordInstructions": "No worries, we'll send you reset instructions.",
|
||||
"createPassword": "Create your password",
|
||||
"createAPassword": "Password",
|
||||
"authRegisterAlreadyHaveAccount": "Already have an account?",
|
||||
"authRegisterLoginLink": "Log In",
|
||||
"commonAppName": "Checkmate",
|
||||
"welcomeBack": "Welcome back! You're successfully logged in.",
|
||||
"authLoginEnterEmail": "Enter your email",
|
||||
"authRegisterTitle": "Create an account",
|
||||
"authRegisterStepOneTitle": "Create your account",
|
||||
@@ -57,9 +52,6 @@
|
||||
"authPasswordLowerCharacter": "one lower character",
|
||||
"authPasswordConfirmAndPassword": "Confirm password and password",
|
||||
"authPasswordMustMatch": "Passwords must match",
|
||||
"validationNameRequired": "Please enter your name",
|
||||
"validationNameTooLong": "Name should be less than 50 characters",
|
||||
"validationNameInvalidCharacters": "Please use only letters, spaces, apostrophes, or hyphens",
|
||||
"authRegisterCreateAccount": "Create your account to get started",
|
||||
"authRegisterCreateSuperAdminAccount": "Create your super admin account to get started",
|
||||
"authRegisterSignUpWithEmail": "Create super admin account",
|
||||
@@ -72,14 +64,7 @@
|
||||
"settingsAppearance": "Appearance",
|
||||
"settingsAppearanceDescription": "Switch between light and dark mode, or change user interface language",
|
||||
"settingsThemeMode": "Theme Mode",
|
||||
"settingsThemeModeLight": "Light",
|
||||
"settingsThemeModeDark": "Dark",
|
||||
"settingsLanguage": "Language",
|
||||
"settingsURLTitle": "Monitor IP/URL on Status Page",
|
||||
"settingsURLDescription": "Display the IP address or URL of monitor on the public Status page. If it's disabled, only the monitor name will be shown to protect sensitive information.",
|
||||
"settingsURLSelectTitle": "Display IP/URL on status page",
|
||||
"settingsURLEnabled": "Enabled",
|
||||
"settingURLDisabled": "Disabled",
|
||||
"settingsDistributedUptime": "Distributed uptime",
|
||||
"settingsDistributedUptimeDescription": "Enable/disable distributed uptime monitoring.",
|
||||
"settingsEnabled": "Enabled",
|
||||
@@ -93,13 +78,10 @@
|
||||
"settingsClearAllStatsDialogTitle": "Do you want to clear all stats?",
|
||||
"settingsClearAllStatsDialogDescription": "Once removed, the monitoring history and stats cannot be retrieved.",
|
||||
"settingsClearAllStatsDialogConfirm": "Yes, clear all stats",
|
||||
"settingsClearAllStatsDialogCancel": "Cancel",
|
||||
"settingsDemoMonitors": "Demo monitors",
|
||||
"settingsDemoMonitorsDescription": "Add sample monitors for demonstration purposes.",
|
||||
"settingsAddDemoMonitors": "Adding demo monitors",
|
||||
"settingsAddDemoMonitorsButton": "Add demo monitors",
|
||||
"settingsSystemReset": "System reset",
|
||||
"settingsSystemResetDescription": "Remove all monitors from your system.",
|
||||
"settingsRemoveAllMonitors": "Removing all monitors",
|
||||
"settingsRemoveAllMonitorsButton": "Remove all monitors",
|
||||
"settingsRemoveAllMonitorsDialogTitle": "Do you want to remove all monitors?",
|
||||
@@ -117,36 +99,12 @@
|
||||
"settingsFailedToAddDemoMonitors": "Failed to add demo monitors",
|
||||
"settingsMonitorsDeleted": "Successfully deleted all monitors",
|
||||
"settingsFailedToDeleteMonitors": "Failed to delete all monitors",
|
||||
"settingsEmail": "Email",
|
||||
"settingsEmailDescription": "Configure the email settings for your system. This is used to send notifications and alerts.",
|
||||
"settingsEmailHost": "Email host - Hostname or IP address of the SMTP server",
|
||||
"settingsEmailPort": "Email port - Port to connect to",
|
||||
"settingsEmailUser": "Email user - Username for authentication, overrides email address if specified",
|
||||
"settingsEmailAddress": "Email address - Used for authentication",
|
||||
"settingsEmailPassword": "Email password - Password for authentication",
|
||||
"settingsEmailConnectionHost": "Email connection host - Hostname to use in the HELO/EHLO greeting",
|
||||
"settingsTestEmail": "Send test e-mail",
|
||||
"settingsTestEmailSuccess": "Test email sent successfully",
|
||||
"settingsTestEmailFailed": "Failed to send test email",
|
||||
"settingsTestEmailFailedWithReason": "Failed to send test email: {{reason}}",
|
||||
"settingsTestEmailUnknownError": "Unknown error",
|
||||
"settingsEmailRequiredFields": "Email host and port are required",
|
||||
"settingsEmailFieldResetLabel": "Password is set. Click Reset to change it.",
|
||||
"backendUnreachable": "Server Connection Error",
|
||||
"backendUnreachableMessage": "We're unable to connect to the server. Please check your internet connection or verify your deployment configuration if the problem persists.",
|
||||
"backendUnreachableError": "Cannot connect to the server. Please try again later.",
|
||||
"retryConnection": "Retry connection",
|
||||
"retryingConnection": "Connecting...",
|
||||
"backendReconnected": "Successfully reconnected to the server.",
|
||||
"backendStillUnreachable": "Server is still unreachable. Please try again later.",
|
||||
"backendConnectionError": "Error connecting to the server. Please check your network connection.",
|
||||
"starPromptTitle": "Star Checkmate",
|
||||
"starPromptDescription": "See the latest releases and help grow the community on GitHub",
|
||||
"https": "HTTPS",
|
||||
"http": "HTTP",
|
||||
"monitor": "monitor",
|
||||
"aboutus": "About Us",
|
||||
"state": "State",
|
||||
"now": "Now",
|
||||
"delete": "Delete",
|
||||
"configure": "Configure",
|
||||
@@ -315,7 +273,6 @@
|
||||
"integrationsZapier": "Zapier",
|
||||
"integrationsZapierInfo": "Send all incidents to Zapier, and then see them everywhere",
|
||||
"commonSave": "Save",
|
||||
"commonSaving": "Saving...",
|
||||
"createYour": "Create your",
|
||||
"createMonitor": "Create monitor",
|
||||
"pause": "Pause",
|
||||
@@ -404,8 +361,6 @@
|
||||
"statusPageStatusNotPublic": "This status page is not public.",
|
||||
"statusPageStatusNoPage": "There's no status page here.",
|
||||
"statusPageStatusServiceStatus": "Service status",
|
||||
"statusBreadCrumbsStatusPages": "Status Pages",
|
||||
"statusBreadCrumbsDetails": "Details",
|
||||
"deleteStatusPage": "Do you want to delete this status page?",
|
||||
"deleteStatusPageConfirm": "Yes, delete status page",
|
||||
"deleteStatusPageDescription": "Once deleted, your status page cannot be retrieved.",
|
||||
@@ -433,14 +388,9 @@
|
||||
"FirstName": "First name",
|
||||
"LastName": "Last name",
|
||||
"EmailDescriptionText": "This is your current email address — it cannot be changed.",
|
||||
"ignoreTLSError": "Ignore TLS/SSL error",
|
||||
"tlsErrorIgnored": "TLS/SSL errors ignored",
|
||||
"ignoreTLSErrorDescription": "Ignore TLS/SSL errors and continue checking the website's availability",
|
||||
"YourPhoto": "Profile photo",
|
||||
"PhotoDescriptionText": "This photo will be displayed in your profile page.",
|
||||
"save": "Save",
|
||||
"DeleteAccountTitle": "Remove account",
|
||||
"DeleteAccountButton": "Remove account",
|
||||
"DeleteDescriptionText": "This will remove the account and all associated data from the server. This isn't reversible.",
|
||||
"DeleteAccountWarning": "Removing your account means you won't be able to sign in again and all your data will be removed. This isn't reversible.",
|
||||
"DeleteWarningTitle": "Really remove this account?",
|
||||
@@ -448,7 +398,6 @@
|
||||
"authRegisterLastName": "Surname",
|
||||
"authRegisterEmail": "Email",
|
||||
"authRegisterEmailRequired": "To continue, please enter your email address",
|
||||
"authRegisterEmailInvalid": "Please enter a valid email address",
|
||||
"bulkImport": {
|
||||
"title": "Bulk Import",
|
||||
"selectFileTips": "Select CSV file to upload",
|
||||
@@ -460,14 +409,36 @@
|
||||
"noFileSelected": "No file selected",
|
||||
"fallbackPage": "Import a file to upload a list of servers in bulk"
|
||||
},
|
||||
"welcomeBack": "Welcome back! You're successfully logged in.",
|
||||
"authRegisterLoginLink": "Log In",
|
||||
"validationNameRequired": "Please enter your name",
|
||||
"validationNameTooLong": "Name should be less than 50 characters",
|
||||
"validationNameInvalidCharacters": "Please use only letters, spaces, apostrophes, or hyphens",
|
||||
"settingsSystemReset": "System reset",
|
||||
"settingsSystemResetDescription": "Remove all monitors from your system.",
|
||||
"DeleteAccountTitle": "Remove account",
|
||||
"DeleteAccountButton": "Remove account",
|
||||
"authRegisterEmailInvalid": "Please enter a valid email address",
|
||||
"publicLink": "Public link",
|
||||
"doNotHaveAccount": "Do not have an account?",
|
||||
"registerHere": "Register here",
|
||||
"backendUnreachable": "Server Connection Error",
|
||||
"backendUnreachableMessage": "We're unable to connect to the server. Please check your internet connection or verify your deployment configuration if the problem persists.",
|
||||
"backendUnreachableError": "Cannot connect to the server. Please try again later.",
|
||||
"retryConnection": "Retry connection",
|
||||
"retryingConnection": "Connecting...",
|
||||
"backendReconnected": "Successfully reconnected to the server.",
|
||||
"backendStillUnreachable": "Server is still unreachable. Please try again later.",
|
||||
"backendConnectionError": "Error connecting to the server. Please check your network connection.",
|
||||
"maskedPageSpeedKeyPlaceholder": "*************************************",
|
||||
"pageSpeedApiKeyFieldTitle": "Google PageSpeed API key",
|
||||
"pageSpeedApiKeyFieldLabel": "PageSpeed API key",
|
||||
"pageSpeedApiKeyFieldDescription": "Enter your Google PageSpeed API key to enable pagespeed monitoring. Click Reset to update the key.",
|
||||
"pageSpeedApiKeyFieldResetLabel": "API key is set. Click Reset to change it.",
|
||||
|
||||
"reset": "Reset",
|
||||
"ignoreTLSError": "Ignore TLS/SSL error",
|
||||
"tlsErrorIgnored": "TLS/SSL errors ignored",
|
||||
"ignoreTLSErrorDescription": "Ignore TLS/SSL errors and continue checking the website's availability",
|
||||
"createNew": "Create new",
|
||||
"greeting": {
|
||||
"prepend": "Hey there",
|
||||
@@ -532,6 +503,22 @@
|
||||
"team": "Team",
|
||||
"logOut": "Log out"
|
||||
},
|
||||
"settingsEmail": "Email",
|
||||
"settingsEmailDescription": "Configure the email settings for your system. This is used to send notifications and alerts.",
|
||||
"settingsEmailHost": "Email host - Hostname or IP address of the SMTP server",
|
||||
"settingsEmailPort": "Email port - Port to connect to",
|
||||
"settingsEmailAddress": "Email address - Used for authentication",
|
||||
"settingsEmailPassword": "Email password - Password for authentication",
|
||||
"settingsEmailUser": "Email user - Username for authentication, overrides email address if specified",
|
||||
"settingsEmailFieldResetLabel": "Password is set. Click Reset to change it.",
|
||||
"state": "State",
|
||||
"statusBreadCrumbsStatusPages": "Status Pages",
|
||||
"statusBreadCrumbsDetails": "Details",
|
||||
"authForgotPasswordInstructions": "No worries, we'll send you reset instructions.",
|
||||
"settingsThemeModeLight": "Light",
|
||||
"settingsThemeModeDark": "Dark",
|
||||
"settingsClearAllStatsDialogCancel": "Cancel",
|
||||
"commonSaving": "Saving...",
|
||||
"navControls": "Controls",
|
||||
"incidentsPageTitle": "Incidents",
|
||||
"passwordPanel": {
|
||||
@@ -546,13 +533,25 @@
|
||||
"saving": "Saving..."
|
||||
},
|
||||
"uptimeCreateSelectURL": "Enter the URL or IP to monitor (e.g., https://example.com/ or 192.168.1.100) and add a clear display name that appears on the dashboard.",
|
||||
"settingsEmailConnectionHost": "Email connection host - Hostname to use in the HELO/EHLO greeting",
|
||||
"sendTestEmail": "Send test email",
|
||||
"emailSent": "Email sent successfully",
|
||||
"failedToSendEmail": "Failed to send email",
|
||||
"statusMsg" : {
|
||||
"settingsTestEmail": "Send test e-mail",
|
||||
"settingsTestEmailSuccess": "Test email sent successfully",
|
||||
"settingsTestEmailFailed": "Failed to send test email",
|
||||
"settingsTestEmailFailedWithReason": "Failed to send test email: {{reason}}",
|
||||
"settingsTestEmailUnknownError": "Unknown error",
|
||||
"settingsEmailRequiredFields": "Email host and port are required",
|
||||
"statusMsg": {
|
||||
"paused": "Monitoring is paused.",
|
||||
"up": "Your site is up.",
|
||||
"down": "Your site is down.",
|
||||
"pending": "Pending..."
|
||||
}
|
||||
},
|
||||
"settingsURLTitle": "Monitor IP/URL on Status Page",
|
||||
"settingsURLDescription": "Display the IP address or URL of monitor on the public Status page. If it's disabled, only the monitor name will be shown to protect sensitive information.",
|
||||
"settingsURLSelectTitle": "Display IP/URL on status page",
|
||||
"settingsURLEnabled": "Enabled",
|
||||
"settingURLDisabled": "Disabled"
|
||||
}
|
||||
@@ -0,0 +1,557 @@
|
||||
{
|
||||
"dontHaveAccount": "No tengo una cuenta",
|
||||
"email": "Correo electronico",
|
||||
"forgotPassword": "He olvidado mi contraseña",
|
||||
"password": "Contraseña",
|
||||
"signUp": "Registrarse",
|
||||
"submit": "Enviar",
|
||||
"title": "Titulo",
|
||||
"continue": "Continuar",
|
||||
"enterEmail": "Introduce tu email",
|
||||
"authLoginTitle": "Inicio de session",
|
||||
"authLoginEnterPassword": "Introduce tu contraseña",
|
||||
"commonPassword": "Contraseña",
|
||||
"commonBack": "Atras",
|
||||
"authForgotPasswordTitle": "¿Has olvidado tu contraseña?",
|
||||
"authForgotPasswordResetPassword": "Restablecer contraseña",
|
||||
"createPassword": "Crear contraseña",
|
||||
"createAPassword": "Contraseña",
|
||||
"authRegisterAlreadyHaveAccount": "Ya tienes un cuenta?",
|
||||
"commonAppName": "",
|
||||
"authLoginEnterEmail": "Introduce tu correo electronico",
|
||||
"authRegisterTitle": "Crear una cuenta",
|
||||
"authRegisterStepOneTitle": "Crea tu cuenta",
|
||||
"authRegisterStepOneDescription": "",
|
||||
"authRegisterStepTwoTitle": "Configura tu perfil",
|
||||
"authRegisterStepTwoDescription": "Cuentano mas sobre ti",
|
||||
"authRegisterStepThreeTitle": "Ya casi estamos!",
|
||||
"authRegisterStepThreeDescription": "Revisa tu informacion",
|
||||
"authForgotPasswordDescription": "",
|
||||
"authForgotPasswordSendInstructions": "Enviar instrucciones",
|
||||
"authForgotPasswordBackTo": "Volver a",
|
||||
"authCheckEmailTitle": "Comprueba tu correo",
|
||||
"authCheckEmailDescription": "Hemos enviado un link para reiniciar la contraseña a",
|
||||
"authCheckEmailResendEmail": "Reenviar correo",
|
||||
"authCheckEmailBackTo": "Volver a",
|
||||
"goBackTo": "Volver a",
|
||||
"authCheckEmailDidntReceiveEmail": "No has recibido el correo electronico?",
|
||||
"authCheckEmailClickToResend": "Presiona para reenviar",
|
||||
"authSetNewPasswordTitle": "Configurar nueva contraseña",
|
||||
"authSetNewPasswordDescription": "",
|
||||
"authSetNewPasswordNewPassword": "Nueva contraseña",
|
||||
"authSetNewPasswordConfirmPassword": "Confirmar contraseña",
|
||||
"confirmPassword": "",
|
||||
"authSetNewPasswordResetPassword": "Restablecer contraseña",
|
||||
"authSetNewPasswordBackTo": "Volver a",
|
||||
"authPasswordMustBeAtLeast": "",
|
||||
"authPasswordCharactersLong": "8 caracteres de longitud",
|
||||
"authPasswordMustContainAtLeast": "",
|
||||
"authPasswordSpecialCharacter": "",
|
||||
"authPasswordOneNumber": "un numero",
|
||||
"authPasswordUpperCharacter": "",
|
||||
"authPasswordLowerCharacter": "",
|
||||
"authPasswordConfirmAndPassword": "",
|
||||
"authPasswordMustMatch": "",
|
||||
"authRegisterCreateAccount": "",
|
||||
"authRegisterCreateSuperAdminAccount": "",
|
||||
"authRegisterSignUpWithEmail": "",
|
||||
"authRegisterBySigningUp": "",
|
||||
"distributedStatusHeaderText": "",
|
||||
"distributedStatusSubHeaderText": "",
|
||||
"settingsGeneralSettings": "",
|
||||
"settingsDisplayTimezone": "",
|
||||
"settingsDisplayTimezoneDescription": "",
|
||||
"settingsAppearance": "",
|
||||
"settingsAppearanceDescription": "",
|
||||
"settingsThemeMode": "",
|
||||
"settingsLanguage": "",
|
||||
"settingsDistributedUptime": "",
|
||||
"settingsDistributedUptimeDescription": "",
|
||||
"settingsEnabled": "",
|
||||
"settingsDisabled": "",
|
||||
"settingsHistoryAndMonitoring": "",
|
||||
"settingsHistoryAndMonitoringDescription": "",
|
||||
"settingsTTLLabel": "",
|
||||
"settingsTTLOptionalLabel": "",
|
||||
"settingsClearAllStats": "",
|
||||
"settingsClearAllStatsButton": "",
|
||||
"settingsClearAllStatsDialogTitle": "",
|
||||
"settingsClearAllStatsDialogDescription": "",
|
||||
"settingsClearAllStatsDialogConfirm": "",
|
||||
"settingsDemoMonitors": "",
|
||||
"settingsDemoMonitorsDescription": "",
|
||||
"settingsAddDemoMonitors": "",
|
||||
"settingsAddDemoMonitorsButton": "",
|
||||
"settingsRemoveAllMonitors": "",
|
||||
"settingsRemoveAllMonitorsButton": "",
|
||||
"settingsRemoveAllMonitorsDialogTitle": "",
|
||||
"settingsRemoveAllMonitorsDialogConfirm": "",
|
||||
"settingsWallet": "",
|
||||
"settingsWalletDescription": "",
|
||||
"settingsAbout": "",
|
||||
"settingsDevelopedBy": "",
|
||||
"settingsSave": "",
|
||||
"settingsSuccessSaved": "",
|
||||
"settingsFailedToSave": "",
|
||||
"settingsStatsCleared": "",
|
||||
"settingsFailedToClearStats": "",
|
||||
"settingsDemoMonitorsAdded": "",
|
||||
"settingsFailedToAddDemoMonitors": "",
|
||||
"settingsMonitorsDeleted": "",
|
||||
"settingsFailedToDeleteMonitors": "",
|
||||
"starPromptTitle": "",
|
||||
"starPromptDescription": "",
|
||||
"https": "",
|
||||
"http": "",
|
||||
"monitor": "",
|
||||
"aboutus": "",
|
||||
"now": "",
|
||||
"delete": "",
|
||||
"configure": "",
|
||||
"networkError": "",
|
||||
"responseTime": "",
|
||||
"ms": "",
|
||||
"bar": "",
|
||||
"area": "",
|
||||
"country": "",
|
||||
"city": "",
|
||||
"response": "",
|
||||
"checkConnection": "",
|
||||
"passwordreset": "",
|
||||
"authRegisterStepOnePersonalDetails": "",
|
||||
"authCheckEmailOpenEmailButton": "",
|
||||
"authNewPasswordConfirmed": "",
|
||||
"monitorStatusUp": "",
|
||||
"monitorStatusDown": "",
|
||||
"webhookSendSuccess": "",
|
||||
"webhookSendError": "",
|
||||
"webhookUnsupportedPlatform": "",
|
||||
"distributedRightCategoryTitle": "",
|
||||
"distributedStatusServerMonitors": "",
|
||||
"distributedStatusServerMonitorsDescription": "",
|
||||
"distributedUptimeCreateSelectURL": "",
|
||||
"distributedUptimeCreateChecks": "",
|
||||
"distributedUptimeCreateChecksDescription": "",
|
||||
"distributedUptimeCreateIncidentNotification": "",
|
||||
"distributedUptimeCreateIncidentDescription": "",
|
||||
"distributedUptimeCreateAdvancedSettings": "",
|
||||
"distributedUptimeDetailsNoMonitorHistory": "",
|
||||
"distributedUptimeDetailsFooterHeading": "",
|
||||
"distributedUptimeDetailsFooterBuilt": "",
|
||||
"distributedUptimeDetailsFooterSolana": "",
|
||||
"distributedUptimeDetailsMonitorHeader": "",
|
||||
"distributedUptimeDetailsStatusHeaderUptime": "",
|
||||
"distributedUptimeDetailsStatusHeaderLastUpdate": "",
|
||||
"notifications": {
|
||||
"enableNotifications": "",
|
||||
"testNotification": "",
|
||||
"addOrEditNotifications": "",
|
||||
"slack": {
|
||||
"label": "",
|
||||
"description": "",
|
||||
"webhookLabel": "",
|
||||
"webhookPlaceholder": "",
|
||||
"webhookRequired": ""
|
||||
},
|
||||
"discord": {
|
||||
"label": "",
|
||||
"description": "",
|
||||
"webhookLabel": "",
|
||||
"webhookPlaceholder": "",
|
||||
"webhookRequired": ""
|
||||
},
|
||||
"telegram": {
|
||||
"label": "",
|
||||
"description": "",
|
||||
"tokenLabel": "",
|
||||
"tokenPlaceholder": "",
|
||||
"chatIdLabel": "",
|
||||
"chatIdPlaceholder": "",
|
||||
"fieldsRequired": ""
|
||||
},
|
||||
"webhook": {
|
||||
"label": "",
|
||||
"description": "",
|
||||
"urlLabel": "",
|
||||
"urlPlaceholder": "",
|
||||
"urlRequired": ""
|
||||
},
|
||||
"testNotificationDevelop": "",
|
||||
"integrationButton": "",
|
||||
"testSuccess": "",
|
||||
"testFailed": "",
|
||||
"unsupportedType": "",
|
||||
"networkError": ""
|
||||
},
|
||||
"testLocale": "",
|
||||
"add": "",
|
||||
"monitors": "",
|
||||
"distributedUptimeStatusCreateStatusPage": "",
|
||||
"distributedUptimeStatusCreateStatusPageAccess": "",
|
||||
"distributedUptimeStatusCreateStatusPageReady": "",
|
||||
"distributedUptimeStatusBasicInfoHeader": "",
|
||||
"distributedUptimeStatusBasicInfoDescription": "",
|
||||
"distributedUptimeStatusLogoHeader": "",
|
||||
"distributedUptimeStatusLogoDescription": "",
|
||||
"distributedUptimeStatusLogoUploadButton": "",
|
||||
"distributedUptimeStatusStandardMonitorsHeader": "",
|
||||
"distributedUptimeStatusStandardMonitorsDescription": "",
|
||||
"distributedUptimeStatusCreateYour": "",
|
||||
"distributedUptimeStatusEditYour": "",
|
||||
"distributedUptimeStatusPublishedLabel": "",
|
||||
"distributedUptimeStatusCompanyNameLabel": "",
|
||||
"distributedUptimeStatusPageAddressLabel": "",
|
||||
"distributedUptimeStatus30Days": "",
|
||||
"distributedUptimeStatus60Days": "",
|
||||
"distributedUptimeStatus90Days": "",
|
||||
"distributedUptimeStatusPageNotSetUp": "",
|
||||
"distributedUptimeStatusContactAdmin": "",
|
||||
"distributedUptimeStatusPageNotPublic": "",
|
||||
"distributedUptimeStatusPageDeleteDialog": "",
|
||||
"distributedUptimeStatusPageDeleteConfirm": "",
|
||||
"distributedUptimeStatusPageDeleteDescription": "",
|
||||
"distributedUptimeStatusDevices": "",
|
||||
"distributedUptimeStatusUpt": "",
|
||||
"distributedUptimeStatusUptBurned": "",
|
||||
"distributedUptimeStatusUptLogo": "",
|
||||
"incidentsTableNoIncidents": "",
|
||||
"incidentsTablePaginationLabel": "",
|
||||
"incidentsTableMonitorName": "",
|
||||
"incidentsTableStatus": "",
|
||||
"incidentsTableDateTime": "",
|
||||
"incidentsTableStatusCode": "",
|
||||
"incidentsTableMessage": "",
|
||||
"incidentsOptionsHeader": "",
|
||||
"incidentsOptionsHeaderFilterBy": "",
|
||||
"incidentsOptionsHeaderFilterAll": "",
|
||||
"incidentsOptionsHeaderFilterDown": "",
|
||||
"incidentsOptionsHeaderFilterCannotResolve": "",
|
||||
"incidentsOptionsHeaderShow": "",
|
||||
"incidentsOptionsHeaderLastHour": "",
|
||||
"incidentsOptionsHeaderLastDay": "",
|
||||
"incidentsOptionsHeaderLastWeek": "",
|
||||
"incidentsOptionsPlaceholderAllServers": "",
|
||||
"infrastructureCreateYour": "",
|
||||
"infrastructureCreateGeneralSettingsDescription": "",
|
||||
"infrastructureServerRequirement": "",
|
||||
"infrastructureCustomizeAlerts": "",
|
||||
"infrastructureAlertNotificationDescription": "",
|
||||
"infrastructureCreateMonitor": "",
|
||||
"infrastructureProtocol": "",
|
||||
"infrastructureServerUrlLabel": "",
|
||||
"infrastructureDisplayNameLabel": "",
|
||||
"infrastructureAuthorizationSecretLabel": "",
|
||||
"gb": "",
|
||||
"mb": "",
|
||||
"mem": "",
|
||||
"memoryUsage": "",
|
||||
"cpu": "",
|
||||
"cpuUsage": "",
|
||||
"cpuTemperature": "",
|
||||
"diskUsage": "",
|
||||
"used": "",
|
||||
"total": "",
|
||||
"cores": "",
|
||||
"frequency": "",
|
||||
"status": "",
|
||||
"cpuPhysical": "",
|
||||
"cpuLogical": "",
|
||||
"cpuFrequency": "",
|
||||
"avgCpuTemperature": "",
|
||||
"memory": "",
|
||||
"disk": "",
|
||||
"uptime": "",
|
||||
"os": "",
|
||||
"host": "",
|
||||
"actions": "",
|
||||
"integrations": "",
|
||||
"integrationsPrism": "",
|
||||
"integrationsSlack": "",
|
||||
"integrationsSlackInfo": "",
|
||||
"integrationsDiscord": "",
|
||||
"integrationsDiscordInfo": "",
|
||||
"integrationsZapier": "",
|
||||
"integrationsZapierInfo": "",
|
||||
"commonSave": "",
|
||||
"createYour": "",
|
||||
"createMonitor": "",
|
||||
"pause": "",
|
||||
"resume": "",
|
||||
"editing": "",
|
||||
"url": "",
|
||||
"access": "",
|
||||
"timezone": "",
|
||||
"features": "",
|
||||
"administrator": "",
|
||||
"loginHere": "",
|
||||
"displayName": "",
|
||||
"urlMonitor": "",
|
||||
"portToMonitor": "",
|
||||
"websiteMonitoring": "",
|
||||
"websiteMonitoringDescription": "",
|
||||
"pingMonitoring": "",
|
||||
"pingMonitoringDescription": "",
|
||||
"dockerContainerMonitoring": "",
|
||||
"dockerContainerMonitoringDescription": "",
|
||||
"portMonitoring": "",
|
||||
"portMonitoringDescription": "",
|
||||
"createMaintenanceWindow": "",
|
||||
"createMaintenance": "",
|
||||
"editMaintenance": "",
|
||||
"maintenanceWindowName": "",
|
||||
"friendlyNameInput": "",
|
||||
"friendlyNamePlaceholder": "",
|
||||
"maintenanceRepeat": "",
|
||||
"maintenance": "",
|
||||
"duration": "",
|
||||
"addMonitors": "",
|
||||
"window": "",
|
||||
"cancel": "",
|
||||
"message": "",
|
||||
"low": "",
|
||||
"high": "",
|
||||
"statusCode": "",
|
||||
"date&Time": "",
|
||||
"type": "",
|
||||
"statusPageName": "",
|
||||
"publicURL": "",
|
||||
"repeat": "",
|
||||
"edit": "",
|
||||
"createA": "",
|
||||
"remove": "",
|
||||
"maintenanceWindowDescription": "",
|
||||
"startTime": "",
|
||||
"timeZoneInfo": "",
|
||||
"monitorsToApply": "",
|
||||
"nextWindow": "",
|
||||
"notFoundButton": "",
|
||||
"pageSpeedConfigureSettingsDescription": "",
|
||||
"monitorDisplayName": "",
|
||||
"whenNewIncident": "",
|
||||
"notifySMS": "",
|
||||
"notifyEmails": "",
|
||||
"seperateEmails": "",
|
||||
"checkFrequency": "",
|
||||
"matchMethod": "",
|
||||
"expectedValue": "",
|
||||
"deleteDialogTitle": "",
|
||||
"deleteDialogDescription": "",
|
||||
"pageSpeedMonitor": "",
|
||||
"shown": "",
|
||||
"ago": "",
|
||||
"companyName": "",
|
||||
"pageSpeedDetailsPerformanceReport": "",
|
||||
"pageSpeedDetailsPerformanceReportCalculator": "",
|
||||
"checkingEvery": "",
|
||||
"statusPageCreateSettings": "",
|
||||
"basicInformation": "",
|
||||
"statusPageCreateBasicInfoDescription": "",
|
||||
"statusPageCreateSelectTimeZoneDescription": "",
|
||||
"statusPageCreateAppearanceDescription": "",
|
||||
"statusPageCreateSettingsCheckboxLabel": "",
|
||||
"statusPageCreateBasicInfoStatusPageAddress": "",
|
||||
"statusPageCreateTabsContent": "",
|
||||
"statusPageCreateTabsContentDescription": "",
|
||||
"statusPageCreateTabsContentFeaturesDescription": "",
|
||||
"showCharts": "",
|
||||
"showUptimePercentage": "",
|
||||
"removeLogo": "",
|
||||
"statusPageStatus": "",
|
||||
"statusPageStatusContactAdmin": "",
|
||||
"statusPageStatusNotPublic": "",
|
||||
"statusPageStatusNoPage": "",
|
||||
"statusPageStatusServiceStatus": "",
|
||||
"deleteStatusPage": "",
|
||||
"deleteStatusPageConfirm": "",
|
||||
"deleteStatusPageDescription": "",
|
||||
"uptimeCreate": "",
|
||||
"uptimeCreateJsonPath": "",
|
||||
"uptimeCreateJsonPathQuery": "",
|
||||
"maintenanceTableActionMenuDialogTitle": "",
|
||||
"infrastructureEditYour": "",
|
||||
"infrastructureEditMonitor": "",
|
||||
"infrastructureMonitorCreated": "",
|
||||
"infrastructureMonitorUpdated": "",
|
||||
"errorInvalidTypeId": "",
|
||||
"errorInvalidFieldId": "",
|
||||
"inviteNoTokenFound": "",
|
||||
"pageSpeedWarning": "",
|
||||
"pageSpeedLearnMoreLink": "",
|
||||
"pageSpeedAddApiKey": "",
|
||||
"update": "",
|
||||
"invalidFileFormat": "",
|
||||
"invalidFileSize": "",
|
||||
"ClickUpload": "",
|
||||
"DragandDrop": "",
|
||||
"MaxSize": "",
|
||||
"SupportedFormats": "",
|
||||
"FirstName": "",
|
||||
"LastName": "",
|
||||
"EmailDescriptionText": "",
|
||||
"YourPhoto": "",
|
||||
"PhotoDescriptionText": "",
|
||||
"save": "",
|
||||
"DeleteDescriptionText": "",
|
||||
"DeleteAccountWarning": "",
|
||||
"DeleteWarningTitle": "",
|
||||
"authRegisterFirstName": "",
|
||||
"authRegisterLastName": "",
|
||||
"authRegisterEmail": "",
|
||||
"authRegisterEmailRequired": "",
|
||||
"bulkImport": {
|
||||
"title": "",
|
||||
"selectFileTips": "",
|
||||
"selectFileDescription": "",
|
||||
"selectFile": "",
|
||||
"parsingFailed": "",
|
||||
"uploadSuccess": "",
|
||||
"validationFailed": "",
|
||||
"noFileSelected": "",
|
||||
"fallbackPage": ""
|
||||
},
|
||||
"welcomeBack": "",
|
||||
"authRegisterLoginLink": "",
|
||||
"validationNameRequired": "",
|
||||
"validationNameTooLong": "",
|
||||
"validationNameInvalidCharacters": "",
|
||||
"settingsSystemReset": "",
|
||||
"settingsSystemResetDescription": "",
|
||||
"DeleteAccountTitle": "",
|
||||
"DeleteAccountButton": "",
|
||||
"authRegisterEmailInvalid": "",
|
||||
"publicLink": "",
|
||||
"doNotHaveAccount": "",
|
||||
"registerHere": "",
|
||||
"backendUnreachable": "",
|
||||
"backendUnreachableMessage": "",
|
||||
"backendUnreachableError": "",
|
||||
"retryConnection": "",
|
||||
"retryingConnection": "",
|
||||
"backendReconnected": "",
|
||||
"backendStillUnreachable": "",
|
||||
"backendConnectionError": "",
|
||||
"maskedPageSpeedKeyPlaceholder": "",
|
||||
"pageSpeedApiKeyFieldTitle": "",
|
||||
"pageSpeedApiKeyFieldLabel": "",
|
||||
"pageSpeedApiKeyFieldDescription": "",
|
||||
"pageSpeedApiKeyFieldResetLabel": "",
|
||||
"reset": "",
|
||||
"ignoreTLSError": "",
|
||||
"tlsErrorIgnored": "",
|
||||
"ignoreTLSErrorDescription": "",
|
||||
"createNew": "",
|
||||
"greeting": {
|
||||
"prepend": "",
|
||||
"append": "",
|
||||
"overview": ""
|
||||
},
|
||||
"monitorStatus": {
|
||||
"up": "",
|
||||
"down": "",
|
||||
"paused": ""
|
||||
},
|
||||
"roles": {
|
||||
"superAdmin": "",
|
||||
"admin": "",
|
||||
"teamMember": "",
|
||||
"demoUser": ""
|
||||
},
|
||||
"teamPanel": {
|
||||
"teamMembers": "",
|
||||
"filter": {
|
||||
"all": "",
|
||||
"member": ""
|
||||
},
|
||||
"inviteTeamMember": "",
|
||||
"inviteNewTeamMember": "",
|
||||
"inviteDescription": "",
|
||||
"email": "",
|
||||
"selectRole": "",
|
||||
"inviteLink": "",
|
||||
"cancel": "",
|
||||
"noMembers": "",
|
||||
"getToken": "",
|
||||
"emailToken": "",
|
||||
"table": {
|
||||
"name": "",
|
||||
"email": "",
|
||||
"role": "",
|
||||
"created": ""
|
||||
}
|
||||
},
|
||||
"monitorState": {
|
||||
"paused": "",
|
||||
"resumed": "",
|
||||
"active": ""
|
||||
},
|
||||
"menu": {
|
||||
"uptime": "",
|
||||
"pagespeed": "",
|
||||
"infrastructure": "",
|
||||
"distributedUptime": "",
|
||||
"incidents": "",
|
||||
"statusPages": "",
|
||||
"maintenance": "",
|
||||
"integrations": "",
|
||||
"settings": "",
|
||||
"support": "",
|
||||
"discussions": "",
|
||||
"docs": "",
|
||||
"changelog": "",
|
||||
"profile": "",
|
||||
"password": "",
|
||||
"team": "",
|
||||
"logOut": ""
|
||||
},
|
||||
"settingsEmail": "",
|
||||
"settingsEmailDescription": "",
|
||||
"settingsEmailHost": "",
|
||||
"settingsEmailPort": "",
|
||||
"settingsEmailAddress": "",
|
||||
"settingsEmailPassword": "",
|
||||
"settingsEmailUser": "",
|
||||
"settingsEmailFieldResetLabel": "",
|
||||
"state": "",
|
||||
"statusBreadCrumbsStatusPages": "",
|
||||
"statusBreadCrumbsDetails": "",
|
||||
"authForgotPasswordInstructions": "",
|
||||
"settingsThemeModeLight": "",
|
||||
"settingsThemeModeDark": "",
|
||||
"settingsClearAllStatsDialogCancel": "",
|
||||
"commonSaving": "",
|
||||
"navControls": "",
|
||||
"incidentsPageTitle": "",
|
||||
"passwordPanel": {
|
||||
"passwordChangedSuccess": "",
|
||||
"passwordInputIncorrect": "",
|
||||
"currentPassword": "",
|
||||
"enterCurrentPassword": "",
|
||||
"newPassword": "",
|
||||
"enterNewPassword": "",
|
||||
"confirmNewPassword": "",
|
||||
"passwordRequirements": "",
|
||||
"saving": ""
|
||||
},
|
||||
"uptimeCreateSelectURL": "",
|
||||
"settingsEmailConnectionHost": "",
|
||||
"sendTestEmail": "",
|
||||
"emailSent": "",
|
||||
"failedToSendEmail": "",
|
||||
"settingsTestEmail": "",
|
||||
"settingsTestEmailSuccess": "",
|
||||
"settingsTestEmailFailed": "",
|
||||
"settingsTestEmailFailedWithReason": "",
|
||||
"settingsTestEmailUnknownError": "",
|
||||
"settingsEmailRequiredFields": "",
|
||||
"statusMsg": {
|
||||
"paused": "",
|
||||
"up": "",
|
||||
"down": "",
|
||||
"pending": ""
|
||||
},
|
||||
"settingsURLTitle": "",
|
||||
"settingsURLDescription": "",
|
||||
"settingsURLSelectTitle": "",
|
||||
"settingsURLEnabled": "",
|
||||
"settingURLDisabled": ""
|
||||
}
|
||||
@@ -0,0 +1,557 @@
|
||||
{
|
||||
"dontHaveAccount": "Ei tiliä",
|
||||
"email": "Sähköposti",
|
||||
"forgotPassword": "Unohtunut salasana",
|
||||
"password": "Salasana",
|
||||
"signUp": "Rekisteröidy",
|
||||
"submit": "Lähetä",
|
||||
"title": "Otsikko",
|
||||
"continue": "Jatka",
|
||||
"enterEmail": "Syötä sähköpostiosoitteesi",
|
||||
"authLoginTitle": "Kirjaudu",
|
||||
"authLoginEnterPassword": "Syötä salasanasi",
|
||||
"commonPassword": "Salasana",
|
||||
"commonBack": "Takaisin",
|
||||
"authForgotPasswordTitle": "Unohditko salasanasi?",
|
||||
"authForgotPasswordResetPassword": "Nollaa salasana",
|
||||
"createPassword": "Luo salasanasi",
|
||||
"createAPassword": "Salasana",
|
||||
"authRegisterAlreadyHaveAccount": "Onko sinulla jo tili?",
|
||||
"commonAppName": "Checkmate",
|
||||
"authLoginEnterEmail": "Syötä salasanasi",
|
||||
"authRegisterTitle": "Luo tili",
|
||||
"authRegisterStepOneTitle": "Luo tilisi",
|
||||
"authRegisterStepOneDescription": "Kirjoita tietosi aloittaaksesi",
|
||||
"authRegisterStepTwoTitle": "Määritä profiilisi",
|
||||
"authRegisterStepTwoDescription": "Kerro meille lisää itsestäsi",
|
||||
"authRegisterStepThreeTitle": "Melkein valmis!",
|
||||
"authRegisterStepThreeDescription": "Tarkista tietosi",
|
||||
"authForgotPasswordDescription": "Ei hätää, lähetämme sinulle salasanan nollausohjeet.",
|
||||
"authForgotPasswordSendInstructions": "Lähetä ohjeet",
|
||||
"authForgotPasswordBackTo": "Palaa",
|
||||
"authCheckEmailTitle": "Tarkista sähköpostisi",
|
||||
"authCheckEmailDescription": "Lähetimme salasanan nollauslinkin osoitteeseen",
|
||||
"authCheckEmailResendEmail": "Lähetä sähköposti uudelleen",
|
||||
"authCheckEmailBackTo": "Palaa",
|
||||
"goBackTo": "Palaa edelliseen",
|
||||
"authCheckEmailDidntReceiveEmail": "Etkö saanut sähköpostia?",
|
||||
"authCheckEmailClickToResend": "Klikkaa lähettääksesi uudelleen",
|
||||
"authSetNewPasswordTitle": "Aseta uusi salasana",
|
||||
"authSetNewPasswordDescription": "Uuden salasanan pitää olla eri kuin aiemmin käyttämäsi.",
|
||||
"authSetNewPasswordNewPassword": "Uusi salasana",
|
||||
"authSetNewPasswordConfirmPassword": "Vahvista salasana",
|
||||
"confirmPassword": "Syötä salasana uudelleen",
|
||||
"authSetNewPasswordResetPassword": "Nollaa salasana",
|
||||
"authSetNewPasswordBackTo": "Takaisin",
|
||||
"authPasswordMustBeAtLeast": "Vähintään",
|
||||
"authPasswordCharactersLong": "8 merkkiä pitkä",
|
||||
"authPasswordMustContainAtLeast": "Tulee sisältää vähintään",
|
||||
"authPasswordSpecialCharacter": "yksi erikoismerkki",
|
||||
"authPasswordOneNumber": "yksi numero",
|
||||
"authPasswordUpperCharacter": "yksi pieni kirjain",
|
||||
"authPasswordLowerCharacter": "yksi iso kirjain",
|
||||
"authPasswordConfirmAndPassword": "Vahvista salasana ja salasana",
|
||||
"authPasswordMustMatch": "Salasanojen on oltava samat",
|
||||
"authRegisterCreateAccount": "Luo tili aloittaaksesi",
|
||||
"authRegisterCreateSuperAdminAccount": "Luo pääkäyttäjän tili aloittaaksesi",
|
||||
"authRegisterSignUpWithEmail": "Luo pääkäyttäjän tili",
|
||||
"authRegisterBySigningUp": "Luomalla tilin hyväksyt <a1>Käyttöehdot</a1> ja <a2>Tietosuojakäytännön</a2>.",
|
||||
"distributedStatusHeaderText": "Reaaliaikainen kattavuus oikeilla laitteilla",
|
||||
"distributedStatusSubHeaderText": "Miljoonien laitteiden voimin ympäri maailman näet järjestelmän suorituskyvyn maailman alueittain, maittain tai kaupungeittain",
|
||||
"settingsGeneralSettings": "Yleiset asetukset",
|
||||
"settingsDisplayTimezone": "Näytä aikavyöhyke",
|
||||
"settingsDisplayTimezoneDescription": "Valitse sovelluksessa käytettävä aikavyöhyke päivämäärien ja aikojen näyttämiseen.",
|
||||
"settingsAppearance": "Ulkonäkö",
|
||||
"settingsAppearanceDescription": "Vaihda teema vaaleaksi tai tummaksi tai vaihda käyttöliittymän kieli",
|
||||
"settingsThemeMode": "Teematila",
|
||||
"settingsLanguage": "Kieli",
|
||||
"settingsDistributedUptime": "Hajautettu käyttöaika",
|
||||
"settingsDistributedUptimeDescription": "Ota käyttöön tai poista käytöstä hajautettu käyttöaikavalvonta.",
|
||||
"settingsEnabled": "Käytössä",
|
||||
"settingsDisabled": "Poistettu käytöstä",
|
||||
"settingsHistoryAndMonitoring": "Valvonnan historia",
|
||||
"settingsHistoryAndMonitoringDescription": "Määritä, kuinka pitkään haluat säilyttää historiallisia tietoja. Voit myös tyhjentää kaikki olemassa olevat tiedot.",
|
||||
"settingsTTLLabel": "Kuinka monta päivää haluat säilyttää valvontahistorian.",
|
||||
"settingsTTLOptionalLabel": "0 on ääretön",
|
||||
"settingsClearAllStats": "Tyhjennä kaikki tilastot. Tämä on peruuttamaton.",
|
||||
"settingsClearAllStatsButton": "Tyhjennä kaikki tilastot",
|
||||
"settingsClearAllStatsDialogTitle": "Haluatko tyhjentää kaikki tilastot?",
|
||||
"settingsClearAllStatsDialogDescription": "Kun valvontahistoria ja tilastot on poistettu, niitä ei voi palauttaa.",
|
||||
"settingsClearAllStatsDialogConfirm": "",
|
||||
"settingsDemoMonitors": "",
|
||||
"settingsDemoMonitorsDescription": "",
|
||||
"settingsAddDemoMonitors": "",
|
||||
"settingsAddDemoMonitorsButton": "",
|
||||
"settingsRemoveAllMonitors": "",
|
||||
"settingsRemoveAllMonitorsButton": "",
|
||||
"settingsRemoveAllMonitorsDialogTitle": "",
|
||||
"settingsRemoveAllMonitorsDialogConfirm": "",
|
||||
"settingsWallet": "Lompakko",
|
||||
"settingsWalletDescription": "",
|
||||
"settingsAbout": "Tietoja",
|
||||
"settingsDevelopedBy": "Kehittänyt Bluewave Labs.",
|
||||
"settingsSave": "Tallenna",
|
||||
"settingsSuccessSaved": "",
|
||||
"settingsFailedToSave": "",
|
||||
"settingsStatsCleared": "",
|
||||
"settingsFailedToClearStats": "",
|
||||
"settingsDemoMonitorsAdded": "",
|
||||
"settingsFailedToAddDemoMonitors": "",
|
||||
"settingsMonitorsDeleted": "",
|
||||
"settingsFailedToDeleteMonitors": "",
|
||||
"starPromptTitle": "",
|
||||
"starPromptDescription": "",
|
||||
"https": "HTTPS",
|
||||
"http": "HTTP",
|
||||
"monitor": "Seurain",
|
||||
"aboutus": "Tietoja meistä",
|
||||
"now": "Nyt",
|
||||
"delete": "Poista",
|
||||
"configure": "Määritä",
|
||||
"networkError": "Verkkovirhe",
|
||||
"responseTime": "Vasteaika",
|
||||
"ms": "ms",
|
||||
"bar": "Palkki",
|
||||
"area": "Alue",
|
||||
"country": "MAA",
|
||||
"city": "KAUPUNKI",
|
||||
"response": "Vastaus",
|
||||
"checkConnection": "Tarkista yhteytesi",
|
||||
"passwordreset": "Salasanan nollaus",
|
||||
"authRegisterStepOnePersonalDetails": "Syötä henkilökohtaiset tietosi",
|
||||
"authCheckEmailOpenEmailButton": "Avaa sähköpostisovellus",
|
||||
"authNewPasswordConfirmed": "Salasanasi on onnistuneesti nollattu. Klikkaa alta kirjautuaksesi taianomaisesti.",
|
||||
"monitorStatusUp": "Valvontakohde {name} ({url}) on nyt toiminnassa ja vastaa",
|
||||
"monitorStatusDown": "Valvontakohde {name} ({url}) ei ole toiminnassa, eikä vastaa",
|
||||
"webhookSendSuccess": "Webhook-ilmoitus lähetettiin onnistuneesti",
|
||||
"webhookSendError": "Virhe lähetettäessä webhook-ilmoitusta palveluun {platform}",
|
||||
"webhookUnsupportedPlatform": "Ei tuettu palvelu: {platform}",
|
||||
"distributedRightCategoryTitle": "Valvonta",
|
||||
"distributedStatusServerMonitors": "Palvelin valvonta",
|
||||
"distributedStatusServerMonitorsDescription": "Valvo palvelimien tilaa",
|
||||
"distributedUptimeCreateSelectURL": "Tässä voit valita isäntäkohteen URL-osoitteen ja valvontatyypin.",
|
||||
"distributedUptimeCreateChecks": "Suoritettavat tarkistukset",
|
||||
"distributedUptimeCreateChecksDescription": "Voit aina lisätä tai poistaa tarkistuksia sivuston lisäämisen jälkeen.",
|
||||
"distributedUptimeCreateIncidentNotification": "Häiriöilmoitukset",
|
||||
"distributedUptimeCreateIncidentDescription": "Jos ilmenee häiriö, ilmoita käyttäjille.",
|
||||
"distributedUptimeCreateAdvancedSettings": "Lisäasetukset",
|
||||
"distributedUptimeDetailsNoMonitorHistory": "Tälle valvontakohteelle ei ole vielä tarkistushistoriaa.",
|
||||
"distributedUptimeDetailsFooterHeading": "Tehty ❤️:lla UpRockin ja Bluewave Labsin toimesta",
|
||||
"distributedUptimeDetailsFooterBuilt": "",
|
||||
"distributedUptimeDetailsFooterSolana": "Solana",
|
||||
"distributedUptimeDetailsMonitorHeader": "",
|
||||
"distributedUptimeDetailsStatusHeaderUptime": "",
|
||||
"distributedUptimeDetailsStatusHeaderLastUpdate": "Viimeksi päivitetty",
|
||||
"notifications": {
|
||||
"enableNotifications": "",
|
||||
"testNotification": "Testi-ilmoitus",
|
||||
"addOrEditNotifications": "Lisää tai muokkaa ilmoituksia",
|
||||
"slack": {
|
||||
"label": "Slack",
|
||||
"description": "",
|
||||
"webhookLabel": "Webhookin URL",
|
||||
"webhookPlaceholder": "",
|
||||
"webhookRequired": ""
|
||||
},
|
||||
"discord": {
|
||||
"label": "Discord",
|
||||
"description": "",
|
||||
"webhookLabel": "Discord Webhookin URL-osoite",
|
||||
"webhookPlaceholder": "https://discord.com/api/webhooks/...",
|
||||
"webhookRequired": ""
|
||||
},
|
||||
"telegram": {
|
||||
"label": "Telegram",
|
||||
"description": "",
|
||||
"tokenLabel": "",
|
||||
"tokenPlaceholder": "123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11",
|
||||
"chatIdLabel": "",
|
||||
"chatIdPlaceholder": "-1001234567890",
|
||||
"fieldsRequired": ""
|
||||
},
|
||||
"webhook": {
|
||||
"label": "Webhookit",
|
||||
"description": "",
|
||||
"urlLabel": "Webhookin URL",
|
||||
"urlPlaceholder": "https://your-server.com/webhook",
|
||||
"urlRequired": ""
|
||||
},
|
||||
"testNotificationDevelop": "Testi-ilmoitus 2",
|
||||
"integrationButton": "",
|
||||
"testSuccess": "Testi ilmoituksen lähetys onnistui!",
|
||||
"testFailed": "Testi ilmoituksen lähetys epäonnistui",
|
||||
"unsupportedType": "",
|
||||
"networkError": ""
|
||||
},
|
||||
"testLocale": "",
|
||||
"add": "Lisää",
|
||||
"monitors": "Seuraimet",
|
||||
"distributedUptimeStatusCreateStatusPage": "",
|
||||
"distributedUptimeStatusCreateStatusPageAccess": "",
|
||||
"distributedUptimeStatusCreateStatusPageReady": "",
|
||||
"distributedUptimeStatusBasicInfoHeader": "",
|
||||
"distributedUptimeStatusBasicInfoDescription": "",
|
||||
"distributedUptimeStatusLogoHeader": "Logo",
|
||||
"distributedUptimeStatusLogoDescription": "",
|
||||
"distributedUptimeStatusLogoUploadButton": "",
|
||||
"distributedUptimeStatusStandardMonitorsHeader": "",
|
||||
"distributedUptimeStatusStandardMonitorsDescription": "",
|
||||
"distributedUptimeStatusCreateYour": "",
|
||||
"distributedUptimeStatusEditYour": "",
|
||||
"distributedUptimeStatusPublishedLabel": "",
|
||||
"distributedUptimeStatusCompanyNameLabel": "Yrityksen nimi",
|
||||
"distributedUptimeStatusPageAddressLabel": "",
|
||||
"distributedUptimeStatus30Days": "30 päivää",
|
||||
"distributedUptimeStatus60Days": "60 päivää",
|
||||
"distributedUptimeStatus90Days": "90 päivää",
|
||||
"distributedUptimeStatusPageNotSetUp": "",
|
||||
"distributedUptimeStatusContactAdmin": "Ota yhteys järjestelmävalvojaasi",
|
||||
"distributedUptimeStatusPageNotPublic": "",
|
||||
"distributedUptimeStatusPageDeleteDialog": "",
|
||||
"distributedUptimeStatusPageDeleteConfirm": "",
|
||||
"distributedUptimeStatusPageDeleteDescription": "",
|
||||
"distributedUptimeStatusDevices": "",
|
||||
"distributedUptimeStatusUpt": "",
|
||||
"distributedUptimeStatusUptBurned": "",
|
||||
"distributedUptimeStatusUptLogo": "UPT logo",
|
||||
"incidentsTableNoIncidents": "",
|
||||
"incidentsTablePaginationLabel": "",
|
||||
"incidentsTableMonitorName": "",
|
||||
"incidentsTableStatus": "Tila",
|
||||
"incidentsTableDateTime": "Päivämäärä ja aika",
|
||||
"incidentsTableStatusCode": "",
|
||||
"incidentsTableMessage": "Viesti",
|
||||
"incidentsOptionsHeader": "",
|
||||
"incidentsOptionsHeaderFilterBy": "",
|
||||
"incidentsOptionsHeaderFilterAll": "Kaikki",
|
||||
"incidentsOptionsHeaderFilterDown": "Alhaalla",
|
||||
"incidentsOptionsHeaderFilterCannotResolve": "",
|
||||
"incidentsOptionsHeaderShow": "Näytä:",
|
||||
"incidentsOptionsHeaderLastHour": "Viime tunti",
|
||||
"incidentsOptionsHeaderLastDay": "Viime päivä",
|
||||
"incidentsOptionsHeaderLastWeek": "Viime viikko",
|
||||
"incidentsOptionsPlaceholderAllServers": "Kaikki palvelimet",
|
||||
"infrastructureCreateYour": "",
|
||||
"infrastructureCreateGeneralSettingsDescription": "",
|
||||
"infrastructureServerRequirement": "",
|
||||
"infrastructureCustomizeAlerts": "",
|
||||
"infrastructureAlertNotificationDescription": "",
|
||||
"infrastructureCreateMonitor": "",
|
||||
"infrastructureProtocol": "",
|
||||
"infrastructureServerUrlLabel": "Palvelimen URL-osoite",
|
||||
"infrastructureDisplayNameLabel": "",
|
||||
"infrastructureAuthorizationSecretLabel": "",
|
||||
"gb": "",
|
||||
"mb": "",
|
||||
"mem": "",
|
||||
"memoryUsage": "Muistinkäyttö",
|
||||
"cpu": "",
|
||||
"cpuUsage": "",
|
||||
"cpuTemperature": "",
|
||||
"diskUsage": "",
|
||||
"used": "",
|
||||
"total": "",
|
||||
"cores": "",
|
||||
"frequency": "",
|
||||
"status": "Tila",
|
||||
"cpuPhysical": "",
|
||||
"cpuLogical": "",
|
||||
"cpuFrequency": "",
|
||||
"avgCpuTemperature": "",
|
||||
"memory": "Muisti",
|
||||
"disk": "",
|
||||
"uptime": "",
|
||||
"os": "",
|
||||
"host": "",
|
||||
"actions": "",
|
||||
"integrations": "",
|
||||
"integrationsPrism": "",
|
||||
"integrationsSlack": "Slack",
|
||||
"integrationsSlackInfo": "",
|
||||
"integrationsDiscord": "",
|
||||
"integrationsDiscordInfo": "",
|
||||
"integrationsZapier": "Zapier",
|
||||
"integrationsZapierInfo": "",
|
||||
"commonSave": "Tallenna",
|
||||
"createYour": "",
|
||||
"createMonitor": "",
|
||||
"pause": "",
|
||||
"resume": "",
|
||||
"editing": "",
|
||||
"url": "",
|
||||
"access": "",
|
||||
"timezone": "Aikavyöhyke",
|
||||
"features": "",
|
||||
"administrator": "",
|
||||
"loginHere": "",
|
||||
"displayName": "",
|
||||
"urlMonitor": "",
|
||||
"portToMonitor": "",
|
||||
"websiteMonitoring": "",
|
||||
"websiteMonitoringDescription": "",
|
||||
"pingMonitoring": "",
|
||||
"pingMonitoringDescription": "",
|
||||
"dockerContainerMonitoring": "",
|
||||
"dockerContainerMonitoringDescription": "",
|
||||
"portMonitoring": "",
|
||||
"portMonitoringDescription": "",
|
||||
"createMaintenanceWindow": "",
|
||||
"createMaintenance": "",
|
||||
"editMaintenance": "",
|
||||
"maintenanceWindowName": "",
|
||||
"friendlyNameInput": "",
|
||||
"friendlyNamePlaceholder": "",
|
||||
"maintenanceRepeat": "",
|
||||
"maintenance": "",
|
||||
"duration": "",
|
||||
"addMonitors": "",
|
||||
"window": "",
|
||||
"cancel": "Peruuttaa",
|
||||
"message": "Viesti",
|
||||
"low": "",
|
||||
"high": "",
|
||||
"statusCode": "Tilakoodi",
|
||||
"date&Time": "Päivämäärä ja aika",
|
||||
"type": "",
|
||||
"statusPageName": "",
|
||||
"publicURL": "Julkinen URL-osoite",
|
||||
"repeat": "",
|
||||
"edit": "Muokkaa",
|
||||
"createA": "",
|
||||
"remove": "",
|
||||
"maintenanceWindowDescription": "",
|
||||
"startTime": "",
|
||||
"timeZoneInfo": "",
|
||||
"monitorsToApply": "",
|
||||
"nextWindow": "",
|
||||
"notFoundButton": "",
|
||||
"pageSpeedConfigureSettingsDescription": "",
|
||||
"monitorDisplayName": "",
|
||||
"whenNewIncident": "",
|
||||
"notifySMS": "Ilmoita tekstiviestillä (tulossa pian)",
|
||||
"notifyEmails": "",
|
||||
"seperateEmails": "",
|
||||
"checkFrequency": "",
|
||||
"matchMethod": "",
|
||||
"expectedValue": "",
|
||||
"deleteDialogTitle": "",
|
||||
"deleteDialogDescription": "",
|
||||
"pageSpeedMonitor": "",
|
||||
"shown": "",
|
||||
"ago": "sitten",
|
||||
"companyName": "Yrityksen nimi",
|
||||
"pageSpeedDetailsPerformanceReport": "",
|
||||
"pageSpeedDetailsPerformanceReportCalculator": "",
|
||||
"checkingEvery": "",
|
||||
"statusPageCreateSettings": "",
|
||||
"basicInformation": "",
|
||||
"statusPageCreateBasicInfoDescription": "",
|
||||
"statusPageCreateSelectTimeZoneDescription": "",
|
||||
"statusPageCreateAppearanceDescription": "",
|
||||
"statusPageCreateSettingsCheckboxLabel": "",
|
||||
"statusPageCreateBasicInfoStatusPageAddress": "",
|
||||
"statusPageCreateTabsContent": "",
|
||||
"statusPageCreateTabsContentDescription": "",
|
||||
"statusPageCreateTabsContentFeaturesDescription": "",
|
||||
"showCharts": "",
|
||||
"showUptimePercentage": "",
|
||||
"removeLogo": "Poista logo",
|
||||
"statusPageStatus": "",
|
||||
"statusPageStatusContactAdmin": "",
|
||||
"statusPageStatusNotPublic": "",
|
||||
"statusPageStatusNoPage": "",
|
||||
"statusPageStatusServiceStatus": "",
|
||||
"deleteStatusPage": "",
|
||||
"deleteStatusPageConfirm": "",
|
||||
"deleteStatusPageDescription": "",
|
||||
"uptimeCreate": "",
|
||||
"uptimeCreateJsonPath": "",
|
||||
"uptimeCreateJsonPathQuery": "",
|
||||
"maintenanceTableActionMenuDialogTitle": "",
|
||||
"infrastructureEditYour": "Muokkaa omaa",
|
||||
"infrastructureEditMonitor": "",
|
||||
"infrastructureMonitorCreated": "",
|
||||
"infrastructureMonitorUpdated": "",
|
||||
"errorInvalidTypeId": "",
|
||||
"errorInvalidFieldId": "",
|
||||
"inviteNoTokenFound": "",
|
||||
"pageSpeedWarning": "",
|
||||
"pageSpeedLearnMoreLink": "",
|
||||
"pageSpeedAddApiKey": "",
|
||||
"update": "Päivitä",
|
||||
"invalidFileFormat": "",
|
||||
"invalidFileSize": "Tiedoston koko on liian suuri!",
|
||||
"ClickUpload": "",
|
||||
"DragandDrop": "raahaa ja pudota",
|
||||
"MaxSize": "Enimmäiskoko",
|
||||
"SupportedFormats": "Tuetut muodot",
|
||||
"FirstName": "Etunimi",
|
||||
"LastName": "Sukunimi",
|
||||
"EmailDescriptionText": "Tämä on nykyinen sähköpostiosoitteesi — sitä ei voi vaihtaa.",
|
||||
"YourPhoto": "Profiilikuva",
|
||||
"PhotoDescriptionText": "",
|
||||
"save": "Tallenna",
|
||||
"DeleteDescriptionText": "",
|
||||
"DeleteAccountWarning": "",
|
||||
"DeleteWarningTitle": "Haluatko todella poistaa tämän tilin?",
|
||||
"authRegisterFirstName": "Nimi",
|
||||
"authRegisterLastName": "Sukunimi",
|
||||
"authRegisterEmail": "Sähköpostiosoite",
|
||||
"authRegisterEmailRequired": "",
|
||||
"bulkImport": {
|
||||
"title": "",
|
||||
"selectFileTips": "",
|
||||
"selectFileDescription": "",
|
||||
"selectFile": "Valitse tiedosto",
|
||||
"parsingFailed": "",
|
||||
"uploadSuccess": "",
|
||||
"validationFailed": "",
|
||||
"noFileSelected": "Ei valittua tiedostoa",
|
||||
"fallbackPage": ""
|
||||
},
|
||||
"welcomeBack": "Tervetuloa takaisin! Olet kirjautunut sisään.",
|
||||
"authRegisterLoginLink": "Kirjaudu",
|
||||
"validationNameRequired": "Kirjoita nimesi",
|
||||
"validationNameTooLong": "Nimen tulee olla alle 50 merkkiä",
|
||||
"validationNameInvalidCharacters": "Käytäthän vain kirjaimia, välilyöntejä, heittomerkkejä tai yhdysmerkkejä",
|
||||
"settingsSystemReset": "Järjestelmän palautus",
|
||||
"settingsSystemResetDescription": "",
|
||||
"DeleteAccountTitle": "Poista tili",
|
||||
"DeleteAccountButton": "Poista tili",
|
||||
"authRegisterEmailInvalid": "Kirjoita kelvollinen sähköpostiosoite",
|
||||
"publicLink": "Julkinen linkki",
|
||||
"doNotHaveAccount": "Onko sinulla tili?",
|
||||
"registerHere": "Rekisteröidy tästä",
|
||||
"backendUnreachable": "",
|
||||
"backendUnreachableMessage": "",
|
||||
"backendUnreachableError": "",
|
||||
"retryConnection": "",
|
||||
"retryingConnection": "",
|
||||
"backendReconnected": "",
|
||||
"backendStillUnreachable": "",
|
||||
"backendConnectionError": "",
|
||||
"maskedPageSpeedKeyPlaceholder": "*************************************",
|
||||
"pageSpeedApiKeyFieldTitle": "Google PageSpeed API-avain",
|
||||
"pageSpeedApiKeyFieldLabel": "PageSpeed API-avain",
|
||||
"pageSpeedApiKeyFieldDescription": "",
|
||||
"pageSpeedApiKeyFieldResetLabel": "",
|
||||
"reset": "Palauta",
|
||||
"ignoreTLSError": "",
|
||||
"tlsErrorIgnored": "",
|
||||
"ignoreTLSErrorDescription": "",
|
||||
"createNew": "Luo uusi",
|
||||
"greeting": {
|
||||
"prepend": "",
|
||||
"append": "",
|
||||
"overview": ""
|
||||
},
|
||||
"monitorStatus": {
|
||||
"up": "Ylös",
|
||||
"down": "Alas",
|
||||
"paused": "Tauko"
|
||||
},
|
||||
"roles": {
|
||||
"superAdmin": "Pääylläpitäjä",
|
||||
"admin": "Ylläpitäjä",
|
||||
"teamMember": "",
|
||||
"demoUser": "Demokäyttäjä"
|
||||
},
|
||||
"teamPanel": {
|
||||
"teamMembers": "",
|
||||
"filter": {
|
||||
"all": "Kaikki",
|
||||
"member": "Jäsen"
|
||||
},
|
||||
"inviteTeamMember": "",
|
||||
"inviteNewTeamMember": "",
|
||||
"inviteDescription": "",
|
||||
"email": "Sähköposti",
|
||||
"selectRole": "Valitse rooli",
|
||||
"inviteLink": "Kutsulinkki",
|
||||
"cancel": "Peruuttaa",
|
||||
"noMembers": "",
|
||||
"getToken": "Hae tunniste",
|
||||
"emailToken": "Sähköpostitunnus",
|
||||
"table": {
|
||||
"name": "Nimi",
|
||||
"email": "Sähköposti",
|
||||
"role": "Rooli",
|
||||
"created": "Luotu"
|
||||
}
|
||||
},
|
||||
"monitorState": {
|
||||
"paused": "Tauota",
|
||||
"resumed": "Jatka",
|
||||
"active": ""
|
||||
},
|
||||
"menu": {
|
||||
"uptime": "",
|
||||
"pagespeed": "",
|
||||
"infrastructure": "Infrastruktuuri",
|
||||
"distributedUptime": "",
|
||||
"incidents": "",
|
||||
"statusPages": "Tilasivut",
|
||||
"maintenance": "Huolto",
|
||||
"integrations": "",
|
||||
"settings": "Asetukset",
|
||||
"support": "Tuki",
|
||||
"discussions": "Keskustelut",
|
||||
"docs": "Dokumentit",
|
||||
"changelog": "Muutosloki",
|
||||
"profile": "Profiili",
|
||||
"password": "Salasana",
|
||||
"team": "Tiimi",
|
||||
"logOut": "Kirjaudu ulos"
|
||||
},
|
||||
"settingsEmail": "Sähköpostiasetukset",
|
||||
"settingsEmailDescription": "Määritä sähköpostiasetukset",
|
||||
"settingsEmailHost": "",
|
||||
"settingsEmailPort": "Sähköpostin portti - Portti johon yhdistetään",
|
||||
"settingsEmailAddress": "Sähköpostiosoite - Käytetään tunnistautumiseen",
|
||||
"settingsEmailPassword": "Sähköpostin salasana - Salasana tunnistautumiseen",
|
||||
"settingsEmailUser": "",
|
||||
"settingsEmailFieldResetLabel": "Salasana on asetettu. Paina Palauta vaihtaaksesi sen.",
|
||||
"state": "Tila",
|
||||
"statusBreadCrumbsStatusPages": "Tilasivut",
|
||||
"statusBreadCrumbsDetails": "Tiedot",
|
||||
"authForgotPasswordInstructions": "Ei hätää, lähetämme sinulle ohjeet salasanan palauttamiseen.",
|
||||
"settingsThemeModeLight": "Vaalea",
|
||||
"settingsThemeModeDark": "Tumma",
|
||||
"settingsClearAllStatsDialogCancel": "Peruuta",
|
||||
"commonSaving": "Tallennetaan...",
|
||||
"navControls": "Ohjaimet",
|
||||
"incidentsPageTitle": "Häiriöt",
|
||||
"passwordPanel": {
|
||||
"passwordChangedSuccess": "Salasanasi vaihdettiin onnistuneesti.",
|
||||
"passwordInputIncorrect": "",
|
||||
"currentPassword": "Nykyinen salasana",
|
||||
"enterCurrentPassword": "Kirjoita nykyinen salasanasi",
|
||||
"newPassword": "Uusi salasana",
|
||||
"enterNewPassword": "Kirjoita uusi salasana",
|
||||
"confirmNewPassword": "Vahvista uusi salasana",
|
||||
"passwordRequirements": "Uuden salasanan on oltava vähintään 8 merkkiä pitkä ja sen on sisältävä vähintään yksi iso kirjain, yksi pieni kirjain, yksi numero sekä yksi erikoismerkki.",
|
||||
"saving": "Tallennetaan..."
|
||||
},
|
||||
"uptimeCreateSelectURL": "",
|
||||
"settingsEmailConnectionHost": "",
|
||||
"sendTestEmail": "Lähetä testi sähköposti",
|
||||
"emailSent": "Sähköpostin lähetys onnistui",
|
||||
"failedToSendEmail": "Sähköpostin lähetys epäonnistui",
|
||||
"settingsTestEmail": "Lähetä testi sähköposti",
|
||||
"settingsTestEmailSuccess": "Testisähköpostin lähetys onnistui",
|
||||
"settingsTestEmailFailed": "Testisähköpostin lähetys epäonnistui",
|
||||
"settingsTestEmailFailedWithReason": "Testisähköpostin lähetys epäonnistui: {{reason}}",
|
||||
"settingsTestEmailUnknownError": "Tuntematon virhe",
|
||||
"settingsEmailRequiredFields": "",
|
||||
"statusMsg": {
|
||||
"paused": "Valvonta on keskeytetty.",
|
||||
"up": "Sivusi on ylhäällä.",
|
||||
"down": "Sivusi on alhaalla.",
|
||||
"pending": "Odottaa..."
|
||||
},
|
||||
"settingsURLTitle": "",
|
||||
"settingsURLDescription": "",
|
||||
"settingsURLSelectTitle": "",
|
||||
"settingsURLEnabled": "",
|
||||
"settingURLDisabled": ""
|
||||
}
|
||||
@@ -0,0 +1,557 @@
|
||||
{
|
||||
"dontHaveAccount": "Vous n'avez pas de compte",
|
||||
"email": "E-mail",
|
||||
"forgotPassword": "Mot de passe oublié",
|
||||
"password": "mot de passe",
|
||||
"signUp": "S'inscrire",
|
||||
"submit": "Envoyer",
|
||||
"title": "Titre",
|
||||
"continue": "Continuer",
|
||||
"enterEmail": "Entrez votre adresse e-mail",
|
||||
"authLoginTitle": "Se connecter",
|
||||
"authLoginEnterPassword": "Entrez votre mot de passe",
|
||||
"commonPassword": "Mot de passe",
|
||||
"commonBack": "Retour",
|
||||
"authForgotPasswordTitle": "Mot de passe oublié ?",
|
||||
"authForgotPasswordResetPassword": "Réinitialiser le mot de passe",
|
||||
"createPassword": "Créez votre mot de passe",
|
||||
"createAPassword": "Créer un mot de passe",
|
||||
"authRegisterAlreadyHaveAccount": "Vous avez un compte ?",
|
||||
"commonAppName": "Checkmate",
|
||||
"authLoginEnterEmail": "Entrez votre e-mail",
|
||||
"authRegisterTitle": "Créer un compte",
|
||||
"authRegisterStepOneTitle": "Créez votre compte",
|
||||
"authRegisterStepOneDescription": "Entrez vos informations pour commencer",
|
||||
"authRegisterStepTwoTitle": "",
|
||||
"authRegisterStepTwoDescription": "",
|
||||
"authRegisterStepThreeTitle": "Presque fini !",
|
||||
"authRegisterStepThreeDescription": "",
|
||||
"authForgotPasswordDescription": "Pas d'inquiétude, nous allons vous envoyer des instructions de réinitialisation.",
|
||||
"authForgotPasswordSendInstructions": "Envoyer les instructions",
|
||||
"authForgotPasswordBackTo": "Retourner à",
|
||||
"authCheckEmailTitle": "Vérifiez votre e-mail",
|
||||
"authCheckEmailDescription": "Nous avons envoyé un lien de réinitialisation à",
|
||||
"authCheckEmailResendEmail": "Renvoyer le mail",
|
||||
"authCheckEmailBackTo": "Retourner à",
|
||||
"goBackTo": "Retourner à",
|
||||
"authCheckEmailDidntReceiveEmail": "Vous n'avez pas reçu l'e-mail ?",
|
||||
"authCheckEmailClickToResend": "Cliquez pour renvoyer",
|
||||
"authSetNewPasswordTitle": "Définir un nouveau mot de passe",
|
||||
"authSetNewPasswordDescription": "Votre nouveau mot de passe doit être différent des anciens mots de passes utilisés.",
|
||||
"authSetNewPasswordNewPassword": "Nouveau mot de passe",
|
||||
"authSetNewPasswordConfirmPassword": "Confirmer le mot de passe",
|
||||
"confirmPassword": "Confirmez votre mot de passe",
|
||||
"authSetNewPasswordResetPassword": "Réinitialiser le mot de passe",
|
||||
"authSetNewPasswordBackTo": "Retourner à",
|
||||
"authPasswordMustBeAtLeast": "Doit faire au moins",
|
||||
"authPasswordCharactersLong": "8 caractères",
|
||||
"authPasswordMustContainAtLeast": "Doit contenir au moins",
|
||||
"authPasswordSpecialCharacter": "un caractère spécial",
|
||||
"authPasswordOneNumber": "un nombre",
|
||||
"authPasswordUpperCharacter": "une lettre majuscule",
|
||||
"authPasswordLowerCharacter": "une lettre minuscule",
|
||||
"authPasswordConfirmAndPassword": "",
|
||||
"authPasswordMustMatch": "doit correspondre",
|
||||
"authRegisterCreateAccount": "Créez votre compte pour commencer",
|
||||
"authRegisterCreateSuperAdminAccount": "Créez votre compte Super admin pour commencer",
|
||||
"authRegisterSignUpWithEmail": "S'inscrire avec E-mail",
|
||||
"authRegisterBySigningUp": "En vous inscrivant, vous acceptez nos",
|
||||
"distributedStatusHeaderText": "",
|
||||
"distributedStatusSubHeaderText": "",
|
||||
"settingsGeneralSettings": "Paramètres généraux",
|
||||
"settingsDisplayTimezone": "Fuseau horaire d'affichage",
|
||||
"settingsDisplayTimezoneDescription": "Le fuseau horaire du tableau de bord que vous affichez publiquement.",
|
||||
"settingsAppearance": "Apparence",
|
||||
"settingsAppearanceDescription": "",
|
||||
"settingsThemeMode": "",
|
||||
"settingsLanguage": "Langue",
|
||||
"settingsDistributedUptime": "",
|
||||
"settingsDistributedUptimeDescription": "",
|
||||
"settingsEnabled": "Activé",
|
||||
"settingsDisabled": "Désactivé",
|
||||
"settingsHistoryAndMonitoring": "",
|
||||
"settingsHistoryAndMonitoringDescription": "",
|
||||
"settingsTTLLabel": "",
|
||||
"settingsTTLOptionalLabel": "",
|
||||
"settingsClearAllStats": "",
|
||||
"settingsClearAllStatsButton": "",
|
||||
"settingsClearAllStatsDialogTitle": "",
|
||||
"settingsClearAllStatsDialogDescription": "",
|
||||
"settingsClearAllStatsDialogConfirm": "",
|
||||
"settingsDemoMonitors": "",
|
||||
"settingsDemoMonitorsDescription": "",
|
||||
"settingsAddDemoMonitors": "",
|
||||
"settingsAddDemoMonitorsButton": "",
|
||||
"settingsRemoveAllMonitors": "",
|
||||
"settingsRemoveAllMonitorsButton": "",
|
||||
"settingsRemoveAllMonitorsDialogTitle": "",
|
||||
"settingsRemoveAllMonitorsDialogConfirm": "",
|
||||
"settingsWallet": "",
|
||||
"settingsWalletDescription": "",
|
||||
"settingsAbout": "",
|
||||
"settingsDevelopedBy": "",
|
||||
"settingsSave": "",
|
||||
"settingsSuccessSaved": "",
|
||||
"settingsFailedToSave": "",
|
||||
"settingsStatsCleared": "",
|
||||
"settingsFailedToClearStats": "",
|
||||
"settingsDemoMonitorsAdded": "",
|
||||
"settingsFailedToAddDemoMonitors": "",
|
||||
"settingsMonitorsDeleted": "",
|
||||
"settingsFailedToDeleteMonitors": "",
|
||||
"starPromptTitle": "",
|
||||
"starPromptDescription": "",
|
||||
"https": "",
|
||||
"http": "",
|
||||
"monitor": "",
|
||||
"aboutus": "",
|
||||
"now": "",
|
||||
"delete": "",
|
||||
"configure": "",
|
||||
"networkError": "",
|
||||
"responseTime": "",
|
||||
"ms": "",
|
||||
"bar": "",
|
||||
"area": "",
|
||||
"country": "",
|
||||
"city": "",
|
||||
"response": "",
|
||||
"checkConnection": "",
|
||||
"passwordreset": "",
|
||||
"authRegisterStepOnePersonalDetails": "",
|
||||
"authCheckEmailOpenEmailButton": "",
|
||||
"authNewPasswordConfirmed": "",
|
||||
"monitorStatusUp": "",
|
||||
"monitorStatusDown": "",
|
||||
"webhookSendSuccess": "",
|
||||
"webhookSendError": "",
|
||||
"webhookUnsupportedPlatform": "",
|
||||
"distributedRightCategoryTitle": "",
|
||||
"distributedStatusServerMonitors": "",
|
||||
"distributedStatusServerMonitorsDescription": "",
|
||||
"distributedUptimeCreateSelectURL": "",
|
||||
"distributedUptimeCreateChecks": "",
|
||||
"distributedUptimeCreateChecksDescription": "",
|
||||
"distributedUptimeCreateIncidentNotification": "",
|
||||
"distributedUptimeCreateIncidentDescription": "",
|
||||
"distributedUptimeCreateAdvancedSettings": "",
|
||||
"distributedUptimeDetailsNoMonitorHistory": "",
|
||||
"distributedUptimeDetailsFooterHeading": "",
|
||||
"distributedUptimeDetailsFooterBuilt": "",
|
||||
"distributedUptimeDetailsFooterSolana": "",
|
||||
"distributedUptimeDetailsMonitorHeader": "",
|
||||
"distributedUptimeDetailsStatusHeaderUptime": "",
|
||||
"distributedUptimeDetailsStatusHeaderLastUpdate": "",
|
||||
"notifications": {
|
||||
"enableNotifications": "",
|
||||
"testNotification": "",
|
||||
"addOrEditNotifications": "",
|
||||
"slack": {
|
||||
"label": "",
|
||||
"description": "",
|
||||
"webhookLabel": "",
|
||||
"webhookPlaceholder": "",
|
||||
"webhookRequired": ""
|
||||
},
|
||||
"discord": {
|
||||
"label": "",
|
||||
"description": "",
|
||||
"webhookLabel": "",
|
||||
"webhookPlaceholder": "",
|
||||
"webhookRequired": ""
|
||||
},
|
||||
"telegram": {
|
||||
"label": "",
|
||||
"description": "",
|
||||
"tokenLabel": "",
|
||||
"tokenPlaceholder": "",
|
||||
"chatIdLabel": "",
|
||||
"chatIdPlaceholder": "",
|
||||
"fieldsRequired": ""
|
||||
},
|
||||
"webhook": {
|
||||
"label": "",
|
||||
"description": "",
|
||||
"urlLabel": "",
|
||||
"urlPlaceholder": "",
|
||||
"urlRequired": ""
|
||||
},
|
||||
"testNotificationDevelop": "",
|
||||
"integrationButton": "",
|
||||
"testSuccess": "",
|
||||
"testFailed": "",
|
||||
"unsupportedType": "",
|
||||
"networkError": ""
|
||||
},
|
||||
"testLocale": "",
|
||||
"add": "",
|
||||
"monitors": "",
|
||||
"distributedUptimeStatusCreateStatusPage": "",
|
||||
"distributedUptimeStatusCreateStatusPageAccess": "",
|
||||
"distributedUptimeStatusCreateStatusPageReady": "",
|
||||
"distributedUptimeStatusBasicInfoHeader": "",
|
||||
"distributedUptimeStatusBasicInfoDescription": "",
|
||||
"distributedUptimeStatusLogoHeader": "",
|
||||
"distributedUptimeStatusLogoDescription": "",
|
||||
"distributedUptimeStatusLogoUploadButton": "",
|
||||
"distributedUptimeStatusStandardMonitorsHeader": "",
|
||||
"distributedUptimeStatusStandardMonitorsDescription": "",
|
||||
"distributedUptimeStatusCreateYour": "",
|
||||
"distributedUptimeStatusEditYour": "",
|
||||
"distributedUptimeStatusPublishedLabel": "",
|
||||
"distributedUptimeStatusCompanyNameLabel": "",
|
||||
"distributedUptimeStatusPageAddressLabel": "",
|
||||
"distributedUptimeStatus30Days": "",
|
||||
"distributedUptimeStatus60Days": "",
|
||||
"distributedUptimeStatus90Days": "",
|
||||
"distributedUptimeStatusPageNotSetUp": "",
|
||||
"distributedUptimeStatusContactAdmin": "",
|
||||
"distributedUptimeStatusPageNotPublic": "",
|
||||
"distributedUptimeStatusPageDeleteDialog": "",
|
||||
"distributedUptimeStatusPageDeleteConfirm": "",
|
||||
"distributedUptimeStatusPageDeleteDescription": "",
|
||||
"distributedUptimeStatusDevices": "",
|
||||
"distributedUptimeStatusUpt": "",
|
||||
"distributedUptimeStatusUptBurned": "",
|
||||
"distributedUptimeStatusUptLogo": "",
|
||||
"incidentsTableNoIncidents": "",
|
||||
"incidentsTablePaginationLabel": "",
|
||||
"incidentsTableMonitorName": "",
|
||||
"incidentsTableStatus": "",
|
||||
"incidentsTableDateTime": "",
|
||||
"incidentsTableStatusCode": "",
|
||||
"incidentsTableMessage": "",
|
||||
"incidentsOptionsHeader": "",
|
||||
"incidentsOptionsHeaderFilterBy": "",
|
||||
"incidentsOptionsHeaderFilterAll": "",
|
||||
"incidentsOptionsHeaderFilterDown": "",
|
||||
"incidentsOptionsHeaderFilterCannotResolve": "",
|
||||
"incidentsOptionsHeaderShow": "",
|
||||
"incidentsOptionsHeaderLastHour": "",
|
||||
"incidentsOptionsHeaderLastDay": "",
|
||||
"incidentsOptionsHeaderLastWeek": "",
|
||||
"incidentsOptionsPlaceholderAllServers": "",
|
||||
"infrastructureCreateYour": "",
|
||||
"infrastructureCreateGeneralSettingsDescription": "",
|
||||
"infrastructureServerRequirement": "",
|
||||
"infrastructureCustomizeAlerts": "",
|
||||
"infrastructureAlertNotificationDescription": "",
|
||||
"infrastructureCreateMonitor": "",
|
||||
"infrastructureProtocol": "",
|
||||
"infrastructureServerUrlLabel": "",
|
||||
"infrastructureDisplayNameLabel": "",
|
||||
"infrastructureAuthorizationSecretLabel": "",
|
||||
"gb": "",
|
||||
"mb": "",
|
||||
"mem": "",
|
||||
"memoryUsage": "",
|
||||
"cpu": "",
|
||||
"cpuUsage": "",
|
||||
"cpuTemperature": "",
|
||||
"diskUsage": "",
|
||||
"used": "",
|
||||
"total": "",
|
||||
"cores": "",
|
||||
"frequency": "",
|
||||
"status": "",
|
||||
"cpuPhysical": "",
|
||||
"cpuLogical": "",
|
||||
"cpuFrequency": "",
|
||||
"avgCpuTemperature": "",
|
||||
"memory": "",
|
||||
"disk": "",
|
||||
"uptime": "",
|
||||
"os": "",
|
||||
"host": "",
|
||||
"actions": "",
|
||||
"integrations": "",
|
||||
"integrationsPrism": "",
|
||||
"integrationsSlack": "",
|
||||
"integrationsSlackInfo": "",
|
||||
"integrationsDiscord": "",
|
||||
"integrationsDiscordInfo": "",
|
||||
"integrationsZapier": "",
|
||||
"integrationsZapierInfo": "",
|
||||
"commonSave": "",
|
||||
"createYour": "",
|
||||
"createMonitor": "",
|
||||
"pause": "",
|
||||
"resume": "",
|
||||
"editing": "",
|
||||
"url": "",
|
||||
"access": "",
|
||||
"timezone": "",
|
||||
"features": "",
|
||||
"administrator": "",
|
||||
"loginHere": "",
|
||||
"displayName": "",
|
||||
"urlMonitor": "",
|
||||
"portToMonitor": "",
|
||||
"websiteMonitoring": "",
|
||||
"websiteMonitoringDescription": "",
|
||||
"pingMonitoring": "",
|
||||
"pingMonitoringDescription": "",
|
||||
"dockerContainerMonitoring": "",
|
||||
"dockerContainerMonitoringDescription": "",
|
||||
"portMonitoring": "",
|
||||
"portMonitoringDescription": "",
|
||||
"createMaintenanceWindow": "",
|
||||
"createMaintenance": "",
|
||||
"editMaintenance": "",
|
||||
"maintenanceWindowName": "",
|
||||
"friendlyNameInput": "",
|
||||
"friendlyNamePlaceholder": "",
|
||||
"maintenanceRepeat": "",
|
||||
"maintenance": "",
|
||||
"duration": "",
|
||||
"addMonitors": "",
|
||||
"window": "",
|
||||
"cancel": "",
|
||||
"message": "",
|
||||
"low": "",
|
||||
"high": "",
|
||||
"statusCode": "",
|
||||
"date&Time": "",
|
||||
"type": "",
|
||||
"statusPageName": "",
|
||||
"publicURL": "",
|
||||
"repeat": "",
|
||||
"edit": "",
|
||||
"createA": "",
|
||||
"remove": "",
|
||||
"maintenanceWindowDescription": "",
|
||||
"startTime": "",
|
||||
"timeZoneInfo": "",
|
||||
"monitorsToApply": "",
|
||||
"nextWindow": "",
|
||||
"notFoundButton": "",
|
||||
"pageSpeedConfigureSettingsDescription": "",
|
||||
"monitorDisplayName": "",
|
||||
"whenNewIncident": "",
|
||||
"notifySMS": "",
|
||||
"notifyEmails": "",
|
||||
"seperateEmails": "",
|
||||
"checkFrequency": "",
|
||||
"matchMethod": "",
|
||||
"expectedValue": "",
|
||||
"deleteDialogTitle": "",
|
||||
"deleteDialogDescription": "",
|
||||
"pageSpeedMonitor": "",
|
||||
"shown": "",
|
||||
"ago": "",
|
||||
"companyName": "",
|
||||
"pageSpeedDetailsPerformanceReport": "",
|
||||
"pageSpeedDetailsPerformanceReportCalculator": "",
|
||||
"checkingEvery": "",
|
||||
"statusPageCreateSettings": "",
|
||||
"basicInformation": "",
|
||||
"statusPageCreateBasicInfoDescription": "",
|
||||
"statusPageCreateSelectTimeZoneDescription": "",
|
||||
"statusPageCreateAppearanceDescription": "",
|
||||
"statusPageCreateSettingsCheckboxLabel": "",
|
||||
"statusPageCreateBasicInfoStatusPageAddress": "",
|
||||
"statusPageCreateTabsContent": "",
|
||||
"statusPageCreateTabsContentDescription": "",
|
||||
"statusPageCreateTabsContentFeaturesDescription": "",
|
||||
"showCharts": "",
|
||||
"showUptimePercentage": "",
|
||||
"removeLogo": "",
|
||||
"statusPageStatus": "",
|
||||
"statusPageStatusContactAdmin": "",
|
||||
"statusPageStatusNotPublic": "",
|
||||
"statusPageStatusNoPage": "",
|
||||
"statusPageStatusServiceStatus": "",
|
||||
"deleteStatusPage": "",
|
||||
"deleteStatusPageConfirm": "",
|
||||
"deleteStatusPageDescription": "",
|
||||
"uptimeCreate": "",
|
||||
"uptimeCreateJsonPath": "",
|
||||
"uptimeCreateJsonPathQuery": "",
|
||||
"maintenanceTableActionMenuDialogTitle": "",
|
||||
"infrastructureEditYour": "",
|
||||
"infrastructureEditMonitor": "",
|
||||
"infrastructureMonitorCreated": "",
|
||||
"infrastructureMonitorUpdated": "",
|
||||
"errorInvalidTypeId": "",
|
||||
"errorInvalidFieldId": "",
|
||||
"inviteNoTokenFound": "",
|
||||
"pageSpeedWarning": "",
|
||||
"pageSpeedLearnMoreLink": "",
|
||||
"pageSpeedAddApiKey": "",
|
||||
"update": "",
|
||||
"invalidFileFormat": "",
|
||||
"invalidFileSize": "",
|
||||
"ClickUpload": "",
|
||||
"DragandDrop": "",
|
||||
"MaxSize": "",
|
||||
"SupportedFormats": "",
|
||||
"FirstName": "",
|
||||
"LastName": "",
|
||||
"EmailDescriptionText": "",
|
||||
"YourPhoto": "",
|
||||
"PhotoDescriptionText": "",
|
||||
"save": "",
|
||||
"DeleteDescriptionText": "",
|
||||
"DeleteAccountWarning": "",
|
||||
"DeleteWarningTitle": "",
|
||||
"authRegisterFirstName": "",
|
||||
"authRegisterLastName": "",
|
||||
"authRegisterEmail": "",
|
||||
"authRegisterEmailRequired": "",
|
||||
"bulkImport": {
|
||||
"title": "",
|
||||
"selectFileTips": "",
|
||||
"selectFileDescription": "",
|
||||
"selectFile": "",
|
||||
"parsingFailed": "",
|
||||
"uploadSuccess": "",
|
||||
"validationFailed": "",
|
||||
"noFileSelected": "",
|
||||
"fallbackPage": ""
|
||||
},
|
||||
"welcomeBack": "",
|
||||
"authRegisterLoginLink": "",
|
||||
"validationNameRequired": "",
|
||||
"validationNameTooLong": "",
|
||||
"validationNameInvalidCharacters": "",
|
||||
"settingsSystemReset": "",
|
||||
"settingsSystemResetDescription": "",
|
||||
"DeleteAccountTitle": "",
|
||||
"DeleteAccountButton": "",
|
||||
"authRegisterEmailInvalid": "",
|
||||
"publicLink": "",
|
||||
"doNotHaveAccount": "",
|
||||
"registerHere": "",
|
||||
"backendUnreachable": "",
|
||||
"backendUnreachableMessage": "",
|
||||
"backendUnreachableError": "",
|
||||
"retryConnection": "",
|
||||
"retryingConnection": "",
|
||||
"backendReconnected": "",
|
||||
"backendStillUnreachable": "",
|
||||
"backendConnectionError": "",
|
||||
"maskedPageSpeedKeyPlaceholder": "",
|
||||
"pageSpeedApiKeyFieldTitle": "",
|
||||
"pageSpeedApiKeyFieldLabel": "",
|
||||
"pageSpeedApiKeyFieldDescription": "",
|
||||
"pageSpeedApiKeyFieldResetLabel": "",
|
||||
"reset": "",
|
||||
"ignoreTLSError": "",
|
||||
"tlsErrorIgnored": "",
|
||||
"ignoreTLSErrorDescription": "",
|
||||
"createNew": "",
|
||||
"greeting": {
|
||||
"prepend": "",
|
||||
"append": "",
|
||||
"overview": ""
|
||||
},
|
||||
"monitorStatus": {
|
||||
"up": "",
|
||||
"down": "",
|
||||
"paused": ""
|
||||
},
|
||||
"roles": {
|
||||
"superAdmin": "",
|
||||
"admin": "",
|
||||
"teamMember": "",
|
||||
"demoUser": ""
|
||||
},
|
||||
"teamPanel": {
|
||||
"teamMembers": "",
|
||||
"filter": {
|
||||
"all": "",
|
||||
"member": ""
|
||||
},
|
||||
"inviteTeamMember": "",
|
||||
"inviteNewTeamMember": "",
|
||||
"inviteDescription": "",
|
||||
"email": "",
|
||||
"selectRole": "",
|
||||
"inviteLink": "",
|
||||
"cancel": "",
|
||||
"noMembers": "",
|
||||
"getToken": "",
|
||||
"emailToken": "",
|
||||
"table": {
|
||||
"name": "",
|
||||
"email": "",
|
||||
"role": "",
|
||||
"created": ""
|
||||
}
|
||||
},
|
||||
"monitorState": {
|
||||
"paused": "",
|
||||
"resumed": "",
|
||||
"active": ""
|
||||
},
|
||||
"menu": {
|
||||
"uptime": "",
|
||||
"pagespeed": "",
|
||||
"infrastructure": "",
|
||||
"distributedUptime": "",
|
||||
"incidents": "",
|
||||
"statusPages": "",
|
||||
"maintenance": "",
|
||||
"integrations": "",
|
||||
"settings": "",
|
||||
"support": "",
|
||||
"discussions": "",
|
||||
"docs": "",
|
||||
"changelog": "",
|
||||
"profile": "",
|
||||
"password": "",
|
||||
"team": "",
|
||||
"logOut": ""
|
||||
},
|
||||
"settingsEmail": "",
|
||||
"settingsEmailDescription": "",
|
||||
"settingsEmailHost": "",
|
||||
"settingsEmailPort": "",
|
||||
"settingsEmailAddress": "",
|
||||
"settingsEmailPassword": "",
|
||||
"settingsEmailUser": "",
|
||||
"settingsEmailFieldResetLabel": "",
|
||||
"state": "",
|
||||
"statusBreadCrumbsStatusPages": "",
|
||||
"statusBreadCrumbsDetails": "",
|
||||
"authForgotPasswordInstructions": "",
|
||||
"settingsThemeModeLight": "",
|
||||
"settingsThemeModeDark": "",
|
||||
"settingsClearAllStatsDialogCancel": "",
|
||||
"commonSaving": "",
|
||||
"navControls": "",
|
||||
"incidentsPageTitle": "",
|
||||
"passwordPanel": {
|
||||
"passwordChangedSuccess": "",
|
||||
"passwordInputIncorrect": "",
|
||||
"currentPassword": "",
|
||||
"enterCurrentPassword": "",
|
||||
"newPassword": "",
|
||||
"enterNewPassword": "",
|
||||
"confirmNewPassword": "",
|
||||
"passwordRequirements": "",
|
||||
"saving": ""
|
||||
},
|
||||
"uptimeCreateSelectURL": "",
|
||||
"settingsEmailConnectionHost": "",
|
||||
"sendTestEmail": "",
|
||||
"emailSent": "",
|
||||
"failedToSendEmail": "",
|
||||
"settingsTestEmail": "",
|
||||
"settingsTestEmailSuccess": "",
|
||||
"settingsTestEmailFailed": "",
|
||||
"settingsTestEmailFailedWithReason": "",
|
||||
"settingsTestEmailUnknownError": "",
|
||||
"settingsEmailRequiredFields": "",
|
||||
"statusMsg": {
|
||||
"paused": "",
|
||||
"up": "",
|
||||
"down": "",
|
||||
"pending": ""
|
||||
},
|
||||
"settingsURLTitle": "",
|
||||
"settingsURLDescription": "",
|
||||
"settingsURLSelectTitle": "",
|
||||
"settingsURLEnabled": "",
|
||||
"settingURLDisabled": ""
|
||||
}
|
||||
@@ -0,0 +1,557 @@
|
||||
{
|
||||
"dontHaveAccount": "Não tenho conta",
|
||||
"email": "E-mail",
|
||||
"forgotPassword": "Esqueci a senha",
|
||||
"password": "Senha",
|
||||
"signUp": "Inscreva-se",
|
||||
"submit": "Enviar",
|
||||
"title": "Título",
|
||||
"continue": "Continuar",
|
||||
"enterEmail": "Insira seu e-mail",
|
||||
"authLoginTitle": "Login",
|
||||
"authLoginEnterPassword": "Digite sua senha",
|
||||
"commonPassword": "Senha",
|
||||
"commonBack": "Voltar",
|
||||
"authForgotPasswordTitle": "Esqueceu a senha?",
|
||||
"authForgotPasswordResetPassword": "Redefinir a senha",
|
||||
"createPassword": "Criar sua senha",
|
||||
"createAPassword": "Senha",
|
||||
"authRegisterAlreadyHaveAccount": "Já possui uma conta?",
|
||||
"commonAppName": "Checkmate",
|
||||
"authLoginEnterEmail": "Insira seu e-mail",
|
||||
"authRegisterTitle": "Criar uma conta",
|
||||
"authRegisterStepOneTitle": "Crie sua conta",
|
||||
"authRegisterStepOneDescription": "Insira seus dados para começar",
|
||||
"authRegisterStepTwoTitle": "Configure seu perfil",
|
||||
"authRegisterStepTwoDescription": "Conte-nos mais sobre você",
|
||||
"authRegisterStepThreeTitle": "Quase pronto!",
|
||||
"authRegisterStepThreeDescription": "Revise suas informações",
|
||||
"authForgotPasswordDescription": "Não se preocupe, enviaremos instruções de redefinição.",
|
||||
"authForgotPasswordSendInstructions": "Enviar instruções",
|
||||
"authForgotPasswordBackTo": "Voltar para",
|
||||
"authCheckEmailTitle": "Verifique seu e-mail",
|
||||
"authCheckEmailDescription": "Enviamos um link para redefinir a senha para",
|
||||
"authCheckEmailResendEmail": "Reenviar e-mail",
|
||||
"authCheckEmailBackTo": "Voltar para",
|
||||
"goBackTo": "Volte para",
|
||||
"authCheckEmailDidntReceiveEmail": "Não recebeu o e-mail?",
|
||||
"authCheckEmailClickToResend": "Clique para reenviar",
|
||||
"authSetNewPasswordTitle": "Definir nova senha",
|
||||
"authSetNewPasswordDescription": "Sua nova senha deve ser diferente das senhas usadas anteriormente.",
|
||||
"authSetNewPasswordNewPassword": "Nova senha",
|
||||
"authSetNewPasswordConfirmPassword": "Confirme sua senha",
|
||||
"confirmPassword": "Digite a senha novamente para confirmar",
|
||||
"authSetNewPasswordResetPassword": "Redefinir senha",
|
||||
"authSetNewPasswordBackTo": "Voltar para",
|
||||
"authPasswordMustBeAtLeast": "Deve ser pelo menos",
|
||||
"authPasswordCharactersLong": "8 caracteres de comprimento",
|
||||
"authPasswordMustContainAtLeast": "Deve conter pelo menos",
|
||||
"authPasswordSpecialCharacter": "um caractere especial",
|
||||
"authPasswordOneNumber": "um número",
|
||||
"authPasswordUpperCharacter": "um caractere maiúsculo",
|
||||
"authPasswordLowerCharacter": "um caractere minúsculo",
|
||||
"authPasswordConfirmAndPassword": "Confirme a senha",
|
||||
"authPasswordMustMatch": "As senhas devem corresponder",
|
||||
"authRegisterCreateAccount": "Crie sua conta para começar",
|
||||
"authRegisterCreateSuperAdminAccount": "Crie sua conta de super admin para começar",
|
||||
"authRegisterSignUpWithEmail": "Criar conta de super admin",
|
||||
"authRegisterBySigningUp": "Ao criar uma conta, você concorda com nossos <a1>Termos de Serviço</a1> e <a2>Política de Privacidade</a2>.",
|
||||
"distributedStatusHeaderText": "Cobertura em tempo real e em dispositivos reais",
|
||||
"distributedStatusSubHeaderText": "Impulsionado por milhões de dispositivos em todo o mundo, visualize o desempenho do sistema por região global, país ou cidade",
|
||||
"settingsGeneralSettings": "Configurações gerais",
|
||||
"settingsDisplayTimezone": "Fuso horário",
|
||||
"settingsDisplayTimezoneDescription": "Selecione o fuso horário usado para exibir datas e horas em todo o aplicativo.",
|
||||
"settingsAppearance": "Aparência",
|
||||
"settingsAppearanceDescription": "Alterne entre o modo claro e escuro ou altere o idioma da interface do usuário",
|
||||
"settingsThemeMode": "Tema",
|
||||
"settingsLanguage": "Linguagem",
|
||||
"settingsDistributedUptime": "Disponibilidade distribuída",
|
||||
"settingsDistributedUptimeDescription": "Habilitar/desabilitar o monitoramento de tempo de disponibilidade distribuído.",
|
||||
"settingsEnabled": "Habilitado",
|
||||
"settingsDisabled": "Desabilitado",
|
||||
"settingsHistoryAndMonitoring": "Histórico de monitoramento",
|
||||
"settingsHistoryAndMonitoringDescription": "Defina por quanto tempo você deseja manter os dados de histórico. Você também pode limpar todos os dados existentes.",
|
||||
"settingsTTLLabel": "Os dias em que você deseja manter os dados de histórico.",
|
||||
"settingsTTLOptionalLabel": "0 para infinito",
|
||||
"settingsClearAllStats": "Limpe todas as estatísticas. Isso é irreversível.",
|
||||
"settingsClearAllStatsButton": "Limpar todas as estatísticas",
|
||||
"settingsClearAllStatsDialogTitle": "Você quer limpar todas as estatísticas?",
|
||||
"settingsClearAllStatsDialogDescription": "Uma vez limpo, o histórico de monitoramento e as estatísticas não podem ser recuperados.",
|
||||
"settingsClearAllStatsDialogConfirm": "Sim, limpar todas as estatísticas",
|
||||
"settingsDemoMonitors": "Monitores de demonstração",
|
||||
"settingsDemoMonitorsDescription": "Adicione monitores de genéricos para fins de demonstração.",
|
||||
"settingsAddDemoMonitors": "Adicionando monitores de demonstração",
|
||||
"settingsAddDemoMonitorsButton": "Adicionar monitores de demonstração",
|
||||
"settingsRemoveAllMonitors": "Removendo todos os monitores",
|
||||
"settingsRemoveAllMonitorsButton": "Remover todos os monitores",
|
||||
"settingsRemoveAllMonitorsDialogTitle": "Você deseja remover todos os monitores?",
|
||||
"settingsRemoveAllMonitorsDialogConfirm": "Sim, remova todos os monitores",
|
||||
"settingsWallet": "Carteira",
|
||||
"settingsWalletDescription": "Conecte sua carteira aqui. Isso é necessário para que o Distributed Uptime Monitor se conecte a vários nós globalmente.",
|
||||
"settingsAbout": "Sobre",
|
||||
"settingsDevelopedBy": "Desenvolvido pela Bluewave Labs.",
|
||||
"settingsSave": "Salvar",
|
||||
"settingsSuccessSaved": "Configurações salvas com sucesso",
|
||||
"settingsFailedToSave": "Falha ao salvar as configurações",
|
||||
"settingsStatsCleared": "Estatísticas limpas com sucesso",
|
||||
"settingsFailedToClearStats": "Falha ao limpar estatísticas",
|
||||
"settingsDemoMonitorsAdded": "Monitores de demonstração adicionados com sucesso",
|
||||
"settingsFailedToAddDemoMonitors": "Falha ao adicionar monitores de demonstração",
|
||||
"settingsMonitorsDeleted": "Todos os monitores foram excluídos com sucesso",
|
||||
"settingsFailedToDeleteMonitors": "Falha ao excluir todos os monitores",
|
||||
"starPromptTitle": "Star Checkmate",
|
||||
"starPromptDescription": "Veja os últimos lançamentos e ajude a expandir a comunidade no GitHub",
|
||||
"https": "HTTPS",
|
||||
"http": "HTTP",
|
||||
"monitor": "monitor",
|
||||
"aboutus": "Sobre nós",
|
||||
"now": "Agora",
|
||||
"delete": "Deletar",
|
||||
"configure": "Configurar",
|
||||
"networkError": "Erro de rede",
|
||||
"responseTime": "Tempo de resposta",
|
||||
"ms": "ms",
|
||||
"bar": "Bar",
|
||||
"area": "Área",
|
||||
"country": "PAÍS",
|
||||
"city": "CIDADE",
|
||||
"response": "RESPOSTA",
|
||||
"checkConnection": "Verifique sua conexão",
|
||||
"passwordreset": "Redefinição de senha",
|
||||
"authRegisterStepOnePersonalDetails": "Insira seus dados pessoais",
|
||||
"authCheckEmailOpenEmailButton": "Abra o aplicativo de e-mail",
|
||||
"authNewPasswordConfirmed": "Sua senha foi redefinida com sucesso. Clique abaixo para fazer login magicamente.",
|
||||
"monitorStatusUp": "O monitor {name} ({url}) agora está ATIVO e respondendo",
|
||||
"monitorStatusDown": "O monitor {name} ({url}) está INATIVO e não está respondendo",
|
||||
"webhookSendSuccess": "Notificação de webhook enviada com sucesso",
|
||||
"webhookSendError": "Erro ao enviar notificação de webhook para {platform}",
|
||||
"webhookUnsupportedPlatform": "Plataforma não suportada: {platform}",
|
||||
"distributedRightCategoryTitle": "Monitor",
|
||||
"distributedStatusServerMonitors": "Monitores de servidor",
|
||||
"distributedStatusServerMonitorsDescription": "Monitorar o status dos servidores relacionados",
|
||||
"distributedUptimeCreateSelectURL": "Aqui você pode selecionar a URL do host, juntamente com o tipo de monitor.",
|
||||
"distributedUptimeCreateChecks": "Verificações para realizar",
|
||||
"distributedUptimeCreateChecksDescription": "Você sempre pode adicionar ou remover verificações depois de adicionar seu site.",
|
||||
"distributedUptimeCreateIncidentNotification": "Notificações de incidentes",
|
||||
"distributedUptimeCreateIncidentDescription": "Quando ocorrer um incidente, notifique os usuários.",
|
||||
"distributedUptimeCreateAdvancedSettings": "Configurações avançadas",
|
||||
"distributedUptimeDetailsNoMonitorHistory": "Ainda não há histórico de verificações para este monitor.",
|
||||
"distributedUptimeDetailsFooterHeading": "Feito com ❤️ por UpRock e Bluewave Labs",
|
||||
"distributedUptimeDetailsFooterBuilt": "Construído com",
|
||||
"distributedUptimeDetailsFooterSolana": "Solana",
|
||||
"distributedUptimeDetailsMonitorHeader": "Monitoramento de Uptime distribuído com tecnologia DePIN",
|
||||
"distributedUptimeDetailsStatusHeaderUptime": "Uptime:",
|
||||
"distributedUptimeDetailsStatusHeaderLastUpdate": "Última atualização",
|
||||
"notifications": {
|
||||
"enableNotifications": "Habilitar notificações da {{platform}}",
|
||||
"testNotification": "Notificação de teste",
|
||||
"addOrEditNotifications": "Adicionar ou editar notificações",
|
||||
"slack": {
|
||||
"label": "Slack",
|
||||
"description": "Para habilitar as notificações do Slack, crie um aplicativo Slack e habilite os webhooks de entrada. Depois disso, basta fornecer a URL do webhook aqui.",
|
||||
"webhookLabel": "Webhook URL",
|
||||
"webhookPlaceholder": "https://hooks.slack.com/services/...",
|
||||
"webhookRequired": "A URL do webhook do Slack é necessária"
|
||||
},
|
||||
"discord": {
|
||||
"label": "Discord",
|
||||
"description": "Para enviar dados para um canal do Discord a partir do Checkmate por meio de notificações do Discord usando webhooks, você pode usar o recurso de Webhooks de entrada do Discord.",
|
||||
"webhookLabel": "Discord Webhook URL",
|
||||
"webhookPlaceholder": "https://discord.com/api/webhooks/...",
|
||||
"webhookRequired": "A URL do webhook do Discord é necessária"
|
||||
},
|
||||
"telegram": {
|
||||
"label": "Telegram",
|
||||
"description": "Para habilitar as notificações do Telegram, crie um bot do Telegram usando o BotFather, um bot oficial para criar e gerenciar bots do Telegram. Em seguida, obtenha o token da API e o ID do chat e os coloque aqui.",
|
||||
"tokenLabel": "Seu token de bot",
|
||||
"tokenPlaceholder": "123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11",
|
||||
"chatIdLabel": "Seu ID de bate-papo",
|
||||
"chatIdPlaceholder": "-1001234567890",
|
||||
"fieldsRequired": "O token do Telegram e o ID do chat são necessários"
|
||||
},
|
||||
"webhook": {
|
||||
"label": "Webhooks",
|
||||
"description": "Você pode configurar um webhook personalizado para receber notificações quando ocorrerem incidentes.",
|
||||
"urlLabel": "Webhook URL",
|
||||
"urlPlaceholder": "https://seu-servidor.com/webhook",
|
||||
"urlRequired": "URL do webhook é necessária"
|
||||
},
|
||||
"testNotificationDevelop": "Notificação de teste 2",
|
||||
"integrationButton": "Integração de notificação",
|
||||
"testSuccess": "Notificação de teste enviada com sucesso!",
|
||||
"testFailed": "Falha ao enviar notificação de teste",
|
||||
"unsupportedType": "Tipo de notificação não suportado",
|
||||
"networkError": "Ocorreu um erro de rede"
|
||||
},
|
||||
"testLocale": "testLocale",
|
||||
"add": "Adicionar",
|
||||
"monitors": "monitores",
|
||||
"distributedUptimeStatusCreateStatusPage": "Pagina de status",
|
||||
"distributedUptimeStatusCreateStatusPageAccess": "Acesso",
|
||||
"distributedUptimeStatusCreateStatusPageReady": "Se sua página de status estiver pronta, você pode marcá-la como publicada.",
|
||||
"distributedUptimeStatusBasicInfoHeader": "Informação básica",
|
||||
"distributedUptimeStatusBasicInfoDescription": "Defina o nome da empresa e o subdomínio para o qual sua página de status aponta.",
|
||||
"distributedUptimeStatusLogoHeader": "Logo",
|
||||
"distributedUptimeStatusLogoDescription": "Carregue um logo para sua página de status",
|
||||
"distributedUptimeStatusLogoUploadButton": "Upload logo",
|
||||
"distributedUptimeStatusStandardMonitorsHeader": "Monitores padrão",
|
||||
"distributedUptimeStatusStandardMonitorsDescription": "Anexe monitores padrão à sua página de status.",
|
||||
"distributedUptimeStatusCreateYour": "Crie o seu",
|
||||
"distributedUptimeStatusEditYour": "Edite seu",
|
||||
"distributedUptimeStatusPublishedLabel": "Publicado e visível ao público",
|
||||
"distributedUptimeStatusCompanyNameLabel": "Nome da empresa",
|
||||
"distributedUptimeStatusPageAddressLabel": "Endereço da sua página de status",
|
||||
"distributedUptimeStatus30Days": "30 dias",
|
||||
"distributedUptimeStatus60Days": "60 dias",
|
||||
"distributedUptimeStatus90Days": "90 dias",
|
||||
"distributedUptimeStatusPageNotSetUp": "Uma página de status não está configurada.",
|
||||
"distributedUptimeStatusContactAdmin": "Entre em contato com seu administrador",
|
||||
"distributedUptimeStatusPageNotPublic": "Esta página de status não é pública.",
|
||||
"distributedUptimeStatusPageDeleteDialog": "Você quer excluir esta página de status?",
|
||||
"distributedUptimeStatusPageDeleteConfirm": "Sim, excluir página de status",
|
||||
"distributedUptimeStatusPageDeleteDescription": "Uma vez excluída, sua página de status não poderá ser recuperada.",
|
||||
"distributedUptimeStatusDevices": "Dispositivos",
|
||||
"distributedUptimeStatusUpt": "UPT",
|
||||
"distributedUptimeStatusUptBurned": "UPT queimado",
|
||||
"distributedUptimeStatusUptLogo": "Logo UPT",
|
||||
"incidentsTableNoIncidents": "Nenhum incidente registrado",
|
||||
"incidentsTablePaginationLabel": "incidentes",
|
||||
"incidentsTableMonitorName": "Nome do monitor",
|
||||
"incidentsTableStatus": "Status",
|
||||
"incidentsTableDateTime": "Data & Hora",
|
||||
"incidentsTableStatusCode": "Código de status",
|
||||
"incidentsTableMessage": "Mensagem",
|
||||
"incidentsOptionsHeader": "Incidentes para:",
|
||||
"incidentsOptionsHeaderFilterBy": "Filtrar por:",
|
||||
"incidentsOptionsHeaderFilterAll": "Todos",
|
||||
"incidentsOptionsHeaderFilterDown": "Inativos",
|
||||
"incidentsOptionsHeaderFilterCannotResolve": "Não é possível resolver",
|
||||
"incidentsOptionsHeaderShow": "Mostrar:",
|
||||
"incidentsOptionsHeaderLastHour": "Última hora",
|
||||
"incidentsOptionsHeaderLastDay": "Último dia",
|
||||
"incidentsOptionsHeaderLastWeek": "Ultima semana",
|
||||
"incidentsOptionsPlaceholderAllServers": "Todos os servidores",
|
||||
"infrastructureCreateYour": "Crie o seu",
|
||||
"infrastructureCreateGeneralSettingsDescription": "Aqui você pode inserir a URL do host, juntamente com o nome de exibição e o API secret de autorização para se conectar ao agente do servidor.",
|
||||
"infrastructureServerRequirement": "O servidor que você quer monitorar deve estar executando o",
|
||||
"infrastructureCustomizeAlerts": "Personalize alertas",
|
||||
"infrastructureAlertNotificationDescription": "Envie uma notificação ao(s) usuário(s) quando os limites excederem uma porcentagem especificada.",
|
||||
"infrastructureCreateMonitor": "Criar monitor de infraestrutura",
|
||||
"infrastructureProtocol": "Protocolo",
|
||||
"infrastructureServerUrlLabel": "URL do servidor",
|
||||
"infrastructureDisplayNameLabel": "Nome de exibição",
|
||||
"infrastructureAuthorizationSecretLabel": "API Secret",
|
||||
"gb": "GB",
|
||||
"mb": "MB",
|
||||
"mem": "Mem",
|
||||
"memoryUsage": "Uso de memória",
|
||||
"cpu": "CPU",
|
||||
"cpuUsage": "Uso da CPU",
|
||||
"cpuTemperature": "Temperatura da CPU",
|
||||
"diskUsage": "Uso de disco",
|
||||
"used": "Usado",
|
||||
"total": "Total",
|
||||
"cores": "Núcleos",
|
||||
"frequency": "Frequência",
|
||||
"status": "Status",
|
||||
"cpuPhysical": "CPU (Física)",
|
||||
"cpuLogical": "CPU (Lógica)",
|
||||
"cpuFrequency": "Frequência da CPU",
|
||||
"avgCpuTemperature": "Temperatura média da CPU",
|
||||
"memory": "Memória",
|
||||
"disk": "Disco",
|
||||
"uptime": "Uptime",
|
||||
"os": "OS",
|
||||
"host": "Host",
|
||||
"actions": "Ações",
|
||||
"integrations": "Integrações",
|
||||
"integrationsPrism": "Conecte o Prism ao seu serviço favorito.",
|
||||
"integrationsSlack": "Slack",
|
||||
"integrationsSlackInfo": "Conecte-se com o Slack e veja incidentes em um canal",
|
||||
"integrationsDiscord": "Discord",
|
||||
"integrationsDiscordInfo": "Conecte-se com o Discord e visualize incidentes diretamente em um canal",
|
||||
"integrationsZapier": "Zapier",
|
||||
"integrationsZapierInfo": "Envie todos os incidentes para o Zapier e veja-os em todos os lugares",
|
||||
"commonSave": "Salvar",
|
||||
"createYour": "Crie o seu",
|
||||
"createMonitor": "Criar monitor",
|
||||
"pause": "Pausar",
|
||||
"resume": "Resumir",
|
||||
"editing": "Editando...",
|
||||
"url": "URL",
|
||||
"access": "Acesso",
|
||||
"timezone": "Fuso horário",
|
||||
"features": "Recursos",
|
||||
"administrator": "Administrador?",
|
||||
"loginHere": "Login aqui",
|
||||
"displayName": "Nome de exibição",
|
||||
"urlMonitor": "URL do monitor",
|
||||
"portToMonitor": "Porta do monitor",
|
||||
"websiteMonitoring": "Monitoramento de sites",
|
||||
"websiteMonitoringDescription": "Use HTTP(s) para monitorar seu site ou API endpoint.",
|
||||
"pingMonitoring": "Monitoramento de ping",
|
||||
"pingMonitoringDescription": "Verifique se o seu servidor está disponível ou não.",
|
||||
"dockerContainerMonitoring": "Monitoramento de contêiner Docker",
|
||||
"dockerContainerMonitoringDescription": "Verifique se o seu contêiner Docker está em execução ou não.",
|
||||
"portMonitoring": "Monitoramento de porta",
|
||||
"portMonitoringDescription": "Verifique se sua porta está aberta ou não.",
|
||||
"createMaintenanceWindow": "Criar janela de manutenção",
|
||||
"createMaintenance": "Criar manutenção",
|
||||
"editMaintenance": "Editar manutenção",
|
||||
"maintenanceWindowName": "Nome da janela de manutenção",
|
||||
"friendlyNameInput": "Nome amigável",
|
||||
"friendlyNamePlaceholder": "Manutenção em __ : __ por ___ minutos",
|
||||
"maintenanceRepeat": "Repetição de manutenção",
|
||||
"maintenance": "manutenção",
|
||||
"duration": "Duração",
|
||||
"addMonitors": "Adicionar monitores",
|
||||
"window": "janela",
|
||||
"cancel": "Cancelar",
|
||||
"message": "Mensagem",
|
||||
"low": "baixo",
|
||||
"high": "alto",
|
||||
"statusCode": "Código de status",
|
||||
"date&Time": "Data & Hora",
|
||||
"type": "Tipo",
|
||||
"statusPageName": "Nome da página de status",
|
||||
"publicURL": "URL publica",
|
||||
"repeat": "Repetir",
|
||||
"edit": "Editar",
|
||||
"createA": "Crie um",
|
||||
"remove": "Remover",
|
||||
"maintenanceWindowDescription": "Seus pings não serão enviados durante esse período",
|
||||
"startTime": "Hora de início",
|
||||
"timeZoneInfo": "Todas as datas e horários estão no fuso horário GMT+0.",
|
||||
"monitorsToApply": "Monitores para aplicar a janela de manutenção",
|
||||
"nextWindow": "Próxima janela",
|
||||
"notFoundButton": "Vá para o painel principal",
|
||||
"pageSpeedConfigureSettingsDescription": "Aqui você pode selecionar a URL do host, juntamente com o tipo de monitor.",
|
||||
"monitorDisplayName": "Nome de exibição do monitor",
|
||||
"whenNewIncident": "Quando há um novo incidente,",
|
||||
"notifySMS": "Notificar via SMS (em breve)",
|
||||
"notifyEmails": "Também notificar por e-mail para vários endereços (em breve)",
|
||||
"seperateEmails": "Você pode separar vários e-mails com uma vírgula",
|
||||
"checkFrequency": "Verifique a frequência",
|
||||
"matchMethod": "Método de correspondência",
|
||||
"expectedValue": "Valor esperado",
|
||||
"deleteDialogTitle": "Você realmente deseja excluir este monitor?",
|
||||
"deleteDialogDescription": "Uma vez excluído, este monitor não poderá ser recuperado.",
|
||||
"pageSpeedMonitor": "Monitor PageSpeed",
|
||||
"shown": "Mostrado",
|
||||
"ago": "atrás",
|
||||
"companyName": "Nome da empresa",
|
||||
"pageSpeedDetailsPerformanceReport": "Os valores são estimados e podem variar.",
|
||||
"pageSpeedDetailsPerformanceReportCalculator": "Veja calculadora",
|
||||
"checkingEvery": "Verificando a cada",
|
||||
"statusPageCreateSettings": "Se sua página de status estiver pronta, você pode marcá-la como publicada.",
|
||||
"basicInformation": "Informações Básicas",
|
||||
"statusPageCreateBasicInfoDescription": "Defina o nome da empresa e o subdomínio para o qual sua página de status aponta.",
|
||||
"statusPageCreateSelectTimeZoneDescription": "Selecione o fuso horário em que será exibido na sua página de status.",
|
||||
"statusPageCreateAppearanceDescription": "Defina a aparência padrão da sua página de status pública.",
|
||||
"statusPageCreateSettingsCheckboxLabel": "Publicado e visível ao público",
|
||||
"statusPageCreateBasicInfoStatusPageAddress": "Endereço da sua página de status",
|
||||
"statusPageCreateTabsContent": "Servidores de páginas de status",
|
||||
"statusPageCreateTabsContentDescription": "Você pode adicionar quantos monitores quiser à sua página de status. Você também pode reordená-los para uma melhor experiência de visualização.",
|
||||
"statusPageCreateTabsContentFeaturesDescription": "Mostrar mais detalhes na página de status",
|
||||
"showCharts": "Mostrar gráficos",
|
||||
"showUptimePercentage": "Mostrar porcentagem de Uptime",
|
||||
"removeLogo": "Remover logo",
|
||||
"statusPageStatus": "Uma página de status pública não está configurada.",
|
||||
"statusPageStatusContactAdmin": "Entre em contato com seu administrador",
|
||||
"statusPageStatusNotPublic": "Esta página de status não é pública.",
|
||||
"statusPageStatusNoPage": "Não há página de status aqui.",
|
||||
"statusPageStatusServiceStatus": "Status do serviço",
|
||||
"deleteStatusPage": "Você quer excluir esta página de status?",
|
||||
"deleteStatusPageConfirm": "Sim, excluir página de status",
|
||||
"deleteStatusPageDescription": "Uma vez excluída, sua página de status não poderá ser recuperada.",
|
||||
"uptimeCreate": "O valor esperado é usado para corresponder ao resultado da resposta, e a correspondência determina o status.",
|
||||
"uptimeCreateJsonPath": "Esta expressão será avaliada em relação aos dados JSON de resposta e o resultado será usado para corresponder ao valor esperado. Veja",
|
||||
"uptimeCreateJsonPathQuery": "para documentação de linguagem de consulta.",
|
||||
"maintenanceTableActionMenuDialogTitle": "Você realmente deseja remover esta janela de manutenção?",
|
||||
"infrastructureEditYour": "Edite seu",
|
||||
"infrastructureEditMonitor": "Salvar Monitor de Infraestrutura",
|
||||
"infrastructureMonitorCreated": "Monitor de infraestrutura criado com sucesso!",
|
||||
"infrastructureMonitorUpdated": "Monitor de infraestrutura atualizado com sucesso!",
|
||||
"errorInvalidTypeId": "Tipo de notificação fornecido inválido",
|
||||
"errorInvalidFieldId": "ID do campo fornecido inválido",
|
||||
"inviteNoTokenFound": "Nenhum token de convite encontrado",
|
||||
"pageSpeedWarning": "Aviso: você ainda não adicionou uma chave de API do Google PageSpeed. Sem ela, o monitor PageSpeed não funcionará.",
|
||||
"pageSpeedLearnMoreLink": "Clique aqui",
|
||||
"pageSpeedAddApiKey": "para adicionar sua chave de API.",
|
||||
"update": "Atualizar",
|
||||
"invalidFileFormat": "Formato de arquivo não suportado!",
|
||||
"invalidFileSize": "O tamanho do arquivo é muito grande!",
|
||||
"ClickUpload": "Clique para enviar",
|
||||
"DragandDrop": "arraste e solte",
|
||||
"MaxSize": "Tamanho Máximo",
|
||||
"SupportedFormats": "Formatos suportados",
|
||||
"FirstName": "Nome",
|
||||
"LastName": "Sobrenome",
|
||||
"EmailDescriptionText": "Este é seu endereço de e-mail atual — ele não pode ser alterado.",
|
||||
"YourPhoto": "Foto de perfil",
|
||||
"PhotoDescriptionText": "Esta foto será exibida na sua página de perfil.",
|
||||
"save": "Salvar",
|
||||
"DeleteDescriptionText": "Isso removerá a conta e todos os dados associados do servidor. Essa ação não é reversível.",
|
||||
"DeleteAccountWarning": "Remover sua conta significa que você não poderá fazer login novamente e todos os seus dados serão removidos. Isso não é reversível.",
|
||||
"DeleteWarningTitle": "Deseja realmente remover esta conta?",
|
||||
"authRegisterFirstName": "Nome",
|
||||
"authRegisterLastName": "Sobrenome",
|
||||
"authRegisterEmail": "E-mail",
|
||||
"authRegisterEmailRequired": "Para continuar, insira seu endereço de e-mail",
|
||||
"bulkImport": {
|
||||
"title": "Bulk Import",
|
||||
"selectFileTips": "Selecione o arquivo CSV para enviar",
|
||||
"selectFileDescription": "Você pode baixar nosso <template>modelo</template> ou <sample>amostra</sample>",
|
||||
"selectFile": "Selecione o arquivo",
|
||||
"parsingFailed": "Falha na análise",
|
||||
"uploadSuccess": "Monitores criados com sucesso!",
|
||||
"validationFailed": "Falha na validação",
|
||||
"noFileSelected": "Nenhum arquivo selecionado",
|
||||
"fallbackPage": "Importe um arquivo para enviar uma lista de servidores em massa"
|
||||
},
|
||||
"welcomeBack": "Bem-vindo de volta! Você fez login com sucesso.",
|
||||
"authRegisterLoginLink": "Login",
|
||||
"validationNameRequired": "Por favor digite seu nome",
|
||||
"validationNameTooLong": "O nome deve ter menos de 50 caracteres",
|
||||
"validationNameInvalidCharacters": "Por favor, use apenas letras, espaços, apóstrofos ou hifens",
|
||||
"settingsSystemReset": "Resetar sistema",
|
||||
"settingsSystemResetDescription": "Remova todos os monitores do seu sistema.",
|
||||
"DeleteAccountTitle": "Remover conta",
|
||||
"DeleteAccountButton": "Remover conta",
|
||||
"authRegisterEmailInvalid": "Por favor, insira um endereço de e-mail válido",
|
||||
"publicLink": "Link publico",
|
||||
"doNotHaveAccount": "Ainda não tem uma conta?",
|
||||
"registerHere": "Registre-se aqui",
|
||||
"backendUnreachable": "Erro de conexão com o servidor",
|
||||
"backendUnreachableMessage": "Não conseguimos conectar ao servidor. Verifique sua conexão com a internet ou sua configuração de implantação se o problema persistir.",
|
||||
"backendUnreachableError": "Não foi possível conectar ao servidor. Tente novamente mais tarde.",
|
||||
"retryConnection": "Reconectar",
|
||||
"retryingConnection": "Conectando...",
|
||||
"backendReconnected": "Reconectado ao servidor com sucesso.",
|
||||
"backendStillUnreachable": "O servidor ainda está inacessível. Tente novamente mais tarde.",
|
||||
"backendConnectionError": "Erro ao conectar ao servidor. Verifique sua conexão de internet.",
|
||||
"maskedPageSpeedKeyPlaceholder": "*************************************",
|
||||
"pageSpeedApiKeyFieldTitle": "Google PageSpeed API key",
|
||||
"pageSpeedApiKeyFieldLabel": "PageSpeed API key",
|
||||
"pageSpeedApiKeyFieldDescription": "Insira sua chave da API do Google PageSpeed para ativar o monitoramento de velocidade de página. Clique em Resetar para atualizar a chave.",
|
||||
"pageSpeedApiKeyFieldResetLabel": "A chave de API está definida. Clique em Resetar para alterá-la.",
|
||||
"reset": "Resetar",
|
||||
"ignoreTLSError": "Ignorar erro TLS/SSL",
|
||||
"tlsErrorIgnored": "Erros TLS/SSL ignorados",
|
||||
"ignoreTLSErrorDescription": "Ignore os erros de TLS/SSL e continue verificando a disponibilidade do site",
|
||||
"createNew": "Criar novo",
|
||||
"greeting": {
|
||||
"prepend": "Ei",
|
||||
"append": "A tarde é seu playground — vamos torná-la épica!",
|
||||
"overview": "Aqui está uma visão geral dos seus monitores {{type}}."
|
||||
},
|
||||
"monitorStatus": {
|
||||
"up": "Online",
|
||||
"down": "Offline",
|
||||
"paused": "pausado"
|
||||
},
|
||||
"roles": {
|
||||
"superAdmin": "Super Admin",
|
||||
"admin": "Admin",
|
||||
"teamMember": "Membro da equipe",
|
||||
"demoUser": "Usuário demo"
|
||||
},
|
||||
"teamPanel": {
|
||||
"teamMembers": "Membros da equipe",
|
||||
"filter": {
|
||||
"all": "Todos",
|
||||
"member": "Membro"
|
||||
},
|
||||
"inviteTeamMember": "Convidar um membro da equipe",
|
||||
"inviteNewTeamMember": "Convidar novo membro da equipe",
|
||||
"inviteDescription": "Ao adicionar um novo membro da equipe, ele terá acesso a todos os monitores.",
|
||||
"email": "E-mail",
|
||||
"selectRole": "Selecione a cargo",
|
||||
"inviteLink": "Link de convite",
|
||||
"cancel": "Cancelar",
|
||||
"noMembers": "Não há membros da equipe com este cargo",
|
||||
"getToken": "Obter token",
|
||||
"emailToken": "Token de e-mail",
|
||||
"table": {
|
||||
"name": "Nome",
|
||||
"email": "E-mail",
|
||||
"role": "Cargo",
|
||||
"created": "Criado"
|
||||
}
|
||||
},
|
||||
"monitorState": {
|
||||
"paused": "Pausado",
|
||||
"resumed": "Retomado",
|
||||
"active": "Ativo"
|
||||
},
|
||||
"menu": {
|
||||
"uptime": "Uptime",
|
||||
"pagespeed": "Pagespeed",
|
||||
"infrastructure": "Infraestrutura",
|
||||
"distributedUptime": "Uptime distribuído",
|
||||
"incidents": "Incidentes",
|
||||
"statusPages": "Pagina de status",
|
||||
"maintenance": "Manutenção",
|
||||
"integrations": "Integrações",
|
||||
"settings": "Configurações",
|
||||
"support": "Suporte",
|
||||
"discussions": "Discussões",
|
||||
"docs": "Docs",
|
||||
"changelog": "Changelog",
|
||||
"profile": "Perfil",
|
||||
"password": "Senha",
|
||||
"team": "Equipe",
|
||||
"logOut": "Sair"
|
||||
},
|
||||
"settingsEmail": "E-mail",
|
||||
"settingsEmailDescription": "Configurações de e-mail do seu sistema. Elas são usadas para enviar notificações e alertas.",
|
||||
"settingsEmailHost": "Host de e-mail - Nome do host ou endereço IP do servidor SMTP",
|
||||
"settingsEmailPort": "Porta de e-mail - Porta para conectar",
|
||||
"settingsEmailAddress": "Endereço de e-mail - Usado para autenticação",
|
||||
"settingsEmailPassword": "Senha de e-mail - Senha para autenticação",
|
||||
"settingsEmailUser": "Usuário de e-mail - Nome de usuário para autenticação, substitui o endereço de e-mail, se especificado",
|
||||
"settingsEmailFieldResetLabel": "A senha foi definida. Clique em Redefinir para alterá-la.",
|
||||
"state": "Estado",
|
||||
"statusBreadCrumbsStatusPages": "Pagina de status",
|
||||
"statusBreadCrumbsDetails": "Detalhes",
|
||||
"authForgotPasswordInstructions": "Não se preocupe, enviaremos instruções de redefinição.",
|
||||
"settingsThemeModeLight": "Claro",
|
||||
"settingsThemeModeDark": "Escuro",
|
||||
"settingsClearAllStatsDialogCancel": "Cancelar",
|
||||
"commonSaving": "Salvando...",
|
||||
"navControls": "Controles",
|
||||
"incidentsPageTitle": "Incidentes",
|
||||
"passwordPanel": {
|
||||
"passwordChangedSuccess": "Sua senha foi alterada com sucesso.",
|
||||
"passwordInputIncorrect": "Sua senha digitada está incorreta.",
|
||||
"currentPassword": "Senha atual",
|
||||
"enterCurrentPassword": "Digite sua senha atual",
|
||||
"newPassword": "Nova Senha",
|
||||
"enterNewPassword": "Digite sua nova senha",
|
||||
"confirmNewPassword": "Confirme a nova senha",
|
||||
"passwordRequirements": "A nova senha deve conter pelo menos 8 caracteres e deve ter pelo menos uma letra maiúscula, uma letra minúscula, um número e um caractere especial.",
|
||||
"saving": "Salvando..."
|
||||
},
|
||||
"uptimeCreateSelectURL": "Insira a URL ou IP a ser monitorado (por exemplo, https://example.com/ ou 192.168.1.100) e adicione um nome de exibição que irá aparecer no painel.",
|
||||
"settingsEmailConnectionHost": "Host de conexão de e-mail - Nome do host a ser usado na saudação HELO/EHLO",
|
||||
"sendTestEmail": "Enviar e-mail de teste",
|
||||
"emailSent": "E-mail enviado com sucesso",
|
||||
"failedToSendEmail": "Falha ao enviar e-mail",
|
||||
"settingsTestEmail": "Enviar e-mail de teste",
|
||||
"settingsTestEmailSuccess": "E-mail de teste enviado com sucesso",
|
||||
"settingsTestEmailFailed": "Falha ao enviar e-mail de teste",
|
||||
"settingsTestEmailFailedWithReason": "Falha ao enviar e-mail de teste: {{reason}}",
|
||||
"settingsTestEmailUnknownError": "Erro desconhecido",
|
||||
"settingsEmailRequiredFields": "O host e a porta do e-mail são obrigatórios",
|
||||
"statusMsg": {
|
||||
"paused": "O monitoramento está pausado.",
|
||||
"up": "Seu site está no ar.",
|
||||
"down": "Seu site está fora do ar.",
|
||||
"pending": "Pendente..."
|
||||
},
|
||||
"settingsURLTitle": "",
|
||||
"settingsURLDescription": "",
|
||||
"settingsURLSelectTitle": "",
|
||||
"settingsURLEnabled": "",
|
||||
"settingURLDisabled": ""
|
||||
}
|
||||
+556
-502
File diff suppressed because it is too large.
Load diff
+556
-535
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,557 @@
|
||||
{
|
||||
"dontHaveAccount": "沒有帳號",
|
||||
"email": "E-mail",
|
||||
"forgotPassword": "忘記密碼",
|
||||
"password": "密碼",
|
||||
"signUp": "註冊",
|
||||
"submit": "",
|
||||
"title": "",
|
||||
"continue": "繼續",
|
||||
"enterEmail": "輸入您的 E-mail",
|
||||
"authLoginTitle": "登入",
|
||||
"authLoginEnterPassword": "輸入您的密碼",
|
||||
"commonPassword": "密碼",
|
||||
"commonBack": "回去",
|
||||
"authForgotPasswordTitle": "忘記密碼?",
|
||||
"authForgotPasswordResetPassword": "",
|
||||
"createPassword": "",
|
||||
"createAPassword": "",
|
||||
"authRegisterAlreadyHaveAccount": "已經有帳號嗎?",
|
||||
"commonAppName": "Checkmate",
|
||||
"authLoginEnterEmail": "輸入您的 E-mail",
|
||||
"authRegisterTitle": "建立帳號",
|
||||
"authRegisterStepOneTitle": "建立您的帳號",
|
||||
"authRegisterStepOneDescription": "清輸入您的個人檔案",
|
||||
"authRegisterStepTwoTitle": "設定您的個人檔案",
|
||||
"authRegisterStepTwoDescription": "請分享更多關於您的資訊",
|
||||
"authRegisterStepThreeTitle": "快完成了!",
|
||||
"authRegisterStepThreeDescription": "請確認您的資訊",
|
||||
"authForgotPasswordDescription": "別擔心,我們會發送重設說明給您。",
|
||||
"authForgotPasswordSendInstructions": "將說明發送至",
|
||||
"authForgotPasswordBackTo": "回去",
|
||||
"authCheckEmailTitle": "請查看您的電子郵件",
|
||||
"authCheckEmailDescription": "我們已將密碼重設連結發送至",
|
||||
"authCheckEmailResendEmail": "重新發送 E-mail",
|
||||
"authCheckEmailBackTo": "回去",
|
||||
"goBackTo": "回去",
|
||||
"authCheckEmailDidntReceiveEmail": "沒有受到 E-mail?",
|
||||
"authCheckEmailClickToResend": "點擊",
|
||||
"authSetNewPasswordTitle": "設定新密碼",
|
||||
"authSetNewPasswordDescription": "您的新密碼必須與之前使用過的密碼不同。",
|
||||
"authSetNewPasswordNewPassword": "新密碼",
|
||||
"authSetNewPasswordConfirmPassword": "確認密碼",
|
||||
"confirmPassword": "確認您的密碼",
|
||||
"authSetNewPasswordResetPassword": "重設密碼",
|
||||
"authSetNewPasswordBackTo": "回去",
|
||||
"authPasswordMustBeAtLeast": "必須至少",
|
||||
"authPasswordCharactersLong": "8 個字符長",
|
||||
"authPasswordMustContainAtLeast": "必須至少包含",
|
||||
"authPasswordSpecialCharacter": "一個特殊字符",
|
||||
"authPasswordOneNumber": "一個數字",
|
||||
"authPasswordUpperCharacter": "一個大寫字母",
|
||||
"authPasswordLowerCharacter": "一個小寫字母",
|
||||
"authPasswordConfirmAndPassword": "確認密碼",
|
||||
"authPasswordMustMatch": "必須相符",
|
||||
"authRegisterCreateAccount": "建立您的帳號開始使用",
|
||||
"authRegisterCreateSuperAdminAccount": "建立您的超級管理員帳號開始使用",
|
||||
"authRegisterSignUpWithEmail": "用 E-mail 註冊",
|
||||
"authRegisterBySigningUp": "註冊即表示您同意我們的",
|
||||
"distributedStatusHeaderText": "實時、真實設備覆蓋",
|
||||
"distributedStatusSubHeaderText": "由全球數百萬個設備提供支持,您可以按全球區域、國家或城市查看系統效能",
|
||||
"settingsGeneralSettings": "一般設定",
|
||||
"settingsDisplayTimezone": "顯示時區",
|
||||
"settingsDisplayTimezoneDescription": "您公開顯示的儀表板的時區。",
|
||||
"settingsAppearance": "外觀",
|
||||
"settingsAppearanceDescription": "",
|
||||
"settingsThemeMode": "",
|
||||
"settingsLanguage": "",
|
||||
"settingsDistributedUptime": "",
|
||||
"settingsDistributedUptimeDescription": "",
|
||||
"settingsEnabled": "",
|
||||
"settingsDisabled": "",
|
||||
"settingsHistoryAndMonitoring": "",
|
||||
"settingsHistoryAndMonitoringDescription": "",
|
||||
"settingsTTLLabel": "",
|
||||
"settingsTTLOptionalLabel": "",
|
||||
"settingsClearAllStats": "",
|
||||
"settingsClearAllStatsButton": "",
|
||||
"settingsClearAllStatsDialogTitle": "",
|
||||
"settingsClearAllStatsDialogDescription": "",
|
||||
"settingsClearAllStatsDialogConfirm": "",
|
||||
"settingsDemoMonitors": "",
|
||||
"settingsDemoMonitorsDescription": "",
|
||||
"settingsAddDemoMonitors": "",
|
||||
"settingsAddDemoMonitorsButton": "",
|
||||
"settingsRemoveAllMonitors": "",
|
||||
"settingsRemoveAllMonitorsButton": "",
|
||||
"settingsRemoveAllMonitorsDialogTitle": "",
|
||||
"settingsRemoveAllMonitorsDialogConfirm": "",
|
||||
"settingsWallet": "",
|
||||
"settingsWalletDescription": "",
|
||||
"settingsAbout": "",
|
||||
"settingsDevelopedBy": "",
|
||||
"settingsSave": "",
|
||||
"settingsSuccessSaved": "",
|
||||
"settingsFailedToSave": "",
|
||||
"settingsStatsCleared": "",
|
||||
"settingsFailedToClearStats": "",
|
||||
"settingsDemoMonitorsAdded": "",
|
||||
"settingsFailedToAddDemoMonitors": "",
|
||||
"settingsMonitorsDeleted": "",
|
||||
"settingsFailedToDeleteMonitors": "",
|
||||
"starPromptTitle": "",
|
||||
"starPromptDescription": "",
|
||||
"https": "",
|
||||
"http": "",
|
||||
"monitor": "",
|
||||
"aboutus": "",
|
||||
"now": "",
|
||||
"delete": "",
|
||||
"configure": "",
|
||||
"networkError": "",
|
||||
"responseTime": "",
|
||||
"ms": "",
|
||||
"bar": "",
|
||||
"area": "",
|
||||
"country": "",
|
||||
"city": "",
|
||||
"response": "",
|
||||
"checkConnection": "",
|
||||
"passwordreset": "",
|
||||
"authRegisterStepOnePersonalDetails": "",
|
||||
"authCheckEmailOpenEmailButton": "",
|
||||
"authNewPasswordConfirmed": "",
|
||||
"monitorStatusUp": "",
|
||||
"monitorStatusDown": "",
|
||||
"webhookSendSuccess": "",
|
||||
"webhookSendError": "",
|
||||
"webhookUnsupportedPlatform": "",
|
||||
"distributedRightCategoryTitle": "",
|
||||
"distributedStatusServerMonitors": "",
|
||||
"distributedStatusServerMonitorsDescription": "",
|
||||
"distributedUptimeCreateSelectURL": "",
|
||||
"distributedUptimeCreateChecks": "",
|
||||
"distributedUptimeCreateChecksDescription": "",
|
||||
"distributedUptimeCreateIncidentNotification": "",
|
||||
"distributedUptimeCreateIncidentDescription": "",
|
||||
"distributedUptimeCreateAdvancedSettings": "",
|
||||
"distributedUptimeDetailsNoMonitorHistory": "",
|
||||
"distributedUptimeDetailsFooterHeading": "",
|
||||
"distributedUptimeDetailsFooterBuilt": "",
|
||||
"distributedUptimeDetailsFooterSolana": "",
|
||||
"distributedUptimeDetailsMonitorHeader": "",
|
||||
"distributedUptimeDetailsStatusHeaderUptime": "",
|
||||
"distributedUptimeDetailsStatusHeaderLastUpdate": "",
|
||||
"notifications": {
|
||||
"enableNotifications": "",
|
||||
"testNotification": "",
|
||||
"addOrEditNotifications": "",
|
||||
"slack": {
|
||||
"label": "",
|
||||
"description": "",
|
||||
"webhookLabel": "",
|
||||
"webhookPlaceholder": "",
|
||||
"webhookRequired": ""
|
||||
},
|
||||
"discord": {
|
||||
"label": "",
|
||||
"description": "",
|
||||
"webhookLabel": "",
|
||||
"webhookPlaceholder": "",
|
||||
"webhookRequired": ""
|
||||
},
|
||||
"telegram": {
|
||||
"label": "",
|
||||
"description": "",
|
||||
"tokenLabel": "",
|
||||
"tokenPlaceholder": "",
|
||||
"chatIdLabel": "",
|
||||
"chatIdPlaceholder": "",
|
||||
"fieldsRequired": ""
|
||||
},
|
||||
"webhook": {
|
||||
"label": "",
|
||||
"description": "",
|
||||
"urlLabel": "",
|
||||
"urlPlaceholder": "",
|
||||
"urlRequired": ""
|
||||
},
|
||||
"testNotificationDevelop": "",
|
||||
"integrationButton": "",
|
||||
"testSuccess": "",
|
||||
"testFailed": "",
|
||||
"unsupportedType": "",
|
||||
"networkError": ""
|
||||
},
|
||||
"testLocale": "",
|
||||
"add": "",
|
||||
"monitors": "",
|
||||
"distributedUptimeStatusCreateStatusPage": "",
|
||||
"distributedUptimeStatusCreateStatusPageAccess": "",
|
||||
"distributedUptimeStatusCreateStatusPageReady": "",
|
||||
"distributedUptimeStatusBasicInfoHeader": "",
|
||||
"distributedUptimeStatusBasicInfoDescription": "",
|
||||
"distributedUptimeStatusLogoHeader": "",
|
||||
"distributedUptimeStatusLogoDescription": "",
|
||||
"distributedUptimeStatusLogoUploadButton": "",
|
||||
"distributedUptimeStatusStandardMonitorsHeader": "",
|
||||
"distributedUptimeStatusStandardMonitorsDescription": "",
|
||||
"distributedUptimeStatusCreateYour": "",
|
||||
"distributedUptimeStatusEditYour": "",
|
||||
"distributedUptimeStatusPublishedLabel": "",
|
||||
"distributedUptimeStatusCompanyNameLabel": "",
|
||||
"distributedUptimeStatusPageAddressLabel": "",
|
||||
"distributedUptimeStatus30Days": "",
|
||||
"distributedUptimeStatus60Days": "",
|
||||
"distributedUptimeStatus90Days": "",
|
||||
"distributedUptimeStatusPageNotSetUp": "",
|
||||
"distributedUptimeStatusContactAdmin": "",
|
||||
"distributedUptimeStatusPageNotPublic": "",
|
||||
"distributedUptimeStatusPageDeleteDialog": "",
|
||||
"distributedUptimeStatusPageDeleteConfirm": "",
|
||||
"distributedUptimeStatusPageDeleteDescription": "",
|
||||
"distributedUptimeStatusDevices": "",
|
||||
"distributedUptimeStatusUpt": "",
|
||||
"distributedUptimeStatusUptBurned": "",
|
||||
"distributedUptimeStatusUptLogo": "",
|
||||
"incidentsTableNoIncidents": "",
|
||||
"incidentsTablePaginationLabel": "",
|
||||
"incidentsTableMonitorName": "",
|
||||
"incidentsTableStatus": "",
|
||||
"incidentsTableDateTime": "",
|
||||
"incidentsTableStatusCode": "",
|
||||
"incidentsTableMessage": "",
|
||||
"incidentsOptionsHeader": "",
|
||||
"incidentsOptionsHeaderFilterBy": "",
|
||||
"incidentsOptionsHeaderFilterAll": "",
|
||||
"incidentsOptionsHeaderFilterDown": "",
|
||||
"incidentsOptionsHeaderFilterCannotResolve": "",
|
||||
"incidentsOptionsHeaderShow": "",
|
||||
"incidentsOptionsHeaderLastHour": "",
|
||||
"incidentsOptionsHeaderLastDay": "",
|
||||
"incidentsOptionsHeaderLastWeek": "",
|
||||
"incidentsOptionsPlaceholderAllServers": "",
|
||||
"infrastructureCreateYour": "",
|
||||
"infrastructureCreateGeneralSettingsDescription": "",
|
||||
"infrastructureServerRequirement": "",
|
||||
"infrastructureCustomizeAlerts": "",
|
||||
"infrastructureAlertNotificationDescription": "",
|
||||
"infrastructureCreateMonitor": "",
|
||||
"infrastructureProtocol": "",
|
||||
"infrastructureServerUrlLabel": "",
|
||||
"infrastructureDisplayNameLabel": "",
|
||||
"infrastructureAuthorizationSecretLabel": "",
|
||||
"gb": "",
|
||||
"mb": "",
|
||||
"mem": "",
|
||||
"memoryUsage": "",
|
||||
"cpu": "",
|
||||
"cpuUsage": "",
|
||||
"cpuTemperature": "",
|
||||
"diskUsage": "",
|
||||
"used": "",
|
||||
"total": "",
|
||||
"cores": "",
|
||||
"frequency": "",
|
||||
"status": "",
|
||||
"cpuPhysical": "",
|
||||
"cpuLogical": "",
|
||||
"cpuFrequency": "",
|
||||
"avgCpuTemperature": "",
|
||||
"memory": "",
|
||||
"disk": "",
|
||||
"uptime": "",
|
||||
"os": "",
|
||||
"host": "",
|
||||
"actions": "",
|
||||
"integrations": "",
|
||||
"integrationsPrism": "",
|
||||
"integrationsSlack": "",
|
||||
"integrationsSlackInfo": "",
|
||||
"integrationsDiscord": "",
|
||||
"integrationsDiscordInfo": "",
|
||||
"integrationsZapier": "",
|
||||
"integrationsZapierInfo": "",
|
||||
"commonSave": "",
|
||||
"createYour": "",
|
||||
"createMonitor": "",
|
||||
"pause": "",
|
||||
"resume": "",
|
||||
"editing": "",
|
||||
"url": "",
|
||||
"access": "",
|
||||
"timezone": "",
|
||||
"features": "",
|
||||
"administrator": "",
|
||||
"loginHere": "",
|
||||
"displayName": "",
|
||||
"urlMonitor": "",
|
||||
"portToMonitor": "",
|
||||
"websiteMonitoring": "",
|
||||
"websiteMonitoringDescription": "",
|
||||
"pingMonitoring": "",
|
||||
"pingMonitoringDescription": "",
|
||||
"dockerContainerMonitoring": "",
|
||||
"dockerContainerMonitoringDescription": "",
|
||||
"portMonitoring": "",
|
||||
"portMonitoringDescription": "",
|
||||
"createMaintenanceWindow": "",
|
||||
"createMaintenance": "",
|
||||
"editMaintenance": "",
|
||||
"maintenanceWindowName": "",
|
||||
"friendlyNameInput": "",
|
||||
"friendlyNamePlaceholder": "",
|
||||
"maintenanceRepeat": "",
|
||||
"maintenance": "",
|
||||
"duration": "",
|
||||
"addMonitors": "",
|
||||
"window": "",
|
||||
"cancel": "",
|
||||
"message": "",
|
||||
"low": "",
|
||||
"high": "",
|
||||
"statusCode": "",
|
||||
"date&Time": "",
|
||||
"type": "",
|
||||
"statusPageName": "",
|
||||
"publicURL": "",
|
||||
"repeat": "",
|
||||
"edit": "",
|
||||
"createA": "",
|
||||
"remove": "",
|
||||
"maintenanceWindowDescription": "",
|
||||
"startTime": "",
|
||||
"timeZoneInfo": "",
|
||||
"monitorsToApply": "",
|
||||
"nextWindow": "",
|
||||
"notFoundButton": "",
|
||||
"pageSpeedConfigureSettingsDescription": "",
|
||||
"monitorDisplayName": "",
|
||||
"whenNewIncident": "",
|
||||
"notifySMS": "",
|
||||
"notifyEmails": "",
|
||||
"seperateEmails": "",
|
||||
"checkFrequency": "",
|
||||
"matchMethod": "",
|
||||
"expectedValue": "",
|
||||
"deleteDialogTitle": "",
|
||||
"deleteDialogDescription": "",
|
||||
"pageSpeedMonitor": "",
|
||||
"shown": "",
|
||||
"ago": "",
|
||||
"companyName": "",
|
||||
"pageSpeedDetailsPerformanceReport": "",
|
||||
"pageSpeedDetailsPerformanceReportCalculator": "",
|
||||
"checkingEvery": "",
|
||||
"statusPageCreateSettings": "",
|
||||
"basicInformation": "",
|
||||
"statusPageCreateBasicInfoDescription": "",
|
||||
"statusPageCreateSelectTimeZoneDescription": "",
|
||||
"statusPageCreateAppearanceDescription": "",
|
||||
"statusPageCreateSettingsCheckboxLabel": "",
|
||||
"statusPageCreateBasicInfoStatusPageAddress": "",
|
||||
"statusPageCreateTabsContent": "",
|
||||
"statusPageCreateTabsContentDescription": "",
|
||||
"statusPageCreateTabsContentFeaturesDescription": "",
|
||||
"showCharts": "",
|
||||
"showUptimePercentage": "",
|
||||
"removeLogo": "",
|
||||
"statusPageStatus": "",
|
||||
"statusPageStatusContactAdmin": "",
|
||||
"statusPageStatusNotPublic": "",
|
||||
"statusPageStatusNoPage": "",
|
||||
"statusPageStatusServiceStatus": "",
|
||||
"deleteStatusPage": "",
|
||||
"deleteStatusPageConfirm": "",
|
||||
"deleteStatusPageDescription": "",
|
||||
"uptimeCreate": "",
|
||||
"uptimeCreateJsonPath": "",
|
||||
"uptimeCreateJsonPathQuery": "",
|
||||
"maintenanceTableActionMenuDialogTitle": "",
|
||||
"infrastructureEditYour": "",
|
||||
"infrastructureEditMonitor": "",
|
||||
"infrastructureMonitorCreated": "",
|
||||
"infrastructureMonitorUpdated": "",
|
||||
"errorInvalidTypeId": "",
|
||||
"errorInvalidFieldId": "",
|
||||
"inviteNoTokenFound": "",
|
||||
"pageSpeedWarning": "",
|
||||
"pageSpeedLearnMoreLink": "",
|
||||
"pageSpeedAddApiKey": "",
|
||||
"update": "",
|
||||
"invalidFileFormat": "",
|
||||
"invalidFileSize": "",
|
||||
"ClickUpload": "",
|
||||
"DragandDrop": "",
|
||||
"MaxSize": "",
|
||||
"SupportedFormats": "",
|
||||
"FirstName": "",
|
||||
"LastName": "",
|
||||
"EmailDescriptionText": "",
|
||||
"YourPhoto": "",
|
||||
"PhotoDescriptionText": "",
|
||||
"save": "",
|
||||
"DeleteDescriptionText": "",
|
||||
"DeleteAccountWarning": "",
|
||||
"DeleteWarningTitle": "",
|
||||
"authRegisterFirstName": "",
|
||||
"authRegisterLastName": "",
|
||||
"authRegisterEmail": "",
|
||||
"authRegisterEmailRequired": "",
|
||||
"bulkImport": {
|
||||
"title": "",
|
||||
"selectFileTips": "",
|
||||
"selectFileDescription": "",
|
||||
"selectFile": "",
|
||||
"parsingFailed": "",
|
||||
"uploadSuccess": "",
|
||||
"validationFailed": "",
|
||||
"noFileSelected": "",
|
||||
"fallbackPage": ""
|
||||
},
|
||||
"welcomeBack": "",
|
||||
"authRegisterLoginLink": "",
|
||||
"validationNameRequired": "",
|
||||
"validationNameTooLong": "",
|
||||
"validationNameInvalidCharacters": "",
|
||||
"settingsSystemReset": "",
|
||||
"settingsSystemResetDescription": "",
|
||||
"DeleteAccountTitle": "",
|
||||
"DeleteAccountButton": "",
|
||||
"authRegisterEmailInvalid": "",
|
||||
"publicLink": "",
|
||||
"doNotHaveAccount": "",
|
||||
"registerHere": "",
|
||||
"backendUnreachable": "",
|
||||
"backendUnreachableMessage": "",
|
||||
"backendUnreachableError": "",
|
||||
"retryConnection": "",
|
||||
"retryingConnection": "",
|
||||
"backendReconnected": "",
|
||||
"backendStillUnreachable": "",
|
||||
"backendConnectionError": "",
|
||||
"maskedPageSpeedKeyPlaceholder": "",
|
||||
"pageSpeedApiKeyFieldTitle": "",
|
||||
"pageSpeedApiKeyFieldLabel": "",
|
||||
"pageSpeedApiKeyFieldDescription": "",
|
||||
"pageSpeedApiKeyFieldResetLabel": "",
|
||||
"reset": "",
|
||||
"ignoreTLSError": "",
|
||||
"tlsErrorIgnored": "",
|
||||
"ignoreTLSErrorDescription": "",
|
||||
"createNew": "",
|
||||
"greeting": {
|
||||
"prepend": "",
|
||||
"append": "",
|
||||
"overview": ""
|
||||
},
|
||||
"monitorStatus": {
|
||||
"up": "",
|
||||
"down": "",
|
||||
"paused": ""
|
||||
},
|
||||
"roles": {
|
||||
"superAdmin": "",
|
||||
"admin": "",
|
||||
"teamMember": "",
|
||||
"demoUser": ""
|
||||
},
|
||||
"teamPanel": {
|
||||
"teamMembers": "",
|
||||
"filter": {
|
||||
"all": "",
|
||||
"member": ""
|
||||
},
|
||||
"inviteTeamMember": "",
|
||||
"inviteNewTeamMember": "",
|
||||
"inviteDescription": "",
|
||||
"email": "",
|
||||
"selectRole": "",
|
||||
"inviteLink": "",
|
||||
"cancel": "",
|
||||
"noMembers": "",
|
||||
"getToken": "",
|
||||
"emailToken": "",
|
||||
"table": {
|
||||
"name": "",
|
||||
"email": "",
|
||||
"role": "",
|
||||
"created": ""
|
||||
}
|
||||
},
|
||||
"monitorState": {
|
||||
"paused": "",
|
||||
"resumed": "",
|
||||
"active": ""
|
||||
},
|
||||
"menu": {
|
||||
"uptime": "",
|
||||
"pagespeed": "",
|
||||
"infrastructure": "",
|
||||
"distributedUptime": "",
|
||||
"incidents": "",
|
||||
"statusPages": "",
|
||||
"maintenance": "",
|
||||
"integrations": "",
|
||||
"settings": "",
|
||||
"support": "",
|
||||
"discussions": "",
|
||||
"docs": "",
|
||||
"changelog": "",
|
||||
"profile": "",
|
||||
"password": "",
|
||||
"team": "",
|
||||
"logOut": ""
|
||||
},
|
||||
"settingsEmail": "",
|
||||
"settingsEmailDescription": "",
|
||||
"settingsEmailHost": "",
|
||||
"settingsEmailPort": "",
|
||||
"settingsEmailAddress": "",
|
||||
"settingsEmailPassword": "",
|
||||
"settingsEmailUser": "",
|
||||
"settingsEmailFieldResetLabel": "",
|
||||
"state": "",
|
||||
"statusBreadCrumbsStatusPages": "",
|
||||
"statusBreadCrumbsDetails": "",
|
||||
"authForgotPasswordInstructions": "",
|
||||
"settingsThemeModeLight": "",
|
||||
"settingsThemeModeDark": "",
|
||||
"settingsClearAllStatsDialogCancel": "",
|
||||
"commonSaving": "",
|
||||
"navControls": "",
|
||||
"incidentsPageTitle": "",
|
||||
"passwordPanel": {
|
||||
"passwordChangedSuccess": "",
|
||||
"passwordInputIncorrect": "",
|
||||
"currentPassword": "",
|
||||
"enterCurrentPassword": "",
|
||||
"newPassword": "",
|
||||
"enterNewPassword": "",
|
||||
"confirmNewPassword": "",
|
||||
"passwordRequirements": "",
|
||||
"saving": ""
|
||||
},
|
||||
"uptimeCreateSelectURL": "",
|
||||
"settingsEmailConnectionHost": "",
|
||||
"sendTestEmail": "",
|
||||
"emailSent": "",
|
||||
"failedToSendEmail": "",
|
||||
"settingsTestEmail": "",
|
||||
"settingsTestEmailSuccess": "",
|
||||
"settingsTestEmailFailed": "",
|
||||
"settingsTestEmailFailedWithReason": "",
|
||||
"settingsTestEmailUnknownError": "",
|
||||
"settingsEmailRequiredFields": "",
|
||||
"statusMsg": {
|
||||
"paused": "",
|
||||
"up": "",
|
||||
"down": "",
|
||||
"pending": ""
|
||||
},
|
||||
"settingsURLTitle": "",
|
||||
"settingsURLDescription": "",
|
||||
"settingsURLSelectTitle": "",
|
||||
"settingsURLEnabled": "",
|
||||
"settingURLDisabled": ""
|
||||
}
|
||||
@@ -1,5 +1,3 @@
|
||||
version: "3.8"
|
||||
|
||||
services:
|
||||
server:
|
||||
image: ghcr.io/bluewave-labs/checkmate:backend-dist-mono-multiarch
|
||||
|
||||
@@ -427,7 +427,7 @@ const updateAppSettingsBodyValidation = joi.object({
|
||||
checkTTL: joi.number().allow(""),
|
||||
pagespeedApiKey: joi.string().allow(""),
|
||||
language: joi.string().allow(""),
|
||||
showURL: joi.bool().required(),
|
||||
// showURL: joi.bool().required(),
|
||||
systemEmailHost: joi.string().allow(""),
|
||||
systemEmailPort: joi.number().allow(""),
|
||||
systemEmailAddress: joi.string().allow(""),
|
||||
|
||||
Reference in new issue
Block a user