Localize admin cluster and billing-plan pages.
Move the cluster management page (resource panel, tools install/uninstall flow, statuses/health) and the billing-plans page (pricing matrices, deploy defaults, add-ons, data-retention settings) onto the dictionaries with locale-aware dates and RTL-aware tables. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -581,6 +581,153 @@ const en: Dictionary = {
|
||||
clusterStatus: { active: 'active', inactive: 'inactive', error: 'error' },
|
||||
clusterHealth: { healthy: 'healthy', degraded: 'degraded', unhealthy: 'unhealthy', unknown: 'unknown' },
|
||||
},
|
||||
clusters: {
|
||||
title: 'Cluster Management',
|
||||
count: '{n} cluster(s) registered',
|
||||
addCluster: 'Add Cluster',
|
||||
registerNew: 'Register New Cluster',
|
||||
verifyNote: 'The system will verify the Kubernetes connection before registering.',
|
||||
name: 'Name',
|
||||
apiServer: 'API Server URL',
|
||||
region: 'Region',
|
||||
provider: 'Provider',
|
||||
selectProvider: 'Select provider',
|
||||
weight: 'Weight',
|
||||
tags: 'Tags',
|
||||
tagsPlaceholder: 'ssd, production, iran',
|
||||
description: 'Description',
|
||||
kubeconfig: 'Kubeconfig (YAML)',
|
||||
kubeconfigPlaceholder: 'Paste your kubeconfig here...',
|
||||
setDefault: 'Set as default cluster',
|
||||
verifying: 'Verifying connection & adding...',
|
||||
added: 'Cluster added & connection verified ✓',
|
||||
addFailed: 'Failed to add cluster',
|
||||
connectionOk: 'Connection OK — Kubernetes {version}',
|
||||
connectionFailed: 'Connection failed: {error}',
|
||||
testFailed: 'Failed to test connection',
|
||||
removed: 'Cluster removed',
|
||||
noClusters: 'No clusters registered yet.',
|
||||
noClustersHint: 'Add a Kubernetes cluster to start deploying applications.',
|
||||
defaultBadge: 'Default',
|
||||
healthBadge: 'health: {status}',
|
||||
weightBadge: 'weight {n}',
|
||||
resources: 'Resources',
|
||||
testing: 'Testing...',
|
||||
test: 'Test',
|
||||
remove: 'Remove',
|
||||
removeTitle: 'Remove Cluster',
|
||||
removeMessage: 'Are you sure you want to remove “{name}”?',
|
||||
loadingResources: 'Loading resources...',
|
||||
resourcesFailed: 'Failed to load resources',
|
||||
nodes: 'Nodes',
|
||||
pods: 'Pods',
|
||||
apps: 'Apps',
|
||||
totalCpu: 'Total CPU',
|
||||
cpuReserved: 'CPU Reserved',
|
||||
memReserved: 'Memory Reserved',
|
||||
memory: 'Memory',
|
||||
capacity: 'capacity',
|
||||
allocatable: 'allocatable',
|
||||
colName: 'Name',
|
||||
colStatus: 'Status',
|
||||
colRoles: 'Roles',
|
||||
colCpu: 'CPU (Cap / Alloc)',
|
||||
colMemory: 'Memory (Cap / Alloc)',
|
||||
toolsTitle: 'Tools Management',
|
||||
toolsSubtitle: 'Install and manage infrastructure tools per cluster. Nothing is installed automatically — add only what each cluster needs.',
|
||||
defaultSuffix: ' (default)',
|
||||
loadingTools: 'Loading tools…',
|
||||
toolsFailed: 'Failed to load tools for this cluster.',
|
||||
toolStatus: {
|
||||
installed: 'Installed',
|
||||
installing: 'Installing…',
|
||||
failed: 'Failed',
|
||||
not_installed: 'Not installed',
|
||||
unknown: 'Unknown',
|
||||
},
|
||||
requires: 'Requires:',
|
||||
uninstall: 'Uninstall',
|
||||
uninstalling: 'Removing…',
|
||||
install: 'Install',
|
||||
installing: 'Installing…',
|
||||
repair: 'Repair',
|
||||
confirmInstall: 'Confirm install',
|
||||
installRequiredFirst: 'Install required tools first',
|
||||
removeToolTitle: 'Remove {name}',
|
||||
removeToolMessage: 'Uninstall “{name}” from this cluster?',
|
||||
uninstallConfirm: 'Uninstall',
|
||||
installStarted: '{name} install started',
|
||||
installToolFailed: 'Failed to install {name}',
|
||||
toolRemoved: '{name} removed',
|
||||
removeToolFailed: 'Failed to remove {name}',
|
||||
fieldRequired: '{field} is required',
|
||||
clusterStatus: { active: 'active', maintenance: 'maintenance', inactive: 'inactive', error: 'error' },
|
||||
clusterHealth: { healthy: 'healthy', degraded: 'degraded', unhealthy: 'unhealthy', unknown: 'unknown' },
|
||||
na: 'N/A',
|
||||
},
|
||||
billing: {
|
||||
cycles: { hourly: 'Hourly', monthly: 'Monthly', yearly: 'Yearly' },
|
||||
resources: {
|
||||
base_fee: 'Base fee',
|
||||
cpu_per_core: 'CPU (per core)',
|
||||
memory_per_gb: 'Memory (per GB)',
|
||||
storage_per_gb: 'Storage (per GB)',
|
||||
database_addon: 'Database addon',
|
||||
redis_addon: 'Redis',
|
||||
rabbitmq_addon: 'RabbitMQ',
|
||||
elasticsearch_addon: 'Elasticsearch',
|
||||
custom_domain_addon: 'Custom domain + SSL',
|
||||
},
|
||||
resourceCol: 'Resource',
|
||||
title: 'Billing Plans',
|
||||
subtitle: 'Set unit prices per resource. Users choose CPU, memory, and storage when deploying; cost = their usage × these rates.',
|
||||
editPlans: 'Edit plans',
|
||||
saving: 'Saving...',
|
||||
save: 'Save',
|
||||
saved: 'Billing plans saved',
|
||||
saveFailed: 'Failed to save billing plans',
|
||||
howTitle: 'How billing works',
|
||||
howApps: 'Applications — user picks runtime resources in deploy; you set price per core, GB, base fee, and database addon. CPU and RAM in estimates bill proportionally (for example half the per-GB rate at half a gigabyte of memory).',
|
||||
howOptional: 'Optional services (Redis, RabbitMQ) — same unit matrix per service as runtimes; deploy wizard defaults are edited separately. CPU/RAM in the cost calculator bill in proportion to actual limits (e.g. 500Mi counts as 0.5× the per-GB memory rate).',
|
||||
howDefaults: 'Deploy defaults — optional prefill only; changing them does not change what existing apps pay unless the user chose those values at deploy.',
|
||||
noPricing: 'No pricing data',
|
||||
appRuntimes: 'Application runtimes',
|
||||
appRuntimesSub: 'Unit pricing per runtime (hourly / monthly / yearly)',
|
||||
unitPricesSuffix: '— unit prices',
|
||||
fillYearly: 'Fill yearly from monthly ×12',
|
||||
optionalServices: 'Optional services',
|
||||
optionalServicesSub: 'Unit pricing per service (hourly / monthly / yearly)',
|
||||
deployDefaults: 'Optional services — deploy defaults',
|
||||
deployDefaultsSub: 'Prefill CPU, memory, and storage when a user enables each service in the deploy wizard',
|
||||
addons: 'Add-ons',
|
||||
addonsSub: 'Flat fees not tied to a runtime',
|
||||
customDomainTitle: 'Custom domain + SSL',
|
||||
customDomainSub: 'Flat fee per billing cycle (not resource-based)',
|
||||
loggingNote: 'Prefilled limits for Fluent Bit log shippers (billed per enabled workload when logging is on).',
|
||||
logShipperCpuLimit: 'Log shipper CPU limit',
|
||||
logShipperMemoryLimit: 'Log shipper memory limit',
|
||||
defaultsNote: 'Shown when a user enables this service in deploy. They can change CPU, memory, and storage in Resources & Configuration; actual billing uses their choices × unit prices below.',
|
||||
cpuRequest: 'CPU request',
|
||||
cpuLimit: 'CPU limit',
|
||||
memoryRequest: 'Memory request',
|
||||
memoryLimit: 'Memory limit',
|
||||
storageGi: 'Storage (Gi)',
|
||||
oneCore: '1 core',
|
||||
twoCores: '2 cores',
|
||||
retentionTitle: 'Data Retention & Deletion Policy',
|
||||
edit: 'Edit',
|
||||
retentionSub: 'Configure how long user data is retained after plan expiration before permanent deletion.',
|
||||
hourlyPlans: 'Hourly Plans',
|
||||
monthlyPlans: 'Monthly Plans',
|
||||
yearlyPlans: 'Yearly Plans',
|
||||
deleteAfterHours: 'Delete after (hours):',
|
||||
deleteAfterDays: 'Delete after (days):',
|
||||
saveSettings: 'Save Settings',
|
||||
lifecycleSaved: 'Lifecycle settings updated',
|
||||
saveFailedShort: 'Failed to save',
|
||||
hours: 'hours',
|
||||
days: 'days',
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user