Files
gpustack-ui/src/locales/zh-CN/gpuservice.ts
T
gitlawr 7a76bda484 feat: distinguish same-name GPU service resources across users
Resource names are unique per owning principal, so different users
can legally create same-name GPU instances, templates, SSH public
keys, storage volumes and storage types — but the admin's
cross-tenant lists and the instance-create template picker rendered
them indistinguishably.

- Group the template picker by owning scope: Your Templates, Global
  Templates, then — admin cross-tenant view only — one group per
  owner. A single group renders flat without headers. A plugin can
  take over grouping via hooks.useTemplateOwnerGroups when its
  principal model scopes templates beyond USER owners; a plugin
  without the hook keeps the flat list.
- Add an admin-only Creator column to the Instances, SSH Public
  Keys, Storage and Storage Types tables, sitting right before
  Created (mirroring the API Keys page convention). Resolves
  creator_id to a username via the user directory, falling back to
  owner_principal_id for legacy rows — a personal-scope row's
  creator IS its owner.
- Tag template cards with their owner scope (Global / username) for
  admins.

The Creator column and the card tag defer to a plugin that registers
the page's list columns / the OwnerScopeTag slot. Requires the
gpustack server change that records creator_id on templates, SSH
public keys and storage types.
2026-06-12 20:22:56 +08:00

