diff --git a/src/locales/en-US/clusters.ts b/src/locales/en-US/clusters.ts
index 314dc594..c92b3fc3 100644
--- a/src/locales/en-US/clusters.ts
+++ b/src/locales/en-US/clusters.ts
@@ -39,7 +39,7 @@ export default {
'clusters.workerpool.batchSize.desc':
'Number of workers created simultaneously in the Worker pool',
'clusters.create.addworker.tips':
- 'Please make sure the prerequisites for {label} are met before executing the following command.',
+ 'Please make sure the prerequisites are met before executing the following command.',
'clusters.create.addCommand.tips':
'On the Worker that needs to be added, run the following command to join it to the cluster.',
'clusters.create.addCommand.k8s.tips':
diff --git a/src/locales/en-US/menu.ts b/src/locales/en-US/menu.ts
index 4c35707a..ae6892be 100644
--- a/src/locales/en-US/menu.ts
+++ b/src/locales/en-US/menu.ts
@@ -36,7 +36,7 @@ export default {
'menu.login': 'Login',
'menu.usage': 'Usage',
'menu.usage.usage': 'Usage',
- 'menu.billingAndUsage': 'Billing & Usage',
+ 'menu.billingAndUsage': 'Usage & Billing',
'menu.billingAndUsage.usage': 'Usage',
'menu.404': '404',
'menu.resources.clusters': 'Clusters',
diff --git a/src/locales/ja-JP/clusters.ts b/src/locales/ja-JP/clusters.ts
index ce1b7244..e655636c 100644
--- a/src/locales/ja-JP/clusters.ts
+++ b/src/locales/ja-JP/clusters.ts
@@ -39,7 +39,7 @@ export default {
'clusters.workerpool.batchSize.desc':
'Number of workers created simultaneously in the Worker pool',
'clusters.create.addworker.tips':
- 'Please make sure the prerequisites for {label} are met before executing the following command.',
+ 'Please make sure the prerequisites are met before executing the following command.',
'clusters.create.addCommand.tips':
'On the Worker that needs to be added, run the following command to join it to the cluster.',
'clusters.create.addCommand.k8s.tips':
diff --git a/src/locales/ja-JP/menu.ts b/src/locales/ja-JP/menu.ts
index 8fa294e0..bc685b54 100644
--- a/src/locales/ja-JP/menu.ts
+++ b/src/locales/ja-JP/menu.ts
@@ -27,7 +27,7 @@ export default {
'menu.login': 'ログイン',
'menu.usage': '使用状況',
'menu.usage.usage': '使用状況',
- 'menu.billingAndUsage': '請求と使用状況',
+ 'menu.billingAndUsage': '使用状況と請求',
'menu.billingAndUsage.usage': '使用状況',
'menu.404': '404',
'menu.settings': 'Settings',
diff --git a/src/locales/ru-RU/clusters.ts b/src/locales/ru-RU/clusters.ts
index b56e2a7f..92406fdf 100644
--- a/src/locales/ru-RU/clusters.ts
+++ b/src/locales/ru-RU/clusters.ts
@@ -39,7 +39,7 @@ export default {
'clusters.workerpool.batchSize.desc':
'Количество воркеров, создаваемых одновременно в пуле воркеров',
'clusters.create.addworker.tips':
- 'Пожалуйста, убедитесь, что выполнены предварительные условия для {label} перед выполнением следующей команды.',
+ 'Пожалуйста, убедитесь, что выполнены предварительные условия перед выполнением следующей команды.',
'clusters.create.addCommand.tips':
'На воркере, который необходимо добавить, выполните следующую команду, чтобы присоединить его к кластеру.',
'clusters.create.addCommand.k8s.tips':
diff --git a/src/locales/ru-RU/menu.ts b/src/locales/ru-RU/menu.ts
index ae81bd9d..1225945b 100644
--- a/src/locales/ru-RU/menu.ts
+++ b/src/locales/ru-RU/menu.ts
@@ -27,7 +27,7 @@ export default {
'menu.login': 'Авторизация',
'menu.usage': 'Использование',
'menu.usage.usage': 'Использование',
- 'menu.billingAndUsage': 'Биллинг и использование',
+ 'menu.billingAndUsage': 'Использование и биллинг',
'menu.billingAndUsage.usage': 'Использование',
'menu.404': 'Ошибка 404',
'menu.resources.workers': 'Воркеры',
diff --git a/src/locales/tr-TR/clusters.ts b/src/locales/tr-TR/clusters.ts
index 27249305..efacc6d3 100644
--- a/src/locales/tr-TR/clusters.ts
+++ b/src/locales/tr-TR/clusters.ts
@@ -39,7 +39,7 @@ export default {
'clusters.workerpool.batchSize.desc':
'İşçi havuzunda eşzamanlı olarak oluşturulan işçi düğüm sayısı',
'clusters.create.addworker.tips':
- 'Aşağıdaki komutu çalıştırmadan önce lütfen {label} için ön koşulların karşılandığından emin olun.',
+ 'Aşağıdaki komutu çalıştırmadan önce lütfen ön koşulların karşılandığından emin olun.',
'clusters.create.addCommand.tips':
'Eklenmesi gereken İşçi Düğümde, kümeye katılması için aşağıdaki komutu çalıştırın.',
'clusters.create.addCommand.k8s.tips':
diff --git a/src/locales/tr-TR/menu.ts b/src/locales/tr-TR/menu.ts
index 71a8455f..81f96b0d 100644
--- a/src/locales/tr-TR/menu.ts
+++ b/src/locales/tr-TR/menu.ts
@@ -34,7 +34,7 @@ export default {
'menu.login': 'Giriş',
'menu.usage': 'Kullanım',
'menu.usage.usage': 'Kullanım',
- 'menu.billingAndUsage': 'Faturalandırma ve Kullanım',
+ 'menu.billingAndUsage': 'Kullanım ve Faturalandırma',
'menu.billingAndUsage.usage': 'Kullanım',
'menu.404': '404',
'menu.resources.clusters': 'Kümeler',
diff --git a/src/locales/zh-CN/clusters.ts b/src/locales/zh-CN/clusters.ts
index 33321fc0..f4e87e8e 100644
--- a/src/locales/zh-CN/clusters.ts
+++ b/src/locales/zh-CN/clusters.ts
@@ -38,7 +38,7 @@ export default {
'clusters.create.noRegions': '无可用的区域',
'clusters.workerpool.batchSize.desc': '节点池中同时创建的节点数量。',
'clusters.create.addworker.tips':
- '在执行以下命令之前,请确保已满足 {label} 的先决条件。',
+ '在执行以下命令之前,请确保已满足先决条件。',
'clusters.create.addCommand.tips':
'在需要添加的节点上运行以下命令,将其加入到集群中。',
'clusters.create.addCommand.k8s.tips':
diff --git a/src/locales/zh-CN/dashboard.ts b/src/locales/zh-CN/dashboard.ts
index b9052ecf..7a42b97d 100644
--- a/src/locales/zh-CN/dashboard.ts
+++ b/src/locales/zh-CN/dashboard.ts
@@ -2,7 +2,7 @@ export default {
'dashboard.workers': '节点',
'dashboard.deployments': '部署',
'dashboard.clusters': '集群',
- 'dashboard.totalgpus': 'GPUs',
+ 'dashboard.totalgpus': 'GPU',
'dashboard.systemload': '系统负载',
'dashboard.memory': '内存',
'dashboard.vram': '显存',
diff --git a/src/locales/zh-CN/menu.ts b/src/locales/zh-CN/menu.ts
index 7d724ee5..40da5533 100644
--- a/src/locales/zh-CN/menu.ts
+++ b/src/locales/zh-CN/menu.ts
@@ -29,7 +29,7 @@ export default {
'menu.login': '登录',
'menu.usage': '使用量',
'menu.usage.usage': '使用量',
- 'menu.billingAndUsage': '计费与用量',
+ 'menu.billingAndUsage': '用量与计费',
'menu.billingAndUsage.usage': '用量统计',
'menu.404': '404',
'menu.resources.workers': '节点',
diff --git a/src/pages/cluster-management/components/add-worker/select-vendor.tsx b/src/pages/cluster-management/components/add-worker/select-vendor.tsx
index 8e05bdab..b8cc4631 100644
--- a/src/pages/cluster-management/components/add-worker/select-vendor.tsx
+++ b/src/pages/cluster-management/components/add-worker/select-vendor.tsx
@@ -36,9 +36,7 @@ const SelectVendor: React.FC = ({ disabled }) => {
// for the Kubernetes provider; other providers stay single-select.
const multiCapable = provider === ProviderValueMap.Kubernetes;
- const [selectedKeys, setSelectedKeys] = useState([
- GPUDriverMap.NVIDIA
- ]);
+ const [selectedKeys, setSelectedKeys] = useState([]);
// No vendor is gated anymore — every card stays selectable.
const availableKeys = undefined;
@@ -49,18 +47,6 @@ const SelectVendor: React.FC = ({ disabled }) => {
{}
);
- // Push current selection into the shared summary so consumers
- // (K8sRunCommand, CheckEnvironment, VendorNotes) can read it.
- useEffect(() => {
- const primary = selectedKeys[0] || '';
- updateField('currentGPU', primary);
- updateField('selectedGPUs', selectedKeys);
- updateField(
- 'workerCommand',
- primary ? buildWorkerCommand(primary, itemMetaRef.current[primary]) : null
- );
- }, [selectedKeys]);
-
useEffect(() => {
const unregister1 = registerField('currentGPU');
const unregister2 = registerField('workerCommand');
@@ -72,6 +58,29 @@ const SelectVendor: React.FC = ({ disabled }) => {
};
}, []);
+ const buildSelectedKeys = (key: string) => {
+ const prev = [...selectedKeys];
+ const has = prev.includes(key);
+ if (has) {
+ // Clicking a selected card always toggles it off.
+ return prev.filter((v) => v !== key);
+ }
+ // K8s clusters support multiple GPU runtimes, so accumulate picks.
+ // Other providers stay single-select and replace the current pick.
+ if (multiCapable) return [...prev, key];
+ return [key];
+ };
+
+ const updateFieldsOnSelect = (keys: string[]) => {
+ const primary = keys[0] || '';
+ updateField('currentGPU', primary);
+ updateField('selectedGPUs', keys);
+ updateField(
+ 'workerCommand',
+ primary ? buildWorkerCommand(primary, itemMetaRef.current[primary]) : null
+ );
+ };
+
const handleSelect = (key: string, item: any) => {
if (item) {
itemMetaRef.current[key] = {
@@ -79,19 +88,25 @@ const SelectVendor: React.FC = ({ disabled }) => {
link: item.link
};
}
- setSelectedKeys((prev) => {
- const has = prev.includes(key);
- if (has) {
- // Clicking a selected card always toggles it off.
- return prev.filter((v) => v !== key);
- }
- // K8s clusters support multiple GPU runtimes, so accumulate picks.
- // Other providers stay single-select and replace the current pick.
- if (multiCapable) return [...prev, key];
- return [key];
- });
+ const keys = buildSelectedKeys(key);
+ updateFieldsOnSelect(keys);
+ setSelectedKeys(keys);
};
+ useEffect(() => {
+ // init a default selection
+ handleSelect(GPUDriverMap.NVIDIA, {
+ label: 'NVIDIA',
+ hiddenTitle: true,
+ value: GPUDriverMap.NVIDIA,
+ description: '',
+ key: GPUDriverMap.NVIDIA,
+ locale: false,
+ notes: AddWorkerDockerNotes[GPUDriverMap.NVIDIA],
+ link: 'https://docs.gpustack.ai/latest/installation/requirements/#nvidia-gpu'
+ });
+ }, []);
+
return (