mirror of
https://github.com/bluewave-labs/Checkmate.git
synced 2026-05-20 08:28:48 -05:00
Merge pull request #3283 from bluewave-labs/fix/string-cleanup
clean up strings
This commit is contained in:
@@ -38,11 +38,11 @@ export const ImageUpload = ({
|
||||
const isValidType = accept.some((type) => file.type.includes(type));
|
||||
const isValidSize = file.size <= maxSize;
|
||||
if (!isValidType) {
|
||||
setLocalError(t("common.errors.invalidFileFormat"));
|
||||
setLocalError(t("components.imageUpload.errors.invalidFileFormat"));
|
||||
return;
|
||||
}
|
||||
if (!isValidSize) {
|
||||
setLocalError(t("common.errors.invalidFileSize"));
|
||||
setLocalError(t("components.imageUpload.errors.invalidFileSize"));
|
||||
return;
|
||||
}
|
||||
setLocalError(null);
|
||||
@@ -137,15 +137,15 @@ export const ImageUpload = ({
|
||||
color="primary"
|
||||
fontWeight={500}
|
||||
>
|
||||
{t("common.imageUpload.clickToUpload")}
|
||||
{t("components.imageUpload.clickToUpload")}
|
||||
</Typography>{" "}
|
||||
{t("common.imageUpload.orDragAndDrop")}
|
||||
{t("components.imageUpload.orDragAndDrop")}
|
||||
</Typography>
|
||||
<Typography
|
||||
variant="caption"
|
||||
color="text.disabled"
|
||||
>
|
||||
{accept.join(", ").toUpperCase()} • {t("common.imageUpload.maxSize")}{" "}
|
||||
{accept.join(", ").toUpperCase()} • {t("components.imageUpload.maxSize")}{" "}
|
||||
{Math.round(maxSize / 1024 / 1024)}MB
|
||||
</Typography>
|
||||
</Stack>
|
||||
|
||||
@@ -97,27 +97,27 @@ const SetNewPasswordPage = () => {
|
||||
/>
|
||||
<Stack gap={theme.spacing(4)}>
|
||||
<BulletPointCheck
|
||||
text={t("auth.common.passwordRules.length")}
|
||||
text={t("pages.auth.common.passwordRules.length")}
|
||||
variant={getVariant(hasLength)}
|
||||
/>
|
||||
<BulletPointCheck
|
||||
text={t("auth.common.passwordRules.special")}
|
||||
text={t("pages.auth.common.passwordRules.special")}
|
||||
variant={getVariant(hasSpecial)}
|
||||
/>
|
||||
<BulletPointCheck
|
||||
text={t("auth.common.passwordRules.number")}
|
||||
text={t("pages.auth.common.passwordRules.number")}
|
||||
variant={getVariant(hasNumber)}
|
||||
/>
|
||||
<BulletPointCheck
|
||||
text={t("auth.common.passwordRules.uppercase")}
|
||||
text={t("pages.auth.common.passwordRules.uppercase")}
|
||||
variant={getVariant(hasUppercase)}
|
||||
/>
|
||||
<BulletPointCheck
|
||||
text={t("auth.common.passwordRules.lowercase")}
|
||||
text={t("pages.auth.common.passwordRules.lowercase")}
|
||||
variant={getVariant(hasLowercase)}
|
||||
/>
|
||||
<BulletPointCheck
|
||||
text={t("auth.common.passwordRules.match")}
|
||||
text={t("pages.auth.common.passwordRules.match")}
|
||||
variant={getVariant(passwordsMatch)}
|
||||
/>
|
||||
</Stack>
|
||||
@@ -127,7 +127,7 @@ const SetNewPasswordPage = () => {
|
||||
fullWidth
|
||||
loading={loading}
|
||||
>
|
||||
{t("auth.forgotPassword.buttons.resetPassword")}
|
||||
{t("common.buttons.resetPassword")}
|
||||
</Button>
|
||||
<TextLink
|
||||
alignSelf="center"
|
||||
|
||||
@@ -332,8 +332,10 @@ const CreateMonitorPage = () => {
|
||||
value={field.value ?? ""}
|
||||
onChange={(e) => field.onChange(Number(e.target.value) || 0)}
|
||||
type="number"
|
||||
fieldLabel={t("portToMonitor")}
|
||||
placeholder="5173"
|
||||
fieldLabel={t("pages.createMonitor.form.general.option.port.label")}
|
||||
placeholder={t(
|
||||
"pages.createMonitor.form.general.option.port.placeholder"
|
||||
)}
|
||||
fullWidth
|
||||
error={!!fieldState.error}
|
||||
helperText={fieldState.error?.message ?? ""}
|
||||
@@ -351,10 +353,12 @@ const CreateMonitorPage = () => {
|
||||
<Select
|
||||
{...field}
|
||||
value={field.value ?? ""}
|
||||
fieldLabel={t("chooseGame")}
|
||||
fieldLabel={t("pages.createMonitor.form.general.option.game.label")}
|
||||
error={!!fieldState.error}
|
||||
>
|
||||
<MenuItem value="">Select a game</MenuItem>
|
||||
<MenuItem value="">
|
||||
{t("pages.createMonitor.form.general.option.game.placeholder")}{" "}
|
||||
</MenuItem>
|
||||
{games &&
|
||||
Object.entries(games).map(([key, game]) => (
|
||||
<MenuItem
|
||||
@@ -426,16 +430,56 @@ const CreateMonitorPage = () => {
|
||||
)}
|
||||
error={!!fieldState.error}
|
||||
>
|
||||
<MenuItem value={15000}>{t("time.fifteenSeconds")}</MenuItem>
|
||||
<MenuItem value={30000}>{t("time.thirtySeconds")}</MenuItem>
|
||||
<MenuItem value={60000}>{t("time.oneMinute")}</MenuItem>
|
||||
<MenuItem value={120000}>{t("time.twoMinutes")}</MenuItem>
|
||||
<MenuItem value={180000}>{t("time.threeMinutes")}</MenuItem>
|
||||
<MenuItem value={240000}>{t("time.fourMinutes")}</MenuItem>
|
||||
<MenuItem value={300000}>{t("time.fiveMinutes")}</MenuItem>
|
||||
<MenuItem value={600000}>{t("time.tenMinutes")}</MenuItem>
|
||||
<MenuItem value={900000}>{t("time.fifteenMinutes")}</MenuItem>
|
||||
<MenuItem value={1800000}>{t("time.thirtyMinutes")}</MenuItem>
|
||||
<MenuItem value={15000}>
|
||||
{t(
|
||||
"pages.createMonitor.form.frequency.option.frequency.value.fifteenSeconds"
|
||||
)}
|
||||
</MenuItem>
|
||||
<MenuItem value={30000}>
|
||||
{t(
|
||||
"pages.createMonitor.form.frequency.option.frequency.value.thirtySeconds"
|
||||
)}
|
||||
</MenuItem>
|
||||
<MenuItem value={60000}>
|
||||
{t(
|
||||
"pages.createMonitor.form.frequency.option.frequency.value.oneMinute"
|
||||
)}
|
||||
</MenuItem>
|
||||
<MenuItem value={120000}>
|
||||
{t(
|
||||
"pages.createMonitor.form.frequency.option.frequency.value.twoMinutes"
|
||||
)}
|
||||
</MenuItem>
|
||||
<MenuItem value={180000}>
|
||||
{t(
|
||||
"pages.createMonitor.form.frequency.option.frequency.value.threeMinutes"
|
||||
)}
|
||||
</MenuItem>
|
||||
<MenuItem value={240000}>
|
||||
{t(
|
||||
"pages.createMonitor.form.frequency.option.frequency.value.fourMinutes"
|
||||
)}
|
||||
</MenuItem>
|
||||
<MenuItem value={300000}>
|
||||
{t(
|
||||
"pages.createMonitor.form.frequency.option.frequency.value.fiveMinutes"
|
||||
)}
|
||||
</MenuItem>
|
||||
<MenuItem value={600000}>
|
||||
{t(
|
||||
"pages.createMonitor.form.frequency.option.frequency.value.tenMinutes"
|
||||
)}
|
||||
</MenuItem>
|
||||
<MenuItem value={900000}>
|
||||
{t(
|
||||
"pages.createMonitor.form.frequency.option.frequency.value.fifteenMinutes"
|
||||
)}
|
||||
</MenuItem>
|
||||
<MenuItem value={1800000}>
|
||||
{t(
|
||||
"pages.createMonitor.form.frequency.option.frequency.value.thirtyMinutes"
|
||||
)}
|
||||
</MenuItem>
|
||||
</Select>
|
||||
)}
|
||||
/>
|
||||
@@ -617,11 +661,21 @@ const CreateMonitorPage = () => {
|
||||
"pages.createMonitor.form.advanced.option.matchMethod.label"
|
||||
)}
|
||||
>
|
||||
<MenuItem value="equal">{t("matchMethodOptions.equal")}</MenuItem>
|
||||
<MenuItem value="include">
|
||||
{t("matchMethodOptions.include")}
|
||||
<MenuItem value="equal">
|
||||
{t(
|
||||
"pages.createMonitor.form.advanced.option.matchMethod.equal"
|
||||
)}
|
||||
</MenuItem>
|
||||
<MenuItem value="include">
|
||||
{t(
|
||||
"pages.createMonitor.form.advanced.option.matchMethod.include"
|
||||
)}
|
||||
</MenuItem>
|
||||
<MenuItem value="regex">
|
||||
{t(
|
||||
"pages.createMonitor.form.advanced.option.matchMethod.regex"
|
||||
)}
|
||||
</MenuItem>
|
||||
<MenuItem value="regex">{t("matchMethodOptions.regex")}</MenuItem>
|
||||
</Select>
|
||||
)}
|
||||
/>
|
||||
|
||||
@@ -46,10 +46,9 @@ export const DialogResolution = ({
|
||||
return (
|
||||
<Dialog
|
||||
open={open}
|
||||
title={t("incidentsPage.resolveIncidentDialogTitle")}
|
||||
title={t("pages.incidents.dialog.resolveIncident.title")}
|
||||
onCancel={handleCancel}
|
||||
onConfirm={handleConfirm}
|
||||
confirmText={t("incidentsPage.resolveIncidentDialogConfirm")}
|
||||
confirmColor="error"
|
||||
cancelColor="primary"
|
||||
loading={isResolving}
|
||||
@@ -58,8 +57,10 @@ export const DialogResolution = ({
|
||||
>
|
||||
<Box sx={{ mt: theme.spacing(4) }}>
|
||||
<TextField
|
||||
fieldLabel={t("incidentsPage.resolveIncidentDialogCommentLabel")}
|
||||
placeholder={t("incidentsPage.resolveIncidentDialogCommentPlaceholder")}
|
||||
fieldLabel={t("pages.incidents.dialog.resolveIncident.option.comment.label")}
|
||||
placeholder={t(
|
||||
"pages.incidents.dialog.resolveIncident.option.comment.placeholder"
|
||||
)}
|
||||
value={comment}
|
||||
onChange={(e) => setComment(e.target.value)}
|
||||
fullWidth
|
||||
|
||||
@@ -196,13 +196,13 @@ export const MaintenanceWindowTable = ({
|
||||
/>
|
||||
<DialogInput
|
||||
open={deleteDialogOpen}
|
||||
title={t("maintenanceTableActionMenuDialogTitle")}
|
||||
title={t("common.dialogs.delete.title")}
|
||||
content={t("common.dialogs.delete.description")}
|
||||
onCancel={() => {
|
||||
setDeleteDialogOpen(false);
|
||||
setSelectedWindow(null);
|
||||
}}
|
||||
onConfirm={handleDelete}
|
||||
confirmText={t("delete")}
|
||||
loading={deleteLoading}
|
||||
/>
|
||||
</Box>
|
||||
|
||||
@@ -64,7 +64,7 @@ export const HeaderStatusPageControls = ({
|
||||
},
|
||||
}}
|
||||
>
|
||||
{t("publicLink")}
|
||||
{t("components.headerStatusPageControls.publicLink")}
|
||||
</Typography>
|
||||
<Box>
|
||||
<ExternalLink size={14} />
|
||||
|
||||
@@ -96,7 +96,6 @@ const StatusPageView = () => {
|
||||
}}
|
||||
/>
|
||||
)}
|
||||
<Typography variant="h2">{t("statusPageStatusServiceStatus")}</Typography>
|
||||
<StatusBar monitors={monitors} />
|
||||
<MonitorsList
|
||||
statusPage={statusPage}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import type { Monitor, MonitorStatus, MonitorType } from "@/Types/Monitor";
|
||||
import type { MonitorStatus, MonitorType } from "@/Types/Monitor";
|
||||
import type { PaletteKey } from "@/Utils/Theme/v2Theme";
|
||||
import type { ValueType } from "@/Components/v2/design-elements/StatusLabel";
|
||||
|
||||
@@ -81,40 +81,3 @@ export const formatUrl = (url: string, maxLength: number = 55) => {
|
||||
? `${strippedUrl.slice(0, maxLength)}…`
|
||||
: strippedUrl;
|
||||
};
|
||||
|
||||
export interface IStatusPageHeaderConfig {
|
||||
paletteKey: PaletteKey;
|
||||
message: string;
|
||||
}
|
||||
export const getStatusPageHeaderConfig = (
|
||||
monitors: Monitor[],
|
||||
t: any
|
||||
): IStatusPageHeaderConfig => {
|
||||
if (!monitors || monitors.length === 0) {
|
||||
return { paletteKey: "error", message: "No monitors available" };
|
||||
}
|
||||
|
||||
const allUp = monitors.every((monitor) => monitor.status === "up");
|
||||
const anyDown = monitors.some((monitor) => monitor.status === "down");
|
||||
const allDown = monitors.every((monitor) => monitor.status === "down");
|
||||
|
||||
if (allUp)
|
||||
return {
|
||||
paletteKey: "success",
|
||||
message: t("statusPage.details.statusHeader.allUp"),
|
||||
};
|
||||
if (allDown)
|
||||
return {
|
||||
paletteKey: "error",
|
||||
message: t("statusPage.details.statusHeader.allDown"),
|
||||
};
|
||||
if (anyDown)
|
||||
return {
|
||||
paletteKey: "warning",
|
||||
message: t("statusPage.details.statusHeader.anyDown"),
|
||||
};
|
||||
return {
|
||||
paletteKey: "warning",
|
||||
message: t("statusPage.details.statusHeader.anyDown"),
|
||||
};
|
||||
};
|
||||
|
||||
@@ -2,11 +2,10 @@ import { z } from "zod";
|
||||
|
||||
export const loginSchema = z.object({
|
||||
email: z
|
||||
.string()
|
||||
.min(1, "auth.common.inputs.email.errors.empty")
|
||||
.email("auth.common.inputs.email.errors.invalid")
|
||||
.email("Please enter a valid email address")
|
||||
.min(1, "Please enter your email address")
|
||||
.transform((val) => val.toLowerCase().trim()),
|
||||
password: z.string().min(1, "auth.common.inputs.password.errors.empty"),
|
||||
password: z.string().min(1, "Please enter your password"),
|
||||
});
|
||||
|
||||
export type LoginFormData = z.infer<typeof loginSchema>;
|
||||
|
||||
@@ -2,9 +2,8 @@ import { z } from "zod";
|
||||
|
||||
export const recoverySchema = z.object({
|
||||
email: z
|
||||
.string()
|
||||
.min(1, "auth.common.inputs.email.errors.empty")
|
||||
.email("auth.common.inputs.email.errors.invalid")
|
||||
.email("Please enter a valid email address")
|
||||
.min(1, "Please enter your email address")
|
||||
.transform((val) => val.toLowerCase().trim()),
|
||||
});
|
||||
|
||||
|
||||
+75
-696
@@ -1,189 +1,4 @@
|
||||
{
|
||||
"aboutus": "About Us",
|
||||
"access": "Access",
|
||||
"actions": "Actions",
|
||||
"add": "Add",
|
||||
"addMonitors": "Add monitors",
|
||||
"advancedMatching": "Advanced matching",
|
||||
"area": "Area",
|
||||
"auth": {
|
||||
"common": {
|
||||
"errors": {
|
||||
"validation": "Error validating data."
|
||||
},
|
||||
"fields": {
|
||||
"role": {
|
||||
"errors": {
|
||||
"min": "At least one role is required"
|
||||
}
|
||||
}
|
||||
},
|
||||
"inputs": {
|
||||
"email": {
|
||||
"errors": {
|
||||
"empty": "To continue, please enter your email address",
|
||||
"invalid": "Please recheck validity of entered email address"
|
||||
},
|
||||
"label": "Email",
|
||||
"placeholder": "jordan.ellis@domain.com"
|
||||
},
|
||||
"firstName": {
|
||||
"errors": {
|
||||
"empty": "Please enter your name",
|
||||
"length": "Name must be less than 50 characters",
|
||||
"pattern": "Name must contain only letters, spaces, apostrophes, or hyphens"
|
||||
},
|
||||
"label": "Name",
|
||||
"placeholder": "Jordan"
|
||||
},
|
||||
"lastName": {
|
||||
"errors": {
|
||||
"empty": "Please enter your surname",
|
||||
"length": "Surname must be less than 50 characters",
|
||||
"pattern": "Surname must contain only letters, spaces, apostrophes, or hyphens"
|
||||
},
|
||||
"label": "Surname",
|
||||
"placeholder": "Ellis"
|
||||
},
|
||||
"password": {
|
||||
"errors": {
|
||||
"empty": "Please enter your password",
|
||||
"length": "Password must be at least 8 characters long",
|
||||
"lowercase": "Password must contain at least 1 lowercase letter",
|
||||
"number": "Password must contain at least 1 number",
|
||||
"special": "Password must contain at least 1 special character (!?@#$%^&*()-_=+[]{}|;:'\",./\\~`)",
|
||||
"uppercase": "Password must contain at least 1 uppercase letter"
|
||||
},
|
||||
"label": "Password",
|
||||
"rules": {
|
||||
"length": {
|
||||
"beginning": "Must be at least",
|
||||
"highlighted": "8 characters long"
|
||||
},
|
||||
"lowercase": {
|
||||
"beginning": "Must contain at least",
|
||||
"highlighted": "one lower character"
|
||||
},
|
||||
"match": {
|
||||
"beginning": "Passwords",
|
||||
"highlighted": "must match"
|
||||
},
|
||||
"number": {
|
||||
"beginning": "Must contain at least",
|
||||
"highlighted": "one number"
|
||||
},
|
||||
"special": {
|
||||
"beginning": "Must contain at least",
|
||||
"highlighted": "one special character (!?@#$%^&*()-_=+[]{}|;:'\",./\\~`)"
|
||||
},
|
||||
"uppercase": {
|
||||
"beginning": "Must contain at least",
|
||||
"highlighted": "one upper character"
|
||||
}
|
||||
}
|
||||
},
|
||||
"passwordConfirm": {
|
||||
"errors": {
|
||||
"different": "Entered passwords don't match, so one of them is probably mistyped",
|
||||
"empty": "Please enter your password again for confirmation (helps with typos)"
|
||||
},
|
||||
"label": "Confirm password",
|
||||
"placeholder": "Re-enter password to confirm"
|
||||
}
|
||||
},
|
||||
"navigation": {
|
||||
"continue": "Continue"
|
||||
},
|
||||
"passwordRules": {
|
||||
"length": "Must be at least 8 characters long",
|
||||
"special": "Must contain at least one special character (!?@#$%^&*()-_=+[]{}|;:'\",./\\~`)",
|
||||
"number": "Must contain at least one number",
|
||||
"uppercase": "Must contain at least one upper character",
|
||||
"lowercase": "Must contain at least one lower character",
|
||||
"match": "Passwords must match"
|
||||
}
|
||||
},
|
||||
"forgotPassword": {
|
||||
"buttons": {
|
||||
"openEmail": "Open email app",
|
||||
"resetPassword": "Reset password"
|
||||
},
|
||||
"heading": "Forgot password?",
|
||||
"links": {
|
||||
"login": "Go back to <a>Log In</a>",
|
||||
"resend": "Didn't receive the email? <a>Click to resend</a>"
|
||||
},
|
||||
"subheadings": {
|
||||
"stepFour": "Your password has been successfully reset. Click below to log in magically.",
|
||||
"stepOne": "No worries, we'll send you reset instructions.",
|
||||
"stepThree": "Your new password must be different from previously used passwords.",
|
||||
"stepTwo": "We sent a password reset link to <email/>"
|
||||
},
|
||||
"toasts": {
|
||||
"emailNotFound": "Email not found.",
|
||||
"error": "Unable to reset password. Please try again later or contact support.",
|
||||
"redirect": "Redirecting in <seconds/>...",
|
||||
"sent": "Instructions sent to <email/>.",
|
||||
"success": "Your password was reset successfully."
|
||||
}
|
||||
},
|
||||
"login": {
|
||||
"errors": {
|
||||
"password": {
|
||||
"incorrect": "The password you provided does not match our records"
|
||||
}
|
||||
},
|
||||
"heading": "Log in to continue",
|
||||
"links": {
|
||||
"forgotPassword": "Forgot password?",
|
||||
"forgotPasswordLink": "Reset password",
|
||||
"register": "Do not have an account?",
|
||||
"registerLink": "Register here"
|
||||
},
|
||||
"toasts": {
|
||||
"incorrectPassword": "Incorrect password",
|
||||
"success": "Welcome back! You're successfully logged in."
|
||||
},
|
||||
"welcome": "Welcome back to Checkmate!"
|
||||
},
|
||||
"registration": {
|
||||
"description": {
|
||||
"superAdmin": "Create your super admin account to get started",
|
||||
"user": "Sign up as a user and ask super admin for access to your monitors"
|
||||
},
|
||||
"heading": {
|
||||
"user": "Sign Up"
|
||||
},
|
||||
"toasts": {
|
||||
"success": "Welcome! Your account was created successfully."
|
||||
},
|
||||
"welcome": "Welcome to Checkmate!"
|
||||
}
|
||||
},
|
||||
"avgCpuTemperature": "Average CPU Temperature",
|
||||
"bar": "Bar",
|
||||
"basicInformation": "Basic Information",
|
||||
"bulkImport": {
|
||||
"fallbackPage": "Import a file to upload a list of servers in bulk",
|
||||
"invalidFileType": "Invalid file type",
|
||||
"noFileSelected": "No file selected",
|
||||
"selectFile": "Select File",
|
||||
"selectFileDescription": "You can download our <template>template</template> or <sample>sample</sample>",
|
||||
"selectFileTips": "Select CSV file to upload",
|
||||
"title": "Bulk Import",
|
||||
"uploadFailed": "Upload failed",
|
||||
"uploadSuccess": "Monitors created successfully!"
|
||||
},
|
||||
"bytesSent": "Bytes Sent",
|
||||
"addMember": "Add member",
|
||||
"cancel": "Cancel",
|
||||
"checkHooks": {
|
||||
"failureResolveOne": "Failed to resolve incident."
|
||||
},
|
||||
"chooseGame": "Choose game",
|
||||
"city": "CITY",
|
||||
"ClickUpload": "Click to upload",
|
||||
"close": "Close",
|
||||
"common": {
|
||||
"auth": {
|
||||
"roles": {
|
||||
@@ -222,7 +37,8 @@
|
||||
"testNotifications": "Test notifications",
|
||||
"toggleTheme": "Toggles light & dark",
|
||||
"flushQueue": "Flush queue",
|
||||
"notFound": "Go to the main dashboard"
|
||||
"notFound": "Go to the main dashboard",
|
||||
"resetPassword": "Reset password"
|
||||
},
|
||||
"charts": {
|
||||
"labels": {
|
||||
@@ -290,28 +106,23 @@
|
||||
"interval": "Interval",
|
||||
"active": "Active"
|
||||
}
|
||||
},
|
||||
"toasts": {
|
||||
"checkConnection": "Please check your connection",
|
||||
"networkError": "Network error",
|
||||
"unknownError": "Unknown error"
|
||||
},
|
||||
}
|
||||
},
|
||||
"components": {
|
||||
"imageUpload": {
|
||||
"clickToUpload": "Click to upload",
|
||||
"dragAndDrop": "or drag and drop",
|
||||
"supportedFormats": "Supported formats",
|
||||
"maxSize": "Max size",
|
||||
"orDragAndDrop": "or drag and drop"
|
||||
"orDragAndDrop": "or drag and drop",
|
||||
"errors": {
|
||||
"invalidFileSize": "File size is too large!",
|
||||
"invalidFileFormat": "Unsupported file format!"
|
||||
}
|
||||
},
|
||||
"headerStatusPageControls": {
|
||||
"publicLink": "Public link"
|
||||
},
|
||||
"errors": {
|
||||
"invalidFileType": "Invalid file type",
|
||||
"fileTooLarge": "File too large"
|
||||
}
|
||||
},
|
||||
"commonSave": "Save",
|
||||
"commonSaving": "Saving...",
|
||||
"companyName": "Company name",
|
||||
"components": {
|
||||
"headerTimeRange": {
|
||||
"labels": {
|
||||
"day": "Day",
|
||||
@@ -376,229 +187,7 @@
|
||||
"description": "See the latest releases and help grow the community on GitHub"
|
||||
}
|
||||
},
|
||||
"configure": "Configure",
|
||||
"confirmPassword": "Confirm password",
|
||||
"cores": "Cores",
|
||||
"cpu": "CPU",
|
||||
"cpuFrequency": "CPU Frequency",
|
||||
"cpuLogical": "CPU (Logical)",
|
||||
"cpuPhysical": "CPU (Physical)",
|
||||
"cpuTemperature": "CPU Temperature",
|
||||
"cpuUsage": "CPU usage",
|
||||
"createA": "Create a",
|
||||
"createMaintenance": "Create maintenance",
|
||||
"createMaintenanceWindow": "Create maintenance window",
|
||||
"createMonitor": "Create monitor",
|
||||
"createNew": "Create new",
|
||||
"delete": "Delete",
|
||||
"generateToken": "Generate token",
|
||||
"DeleteAccountButton": "Remove account",
|
||||
"DeleteAccountTitle": "Remove account",
|
||||
"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.",
|
||||
"DeleteDescriptionText": "This will remove the account and all associated data from the server. This isn't reversible.",
|
||||
"deleteStatusPage": "Do you want to delete this status page?",
|
||||
"deleteStatusPageConfirm": "Yes, delete status page",
|
||||
"deleteStatusPageDescription": "Once deleted, your status page cannot be retrieved.",
|
||||
"DeleteWarningTitle": "Really remove this account?",
|
||||
"details": "Details",
|
||||
"device": "Device",
|
||||
"diagnosticsPage": {
|
||||
"diagnosticDescription": "System diagnostics",
|
||||
"gauges": {
|
||||
"heapAllocationSubtitle": "% of available memory",
|
||||
"heapAllocationTitle": "Heap allocation",
|
||||
"heapUsageSubtitle": "% of available memory",
|
||||
"heapUsageTitle": "Heap usage",
|
||||
"heapUtilizationSubtitle": "% of allocated",
|
||||
"heapUtilizationTitle": "Heap utilization",
|
||||
"instantCpuUsageSubtitle": "% of 1s used by CPU",
|
||||
"instantCpuUsageTitle": "Instant CPU usage"
|
||||
},
|
||||
"stats": {
|
||||
"eventLoopDelayTitle": "Event loop delay",
|
||||
"osMemoryLimitTitle": "OS Memory Limit",
|
||||
"totalHeapSizeTitle": "Total heap size",
|
||||
"uptimeTitle": "Uptime",
|
||||
"usedHeapSizeTitle": "Used heap size"
|
||||
}
|
||||
},
|
||||
"disk": "Disk",
|
||||
"diskUsage": "Disk Usage",
|
||||
"displayName": "Display name",
|
||||
"download": "Download",
|
||||
"DragandDrop": "drag and drop",
|
||||
"duration": "Duration",
|
||||
"edit": "Edit",
|
||||
"editing": "Editing...",
|
||||
"editMaintenance": "Edit maintenance",
|
||||
"editUserPage": {
|
||||
"form": {
|
||||
"email": "Email",
|
||||
"firstName": "First name",
|
||||
"lastName": "Last name",
|
||||
"role": "Roles",
|
||||
"save": "Save"
|
||||
},
|
||||
"table": {
|
||||
"actionHeader": "Action",
|
||||
"roleHeader": "Role"
|
||||
},
|
||||
"title": "Edit user",
|
||||
"toast": {
|
||||
"successUserUpdate": "User updated successfully",
|
||||
"validationErrors": "Validation errors"
|
||||
}
|
||||
},
|
||||
"EmailDescriptionText": "This is your current email address — it cannot be changed.",
|
||||
"errorPages": {
|
||||
"serverUnreachable": {
|
||||
"alertBox": "Server Connection Error",
|
||||
"description": "We're unable to connect to the server. Please check your internet connection or verify your deployment configuration if the problem persists.",
|
||||
"retryButton": {
|
||||
"default": "Retry connection",
|
||||
"processing": "Connecting..."
|
||||
},
|
||||
"toasts": {
|
||||
"reconnected": "Successfully reconnected to the server.",
|
||||
"stillUnreachable": "Server is still unreachable. Please try again later."
|
||||
}
|
||||
}
|
||||
},
|
||||
"errors": "Errors",
|
||||
"expectedValue": "Expected value",
|
||||
"failedToSendEmail": "Failed to send email",
|
||||
"FirstName": "First name",
|
||||
"frequency": "Frequency",
|
||||
"friendlyNameInput": "Friendly name",
|
||||
"friendlyNamePlaceholder": "Maintenance at __ : __ for ___ minutes",
|
||||
"gb": "GB",
|
||||
"general": {
|
||||
"noOptionsFound": "No {{unit}} found"
|
||||
},
|
||||
"greeting": {
|
||||
"append": "The afternoon is your playground—let's make it epic!",
|
||||
"overview": "Here's an overview of your {{type}} monitors.",
|
||||
"prepend": "Hey there"
|
||||
},
|
||||
"high": "high",
|
||||
"host": "Host",
|
||||
"http": "HTTP",
|
||||
"https": "HTTPS",
|
||||
"incidentsPage": {
|
||||
"resolveIncidentDialogCommentLabel": "Comment (optional)",
|
||||
"resolveIncidentDialogCommentPlaceholder": "Add a comment about the resolution...",
|
||||
"resolveIncidentDialogConfirm": "Resolve",
|
||||
"resolveIncidentDialogTitle": "Resolve Incident"
|
||||
},
|
||||
"integrations": "Integrations",
|
||||
"integrationsDiscord": "Discord",
|
||||
"integrationsDiscordInfo": "Connect with Discord and view incidents directly in a channel",
|
||||
"integrationsPrism": "Connect Prism to your favorite service.",
|
||||
"integrationsSlack": "Slack",
|
||||
"integrationsSlackInfo": "Connect with Slack and see incidents in a channel",
|
||||
"integrationsZapier": "Zapier",
|
||||
"integrationsZapierInfo": "Send all incidents to Zapier, and then see them everywhere",
|
||||
"invalidFileFormat": "Unsupported file format!",
|
||||
"invalidFileSize": "File size is too large!",
|
||||
"inviteNoTokenFound": "No invite token found",
|
||||
"LastName": "Last name",
|
||||
"logsPage": {
|
||||
"logLevelSelect": {
|
||||
"title": "Log level",
|
||||
"values": {
|
||||
"all": "All",
|
||||
"debug": "Debug",
|
||||
"error": "Error",
|
||||
"info": "Info",
|
||||
"warn": "Warn"
|
||||
}
|
||||
},
|
||||
"noLogs": "No logs found",
|
||||
"table": {
|
||||
"level": "Level",
|
||||
"logs": "logs",
|
||||
"message": "Message",
|
||||
"method": "Method",
|
||||
"service": "Service",
|
||||
"timestamp": "Timestamp"
|
||||
},
|
||||
"tabs": {
|
||||
"diagnostics": "Diagnostics",
|
||||
"logs": "Server logs",
|
||||
"queue": "Job queue"
|
||||
},
|
||||
"title": "Logs"
|
||||
},
|
||||
"low": "low",
|
||||
"maintenance": "maintenance",
|
||||
"maintenanceRepeat": "Maintenance Repeat",
|
||||
"maintenanceTableActionMenuDialogTitle": "Do you really want to remove this maintenance window?",
|
||||
"maintenanceWindowDescription": "During maintenance windows, all monitoring is suspended for selected monitors. No network checks will be performed, preventing any status updates or notifications from being triggered. Your monitors will appear frozen at their last known status, and status pages will display a maintenance indicator. Once the maintenance window ends, monitoring automatically resumes, and alerts will trigger if issues are detected. Maintenance periods do not count against uptime calculations.",
|
||||
"maintenanceWindowName": "Maintenance Window Name",
|
||||
"matchMethod": "Match Method",
|
||||
"matchMethodOptions": {
|
||||
"equal": "Equal",
|
||||
"include": "Include",
|
||||
"regex": "Regex"
|
||||
},
|
||||
"MaxSize": "Maximum Size",
|
||||
"mb": "MB",
|
||||
"mem": "Mem",
|
||||
"memory": "Memory",
|
||||
"memoryUsage": "Memory usage",
|
||||
"menu": {
|
||||
"changelog": "Changelog",
|
||||
"checks": "Checks",
|
||||
"discussions": "Discussions",
|
||||
"docs": "Docs",
|
||||
"incidents": "Incidents",
|
||||
"inviteMember": "Invite member",
|
||||
"infrastructure": "Infrastructure",
|
||||
"logOut": "Log out",
|
||||
"logs": "Logs",
|
||||
"maintenance": "Maintenance",
|
||||
"notifications": "Notifications",
|
||||
"pagespeed": "Pagespeed",
|
||||
"password": "Password",
|
||||
"profile": "Profile",
|
||||
"settings": "Settings",
|
||||
"statusPages": "Status pages",
|
||||
"support": "Support",
|
||||
"team": "Team",
|
||||
"uptime": "Uptime"
|
||||
},
|
||||
"message": "Message",
|
||||
"monitor": "monitor",
|
||||
"monitorHooks": {
|
||||
"failureAddDemoMonitors": "Failed to add demo monitors",
|
||||
"successAddDemoMonitors": "Successfully added demo monitors"
|
||||
},
|
||||
"monitors": "monitors",
|
||||
"monitorsToApply": "Monitors to apply maintenance window to",
|
||||
"ms": "ms",
|
||||
"navControls": "Controls",
|
||||
"network": "Network",
|
||||
"nextWindow": "Next window",
|
||||
"notFoundButton": "Go to the main dashboard",
|
||||
"notifications": {
|
||||
"fallback": {
|
||||
"actionButton": "Create notification channel!",
|
||||
"checks": [
|
||||
"Alert teams about downtime or performance issues",
|
||||
"Let engineers know when incidents happen",
|
||||
"Keep administrators informed of system changes"
|
||||
],
|
||||
"title": "A notification channel is used to:"
|
||||
},
|
||||
"fetch": {
|
||||
"failed": "Failed to fetch notifications"
|
||||
},
|
||||
"test": {
|
||||
"success": "Test notification sent successfully"
|
||||
}
|
||||
},
|
||||
"now": "Now",
|
||||
"os": "OS",
|
||||
|
||||
"pages": {
|
||||
"notFound": {
|
||||
"title": "Oh no! You dropped your sushi!",
|
||||
@@ -681,7 +270,32 @@
|
||||
},
|
||||
"auth": {
|
||||
"common": {
|
||||
"passwordRules": {},
|
||||
"passwordRules": {
|
||||
"length": {
|
||||
"beginning": "Must be at least",
|
||||
"highlighted": "8 characters long"
|
||||
},
|
||||
"lowercase": {
|
||||
"beginning": "Must contain at least",
|
||||
"highlighted": "one lower character"
|
||||
},
|
||||
"match": {
|
||||
"beginning": "Passwords",
|
||||
"highlighted": "must match"
|
||||
},
|
||||
"number": {
|
||||
"beginning": "Must contain at least",
|
||||
"highlighted": "one number"
|
||||
},
|
||||
"special": {
|
||||
"beginning": "Must contain at least",
|
||||
"highlighted": "one special character (!?@#$%^&*()-_=+[]{}|;:'\",./\\~`)"
|
||||
},
|
||||
"uppercase": {
|
||||
"beginning": "Must contain at least",
|
||||
"highlighted": "one upper character"
|
||||
}
|
||||
},
|
||||
"form": {
|
||||
"option": {
|
||||
"email": {
|
||||
@@ -798,7 +412,10 @@
|
||||
"label": "JSONPath expression"
|
||||
},
|
||||
"matchMethod": {
|
||||
"label": "Match method"
|
||||
"label": "Match method",
|
||||
"equal": "Equal",
|
||||
"include": "Include",
|
||||
"regex": "Regex"
|
||||
}
|
||||
},
|
||||
"title": "Advanced settings"
|
||||
@@ -807,7 +424,19 @@
|
||||
"description": "How often do you want to check the status of this monitor?",
|
||||
"option": {
|
||||
"frequency": {
|
||||
"label": "Check frequency"
|
||||
"label": "Check frequency",
|
||||
"value": {
|
||||
"fifteenMinutes": "15 minutes",
|
||||
"fifteenSeconds": "15 seconds",
|
||||
"fiveMinutes": "5 minutes",
|
||||
"fourMinutes": "4 minutes",
|
||||
"oneMinute": "1 minute",
|
||||
"tenMinutes": "10 minutes",
|
||||
"thirtyMinutes": "30 minutes",
|
||||
"thirtySeconds": "30 seconds",
|
||||
"threeMinutes": "3 minutes",
|
||||
"twoMinutes": "2 minutes"
|
||||
}
|
||||
}
|
||||
},
|
||||
"title": "Check frequency"
|
||||
@@ -833,6 +462,14 @@
|
||||
"url": {
|
||||
"label": "URL",
|
||||
"placeholder": "https://www.google.com"
|
||||
},
|
||||
"game": {
|
||||
"label": "Choose game",
|
||||
"placeholder": "Select a game"
|
||||
},
|
||||
"port": {
|
||||
"label": "Port to monitor",
|
||||
"placeholder": 80
|
||||
}
|
||||
},
|
||||
"title": "General settings",
|
||||
@@ -897,6 +534,15 @@
|
||||
},
|
||||
"incidents": {
|
||||
"dialog": {
|
||||
"resolveIncident": {
|
||||
"title": "Resolve incident",
|
||||
"option": {
|
||||
"comment": {
|
||||
"label": "Comment (optional)",
|
||||
"placeholder": "Add a comment about the resolution..."
|
||||
}
|
||||
}
|
||||
},
|
||||
"details": {
|
||||
"analysis": "Incident analysis",
|
||||
"comment": "Comment:",
|
||||
@@ -1371,272 +1017,5 @@
|
||||
"title": "An uptime monitor is used to:"
|
||||
}
|
||||
}
|
||||
},
|
||||
"pageSpeedAddApiKey": "to add your API key.",
|
||||
"pageSpeedLearnMoreLink": "Click here",
|
||||
"pageSpeedWarning": "Warning: You haven't added a Google PageSpeed API key yet. Without it, the PageSpeed monitor won't function.",
|
||||
"passwordPanel": {
|
||||
"confirmNewPassword": "Confirm new password",
|
||||
"currentPassword": "Current password",
|
||||
"enterCurrentPassword": "Enter your current password",
|
||||
"enterNewPassword": "Enter your new password",
|
||||
"newPassword": "New password",
|
||||
"passwordChangedSuccess": "Your password was changed successfully.",
|
||||
"passwordInputIncorrect": "Your password input was incorrect.",
|
||||
"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 (!?@#$%^&*()-_=+[]{}|;:'\",./\\~`)."
|
||||
},
|
||||
"pause": "Pause",
|
||||
"PhotoDescriptionText": "This photo will be displayed in your profile page.",
|
||||
"portToMonitor": "Port to monitor",
|
||||
"publicLink": "Public link",
|
||||
"queuePage": {
|
||||
"failedJobTable": {
|
||||
"failCountHeader": "Fail count",
|
||||
"failedAtHeader": "Last failed at",
|
||||
"failReasonHeader": "Fail reason",
|
||||
"monitorIdHeader": "Monitor ID",
|
||||
"monitorUrlHeader": "Monitor URL",
|
||||
"title": "Failed jobs"
|
||||
},
|
||||
"flushButton": "Flush queue",
|
||||
"jobTable": {
|
||||
"activeHeader": "Active",
|
||||
"failCountHeader": "Fail count",
|
||||
"idHeader": "Monitor ID",
|
||||
"intervalHeader": "Interval",
|
||||
"lastFinishedAtHeader": "Last finished at",
|
||||
"lastRunHeader": "Last run at",
|
||||
"lastRunTookHeader": "Last run took",
|
||||
"lockedAtHeader": "Locked at",
|
||||
"runCountHeader": "Run count",
|
||||
"title": "Jobs currently in queue",
|
||||
"typeHeader": "Type",
|
||||
"urlHeader": "URL"
|
||||
},
|
||||
"metricsTable": {
|
||||
"metricHeader": "Metric",
|
||||
"title": "Queue metrics",
|
||||
"valueHeader": "Value"
|
||||
},
|
||||
"refreshButton": "Refresh"
|
||||
},
|
||||
"rate": "Rate",
|
||||
"remove": "Remove",
|
||||
"repeat": "Repeat",
|
||||
"reset": "Reset",
|
||||
"response": "RESPONSE",
|
||||
"responseTime": "Response time",
|
||||
"resume": "Resume",
|
||||
"roles": {
|
||||
"admin": "Admin",
|
||||
"demoUser": "Demo user",
|
||||
"superAdmin": "Super admin",
|
||||
"teamMember": "Team member"
|
||||
},
|
||||
"save": "Save",
|
||||
"sendInvite": "Send invite",
|
||||
"selectAll": "Select all",
|
||||
"settingsFailedToClearStats": "Failed to clear stats",
|
||||
"settingsFailedToDeleteMonitors": "Failed to delete all monitors",
|
||||
"settingsFailedToSave": "Failed to save settings",
|
||||
"settingsGeneralSettings": "General settings",
|
||||
"settingsMonitorsDeleted": "Successfully deleted all monitors",
|
||||
"settingsPage": {
|
||||
"aboutSettings": {
|
||||
"labelDevelopedBy": "Developed by Bluewave Labs",
|
||||
"title": "About"
|
||||
},
|
||||
"demoMonitorsSettings": {
|
||||
"buttonAddMonitors": "Add demo monitors",
|
||||
"description": "Add sample monitors for demonstration purposes.",
|
||||
"title": "Demo monitors"
|
||||
},
|
||||
"emailSettings": {
|
||||
"buttonSendTestEmail": "Send test e-mail",
|
||||
"description": "Configure the email settings for your system. This is used to send notifications and alerts.",
|
||||
"descriptionTransport": "This builds an SMTP transport for NodeMailer",
|
||||
"labelAddress": "Email address - Used for authentication",
|
||||
"labelConnectionHost": "Email connection host - Hostname to use in the HELO/EHLO greeting",
|
||||
"labelHost": "Email host - Hostname or IP address to connect to",
|
||||
"labelIgnoreTLS": "Disable STARTTLS: Don't use TLS even if the server supports it",
|
||||
"labelPassword": "Email password - Password for authentication",
|
||||
"labelPasswordSet": "Password is set. Click Reset to change it.",
|
||||
"labelPool": "Enable connection pooling: Reuse existing connections to improve performance",
|
||||
"labelPort": "Email port - Port to connect to",
|
||||
"labelRejectUnauthorized": "Reject invalid certificates: Reject connections with self-signed or untrusted certificates",
|
||||
"labelRequireTLS": "Force STARTTLS: Require TLS upgrade, fail if not supported",
|
||||
"labelSecure": "Use SSL (recommended): Encrypt the connection using SSL/TLS",
|
||||
"labelTLSServername": "TLS Servername - Optional Hostname for TLS Validation when host is an IP",
|
||||
"labelUser": "Email user - Username for authentication, overrides email address if specified",
|
||||
"linkTransport": "See specifications here",
|
||||
"placeholderUser": "Leave empty if not required",
|
||||
"title": "Email",
|
||||
"toastEmailRequiredFieldsError": "Email address, host, port and password are required"
|
||||
},
|
||||
"globalThresholds": {
|
||||
"description": "Configure global CPU, Memory, Disk, and Temperature thresholds. If a value is provided, it will automatically be enabled for monitoring.",
|
||||
"title": "Global Thresholds"
|
||||
},
|
||||
"pageSpeedSettings": {
|
||||
"description": "Enter your Google PageSpeed API key to enable Google PageSpeed monitoring. Click Reset to update the key.",
|
||||
"labelApiKey": "PageSpeed API key",
|
||||
"labelApiKeySet": "API key is set. Click Reset to change it.",
|
||||
"title": "Google PageSpeed API key"
|
||||
},
|
||||
"saveButtonLabel": "Save",
|
||||
"statsSettings": {
|
||||
"clearAllStatsButton": "Clear all stats",
|
||||
"clearAllStatsDescription": "Clear all stats. This is irreversible.",
|
||||
"clearAllStatsDialogConfirm": "Yes, clear all stats",
|
||||
"clearAllStatsDialogDescription": "Once removed, the monitoring history and stats cannot be retrieved.",
|
||||
"clearAllStatsDialogTitle": "Do you want to clear all stats?",
|
||||
"description": "Define how long you want to retain historical data. You can also clear all existing data.",
|
||||
"title": "Monitor history"
|
||||
},
|
||||
"systemResetSettings": {
|
||||
"buttonRemoveAllMonitors": "Remove all monitors",
|
||||
"description": "Remove all monitors from your system.",
|
||||
"dialogConfirm": "Yes, remove all monitors",
|
||||
"dialogTitle": "Do you want to remove all monitors?",
|
||||
"title": "System reset"
|
||||
},
|
||||
"timezoneSettings": {
|
||||
"description": "Select the timezone used to display dates and times throughout the application.",
|
||||
"title": "Display timezone"
|
||||
},
|
||||
"title": "Settings",
|
||||
"uiSettings": {
|
||||
"chartTypeHeatmap": "Heatmap",
|
||||
"chartTypeHistogram": "Histogram",
|
||||
"description": "Switch between light and dark mode, or change user interface language.",
|
||||
"labelChartType": "Chart type",
|
||||
"labelLanguage": "Language",
|
||||
"labelTheme": "Theme mode",
|
||||
"title": "Appearance"
|
||||
},
|
||||
"urlSettings": {
|
||||
"description": "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.",
|
||||
"label": "Display IP/URL on status page",
|
||||
"selectDisabled": "Disabled",
|
||||
"selectEnabled": "Enabled",
|
||||
"title": "Monitor IP/URL on Status Page"
|
||||
}
|
||||
},
|
||||
"settingsStatsCleared": "Stats cleared successfully",
|
||||
"settingsSuccessSaved": "Settings saved successfully",
|
||||
"settingsTestEmailFailed": "Failed to send test email",
|
||||
"settingsTestEmailFailedWithReason": "Failed to send test email: {{reason}}",
|
||||
"settingsTestEmailSuccess": "Test email sent successfully",
|
||||
"settingsTestEmailUnknownError": "Unknown error",
|
||||
"shown": "Shown",
|
||||
"starPromptDescription": "See the latest releases and help grow the community on GitHub",
|
||||
"starPromptTitle": "Star Checkmate",
|
||||
"startTime": "Start time",
|
||||
"state": "State",
|
||||
"status": "Status",
|
||||
"statusCode": "Status code",
|
||||
"statusPage": {
|
||||
"contents": "Contents",
|
||||
"deleteFailed": "Failed to delete status page",
|
||||
"deleteSuccess": "Status page deleted successfully",
|
||||
"generalSettings": "General settings",
|
||||
"details": {
|
||||
"statusHeader": {
|
||||
"allUp": "All systems operational",
|
||||
"allDown": "All systems are experiencing issues",
|
||||
"anyDown": "Some systems are experiencing issues"
|
||||
}
|
||||
}
|
||||
},
|
||||
"statusPageCreate": {
|
||||
"buttonSave": "Save"
|
||||
},
|
||||
"statusPageStatusServiceStatus": "Service status",
|
||||
"submit": "Submit",
|
||||
"SupportedFormats": "Supported formats",
|
||||
"teamPanel": {
|
||||
"addTeamMember": {
|
||||
"addButton": "Add Member",
|
||||
"addMemberMenu": "Add Team Member",
|
||||
"description": "Create a new user and share the credentials with them. This method gives the member immediate access to all monitors.",
|
||||
"title": "Register new team member"
|
||||
},
|
||||
"addMember": "Add member",
|
||||
"cancel": "Cancel",
|
||||
"changeTeamPassword": {
|
||||
"changePasswordMenu": "Reset Password",
|
||||
"description": "Create a new password for this team member. You will need to share the password with them securely.",
|
||||
"success": "Password successfully reset. Make sure to provide the credentials to the member in a secure way.",
|
||||
"title": "Reset team member password"
|
||||
},
|
||||
"email": "Email",
|
||||
"emailToken": "E-mail token",
|
||||
"filter": {
|
||||
"all": "All",
|
||||
"member": "Member"
|
||||
},
|
||||
"getToken": "Get token",
|
||||
"inviteDescription": "When you add a new team member, they will get access to all monitors.",
|
||||
"inviteLink": "Invite link",
|
||||
"inviteNewTeamMember": "Invite new team member",
|
||||
"inviteTeamMember": "Invite a team member",
|
||||
"noMembers": "There are no team members with this role",
|
||||
"register": "Register a team member",
|
||||
"registerTeamMember": {
|
||||
"auth": {
|
||||
"common": {
|
||||
"inputs": {
|
||||
"role": {
|
||||
"errors": {
|
||||
"empty": "Role is required"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"registerToast": {
|
||||
"success": "User created, share credentials with the member securely."
|
||||
},
|
||||
"role": "Role",
|
||||
"selectRole": "Select role",
|
||||
"table": {
|
||||
"created": "Created",
|
||||
"email": "Email",
|
||||
"name": "Name",
|
||||
"role": "Role"
|
||||
},
|
||||
"teamMembers": "Team members"
|
||||
},
|
||||
"time": {
|
||||
"fifteenMinutes": "15 minutes",
|
||||
"fifteenSeconds": "15 seconds",
|
||||
"fiveMinutes": "5 minutes",
|
||||
"fourMinutes": "4 minutes",
|
||||
"oneMinute": "1 minute",
|
||||
"tenMinutes": "10 minutes",
|
||||
"thirtyMinutes": "30 minutes",
|
||||
"thirtySeconds": "30 seconds",
|
||||
"threeMinutes": "3 minutes",
|
||||
"twoMinutes": "2 minutes"
|
||||
},
|
||||
"timezone": "Timezone",
|
||||
"timeZoneInfo": "All dates and times are in GMT+0 time zone.",
|
||||
"title": "Title",
|
||||
"total": "Total",
|
||||
"type": "Type",
|
||||
"update": "Update",
|
||||
"uptime": "Uptime",
|
||||
"url": "URL",
|
||||
"used": "Used",
|
||||
"window": "window",
|
||||
"YourPhoto": "Profile photo",
|
||||
"failedDeleteMonitor": "Failed to delete monitor",
|
||||
"failedPauseMonitor": "Failed to pause monitor",
|
||||
"hour": "hour",
|
||||
"minute": "minute",
|
||||
"monitorDeleted": "Monitor deleted successfully",
|
||||
"monitorPaused": "Monitor paused successfully",
|
||||
"monitorResumed": "Monitor resumed successfully",
|
||||
"name": "Name"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
const fs = require("fs");
|
||||
const path = require("path");
|
||||
|
||||
function flattenKeys(obj, prefix = "", result = []) {
|
||||
for (const key in obj) {
|
||||
if (obj.hasOwnProperty(key)) {
|
||||
const newKey = prefix ? `${prefix}.${key}` : key;
|
||||
|
||||
if (
|
||||
typeof obj[key] === "object" &&
|
||||
obj[key] !== null &&
|
||||
!Array.isArray(obj[key])
|
||||
) {
|
||||
flattenKeys(obj[key], newKey, result);
|
||||
} else {
|
||||
result.push(newKey);
|
||||
}
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
// Paths
|
||||
const localesDir = path.join(__dirname, "../client/src/locales");
|
||||
const inputPath = path.join(localesDir, "en.json");
|
||||
const outputPath = path.join(localesDir, "keys.json");
|
||||
|
||||
try {
|
||||
const jsonContent = fs.readFileSync(inputPath, "utf8");
|
||||
const jsonData = JSON.parse(jsonContent);
|
||||
|
||||
const flattenedKeys = flattenKeys(jsonData);
|
||||
flattenedKeys.sort();
|
||||
|
||||
fs.writeFileSync(outputPath, JSON.stringify(flattenedKeys, null, 2), "utf8");
|
||||
|
||||
console.log(`Keys written to: ${outputPath}`);
|
||||
} catch (error) {
|
||||
console.error(error.message);
|
||||
process.exit(1);
|
||||
}
|
||||
Reference in New Issue
Block a user