167 lines
9.8 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
export default {
'gpuservice.template': 'GPU 实例模板',
'gpuservice.template.add': '添加实例模板',
'gpuservice.template.edit': '编辑实例模板',
'gpuservice.template.filter.name': '按名称过滤',
'gpuservice.template.filter.vendor': '按厂商过滤',
'gpuservice.template.image': '镜像',
'gpuservice.template.imagePullPolicy': '镜像拉取策略',
'gpuservice.template.imagePullPolicy.always': '总是拉取',
'gpuservice.template.imagePullPolicy.ifNotPresent': '不存在时拉取',
'gpuservice.template.imagePullPolicy.never': '从不拉取',
'gpuservice.template.command': '容器启动命令',
'gpuservice.template.command.placeholder':
'使用空格分隔参数;含空格的参数请用引号包裹,例如:/bin/bash -c "echo hello world"',
'gpuservice.template.mountPath': '挂载路径',
'gpuservice.template.mountPath.tips':
'在使用该模板创建实例时,存储卷默认挂载的路径,可用于持久化实例运行过程中需要保留的数据。',
'gpuservice.template.containerDisk': '容器磁盘(GB',
'gpuservice.template.containerDisk.tips': '容器系统盘大小。',
'gpuservice.template.memory': '内存(GB',
'gpuservice.instance.containerDisk.remaining': '容器磁盘(最大 {count} GB',
'gpuservice.instance.memory.remaining': '内存(最大 {count} GB',
'gpuservice.template.displayName': '显示名称',
'gpuservice.template.displayName.max': '显示名称不能超过 63 个字符',
'gpuservice.template.ports': '端口',
'gpuservice.template.ports.add': '添加端口',
'gpuservice.template.ports.invalid': '请填写完整的端口配置',
'gpuservice.template.ports.name': '名称',
'gpuservice.template.ports.name.max': '端口名称不能超过 16 个字符',
'gpuservice.template.ports.name.duplicate': '端口名称不能重复',
'gpuservice.template.env': '环境变量',
'gpuservice.template.env.add': '添加环境变量',
'gpuservice.template.env.invalid': '请填写完整的环境变量',
'gpuservice.template.env.name': '名称',
'gpuservice.template.env.value': '值',
'gpuservice.template.card.image': '镜像',
'gpuservice.template.card.mount': '挂载',
'gpuservice.template.card.resources': '资源',
'gpuservice.template.card.ports': '端口',
'gpuservice.storageType': '存储类型',
'gpuservice.storageType.add': '添加存储类型',
'gpuservice.storageType.edit': '编辑存储类型',
'gpuservice.storageType.filter.name': '按名称搜索',
'gpuservice.storageType.kind': '类型',
'gpuservice.storageType.mountOptions': '挂载参数',
'gpuservice.storageType.nfs.server': 'NFS 服务器',
'gpuservice.storageType.nfs.server.tips':
'确保所有 Kubernetes 集群都能访问该 NFS 服务地址。',
'gpuservice.storageType.nfs.share': '共享路径',
'gpuservice.storageType.nfs.share.tips':
'系统会在该共享路径下自动创建一个基于组织名称和存储名称的目录。如果指定了子目录,则生成的目录会创建在该子目录下。',
'gpuservice.storageType.nfs.subDirectory': '子目录',
'gpuservice.storageType.nfs.subDirectory.tips':
'如果为空,会以持久卷的卷名创建一个子目录;如果不为空,会在同名子目录下,以持久卷的卷名创建一个孙目录。',
'gpuservice.storageType.nfs.mountPermissions': '挂载权限',
'gpuservice.storageType.nfs.mountPermissions.tips':
'沿用 NFS 服务器文件的权限。',
'gpuservice.storageType.s3.endpoint': 'Endpoint',
'gpuservice.storageType.s3.endpoint.tips':
'确保所有 Kubernetes 集群都能访问该 S3 Endpoint。',
'gpuservice.storageType.s3.endpoint.rule': '必须以 http 或 https 开头',
'gpuservice.storageType.s3.region': '区域',
'gpuservice.storageType.s3.bucket': '存储桶',
'gpuservice.storageType.s3.bucket.tips':
'如果为空,会以持久卷的卷名创建一个新桶;如果不为空,会在同名桶下,以持久卷的卷名创建一个子目录。',
'gpuservice.storageType.s3.bucket.tips1':
'系统会在该 Bucket 中自动创建一个基于组织名称和存储名称的前缀目录。',
'gpuservice.storageType.s3.bucket.tips2':
'例如,若组织名称为 <span class="desc-block">awesome-group</span>,存储名称为 <span class="desc-block">storage-1</span>,则生成的前缀为:<span class="desc-block">awesome-group/storage-1</span>。',
'gpuservice.storageType.s3.accessKey': 'Access Key',
'gpuservice.storageType.s3.secretKey': 'Secret Key',
'gpuservice.storageType.s3.insecure': '跳过 TLS/SSL 证书验证',
'gpuservice.storageType.s3.insecure.tips':
'开启后将忽略 S3 服务端的证书安全检查。适用于内网测试或使用自签名证书的场景,生产环境请谨慎勾选。',
'gpuservice.publicKey': 'SSH 公钥',
'gpuservice.publicKey.add': '添加 SSH 公钥',
'gpuservice.publicKey.edit': '编辑 SSH 公钥',
'gpuservice.publicKey.filter.name': '按名称搜索',
'gpuservice.publicKey.label': 'SSH 公钥',
'gpuservice.instance.ssh.enable': '启用 SSH 访问',
'gpuservice.instance.ssh.assignKey': '分配 SSH 公钥',
'gpuservice.instance.ssh.addKey': '添加 SSH 公钥',
'gpuservice.publicKey.placeholder':
'以 ssh-rsa 或 ssh-ed25519 开头,每个公钥单独一行\n\n查看公钥:\n- RSA\ncat ~/.ssh/id_rsa.pub\n- Ed25519\ncat ~/.ssh/id_ed25519.pub',
'gpuservice.instance': 'GPU 实例',
'gpuservice.instance.add': '添加 GPU 实例',
'gpuservice.instance.edit': '编辑 GPU 实例',
'gpuservice.instance.filter.cluster': '按集群过滤',
'gpuservice.instance.name': '实例名称',
'gpuservice.instance.name.required': '请输入实例名称',
'gpuservice.instance.section.basic': '基础信息',
'gpuservice.instance.section.type': '实例类型',
'gpuservice.instance.section.template': '实例模板',
'gpuservice.instance.types': '实例类型',
'gpuservice.instance.templates': '实例模板',
'gpuservice.instance.section.storage': '存储卷',
'gpuservice.instance.type.required': '请选择实例类型',
'gpuservice.instance.type.noAvailable': '无可用的实例类型',
'gpuservice.instance.gpuCount': 'GPU 数量',
'gpuservice.instance.gpuCount.required': '请输入 GPU 数量',
'gpuservice.instance.gpuCount.max': '最多选择 {count} 张卡',
'gpuservice.instance.gpuCount.min': '至少选择 {count} 张卡',
'gpuservice.instance.cpuCount.max': '最多选择 {count} 核',
'gpuservice.instance.cpuCount.min': '至少选择 {count} 核',
'gpuservice.instance.gpuCount.noAvailable':
'没有可用的 GPU 资源,请选择其他实例类型。',
'gpuservice.instance.gpuCount.zero': '仅使用 CPU,用于环境准备。',
'gpuservice.instance.stock': '库存',
'gpuservice.instance.sliced': '切分',
'gpuservice.instance.memory': '显存',
'gpuservice.instance.ram': '内存',
'gpuservice.instance.os': '系统',
'gpuservice.instance.arch': '架构',
'gpuservice.instance.disk': '磁盘',
'gpuservice.table.count': '数量',
'gpuservice.instance.disk.system': '系统盘',
'gpuservice.instance.disk.ephemeral': '临时存储',
'gpuservice.instance.disk.persistent': '持久存储',
'gpuservice.instance.search.type.placeholder': '搜索名称',
'gpuservice.instance.search.template.placeholder':
'搜索模板名称、镜像或挂载路径',
'gpuservice.instance.template.image': '镜像',
'gpuservice.instance.template.mount': '挂载',
'gpuservice.instance.connect': '连接',
'gpuservice.instance.connect.copySshCommand': '复制 SSH 命令',
'gpuservice.instance.event.reason': '原因',
'gpuservice.instance.event.message': '消息',
'gpuservice.instance.event.source': '来源',
'gpuservice.instance.event.count': '次数',
'gpuservice.instance.event.lastSeen': '最近发生',
'gpuservice.instance.event.recentHourTip': '仅显示最近一小时的事件。',
'gpuservice.instance.event.tab.instance': '实例事件',
'gpuservice.instance.event.tab.volume': '存储卷事件',
'gpuservice.instance.recreate.confirm.title': '确认重新创建',
'gpuservice.instance.recreate.confirm.content':
'系统将先删除当前实例,然后使用当前配置重新创建。\n <span style="font-size: 13px;font-weight: 700">{name}</span>',
'gpuservice.storage': '存储',
'gpuservice.storage.add': '添加存储',
'gpuservice.storage.edit': '编辑存储',
'gpuservice.storage.filter.cluster': '按集群过滤',
'gpuservice.storage.type': '存储类型',
'gpuservice.storage.type.local': '本地存储',
'gpuservice.storage.type.shared': '共享存储',
'gpuservice.storage.type.object': '对象存储',
'gpuservice.storage.capacity': '容量',
'gpuservice.storage.accessMode': '访问模式',
'gpuservice.storage.persistent': '持久',
'gpuservice.storage.temporary': '临时',
'gpuservice.storage.persistentVolume': '持久',
'gpuservice.storage.temporary.tips': '实例停止后,数据将被清除。',
'gpuservice.storage.persistentVolume.tips':
'数据在实例重启后仍会保留。持久卷不会随实例终止而删除,并可被多个实例共享。',
'gpuservice.storage.persistentVolume.required': '请选择存储',
'gpuservice.storage.persistentVolume.capacity': '容量(GB',
'gpuservice.storage.persistentVolume.capacity.required': '请输入容量',
'gpuservice.storage.persistentVolume.releaseWithInstance': '随实例释放',
'gpuservice.storage.tempCapacity': '容量(GB',
'gpuservice.storage.tempCapacity.required': '请输入临时存储容量',
'gpuservice.form.rule.name':
'由小写字母、数字和 "-" 组成,以字母或数字开头和结尾,不能包含连续的 "-",最多 63 个字符。',
'gpuservice.form.storage.select': '选择存储',
'gpuservice.creator': '创建者',
'gpuservice.owner.global': '全局',
'gpuservice.template.group.yours': '我的模板',
'gpuservice.template.group.global': '全局模板'
};