feat(i18n): localize frontend components and add missing translations

- Replaced hardcoded UI strings with translation keys across frontend files
- Added and updated English(en) and Khmer(km) translation files for settings, notifications, and server components
- Improved localization and multi-language support throughout the frontend
This commit is contained in:
lyker189
2025-10-02 05:10:11 +07:00
parent a4364936e3
commit b6ef4ff7a5
62 changed files with 2721 additions and 639 deletions
+71
View File
@@ -0,0 +1,71 @@
import { DockerTranslations } from '../types/docker';
export const dockerTranslations: DockerTranslations = {
dockerContainers: "Docker Containers",
container: "Container",
status: "Status",
cpuUsage: "CPU Usage",
memory: "Memory",
disk: "Disk",
uptime: "Uptime",
lastChecked: "Last Checked",
actions: "Actions",
searchContainersPlaceholder: "Search containers...",
refresh: "Refresh",
openMenu: "Open menu",
viewMetrics: "View Metrics",
viewDetails: "View Details",
running: "Running",
stopped: "Stopped",
warning: "Warning",
unknown: "Unknown",
totalContainers: "Total Containers",
containersLabel: "Containers",
noContainersFound: "No containers found",
noContainersRunning: "No containers running",
tryAdjustSearch: "Try adjusting your search terms.",
startSomeContainers: "Start some containers to see them here.",
containerMetricsTitle: "Container Metrics: {name}",
dockerId: "Docker ID",
loadingMetrics: "Loading metrics...",
errorLoadingMetrics: "Error loading metrics",
noMetricsAvailable: "No metrics data available for this container",
minutes60: "60 minutes",
day1: "1 day",
days7: "7 days",
month1: "1 month",
months3: "3 months",
used: "Used:",
free: "Free:",
total: "Total:",
usage: "Usage:",
cpu: "CPU",
memoryTitle: "Memory",
diskTitle: "Disk",
network: "Network",
cpuUsagePct: "CPU Usage (%)",
cpuUsageVsAvailable: "CPU Usage vs Available",
cpuAvailablePct: "CPU Available (%)",
ramUsagePct: "RAM Usage (%)",
memoryUsageBytes: "Memory Usage (Bytes)",
usedMemory: "Used Memory",
totalMemory: "Total Memory",
diskUsagePct: "Disk Usage (%)",
diskUsageBytes: "Disk Usage (Bytes)",
usedDisk: "Used Disk",
totalDisk: "Total Disk",
networkTraffic: "Network Traffic",
networkSpeedKbs: "Network Speed (KB/s)",
rxBytes: "RX Bytes",
txBytes: "TX Bytes",
rxSpeedKbs: "RX Speed (KB/s)",
txSpeedKbs: "TX Speed (KB/s)",
};
+11 -1
View File
@@ -9,6 +9,11 @@ import { maintenanceTranslations } from './maintenance';
import { incidentTranslations } from './incident';
import { sslTranslations } from './ssl';
import { settingsTranslations } from './settings';
import { instanceTranslations } from './instance';
import { operationTranslations } from './operation';
import { regionTranslations } from './region';
import { dockerTranslations } from './docker';
import { publicTranslations } from './public';
const enTranslations: Translations = {
common: commonTranslations,
@@ -19,7 +24,12 @@ const enTranslations: Translations = {
maintenance: maintenanceTranslations,
incident: incidentTranslations,
ssl: sslTranslations,
settings: settingsTranslations
settings: settingsTranslations,
instance: instanceTranslations,
operation: operationTranslations,
region: regionTranslations,
docker: dockerTranslations,
public: publicTranslations
};
export default enTranslations;
+169
View File
@@ -0,0 +1,169 @@
import { InstanceTranslations } from '../types/instance';
export const instanceTranslations: InstanceTranslations = {
// InstanceMonitoring.tsx
instanceMonitoring: "Instance Monitoring",
describeMonitorInstance: "Monitor and manage your server instances in real-time",
addServerAgent: "Add Server Agent",
errorLoadingServers: "Error loading servers",
unableToFetchServerData: "Unable to fetch server data. Please check your connection and try again.",
retry: "Retry",
// ServerTable.tsx
servers: "Servers",
loadingServers: "Loading servers...",
searchServersPlaceholder: "Search servers...",
noServersFound: "No servers found",
name: "Name",
status: "Status",
OS: "OS",
IPAddress: "IP Address",
CPU: "CPU",
memory: "Memory",
disk: "Disk",
uptime: "Uptime",
lastChecked: "Last Checked",
actions: "Actions",
viewServerDetail: "View Server Detail",
containerMonitoring: "Container Monitoring",
resumeMonitoring: "Resume Monitoring",
pauseMonitoring: "Pause Monitoring",
editServer: "Edit Server",
deleteServer: "Delete Server",
deleteServerConfirmTitle: "Are you sure you want to delete this server?",
deleteServerConfirmDesc: "This action cannot be undone. This will permanently delete {name} and all of its monitoring data.",
cancel: "Cancel",
deleting: "Deleting...",
delete: "Delete",
serverDeleted: "Server deleted",
serverDeletedDesc: "{name} has been deleted successfully.",
error: "Error",
deleteServerError: "Failed to delete server. Please try again.",
serverPaused: "Server paused",
serverResumed: "Server resumed",
monitoringPaused: "Monitoring paused for {name}",
monitoringResumed: "Monitoring resumed for {name}",
pauseServerError: "Failed to pause server monitoring. Please try again.",
resumeServerError: "Failed to resume server monitoring. Please try again.",
// server cards
totalServers: "TOTAL SERVERS",
onlineServers: "ONLINE SERVERS",
offlineServers: "OFFLINE SERVERS",
warningServers: "WARNING SERVERS",
// AddServerAgentDialog.tsx
addServerMonitoringAgent: "Add Server Monitoring Agent",
configureAgentDesc: "Configure a new server monitoring agent to track system metrics and performance.",
configureAgent: "Configure Agent",
oneClickInstall: "One-Click Install",
dockerOneClick: "Docker One-Click",
manualInstallation: "Manual Installation",
validationError: "Validation Error",
fillRequiredFields: "Please fill in all required fields.",
serverAgentCreated: "Server Agent Created",
serverAgentCreatedDesc: "{name} monitoring agent has been configured successfully.",
failedToCreateAgent: "Failed to create server monitoring agent.",
// ServerAgentConfigForm.tsx
serverName: "Server Name",
serverNamePlaceholder: "e.g., web-server-01",
serverNameDesc: "What is the name or label used as the identifier",
serverAgentId: "Server Agent ID",
serverAgentIdDesc: "Auto-generated unique identifier",
operatingSystem: "Operating System",
checkInterval: "Check Interval",
selectInterval: "Select interval",
interval30s: "30 seconds",
interval1m: "1 minute",
interval2m: "2 minutes",
interval5m: "5 minutes",
checkIntervalDesc: "How often to check the server and metric status",
retryAttempts: "Retry Attempts",
selectRetryAttempts: "Select retry attempts",
attempt1: "1 attempt",
attempt2: "2 attempts",
attempt3: "3 attempts",
attempt5: "5 attempts",
retryAttemptsDesc: "Number of retry attempts before marking as down",
serverToken: "Server Token",
serverTokenDesc: "Auto-generated authentication token",
systemUrl: "System URL",
systemUrlDesc: "Current system API URL",
creatingAgent: "Creating Agent...",
createServerAgent: "Create Server Agent"
,
// EditServerDialog.tsx
editServerConfiguration: "Edit Server Configuration",
serverNameLabel: "Server Name *",
enterServerNamePlaceholder: "Enter server name",
checkIntervalLabel: "Check Interval",
interval10m: "10 minutes",
maxRetriesLabel: "Max Retries",
selectMaxRetries: "Select max retries",
retry1: "1 retry",
retry2: "2 retries",
retry3: "3 retries",
retry5: "5 retries",
retry10: "10 retries",
dockerMonitoring: "Docker Monitoring",
enabled: "Enabled",
disabled: "Disabled",
enableNotifications: "Enable Notifications",
notificationSettings: "Notification Settings",
notificationChannels: "Notification Channels",
loadingChannels: "Loading channels...",
noChannelsAvailable: "No notification channels available",
selectedChannels: "Selected Channels:",
serverSetThreshold: "Server Set Threshold",
loadingThresholds: "Loading thresholds...",
selectServerThreshold: "Select server threshold",
noThreshold: "No threshold (use default)",
thresholdDetails: "Threshold Details",
cpuThresholdPct: "CPU Threshold (%)",
ramThresholdPct: "RAM Threshold (%)",
diskThresholdPct: "Disk Threshold (%)",
networkThresholdPct: "Network Threshold (%)",
serverTemplate: "Server Template",
loadingTemplates: "Loading templates...",
selectServerTemplate: "Select server template",
noTemplate: "No template (use default)",
templateDetails: "Template Details",
ramMessage: "RAM Message",
cpuMessage: "CPU Message",
diskMessage: "Disk Message",
networkMessage: "Network Message",
upMessage: "Up Message",
downMessage: "Down Message",
noMessageDefined: "No {name} message defined",
serverUpdated: "Server updated",
serverUpdatedDesc: "{name} has been updated successfully.",
updating: "Updating...",
updateServer: "Update Server",
failedToLoadChannels: "Failed to load notification channels",
failedToLoadTemplates: "Failed to load templates",
failedToLoadThresholds: "Failed to load server thresholds",
warning: "Warning",
serverUpdatedButThresholdFailed: "Server updated but failed to update threshold values.",
failedToUpdateServer: "Failed to update server. Please try again.",
// ServerHistoryCharts.tsx
historicalPerformance: "Historical Performance",
loading: "Loading...",
errorLoadingChartData: "Error loading chart data",
noHistoricalData: "No historical data available for {{timeRange}}",
rawMetricsCount: "Raw metrics count: {{count}}",
serverIdTimeRange: "Server ID: {{serverId}} • Time Range: {{timeRange}}",
dataExistsOutsideRange: "Data exists but may be outside selected time range",
noMetricsDataFound: "No metrics data found",
dataPointsTimeRange: "{{count}} data points • {{timeRange}}",
// updating: "Updating...",
};
@@ -0,0 +1,87 @@
import { OperationTranslations } from '../types/operation';
export const operationTranslations: OperationTranslations = {
// OperationalPageContent.tsx
failedToLoadOperationalPages: "Failed to load operational pages",
loadingoperationalPages: "There was an error loading your operational pages. Please try again.",
tryagain: "Try Again",
operationalPages: "Operational Pages",
describeOperation: "Manage your public status pages and monitor service health",
refresh: "Refresh",
noOperationalPagesFound: "No operational pages found",
createYourFirstOperationalPage: "Create your first operational page to start monitoring your services and communicate status to your users.",
totalPages: "Total Pages",
publicPages: "Public Pages",
operational: "Operational",
deleteOperationalPage: "Delete Operational Page",
deleteOperationalPageConfirm: 'Are you sure you want to delete "{title}"? This action cannot be undone and will permanently remove the operational page and all its components.',
cancel: "Cancel",
delete: "Delete",
deleting: "Deleting...",
// EditOperationalPageDialog.tsx
editOperationalPage: "Edit Operational Page",
updateYourOperationalPage: "Update your operational status page settings and manage components.",
title: "Title",
myServiceStatusPlaceholder: "My Service Status",
slug: "Slug",
myServiceStatusSlugPlaceholder: "my-service-status",
description: "Description",
operationalPageDescriptionPlaceholder: "A brief description of your operational page",
theme: "Theme",
selectTheme: "Select theme",
themeDefault: "Default",
themeDark: "Dark",
themeLight: "Light",
status: "Status",
selectStatus: "Select status",
statusOperational: "Operational",
statusDegraded: "Degraded Performance",
statusMaintenance: "Under Maintenance",
statusMajorOutage: "Major Outage",
publicPage: "Public Page",
makePagePublic: "Make this page publicly accessible",
customDomainOptional: "Custom Domain (Optional)",
customDomainPlaceholder: "status.yourdomain.com",
customDomainDescription: "Custom domain for your status page",
cancelUpdate: "Cancel",
updating: "Updating...",
updatePage: "Update Page",
// ComponentsSelector.tsx
statusPageComponents: "Status Page Components",
addMonitoringComponentsDesc: "Add monitoring components like uptime services, SSL certificates, and incident tracking",
selectedComponents: "Selected Components",
service: "Service",
server: "Server",
addComponent: "Add Component",
componentName: "Component Name",
componentNamePlaceholder: "e.g., Main Website",
displayOrder: "Display Order",
descriptionOptional: "Description (Optional)",
descriptionPlaceholder: "Brief description of this component",
uptimeServiceOptional: "Uptime Service (Optional)",
selectUptimeService: "Select an uptime service",
serverIdOptional: "Server ID (Optional)",
serverIdPlaceholder: "server_456",
cancelComponent: "Cancel",
// OperationalPageCard.tsx
public: "Public",
yes: "Yes",
no: "No",
updated: "Updated",
view: "View",
edit: "Edit",
// CreateOperationalPageDialog.tsx
createOperationalPage: "Create Operational Page",
createOperationalPageDesc: "Create a new operational status page to monitor your services and components.",
createPage: "Create Page",
creating: "Creating...",
initialStatus: "Initial Status",
};
+23
View File
@@ -0,0 +1,23 @@
import { PublicTranslations } from '../types/public';
export const publicTranslations: PublicTranslations = {
systemStatus: "System Status",
allOperational: "All systems are operational",
degradedPerformance: "Some systems are experiencing degraded performance",
underMaintenance: "Systems are currently under maintenance",
majorOutage: "We are experiencing a major service outage",
statusUnknown: "Status unknown",
autoUpdatedByHealth: "Status automatically updated based on component health",
lastUpdatedAt: "Last updated: {time} UTC",
liveStatusMonitoring: "Live status monitoring",
loadingStatusPage: "Loading Status Page",
fetchingRealtimeStatus: "Fetching real-time system status...",
slugLabel: "Slug",
statusPageNotFound: "Status Page Not Found",
notFoundDescription: "The requested status page could not be found or is not publicly accessible.",
goBack: "Go Back",
retry: "Retry",
};
+94
View File
@@ -0,0 +1,94 @@
import { RegionTranslations } from '../types/region';
export const regionTranslations: RegionTranslations = {
//RegionalMonitoringContent.tsx
regionalmonitoring: "Regional Monitoring",
descriptRegionPage: "Monitor your infrastructure from multiple regions for better reliability.",
addRegionalAgent: "Add Regional Agent",
totalAgents: "Total Agents",
regionalMonitoringAgents: "Regional monitoring agents",
onlineAgents: "Online Agents",
currentlyConnected: "Currently connected",
offlineAgents: "Offline Agents",
disconnectedAgents: "Disconnected agents",
regionalAgents: "Regional Agents",
noRegionalAgents: "No Regional Agents",
getStartedAddAgent: "Get started by adding your first regional monitoring agent to extend your monitoring coverage.",
addFirstAgent: "Add First Agent",
agentRemoved: "Agent Removed",
agentRemovedDesc: "The regional monitoring agent has been removed.",
regionalAgentAdded: "Regional Agent Added",
regionalAgentAddedDesc: "The regional monitoring agent has been successfully configured.",
error: "Error",
failedToRemoveAgent: "Failed to remove the regional monitoring agent.",
//AddRegionalAgentDialog.tsx
addRegionalMonitoringAgent: "Add Regional Monitoring Agent",
deployRegionalMonitoringAgent: "Deploy a regional monitoring agent with automatic one-click installation.",
regionName: "Region Name",
regionNamePlaceholder: "e.g., us-east-1, europe-west-1, asia-pacific-1",
agentServerIpAddress: "Agent Server IP Address",
agentIpPlaceholder: "e.g., 192.168.1.100 or your-server.example.com",
cancel: "Cancel",
generateInstallation: "Generate Installation",
generating: "Generating...",
agentConfigurationReady: "Agent Configuration Ready!",
oneClickInstallScriptGenerated: "One-click installation script generated with automatic configuration.",
oneClickInstallTab: "One-Click Install",
agentDetailsTab: "Agent Details",
manualInstallTab: "Manual Install",
oneClickAutomaticInstallation: "One-Click Automatic Installation",
completeInstallationDescription: "Complete installation, configuration, and service startup in one command",
whatThisScriptDoes: "What this script does automatically:",
scriptActionDownload: "Downloads the latest .deb package",
scriptActionInstall: "Installs the regional monitoring agent",
scriptActionConfigure: "Creates configuration file with your settings",
scriptActionStart: "Starts and enables the service",
scriptActionHealthChecks: "Runs health checks",
runCommandOnServer: "Run this command on your target server:",
downloadCompleteScript: "Download Complete Script",
copyFullScript: "Copy Full Script",
localDevelopmentNotice: "<strong>Local Development Notice:</strong> If clipboard copying fails, this is normal in local development. You can use the 'Download Complete Script' button instead or manually copy the text.",
generatedAgentConfiguration: "Generated Agent Configuration",
autoConfiguredDuringInstallation: "These values will be automatically configured during installation",
agentId: "Agent ID",
regionNameDetail: "Region Name",
serverIp: "Server IP",
apiEndpoint: "API Endpoint",
authenticationToken: "Authentication Token",
configurationFileLocation: "<strong>Configuration file location:</strong> /etc/regional-check-agent/regional-check-agent.env",
manualInstallationSteps: "Manual Installation Steps",
stepByStepManualInstallation: "Step-by-step manual installation process",
step1DownloadPackage: "Step 1: Download Package",
downloadAmd64Notice: "✅ If youre using the amd64 architecture, please download this package.",
downloadArm64Notice: "✅ If youre using the arm64 architecture, please download this package.",
step2InstallPackage: "Step 2: Install Package",
step3ConfigureAgent: "Step 3: Configure Agent",
copySampleConfiguration: "Copy sample configuration from https://github.com/operacle/Distributed-Regional-Monitoring/blob/main/packaging/regional-check-agent.conf",
addConfigurationValues: "Add the configuration values shown in the Agent Details tab",
step4StartService: "Step 4: Start Service",
step5VerifyInstallation: "Step 5: Verify Installation",
addAnotherAgent: "Add Another Agent",
completeSetup: "Complete Setup",
copied: "Copied!",
copiedDescription: "{description} copied to clipboard.",
copyFailed: "Copy failed",
copyFailedDescription: "Failed to copy to clipboard.",
copyFailedLocalhost: "This is common in local development. Please manually copy the text.",
copyFailedChrome: "Try using HTTPS or enable clipboard permissions.",
downloaded: "Downloaded!",
downloadedDescription: "Installation script downloaded successfully.",
failedToCreateAgent: "Failed to create regional agent configuration.",
//RegionalAgentCard.tsx
defaultBadge: "Default",
copyAgentId: "Copy Agent ID",
removeAgent: "Remove Agent",
online: "Online",
offline: "Offline",
lastUpdated: "Last Updated:",
activeMonitoring: "Active monitoring",
connectionLost: "Connection lost",
};
@@ -136,4 +136,65 @@ export const servicesTranslations: ServicesTranslations = {
processing: "Processing",
back: "Back",
last20Checks: "Last 20 checks",
//OneClickInstallTab.tsx
oneClickInstallTitle: "One-Click Install (Recommended)",
oneClickInstallDesc: "Copy and paste this single command to install the monitoring agent instantly",
quickInstallCommand: "Quick Install Command",
copy: "Copy",
runCommandOnServer: "Simply run this command on your server:",
sshIntoServer: "SSH into your target server",
pasteAndRun: "Paste and run the command above",
agentInstalled: "The agent will be installed and started automatically",
done: "Done",
// DockerOneClickTab.tsx
dockerOneClickTitle: "Docker One-Click Install",
dockerOneClickDesc: "Automated Docker container installation with system monitoring capabilities",
dockerOneClickCommand: "Docker One-Click Command",
dockerScriptWill: "This script will automatically:",
dockerScriptStep1: "Download and setup the Docker monitoring agent",
dockerScriptStep2: "Configure all required environment variables",
dockerScriptStep3: "Start the container with proper system access",
dockerScriptStep4: "Setup monitoring data persistence",
directDockerTitle: "Direct Docker Run Command",
directDockerDesc: "If you prefer to run the Docker container directly without the script",
dockerRunCommand: "Docker Run Command",
dockerPrerequisites: "Prerequisites for direct Docker run:",
dockerPrereqStep1: "Docker must be installed and running",
dockerPrereqStep2: "The operacle/checkcle-server-agent image must be available",
dockerPrereqStep3: "Run as root or with sudo privileges",
// ManualInstallTab.tsx
manualInstallTitle: "Manual Installation Steps",
manualInstallDesc: "Step-by-step installation process",
serverName: "Server Name",
agentId: "Agent ID",
osType: "OS Type",
downloadScript: "Download the installation script",
makeExecutable: "Make the script executable",
runInstall: "Run the installation with your configuration",
prerequisites: "Prerequisites:",
prereqRoot: "Ensure you have root/sudo access on the target server",
prereqCurl: "Make sure curl is installed for downloading files",
prereqInternet: "Internet connection required for downloading script",
afterInstall: "After Installation:",
agentWillStart: "The agent will start automatically and appear in your dashboard within a few minutes.",
// ServerDetail.tsx
errorLoadingServer: "Error loading server",
unableToFetchServerData: "Unable to fetch server data. Please check your connection and try again.",
backToServers: "Back to Servers",
loadingServerDetails: "Loading server details...",
serverDetail: "Server Detail",
monitorServerMetrics: "Monitor server performance metrics and system health",
serverHostnameIpOs: "{hostname} • {ip_address} • {os_type}",
// ContainerMonitoring.tsx
errorLoadingContainers: "Error loading containers",
unableToFetchContainerData: "Unable to fetch container data. Please check your connection and try again.",
errorUnknown: "Unknown error",
containerMonitoring: "Container Monitoring",
monitorAndManageContainers: "Monitor and manage your Docker containers in real-time",
serverIdLabel: "Server ID",
};
+104
View File
@@ -60,4 +60,108 @@ export const settingsTranslations: SettingsTranslations = {
permissionNoticeAddUser: "As an admin user, you do not have access to view or modify system and mail settings. These settings can only be accessed and modified by Super Admins. Contact your Super Admin if you need to make changes to system configuration or mail settings.",
loadingSettings: "Loading settings...",
loadingSettingsError: "Error loading settings",
//NotificationSettings.ts
titleNotification: "Notification Settings",
descriptionChannelsServices: "Configure notification channels for your services",
addChannel: "Add Channel",
all: "All Channels",
telegram: "Telegram",
discord: "Discord",
slack: "Slack",
signal: "Signal",
googleChat: "Google Chat",
email: "Email",
webhook: "Webhook",
// NotificationChannelDialog.tsx
editChannel: "Edit Notification Channel",
addChannelDialog: "Add Notification Channel",
channelName: "Channel Name",
channelNameDesc: "A name to identify this notification channel",
channelType: "Channel Type",
selectType: "Select notification type",
enabled: "Enabled",
enabledDesc: "Enable or disable this notification channel",
cancel: "Cancel",
updateChannel: "Update Channel",
createChannel: "Create Channel",
payloadTemplates: "Payload Templates",
availablePlaceholders: "Available Placeholders:",
server: "Server",
service: "Service",
ssl: "SSL",
common: "Common",
webhookUrl: "Webhook URL",
webhookUrlDesc: "The URL where webhook notifications will be sent",
payloadTemplate: "Payload Template (Optional)",
payloadTemplateDesc: "JSON template for the webhook payload. Leave empty to use default template.",
telegramChatId: "Chat ID",
telegramChatIdDesc: "The Telegram chat ID to send notifications to",
botToken: "Bot Token",
botTokenDesc: "Your Telegram bot token from @BotFather",
discordWebhookUrl: "Webhook URL",
discordWebhookUrlDesc: "Discord webhook URL from your server settings",
slackWebhookUrl: "Webhook URL",
slackWebhookUrlDesc: "Slack incoming webhook URL",
signalNumber: "Signal Number",
signalNumberDesc: "Signal phone number to send notifications to",
signalApiEndpoint: "Signal API Endpoint",
signalApiEndpointDesc: "The Rest API endpoint for your Signal service",
googleChatWebhookUrl: "Google Chat Webhook URL",
googleChatWebhookUrlDesc: "Google Chat webhook URL from your Google Chat space",
emailAddress: "Email Address",
emailAddressDesc: "Email address to send notifications to",
emailSenderName: "Sender Name",
emailSenderNameDesc: "Display name for outgoing emails",
smtpServer: "SMTP Server",
// smtpPort: "SMTP Port",
// smtpPassword: "SMTP Password",
smtpPasswordDesc: "Password for authenticating with the SMTP server",
ntfyEndpoint: "NTFY Endpoint",
ntfyEndpointDesc: "The NTFY endpoint URL including your topic (e.g., https://ntfy.sh/checkcle)",
apiToken: "API Token",
apiTokenOptional: "API Token (Optional)",
apiTokenDesc: "Optional API token for authentication with NTFY server",
pushoverUserKey: "User Key",
pushoverUserKeyDesc: "Your Pushover user key (or group key)",
notifiarrChannelId: "Channel ID",
notifiarrChannelIdDesc: "The Discord channel ID where notifications will be sent",
gotifyServerUrl: "Server URL",
gotifyServerUrlDesc: "The URL of your Gotify server",
errorSaveChannel: "Failed to save notification channel",
channelNamePlaceholder: "My Notification Channel",
telegramChatIdPlaceholder: "Telegram Chat ID",
botTokenPlaceholder: "Telegram Bot Token",
discordWebhookUrlPlaceholder: "https://discord.com/api/webhooks/...",
slackWebhookUrlPlaceholder: "https://hooks.slack.com/services/...",
signalNumberPlaceholder: "+1234567890",
signalApiEndpointPlaceholder: "https://your-signal-api.com/v2/send",
googleChatWebhookUrlPlaceholder: "https://chat.googleapis.com/v1/spaces/...",
emailAddressPlaceholder: "notifications@example.com",
emailSenderNamePlaceholder: "Alert System",
smtpServerPlaceholder: "smtp.gmail.com",
smtpPortPlaceholder: "587",
smtpPasswordPlaceholder: "Enter your SMTP password",
ntfyEndpointPlaceholder: "https://ntfy.sh/your-topic",
apiTokenPlaceholder: "Enter API token",
pushoverUserKeyPlaceholder: "Your Pushover user key",
notifiarrChannelIdPlaceholder: "Discord Channel ID",
gotifyServerUrlPlaceholder: "https://your-gotify-server.com",
webhookUrlPlaceholder: "https://api.example.com/webhook",
// DataRetentionSettings.tsx
// permissionNotice: "Permission Notice:",
permissionNoticeDataRetention: "As an admin user, you do not have access to data retention settings. These settings can only be accessed and modified by Super Admins.",
loadingRetentionSettings: "Loading retention settings...",
dataRetention: "Data Retention Settings",
dataRetentionDescription: "Configure how long monitoring data is kept in the system",
uptimeRetentionLabel: "Uptime Monitoring Retention (days)",
uptimeRetentionHelp: "Service uptime and incident data older than this will be automatically deleted",
serverRetentionLabel: "Server Monitoring Retention (days)",
serverRetentionHelp: "Server metrics and process data older than this will be automatically deleted",
lastCleanup: "Last automatic cleanup",
// save: "Save Changes"
};
+15
View File
@@ -16,4 +16,19 @@ export const aboutTranslations: AboutTranslations = {
quickActionsDescription: "ចូលប្រើប្រតិបត្តិការត្រួតពិនិត្យ និងមុខងារទូទៅយ៉ាងរហ័ស។ ជ្រើសរើសសកម្មភាពខាងក្រោមដើម្បីចាប់ផ្តើម។",
quickTips: "គន្លឹះរហ័ស",
releasedOn: "បានចេញផ្សាយនៅថ្ងៃទី",
updateSchema: "ធ្វើបច្ចុប្បន្នភាព Schema",
updateSchemaDesc: "បញ្ចូល Schema នៃការប្រមូលដោយស្វ័យប្រវត្តិ",
mergeFieldsLabel: "បញ្ចូល fields ជាមួយនឹងការប្រមូលដែលមានស្រាប់ (សុវត្ថិភាព - រក្សាទិន្នន័យ)",
importing: "កំពុងបញ្ចូល...",
clickToUpdateSchema: "ចុចដើម្បីធ្វើបច្ចុប្បន្នភាព Schema",
importSuccessful: "បញ្ចូលជោគជ័យ",
importFailed: "បញ្ចូលបរាជ័យ",
instructions: "ការណែនាំ",
mergeFields: "បញ្ចូល fields",
instructionsMergeFields: "បន្ថែម fields ថ្មីទៅក្នុងការប្រមូលដែលមានស្រាប់ដោយសុវត្ថិភាព រក្សាទុកទិន្នន័យទាំងអស់",
instructionsCollections: "ការប្រមូលប្រព័ន្ធ (ចាប់ផ្តើមដោយ _) និងការប្រមូលអ្នកប្រើប្រាស់នឹងត្រូវរំលងដោយស្វ័យប្រវត្តិ",
instructionsImportAuth: "មានតែអ្នកគ្រប់គ្រងដែលបានផ្ទៀងផ្ទាត់អត្តសញ្ញាណប៉ុណ្ណោះអាចធ្វើការបញ្ចូល Schema",
collectionsUpdatedCount: "ការប្រមូលចំនួន {count} ត្រូវបានធ្វើបច្ចុប្បន្នភាព",
collectionsCreatedCount: "ការប្រមូលចំនួន {count} ត្រូវបានបង្កើត",
collectionsSkippedCount: "ការប្រមូលចំនួន {count} ត្រូវបានរំលង"
};
+71
View File
@@ -0,0 +1,71 @@
import { DockerTranslations } from '../types/docker';
export const dockerTranslations: DockerTranslations = {
dockerContainers: "Containers Docker",
container: "Containers",
status: "ស្ថានភាព",
cpuUsage: "ការប្រើប្រាស់ CPU",
memory: "អង្គចងចាំ",
disk: "ថាស",
uptime: "ពេលដំណើរការ",
lastChecked: "បានពិនិត្យចុងក្រោយ",
actions: "សកម្មភាព",
searchContainersPlaceholder: "ស្វែងរកContainers...",
refresh: "ធ្វើបច្ចុប្បន្នភាព",
openMenu: "បើកម៉ឺនុយ",
viewMetrics: "មើលមេត្រីក",
viewDetails: "មើលព័ត៌មានលម្អិត",
running: "ដំណើរការ",
stopped: "បានបញ្ឈប់",
warning: "ការព្រមាន",
unknown: "មិនស្គាល់",
totalContainers: "Containers សរុប",
containersLabel: "Containers",
noContainersFound: "រកមិនឃើញContainers",
noContainersRunning: "គ្មានContainersកំពុងដំណើរការ",
tryAdjustSearch: "សូមព្យាយាមកែសម្រួលពាក្យស្វែងរករបស់អ្នក។",
startSomeContainers: "ចាប់ផ្តើមContainersខ្លះៗ ដើម្បីមើលពួកវានៅទីនេះ។",
containerMetricsTitle: "មេត្រីកContainers: {name}",
dockerId: "Docker ID",
loadingMetrics: "កំពុងផ្ទុកមេត្រីក...",
errorLoadingMetrics: "កំហុសក្នុងការផ្ទុកមេត្រីក",
noMetricsAvailable: "គ្មានទិន្នន័យមេត្រីកសម្រាប់Containersនេះ",
minutes60: "៦០ នាទី",
day1: "១ ថ្ងៃ",
days7: "៧ ថ្ងៃ",
month1: "១ ខែ",
months3: "៣ ខែ",
used: "បានប្រើ:",
free: "ទំនេរ:",
total: "សរុប:",
usage: "ការប្រើប្រាស់:",
cpu: "CPU",
memoryTitle: "អង្គចងចាំ",
diskTitle: "ថាស",
network: "បណ្តាញ",
cpuUsagePct: "ការប្រើប្រាស់ CPU (%)",
cpuUsageVsAvailable: "ការប្រើប្រាស់ CPU នឹង អាចប្រើបាន",
cpuAvailablePct: "CPU អាចប្រើបាន (%)",
ramUsagePct: "ការប្រើប្រាស់ RAM (%)",
memoryUsageBytes: "ការប្រើប្រាស់អង្គចងចាំ (បៃ)",
usedMemory: "អង្គចងចាំបានប្រើ",
totalMemory: "អង្គចងចាំសរុប",
diskUsagePct: "ការប្រើប្រាស់ថាស (%)",
diskUsageBytes: "ការប្រើប្រាស់ថាស (បៃ)",
usedDisk: "ថាសបានប្រើ",
totalDisk: "ថាសសរុប",
networkTraffic: "ចរាចរបណ្តាញ",
networkSpeedKbs: "ល្បឿនបណ្តាញ (KB/s)",
rxBytes: "RX បៃ",
txBytes: "TX បៃ",
rxSpeedKbs: "ល្បឿន RX (KB/s)",
txSpeedKbs: "ល្បឿន TX (KB/s)",
};
@@ -53,4 +53,13 @@ export const incidentTranslations: IncidentTranslations = {
failedToUpdateStatus: "បរាជ័យក្នុងការធ្វើបច្ចុប្បន្នភាពស្ថានភាព",
inProgress: "កំពុងដំណើរការ",
enterRootCause: 'បញ្ចូលហេតុផលដើម',
enterIncidentTitle: "បញ្ចូលចំណងជើងឧបទ្ទវហេតុ",
enterIncidentDescription: "បញ្ចូលការពិពណ៌នាអំពីឧបទ្ទវហេតុ",
enterServiceId: "បញ្ចូលលេខសម្គាល់សេវាកម្ម ដោយបំបែកដោយសញ្ញាក្បៀស",
selectAssignedUser: "ជ្រើសរើសអ្នកប្រើប្រាស់ដែលត្រូវបានចាត់តាំង",
noAssignedUser: "ឧបទ្ទវហេតុបច្ចុប្បន្នមិនត្រូវបានចាត់តាំងទៅអ្នកប្រើប្រាស់ណាមួយទេ",
affectedSystems: "ប្រព័ន្ធដែលរងផលប៉ះពាល់",
enterAffectedSystems: "បញ្ចូលប្រព័ន្ធដែលរងផលប៉ះពាល់",
separateSystemsWithComma: "បញ្ចូលប្រព័ន្ធដែលរងផលប៉ះពាល់ ដោយបំបែកដោយសញ្ញាក្បៀស",
createIncidentDesc: "បង្កើតឧបទ្ទវហេតុថ្មី"
};
+12 -1
View File
@@ -9,6 +9,11 @@ import { maintenanceTranslations } from './maintenance';
import { incidentTranslations } from './incident';
import { sslTranslations } from './ssl';
import { settingsTranslations } from './settings';
import { instanceTranslations } from './instance';
import { operationTranslations } from './operation';
import { regionTranslations } from './region';
import { dockerTranslations } from './docker';
import { publicTranslations } from './public';
const enTranslations: Translations = {
common: commonTranslations,
@@ -19,7 +24,13 @@ const enTranslations: Translations = {
maintenance: maintenanceTranslations,
incident: incidentTranslations,
ssl: sslTranslations,
settings: settingsTranslations
settings: settingsTranslations,
instance: instanceTranslations,
operation: operationTranslations,
region: regionTranslations,
docker: dockerTranslations,
public: publicTranslations
};
export default enTranslations;
+165
View File
@@ -0,0 +1,165 @@
import { InstanceTranslations } from '../types/instance';
export const instanceTranslations: InstanceTranslations = {
// InstanceMonitoring.tsx
instanceMonitoring: "ការត្រួតពិនិត្យឧទាហរណ៍",
describeMonitorInstance: "ត្រួតពិនិត្យនិងគ្រប់គ្រងឧទាហរណ៍ម៉ាស៊ីនមេរបស់អ្នកក្នុងពេលជាក់ស្តែង",
addServerAgent: "បន្ថែមភ្នាក់ងារម៉ាស៊ីនមេ",
errorLoadingServers: "កំហុសក្នុងការផ្ទុកម៉ាស៊ីនមេ",
unableToFetchServerData: "មិនអាចទាញយកទិន្នន័យម៉ាស៊ីនមេបានទេ។ សូមពិនិត្យការតភ្ជាប់របស់អ្នក ហើយព្យាយាមម្តងទៀត។",
retry: "ព្យាយាមម្តងទៀត",
// ServerTable.tsx
servers: "ម៉ាស៊ីនមេ",
loadingServers: "កំពុងផ្ទុកម៉ាស៊ីនមេ...",
searchServersPlaceholder: "ស្វែងរកម៉ាស៊ីនមេ...",
noServersFound: "រកមិនឃើញម៉ាស៊ីនមេ",
name: "ឈ្មោះ",
status: "ស្ថានភាព",
OS: "ប្រព័ន្ធប្រតិបត្តិការ",
IPAddress: "អាសយដ្ឋាន IP",
CPU: "ស៊ីភីយូ",
memory: "អង្គចងចាំ",
disk: "ថាស",
uptime: "ពេលវេលាដំណើរការ",
lastChecked: "បានពិនិត្យចុងក្រោយ",
actions: "សកម្មភាព",
viewServerDetail: "មើលព័ត៌មានលម្អិតម៉ាស៊ីនមេ",
containerMonitoring: "ការត្រួតពិនិត្យ Container",
resumeMonitoring: "បន្តការត្រួតពិនិត្យ",
pauseMonitoring: "ផ្អាកការត្រួតពិនិត្យ",
editServer: "កែសម្រួលម៉ាស៊ីនមេ",
deleteServer: "លុបម៉ាស៊ីនមេ",
deleteServerConfirmTitle: "តើអ្នកប្រាកដថាចង់លុបម៉ាស៊ីនមេនេះទេ?",
deleteServerConfirmDesc: "សកម្មភាពនេះមិនអាចត្រឡប់វិញបានទេ។ វានឹងលុប {name} និងទិន្នន័យត្រួតពិនិត្យទាំងអស់របស់វាជាអចិន្ត្រៃយ៍។",
cancel: "បោះបង់",
deleting: "កំពុងលុប...",
delete: "លុប",
serverDeleted: "ម៉ាស៊ីនមេត្រូវបានលុប",
serverDeletedDesc: "{name} ត្រូវបានលុបដោយជោគជ័យ។",
error: "កំហុស",
deleteServerError: "បរាជ័យក្នុងការលុបម៉ាស៊ីនមេ។ សូមព្យាយាមម្តងទៀត។",
serverPaused: "ម៉ាស៊ីនមេត្រូវបានផ្អាក",
serverResumed: "ម៉ាស៊ីនមេត្រូវបានបន្ត",
monitoringPaused: "ការត្រួតពិនិត្យត្រូវបានផ្អាកសម្រាប់ {name}",
monitoringResumed: "ការត្រួតពិនិត្យត្រូវបានបន្តសម្រាប់ {name}",
pauseServerError: "បរាជ័យក្នុងការផ្អាកការត្រួតពិនិត្យម៉ាស៊ីនមេ។ សូមព្យាយាមម្តងទៀត។",
resumeServerError: "បរាជ័យក្នុងការបន្តការត្រួតពិនិត្យម៉ាស៊ីនមេ। សូមព្យាយាមម្តងទៀត។",
// ServerStatsCards.tsx
totalServers: "ម៉ាស៊ីនមេសរុប",
onlineServers: "ម៉ាស៊ីនមេដំណើរការ",
offlineServers: "ម៉ាស៊ីនមេផ្អាកដំណើរការ",
warningServers: "ម៉ាស៊ីនមេដែលមានការព្រមាន",
// AddServerAgentDialog.tsx
addServerMonitoringAgent: "បន្ថែមភ្នាក់ងារត្រួតពិនិត្យម៉ាស៊ីនមេ",
configureAgentDesc: "កំណត់រចនាសម្ព័ន្ធភ្នាក់ងារត្រួតពិនិត្យម៉ាស៊ីនមេថ្មីដើម្បីតាមដានម៉ែត្រប្រព័ន្ធ និងប្រសិទ្ធភាព។",
configureAgent: "កំណត់រចនាសម្ព័ន្ធភ្នាក់ងារ",
oneClickInstall: "ការដំឡើងតែមួយចុច",
dockerOneClick: "Docker ការដំឡើងតែមួយចុច",
manualInstallation: "ការដំឡើងដោយដៃ",
validationError: "កំហុសក្នុងការផ្ទៀងផ្ទាត់",
fillRequiredFields: "សូមបំពេញចន្លោះទាំងអស់ដែលតម្រូវឱ្យមាន។",
serverAgentCreated: "ភ្នាក់ងារម៉ាស៊ីនមេត្រូវបានបង្កើត",
serverAgentCreatedDesc: "ភ្នាក់ងារត្រួតពិនិត្យ {name} ត្រូវបានកំណត់រចនាសម្ព័ន្ធដោយជោគជ័យ។",
failedToCreateAgent: "បរាជ័យក្នុងការបង្កើតភ្នាក់ងារត្រួតពិនិត្យម៉ាស៊ីនមេ។",
// ServerAgentConfigForm.tsx
serverName: "ឈ្មោះម៉ាស៊ីនមេ",
serverNamePlaceholder: "ឧ. web-server-01",
serverNameDesc: "ឈ្មោះ ឬស្លាកដែលប្រើជាអត្តសញ្ញាណ",
serverAgentId: "លេខសម្គាល់ភ្នាក់ងារម៉ាស៊ីនមេ",
serverAgentIdDesc: "លេខសម្គាល់តែមួយគត់ដែលបង្កើតដោយស្វ័យប្រវត្តិ",
operatingSystem: "ប្រព័ន្ធប្រតិបត្តិការ",
checkInterval: "ចន្លោះពេលពិនិត្យ",
selectInterval: "ជ្រើសរើសចន្លោះពេល",
interval30s: "៣០ វិនាទី",
interval1m: "១ នាទី",
interval2m: "២ នាទី",
interval5m: "៥ នាទី",
checkIntervalDesc: "ភាពញឹកញាប់នៃការពិនិត្យស្ថានភាពម៉ាស៊ីនមេ និងម៉ែត្រ",
retryAttempts: "ការព្យាយាមឡើងវិញ",
selectRetryAttempts: "ជ្រើសរើសចំនួនការព្យាយាមឡើងវិញ",
attempt1: "១ ការព្យាយាម",
attempt2: "២ ការព្យាយាម",
attempt3: "៣ ការព្យាយាម",
attempt5: "៥ ការព្យាយាម",
retryAttemptsDesc: "ចំនួនការព្យាយាមឡើងវិញមុនពេលសម្គាល់ថាដាច់",
serverToken: "សញ្ញាសម្ងាត់ម៉ាស៊ីនមេ",
serverTokenDesc: "សញ្ញាសម្ងាត់ផ្ទៀងផ្ទាត់ដែលបង្កើតដោយស្វ័យប្រវត្តិ",
systemUrl: "URL ប្រព័ន្ធ",
systemUrlDesc: "URL API ប្រព័ន្ធបច្ចុប្បន្ន",
creatingAgent: "កំពុងបង្កើតភ្នាក់ងារ...",
createServerAgent: "បង្កើតភ្នាក់ងារម៉ាស៊ីនមេ",
// EditServerDialog.tsx
editServerConfiguration: "កែសម្រួលការកំណត់រចនាសម្ព័ន្ធម៉ាស៊ីនមេ",
serverNameLabel: "ឈ្មោះម៉ាស៊ីនមេ *",
enterServerNamePlaceholder: "បញ្ចូលឈ្មោះម៉ាស៊ីនមេ",
checkIntervalLabel: "ចន្លោះពេលពិនិត្យ",
// selectInterval: "ជ្រើសរើសចន្លោះពេល",
interval10m: "១០ នាទី",
maxRetriesLabel: "ការព្យាយាមឡើងវិញអតិបរិមា",
selectMaxRetries: "ជ្រើសរើសការព្យាយាមអតិបរិមា",
retry1: "១ ដង",
retry2: "២ ដង",
retry3: "៣ ដង",
retry5: "៥ ដង",
retry10: "១០ ដង",
dockerMonitoring: "ការត្រួតពិនិត្យ Docker",
enabled: "បានបើក",
disabled: "បានបិទ",
enableNotifications: "បើកការជូនដំណឹង",
notificationSettings: "ការកំណត់ការជូនដំណឹង",
notificationChannels: "ឆានែលការជូនដំណឹង",
loadingChannels: "កំពុងផ្ទុកឆានែល...",
noChannelsAvailable: "មិនមានឆានែលការជូនដំណឹង",
selectedChannels: "ឆានែលដែលបានជ្រើស:",
serverSetThreshold: "កំណត់កម្រិតម៉ាស៊ីនមេ",
loadingThresholds: "កំពុងផ្ទុកកម្រិត...",
selectServerThreshold: "ជ្រើសរើសកម្រិតម៉ាស៊ីនមេ",
noThreshold: "គ្មានកម្រិត (ប្រើលំនាំដើម)",
thresholdDetails: "ព័ត៌មានលម្អិតអំពីកម្រិត",
cpuThresholdPct: "កម្រិត CPU (%)",
ramThresholdPct: "កម្រិត RAM (%)",
diskThresholdPct: "កម្រិតថាស (%)",
networkThresholdPct: "កម្រិតបណ្តាញ (%)",
serverTemplate: "គម្រូម៉ាស៊ីនមេ",
loadingTemplates: "កំពុងផ្ទុកគម្រូ...",
selectServerTemplate: "ជ្រើសរើសគម្រូម៉ាស៊ីនមេ",
noTemplate: "គ្មានគម្រូ (ប្រើលំនាំដើម)",
templateDetails: "ព័ត៌មានលម្អិតអំពីគម្រូ",
ramMessage: "សារ RAM",
cpuMessage: "សារ CPU",
diskMessage: "សារ ថាស",
networkMessage: "សារ បណ្តាញ",
upMessage: "សារដំណើរការ",
downMessage: "សារផ្អាក",
noMessageDefined: "គ្មានសារសម្រាប់ {name}",
serverUpdated: "បានធ្វើបច្ចុប្បន្នភាពម៉ាស៊ីនមេ",
serverUpdatedDesc: "{name} ត្រូវបានធ្វើបច្ចុប្បន្នភាពដោយជោគជ័យ។",
updating: "កំពុងធ្វើបច្ចុប្បន្នភាព...",
updateServer: "ធ្វើបច្ចុប្បន្នភាពម៉ាស៊ីនមេ",
failedToLoadChannels: "បានបរាជ័យក្នុងការផ្ទុកឆានែលការជូនដំណឹង",
failedToLoadTemplates: "បានបរាជ័យក្នុងការផ្ទុកគម្រូ",
failedToLoadThresholds: "បានបរាជ័យក្នុងការផ្ទុកកម្រិតម៉ាស៊ីនមេ",
warning: "ការព្រមាន",
serverUpdatedButThresholdFailed: "ម៉ាស៊ីនមេត្រូវបានធ្វើបច្ចុប្បន្នភាព ប៉ុន្តែបរាជ័យក្នុងការធ្វើបច្ចុប្បន្នភាពតម្លៃកម្រិត។",
failedToUpdateServer: "បរាជ័យក្នុងការធ្វើបច្ចុប្បន្នភាពម៉ាស៊ីនមេ។ សូមព្យាយាមម្តងទៀត।",
// ServerDetail.tsx
historicalPerformance: "សម្ដែងប្រវត្តិប្រតិបត្តិការ",
loading: "កំពុងផ្ទុក...",
errorLoadingChartData: "មានបញ្ហាក្នុងការផ្ទុកទិន្នន័យតារាង",
noHistoricalData: "មិនមានទិន្នន័យចាស់សម្រាប់ {{timeRange}}",
rawMetricsCount: "ចំនួនមេត្រដើម៖ {{count}}",
serverIdTimeRange: "លេខសម្គាល់ម៉ាស៊ីនបម្រើ៖ {{serverId}} • ជួរពេលវេលា៖ {{timeRange}}",
dataExistsOutsideRange: "ទិន្នន័យមាន ប៉ុន្តែអាចនៅខាងក្រៅជួរពេលវេលាដែលបានជ្រើស",
noMetricsDataFound: "រកមិនឃើញទិន្នន័យមេត្រទេ",
dataPointsTimeRange: "{{count}} ចំណុចទិន្នន័យ • {{timeRange}}",
// updating: "កំពុងធ្វើបច្ចុប្បន្នភាព...",
};
@@ -65,4 +65,25 @@ export const maintenanceTranslations: MaintenanceTranslations = {
noScheduledMaintenance: "មិនមានកាលវិភាគថែទាំទេ",
noMaintenanceWindows: "មិនមានកាលវិភាគថែទាំសម្រាប់រយៈពេលនេះទេ។ បង្កើតមួយដោយចុចប៊ូតុង \"បង្កើតកាលវិភាគថែទាំ\"។",
maintenanceCreatedSuccess: "កាលវិភាគថែទាំត្រូវបានបង្កើតដោយជោគជ័យ",
editMaintenanceWindow: "កែសម្រួលការថែទាំ",
editMaintenanceDesc: "កែសម្រួលព័ត៌មានលម្អិតនៃការថែទាំ",
priorityDescription: "ជ្រើសរើសអាទិភាពនៃការថែទាំ",
statusDescription: "ជ្រើសរើសស្ថានភាពនៃការថែទាំ",
impactLevel: "កម្រិតផលប៉ះពាល់",
impactLevelDescription: "ជ្រើសរើសកម្រិតផលប៉ះពាល់",
selectAssignedUsers: "ជ្រើសរើសអ្នកប្រើប្រាស់ដែលត្រូវបានចាត់តាំង",
assignedPersonnelDescription: "អ្នកប្រើប្រាស់ដែលត្រូវបានចាត់តាំងបច្ចុប្បន្ន",
mutedNotifications: "ការជូនដំណឹងត្រូវបានបិទ",
notificationsAreMuted: "ការជូនដំណឹងបច្ចុប្បន្នត្រូវបានបិទសម្រាប់ការថែទាំនេះ",
selectNotificationChannel: "បន្ថែមបណ្តាញជូនដំណឹង",
enableNotificationsFirst: "សូមបើកការជូនដំណឹងជាមុនសិន ដើម្បីជ្រើសរើសបណ្តាញ",
updateMaintenance: "ធ្វើបច្ចុប្បន្នភាពការថែទាំ",
loginToViewProfile: "សូមចូលគណនីដើម្បីមើលប្រវត្តិរូបរបស់អ្នក",
goToLogin: "ចូលគណនី",
loadingUserData: "កំពុងផ្ទុកទិន្នន័យអ្នកប្រើប្រាស់...",
retry: "ព្យាយាមម្តងទៀត",
loadingServerData: "កំពុងផ្ទុកទិន្នន័យម៉ាស៊ីនមេ...",
retrievingYourInformation: "សូមរង់ចាំខណៈពេលយើងទាញយកព័ត៌មានរបស់អ្នក...",
servicesPagination: "សេវាកម្ម {startItem}-{endItem} នៃ {totalItems} សេវាកម្ម",
servicesPaginationNoService: "គ្មានសេវាកម្ម",
};
+4 -4
View File
@@ -2,13 +2,13 @@
import { MenuTranslations } from '../types/menu';
export const menuTranslations: MenuTranslations = {
uptimeMonitoring: "ការត្រួតពិនិត្យ Uptime",
instanceMonitoring: "ការត្រួតពិនិត្យឧបករណ៍",
sslDomain: "SSL និងដមែន",
uptimeMonitoring: "ត្រួតពិនិត្យ Uptime",
instanceMonitoring: "ត្រួតពិនិត្យម៉ាស៊ីនមេ",
sslDomain: "SSL និងដមែន",
scheduleIncident: "កាលវិភាគនិងឧបទ្ទវហេតុ",
operationalPage: "ទំព័រប្រតិបត្តិការ",
reports: "របាយការណ៍",
regionalMonitoring: "ការត្រួតពិនិត្យតំបន់",
regionalMonitoring: "ត្រួតពិនិត្យតំបន់",
settingPanel: "ផ្ទាំងការកំណត់",
generalSettings: "ការកំណត់ទូទៅ",
userManagement: "ការគ្រប់គ្រងអ្នកប្រើប្រាស់",
@@ -0,0 +1,86 @@
import { OperationTranslations } from '../types/operation';
export const operationTranslations: OperationTranslations = {
// OperationalPageContent.tsx
failedToLoadOperationalPages: "បរាជ័យក្នុងការផ្ទុកទំព័រប្រតិបត្តិការ",
loadingoperationalPages: "មានបញ្ហាក្នុងការផ្ទុកទំព័រប្រតិបត្តិការរបស់អ្នក។ សូមព្យាយាមម្តងទៀត។",
tryagain: "ព្យាយាមម្តងទៀត",
operationalPages: "ទំព័រប្រតិបត្តិការ",
describeOperation: "គ្រប់គ្រងទំព័រស្ថានភាពសាធារណៈរបស់អ្នក និងត្រួតពិនិត្យសុខភាពសេវាកម្ម",
refresh: "ធ្វើបច្ចុប្បន្នភាព",
noOperationalPagesFound: "រកមិនឃើញទំព័រប្រតិបត្តិការទេ",
createYourFirstOperationalPage: "បង្កើតទំព័រប្រតិបត្តិការដំបូងរបស់អ្នក ដើម្បីចាប់ផ្តើមត្រួតពិនិត្យសេវាកម្មរបស់អ្នក និងប្រាស្រ័យទាក់ទងស្ថានភាពទៅកាន់អ្នកប្រើប្រាស់។",
totalPages: "ទំព័រសរុប",
publicPages: "ទំព័រសាធារណៈ",
operational: "ប្រតិបត្តិការ",
deleteOperationalPage: "លុបទំព័រប្រតិបត្តិការ",
deleteOperationalPageConfirm: 'តើអ្នកប្រាកដថាចង់លុប "{title}" ឬ? សកម្មភាពនេះមិនអាចត្រឡប់វិញបានទេ ហើយនឹងលុបទំព័រប្រតិបត្តិការ និងសមាសធាតុទាំងអស់របស់វាជាអចិន្ត្រៃយ៍។',
cancel: "បោះបង់",
delete: "លុប",
deleting: "កំពុងលុប...",
// EditOperationalPageDialog.tsx
editOperationalPage: "កែសម្រួលទំព័រប្រតិបត្តិការ",
updateYourOperationalPage: "ធ្វើបច្ចុប្បន្នភាពការកំណត់ទំព័រស្ថានភាពប្រតិបត្តិការរបស់អ្នក និងគ្រប់គ្រងសមាសធាតុ។",
title: "ចំណងជើង",
myServiceStatusPlaceholder: "ស្ថានភាពសេវាកម្មរបស់ខ្ញុំ",
slug: "ចំនងជើង URL",
myServiceStatusSlugPlaceholder: "ស្ថានភាពសេវាកម្មរបស់ខ្ញុំ",
description: "ការពិពណ៌នា",
operationalPageDescriptionPlaceholder: "ការពិពណ៌នាខ្លីអំពីទំព័រប្រតិបត្តិការ​របស់អ្នក",
theme: "ផ្ទៃខាងក្រោយ",
selectTheme: "ជ្រើសរើសផ្ទៃខាងក្រោយ",
themeDefault: "លំនាំដើម",
themeDark: "ងងឹត",
themeLight: "ភ្លឺ",
status: "ស្ថានភាព",
selectStatus: "ជ្រើសរើសស្ថានភាព",
statusOperational: "ប្រតិបត្តិការ",
statusDegraded: "ការសមត្ថភាពធ្លាក់ចុះ",
statusMaintenance: "នៅក្រោមការថែទាំ",
statusMajorOutage: "ការបាត់បង់ធំ",
publicPage: "ទំព័រសាធារណៈ",
makePagePublic: "ធ្វើឱ្យទំព័រនេះអាចចូលដំណើរការបានសាធារណៈ",
customDomainOptional: "ដែនកំណត់ផ្ទាល់ខ្លួន (ជាជម្រើស)",
customDomainPlaceholder: "status.yourdomain.com",
customDomainDescription: "ដែនកំណត់ផ្ទាល់ខ្លួនសម្រាប់ទំព័រស្ថានភាពរបស់អ្នក",
cancelUpdate: "បោះបង់",
updating: "កំពុងធ្វើបច្ចុប្បន្នភាព...",
updatePage: "ធ្វើបច្ចុប្បន្នភាពទំព័រ",
// ComponentsSelector.tsx
statusPageComponents: "សមាសធាតុទំព័រស្ថានភាព",
addMonitoringComponentsDesc: "បន្ថែមសមាសធាតុត្រួតពិនិត្យដូចជាសេវាកម្មពេលវេលាដំណើរការ, វិញ្ញាបនបត្រ SSL, និងការតាមដានឧប្បត្តិហេតុ",
selectedComponents: "សមាសធាតុដែលបានជ្រើសរើស",
service: "សេវាកម្ម",
server: "ម៉ាស៊ីនមេ",
addComponent: "បន្ថែមសមាសធាតុ",
componentName: "ឈ្មោះសមាសធាតុ",
componentNamePlaceholder: "ឧ. គេហទំព័រមេ",
displayOrder: "លំដាប់បង្ហាញ",
descriptionOptional: "ការពិពណ៌នា (ស្រេចចិត្ត)",
descriptionPlaceholder: "ការពិពណ៌នាសង្ខេបអំពីសមាសធាតុនេះ",
uptimeServiceOptional: "សេវាកម្មពេលវេលាដំណើរការ (ស្រេចចិត្ត)",
selectUptimeService: "ជ្រើសរើសសេវាកម្មពេលវេលាដំណើរការ",
serverIdOptional: "លេខសម្គាល់ម៉ាស៊ីនមេ (ស្រេចចិត្ត)",
serverIdPlaceholder: "server_456",
cancelComponent: "បោះបង់",
// OperationalPageCard.tsx
public: "សាធារណៈ",
yes: "បាទ/ចាស",
no: "ទេ",
updated: "បានធ្វើបច្ចុប្បន្នភាព",
view: "មើល",
edit: "កែសម្រួល",
// CreateOperationalPageDialog.tsx
createOperationalPage: "បង្កើតទំព័រប្រតិបត្តិការ",
createOperationalPageDesc: "បង្កើតទំព័រស្ថានភាពប្រតិបត្តិការថ្មីដើម្បីត្រួតពិនិត្យសេវាកម្ម និងសមាសធាតុរបស់អ្នក។",
createPage: "បង្កើតទំព័រ",
creating: "កំពុងបង្កើត...",
initialStatus: "ស្ថានភាពដំបូង",
};
+23
View File
@@ -0,0 +1,23 @@
import { PublicTranslations } from '../types/public';
export const publicTranslations: PublicTranslations = {
systemStatus: "ស្ថានភាពប្រព័ន្ធ",
allOperational: "ប្រព័ន្ធទាំងអស់ដំណើរការធម្មតា",
degradedPerformance: "ខ្លះៗកំពុងមានប្រសិទ្ធភាពធ្លាក់ចុះ",
underMaintenance: "ប្រព័ន្ធកំពុងថែទាំ",
majorOutage: "យើងកំពុងជួបការរាំងស្ទះធ្ងន់ធ្ងរ",
statusUnknown: "មិនស្គាល់ស្ថានភាព",
autoUpdatedByHealth: "ស្ថានភាពត្រូវបានធ្វើបច្ចុប្បន្នភាពដោយស្វ័យប្រវត្តិតាមសុខភាពសមាសភាគ",
lastUpdatedAt: "បានធ្វើបច្ចុប្បន្នភាពចុងក្រោយ: {time} UTC",
liveStatusMonitoring: "ការត្រួតពិនិត្យស្ថានភាពផ្ទាល់",
loadingStatusPage: "កំពុងផ្ទុកទំព័រស្ថានភាព",
fetchingRealtimeStatus: "កំពុងទាញយកស្ថានភាពប្រព័ន្ធពេលជាក់ស្តែង...",
slugLabel: "Slug",
statusPageNotFound: "រកមិនឃើញទំព័រស្ថានភាព",
notFoundDescription: "ទំព័រស្ថានភាពដែលបានស្នើរសុំមិនអាចរកឃើញ ឬមិនអាចចូលមើលជាសាធារណៈបាន។",
goBack: "ត្រឡប់ក្រោយ",
retry: "ព្យាយាមម្តងទៀត",
};
+95
View File
@@ -0,0 +1,95 @@
import { RegionTranslations } from '../types/region';
export const regionTranslations: RegionTranslations = {
//RegionalMonitoringContent.tsx
regionalmonitoring: "ត្រួតពិនិត្យតំបន់",
descriptRegionPage: "ត្រួតពិនិត្យហេដ្ឋារចនាសម្ព័ន្ធរបស់អ្នកពីតំបន់ជាច្រើនសម្រាប់ភាពជឿជាក់កាន់តែប្រសើរ។",
addRegionalAgent: "បន្ថែមភ្នាក់ងារតំបន់",
totalAgents: "ភ្នាក់ងារសរុប",
regionalMonitoringAgents: "ភ្នាក់ងារត្រួតពិនិត្យតំបន់",
onlineAgents: "ភ្នាក់ងារដំណើរការ",
currentlyConnected: "បច្ចុប្បន្នកំពុងភ្ជាប់",
offlineAgents: "ភ្នាក់ងារមិនដំណើរការ",
disconnectedAgents: "ភ្នាក់ងារដែលបានផ្តាច់",
regionalAgents: "ភ្នាក់ងារតំបន់",
noRegionalAgents: "គ្មានភ្នាក់ងារតំបន់",
getStartedAddAgent: "ចាប់ផ្តើមដោយបន្ថែមភ្នាក់ងារត្រួតពិនិត្យតំបន់ដំបូងរបស់អ្នក ដើម្បីពង្រីកការគ្របដណ្តប់ត្រួតពិនិត្យ។",
addFirstAgent: "បន្ថែមភ្នាក់ងារដំបូង",
agentRemoved: "ភ្នាក់ងារត្រូវបានដកចេញ",
agentRemovedDesc: "ភ្នាក់ងារត្រួតពិនិត្យតំបន់ត្រូវបានដកចេញ។",
regionalAgentAdded: "ភ្នាក់ងារតំបន់ត្រូវបានបន្ថែម",
regionalAgentAddedDesc: "ភ្នាក់ងារត្រួតពិនិត្យតំបន់ត្រូវបានកំណត់រចនាសម្ព័ន្ធដោយជោគជ័យ។",
error: "កំហុស",
failedToRemoveAgent: "បរាជ័យក្នុងការដកភ្នាក់ងារត្រួតពិនិត្យតំបន់។",
//AddRegionalAgentDialog.tsx
addRegionalMonitoringAgent: "បន្ថែមភ្នាក់ងារត្រួតពិនិត្យតំបន់",
deployRegionalMonitoringAgent: "ដាក់ពង្រាយភ្នាក់ងារត្រួតពិនិត្យតំបន់ជាមួយនឹងការដំឡើងតែមួយចុចដោយស្វ័យប្រវត្តិ",
regionName: "ឈ្មោះតំបន់",
regionNamePlaceholder: "ឧ. us-east-1, europe-west-1, asia-pacific-1",
agentServerIpAddress: "អាសយដ្ឋាន IP របស់ម៉ាស៊ីនមេភ្នាក់ងារ",
agentIpPlaceholder: "ឧ. 192.168.1.100 ឬ your-server.example.com",
cancel: "បោះបង់",
generateInstallation: "បង្កើតការដំឡើង",
generating: "កំពុងបង្កើត...",
agentConfigurationReady: "ការកំណត់រចនាសម្ព័ន្ធភ្នាក់ងាររួចរាល់!",
oneClickInstallScriptGenerated: "ស្គ្រីបដំឡើងតែមួយចុចត្រូវបានបង្កើតជាមួយនឹងការកំណត់រចនាសម្ព័ន្ធដោយស្វ័យប្រវត្តិ",
oneClickInstallTab: "ការដំឡើងតែមួយចុច",
agentDetailsTab: "ព័ត៌មានលម្អិតភ្នាក់ងារ",
manualInstallTab: "ការដំឡើងដោយដៃ",
oneClickAutomaticInstallation: "ការដំឡើងដោយស្វ័យប្រវត្តិតែមួយចុច",
completeInstallationDescription: "បញ្ចប់ការដំឡើង ការកំណត់រចនាសម្ព័ន្ធ និងការចាប់ផ្តើមសេវាកម្មក្នុងពាក្យបញ្ជាតែមួយ",
whatThisScriptDoes: "អ្វីដែលស្គ្រីបនេះធ្វើដោយស្វ័យប្រវត្តិ:",
scriptActionDownload: "ទាញយកកញ្ចប់ .deb ចុងក្រោយ",
scriptActionInstall: "ដំឡើងភ្នាក់ងារត្រួតពិនិត្យតំបន់",
scriptActionConfigure: "បង្កើតឯកសារកំណត់រចនាសម្ព័ន្ធជាមួយនឹងការកំណត់របស់អ្នក",
scriptActionStart: "ចាប់ផ្តើម និងបើកដំណើរការសេវាកម្ម",
scriptActionHealthChecks: "ដំណើរការការត្រួតពិនិត្យសុខភាព",
runCommandOnServer: "ដំណើរការពាក្យបញ្ជានេះនៅលើម៉ាស៊ីនមេគោលដៅរបស់អ្នក:",
downloadCompleteScript: "ទាញយកស្គ្រីបពេញលេញ",
copyFullScript: "ចម្លងស្គ្រីបពេញលេញ",
localDevelopmentNotice: "<strong>សេចក្តីជូនដំណឹងអំពីការអភិវឌ្ឍន៍មូលដ្ឋាន:</strong> ប្រសិនបើការចម្លងទៅក្តារកៅស៊ូបរាជ័យ នេះជារឿងធម្មតានៅក្នុងការអភិវឌ្ឍន៍មូលដ្ឋាន។ អ្នកអាចប្រើប៊ូតុង 'ទាញយកស្គ្រីបពេញលេញ' ជំនួស ឬចម្លងអត្ថបទដោយដៃ។",
generatedAgentConfiguration: "ការកំណត់រចនាសម្ព័ន្ធភ្នាក់ងារដែលបានបង្កើត",
autoConfiguredDuringInstallation: "តម្លៃទាំងនេះនឹងត្រូវបានកំណត់រចនាសម្ព័ន្ធដោយស្វ័យប្រវត្តិក្នុងអំឡុងពេលដំឡើង",
agentId: "លេខសម្គាល់ភ្នាក់ងារ",
regionNameDetail: "ឈ្មោះតំបន់",
serverIp: "អាសយដ្ឋាន IP ម៉ាស៊ីនមេ",
apiEndpoint: "ចំណុចបញ្ចប់ API",
authenticationToken: "សញ្ញាសម្ងាត់ផ្ទៀងផ្ទាត់",
configurationFileLocation: "<strong>ទីតាំងឯកសារកំណត់រចនាសម្ព័ន្ធ:</strong> /etc/regional-check-agent/regional-check-agent.env",
manualInstallationSteps: "ជំហានការដំឡើងដោយដៃ",
stepByStepManualInstallation: "ដំណើរការដំឡើងដោយដៃជាជំហានៗ",
step1DownloadPackage: "ជំហានទី១: ទាញយកកញ្ចប់",
downloadAmd64Notice: "✅ ប្រសិនបើអ្នកកំពុងប្រើស្ថាបត្យកម្ម amd64 សូមទាញយកកញ្ចប់នេះ។",
downloadArm64Notice: "✅ ប្រសិនបើអ្នកកំពុងប្រើស្ថាបត្យកម្ម arm64 សូមទាញយកកញ្ចប់នេះ।",
step2InstallPackage: "ជំហានទី២: ដំឡើងកញ្ចប់",
step3ConfigureAgent: "ជំហានទី៣: កំណត់រចនាសម្ព័ន្ធភ្នាក់ងារ",
copySampleConfiguration: "ចម្លងការកំណត់រចនាសម្ព័ន្ធគំរូពី https://github.com/operacle/Distributed-Regional-Monitoring/blob/main/packaging/regional-check-agent.conf",
addConfigurationValues: "បន្ថែមតម្លៃកំណត់រចនាសម្ព័ន្ធដែលបង្ហាញនៅក្នុងផ្ទាំងព័ត៌មានលម្អិតភ្នាក់ងារ",
step4StartService: "ជំហានទី៤: ចាប់ផ្តើមសេវាកម្ម",
step5VerifyInstallation: "ជំហានទី៥: ផ្ទៀងផ្ទាត់ការដំឡើង",
addAnotherAgent: "បន្ថែមភ្នាក់ងារមួយទៀត",
completeSetup: "បញ្ចប់ការរៀបចំ",
copied: "បានចម្លង!",
copiedDescription: "{description} បានចម្លងទៅក្តារកៅស៊ូ។",
copyFailed: "ការចម្លងបរាជ័យ",
copyFailedDescription: "បរាជ័យក្នុងការចម្លងទៅក្តារកៅស៊ូ។",
copyFailedLocalhost: "នេះជារឿងធម្មតានៅក្នុងការអភិវឌ្ឍន៍មូលដ្ឋាន។ សូមចម្លងអត្ថបទដោយដៃ។",
copyFailedChrome: "សូមសាកល្បងប្រើ HTTPS ឬបើកសិទ្ធិចម្លងក្តារកៅស៊ូ។",
downloaded: "បានទាញយក!",
downloadedDescription: "ស្គ្រីបដំឡើងបានទាញយកដោយជោគជ័យ។",
failedToCreateAgent: "បរាជ័យក្នុងការបង្កើតការកំណត់រចនាសម្ព័ន្ធភ្នាក់ងារតំបន់។",
//RegionalAgentCard.tsx
defaultBadge: "លំនាំដើម",
copyAgentId: "ចម្លងលេខសម្គាល់ភ្នាក់ងារ",
removeAgent: "លុបភ្នាក់ងារ",
online: "ដំណើរការ",
offline: "មិនដំណើរការ",
lastUpdated: "ធ្វើបច្ចុប្បន្នភាពចុងក្រោយ:",
activeMonitoring: "ការត្រួតពិនិត្យសកម្ម",
connectionLost: "បាត់បង់ការតភ្ជាប់",
};
+190 -12
View File
@@ -2,21 +2,199 @@
import { ServicesTranslations } from '../types/services';
export const servicesTranslations: ServicesTranslations = {
serviceName: "ឈ្មោះសេវាកម្ម",
serviceNameDesc: "បញ្ចូលឈ្មោះពិពណ៌នាសម្រាប់សេវាកម្មរបស់អ្នក",
serviceType: "ប្រភេទសេវាកម្ម",
serviceStatus: "ស្ថានភាពសេវាកម្ម",
responseTime: "ពេលវេលាឆ្លើយតប",
uptime: "ពេលវេលាដំណើរការ",
lastChecked: "ពិនិត្យចុងក្រោយ",
noServices: "មិនមានសេវាកម្មដែលត្រូវនឹងលក្ខណៈវិនិច្ឆ័យរបស់អ្នក។",
currentlyMonitoring: "កំពុងតាមដានពេលនេះ",
retry: "សាកល្បងម្ដងទៀត",
serviceStatus: "ស្ថានភាព",
uptime: "រយៈពេលដំណើរការ",
lastChecked: "បានពិនិត្យចុងក្រោយ",
noServices: "គ្មានសេវាកម្មណាមួយត្រូវនឹងលក្ខណៈវិនិច្ឆ័យតម្រងរបស់អ្នកទេ។",
currentlyMonitoring: "កំពុងត្រួតពិនិត្យ",
retry: "សាកល្បងម្តងទៀត",
overview: "ទិដ្ឋភាពទូទៅ",
newService: "សេវាកម្មថ្មី",
rowsPerPage: "ចំនួនជួរដេកក្នុងមួយទំព័រ",
rowsPerPage: "ជួរដេកក្នុងមួយទំព័រ",
search: "ស្វែងរក",
allTypes: "គ្រប់ប្រភេទ",
createNewService: "បង្កើតសេវាកម្មថ្មី",
createNewServiceDesc: "បញ្ចូលព័ត៌មានលម្អិតដើម្បីបង្កើតសេវាកម្មថ្មីដែលត្រូវតាមដាន។",
createNewServiceDesc: "បំពេញព័ត៌មានលម្អិតដើម្បីបង្កើតសេវាកម្មថ្មីសម្រាប់ត្រួតពិនិត្យ។",
// ServiceBasicFields.tsx
serviceName: "ឈ្មោះសេវាកម្ម",
serviceNameDesc: "បញ្ចូលឈ្មោះដែលពិពណ៌នាអំពីសេវាកម្មរបស់អ្នក",
// ServiceConfigFields.tsx
checkInterval: "ចន្លោះពេលពិនិត្យ",
seconds: "វិនាទី",
minute: "នាទី",
minutes: "នាទី",
hour: "ម៉ោង",
hours: "ម៉ោង",
custom: "ផ្ទាល់ខ្លួន",
checkIntervalPlaceholder: "បញ្ចូលចន្លោះពេលជាវិនាទី",
backToPresets: "ត្រឡប់ទៅការកំណត់ជាមុន",
checkIntervalDesc: "ភាពញឹកញាប់នៃការពិនិត្យស្ថានភាពសេវាកម្ម",
checkIntervalDescCustom: "បញ្ចូលចន្លោះពេលផ្ទាល់ខ្លួនជាវិនាទី (អប្បបរមា ១០ វិនាទី)",
retryAttempts: "ការព្យាយាមឡើងវិញ",
attempt: "ការព្យាយាម",
attempts: "ការព្យាយាម",
retryAttemptsDesc: "ចំនួនការព្យាយាមឡើងវិញមុននឹងចាត់ទុកថាមិនដំណើរការ",
// ServiceForm.tsx
updateService: "ធ្វើបច្ចុប្បន្នភាពសេវាកម្ម",
createService: "បង្កើតសេវាកម្ម",
// ServiceNotificationFields.tsx
enableNotifications: "បើកការជូនដំណឹង",
enableNotificationsDesc: "បើក ឬបិទការជូនដំណឹងសម្រាប់សេវាកម្មនេះ",
notificationChannels: "បណ្តាញជូនដំណឹង",
notificationChannelsEnabledDesc: "ជ្រើសរើសបណ្តាញជូនដំណឹងសម្រាប់សេវាកម្មនេះ",
notificationChannelsDesc: "បើកការជូនដំណឹងជាមុនដើម្បីជ្រើសរើសបណ្តាញ",
notificationChannelsPlaceholder: "បន្ថែមបណ្តាញជូនដំណឹង",
alertTemplate: "ទម្រង់ជូនដំណឹង",
alertTemplateLoading: "កំពុងផ្ទុកទម្រង់...",
alertTemplatePlaceholder: "ជ្រើសរើសទម onderwerpជូនដំណឹង",
alertTemplateEnabledDesc: "ជ្រើសរើសទម្រង់សម្រាប់សារជូនដំណឹង",
alertTemplateDesc: "បើកការជូនដំណឹងជាមុនដើម្បីជ្រើសរើសទម្រង់",
// ServiceTypeField.tsx
serviceType: "ប្រភេទ",
serviceTypeHTTPDesc: "ត្រួតពិនិត្យគេហទំព័រ និង REST APIs ជាមួយពិធីការ HTTP/HTTPS",
serviceTypePINGDesc: "ត្រួតពិនិត្យភាពអាចប្រើបានរបស់ម៉ាស៊ីនជាមួយពិធីការ PING",
serviceTypeTCPDesc: "ត្រួតពិនិត្យការតភ្ជាប់ច្រក TCP ជាមួយពិធីការ TCP",
serviceTypeDNSDesc: "ត្រួតពិនិត្យការដោះស្រាយ DNS",
// ServiceRegionalFields.tsx
regionalMonitoring: "ការត្រួតពិនិត្យតាមតំបន់",
regionalMonitoringDesc: "ចាត់តាំងសេវាកម្មនេះទៅភ្នាក់ងារត្រួតពិនិត្យតាមតំបន់សម្រាប់ការត្រួតពិនិត្យចែកចាយ",
regionalAgents: "ភ្នាក់ងារតាមតំបន់",
regionalAgentsLoading: "កំពុងផ្ទុកភ្នាក់ងារ...",
regionalAgentsAvailablePlaceholder: "ជ្រើសរើសភ្នាក់ងារតាមតំបន់បន្ថែម...",
regionalAgentsAllSelected: "បានជ្រើសរើសភ្នាក់ងារទាំងអស់ដែលមាន",
regionalAgentsNoAvailable: "គ្មានភ្នាក់ងារតាមតំបន់ដែលអាចប្រើបាន",
regionalAgentsNoOnlineAvailable: "គ្មានភ្នាក់ងារតាមតំបន់អនឡាញដែលអាចប្រើបាន",
regionalAgentsNotFoundMessage: "រកមិនឃើញភ្នាក់ងារតាមតំបន់អនឡាញទេ។ សេវាកម្មនឹងប្រើការត្រួតពិនិត្យលំនាំដើម។",
regionalAgentsNotSelectedMessage: "មិនបានជ្រើសរើសភ្នាក់ងារតាមតំបន់ទេ។ សេវាកម្មនឹងប្រើការត្រួតពិនិត្យលំនាំដើម។",
// ServiceUrlField.tsx
targetDefault: "URL/ម៉ាស៊ីនគោលដៅ",
targetDNS: "ឈ្មោះដែន",
targetHTTPDesc: "បញ្ចូល URL ពេញលេញរួមទាំងពិធីការ (http:// ឬ https://)",
targetPINGDesc: "បញ្ចូលឈ្មោះម៉ាស៊ីន ឬអាសយដ្ឋាន IP ដើម្បី ping",
targetTCPDesc: "បញ្ចូលឈ្មោះម៉ាស៊ីន ឬអាសយដ្ឋាន IP សម្រាប់ការធ្វើតេស្តការតភ្ជាប់ TCP",
targetTCPPortDesc: "បញ្ចូលលេខច្រកសម្រាប់ការធ្វើតេស្តការតភ្ជាប់ TCP",
targetDNSDesc: "បញ្ចូលឈ្មោះដែនសម្រាប់ការត្រួតពិនិត្យកំណត់ត្រា DNS (A, AAAA, MX, ជាដើម)",
targetDefaultDesc: "បញ្ចូល URL ឬឈ្មោះម៉ាស៊ីនគោលដៅសម្រាប់ការត្រួតពិនិត្យ",
targetDefaultPlaceholder: "បញ្ចូល URL ឬឈ្មោះម៉ាស៊ីន",
// types.ts
serviceNameRequired: "តម្រូវឱ្យមានឈ្មោះសេវាកម្ម",
urlDomainHostRequired: "តម្រូវឱ្យមាន URL/ដែន/ម៉ាស៊ីន",
enterValidUrlHostnameDomain: "សូមបញ្ចូល URL, ឈ្មោះម៉ាស៊ីន ឬដែនដែលត្រឹមត្រូវ",
// Dashboard
upServices: "សេវាកម្មដំណើរការ",
downServices: "សេវាកម្មមិនដំណើរការ",
pausedServices: "សេវាកម្មផ្អាក",
warningServices: "សេវាកម្មព្រមាន",
// ServiceRowActions.tsx
viewDetail: "មើលលម្អិត",
resumeMonitoring: "បន្តការត្រួតពិនិត្យ",
pauseMonitoring: "ផ្អាកការត្រួតពិនិត្យ",
// IncidentTable.tsx
responseTime: "ពេលវេលាឆ្លើយតប",
errorMessage: "សារកំហុស",
details: "លម្អិត",
unmuteAlerts: "បើកសំឡេងការជូនដំណឹង",
muteAlerts: "បិទសំឡេងការជូនដំណឹង",
// LastCheckedTime.tsx
pausedAt: "ផ្អាកនៅ",
lastCheckDetails: "លម្អិតការពិនិត្យចុងក្រោយ",
checkedAt: "បានពិនិត្យនៅ",
monitoringPaused: "ការត្រួតពិនិត្យត្រូវបានផ្អាក",
noAutomaticChecks: "គ្មានការពិនិត្យដោយស្វ័យប្រវត្តិ",
// ServiveEditDialog.tsx
editService: "កែសម្រួលសេវាកម្ម",
editServiceDesc: "ធ្វើបច្ចុប្បន្នភាពលម្អិតនៃសេវាកម្មដែលត្រូវបានត្រួតពិនិត្យរបស់អ្នក។",
// ServiceStatsCards.tsx
lastCheckedAt: "បានពិនិត្យចុងក្រោយនៅ {datetime}",
avg: "មធ្យម",
lastUpChecksCount: "ការពិនិត្យដំណើរការចុងក្រោយ {count} ដង",
basedOnlastChecksCount: "ផ្អែកលើការពិនិត្យចុងក្រោយ {count} ដង",
totalUptime: "រយៈពេលដំណើរការសរុប",
totalDowntime: "រយៈពេលមិនដំណើរការសរុប",
monitoringSettings: "ការកំណត់ការត្រួតពិនិត្យ",
monitoringSettingsInterval: "បានពិនិត្យរៀងរាល់ {interval} វិនាទី",
monitoringSettingsType: "ការត្រួតពិនិត្យ",
upStatusDuration: "ដំណើរការអស់រយៈពេល {duration}",
downStatusDuration: "មិនដំណើរការអស់រយៈពេល {duration}",
incidentHistory: "ប្រវត្តិឧប្បត្តិហេតុ",
processing: "កំពុងដំណើរការ",
back: "ត្រឡប់ក្រោយ",
last20Checks: "ការពិនិត្យ ២០ ចុងក្រោយ",
//OneClickInstallTab.tsx
oneClickInstallTitle: "ការដំឡើងតែមួយចុច (ណែនាំ)",
oneClickInstallDesc: "ចម្លង និងបិទភ្ជាប់ពាក្យបញ្ជាតែមួយនេះដើម្បីដំឡើងភ្នាក់ងារត្រួតពិនិត្យភ្លាមៗ",
quickInstallCommand: "ពាក្យបញ្ជាដំឡើងរហ័ស",
copy: "ចម្លង",
runCommandOnServer: "គ្រាន់តែដំណើរការពាក្យបញ្ជានេះនៅលើម៉ាស៊ីនមេរបស់អ្នក:",
sshIntoServer: "ចូលទៅក្នុងម៉ាស៊ីនមេគោលដៅរបស់អ្នកតាម SSH",
pasteAndRun: "បិទភ្ជាប់ និងដំណើរការពាក្យបញ្ជាខាងលើ",
agentInstalled: "ភ្នាក់ងារនឹងត្រូវបានដំឡើង និងចាប់ផ្តើមដោយស្វ័យប្រវត្តិ",
done: "រួចរាល់",
// DockerOneClickTab.tsx
dockerOneClickTitle: "ការដំឡើង Docker តែមួយចុច",
dockerOneClickDesc: "ការដំឡើង Docker Container ដោយស្វ័យប្រវត្តិជាមួយនឹងសមត្ថភាពត្រួតពិនិត្យប្រព័ន្ធ",
dockerOneClickCommand: "ពាក្យបញ្ជា Docker តែមួយចុច",
dockerScriptWill: "ស្គ្រីបនេះនឹងធ្វើដោយស្វ័យប្រវត្តិ:",
dockerScriptStep1: "ទាញយក និងរៀបចំភ្នាក់ងារត្រួតពិនិត្យ Docker",
dockerScriptStep2: "កំណត់រចនាសម្ព័ន្ធអថេរបរិស្ថានដែលតម្រូវទាំងអស់",
dockerScriptStep3: "ចាប់ផ្តើម Container ជាមួយនឹងការចូលប្រើប្រព័ន្ធត្រឹមត្រូវ",
dockerScriptStep4: "រៀបចំការរក្សាទុកទិន្នន័យត្រួតពិនិត្យ",
directDockerTitle: "ពាក្យបញ្ជា Docker Run ដោយផ្ទាល់",
directDockerDesc: "ប្រសិនបើអ្នកចូលចិត្តដំណើរការ Docker Container ដោយផ្ទាល់ដោយគ្មានស្គ្រីប",
dockerRunCommand: "ពាក្យបញ្ជា Docker Run",
dockerPrerequisites: "តម្រូវការជាមុនសម្រាប់ការដំណើរការ Docker ដោយផ្ទាល់:",
dockerPrereqStep1: "Docker ត្រូវតែត្រូវបានដំឡើង និងដំណើរការ",
dockerPrereqStep2: "រូបភាព operacle/checkcle-server-agent ត្រូវតែមាន",
dockerPrereqStep3: "ដំណើរការជា root ឬជាមួយសិទ្ធិ sudo",
// ManualInstallTab.tsx
manualInstallTitle: "ជំហានការដំឡើងដោយដៃ",
manualInstallDesc: "ដំណើរការដំឡើងជាជំហានៗ",
serverName: "ឈ្មោះម៉ាស៊ីនមេ",
agentId: "លេខសម្គាល់ភ្នាក់ងារ",
osType: "ប្រភេទប្រព័ន្ធប្រតិបត្តិការ",
downloadScript: "ទាញយកស្គ្រីបដំឡើង",
makeExecutable: "ធ្វើឱ្យស្គ្រីបអាចប្រតិបត្តិបាន",
runInstall: "ដំណើរការការដំឡើងជាមួយនឹងការកំណត់រចនាសម្ព័ន្ធរបស់អ្នក",
prerequisites: "តម្រូវការជាមុន:",
prereqRoot: "ត្រូវប្រាកដថាអ្នកមានសិទ្ធិ root/sudo នៅលើម៉ាស៊ីនមេគោលដៅ",
prereqCurl: "ត្រូវប្រាកដថា curl ត្រូវបានដំឡើងសម្រាប់ទាញយកឯកសារ",
prereqInternet: "តម្រូវឱ្យមានការតភ្ជាប់អ៊ីនធឺណិតសម្រាប់ទាញយកស្គ្រីប",
afterInstall: "បន្ទាប់ពីការដំឡើង:",
agentWillStart: "ភ្នាក់ងារនឹងចាប់ផ្តើមដោយស្វ័យប្រវត្តិ និងនឹងបង្ហាញនៅក្នុងផ្ទាំងគ្រប់គ្រងរបស់អ្នកក្នុងរយៈពេលប៉ុន្មាននាទី។",
// ServerDetail.tsx
errorLoadingServer: "កំហុសក្នុងការផ្ទុកម៉ាស៊ីនមេ",
unableToFetchServerData: "មិនអាចទាញយកទិន្នន័យម៉ាីនមេបានទេ។ សូមពិនិត្យការតភ្ជាប់របស់អ្នក ហើយព្យាយាមម្តងទៀត។",
backToServers: "ត្រឡប់ទៅម៉ាស៊ីនមេ",
loadingServerDetails: "កំពុងផ្ទុកព័ត៌មានលម្អិតម៉ាស៊ីនមេ...",
serverDetail: "ព័ត៌មានលម្អិតម៉ាស៊ីនមេ",
monitorServerMetrics: "ត្រួតពិនិត្យMetricsប្រសិទ្ធភាពម៉ាស៊ីនមេ និងសុខភាពប្រព័ន្ធ",
serverHostnameIpOs: "{hostname} • {ip_address} • {os_type}",
// ContainerMonitoring.tsx
errorLoadingContainers: "កំហុសក្នុងការផ្ទុក Container",
unableToFetchContainerData: "មិនអាចទាញយកទិន្នន័យ Container បានទេ?। សូមពិនិត្យការតភ្ជាប់របស់អ្នក ហើយព្យាយាមម្តងទៀត។",
errorUnknown: "កំហុសមិនស្គាល់",
containerMonitoring: "ការត្រួតពិនិត្យ Container",
monitorAndManageContainers: "ត្រួតពិនិត្យ និងគ្រប់គ្រង Docker Container របស់អ្នកក្នុងពេលជាក់ស្តែង",
serverIdLabel: "លេខសម្គាល់ម៉ាស៊ីនមេ",
};
+124 -11
View File
@@ -2,18 +2,18 @@
import { SettingsTranslations } from '../types/settings';
export const settingsTranslations: SettingsTranslations = {
// Tabs
// General Settings - Tabs
systemSettings: "ការកំណត់ប្រព័ន្ធ",
mailSettings: "ការកំណត់សំបុត្រ",
// System Settings
// General Settings - System Settings
appName: "ឈ្មោះកម្មវិធី",
appURL: "URL កម្មវិធី",
senderName: "ឈ្មោះអ្នកផ្ញើ",
senderEmail: "អាសយដ្ឋានអ៊ីមែលអ្នកផ្ញើ",
hideControls: "លាក់ការគ្រប់គ្រង",
// Mail Settings
// General Settings - Mail Settings
smtpSettings: "ការកំណត់រចនាសម្ព័ន្ធ SMTP",
smtpEnabled: "បើក SMTP",
smtpHost: "ម៉ាស៊ីន SMTP",
@@ -23,8 +23,8 @@ export const settingsTranslations: SettingsTranslations = {
smtpAuthMethod: "វិធីសាស្ត្រផ្ទៀងផ្ទាត់",
enableTLS: "បើក TLS",
localName: "ឈ្មោះមូលដ្ឋាន",
// Test Email
// General Settings - Test Email
testEmail: "សាកល្បងអ៊ីមែល",
sendTestEmail: "ផ្ញើអ៊ីមែលសាកល្បង",
emailTemplate: "គំរូអ៊ីមែល",
@@ -37,10 +37,14 @@ export const settingsTranslations: SettingsTranslations = {
selectCollection: "ជ្រើសរើសបណ្តុំ",
toEmailAddress: "ទៅអាសយដ្ឋានអ៊ីមែល",
enterEmailAddress: "បញ្ចូលអាសយដ្ឋានអ៊ីមែល",
send: "ផ្ញើ",
sending: "កំពុងផ្ញើ...",
// Actions and status
save: "រក្សាទុកការផ្លាស់ប្ដូរ",
testEmailSettings: "សាកល្បងការកំណត់អ៊ីមែល",
testEmailDescription: "សាកល្បងថាតើការកំណត់អ៊ីមែលបច្ចុប្បន្នអាចប្រើបានឬអត់",
testEmailAlert: "នេះនឹងផ្ញើអ៊ីមែលសាកល្បងដោយប្រើការកំណត់ SMTP របស់អ្នក។ សូមប្រាកដថា SMTP ត្រូវបានកំណត់យ៉ាងត្រឹមត្រូវជាមុន។",
// General Settings - Actions and status
save: "រក្សាទុកការផ្លាស់ប្តូរ",
saving: "កំពុងរក្សាទុក...",
settingsUpdated: "បានធ្វើបច្ចុប្បន្នភាពការកំណត់ដោយជោគជ័យ",
errorSavingSettings: "មានបញ្ហាក្នុងការរក្សាទុកការកំណត់",
@@ -48,5 +52,114 @@ export const settingsTranslations: SettingsTranslations = {
testConnection: "សាកល្បងការតភ្ជាប់",
testingConnection: "កំពុងសាកល្បងការតភ្ជាប់...",
connectionSuccess: "ការតភ្ជាប់ជោគជ័យ",
connectionFailed: "ការតភ្ជាប់បរាជ័យ"
connectionFailed: "ការតភ្ជាប់បរាជ័យ",
// User Management
addUser: "បន្ថែមអ្នកប្រើប្រាស់",
permissionNotice: "សេចក្តីជូនដំណឹងអំពីការអនុញ្ញាត:",
permissionNoticeAddUser: "ក្នុងនាមជាអ្នកប្រើប្រាស់ជាអ្នកគ្រប់គ្រង អ្នកមិនមានសិទ្ធិចូលមើល ឬកែប្រែការកំណត់ប្រព័ន្ធ និងអ៊ីមែលទេ។ ការកំណត់ទាំងនេះអាចចូលប្រើ និងកែប្រែបានដោយអ្នកគ្រប់គ្រងជាន់ខ្ពស់តែប៉ុណ្ណោះ។ សូមទាក់ទងអ្នកគ្រប់គ្រងជាន់ខ្ពស់របស់អ្នក ប្រសិនបើអ្នកត្រូវការធ្វើការផ្លាស់ប្តូរលើការកំណត់ប្រព័ន្ធ ឬការកំណត់អ៊ីមែល។",
loadingSettings: "កំពុងផ្ទុកការកំណត់...",
loadingSettingsError: "កំហុសក្នុងការផ្ទុកការកំណត់",
//NotificationSettings.ts
titleNotification: "ការកំណត់ការជូនដំណឹង",
descriptionChannelsServices: "កំណត់រចនាសម្ព័ន្ធបណ្តាញជូនដំណឹងសម្រាប់សេវាកម្មរបស់អ្នក",
addChannel: "បន្ថែមបណ្តាញ",
all: "បណ្តាញទាំងអស់",
telegram: "តេឡេក្រាម",
discord: "Discord",
slack: "Slack",
signal: "Signal",
googleChat: "Google Chat",
email: "អ៊ីមែល",
webhook: "Webhook",
// NotificationChannelDialog.tsx
editChannel: "កែសម្រួលបណ្តាញជូនដំណឹង",
addChannelDialog: "បន្ថែមបណ្តាញជូនដំណឹង",
channelName: "ឈ្មោះបណ្តាញ",
channelNameDesc: "ឈ្មោះសម្រាប់កំណត់អត្តសញ្ញាណបណ្តាញជូនដំណឹងនេះ",
channelType: "ប្រភេទបណ្តាញ",
selectType: "ជ្រើសរើសប្រភេទជូនដំណឹង",
enabled: "បើក",
enabledDesc: "បើក ឬបិទបណ្តាញជូនដំណឹងនេះ",
cancel: "បោះបង់",
updateChannel: "ធ្វើបច្ចុប្បន្នភាពបណ្តាញ",
createChannel: "បង្កើតបណ្តាញ",
payloadTemplates: "ទម្រង់បន្ទុក",
availablePlaceholders: "កន្លែងទុកជាមុនដែលអាចប្រើបាន៖",
server: "ម៉ាស៊ីនបម្រើ",
service: "សេវាកម្ម",
ssl: "SSL",
common: "ទូទៅ",
webhookUrl: "URL នៃ Webhook",
webhookUrlDesc: "URL ដែលការជូនដំណឹង webhook នឹងត្រូវបានផ្ញើទៅ",
payloadTemplate: "ទម្រង់បន្ទុក (ជាជម្រើស)",
payloadTemplateDesc: "ទម្រង់ JSON សម្រាប់បន្ទុក webhook។ ទុកចោលទទេដើម្បីប្រើទម្រង់លំនាំដើម។",
telegramChatId: "លេខសម្គាល់ជជែក",
telegramChatIdDesc: "លេខសម្គាល់ជជែក Telegram ដើម្បីផ្ញើការជូនដំណឹងទៅ",
botToken: "លេខសម្គាល់បុត",
botTokenDesc: "លេខសម្គាល់បុត Telegram របស់អ្នកពី @BotFather",
discordWebhookUrl: "URL នៃ Webhook",
discordWebhookUrlDesc: "URL នៃ webhook របស់ Discord ពីការកំណត់ម៉ាស៊ីនបម្រើរបស់អ្នក",
slackWebhookUrl: "URL នៃ Webhook",
slackWebhookUrlDesc: "URL នៃ webhook ចូលរបស់ Slack",
signalNumber: "លេខ Signal",
signalNumberDesc: "លេខទូរស័ព្ទ Signal ដើម្បីផ្ញើការជូនដំណឹងទៅ",
signalApiEndpoint: "ចំណុចបញ្ចប់ API របស់ Signal",
signalApiEndpointDesc: "ចំណុចបញ្ចប់ API សម្រាប់សេវាកម្ម Signal របស់អ្នក",
googleChatWebhookUrl: "URL នៃ Webhook របស់ Google Chat",
googleChatWebhookUrlDesc: "URL នៃ webhook របស់ Google Chat ពីកន្លែង Google Chat របស់អ្នក",
emailAddress: "អាសយដ្ឋានអ៊ីមែល",
emailAddressDesc: "អាសយដ្ឋានអ៊ីមែលដើម្បីផ្ញើការជូនដំណឹងទៅ",
emailSenderName: "ឈ្មោះអ្នកផ្ញើ",
emailSenderNameDesc: "ឈ្មោះបង្ហាញសម្រាប់អ៊ីមែលដែលផ្ញើចេញ",
smtpServer: "ម៉ាស៊ីនបម្រើ SMTP",
// smtpPort: "ច្រក SMTP",
// smtpPassword: "លេខសម្ងាត់ SMTP",
smtpPasswordDesc: "លេខសម្ងាត់សម្រាប់ការផ្ទៀងផ្ទាត់ជាមួយម៉ាស៊ីនបម្រើ SMTP",
ntfyEndpoint: "ចំណុចបញ្ចប់ NTFY",
ntfyEndpointDesc: "URL នៃចំណុចបញ្ចប់ NTFY រួមទាំងប្រធានបទរបស់អ្នក (ឧ. https://ntfy.sh/checkcle)",
apiToken: "លេខសម្គាល់ API",
apiTokenOptional: "លេខសម្គាល់ API (ជាជម្រើស)",
apiTokenDesc: "លេខសម្គាល់ API ជាជម្រើសសម្រាប់ការផ្ទៀងផ្ទាត់ជាមួយម៉ាស៊ីនបម្រើ NTFY",
pushoverUserKey: "លេខសម្គាល់អ្នកប្រើប្រាស់",
pushoverUserKeyDesc: "លេខសម្គាល់អ្នកប្រើប្រាស់ Pushover របស់អ្នក (ឬលេខសម្គាល់ក្រុម)",
notifiarrChannelId: "លេខសម្គាល់បណ្តាញ",
notifiarrChannelIdDesc: "លេខសម្គាល់បណ្តាញ Discord ដែលការជូនដំណឹងនឹងត្រូវបានផ្ញើទៅ",
gotifyServerUrl: "URL នៃម៉ាស៊ីនបម្រើ",
gotifyServerUrlDesc: "URL នៃម៉ាស៊ីនបម្រើ Gotify របស់អ្នក",
errorSaveChannel: "បរាជ័យក្នុងការរក្សាទុកបណ្តាញជូនដំណឹង",
channelNamePlaceholder: "ប៉ុស្តិ៍ផ្ទាល់សារជូនដំណឹងរបស់ខ្ញុំ",
telegramChatIdPlaceholder: "ID កុំព្យូទ័រនិមិត្តសារ Telegram",
botTokenPlaceholder: "Token Bot Telegram",
discordWebhookUrlPlaceholder: "https://discord.com/api/webhooks/...",
slackWebhookUrlPlaceholder: "https://hooks.slack.com/services/...",
signalNumberPlaceholder: "+1234567890",
signalApiEndpointPlaceholder: "https://your-signal-api.com/v2/send",
googleChatWebhookUrlPlaceholder: "https://chat.googleapis.com/v1/spaces/...",
emailAddressPlaceholder: "notifications@example.com",
emailSenderNamePlaceholder: "ប្រព័ន្ធជូនដំណឹងព្រមាន",
smtpServerPlaceholder: "smtp.gmail.com",
smtpPortPlaceholder: "587",
smtpPasswordPlaceholder: "បញ្ចូលពាក្យសម្ងាត់ SMTP របស់អ្នក",
ntfyEndpointPlaceholder: "https://ntfy.sh/your-topic",
apiTokenPlaceholder: "បញ្ចូល token API",
pushoverUserKeyPlaceholder: "កូនសោអ្នកប្រើ Pushover របស់អ្នក",
notifiarrChannelIdPlaceholder: "ID ប៉ុស្តិ៍ផ្ទាល់សារ Discord",
gotifyServerUrlPlaceholder: "https://your-gotify-server.com",
webhookUrlPlaceholder: "https://api.example.com/webhook",
// DataRetentionSettings.tsx
permissionNoticeDataRetention: "ជាអ្នកប្រើប្រាស់អ្នកគ្រប់គ្រង អ្នកមិនមានសិទ្ធចូលដំណើរការការកំណត់រក្សាទុកទិន្នន័យទេ។ ការកំណត់ទាំងនេះអាចត្រូវបានចូលដំណើរការនិងកែប្រែដោយតែអ្នកគ្រប់គ្រងដ៏ខ្ពស់ប៉ុណ្ណោះ។",
loadingRetentionSettings: "កំពុងផ្ទុកការកំណត់រក្សាទុក...",
dataRetention: "ការកំណត់រក្សាទុកទិន្នន័យ",
dataRetentionDescription: "កំណត់រចនាសម្ព័ន្ធពេលវេលាដែលទិន្នន័យត្រួតពិនិត្យត្រូវបានរក្សាទុកនៅក្នុងប្រព័ន្ធ",
uptimeRetentionLabel: "ការរក្សាទុកការតាមដានពេលដំណើរការ (ចំនួនថ្ងៃ)",
uptimeRetentionHelp: "ទិន្នន័យពេលដំណើរការសេវាកម្ម និងឧប្បត្តិហេតុយូរជាងនេះនឹងត្រូវលុបដោយស្វ័យប្រវត្តិ។",
serverRetentionLabel: "ការរក្សាទុកការតាមដានម៉ាស៊ីនមេ (ចំនួនថ្ងៃ)",
serverRetentionHelp: "រង្វាស់ម៉ាស៊ីនមេ និងទិន្នន័យដំណើរការដែលយូរជាងនេះនឹងត្រូវលុបដោយស្វ័យប្រវត្តិ។",
lastCleanup: "ការសម្អាតស្វ័យប្រវត្តិចុងក្រោយ",
};
@@ -0,0 +1,76 @@
export interface DockerTranslations {
// Tables and headers
dockerContainers: string;
container: string;
status: string;
cpuUsage: string;
memory: string;
disk: string;
uptime: string;
lastChecked: string;
actions: string;
searchContainersPlaceholder: string;
refresh: string;
openMenu: string;
viewMetrics: string;
viewDetails: string;
// Status badges and stats
running: string;
stopped: string;
warning: string;
unknown: string;
totalContainers: string;
containersLabel: string;
// Empty states
noContainersFound: string;
noContainersRunning: string;
tryAdjustSearch: string;
startSomeContainers: string;
// Metrics dialog
containerMetricsTitle: string; // e.g., Container Metrics: {name}
dockerId: string; // Docker ID
loadingMetrics: string;
errorLoadingMetrics: string;
noMetricsAvailable: string;
// Time ranges
minutes60: string;
day1: string;
days7: string;
month1: string;
months3: string;
// Metric labels
used: string;
free: string;
total: string;
usage: string;
cpu: string;
memoryTitle: string;
diskTitle: string;
network: string;
// Charts and series
cpuUsagePct: string;
cpuUsageVsAvailable: string;
cpuAvailablePct: string;
ramUsagePct: string;
memoryUsageBytes: string;
usedMemory: string;
totalMemory: string;
diskUsagePct: string;
diskUsageBytes: string;
usedDisk: string;
totalDisk: string;
networkTraffic: string;
networkSpeedKbs: string;
rxBytes: string;
txBytes: string;
rxSpeedKbs: string;
txSpeedKbs: string;
}
@@ -8,6 +8,11 @@ import { MaintenanceTranslations } from './maintenance';
import { IncidentTranslations } from './incident';
import { SSLTranslations } from './ssl';
import { SettingsTranslations } from './settings';
import { InstanceTranslations } from './instance';
import { OperationTranslations } from './operation';
import { RegionTranslations } from './region';
import { DockerTranslations } from './docker';
import { PublicTranslations } from './public';
export interface Translations {
common: CommonTranslations;
@@ -19,4 +24,9 @@ export interface Translations {
incident: IncidentTranslations;
ssl: SSLTranslations;
settings: SettingsTranslations;
instance: InstanceTranslations;
operation: OperationTranslations;
region: RegionTranslations;
docker: DockerTranslations;
public: PublicTranslations;
}
@@ -0,0 +1,162 @@
export interface InstanceTranslations {
// InstanceMonitoring.tsx
instanceMonitoring: string;
describeMonitorInstance: string;
addServerAgent: string;
errorLoadingServers: string;
unableToFetchServerData: string;
retry: string;
// ServerTable.tsx
servers: string;
loadingServers: string;
searchServersPlaceholder: string;
noServersFound: string;
name: string;
status: string;
OS: string;
IPAddress: string;
CPU: string;
memory: string;
disk: string;
uptime: string;
lastChecked: string;
actions: string;
viewServerDetail: string;
containerMonitoring: string;
resumeMonitoring: string;
pauseMonitoring: string;
editServer: string;
deleteServer: string;
deleteServerConfirmTitle: string;
deleteServerConfirmDesc: string;
cancel: string;
deleting: string;
delete: string;
serverDeleted: string;
serverDeletedDesc: string;
error: string;
deleteServerError: string;
serverPaused: string;
serverResumed: string;
monitoringPaused: string;
monitoringResumed: string;
pauseServerError: string;
resumeServerError: string;
// ServerStatsCards.tsx
totalServers: string;
onlineServers: string;
offlineServers: string;
warningServers: string;
// AddServerAgentDialog.tsx
addServerMonitoringAgent: string;
configureAgentDesc: string;
configureAgent: string;
oneClickInstall: string;
dockerOneClick: string;
manualInstallation: string;
validationError: string;
fillRequiredFields: string;
serverAgentCreated: string;
serverAgentCreatedDesc: string;
failedToCreateAgent: string;
// ServerAgentConfigForm.tsx
serverName: string;
serverNamePlaceholder: string;
serverNameDesc: string;
serverAgentId: string;
serverAgentIdDesc: string;
operatingSystem: string;
checkInterval: string;
selectInterval: string;
interval30s: string;
interval1m: string;
interval2m: string;
interval5m: string;
checkIntervalDesc: string;
retryAttempts: string;
selectRetryAttempts: string;
attempt1: string;
attempt2: string;
attempt3: string;
attempt5: string;
retryAttemptsDesc: string;
serverToken: string;
serverTokenDesc: string;
systemUrl: string;
systemUrlDesc: string;
creatingAgent: string;
createServerAgent: string;
// EditServerDialog.tsx
editServerConfiguration: string;
serverNameLabel: string;
enterServerNamePlaceholder: string;
checkIntervalLabel: string;
// selectInterval: string;
interval10m: string;
maxRetriesLabel: string;
selectMaxRetries: string;
retry1: string;
retry2: string;
retry3: string;
retry5: string;
retry10: string;
dockerMonitoring: string;
enabled: string;
disabled: string;
enableNotifications: string;
notificationSettings: string;
notificationChannels: string;
loadingChannels: string;
noChannelsAvailable: string;
selectedChannels: string;
serverSetThreshold: string;
loadingThresholds: string;
selectServerThreshold: string;
noThreshold: string;
thresholdDetails: string;
cpuThresholdPct: string;
ramThresholdPct: string;
diskThresholdPct: string;
networkThresholdPct: string;
serverTemplate: string;
loadingTemplates: string;
selectServerTemplate: string;
noTemplate: string;
templateDetails: string;
ramMessage: string;
cpuMessage: string;
diskMessage: string;
networkMessage: string;
upMessage: string;
downMessage: string;
noMessageDefined: string;
serverUpdated: string;
serverUpdatedDesc: string;
updating: string;
updateServer: string;
failedToLoadChannels: string;
failedToLoadTemplates: string;
failedToLoadThresholds: string;
warning: string;
serverUpdatedButThresholdFailed: string;
failedToUpdateServer: string;
// ServerHistoryCharts.tsx
historicalPerformance: string;
loading: string;
errorLoadingChartData: string;
noHistoricalData: string;
rawMetricsCount: string;
serverIdTimeRange: string;
dataExistsOutsideRange: string;
noMetricsDataFound: string;
dataPointsTimeRange: string;
}
@@ -0,0 +1,85 @@
export interface OperationTranslations {
// OperationalPageContent.tsx
failedToLoadOperationalPages: string;
loadingoperationalPages: string;
tryagain: string;
operationalPages: string;
describeOperation: string;
refresh: string;
noOperationalPagesFound: string;
createYourFirstOperationalPage: string;
totalPages: string;
publicPages: string;
operational: string;
deleteOperationalPage: string;
deleteOperationalPageConfirm: string;
cancel: string;
delete: string;
deleting: string;
// editOperationalPageDialog.tsx
editOperationalPage: string;
updateYourOperationalPage: string;
title: string;
myServiceStatusPlaceholder: string;
slug: string;
myServiceStatusSlugPlaceholder: string;
description: string;
operationalPageDescriptionPlaceholder: string;
theme: string;
selectTheme: string;
themeDefault: string;
themeDark: string;
themeLight: string;
status: string;
selectStatus: string;
statusOperational: string;
statusDegraded: string;
statusMaintenance: string;
statusMajorOutage: string;
publicPage: string;
makePagePublic: string;
customDomainOptional: string;
customDomainPlaceholder: string;
customDomainDescription: string;
cancelUpdate: string;
updating: string;
updatePage: string;
// ComponentsSelector.tsx
statusPageComponents: string;
addMonitoringComponentsDesc: string;
selectedComponents: string;
service: string;
server: string;
addComponent: string;
componentName: string;
componentNamePlaceholder: string;
displayOrder: string;
descriptionOptional: string;
descriptionPlaceholder: string;
uptimeServiceOptional: string;
selectUptimeService: string;
serverIdOptional: string;
serverIdPlaceholder: string;
cancelComponent : string;
// OperationalPageCard.tsx
public: string;
yes: string;
no: string;
updated: string;
view: string;
edit: string;
// CreateOperationalPageDialog.tsx
createOperationalPage: string;
createOperationalPageDesc: string;
createPage: string;
creating: string;
initialStatus: string;
}
@@ -0,0 +1,23 @@
export interface PublicTranslations {
// CurrentStatusSection
systemStatus: string;
allOperational: string;
degradedPerformance: string;
underMaintenance: string;
majorOutage: string;
statusUnknown: string;
autoUpdatedByHealth: string;
lastUpdatedAt: string; // e.g., Last updated: {time} UTC
liveStatusMonitoring: string;
// PublicStatusPage generic
loadingStatusPage: string;
fetchingRealtimeStatus: string;
slugLabel: string; // Slug
statusPageNotFound: string;
notFoundDescription: string;
goBack: string;
retry: string;
}
@@ -0,0 +1,92 @@
export interface RegionTranslations {
// RegionalMonitoringContent.tsx
regionalmonitoring: string;
descriptRegionPage: string;
addRegionalAgent: string;
totalAgents: string;
regionalMonitoringAgents: string;
onlineAgents: string;
currentlyConnected: string;
offlineAgents: string;
disconnectedAgents: string;
regionalAgents: string;
noRegionalAgents: string;
getStartedAddAgent: string;
addFirstAgent: string;
agentRemoved: string;
agentRemovedDesc: string;
regionalAgentAdded: string;
regionalAgentAddedDesc: string;
error: string;
failedToRemoveAgent: string;
// AddRegionalAgentDialog.tsx
addRegionalMonitoringAgent: string;
deployRegionalMonitoringAgent: string;
regionName: string;
regionNamePlaceholder: string;
agentServerIpAddress: string;
agentIpPlaceholder: string;
cancel: string;
generateInstallation: string;
generating: string;
agentConfigurationReady: string;
oneClickInstallScriptGenerated: string;
oneClickInstallTab: string;
agentDetailsTab: string;
manualInstallTab: string;
oneClickAutomaticInstallation: string;
completeInstallationDescription: string;
whatThisScriptDoes: string;
scriptActionDownload: string;
scriptActionInstall: string;
scriptActionConfigure: string;
scriptActionStart: string;
scriptActionHealthChecks: string;
runCommandOnServer: string;
downloadCompleteScript: string;
copyFullScript: string;
localDevelopmentNotice: string;
generatedAgentConfiguration: string;
autoConfiguredDuringInstallation: string;
agentId: string;
regionNameDetail: string;
serverIp: string;
apiEndpoint: string;
authenticationToken: string;
configurationFileLocation: string;
manualInstallationSteps: string;
stepByStepManualInstallation: string;
step1DownloadPackage: string;
downloadAmd64Notice: string;
downloadArm64Notice: string;
step2InstallPackage: string;
step3ConfigureAgent: string;
copySampleConfiguration: string;
addConfigurationValues: string;
step4StartService: string;
step5VerifyInstallation: string;
addAnotherAgent: string;
completeSetup: string;
copied: string;
copiedDescription: string;
copyFailed: string;
copyFailedDescription: string;
copyFailedLocalhost: string;
copyFailedChrome: string;
downloaded: string;
downloadedDescription: string;
failedToCreateAgent: string;
// RegionalAgentCard.tsx
defaultBadge: string;
copyAgentId: string;
removeAgent: string;
online: string;
offline: string;
lastUpdated: string;
activeMonitoring: string;
connectionLost: string;
}
@@ -134,4 +134,67 @@ export interface ServicesTranslations {
processing: string;
back: string;
last20Checks: string;
// OneClickInstallTab.tsx
oneClickInstallTitle: string;
oneClickInstallDesc: string;
quickInstallCommand: string;
copy: string;
runCommandOnServer: string;
sshIntoServer: string;
pasteAndRun: string;
agentInstalled: string;
done: string;
// DockerOneClickTab.tsx
dockerOneClickTitle: string;
dockerOneClickDesc: string;
dockerOneClickCommand: string;
dockerScriptWill: string;
dockerScriptStep1: string;
dockerScriptStep2: string;
dockerScriptStep3: string;
dockerScriptStep4: string;
directDockerTitle: string;
directDockerDesc: string;
dockerRunCommand: string;
dockerPrerequisites: string;
dockerPrereqStep1: string;
dockerPrereqStep2: string;
dockerPrereqStep3: string;
// ManualInstallTab.tsx
manualInstallTitle: string;
manualInstallDesc: string;
serverName: string;
agentId: string;
osType: string;
downloadScript: string;
makeExecutable: string;
runInstall: string;
prerequisites: string;
prereqRoot: string;
prereqCurl: string;
prereqInternet: string;
afterInstall: string;
agentWillStart: string;
// ServerDetail.tsx
errorLoadingServer: string;
unableToFetchServerData: string;
backToServers: string;
loadingServerDetails: string;
serverDetail: string;
monitorServerMetrics: string;
serverHostnameIpOs: string;
// ContainerMonitoring.tsx
errorLoadingContainers: string;
unableToFetchContainerData: string;
errorUnknown: string;
containerMonitoring: string;
monitorAndManageContainers: string;
serverIdLabel: string;
}
@@ -58,4 +58,107 @@ export interface SettingsTranslations {
permissionNoticeAddUser: string;
loadingSettings: string;
loadingSettingsError: string;
//NotificationSettings.ts
titleNotification: string;
descriptionChannelsServices: string;
addChannel: string;
all: string;
telegram: string;
discord: string;
slack: string;
signal: string;
googleChat: string;
email: string;
webhook: string;
// NotificationChannelDialog.tsx
editChannel: string;
addChannelDialog: string;
channelName: string;
channelNameDesc: string;
channelType: string;
selectType: string;
enabled: string;
enabledDesc: string;
cancel: string;
updateChannel: string;
createChannel: string;
payloadTemplates: string;
availablePlaceholders: string;
server: string;
service: string;
ssl: string;
common: string;
webhookUrl: string;
webhookUrlDesc: string;
payloadTemplate: string;
payloadTemplateDesc: string;
telegramChatId: string;
telegramChatIdDesc: string;
botToken: string;
botTokenDesc: string;
discordWebhookUrl: string;
discordWebhookUrlDesc: string;
slackWebhookUrl: string;
slackWebhookUrlDesc: string;
signalNumber: string;
signalNumberDesc: string;
signalApiEndpoint: string;
signalApiEndpointDesc: string;
googleChatWebhookUrl: string;
googleChatWebhookUrlDesc: string;
emailAddress: string;
emailAddressDesc: string;
emailSenderName: string;
emailSenderNameDesc: string;
smtpServer: string;
// smtpPort: string;
// smtpPassword: string;
smtpPasswordDesc: string;
ntfyEndpoint: string;
ntfyEndpointDesc: string;
apiToken: string;
apiTokenOptional: string;
apiTokenDesc: string;
pushoverUserKey: string;
pushoverUserKeyDesc: string;
notifiarrChannelId: string;
notifiarrChannelIdDesc: string;
gotifyServerUrl: string;
gotifyServerUrlDesc: string;
errorSaveChannel: string;
channelNamePlaceholder: string;
telegramChatIdPlaceholder: string;
botTokenPlaceholder: string;
discordWebhookUrlPlaceholder: string;
slackWebhookUrlPlaceholder: string;
signalNumberPlaceholder: string;
signalApiEndpointPlaceholder: string;
googleChatWebhookUrlPlaceholder: string;
emailAddressPlaceholder: string;
emailSenderNamePlaceholder: string;
smtpServerPlaceholder: string;
smtpPortPlaceholder: string;
smtpPasswordPlaceholder: string;
ntfyEndpointPlaceholder: string;
apiTokenPlaceholder: string;
pushoverUserKeyPlaceholder: string;
notifiarrChannelIdPlaceholder: string;
gotifyServerUrlPlaceholder: string;
webhookUrlPlaceholder: string;
// DataRetentionSettings.tsx
// permissionNotice: string;
permissionNoticeDataRetention: string;
loadingRetentionSettings: string;
dataRetention: string;
dataRetentionDescription: string;
uptimeRetentionLabel: string;
uptimeRetentionHelp: string;
serverRetentionLabel: string;
serverRetentionHelp: string;
lastCleanup: string;
// save: string;
}