1
0
Fork 0
mirror of https://github.com/retspen/webvirtcloud synced 2026-11-08 11:16:47 +00:00

feat(instances): the Resize tab shows how much a VM has within its maximum

Each sub-tab (CPU, Memory, Disks) opened on a two-column card that put a
heading and a sentence of current values beside the forms, and the CPU
tab added two more rows: Live vCPUs as a row of "0 · Fixed / 1 · On"
buttons and vCPU hot plug as a select with its own Save.

Now each sub-tab opens on the VM's size. CPU: one cell per vCPU up to
the maximum, filled when on, with "2 on, up to 4" and the host's logical
CPUs; on a running VM with hot-pluggable vCPUs the cells are the
buttons that turn them on and off. Memory: a bar of the current memory
within the maximum, with the host's memory. Disks: a row per disk with
its format, size now and a new size. The forms below keep their names
and posts; the CPU fields are disabled while the VM runs, and hot plug
is a switch that posts on change. A memory or disk resize returns to
its own sub-tab.
This commit is contained in:
catborise 2026-11-03 22:38:23 +03:00
parent 103ce111ef
commit 607c8381b4
12 changed files with 543 additions and 619 deletions

View file

@ -128,6 +128,16 @@ class Instance(models.Model):
def vcpus(self): def vcpus(self):
return self.proxy.get_vcpus() return self.proxy.get_vcpus()
@cached_property
def vcpu_cells(self) -> list[dict]:
"""One cell per vCPU up to the maximum, as the Resize tab draws them:
its id, whether it is on, and whether it can be turned off and on
(a VM with hot-pluggable vCPUs lists them; vCPU 0 never is)."""
if self.vcpus:
return [{"id": id, "on": v["enabled"] == "yes", "fixed": v["hotpluggable"] != "yes"}
for id, v in self.vcpus.items()]
return [{"id": str(i), "on": i < self.cur_vcpu, "fixed": True} for i in range(self.vcpu)]
@cached_property @cached_property
def get_uuid(self): def get_uuid(self):
return self.proxy.get_uuid() return self.proxy.get_uuid()

View file

@ -1,206 +1,134 @@
{% load i18n %} {% load i18n %}
{% load bootstrap_icons %} {% load bootstrap_icons %}
<div class="tab-pane" id="resize" role="tabpanel"> <div class="tab-pane" id="resize" role="tabpanel">
<!-- Nav tabs --> {# each resource on its own tab: how much the VM has now within its maximum, and the form that changes it #}
<div class="card"> <div class="card">
<div class="card-header bg-transparent pb-0"> {% if not can_change %}
<ul class="nav nav-underline small" role="tablist" aria-label="Instance resize options"> <div class="card-body">
<li class="nav-item" role="presentation"> <p class="mb-0">{% trans "You don't have permission for resizing instance" %}</p>
<button class="nav-link active" data-bs-toggle="tab" data-bs-target="#resizevm_cpu" type="button" role="tab" aria-controls="resizevm_cpu" aria-selected="true"> </div>
{% trans "CPU" %} {% else %}
</button> <div class="card-header bg-transparent pb-0">
</li> <ul class="nav nav-underline small" role="tablist" aria-label="{% trans "Resources to resize" %}">
<li class="nav-item" role="presentation"> <li class="nav-item" role="presentation">
<button class="nav-link" data-bs-toggle="tab" data-bs-target="#resizevm_mem" type="button" role="tab" aria-controls="resizevm_mem" aria-selected="false"> <button class="nav-link active" id="resizevm_cpu-tab" data-bs-toggle="tab" data-bs-target="#resizevm_cpu" type="button" role="tab" aria-controls="resizevm_cpu" aria-selected="true">{% trans "CPU" %}</button>
{% trans "Memory" %} </li>
</button> <li class="nav-item" role="presentation">
</li> <button class="nav-link" id="resizevm_mem-tab" data-bs-toggle="tab" data-bs-target="#resizevm_mem" type="button" role="tab" aria-controls="resizevm_mem" aria-selected="false">{% trans "Memory" %}</button>
<li class="nav-item" role="presentation"> </li>
<button class="nav-link" data-bs-toggle="tab" data-bs-target="#resizevm_disk" type="button" role="tab" aria-controls="resizevm_disk" aria-selected="false"> <li class="nav-item" role="presentation">
{% trans "Disk" %} <button class="nav-link" id="resizevm_disk-tab" data-bs-toggle="tab" data-bs-target="#resizevm_disk" type="button" role="tab" aria-controls="resizevm_disk" aria-selected="false">{% trans "Disks" %}</button>
</button> </li>
</li> </ul>
</ul> </div>
</div> <div class="tab-content card-body">
<!-- Tab panes --> <div class="tab-pane active" id="resizevm_cpu" role="tabpanel" aria-labelledby="resizevm_cpu-tab">
<div class="tab-content card-body"> {# one cell per vCPU up to the maximum, filled when on; a running VM's hot-pluggable ones turn on and off here #}
<div role="tabpanel" class="tab-pane active" id="resizevm_cpu"> {% with toggles=request.user.is_superuser %}
{% if can_change %} <div class="d-flex flex-wrap align-items-center gap-2 mb-3">
<div class="list-group"> <div class="d-flex flex-wrap gap-1" role="group" aria-label="{% trans "vCPUs" %}">
<form class="list-group-item p-3 p-md-4" action="{% url 'instances:resizevm_cpu' instance.id %}" method="post" aria-labelledby="cpu-heading">{% csrf_token %} {% for cell in instance.vcpu_cells %}
<div class="row g-3"> {% if toggles and instance.status != 5 and instance.vcpus and not cell.fixed %}
<div class="col-12 col-lg-4"> <form action="{% url 'instances:set_vcpu' instance.id %}" method="post">{% csrf_token %}
<h2 class="h6" id="cpu-heading">{% bs_icon 'cpu' %} {% trans "CPU allocation" %}</h2> <input type="hidden" name="id" value="{{ cell.id }}">
<p class="small text-body-secondary mb-2">{% blocktrans with cur=instance.cur_vcpu max=instance.vcpu %}Now {{ cur }} of {{ max }} vCPUs.{% endblocktrans %}</p> {% if cell.on %}
<p class="small mb-0">{% trans "Host" %}: <strong>{% blocktrans with count=vcpu_host %}{{ count }} logical CPUs{% endblocktrans %}</strong></p> <button type="submit" class="vcpu-cell on" name="set_vcpu" value="False"{% if instance.status == 3 %} disabled{% endif %}>{{ cell.id }}<span class="visually-hidden"> {% trans "on, turn off" %}</span></button>
</div> {% else %}
<div class="col-12 col-lg-8"> <button type="submit" class="vcpu-cell" name="set_vcpu" value="True">{{ cell.id }}<span class="visually-hidden"> {% trans "off, turn on" %}</span></button>
<p class="small text-body-secondary" id="cpu-help"> {% endif %}
{% if instance.status == 5 %}{% trans "The VM gets these at its next start." %} </form>
{% else %}{% trans "Shut the VM down to change its vCPUs." %}{% if instance.vcpus %} {% trans "While it runs, turn vCPUs on and off below." %}{% endif %}{% endif %} {% else %}
</p> <span class="vcpu-cell{% if cell.on %} on{% endif %}">{{ cell.id }}<span class="visually-hidden"> {% if cell.on %}{% trans "on" %}{% else %}{% trans "off" %}{% endif %}</span></span>
<div class="row g-3"> {% endif %}
<div class="col-12 col-sm-6"> {% endfor %}
<label class="form-label" for="cur_vcpu">{% trans "Current vCPUs" %}</label> </div>
<select class="form-select" id="cur_vcpu" name="cur_vcpu" aria-describedby="cpu-help"> <span class="small">{% blocktrans with cur=instance.cur_vcpu max=instance.vcpu %}{{ cur }} on, up to {{ max }}{% endblocktrans %}</span>
{% for cpu in instance.vcpu_range %} <span class="small ms-auto text-body-secondary">{% blocktrans with count=vcpu_host %}Host: {{ count }} logical CPUs{% endblocktrans %}</span>
<option value="{{ cpu }}"{% if cpu == instance.config_cur_vcpu %} selected{% endif %}>{{ cpu }}</option> </div>
{% endfor %} {% if toggles and instance.status != 5 and instance.vcpus %}
</select> <p class="small text-body-secondary mt-n2 mb-3">{% trans "Click a vCPU to turn it on or off now; the next start keeps it so." %}{% if instance.status == 3 %} {% trans "A paused VM cannot let one go: resume it to turn vCPUs off." %}{% endif %}</p>
</div> {% endif %}
<div class="col-12 col-sm-6"> {% endwith %}
<label class="form-label" for="max_vcpu">{% trans "Maximum vCPUs" %}</label> <form class="row g-2 align-items-end" action="{% url 'instances:resizevm_cpu' instance.id %}" method="post">{% csrf_token %}
<select class="form-select" id="max_vcpu" name="vcpu" aria-describedby="cpu-help"> <div class="col-6 col-sm-3">
{% for cpu in instance.vcpu_range %} <label class="form-label small mb-1" for="cur_vcpu">{% trans "Current" %}</label>
<option value="{{ cpu }}"{% if cpu == instance.config_vcpu %} selected{% endif %}>{{ cpu }}</option> <select class="form-select" id="cur_vcpu" name="cur_vcpu" aria-describedby="cpu-help"{% if instance.status != 5 %} disabled{% endif %}>
{% endfor %} {% for cpu in instance.vcpu_range %}<option value="{{ cpu }}"{% if cpu == instance.config_cur_vcpu %} selected{% endif %}>{{ cpu }}</option>{% endfor %}
</select> </select>
</div> </div>
</div> <div class="col-6 col-sm-3">
<div class="text-end mt-3"> <label class="form-label small mb-1" for="max_vcpu">{% trans "Maximum" %}</label>
<button type="submit" class="btn btn-primary" name="resizevm_cpu"{% if instance.status != 5 %} disabled{% endif %}>{% trans "Resize CPU" %}</button> <select class="form-select" id="max_vcpu" name="vcpu" aria-describedby="cpu-help"{% if instance.status != 5 %} disabled{% endif %}>
</div> {% for cpu in instance.vcpu_range %}<option value="{{ cpu }}"{% if cpu == instance.config_vcpu %} selected{% endif %}>{{ cpu }}</option>{% endfor %}
</div> </select>
</div>
<div class="col-12 col-sm-auto ms-sm-auto">
<button type="submit" class="btn btn-primary resize-act" name="resizevm_cpu"{% if instance.status != 5 %} disabled{% endif %}>{% trans "Resize CPU" %}</button>
</div> </div>
</form> </form>
{% if request.user.is_superuser and instance.vcpus and instance.status != 5 %} <p class="small text-body-secondary mt-1 mb-0" id="cpu-help">{% if instance.status == 5 %}{% trans "The VM gets these at its next start." %}{% else %}{% trans "Shut the VM down to change its vCPUs." %}{% endif %}</p>
<section class="list-group-item p-3 p-md-4" aria-labelledby="vcpus-heading">
<div class="row g-3">
<div class="col-12 col-lg-4">
<h3 class="h6" id="vcpus-heading">{% trans "Live vCPUs" %}</h3>
<p class="small text-body-secondary mb-0">
{% trans "Turn a vCPU on or off now; the next start keeps it so. vCPU 0 stays on." %}
{% if instance.status == 3 %}{% trans "A paused VM cannot let one go: resume it to turn vCPUs off." %}{% endif %}
</p>
</div>
<div class="col-12 col-lg-8">
<div class="d-flex flex-wrap gap-2">
{% for id, vcpu in instance.vcpus.items %}
<form action="{% url 'instances:set_vcpu' instance.id %}" method="post">{% csrf_token %}
<input type="hidden" name="id" value="{{ id }}">
{% if vcpu.hotpluggable != "yes" %}
<button type="button" class="btn btn-secondary" disabled>{% blocktrans %}{{ id }} · Fixed{% endblocktrans %}</button>
{% elif vcpu.enabled == "yes" %}
<button type="submit" class="btn btn-primary" name="set_vcpu" value="False"{% if instance.status == 3 %} disabled{% endif %}>{% blocktrans %}{{ id }} · On{% endblocktrans %}<span class="visually-hidden"> {% trans "turn off" %}</span></button>
{% else %}
<button type="submit" class="btn btn-secondary" name="set_vcpu" value="True">{% blocktrans %}{{ id }} · Off{% endblocktrans %}<span class="visually-hidden"> {% trans "turn on" %}</span></button>
{% endif %}
</form>
{% endfor %}
</div>
</div>
</div>
</section>
{% endif %}
{% if request.user.is_superuser %} {% if request.user.is_superuser %}
<form class="list-group-item p-3 p-md-4" action="{% url 'instances:set_vcpu_hotplug' instance.id %}" method="post">{% csrf_token %} <form class="mt-3" action="{% url 'instances:set_vcpu_hotplug' instance.id %}" method="post">{% csrf_token %}
<div class="row g-3 align-items-center"> <input type="hidden" name="vcpu_hotplug" value="{% if instance.config_vcpu_hotplug %}False{% else %}True{% endif %}">
<div class="col-12 col-lg-4"> <div class="form-check form-switch">
<label class="form-label fw-semibold mb-0" for="vcpu_hotplug">{% trans "vCPU hot plug" %}</label> <input class="form-check-input" type="checkbox" role="switch" id="vcpu_hotplug" aria-describedby="vcpu-hotplug-help"{% if instance.config_vcpu_hotplug %} checked{% endif %}{% if instance.status != 5 %} disabled{% endif %} data-submit-on-change>
<p class="small text-body-secondary mb-0" id="vcpu-hotplug-help"> <label class="form-check-label" for="vcpu_hotplug">{% trans "vCPU hot plug" %}</label>
{% trans "Lets vCPUs up to the maximum be turned on and off while the VM runs." %}
{% if instance.status != 5 %}{% trans "Shut the VM down to change this." %}{% endif %}
</p>
</div>
<div class="col-12 col-lg-8">
<div class="row g-2">
<div class="col-12 col-sm">
<select id="vcpu_hotplug" class="form-select" name="vcpu_hotplug" aria-describedby="vcpu-hotplug-help">
<option value="True"{% if instance.config_vcpu_hotplug %} selected{% endif %}>{% trans "Enabled" %}</option>
<option value="False"{% if not instance.config_vcpu_hotplug %} selected{% endif %}>{% trans "Disabled" %}</option>
</select>
</div>
<div class="col-12 col-sm-auto d-grid">
<button class="btn btn-secondary" type="submit" name="set_vcpu_hotplug"{% if instance.status != 5 %} disabled{% endif %}>{% trans "Save" %}</button>
</div>
</div>
</div>
</div> </div>
<p class="small text-body-secondary mb-0" id="vcpu-hotplug-help">{% trans "Lets vCPUs up to the maximum be turned on and off while the VM runs." %}{% if instance.status != 5 %} {% trans "Shut the VM down to change this." %}{% endif %}</p>
</form> </form>
{% endif %} {% endif %}
</div> </div>
{% else %} <div class="tab-pane" id="resizevm_mem" role="tabpanel" aria-labelledby="resizevm_mem-tab">
<p class="mb-0">{% trans "You don't have permission for resizing instance" %}</p> <div class="d-flex flex-wrap align-items-center gap-2 gap-sm-3 mb-3">
{% endif %} <div class="memory-bar" aria-hidden="true"><div class="memory-bar-now" style="width: {% widthratio instance.cur_memory instance.memory 100 %}%"></div></div>
</div> <span class="small">{% blocktrans with cur=instance.cur_memory max=instance.memory %}{{ cur }} MiB of {{ max }} MiB{% endblocktrans %}</span>
<div role="tabpanel" class="tab-pane" id="resizevm_mem"> <span class="small ms-auto text-body-secondary">{% blocktrans with total=memory_host|filesizeformat %}Host: {{ total }}{% endblocktrans %}</span>
{% if can_change %}
<form class="list-group" action="{% url 'instances:resize_memory' instance.id %}" method="post" aria-labelledby="memory-heading">{% csrf_token %}
<div class="list-group-item p-3 p-md-4">
<div class="row g-3">
<div class="col-12 col-lg-4">
<h2 class="h6" id="memory-heading">{% bs_icon 'memory' %} {% trans "Memory allocation" %}</h2>
<p class="small text-body-secondary mb-2">{% blocktrans with cur=instance.cur_memory max=instance.memory %}Now {{ cur }} MiB of maximum {{ max }} MiB.{% endblocktrans %}</p>
<p class="small mb-0">{% trans "Host" %}: <strong>{% blocktrans with total=memory_host|filesizeformat %}{{ total }} memory{% endblocktrans %}</strong></p>
</div>
<div class="col-12 col-lg-8">
<p class="small text-body-secondary" id="memory-help">
{% if instance.status == 5 %}{% trans "The VM gets these at its next start." %}
{% else %}{% trans "The current memory changes now, up to the maximum; shut the VM down to change the maximum." %}{% endif %}
</p>
<div class="row g-3">
<div class="col-12 col-sm-6">
<label class="form-label" for="cur_memory">{% trans "Current memory (MiB)" %}</label>
<input class="form-control" type="number" id="cur_memory" name="cur_memory" min="1" step="1" value="{{ instance.cur_memory }}" aria-describedby="memory-help">
</div>
<div class="col-12 col-sm-6">
<label class="form-label" for="max_memory">{% trans "Maximum memory (MiB)" %}</label>
{# a running VM keeps its maximum: only the current memory changes #}
<input class="form-control" type="number" id="max_memory" name="memory" min="1" step="1" value="{{ instance.memory }}" aria-describedby="memory-help"{% if instance.status != 5 %} disabled{% endif %}>
</div>
</div>
<div class="text-end mt-3">
<button type="submit" class="btn btn-primary" name="resizevm_mem">{% trans "Resize memory" %}</button>
</div>
</div>
</div>
</div> </div>
</form> <form class="row g-2 align-items-end" action="{% url 'instances:resize_memory' instance.id %}" method="post">{% csrf_token %}
{% else %} <div class="col-6 col-sm-3">
<p class="mb-0">{% trans "You don't have permission for resizing instance" %}</p> <label class="form-label small mb-1" for="cur_memory">{% trans "Current (MiB)" %}</label>
{% endif %} <input class="form-control" type="number" id="cur_memory" name="cur_memory" min="1" step="1" value="{{ instance.cur_memory }}" aria-describedby="memory-help">
</div>
<div role="tabpanel" class="tab-pane" id="resizevm_disk">
{% if can_change %}
<form class="list-group" action="{% url 'instances:resize_disk' instance.id %}" method="post" aria-labelledby="disks-grow-heading">{% csrf_token %}
<div class="list-group-item p-3 p-md-4">
<div class="row g-3">
<div class="col-12 col-lg-4">
<h2 class="h6" id="disks-grow-heading">{% bs_icon 'device-hdd' %} {% trans "Grow disks" %}</h2>
<p class="small text-body-secondary mb-0" id="disks-grow-help">{% trans "A new size in GiB, larger than the disk's; empty keeps a disk as it is. Disks grow while the VM runs; the guest then grows its partition and file system." %}</p>
</div>
<div class="col-12 col-lg-8">
<div class="row g-3">
{% for disk in instance.disks %}
<div class="col-12 col-sm-6">
<label class="form-label" for="disk_size_{{ disk.dev }}">{{ disk.dev }}{% if disk.format %} <span class="small text-body-secondary">· {{ disk.format }}</span>{% endif %}</label>
{% if disk.storage is None %}
<p class="small text-danger mb-0">{% trans "Error getting disk info" %}</p>
{% else %}
<p class="small text-body-secondary mb-2">{% blocktrans with size=disk.size|filesizeformat %}Now {{ size }}{% endblocktrans %}</p>
<div class="input-group">
<input class="form-control" type="number" id="disk_size_{{ disk.dev }}" name="disk_size_{{ disk.dev }}" min="1" step="1" aria-describedby="disks-grow-help">
<span class="input-group-text">GiB</span>
</div>
{% endif %}
</div>
{% endfor %}
</div>
<div class="text-end mt-3">
{% if instance.status == 1 or instance.status == 3 or instance.status == 5 %}
<button type="submit" class="btn btn-primary" name="resizevm_disk">{% trans "Grow disks" %}</button>
{% else %}
<button type="button" class="btn btn-primary" disabled>{% trans "Grow disks" %}</button>
{% endif %}
</div>
</div>
</div> </div>
</div> <div class="col-6 col-sm-3">
</form> <label class="form-label small mb-1" for="max_memory">{% trans "Maximum (MiB)" %}</label>
{% else %} {# a running VM keeps its maximum: only the current memory changes #}
<p class="mb-0">{% trans "You don't have permission for resizing instance" %}</p> <input class="form-control" type="number" id="max_memory" name="memory" min="1" step="1" value="{{ instance.memory }}" aria-describedby="memory-help"{% if instance.status != 5 %} disabled{% endif %}>
{% endif %} </div>
<div class="col-12 col-sm-auto ms-sm-auto">
<button type="submit" class="btn btn-primary resize-act" name="resizevm_mem">{% trans "Resize memory" %}</button>
</div>
</form>
<p class="small text-body-secondary mt-1 mb-0" id="memory-help">{% if instance.status == 5 %}{% trans "The VM gets these at its next start." %}{% else %}{% trans "The current memory changes now, up to the maximum; shut the VM down to change the maximum." %}{% endif %}</p>
</div>
<div class="tab-pane" id="resizevm_disk" role="tabpanel" aria-labelledby="resizevm_disk-tab">
<p class="small text-body-secondary mb-3" id="disks-grow-help">{% trans "A new size in GiB, larger than the disk's; empty keeps a disk as it is. Disks grow while the VM runs; the guest then grows its partition and file system." %}</p>
<form action="{% url 'instances:resize_disk' instance.id %}" method="post">{% csrf_token %}
{% for disk in instance.disks %}
<div class="row g-2 align-items-center mb-2">
<label class="col-5 col-sm-3 col-form-label" for="disk_size_{{ disk.dev }}"><span class="fw-semibold">{{ disk.dev }}</span>{% if disk.format %} <span class="small text-body-secondary">{{ disk.format }}</span>{% endif %}</label>
{% if disk.storage is None %}
<div class="col"><span class="small text-danger">{% trans "Error getting disk info" %}</span></div>
{% else %}
<div class="col-7 col-sm-2 small">{% blocktrans with size=disk.size|filesizeformat %}Now {{ size }}{% endblocktrans %}</div>
<div class="col-12 col-sm-4">
<div class="input-group">
<input class="form-control" type="number" id="disk_size_{{ disk.dev }}" name="disk_size_{{ disk.dev }}" min="1" step="1" placeholder="{% trans "New size" %}" aria-describedby="disks-grow-help">
<span class="input-group-text">GiB</span>
</div>
</div>
{% endif %}
</div>
{% endfor %}
<div class="d-flex justify-content-end">
{% if instance.status == 1 or instance.status == 3 or instance.status == 5 %}
<button type="submit" class="btn btn-primary resize-act" name="resizevm_disk">{% trans "Grow disks" %}</button>
{% else %}
<button type="button" class="btn btn-primary resize-act" disabled>{% trans "Grow disks" %}</button>
{% endif %}
</div>
</form>
</div>
</div> </div>
</div> {% endif %}
</div> </div>
</div> </div>

View file

@ -163,7 +163,7 @@ class LiveLvmTestCase(TestCase):
response = self.post("resize_disk", inst, {"disk_size_vda": "2"}) response = self.post("resize_disk", inst, {"disk_size_vda": "2"})
self.assertRedirects(response, reverse("instances:instance", args=[inst.id]) + "#resize", self.assertRedirects(response, reverse("instances:instance", args=[inst.id]) + "#resizevm_disk",
fetch_redirect_response=False) fetch_redirect_response=False)
shown = [str(m) for m in get_messages(response.wsgi_request)] shown = [str(m) for m in get_messages(response.wsgi_request)]
self.assertEqual(shown[-1], "The storage pool of vda cannot resize its volumes") self.assertEqual(shown[-1], "The storage pool of vda cannot resize its volumes")

View file

@ -209,7 +209,9 @@ class PendingEditsTestCase(TestCase):
"1": {"enabled": "yes", "hotpluggable": "yes", "order": "2"}} "1": {"enabled": "yes", "hotpluggable": "yes", "order": "2"}}
doc = self.page(get_guest_agent=(None, object()), get_vcpus=({}, hotplug)) doc = self.page(get_guest_agent=(None, object()), get_vcpus=({}, hotplug))
self.assertEqual(doc.xpath("//select[@name='guest_agent']/option[@selected]/@value"), ["True"]) self.assertEqual(doc.xpath("//select[@name='guest_agent']/option[@selected]/@value"), ["True"])
self.assertEqual(doc.xpath("//select[@name='vcpu_hotplug']/option[@selected]/@value"), ["True"]) # the switch shows the pending hot plug on; flipping it posts off
self.assertEqual(doc.xpath("//input[@id='vcpu_hotplug']/@checked"), ["checked"])
self.assertEqual(doc.xpath("//input[@name='vcpu_hotplug']/@value"), ["False"])
self.assertIn("No channel", doc.xpath("string(//form[.//select[@name='guest_agent']])")) self.assertIn("No channel", doc.xpath("string(//form[.//select[@name='guest_agent']])"))
def test_a_custom_rng_or_crash_action_is_left_to_the_xml_editor(self): def test_a_custom_rng_or_crash_action_is_left_to_the_xml_editor(self):

View file

@ -221,7 +221,7 @@ class InstanceSecurityMutationsTestCase(TestCase):
mock_wvm_cls.return_value.get_disk_devices.return_value = [] mock_wvm_cls.return_value.get_disk_devices.return_value = []
res = self.client.post(reverse("instances:resize_disk", args=[self.instance.id]), {}) res = self.client.post(reverse("instances:resize_disk", args=[self.instance.id]), {})
self.assertEqual(res.status_code, 302) self.assertEqual(res.status_code, 302)
self.assertIn(f"/instances/{self.instance.id}/#resize", res.url) self.assertIn(f"/instances/{self.instance.id}/#resizevm_disk", res.url)
def test_disk_mutation_denied_with_is_change(self): def test_disk_mutation_denied_with_is_change(self):
# change_user has is_change=True, is_delete=False. Disk views are # change_user has is_change=True, is_delete=False. Disk views are

View file

@ -299,7 +299,7 @@ class InstancesTestCase(TestCase):
{"memory": 512, "cur_memory": 256}, {"memory": 512, "cur_memory": 256},
) )
self.assertRedirects( self.assertRedirects(
response, reverse("instances:instance", args=[self.instance.id]) + "#resize" response, reverse("instances:instance", args=[self.instance.id]) + "#resizevm_mem"
) )
del self.instance.memory del self.instance.memory
@ -312,7 +312,7 @@ class InstancesTestCase(TestCase):
{"memory": 500, "cur_memory": 200}, {"memory": 500, "cur_memory": 200},
) )
self.assertRedirects( self.assertRedirects(
response, reverse("instances:instance", args=[self.instance.id]) + "#resize" response, reverse("instances:instance", args=[self.instance.id]) + "#resizevm_mem"
) )
del self.instance.memory del self.instance.memory
@ -337,7 +337,7 @@ class InstancesTestCase(TestCase):
{"memory": 512, "cur_memory": 256}, {"memory": 512, "cur_memory": 256},
) )
self.assertRedirects( self.assertRedirects(
response, reverse("instances:instance", args=[self.instance.id]) + "#resize" response, reverse("instances:instance", args=[self.instance.id]) + "#resizevm_mem"
) )
del self.instance.memory del self.instance.memory
@ -357,7 +357,7 @@ class InstancesTestCase(TestCase):
}, },
) )
self.assertRedirects( self.assertRedirects(
response, reverse("instances:instance", args=[self.instance.id]) + "#resize" response, reverse("instances:instance", args=[self.instance.id]) + "#resizevm_disk"
) )
del self.instance.disks del self.instance.disks
@ -379,7 +379,7 @@ class InstancesTestCase(TestCase):
}, },
) )
self.assertRedirects( self.assertRedirects(
response, reverse("instances:instance", args=[self.instance.id]) + "#resize" response, reverse("instances:instance", args=[self.instance.id]) + "#resizevm_disk"
) )
# no changes as user reached quota # no changes as user reached quota

View file

@ -1203,10 +1203,10 @@ def resize_memory(request, pk):
new_memory = memory new_memory = memory
if not _is_int(new_memory) or not _is_int(new_cur_memory) or int(new_cur_memory) < 1: if not _is_int(new_memory) or not _is_int(new_cur_memory) or int(new_cur_memory) < 1:
messages.error(request, _("Enter a whole number for memory")) messages.error(request, _("Enter a whole number for memory"))
return redirect(reverse("instances:instance", args=[instance.id]) + "#resize") return redirect(reverse("instances:instance", args=[instance.id]) + "#resizevm_mem")
if int(new_cur_memory) > int(new_memory): if int(new_cur_memory) > int(new_memory):
messages.error(request, _("The current memory cannot be more than the maximum")) messages.error(request, _("The current memory cannot be more than the maximum"))
return redirect(reverse("instances:instance", args=[instance.id]) + "#resize") return redirect(reverse("instances:instance", args=[instance.id]) + "#resizevm_mem")
quota_msg = utils.check_user_quota(request.user, 0, 0, int(new_memory) - memory, 0) quota_msg = utils.check_user_quota(request.user, 0, 0, int(new_memory) - memory, 0)
if not request.user.is_superuser and quota_msg: if not request.user.is_superuser and quota_msg:
msg = quota_refused(quota_msg, gettext_noop("%(quota)s: cannot resize the memory of '%(instance_name)s'."), msg = quota_refused(quota_msg, gettext_noop("%(quota)s: cannot resize the memory of '%(instance_name)s'."),
@ -1218,7 +1218,7 @@ def resize_memory(request, pk):
messages.success(request, _("Memory set to %(cur)s MiB (maximum %(max)s MiB)") % { messages.success(request, _("Memory set to %(cur)s MiB (maximum %(max)s MiB)") % {
"cur": new_cur_memory, "max": new_memory}) "cur": new_cur_memory, "max": new_memory})
return redirect(reverse("instances:instance", args=[instance.id]) + "#resize") return redirect(reverse("instances:instance", args=[instance.id]) + "#resizevm_mem")
@require_POST @require_POST
@ -1236,19 +1236,19 @@ def resize_disk(request, pk):
continue continue
if not _is_int(size): if not _is_int(size):
messages.error(request, _("Enter disk sizes as whole GiB")) messages.error(request, _("Enter disk sizes as whole GiB"))
return redirect(reverse("instances:instance", args=[instance.id]) + "#resize") return redirect(reverse("instances:instance", args=[instance.id]) + "#resizevm_disk")
# a disk does not shrink: one smaller size refuses them all # a disk does not shrink: one smaller size refuses them all
if int(size) << 30 < disk["size"]: if int(size) << 30 < disk["size"]:
messages.error(request, _("%(dev)s is %(size)s: a disk cannot shrink") % { messages.error(request, _("%(dev)s is %(size)s: a disk cannot shrink") % {
"dev": disk["dev"], "size": filesizeformat(disk["size"])}) "dev": disk["dev"], "size": filesizeformat(disk["size"])})
return redirect(reverse("instances:instance", args=[instance.id]) + "#resize") return redirect(reverse("instances:instance", args=[instance.id]) + "#resizevm_disk")
if int(size) << 30 > disk["size"]: if int(size) << 30 > disk["size"]:
disk["size_new"] = int(size) << 30 disk["size_new"] = int(size) << 30
disks_new.append(disk) disks_new.append(disk)
if not disks_new: if not disks_new:
messages.warning(request, _("No disks were selected or valid for resizing.")) messages.warning(request, _("No disks were selected or valid for resizing."))
return redirect(reverse("instances:instance", args=[instance.id]) + "#resize") return redirect(reverse("instances:instance", args=[instance.id]) + "#resizevm_disk")
disk_sum = sum([disk["size"] >> 30 for disk in disks_new]) disk_sum = sum([disk["size"] >> 30 for disk in disks_new])
disk_new_sum = sum([disk["size_new"] >> 30 for disk in disks_new]) disk_new_sum = sum([disk["size_new"] >> 30 for disk in disks_new])

Binary file not shown.

View file

@ -11,7 +11,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-11-03 17:31+0000\n" "POT-Creation-Date: 2026-11-03 19:32+0000\n"
"PO-Revision-Date: 2020-11-04 12:00+0000\n" "PO-Revision-Date: 2020-11-04 12:00+0000\n"
"Last-Translator: catborise <muhammetalisag@gmail.com>, 2020\n" "Last-Translator: catborise <muhammetalisag@gmail.com>, 2020\n"
"Language-Team: Turkish (https://www.transifex.com/catborise/teams/110663/tr/)\n" "Language-Team: Turkish (https://www.transifex.com/catborise/teams/110663/tr/)\n"
@ -229,8 +229,6 @@ msgstr "Sanal makine ekle"
#: instances/templates/allinstances_index_nongrouped.html:8 #: instances/templates/allinstances_index_nongrouped.html:8
#: instances/templates/create_steps.html:6 #: instances/templates/create_steps.html:6
#: instances/templates/create_steps.html:8 #: instances/templates/create_steps.html:8
#: instances/templates/instances/resize_tab.html:35
#: instances/templates/instances/resize_tab.html:134
#: operations/templates/operations/jobs.html:24 #: operations/templates/operations/jobs.html:24
msgid "Host" msgid "Host"
msgstr "Sunucu" msgstr "Sunucu"
@ -710,7 +708,6 @@ msgstr "Üyeler"
#: computes/templates/computes/form.html:46 #: computes/templates/computes/form.html:46
#: instances/templates/instances/edit_instance_volume.html:112 #: instances/templates/instances/edit_instance_volume.html:112
#: instances/templates/instances/nic_qos_form.html:23 #: instances/templates/instances/nic_qos_form.html:23
#: instances/templates/instances/resize_tab.html:114
#: instances/templates/instances/settings_tab.html:410 #: instances/templates/instances/settings_tab.html:410
#: instances/templates/instances/settings_tab.html:644 #: instances/templates/instances/settings_tab.html:644
#: instances/templates/instances/settings_tab.html:893 #: instances/templates/instances/settings_tab.html:893
@ -1656,6 +1653,7 @@ msgstr "Yeni sanal makine varsayılanları"
#: appsettings/views.py:40 instances/templates/instance.html:64 #: appsettings/views.py:40 instances/templates/instance.html:64
#: instances/templates/instances/destroy_instance_form.html:32 #: instances/templates/instances/destroy_instance_form.html:32
#: instances/templates/instances/resize_tab.html:20
#: instances/templates/instances/settings_tab.html:197 #: instances/templates/instances/settings_tab.html:197
msgid "Disks" msgid "Disks"
msgstr "Diskler" msgstr "Diskler"
@ -2074,7 +2072,7 @@ msgstr "VCPU"
#: instances/templates/allinstances_index_nongrouped.html:15 #: instances/templates/allinstances_index_nongrouped.html:15
#: instances/templates/create_inst_block.html:33 #: instances/templates/create_inst_block.html:33
#: instances/templates/instance.html:60 #: instances/templates/instance.html:60
#: instances/templates/instances/resize_tab.html:15 #: instances/templates/instances/resize_tab.html:17
#: instances/templates/instances/stats_tab.html:34 #: instances/templates/instances/stats_tab.html:34
msgid "Memory" msgid "Memory"
msgstr "Bellek" msgstr "Bellek"
@ -2130,6 +2128,7 @@ msgstr "/ %(memory)s"
#: instances/forms.py:15 instances/templates/allinstances_index_grouped.html:16 #: instances/forms.py:15 instances/templates/allinstances_index_grouped.html:16
#: instances/templates/allinstances_index_nongrouped.html:14 #: instances/templates/allinstances_index_nongrouped.html:14
#: instances/templates/create_instance_w2.html:63 #: instances/templates/create_instance_w2.html:63
#: instances/templates/instances/resize_tab.html:29
#: instances/templates/instances/settings_tab.html:840 #: instances/templates/instances/settings_tab.html:840
msgid "vCPUs" msgid "vCPUs"
msgstr "vCPU" msgstr "vCPU"
@ -2718,7 +2717,7 @@ msgstr ""
msgid "Delete snapshot" msgid "Delete snapshot"
msgstr "Anlık görüntüyü sil" msgstr "Anlık görüntüyü sil"
#: instances/jobs.py:304 vrtManager/instance.py:2280 #: instances/jobs.py:304 vrtManager/instance.py:2281
#, python-format #, python-format
msgid "The VM has no external snapshot named %(name)s" msgid "The VM has no external snapshot named %(name)s"
msgstr "Sanal makinede %(name)s adında harici anlık görüntü yok" msgstr "Sanal makinede %(name)s adında harici anlık görüntü yok"
@ -2753,7 +2752,7 @@ msgstr "Sanal makine artık işin çalıştığı sunucuda değil"
msgid "Take snapshot" msgid "Take snapshot"
msgstr "Anlık görüntü al" msgstr "Anlık görüntü al"
#: instances/jobs.py:372 vrtManager/instance.py:1876 #: instances/jobs.py:372 vrtManager/instance.py:1877
#, python-format #, python-format
msgid "A snapshot named %(name)s already exists" msgid "A snapshot named %(name)s already exists"
msgstr "%(name)s adında bir anlık görüntü zaten var" msgstr "%(name)s adında bir anlık görüntü zaten var"
@ -2928,7 +2927,7 @@ msgstr "cloud-init tohumu, disk için bir dizin depolama havuzu gerektirir"
msgid "This host offers no firmware %(firmware)s" msgid "This host offers no firmware %(firmware)s"
msgstr "Bu sunucu %(firmware)s firmware'ini sunmuyor" msgstr "Bu sunucu %(firmware)s firmware'ini sunmuyor"
#: instances/jobs.py:775 vrtManager/instance.py:2999 #: instances/jobs.py:775 vrtManager/instance.py:3000
msgid "This host offers no TPM 2.0: install swtpm on it" msgid "This host offers no TPM 2.0: install swtpm on it"
msgstr "Bu sunucu TPM 2.0 sunmuyor: üzerine swtpm kurun" msgstr "Bu sunucu TPM 2.0 sunmuyor: üzerine swtpm kurun"
@ -3043,67 +3042,66 @@ msgstr "oluşturuldu"
msgid "drbd" msgid "drbd"
msgstr "drbd" msgstr "drbd"
#: instances/models.py:226 instances/templates/create_instance_w2.html:118 #: instances/models.py:237 instances/templates/create_instance_w2.html:118
#: instances/templates/instances/resize_tab.html:20
#: instances/templates/instances/settings_tab.html:25 #: instances/templates/instances/settings_tab.html:25
#: instances/templates/instances/stats_tab.html:51 #: instances/templates/instances/stats_tab.html:51
msgid "Disk" msgid "Disk"
msgstr "Disk" msgstr "Disk"
#: instances/models.py:228 instances/templates/create_instance_w2.html:312 #: instances/models.py:239 instances/templates/create_instance_w2.html:312
#: instances/templates/instances/settings_tab.html:159 #: instances/templates/instances/settings_tab.html:159
msgid "CD-ROM" msgid "CD-ROM"
msgstr "CD-ROM" msgstr "CD-ROM"
#: instances/models.py:230 #: instances/models.py:241
msgid "NIC" msgid "NIC"
msgstr "NIC" msgstr "NIC"
#: instances/models.py:403 #: instances/models.py:414
msgid "Live" msgid "Live"
msgstr "Canlı" msgstr "Canlı"
#: instances/models.py:404 #: instances/models.py:415
msgid "Offline" msgid "Offline"
msgstr "Çevrimdışı" msgstr "Çevrimdışı"
#: instances/models.py:405 #: instances/models.py:416
msgid "Auto Converge" msgid "Auto Converge"
msgstr "Otomatik yavaşlat" msgstr "Otomatik yavaşlat"
#: instances/models.py:406 #: instances/models.py:417
msgid "Compress" msgid "Compress"
msgstr "Sıkıştır" msgstr "Sıkıştır"
#: instances/models.py:407 #: instances/models.py:418
msgid "Unsafe" msgid "Unsafe"
msgstr "Güvenli olmayan" msgstr "Güvenli olmayan"
#: instances/models.py:419 #: instances/models.py:430
msgid "No Virtual Machine name has been entered" msgid "No Virtual Machine name has been entered"
msgstr "Sanal makine adı girilmedi" msgstr "Sanal makine adı girilmedi"
#: instances/models.py:425 #: instances/models.py:436
msgid "No VCPU has been entered" msgid "No VCPU has been entered"
msgstr "VCPU belirtilmedi" msgstr "VCPU belirtilmedi"
#: instances/models.py:431 #: instances/models.py:442
msgid "No RAM size has been entered" msgid "No RAM size has been entered"
msgstr "RAM boyutu belirtilmedi" msgstr "RAM boyutu belirtilmedi"
#: instances/models.py:435 #: instances/models.py:446
msgid "No Network pool has been choosen" msgid "No Network pool has been choosen"
msgstr "Ağ havuzu seçilmedi" msgstr "Ağ havuzu seçilmedi"
#: instances/models.py:443 #: instances/models.py:454
msgid "Please select HDD cache mode" msgid "Please select HDD cache mode"
msgstr "Lütfen HDD ön bellek modunu seçin" msgstr "Lütfen HDD ön bellek modunu seçin"
#: instances/models.py:455 #: instances/models.py:466
msgid "Please select a video driver" msgid "Please select a video driver"
msgstr "Lütfen bir video sürücüsü seçin" msgstr "Lütfen bir video sürücüsü seçin"
#: instances/models.py:492 #: instances/models.py:503
msgid "Can access console without password" msgid "Can access console without password"
msgstr "Parolasız konsol erişimi yapabilir" msgstr "Parolasız konsol erişimi yapabilir"
@ -3505,7 +3503,7 @@ msgstr "Sanal makinenin çalışacağı sunucuyu seçin."
#: instances/templates/create_inst_block.html:23 #: instances/templates/create_inst_block.html:23
#: instances/templates/instance.html:56 #: instances/templates/instance.html:56
#: instances/templates/instances/resize_tab.html:10 #: instances/templates/instances/resize_tab.html:14
#: instances/templates/instances/stats_tab.html:27 #: instances/templates/instances/stats_tab.html:27
msgid "CPU" msgid "CPU"
msgstr "CPU" msgstr "CPU"
@ -4494,130 +4492,111 @@ msgstr "Zorla Kapat"
msgid "Power Cycle" msgid "Power Cycle"
msgstr "Yeniden başlat" msgstr "Yeniden başlat"
#: instances/templates/instances/resize_tab.html:33 #: instances/templates/instances/resize_tab.html:8
msgid "CPU allocation" msgid "You don't have permission for resizing instance"
msgstr "CPU ataması" msgstr "Sanal makineyi yeniden boyutlandırma iznine sahip değilsiniz"
#: instances/templates/instances/resize_tab.html:34 #: instances/templates/instances/resize_tab.html:12
#, python-format msgid "Resources to resize"
msgid "Now %(cur)s of %(max)s vCPUs." msgstr "Boyutlandırılacak kaynaklar"
msgstr "Şu an %(max)s vCPU'dan %(cur)s."
#: instances/templates/instances/resize_tab.html:35 #: instances/templates/instances/resize_tab.html:35
msgid "on, turn off"
msgstr "açık, kapat"
#: instances/templates/instances/resize_tab.html:37
msgid "off, turn on"
msgstr "kapalı, aç"
#: instances/templates/instances/resize_tab.html:41
msgid "on"
msgstr "açık"
#: instances/templates/instances/resize_tab.html:41
msgid "off"
msgstr "kapalı"
#: instances/templates/instances/resize_tab.html:45
#, python-format #, python-format
msgid "%(count)s logical CPUs" msgid "%(cur)s on, up to %(max)s"
msgstr "%(count)s mantıksal CPU" msgstr "%(cur)s açık, en fazla %(max)s"
#: instances/templates/instances/resize_tab.html:39 #: instances/templates/instances/resize_tab.html:46
#: instances/templates/instances/resize_tab.html:138 #, python-format
msgid "The VM gets these at its next start." msgid "Host: %(count)s logical CPUs"
msgstr "Sanal makine bunları bir sonraki başlatmada alır." msgstr "Sunucu: %(count)s mantıksal CPU"
#: instances/templates/instances/resize_tab.html:40 #: instances/templates/instances/resize_tab.html:49
msgid "Shut the VM down to change its vCPUs." msgid "Click a vCPU to turn it on or off now; the next start keeps it so."
msgstr "vCPU'larını değiştirmek için sanal makineyi kapatın."
#: instances/templates/instances/resize_tab.html:40
msgid "While it runs, turn vCPUs on and off below."
msgstr "Çalışırken vCPU'ları aşağıdan açıp kapatın."
#: instances/templates/instances/resize_tab.html:44
msgid "Current vCPUs"
msgstr "Geçerli vCPU'lar"
#: instances/templates/instances/resize_tab.html:52
msgid "Maximum vCPUs"
msgstr "En fazla vCPU"
#: instances/templates/instances/resize_tab.html:61
msgid "Resize CPU"
msgstr "CPU Boyutlandır"
#: instances/templates/instances/resize_tab.html:70
msgid "Live vCPUs"
msgstr "Canlı vCPU'lar"
#: instances/templates/instances/resize_tab.html:72
msgid "Turn a vCPU on or off now; the next start keeps it so. vCPU 0 stays on."
msgstr "" msgstr ""
"Bir vCPU'yu şimdi açın veya kapatın; sonraki başlatmada da öyle kalır. vCPU 0" "Bir vCPU'ya tıklayarak onu şimdi açın veya kapatın; sonraki başlatmada da "
" açık kalır." "öyle kalır."
#: instances/templates/instances/resize_tab.html:73 #: instances/templates/instances/resize_tab.html:49
msgid "A paused VM cannot let one go: resume it to turn vCPUs off." msgid "A paused VM cannot let one go: resume it to turn vCPUs off."
msgstr "" msgstr ""
"Duraklatılmış sanal makine vCPU bırakamaz: vCPU'ları kapatmak için devam " "Duraklatılmış sanal makine vCPU bırakamaz: vCPU'ları kapatmak için devam "
"ettirin." "ettirin."
#: instances/templates/instances/resize_tab.html:82 #: instances/templates/instances/resize_tab.html:54
#, python-format msgid "Current"
msgid "%(id)s · Fixed" msgstr "Şu an"
msgstr "%(id)s · Sabit"
#: instances/templates/instances/resize_tab.html:84 #: instances/templates/instances/resize_tab.html:60
#, python-format msgid "Maximum"
msgid "%(id)s · On" msgstr "En fazla"
msgstr "%(id)s · Açık"
#: instances/templates/instances/resize_tab.html:84 #: instances/templates/instances/resize_tab.html:66
msgid "turn off" msgid "Resize CPU"
msgstr "kapat" msgstr "CPU'yu boyutlandır"
#: instances/templates/instances/resize_tab.html:86 #: instances/templates/instances/resize_tab.html:69
#, python-format #: instances/templates/instances/resize_tab.html:101
msgid "%(id)s · Off" msgid "The VM gets these at its next start."
msgstr "%(id)s · Kapalı" msgstr "Sanal makine bunları bir sonraki başlatmada alır."
#: instances/templates/instances/resize_tab.html:86 #: instances/templates/instances/resize_tab.html:69
msgid "turn on" msgid "Shut the VM down to change its vCPUs."
msgstr "aç" msgstr "vCPU'larını değiştirmek için sanal makineyi kapatın."
#: instances/templates/instances/resize_tab.html:99 #: instances/templates/instances/resize_tab.html:75
msgid "vCPU hot plug" msgid "vCPU hot plug"
msgstr "vCPU sıcak takma" msgstr "vCPU sıcak takma"
#: instances/templates/instances/resize_tab.html:101 #: instances/templates/instances/resize_tab.html:77
msgid "Lets vCPUs up to the maximum be turned on and off while the VM runs." msgid "Lets vCPUs up to the maximum be turned on and off while the VM runs."
msgstr "" msgstr ""
"Sanal makine çalışırken azami sayıya kadar vCPU'ların açılıp kapatılmasını " "Sanal makine çalışırken azami sayıya kadar vCPU'ların açılıp kapatılmasını "
"sağlar." "sağlar."
#: instances/templates/instances/resize_tab.html:102 #: instances/templates/instances/resize_tab.html:77
#: instances/templates/instances/settings_tab.html:913 #: instances/templates/instances/settings_tab.html:913
msgid "Shut the VM down to change this." msgid "Shut the VM down to change this."
msgstr "Bunu değiştirmek için sanal makineyi kapatın." msgstr "Bunu değiştirmek için sanal makineyi kapatın."
#: instances/templates/instances/resize_tab.html:109 #: instances/templates/instances/resize_tab.html:84
#: instances/templates/instances/settings_tab.html:1020
msgid "Enabled"
msgstr "Etkin"
#: instances/templates/instances/resize_tab.html:110
#: instances/templates/instances/settings_tab.html:1021
msgid "Disabled"
msgstr "Devredışı"
#: instances/templates/instances/resize_tab.html:123
#: instances/templates/instances/resize_tab.html:160
#: instances/templates/instances/resize_tab.html:201
msgid "You don't have permission for resizing instance"
msgstr "Sanal makineyi yeniden boyutlandırma iznine sahip değilsiniz"
#: instances/templates/instances/resize_tab.html:132
msgid "Memory allocation"
msgstr "Bellek ataması"
#: instances/templates/instances/resize_tab.html:133
#, python-format #, python-format
msgid "Now %(cur)s MiB of maximum %(max)s MiB." msgid "%(cur)s MiB of %(max)s MiB"
msgstr "Şu an en fazla %(max)s MiB'den %(cur)s MiB." msgstr "%(cur)s MiB / %(max)s MiB"
#: instances/templates/instances/resize_tab.html:134 #: instances/templates/instances/resize_tab.html:85
#, python-format #, python-format
msgid "%(total)s memory" msgid "Host: %(total)s"
msgstr "%(total)s bellek" msgstr "Sunucu: %(total)s"
#: instances/templates/instances/resize_tab.html:139 #: instances/templates/instances/resize_tab.html:89
msgid "Current (MiB)"
msgstr "Şu an (MiB)"
#: instances/templates/instances/resize_tab.html:93
msgid "Maximum (MiB)"
msgstr "En fazla (MiB)"
#: instances/templates/instances/resize_tab.html:98
msgid "Resize memory"
msgstr "Belleği boyutlandır"
#: instances/templates/instances/resize_tab.html:101
msgid "" msgid ""
"The current memory changes now, up to the maximum; shut the VM down to change" "The current memory changes now, up to the maximum; shut the VM down to change"
" the maximum." " the maximum."
@ -4625,25 +4604,7 @@ msgstr ""
"Geçerli bellek, azami değere kadar hemen değişir; azami değeri değiştirmek " "Geçerli bellek, azami değere kadar hemen değişir; azami değeri değiştirmek "
"için sanal makineyi kapatın." "için sanal makineyi kapatın."
#: instances/templates/instances/resize_tab.html:143 #: instances/templates/instances/resize_tab.html:104
msgid "Current memory (MiB)"
msgstr "Geçerli bellek (MiB)"
#: instances/templates/instances/resize_tab.html:147
msgid "Maximum memory (MiB)"
msgstr "En fazla bellek (MiB)"
#: instances/templates/instances/resize_tab.html:153
msgid "Resize memory"
msgstr "Belleği boyutlandır"
#: instances/templates/instances/resize_tab.html:169
#: instances/templates/instances/resize_tab.html:191
#: instances/templates/instances/resize_tab.html:193
msgid "Grow disks"
msgstr "Diskleri büyüt"
#: instances/templates/instances/resize_tab.html:170
msgid "" msgid ""
"A new size in GiB, larger than the disk's; empty keeps a disk as it is. Disks" "A new size in GiB, larger than the disk's; empty keeps a disk as it is. Disks"
" grow while the VM runs; the guest then grows its partition and file system." " grow while the VM runs; the guest then grows its partition and file system."
@ -4652,16 +4613,25 @@ msgstr ""
"olduğu gibi kalır. Diskler sanal makine çalışırken büyür; ardından konuk " "olduğu gibi kalır. Diskler sanal makine çalışırken büyür; ardından konuk "
"sistem bölümünü ve dosya sistemini büyütür." "sistem bölümünü ve dosya sistemini büyütür."
#: instances/templates/instances/resize_tab.html:178 #: instances/templates/instances/resize_tab.html:110
#: instances/templates/instances/settings_tab.html:211 #: instances/templates/instances/settings_tab.html:211
msgid "Error getting disk info" msgid "Error getting disk info"
msgstr "Disk bilgisi elde edilirken hata" msgstr "Disk bilgisi elde edilirken hata"
#: instances/templates/instances/resize_tab.html:180 #: instances/templates/instances/resize_tab.html:112
#, python-format #, python-format
msgid "Now %(size)s" msgid "Now %(size)s"
msgstr "Şu an %(size)s" msgstr "Şu an %(size)s"
#: instances/templates/instances/resize_tab.html:115
msgid "New size"
msgstr "Yeni boyut"
#: instances/templates/instances/resize_tab.html:124
#: instances/templates/instances/resize_tab.html:126
msgid "Grow disks"
msgstr "Diskleri büyüt"
#: instances/templates/instances/settings_tab.html:20 #: instances/templates/instances/settings_tab.html:20
msgid "Boot" msgid "Boot"
msgstr "Ön Yükleme" msgstr "Ön Yükleme"
@ -5510,6 +5480,14 @@ msgstr "Sanal makine çalışmıyor"
msgid "No channel" msgid "No channel"
msgstr "Kanal yok" msgstr "Kanal yok"
#: instances/templates/instances/settings_tab.html:1020
msgid "Enabled"
msgstr "Etkin"
#: instances/templates/instances/settings_tab.html:1021
msgid "Disabled"
msgstr "Devredışı"
#: instances/templates/instances/snapshots_tab.html:11 #: instances/templates/instances/snapshots_tab.html:11
msgid "Snapshots" msgid "Snapshots"
msgstr "Anlık görüntüler" msgstr "Anlık görüntüler"
@ -9003,7 +8981,7 @@ msgstr ""
"Anlık görüntü adları 1-64 harf, rakam, '.', '_' veya '-' karakterinden oluşur" "Anlık görüntü adları 1-64 harf, rakam, '.', '_' veya '-' karakterinden oluşur"
" ve '.' ile başlamaz" " ve '.' ile başlamaz"
#: vrtManager/instance.py:1076 #: vrtManager/instance.py:1077
msgid "" msgid ""
"A device other than a disk or NIC is in the boot order: change it in the XML " "A device other than a disk or NIC is in the boot order: change it in the XML "
"editor" "editor"
@ -9011,100 +8989,100 @@ msgstr ""
"Önyükleme sırasında disk veya NIC dışında bir aygıt var: bunu XML " "Önyükleme sırasında disk veya NIC dışında bir aygıt var: bunu XML "
"düzenleyicide değiştirin" "düzenleyicide değiştirin"
#: vrtManager/instance.py:1088 #: vrtManager/instance.py:1089
msgid "Invalid Device Type for boot order" msgid "Invalid Device Type for boot order"
msgstr "Ön yükleme sırası için geçersiz aygıt türü" msgstr "Ön yükleme sırası için geçersiz aygıt türü"
#: vrtManager/instance.py:1091 #: vrtManager/instance.py:1092
#, python-format #, python-format
msgid "Boot device %(dev)s is not in the definition" msgid "Boot device %(dev)s is not in the definition"
msgstr "Ön yükleme aygıtı %(dev)s tanımda yok" msgstr "Ön yükleme aygıtı %(dev)s tanımda yok"
#: vrtManager/instance.py:1111 #: vrtManager/instance.py:1112
#, python-format #, python-format
msgid "CD-ROM %(dev)s is not in the running definition" msgid "CD-ROM %(dev)s is not in the running definition"
msgstr "CD-ROM %(dev)s çalışan tanımda yok" msgstr "CD-ROM %(dev)s çalışan tanımda yok"
#: vrtManager/instance.py:1112 #: vrtManager/instance.py:1113
#, python-format #, python-format
msgid "CD-ROM %(dev)s is not in the persistent definition" msgid "CD-ROM %(dev)s is not in the persistent definition"
msgstr "CD-ROM %(dev)s kalıcı tanımda yok" msgstr "CD-ROM %(dev)s kalıcı tanımda yok"
#: vrtManager/instance.py:1124 #: vrtManager/instance.py:1125
#, python-format #, python-format
msgid "Media of %(dev)s changed in the running VM only: %(err)s" msgid "Media of %(dev)s changed in the running VM only: %(err)s"
msgstr "%(dev)s ortamı yalnızca çalışan sanal makinede değişti: %(err)s" msgstr "%(dev)s ortamı yalnızca çalışan sanal makinede değişti: %(err)s"
#: vrtManager/instance.py:1135 #: vrtManager/instance.py:1136
#, python-format #, python-format
msgid "ISO image %(image)s was not found" msgid "ISO image %(image)s was not found"
msgstr "ISO imajı %(image)s bulunamadı" msgstr "ISO imajı %(image)s bulunamadı"
#: vrtManager/instance.py:1137 #: vrtManager/instance.py:1138
#, python-format #, python-format
msgid "ISO image %(image)s is in more than one storage pool" msgid "ISO image %(image)s is in more than one storage pool"
msgstr "ISO imajı %(image)s birden fazla depolama havuzunda var" msgstr "ISO imajı %(image)s birden fazla depolama havuzunda var"
#: vrtManager/instance.py:1244 #: vrtManager/instance.py:1245
#, python-format #, python-format
msgid "Disk %(target_dev)s is not in the VM's definition" msgid "Disk %(target_dev)s is not in the VM's definition"
msgstr "Disk %(target_dev)s sanal makinenin tanımında yok" msgstr "Disk %(target_dev)s sanal makinenin tanımında yok"
#: vrtManager/instance.py:1372 #: vrtManager/instance.py:1373
msgid "Please shutdown the instance then try to enable vCPU hotplug" msgid "Please shutdown the instance then try to enable vCPU hotplug"
msgstr "" msgstr ""
"vCPU hotplug özelliğini etkinleştirmek için önce sanal makineyi kapatın" "vCPU hotplug özelliğini etkinleştirmek için önce sanal makineyi kapatın"
#: vrtManager/instance.py:1835 #: vrtManager/instance.py:1836
msgid "" msgid ""
"The VM has external snapshots; internal snapshots cannot be mixed with them" "The VM has external snapshots; internal snapshots cannot be mixed with them"
msgstr "" msgstr ""
"Sanal makinenin harici anlık görüntüleri var; dahili anlık görüntüler " "Sanal makinenin harici anlık görüntüleri var; dahili anlık görüntüler "
"bunlarla karıştırılamaz" "bunlarla karıştırılamaz"
#: vrtManager/instance.py:1867 #: vrtManager/instance.py:1868
msgid "A snapshot with memory is not quiesced; it keeps the whole guest state" msgid "A snapshot with memory is not quiesced; it keeps the whole guest state"
msgstr "" msgstr ""
"Bellekli bir anlık görüntüde dosya sistemleri dondurulmaz; tüm konuk durumunu" "Bellekli bir anlık görüntüde dosya sistemleri dondurulmaz; tüm konuk durumunu"
" saklar" " saklar"
#: vrtManager/instance.py:1869 #: vrtManager/instance.py:1870
msgid "Only a running VM's file systems can be frozen" msgid "Only a running VM's file systems can be frozen"
msgstr "Yalnızca çalışan bir sanal makinenin dosya sistemleri dondurulabilir" msgstr "Yalnızca çalışan bir sanal makinenin dosya sistemleri dondurulabilir"
#: vrtManager/instance.py:1871 #: vrtManager/instance.py:1872
msgid "The QEMU guest agent is not connected; it freezes the file systems" msgid "The QEMU guest agent is not connected; it freezes the file systems"
msgstr "QEMU konuk aracısı bağlı değil; dosya sistemlerini o dondurur" msgstr "QEMU konuk aracısı bağlı değil; dosya sistemlerini o dondurur"
#: vrtManager/instance.py:1874 #: vrtManager/instance.py:1875
msgid "" msgid ""
"The VM has internal snapshots; external snapshots cannot be mixed with them" "The VM has internal snapshots; external snapshots cannot be mixed with them"
msgstr "" msgstr ""
"Sanal makinenin dahili anlık görüntüleri var; harici anlık görüntüler " "Sanal makinenin dahili anlık görüntüleri var; harici anlık görüntüler "
"bunlarla karıştırılamaz" "bunlarla karıştırılamaz"
#: vrtManager/instance.py:1879 #: vrtManager/instance.py:1880
msgid "Newer snapshots exist after the last revert; delete them first" msgid "Newer snapshots exist after the last revert; delete them first"
msgstr "" msgstr ""
"Son geri dönüşten sonra daha yeni anlık görüntüler var; önce onları silin" "Son geri dönüşten sonra daha yeni anlık görüntüler var; önce onları silin"
#: vrtManager/instance.py:1882 #: vrtManager/instance.py:1883
msgid "No snapshot is current; revert to a snapshot first" msgid "No snapshot is current; revert to a snapshot first"
msgstr "Geçerli anlık görüntü yok; önce bir anlık görüntüye geri dönün" msgstr "Geçerli anlık görüntü yok; önce bir anlık görüntüye geri dönün"
#: vrtManager/instance.py:1888 #: vrtManager/instance.py:1889
#, python-format #, python-format
msgid "Eject the media from %(dev)s first" msgid "Eject the media from %(dev)s first"
msgstr "Önce %(dev)s içindeki ortamı çıkarın" msgstr "Önce %(dev)s içindeki ortamı çıkarın"
#: vrtManager/instance.py:1890 #: vrtManager/instance.py:1891
#, python-format #, python-format
msgid "Disk %(dev)s is not a file; external snapshots need file disks" msgid "Disk %(dev)s is not a file; external snapshots need file disks"
msgstr "" msgstr ""
"Disk %(dev)s bir dosya değil; harici anlık görüntüler dosya diskleri " "Disk %(dev)s bir dosya değil; harici anlık görüntüler dosya diskleri "
"gerektirir" "gerektirir"
#: vrtManager/instance.py:1898 #: vrtManager/instance.py:1899
#, python-format #, python-format
msgid "" msgid ""
"The storage pools could not be refreshed, so their free space is unknown: " "The storage pools could not be refreshed, so their free space is unknown: "
@ -9112,21 +9090,21 @@ msgid ""
msgstr "" msgstr ""
"Depolama havuzları yenilenemedi, bu yüzden boş alanları bilinmiyor: %(err)s" "Depolama havuzları yenilenemedi, bu yüzden boş alanları bilinmiyor: %(err)s"
#: vrtManager/instance.py:1919 #: vrtManager/instance.py:1920
msgid "Memory is saved only from a running VM" msgid "Memory is saved only from a running VM"
msgstr "Bellek yalnızca çalışan bir sanal makineden kaydedilir" msgstr "Bellek yalnızca çalışan bir sanal makineden kaydedilir"
#: vrtManager/instance.py:1921 #: vrtManager/instance.py:1922
msgid "The VM has no disk to keep its memory next to" msgid "The VM has no disk to keep its memory next to"
msgstr "Sanal makinenin, belleğinin yanına kaydedileceği bir diski yok" msgstr "Sanal makinenin, belleğinin yanına kaydedileceği bir diski yok"
#: vrtManager/instance.py:1925 #: vrtManager/instance.py:1926
#, python-format #, python-format
msgid "%(disk)s is not in a storage pool; memory is saved only into one" msgid "%(disk)s is not in a storage pool; memory is saved only into one"
msgstr "" msgstr ""
"%(disk)s bir depolama havuzunda değil; bellek yalnızca bir havuza kaydedilir" "%(disk)s bir depolama havuzunda değil; bellek yalnızca bir havuza kaydedilir"
#: vrtManager/instance.py:1956 #: vrtManager/instance.py:1957
#, python-format #, python-format
msgid "" msgid ""
"Storage pool %(pool)s has %(free).1f GiB free; the snapshot needs %(size).1f " "Storage pool %(pool)s has %(free).1f GiB free; the snapshot needs %(size).1f "
@ -9137,7 +9115,7 @@ msgstr ""
"%(size).1f GiB gerektiriyor (sanal makinenin oradaki disklerinin " "%(size).1f GiB gerektiriyor (sanal makinenin oradaki disklerinin "
"%%%(percent)g kadarı, en az %(minimum)g GiB, ve kaydediliyorsa bellek)" "%%%(percent)g kadarı, en az %(minimum)g GiB, ve kaydediliyorsa bellek)"
#: vrtManager/instance.py:1974 #: vrtManager/instance.py:1975
msgid "" msgid ""
"This snapshot was taken by an older version on a UEFI VM and cannot be " "This snapshot was taken by an older version on a UEFI VM and cannot be "
"reverted; delete it instead" "reverted; delete it instead"
@ -9145,7 +9123,7 @@ msgstr ""
"Bu anlık görüntü UEFI bir sanal makinede eski bir sürümle alındı ve geri " "Bu anlık görüntü UEFI bir sanal makinede eski bir sürümle alındı ve geri "
"dönülemez; bunun yerine silin" "dönülemez; bunun yerine silin"
#: vrtManager/instance.py:2004 #: vrtManager/instance.py:2005
#, python-format #, python-format
msgid "" msgid ""
"The revert failed twice; try again in a moment (%(error)s). The VM is " "The revert failed twice; try again in a moment (%(error)s). The VM is "
@ -9154,7 +9132,7 @@ msgstr ""
"Geri dönüş iki kez başarısız oldu; biraz sonra tekrar deneyin (%(error)s). " "Geri dönüş iki kez başarısız oldu; biraz sonra tekrar deneyin (%(error)s). "
"Sanal makine çalışıyor." "Sanal makine çalışıyor."
#: vrtManager/instance.py:2006 #: vrtManager/instance.py:2007
#, python-format #, python-format
msgid "" msgid ""
"The revert failed twice; try again in a moment (%(error)s). The VM is shut " "The revert failed twice; try again in a moment (%(error)s). The VM is shut "
@ -9163,13 +9141,13 @@ msgstr ""
"Geri dönüş iki kez başarısız oldu; biraz sonra tekrar deneyin (%(error)s). " "Geri dönüş iki kez başarısız oldu; biraz sonra tekrar deneyin (%(error)s). "
"Sanal makine kapalı." "Sanal makine kapalı."
#: vrtManager/instance.py:2169 #: vrtManager/instance.py:2170
msgid "A disk moves when its VM is defined and running, paused or shut off" msgid "A disk moves when its VM is defined and running, paused or shut off"
msgstr "" msgstr ""
"Bir disk, sanal makinesi tanımlıyken ve çalışırken, duraklatılmışken veya " "Bir disk, sanal makinesi tanımlıyken ve çalışırken, duraklatılmışken veya "
"kapalıyken taşınır" "kapalıyken taşınır"
#: vrtManager/instance.py:2171 #: vrtManager/instance.py:2172
msgid "" msgid ""
"A disk of a VM with snapshots, a saved state or a running block job does not " "A disk of a VM with snapshots, a saved state or a running block job does not "
"move" "move"
@ -9177,7 +9155,7 @@ msgstr ""
"Anlık görüntüleri, kaydedilmiş durumu veya çalışan bir blok işi olan sanal " "Anlık görüntüleri, kaydedilmiş durumu veya çalışan bir blok işi olan sanal "
"makinenin diski taşınmaz" "makinenin diski taşınmaz"
#: vrtManager/instance.py:2179 #: vrtManager/instance.py:2180
#, python-format #, python-format
msgid "" msgid ""
"%(dev)s is not a disk file of the VM, the same in its running and next " "%(dev)s is not a disk file of the VM, the same in its running and next "
@ -9186,132 +9164,132 @@ msgstr ""
"%(dev)s, sanal makinenin çalışan ve sonraki başlatma tanımlarında aynı olan " "%(dev)s, sanal makinenin çalışan ve sonraki başlatma tanımlarında aynı olan "
"bir disk dosyası değil" "bir disk dosyası değil"
#: vrtManager/instance.py:2184 #: vrtManager/instance.py:2185
#, python-format #, python-format
msgid "%(dev)s does not move: only writable raw and qcow2 disks do" msgid "%(dev)s does not move: only writable raw and qcow2 disks do"
msgstr "%(dev)s taşınmaz: yalnızca yazılabilir raw ve qcow2 diskler taşınır" msgstr "%(dev)s taşınmaz: yalnızca yazılabilir raw ve qcow2 diskler taşınır"
#: vrtManager/instance.py:2191 #: vrtManager/instance.py:2192
#, python-format #, python-format
msgid "%(dev)s does not move: no storage pool has %(path)s" msgid "%(dev)s does not move: no storage pool has %(path)s"
msgstr "%(dev)s taşınmaz: hiçbir depolama havuzunda %(path)s yok" msgstr "%(dev)s taşınmaz: hiçbir depolama havuzunda %(path)s yok"
#: vrtManager/instance.py:2193 #: vrtManager/instance.py:2194
#, python-format #, python-format
msgid "%(dev)s does not move: it has a backing file" msgid "%(dev)s does not move: it has a backing file"
msgstr "%(dev)s taşınmaz: temel (backing) dosyası var" msgstr "%(dev)s taşınmaz: temel (backing) dosyası var"
#: vrtManager/instance.py:2196 #: vrtManager/instance.py:2197
#, python-format #, python-format
msgid "%(pool_name)s is not an active pool of disk files of this host" msgid "%(pool_name)s is not an active pool of disk files of this host"
msgstr "%(pool_name)s bu sunucunun etkin bir disk dosyası havuzu değil" msgstr "%(pool_name)s bu sunucunun etkin bir disk dosyası havuzu değil"
#: vrtManager/instance.py:2199 #: vrtManager/instance.py:2200
#, python-format #, python-format
msgid "%(dev)s is in pool %(pool_name)s already" msgid "%(dev)s is in pool %(pool_name)s already"
msgstr "%(dev)s zaten %(pool_name)s havuzunda" msgstr "%(dev)s zaten %(pool_name)s havuzunda"
#: vrtManager/instance.py:2203 #: vrtManager/instance.py:2204
#, python-format #, python-format
msgid "Pool %(pool_name)s already has a file %(name)s" msgid "Pool %(pool_name)s already has a file %(name)s"
msgstr "%(pool_name)s havuzunda zaten %(name)s dosyası var" msgstr "%(pool_name)s havuzunda zaten %(name)s dosyası var"
#: vrtManager/instance.py:2227 #: vrtManager/instance.py:2228
#, python-format #, python-format
msgid "The copy of %(dev)s ended before it was complete" msgid "The copy of %(dev)s ended before it was complete"
msgstr "%(dev)s kopyası tamamlanmadan sona erdi" msgstr "%(dev)s kopyası tamamlanmadan sona erdi"
#: vrtManager/instance.py:2272 #: vrtManager/instance.py:2273
#, python-format #, python-format
msgid "%(error)s; remove %(dest)s if it is there: %(cleanup_error)s" msgid "%(error)s; remove %(dest)s if it is there: %(cleanup_error)s"
msgstr "%(error)s; varsa %(dest)s dosyasını kaldırın: %(cleanup_error)s" msgstr "%(error)s; varsa %(dest)s dosyasını kaldırın: %(cleanup_error)s"
#: vrtManager/instance.py:2274 #: vrtManager/instance.py:2275
#, python-format #, python-format
msgid "%(error)s; the VM may use %(dest)s now: check its disk %(dev)s" msgid "%(error)s; the VM may use %(dest)s now: check its disk %(dev)s"
msgstr "" msgstr ""
"%(error)s; sanal makine şu anda %(dest)s dosyasını kullanıyor olabilir: " "%(error)s; sanal makine şu anda %(dest)s dosyasını kullanıyor olabilir: "
"%(dev)s diskini kontrol edin" "%(dev)s diskini kontrol edin"
#: vrtManager/instance.py:2281 #: vrtManager/instance.py:2282
#, python-format #, python-format
msgid "The VM has no internal snapshot named %(name)s" msgid "The VM has no internal snapshot named %(name)s"
msgstr "Sanal makinenin %(name)s adlı dahili anlık görüntüsü yok" msgstr "Sanal makinenin %(name)s adlı dahili anlık görüntüsü yok"
#: vrtManager/instance.py:2290 #: vrtManager/instance.py:2291
msgid "The VM has a saved state; start it or remove the saved state first" msgid "The VM has a saved state; start it or remove the saved state first"
msgstr "" msgstr ""
"Sanal makinenin kaydedilmiş durumu var; önce başlatın veya kaydedilmiş durumu" "Sanal makinenin kaydedilmiş durumu var; önce başlatın veya kaydedilmiş durumu"
" kaldırın" " kaldırın"
#: vrtManager/instance.py:2292 #: vrtManager/instance.py:2293
msgid "A snapshot job is still running on this VM; try again when it ends" msgid "A snapshot job is still running on this VM; try again when it ends"
msgstr "" msgstr ""
"Bu sanal makinede hâlâ bir anlık görüntü işi çalışıyor; bittiğinde tekrar " "Bu sanal makinede hâlâ bir anlık görüntü işi çalışıyor; bittiğinde tekrar "
"deneyin" "deneyin"
#: vrtManager/instance.py:2302 #: vrtManager/instance.py:2303
msgid "Shut the VM down to revert to an internal snapshot" msgid "Shut the VM down to revert to an internal snapshot"
msgstr "Dahili bir anlık görüntüye geri dönmek için sanal makineyi kapatın" msgstr "Dahili bir anlık görüntüye geri dönmek için sanal makineyi kapatın"
#: vrtManager/instance.py:2391 #: vrtManager/instance.py:2392
msgid "Cannot clone a VM whose NVRAM is not a file" msgid "Cannot clone a VM whose NVRAM is not a file"
msgstr "NVRAM'i dosya olmayan bir sanal makine klonlanamaz" msgstr "NVRAM'i dosya olmayan bir sanal makine klonlanamaz"
#: vrtManager/instance.py:2459 #: vrtManager/instance.py:2460
#, python-format #, python-format
msgid "Clone failed (%(err)s); remove these copies by hand: %(path)s" msgid "Clone failed (%(err)s); remove these copies by hand: %(path)s"
msgstr "" msgstr ""
"Klonlama başarısız oldu (%(err)s); bu kopyaları elle kaldırın: %(path)s" "Klonlama başarısız oldu (%(err)s); bu kopyaları elle kaldırın: %(path)s"
#: vrtManager/instance.py:2469 #: vrtManager/instance.py:2470
msgid "Shut the VM down before cloning it" msgid "Shut the VM down before cloning it"
msgstr "Klonlamadan önce sanal makineyi kapatın" msgstr "Klonlamadan önce sanal makineyi kapatın"
#: vrtManager/instance.py:2523 #: vrtManager/instance.py:2524
#, python-format #, python-format
msgid "Clone failed (%(err)s); remove these copies by hand: %(leftovers)s" msgid "Clone failed (%(err)s); remove these copies by hand: %(leftovers)s"
msgstr "" msgstr ""
"Klonlama başarısız oldu (%(err)s); bu kopyaları elle kaldırın: %(leftovers)s" "Klonlama başarısız oldu (%(err)s); bu kopyaları elle kaldırın: %(leftovers)s"
#: vrtManager/instance.py:2534 #: vrtManager/instance.py:2535
msgid "Live clone needs libvirt 11.10 or later; shut the VM down to clone it" msgid "Live clone needs libvirt 11.10 or later; shut the VM down to clone it"
msgstr "" msgstr ""
"Canlı klonlama libvirt 11.10 veya sonrasını gerektirir; klonlamak için sanal " "Canlı klonlama libvirt 11.10 veya sonrasını gerektirir; klonlamak için sanal "
"makineyi kapatın" "makineyi kapatın"
#: vrtManager/instance.py:2537 #: vrtManager/instance.py:2538
msgid "A VM with a TPM is cloned only shut down" msgid "A VM with a TPM is cloned only shut down"
msgstr "TPM'i olan bir sanal makine yalnızca kapalıyken klonlanır" msgstr "TPM'i olan bir sanal makine yalnızca kapalıyken klonlanır"
#: vrtManager/instance.py:2540 #: vrtManager/instance.py:2541
#, python-format #, python-format
msgid "Disk %(dev)s is not a local file; shut the VM down to clone it" msgid "Disk %(dev)s is not a local file; shut the VM down to clone it"
msgstr "" msgstr ""
"Disk %(dev)s yerel bir dosya değil; klonlamak için sanal makineyi kapatın" "Disk %(dev)s yerel bir dosya değil; klonlamak için sanal makineyi kapatın"
#: vrtManager/instance.py:2542 #: vrtManager/instance.py:2543
#, python-format #, python-format
msgid "Disk %(dev)s is shareable; shut the VM down to clone it" msgid "Disk %(dev)s is shareable; shut the VM down to clone it"
msgstr "Disk %(dev)s paylaşılabilir; klonlamak için sanal makineyi kapatın" msgstr "Disk %(dev)s paylaşılabilir; klonlamak için sanal makineyi kapatın"
#: vrtManager/instance.py:2547 #: vrtManager/instance.py:2548
#, python-format #, python-format
msgid "Disk %(dev)s changes at the next start; shut the VM down to clone it" msgid "Disk %(dev)s changes at the next start; shut the VM down to clone it"
msgstr "" msgstr ""
"Disk %(dev)s sonraki başlatmada değişiyor; klonlamak için sanal makineyi " "Disk %(dev)s sonraki başlatmada değişiyor; klonlamak için sanal makineyi "
"kapatın" "kapatın"
#: vrtManager/instance.py:2549 #: vrtManager/instance.py:2550
msgid "Another job is running on the VM; clone it when that ends" msgid "Another job is running on the VM; clone it when that ends"
msgstr "Sanal makinede başka bir iş çalışıyor; o bittiğinde klonlayın" msgstr "Sanal makinede başka bir iş çalışıyor; o bittiğinde klonlayın"
#: vrtManager/instance.py:2562 #: vrtManager/instance.py:2563
#, python-format #, python-format
msgid "Volume %(name)s already exists in storage pool %(pool)s" msgid "Volume %(name)s already exists in storage pool %(pool)s"
msgstr "%(name)s birimi %(pool)s depolama havuzunda zaten var" msgstr "%(name)s birimi %(pool)s depolama havuzunda zaten var"
#: vrtManager/instance.py:2581 #: vrtManager/instance.py:2582
#, python-format #, python-format
msgid "" msgid ""
"Storage pool %(pool)s has %(free).1f GiB free; the clone needs %(size).1f GiB" "Storage pool %(pool)s has %(free).1f GiB free; the clone needs %(size).1f GiB"
@ -9321,20 +9299,20 @@ msgstr ""
"gerektiriyor (kopyalanan diskler, artı bunların %%%(percent)g kadarı, en az " "gerektiriyor (kopyalanan diskler, artı bunların %%%(percent)g kadarı, en az "
"%(minimum)g GiB)" "%(minimum)g GiB)"
#: vrtManager/instance.py:2720 #: vrtManager/instance.py:2721
msgid "A network interface that is a host device is removed in the XML editor" msgid "A network interface that is a host device is removed in the XML editor"
msgstr "Sunucu aygıtı olan bir ağ arabirimi XML düzenleyicide kaldırılır" msgstr "Sunucu aygıtı olan bir ağ arabirimi XML düzenleyicide kaldırılır"
#: vrtManager/instance.py:2736 #: vrtManager/instance.py:2737
#, python-format #, python-format
msgid "No network interface with MAC %(old_mac)s" msgid "No network interface with MAC %(old_mac)s"
msgstr "MAC adresi %(old_mac)s olan ağ arabirimi yok" msgstr "MAC adresi %(old_mac)s olan ağ arabirimi yok"
#: vrtManager/instance.py:2739 #: vrtManager/instance.py:2740
msgid "A network interface that is a host device is changed in the XML editor" msgid "A network interface that is a host device is changed in the XML editor"
msgstr "Sunucu aygıtı olan bir ağ arabirimi XML düzenleyicide değiştirilir" msgstr "Sunucu aygıtı olan bir ağ arabirimi XML düzenleyicide değiştirilir"
#: vrtManager/instance.py:2830 #: vrtManager/instance.py:2831
msgid "" msgid ""
"A VM changes its PCI devices while it runs, or is shut off without a saved " "A VM changes its PCI devices while it runs, or is shut off without a saved "
"state" "state"
@ -9342,14 +9320,14 @@ msgstr ""
"Sanal makine PCI aygıtlarını çalışırken veya kaydedilmiş durumu olmadan " "Sanal makine PCI aygıtlarını çalışırken veya kaydedilmiş durumu olmadan "
"kapalıyken değiştirir" "kapalıyken değiştirir"
#: vrtManager/instance.py:2842 #: vrtManager/instance.py:2843
#, python-format #, python-format
msgid "%(err)s; whether the VM has PCI device %(address)s now is not known" msgid "%(err)s; whether the VM has PCI device %(address)s now is not known"
msgstr "" msgstr ""
"%(err)s; sanal makinede şu anda %(address)s PCI aygıtının olup olmadığı " "%(err)s; sanal makinede şu anda %(address)s PCI aygıtının olup olmadığı "
"bilinmiyor" "bilinmiyor"
#: vrtManager/instance.py:2844 #: vrtManager/instance.py:2845
#, python-format #, python-format
msgid "" msgid ""
"%(err)s; PCI device %(address)s: the VM is not running, its next start has it" "%(err)s; PCI device %(address)s: the VM is not running, its next start has it"
@ -9357,7 +9335,7 @@ msgstr ""
"%(err)s; PCI aygıtı %(address)s: sanal makine çalışmıyor, sonraki başlatmada " "%(err)s; PCI aygıtı %(address)s: sanal makine çalışmıyor, sonraki başlatmada "
"var" "var"
#: vrtManager/instance.py:2846 #: vrtManager/instance.py:2847
#, python-format #, python-format
msgid "" msgid ""
"%(err)s; PCI device %(address)s: the VM is not running, its next start does " "%(err)s; PCI device %(address)s: the VM is not running, its next start does "
@ -9366,7 +9344,7 @@ msgstr ""
"%(err)s; PCI aygıtı %(address)s: sanal makine çalışmıyor, sonraki başlatmada " "%(err)s; PCI aygıtı %(address)s: sanal makine çalışmıyor, sonraki başlatmada "
"yok" "yok"
#: vrtManager/instance.py:2847 #: vrtManager/instance.py:2848
#, python-format #, python-format
msgid "" msgid ""
"%(err)s; PCI device %(address)s: the running VM has it, its next start has it" "%(err)s; PCI device %(address)s: the running VM has it, its next start has it"
@ -9374,7 +9352,7 @@ msgstr ""
"%(err)s; PCI aygıtı %(address)s: çalışan sanal makinede var, sonraki " "%(err)s; PCI aygıtı %(address)s: çalışan sanal makinede var, sonraki "
"başlatmada var" "başlatmada var"
#: vrtManager/instance.py:2849 #: vrtManager/instance.py:2850
#, python-format #, python-format
msgid "" msgid ""
"%(err)s; PCI device %(address)s: the running VM has it, its next start does " "%(err)s; PCI device %(address)s: the running VM has it, its next start does "
@ -9383,7 +9361,7 @@ msgstr ""
"%(err)s; PCI aygıtı %(address)s: çalışan sanal makinede var, sonraki " "%(err)s; PCI aygıtı %(address)s: çalışan sanal makinede var, sonraki "
"başlatmada yok" "başlatmada yok"
#: vrtManager/instance.py:2851 #: vrtManager/instance.py:2852
#, python-format #, python-format
msgid "" msgid ""
"%(err)s; PCI device %(address)s: the running VM does not have it, its next " "%(err)s; PCI device %(address)s: the running VM does not have it, its next "
@ -9392,7 +9370,7 @@ msgstr ""
"%(err)s; PCI aygıtı %(address)s: çalışan sanal makinede yok, sonraki " "%(err)s; PCI aygıtı %(address)s: çalışan sanal makinede yok, sonraki "
"başlatmada var" "başlatmada var"
#: vrtManager/instance.py:2853 #: vrtManager/instance.py:2854
#, python-format #, python-format
msgid "" msgid ""
"%(err)s; PCI device %(address)s: the running VM does not have it, its next " "%(err)s; PCI device %(address)s: the running VM does not have it, its next "
@ -9401,29 +9379,29 @@ msgstr ""
"%(err)s; PCI aygıtı %(address)s: çalışan sanal makinede yok, sonraki " "%(err)s; PCI aygıtı %(address)s: çalışan sanal makinede yok, sonraki "
"başlatmada yok" "başlatmada yok"
#: vrtManager/instance.py:2887 #: vrtManager/instance.py:2888
#, python-format #, python-format
msgid "The VM has no PCI device %(address)s" msgid "The VM has no PCI device %(address)s"
msgstr "Sanal makinede %(address)s PCI aygıtı yok" msgstr "Sanal makinede %(address)s PCI aygıtı yok"
#: vrtManager/instance.py:2905 #: vrtManager/instance.py:2906
msgid "The VM has no USB controller" msgid "The VM has no USB controller"
msgstr "Sanal makinede USB denetleyicisi yok" msgstr "Sanal makinede USB denetleyicisi yok"
#: vrtManager/instance.py:2924 #: vrtManager/instance.py:2925
msgid "The VM has no such USB device" msgid "The VM has no such USB device"
msgstr "Sanal makinede böyle bir USB aygıtı yok" msgstr "Sanal makinede böyle bir USB aygıtı yok"
#: vrtManager/instance.py:2965 #: vrtManager/instance.py:2966
msgid "The VM has its own RNG device: change it in the XML editor" msgid "The VM has its own RNG device: change it in the XML editor"
msgstr "" msgstr ""
"Sanal makinenin kendi RNG aygıtı var: bunu XML düzenleyicide değiştirin" "Sanal makinenin kendi RNG aygıtı var: bunu XML düzenleyicide değiştirin"
#: vrtManager/instance.py:2992 #: vrtManager/instance.py:2993
msgid "The VM has its own TPM: change it in the XML editor" msgid "The VM has its own TPM: change it in the XML editor"
msgstr "Sanal makinenin kendi TPM'i var: bunu XML düzenleyicide değiştirin" msgstr "Sanal makinenin kendi TPM'i var: bunu XML düzenleyicide değiştirin"
#: vrtManager/instance.py:3011 #: vrtManager/instance.py:3012
#, python-format #, python-format
msgid "Unknown crash action %(action)s" msgid "Unknown crash action %(action)s"
msgstr "Bilinmeyen çökme eylemi %(action)s" msgstr "Bilinmeyen çökme eylemi %(action)s"

Binary file not shown.

View file

@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: \n" "Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-11-03 17:31+0000\n" "POT-Creation-Date: 2026-11-03 19:32+0000\n"
"PO-Revision-Date: \n" "PO-Revision-Date: \n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: \n" "Language-Team: \n"
@ -226,8 +226,6 @@ msgstr "添加虚拟机"
#: instances/templates/allinstances_index_nongrouped.html:8 #: instances/templates/allinstances_index_nongrouped.html:8
#: instances/templates/create_steps.html:6 #: instances/templates/create_steps.html:6
#: instances/templates/create_steps.html:8 #: instances/templates/create_steps.html:8
#: instances/templates/instances/resize_tab.html:35
#: instances/templates/instances/resize_tab.html:134
#: operations/templates/operations/jobs.html:24 #: operations/templates/operations/jobs.html:24
msgid "Host" msgid "Host"
msgstr "主机" msgstr "主机"
@ -692,7 +690,6 @@ msgstr "成员"
#: computes/templates/computes/form.html:46 #: computes/templates/computes/form.html:46
#: instances/templates/instances/edit_instance_volume.html:112 #: instances/templates/instances/edit_instance_volume.html:112
#: instances/templates/instances/nic_qos_form.html:23 #: instances/templates/instances/nic_qos_form.html:23
#: instances/templates/instances/resize_tab.html:114
#: instances/templates/instances/settings_tab.html:410 #: instances/templates/instances/settings_tab.html:410
#: instances/templates/instances/settings_tab.html:644 #: instances/templates/instances/settings_tab.html:644
#: instances/templates/instances/settings_tab.html:893 #: instances/templates/instances/settings_tab.html:893
@ -1602,6 +1599,7 @@ msgstr "新建虚拟机默认值"
#: appsettings/views.py:40 instances/templates/instance.html:64 #: appsettings/views.py:40 instances/templates/instance.html:64
#: instances/templates/instances/destroy_instance_form.html:32 #: instances/templates/instances/destroy_instance_form.html:32
#: instances/templates/instances/resize_tab.html:20
#: instances/templates/instances/settings_tab.html:197 #: instances/templates/instances/settings_tab.html:197
msgid "Disks" msgid "Disks"
msgstr "磁盘" msgstr "磁盘"
@ -2005,7 +2003,7 @@ msgstr "VCPU"
#: instances/templates/allinstances_index_nongrouped.html:15 #: instances/templates/allinstances_index_nongrouped.html:15
#: instances/templates/create_inst_block.html:33 #: instances/templates/create_inst_block.html:33
#: instances/templates/instance.html:60 #: instances/templates/instance.html:60
#: instances/templates/instances/resize_tab.html:15 #: instances/templates/instances/resize_tab.html:17
#: instances/templates/instances/stats_tab.html:34 #: instances/templates/instances/stats_tab.html:34
msgid "Memory" msgid "Memory"
msgstr "内存" msgstr "内存"
@ -2061,6 +2059,7 @@ msgstr "共 %(memory)s"
#: instances/forms.py:15 instances/templates/allinstances_index_grouped.html:16 #: instances/forms.py:15 instances/templates/allinstances_index_grouped.html:16
#: instances/templates/allinstances_index_nongrouped.html:14 #: instances/templates/allinstances_index_nongrouped.html:14
#: instances/templates/create_instance_w2.html:63 #: instances/templates/create_instance_w2.html:63
#: instances/templates/instances/resize_tab.html:29
#: instances/templates/instances/settings_tab.html:840 #: instances/templates/instances/settings_tab.html:840
msgid "vCPUs" msgid "vCPUs"
msgstr "vCPU" msgstr "vCPU"
@ -2621,7 +2620,7 @@ msgstr "虚拟机未定义;请检查这些卷,然后处理此任务:%(volu
msgid "Delete snapshot" msgid "Delete snapshot"
msgstr "删除快照" msgstr "删除快照"
#: instances/jobs.py:304 vrtManager/instance.py:2280 #: instances/jobs.py:304 vrtManager/instance.py:2281
#, python-format #, python-format
msgid "The VM has no external snapshot named %(name)s" msgid "The VM has no external snapshot named %(name)s"
msgstr "虚拟机没有名为 %(name)s 的外部快照" msgstr "虚拟机没有名为 %(name)s 的外部快照"
@ -2653,7 +2652,7 @@ msgstr "虚拟机已不在运行该任务的计算节点上"
msgid "Take snapshot" msgid "Take snapshot"
msgstr "创建快照" msgstr "创建快照"
#: instances/jobs.py:372 vrtManager/instance.py:1876 #: instances/jobs.py:372 vrtManager/instance.py:1877
#, python-format #, python-format
msgid "A snapshot named %(name)s already exists" msgid "A snapshot named %(name)s already exists"
msgstr "名为 %(name)s 的快照已存在" msgstr "名为 %(name)s 的快照已存在"
@ -2810,7 +2809,7 @@ msgstr "cloud-init 种子需要为磁盘使用目录类型的存储池"
msgid "This host offers no firmware %(firmware)s" msgid "This host offers no firmware %(firmware)s"
msgstr "此主机不提供固件 %(firmware)s" msgstr "此主机不提供固件 %(firmware)s"
#: instances/jobs.py:775 vrtManager/instance.py:2999 #: instances/jobs.py:775 vrtManager/instance.py:3000
msgid "This host offers no TPM 2.0: install swtpm on it" msgid "This host offers no TPM 2.0: install swtpm on it"
msgstr "此主机不提供 TPM 2.0:请在主机上安装 swtpm" msgstr "此主机不提供 TPM 2.0:请在主机上安装 swtpm"
@ -2922,67 +2921,66 @@ msgstr "创建时间"
msgid "drbd" msgid "drbd"
msgstr "drbd" msgstr "drbd"
#: instances/models.py:226 instances/templates/create_instance_w2.html:118 #: instances/models.py:237 instances/templates/create_instance_w2.html:118
#: instances/templates/instances/resize_tab.html:20
#: instances/templates/instances/settings_tab.html:25 #: instances/templates/instances/settings_tab.html:25
#: instances/templates/instances/stats_tab.html:51 #: instances/templates/instances/stats_tab.html:51
msgid "Disk" msgid "Disk"
msgstr "磁盘" msgstr "磁盘"
#: instances/models.py:228 instances/templates/create_instance_w2.html:312 #: instances/models.py:239 instances/templates/create_instance_w2.html:312
#: instances/templates/instances/settings_tab.html:159 #: instances/templates/instances/settings_tab.html:159
msgid "CD-ROM" msgid "CD-ROM"
msgstr "CD-ROM" msgstr "CD-ROM"
#: instances/models.py:230 #: instances/models.py:241
msgid "NIC" msgid "NIC"
msgstr "网卡" msgstr "网卡"
#: instances/models.py:403 #: instances/models.py:414
msgid "Live" msgid "Live"
msgstr "在线" msgstr "在线"
#: instances/models.py:404 #: instances/models.py:415
msgid "Offline" msgid "Offline"
msgstr "离线" msgstr "离线"
#: instances/models.py:405 #: instances/models.py:416
msgid "Auto Converge" msgid "Auto Converge"
msgstr "自动收敛" msgstr "自动收敛"
#: instances/models.py:406 #: instances/models.py:417
msgid "Compress" msgid "Compress"
msgstr "压缩" msgstr "压缩"
#: instances/models.py:407 #: instances/models.py:418
msgid "Unsafe" msgid "Unsafe"
msgstr "不安全" msgstr "不安全"
#: instances/models.py:419 #: instances/models.py:430
msgid "No Virtual Machine name has been entered" msgid "No Virtual Machine name has been entered"
msgstr "未输入虚拟机名称" msgstr "未输入虚拟机名称"
#: instances/models.py:425 #: instances/models.py:436
msgid "No VCPU has been entered" msgid "No VCPU has been entered"
msgstr "未输入 vCPU" msgstr "未输入 vCPU"
#: instances/models.py:431 #: instances/models.py:442
msgid "No RAM size has been entered" msgid "No RAM size has been entered"
msgstr "未输入内存大小" msgstr "未输入内存大小"
#: instances/models.py:435 #: instances/models.py:446
msgid "No Network pool has been choosen" msgid "No Network pool has been choosen"
msgstr "未选择网络池" msgstr "未选择网络池"
#: instances/models.py:443 #: instances/models.py:454
msgid "Please select HDD cache mode" msgid "Please select HDD cache mode"
msgstr "请选择硬盘缓存模式" msgstr "请选择硬盘缓存模式"
#: instances/models.py:455 #: instances/models.py:466
msgid "Please select a video driver" msgid "Please select a video driver"
msgstr "请选择显卡驱动" msgstr "请选择显卡驱动"
#: instances/models.py:492 #: instances/models.py:503
msgid "Can access console without password" msgid "Can access console without password"
msgstr "可无密码访问控制台" msgstr "可无密码访问控制台"
@ -3372,7 +3370,7 @@ msgstr "选择运行虚拟机的主机。"
#: instances/templates/create_inst_block.html:23 #: instances/templates/create_inst_block.html:23
#: instances/templates/instance.html:56 #: instances/templates/instance.html:56
#: instances/templates/instances/resize_tab.html:10 #: instances/templates/instances/resize_tab.html:14
#: instances/templates/instances/stats_tab.html:27 #: instances/templates/instances/stats_tab.html:27
msgid "CPU" msgid "CPU"
msgstr "CPU" msgstr "CPU"
@ -4310,163 +4308,135 @@ msgstr "强制关闭"
msgid "Power Cycle" msgid "Power Cycle"
msgstr "电源重置" msgstr "电源重置"
#: instances/templates/instances/resize_tab.html:33 #: instances/templates/instances/resize_tab.html:8
msgid "CPU allocation" msgid "You don't have permission for resizing instance"
msgstr "CPU 分配" msgstr "您没有调整虚拟机配置的权限"
#: instances/templates/instances/resize_tab.html:34 #: instances/templates/instances/resize_tab.html:12
#, python-format msgid "Resources to resize"
msgid "Now %(cur)s of %(max)s vCPUs." msgstr "可调整的资源"
msgstr "当前 %(cur)s / %(max)s 个 vCPU。"
#: instances/templates/instances/resize_tab.html:35 #: instances/templates/instances/resize_tab.html:35
msgid "on, turn off"
msgstr "已开启,点击关闭"
#: instances/templates/instances/resize_tab.html:37
msgid "off, turn on"
msgstr "已关闭,点击开启"
#: instances/templates/instances/resize_tab.html:41
msgid "on"
msgstr "已开启"
#: instances/templates/instances/resize_tab.html:41
msgid "off"
msgstr "已关闭"
#: instances/templates/instances/resize_tab.html:45
#, python-format #, python-format
msgid "%(count)s logical CPUs" msgid "%(cur)s on, up to %(max)s"
msgstr "%(count)s 个逻辑 CPU" msgstr "已开启 %(cur)s 个,最多 %(max)s 个"
#: instances/templates/instances/resize_tab.html:39 #: instances/templates/instances/resize_tab.html:46
#: instances/templates/instances/resize_tab.html:138 #, python-format
msgid "The VM gets these at its next start." msgid "Host: %(count)s logical CPUs"
msgstr "虚拟机会在下次启动时获得这些设置。" msgstr "主机:%(count)s 个逻辑 CPU"
#: instances/templates/instances/resize_tab.html:40 #: instances/templates/instances/resize_tab.html:49
msgid "Shut the VM down to change its vCPUs." msgid "Click a vCPU to turn it on or off now; the next start keeps it so."
msgstr "请将虚拟机关机后再更改其 vCPU。" msgstr "点击某个 vCPU 可立即开启或关闭它;下次启动时保持该状态。"
#: instances/templates/instances/resize_tab.html:40 #: instances/templates/instances/resize_tab.html:49
msgid "While it runs, turn vCPUs on and off below."
msgstr "运行期间,可在下方开启或关闭 vCPU。"
#: instances/templates/instances/resize_tab.html:44
msgid "Current vCPUs"
msgstr "当前 vCPU"
#: instances/templates/instances/resize_tab.html:52
msgid "Maximum vCPUs"
msgstr "最大 vCPU"
#: instances/templates/instances/resize_tab.html:61
msgid "Resize CPU"
msgstr "调整 CPU"
#: instances/templates/instances/resize_tab.html:70
msgid "Live vCPUs"
msgstr "在线 vCPU"
#: instances/templates/instances/resize_tab.html:72
msgid "Turn a vCPU on or off now; the next start keeps it so. vCPU 0 stays on."
msgstr "立即开启或关闭某个 vCPU;下次启动时保持该状态。vCPU 0 始终开启。"
#: instances/templates/instances/resize_tab.html:73
msgid "A paused VM cannot let one go: resume it to turn vCPUs off." msgid "A paused VM cannot let one go: resume it to turn vCPUs off."
msgstr "已暂停的虚拟机无法释放 vCPU:请先恢复它再关闭 vCPU。" msgstr "已暂停的虚拟机无法释放 vCPU:请先恢复它再关闭 vCPU。"
#: instances/templates/instances/resize_tab.html:82 #: instances/templates/instances/resize_tab.html:54
#, python-format msgid "Current"
msgid "%(id)s · Fixed" msgstr "当前"
msgstr "%(id)s · 固定"
#: instances/templates/instances/resize_tab.html:84 #: instances/templates/instances/resize_tab.html:60
#, python-format msgid "Maximum"
msgid "%(id)s · On" msgstr "最大"
msgstr "%(id)s · 开启"
#: instances/templates/instances/resize_tab.html:84 #: instances/templates/instances/resize_tab.html:66
msgid "turn off" msgid "Resize CPU"
msgstr "关闭" msgstr "调整 CPU"
#: instances/templates/instances/resize_tab.html:86 #: instances/templates/instances/resize_tab.html:69
#, python-format #: instances/templates/instances/resize_tab.html:101
msgid "%(id)s · Off" msgid "The VM gets these at its next start."
msgstr "%(id)s · 关闭" msgstr "虚拟机会在下次启动时获得这些设置。"
#: instances/templates/instances/resize_tab.html:86 #: instances/templates/instances/resize_tab.html:69
msgid "turn on" msgid "Shut the VM down to change its vCPUs."
msgstr "开启" msgstr "请将虚拟机关机后再更改其 vCPU。"
#: instances/templates/instances/resize_tab.html:99 #: instances/templates/instances/resize_tab.html:75
msgid "vCPU hot plug" msgid "vCPU hot plug"
msgstr "vCPU 热插拔" msgstr "vCPU 热插拔"
#: instances/templates/instances/resize_tab.html:101 #: instances/templates/instances/resize_tab.html:77
msgid "Lets vCPUs up to the maximum be turned on and off while the VM runs." msgid "Lets vCPUs up to the maximum be turned on and off while the VM runs."
msgstr "允许在虚拟机运行时开启或关闭不超过最大数量的 vCPU。" msgstr "允许在虚拟机运行时开启或关闭不超过最大数量的 vCPU。"
#: instances/templates/instances/resize_tab.html:102 #: instances/templates/instances/resize_tab.html:77
#: instances/templates/instances/settings_tab.html:913 #: instances/templates/instances/settings_tab.html:913
msgid "Shut the VM down to change this." msgid "Shut the VM down to change this."
msgstr "请先关闭虚拟机再修改此项。" msgstr "请先关闭虚拟机再修改此项。"
#: instances/templates/instances/resize_tab.html:109 #: instances/templates/instances/resize_tab.html:84
#: instances/templates/instances/settings_tab.html:1020
msgid "Enabled"
msgstr "已启用"
#: instances/templates/instances/resize_tab.html:110
#: instances/templates/instances/settings_tab.html:1021
msgid "Disabled"
msgstr "已禁用"
#: instances/templates/instances/resize_tab.html:123
#: instances/templates/instances/resize_tab.html:160
#: instances/templates/instances/resize_tab.html:201
msgid "You don't have permission for resizing instance"
msgstr "您没有调整虚拟机配置的权限"
#: instances/templates/instances/resize_tab.html:132
msgid "Memory allocation"
msgstr "内存分配"
#: instances/templates/instances/resize_tab.html:133
#, python-format #, python-format
msgid "Now %(cur)s MiB of maximum %(max)s MiB." msgid "%(cur)s MiB of %(max)s MiB"
msgstr "当前 %(cur)s MiB,最大 %(max)s MiB。" msgstr "%(cur)s MiB / %(max)s MiB"
#: instances/templates/instances/resize_tab.html:134 #: instances/templates/instances/resize_tab.html:85
#, python-format #, python-format
msgid "%(total)s memory" msgid "Host: %(total)s"
msgstr "%(total)s 内存" msgstr "主机:%(total)s"
#: instances/templates/instances/resize_tab.html:139 #: instances/templates/instances/resize_tab.html:89
msgid "Current (MiB)"
msgstr "当前(MiB)"
#: instances/templates/instances/resize_tab.html:93
msgid "Maximum (MiB)"
msgstr "最大(MiB)"
#: instances/templates/instances/resize_tab.html:98
msgid "Resize memory"
msgstr "调整内存"
#: instances/templates/instances/resize_tab.html:101
msgid "" msgid ""
"The current memory changes now, up to the maximum; shut the VM down to change" "The current memory changes now, up to the maximum; shut the VM down to change"
" the maximum." " the maximum."
msgstr "当前内存可立即调整,但不能超过最大值;修改最大值需先关闭虚拟机。" msgstr "当前内存可立即调整,但不能超过最大值;修改最大值需先关闭虚拟机。"
#: instances/templates/instances/resize_tab.html:143 #: instances/templates/instances/resize_tab.html:104
msgid "Current memory (MiB)"
msgstr "当前内存(MiB)"
#: instances/templates/instances/resize_tab.html:147
msgid "Maximum memory (MiB)"
msgstr "最大内存(MiB)"
#: instances/templates/instances/resize_tab.html:153
msgid "Resize memory"
msgstr "调整内存"
#: instances/templates/instances/resize_tab.html:169
#: instances/templates/instances/resize_tab.html:191
#: instances/templates/instances/resize_tab.html:193
msgid "Grow disks"
msgstr "扩容磁盘"
#: instances/templates/instances/resize_tab.html:170
msgid "" msgid ""
"A new size in GiB, larger than the disk's; empty keeps a disk as it is. Disks" "A new size in GiB, larger than the disk's; empty keeps a disk as it is. Disks"
" grow while the VM runs; the guest then grows its partition and file system." " grow while the VM runs; the guest then grows its partition and file system."
msgstr "新大小(GiB),须大于磁盘当前大小;留空则保持不变。磁盘可在虚拟机运行时扩容,之后由客户机扩展其分区和文件系统。" msgstr "新大小(GiB),须大于磁盘当前大小;留空则保持不变。磁盘可在虚拟机运行时扩容,之后由客户机扩展其分区和文件系统。"
#: instances/templates/instances/resize_tab.html:178 #: instances/templates/instances/resize_tab.html:110
#: instances/templates/instances/settings_tab.html:211 #: instances/templates/instances/settings_tab.html:211
msgid "Error getting disk info" msgid "Error getting disk info"
msgstr "获取磁盘信息出错" msgstr "获取磁盘信息出错"
#: instances/templates/instances/resize_tab.html:180 #: instances/templates/instances/resize_tab.html:112
#, python-format #, python-format
msgid "Now %(size)s" msgid "Now %(size)s"
msgstr "当前 %(size)s" msgstr "当前 %(size)s"
#: instances/templates/instances/resize_tab.html:115
msgid "New size"
msgstr "新大小"
#: instances/templates/instances/resize_tab.html:124
#: instances/templates/instances/resize_tab.html:126
msgid "Grow disks"
msgstr "扩容磁盘"
#: instances/templates/instances/settings_tab.html:20 #: instances/templates/instances/settings_tab.html:20
msgid "Boot" msgid "Boot"
msgstr "启动" msgstr "启动"
@ -5255,6 +5225,14 @@ msgstr "虚拟机未运行"
msgid "No channel" msgid "No channel"
msgstr "无通道" msgstr "无通道"
#: instances/templates/instances/settings_tab.html:1020
msgid "Enabled"
msgstr "已启用"
#: instances/templates/instances/settings_tab.html:1021
msgid "Disabled"
msgstr "已禁用"
#: instances/templates/instances/snapshots_tab.html:11 #: instances/templates/instances/snapshots_tab.html:11
msgid "Snapshots" msgid "Snapshots"
msgstr "快照" msgstr "快照"
@ -8538,116 +8516,116 @@ msgid ""
"with '.'" "with '.'"
msgstr "快照名称为 1-64 个字母、数字、'.'、'_' 或 '-',且不能以 '.' 开头" msgstr "快照名称为 1-64 个字母、数字、'.'、'_' 或 '-',且不能以 '.' 开头"
#: vrtManager/instance.py:1076 #: vrtManager/instance.py:1077
msgid "" msgid ""
"A device other than a disk or NIC is in the boot order: change it in the XML " "A device other than a disk or NIC is in the boot order: change it in the XML "
"editor" "editor"
msgstr "启动顺序中有磁盘或网卡以外的设备:请在 XML 编辑器中修改" msgstr "启动顺序中有磁盘或网卡以外的设备:请在 XML 编辑器中修改"
#: vrtManager/instance.py:1088 #: vrtManager/instance.py:1089
msgid "Invalid Device Type for boot order" msgid "Invalid Device Type for boot order"
msgstr "启动顺序的设备类型无效" msgstr "启动顺序的设备类型无效"
#: vrtManager/instance.py:1091 #: vrtManager/instance.py:1092
#, python-format #, python-format
msgid "Boot device %(dev)s is not in the definition" msgid "Boot device %(dev)s is not in the definition"
msgstr "启动设备 %(dev)s 不在定义中" msgstr "启动设备 %(dev)s 不在定义中"
#: vrtManager/instance.py:1111 #: vrtManager/instance.py:1112
#, python-format #, python-format
msgid "CD-ROM %(dev)s is not in the running definition" msgid "CD-ROM %(dev)s is not in the running definition"
msgstr "CD-ROM %(dev)s 不在运行中的定义中" msgstr "CD-ROM %(dev)s 不在运行中的定义中"
#: vrtManager/instance.py:1112 #: vrtManager/instance.py:1113
#, python-format #, python-format
msgid "CD-ROM %(dev)s is not in the persistent definition" msgid "CD-ROM %(dev)s is not in the persistent definition"
msgstr "CD-ROM %(dev)s 不在持久定义中" msgstr "CD-ROM %(dev)s 不在持久定义中"
#: vrtManager/instance.py:1124 #: vrtManager/instance.py:1125
#, python-format #, python-format
msgid "Media of %(dev)s changed in the running VM only: %(err)s" msgid "Media of %(dev)s changed in the running VM only: %(err)s"
msgstr "%(dev)s 的介质仅在运行中的虚拟机中更改:%(err)s" msgstr "%(dev)s 的介质仅在运行中的虚拟机中更改:%(err)s"
#: vrtManager/instance.py:1135 #: vrtManager/instance.py:1136
#, python-format #, python-format
msgid "ISO image %(image)s was not found" msgid "ISO image %(image)s was not found"
msgstr "未找到 ISO 镜像 %(image)s" msgstr "未找到 ISO 镜像 %(image)s"
#: vrtManager/instance.py:1137 #: vrtManager/instance.py:1138
#, python-format #, python-format
msgid "ISO image %(image)s is in more than one storage pool" msgid "ISO image %(image)s is in more than one storage pool"
msgstr "ISO 镜像 %(image)s 位于多个存储池中" msgstr "ISO 镜像 %(image)s 位于多个存储池中"
#: vrtManager/instance.py:1244 #: vrtManager/instance.py:1245
#, python-format #, python-format
msgid "Disk %(target_dev)s is not in the VM's definition" msgid "Disk %(target_dev)s is not in the VM's definition"
msgstr "磁盘 %(target_dev)s 不在虚拟机的定义中" msgstr "磁盘 %(target_dev)s 不在虚拟机的定义中"
#: vrtManager/instance.py:1372 #: vrtManager/instance.py:1373
msgid "Please shutdown the instance then try to enable vCPU hotplug" msgid "Please shutdown the instance then try to enable vCPU hotplug"
msgstr "请先关闭虚拟机,再启用 vCPU 热插拔" msgstr "请先关闭虚拟机,再启用 vCPU 热插拔"
#: vrtManager/instance.py:1835 #: vrtManager/instance.py:1836
msgid "" msgid ""
"The VM has external snapshots; internal snapshots cannot be mixed with them" "The VM has external snapshots; internal snapshots cannot be mixed with them"
msgstr "虚拟机有外部快照;内部快照不能与其混用" msgstr "虚拟机有外部快照;内部快照不能与其混用"
#: vrtManager/instance.py:1867 #: vrtManager/instance.py:1868
msgid "A snapshot with memory is not quiesced; it keeps the whole guest state" msgid "A snapshot with memory is not quiesced; it keeps the whole guest state"
msgstr "含内存的快照不会静默文件系统;它保存整个客户机状态" msgstr "含内存的快照不会静默文件系统;它保存整个客户机状态"
#: vrtManager/instance.py:1869 #: vrtManager/instance.py:1870
msgid "Only a running VM's file systems can be frozen" msgid "Only a running VM's file systems can be frozen"
msgstr "只有运行中的虚拟机的文件系统可以冻结" msgstr "只有运行中的虚拟机的文件系统可以冻结"
#: vrtManager/instance.py:1871 #: vrtManager/instance.py:1872
msgid "The QEMU guest agent is not connected; it freezes the file systems" msgid "The QEMU guest agent is not connected; it freezes the file systems"
msgstr "QEMU 客户机代理未连接;文件系统由它冻结" msgstr "QEMU 客户机代理未连接;文件系统由它冻结"
#: vrtManager/instance.py:1874 #: vrtManager/instance.py:1875
msgid "" msgid ""
"The VM has internal snapshots; external snapshots cannot be mixed with them" "The VM has internal snapshots; external snapshots cannot be mixed with them"
msgstr "虚拟机有内部快照;外部快照不能与其混用" msgstr "虚拟机有内部快照;外部快照不能与其混用"
#: vrtManager/instance.py:1879 #: vrtManager/instance.py:1880
msgid "Newer snapshots exist after the last revert; delete them first" msgid "Newer snapshots exist after the last revert; delete them first"
msgstr "上次还原后存在更新的快照;请先删除它们" msgstr "上次还原后存在更新的快照;请先删除它们"
#: vrtManager/instance.py:1882 #: vrtManager/instance.py:1883
msgid "No snapshot is current; revert to a snapshot first" msgid "No snapshot is current; revert to a snapshot first"
msgstr "没有当前快照;请先还原到某个快照" msgstr "没有当前快照;请先还原到某个快照"
#: vrtManager/instance.py:1888 #: vrtManager/instance.py:1889
#, python-format #, python-format
msgid "Eject the media from %(dev)s first" msgid "Eject the media from %(dev)s first"
msgstr "请先弹出 %(dev)s 中的介质" msgstr "请先弹出 %(dev)s 中的介质"
#: vrtManager/instance.py:1890 #: vrtManager/instance.py:1891
#, python-format #, python-format
msgid "Disk %(dev)s is not a file; external snapshots need file disks" msgid "Disk %(dev)s is not a file; external snapshots need file disks"
msgstr "磁盘 %(dev)s 不是文件;外部快照需要文件磁盘" msgstr "磁盘 %(dev)s 不是文件;外部快照需要文件磁盘"
#: vrtManager/instance.py:1898 #: vrtManager/instance.py:1899
#, python-format #, python-format
msgid "" msgid ""
"The storage pools could not be refreshed, so their free space is unknown: " "The storage pools could not be refreshed, so their free space is unknown: "
"%(err)s" "%(err)s"
msgstr "无法刷新存储池,其可用空间未知:%(err)s" msgstr "无法刷新存储池,其可用空间未知:%(err)s"
#: vrtManager/instance.py:1919 #: vrtManager/instance.py:1920
msgid "Memory is saved only from a running VM" msgid "Memory is saved only from a running VM"
msgstr "只能保存运行中的虚拟机的内存" msgstr "只能保存运行中的虚拟机的内存"
#: vrtManager/instance.py:1921 #: vrtManager/instance.py:1922
msgid "The VM has no disk to keep its memory next to" msgid "The VM has no disk to keep its memory next to"
msgstr "虚拟机没有可存放其内存的磁盘" msgstr "虚拟机没有可存放其内存的磁盘"
#: vrtManager/instance.py:1925 #: vrtManager/instance.py:1926
#, python-format #, python-format
msgid "%(disk)s is not in a storage pool; memory is saved only into one" msgid "%(disk)s is not in a storage pool; memory is saved only into one"
msgstr "%(disk)s 不在存储池中;内存只能保存到存储池中" msgstr "%(disk)s 不在存储池中;内存只能保存到存储池中"
#: vrtManager/instance.py:1956 #: vrtManager/instance.py:1957
#, python-format #, python-format
msgid "" msgid ""
"Storage pool %(pool)s has %(free).1f GiB free; the snapshot needs %(size).1f " "Storage pool %(pool)s has %(free).1f GiB free; the snapshot needs %(size).1f "
@ -8657,156 +8635,156 @@ msgstr ""
"存储池 %(pool)s 可用 %(free).1f GiB;快照需要 %(size).1f GiB(其中虚拟机磁盘的 %(percent)g%%,至少 " "存储池 %(pool)s 可用 %(free).1f GiB;快照需要 %(size).1f GiB(其中虚拟机磁盘的 %(percent)g%%,至少 "
"%(minimum)g GiB,若保存内存则另加内存)" "%(minimum)g GiB,若保存内存则另加内存)"
#: vrtManager/instance.py:1974 #: vrtManager/instance.py:1975
msgid "" msgid ""
"This snapshot was taken by an older version on a UEFI VM and cannot be " "This snapshot was taken by an older version on a UEFI VM and cannot be "
"reverted; delete it instead" "reverted; delete it instead"
msgstr "此快照由旧版本在 UEFI 虚拟机上创建,无法还原;请将其删除" msgstr "此快照由旧版本在 UEFI 虚拟机上创建,无法还原;请将其删除"
#: vrtManager/instance.py:2004 #: vrtManager/instance.py:2005
#, python-format #, python-format
msgid "" msgid ""
"The revert failed twice; try again in a moment (%(error)s). The VM is " "The revert failed twice; try again in a moment (%(error)s). The VM is "
"running." "running."
msgstr "还原两次失败;请稍后重试(%(error)s)。虚拟机正在运行。" msgstr "还原两次失败;请稍后重试(%(error)s)。虚拟机正在运行。"
#: vrtManager/instance.py:2006 #: vrtManager/instance.py:2007
#, python-format #, python-format
msgid "" msgid ""
"The revert failed twice; try again in a moment (%(error)s). The VM is shut " "The revert failed twice; try again in a moment (%(error)s). The VM is shut "
"off." "off."
msgstr "还原两次失败;请稍后重试(%(error)s)。虚拟机已关机。" msgstr "还原两次失败;请稍后重试(%(error)s)。虚拟机已关机。"
#: vrtManager/instance.py:2169 #: vrtManager/instance.py:2170
msgid "A disk moves when its VM is defined and running, paused or shut off" msgid "A disk moves when its VM is defined and running, paused or shut off"
msgstr "仅当虚拟机已定义且处于运行、暂停或关机状态时才能移动磁盘" msgstr "仅当虚拟机已定义且处于运行、暂停或关机状态时才能移动磁盘"
#: vrtManager/instance.py:2171 #: vrtManager/instance.py:2172
msgid "" msgid ""
"A disk of a VM with snapshots, a saved state or a running block job does not " "A disk of a VM with snapshots, a saved state or a running block job does not "
"move" "move"
msgstr "有快照、保存的状态或正在运行块任务的虚拟机的磁盘不能移动" msgstr "有快照、保存的状态或正在运行块任务的虚拟机的磁盘不能移动"
#: vrtManager/instance.py:2179 #: vrtManager/instance.py:2180
#, python-format #, python-format
msgid "" msgid ""
"%(dev)s is not a disk file of the VM, the same in its running and next " "%(dev)s is not a disk file of the VM, the same in its running and next "
"start's definition" "start's definition"
msgstr "%(dev)s 不是该虚拟机在运行中的定义和下次启动定义中相同的磁盘文件" msgstr "%(dev)s 不是该虚拟机在运行中的定义和下次启动定义中相同的磁盘文件"
#: vrtManager/instance.py:2184 #: vrtManager/instance.py:2185
#, python-format #, python-format
msgid "%(dev)s does not move: only writable raw and qcow2 disks do" msgid "%(dev)s does not move: only writable raw and qcow2 disks do"
msgstr "%(dev)s 不能移动:只能移动可写的 raw 和 qcow2 磁盘" msgstr "%(dev)s 不能移动:只能移动可写的 raw 和 qcow2 磁盘"
#: vrtManager/instance.py:2191 #: vrtManager/instance.py:2192
#, python-format #, python-format
msgid "%(dev)s does not move: no storage pool has %(path)s" msgid "%(dev)s does not move: no storage pool has %(path)s"
msgstr "%(dev)s 不能移动:没有存储池包含 %(path)s" msgstr "%(dev)s 不能移动:没有存储池包含 %(path)s"
#: vrtManager/instance.py:2193 #: vrtManager/instance.py:2194
#, python-format #, python-format
msgid "%(dev)s does not move: it has a backing file" msgid "%(dev)s does not move: it has a backing file"
msgstr "%(dev)s 不能移动:它有后备文件" msgstr "%(dev)s 不能移动:它有后备文件"
#: vrtManager/instance.py:2196 #: vrtManager/instance.py:2197
#, python-format #, python-format
msgid "%(pool_name)s is not an active pool of disk files of this host" msgid "%(pool_name)s is not an active pool of disk files of this host"
msgstr "%(pool_name)s 不是此主机上活动的磁盘文件存储池" msgstr "%(pool_name)s 不是此主机上活动的磁盘文件存储池"
#: vrtManager/instance.py:2199 #: vrtManager/instance.py:2200
#, python-format #, python-format
msgid "%(dev)s is in pool %(pool_name)s already" msgid "%(dev)s is in pool %(pool_name)s already"
msgstr "%(dev)s 已在存储池 %(pool_name)s 中" msgstr "%(dev)s 已在存储池 %(pool_name)s 中"
#: vrtManager/instance.py:2203 #: vrtManager/instance.py:2204
#, python-format #, python-format
msgid "Pool %(pool_name)s already has a file %(name)s" msgid "Pool %(pool_name)s already has a file %(name)s"
msgstr "存储池 %(pool_name)s 中已有文件 %(name)s" msgstr "存储池 %(pool_name)s 中已有文件 %(name)s"
#: vrtManager/instance.py:2227 #: vrtManager/instance.py:2228
#, python-format #, python-format
msgid "The copy of %(dev)s ended before it was complete" msgid "The copy of %(dev)s ended before it was complete"
msgstr "%(dev)s 的复制在完成前结束" msgstr "%(dev)s 的复制在完成前结束"
#: vrtManager/instance.py:2272 #: vrtManager/instance.py:2273
#, python-format #, python-format
msgid "%(error)s; remove %(dest)s if it is there: %(cleanup_error)s" msgid "%(error)s; remove %(dest)s if it is there: %(cleanup_error)s"
msgstr "%(error)s;如果 %(dest)s 存在请将其删除:%(cleanup_error)s" msgstr "%(error)s;如果 %(dest)s 存在请将其删除:%(cleanup_error)s"
#: vrtManager/instance.py:2274 #: vrtManager/instance.py:2275
#, python-format #, python-format
msgid "%(error)s; the VM may use %(dest)s now: check its disk %(dev)s" msgid "%(error)s; the VM may use %(dest)s now: check its disk %(dev)s"
msgstr "%(error)s;虚拟机现在可能在使用 %(dest)s:请检查其磁盘 %(dev)s" msgstr "%(error)s;虚拟机现在可能在使用 %(dest)s:请检查其磁盘 %(dev)s"
#: vrtManager/instance.py:2281 #: vrtManager/instance.py:2282
#, python-format #, python-format
msgid "The VM has no internal snapshot named %(name)s" msgid "The VM has no internal snapshot named %(name)s"
msgstr "虚拟机没有名为 %(name)s 的内部快照" msgstr "虚拟机没有名为 %(name)s 的内部快照"
#: vrtManager/instance.py:2290 #: vrtManager/instance.py:2291
msgid "The VM has a saved state; start it or remove the saved state first" msgid "The VM has a saved state; start it or remove the saved state first"
msgstr "虚拟机有保存的状态;请先启动它或删除保存的状态" msgstr "虚拟机有保存的状态;请先启动它或删除保存的状态"
#: vrtManager/instance.py:2292 #: vrtManager/instance.py:2293
msgid "A snapshot job is still running on this VM; try again when it ends" msgid "A snapshot job is still running on this VM; try again when it ends"
msgstr "此虚拟机上仍有快照任务在运行;请在其结束后重试" msgstr "此虚拟机上仍有快照任务在运行;请在其结束后重试"
#: vrtManager/instance.py:2302 #: vrtManager/instance.py:2303
msgid "Shut the VM down to revert to an internal snapshot" msgid "Shut the VM down to revert to an internal snapshot"
msgstr "请关闭虚拟机后再还原到内部快照" msgstr "请关闭虚拟机后再还原到内部快照"
#: vrtManager/instance.py:2391 #: vrtManager/instance.py:2392
msgid "Cannot clone a VM whose NVRAM is not a file" msgid "Cannot clone a VM whose NVRAM is not a file"
msgstr "NVRAM 不是文件的虚拟机无法克隆" msgstr "NVRAM 不是文件的虚拟机无法克隆"
#: vrtManager/instance.py:2459 #: vrtManager/instance.py:2460
#, python-format #, python-format
msgid "Clone failed (%(err)s); remove these copies by hand: %(path)s" msgid "Clone failed (%(err)s); remove these copies by hand: %(path)s"
msgstr "克隆失败(%(err)s);请手动删除这些副本:%(path)s" msgstr "克隆失败(%(err)s);请手动删除这些副本:%(path)s"
#: vrtManager/instance.py:2469 #: vrtManager/instance.py:2470
msgid "Shut the VM down before cloning it" msgid "Shut the VM down before cloning it"
msgstr "请先关闭虚拟机再克隆" msgstr "请先关闭虚拟机再克隆"
#: vrtManager/instance.py:2523 #: vrtManager/instance.py:2524
#, python-format #, python-format
msgid "Clone failed (%(err)s); remove these copies by hand: %(leftovers)s" msgid "Clone failed (%(err)s); remove these copies by hand: %(leftovers)s"
msgstr "克隆失败(%(err)s);请手动删除这些副本:%(leftovers)s" msgstr "克隆失败(%(err)s);请手动删除这些副本:%(leftovers)s"
#: vrtManager/instance.py:2534 #: vrtManager/instance.py:2535
msgid "Live clone needs libvirt 11.10 or later; shut the VM down to clone it" msgid "Live clone needs libvirt 11.10 or later; shut the VM down to clone it"
msgstr "在线克隆需要 libvirt 11.10 或更高版本;请关闭虚拟机后再克隆" msgstr "在线克隆需要 libvirt 11.10 或更高版本;请关闭虚拟机后再克隆"
#: vrtManager/instance.py:2537 #: vrtManager/instance.py:2538
msgid "A VM with a TPM is cloned only shut down" msgid "A VM with a TPM is cloned only shut down"
msgstr "带 TPM 的虚拟机只能在关机时克隆" msgstr "带 TPM 的虚拟机只能在关机时克隆"
#: vrtManager/instance.py:2540 #: vrtManager/instance.py:2541
#, python-format #, python-format
msgid "Disk %(dev)s is not a local file; shut the VM down to clone it" msgid "Disk %(dev)s is not a local file; shut the VM down to clone it"
msgstr "磁盘 %(dev)s 不是本地文件;请关闭虚拟机后再克隆" msgstr "磁盘 %(dev)s 不是本地文件;请关闭虚拟机后再克隆"
#: vrtManager/instance.py:2542 #: vrtManager/instance.py:2543
#, python-format #, python-format
msgid "Disk %(dev)s is shareable; shut the VM down to clone it" msgid "Disk %(dev)s is shareable; shut the VM down to clone it"
msgstr "磁盘 %(dev)s 是可共享的;请关闭虚拟机后再克隆" msgstr "磁盘 %(dev)s 是可共享的;请关闭虚拟机后再克隆"
#: vrtManager/instance.py:2547 #: vrtManager/instance.py:2548
#, python-format #, python-format
msgid "Disk %(dev)s changes at the next start; shut the VM down to clone it" msgid "Disk %(dev)s changes at the next start; shut the VM down to clone it"
msgstr "磁盘 %(dev)s 在下次启动时会改变;请关闭虚拟机后再克隆" msgstr "磁盘 %(dev)s 在下次启动时会改变;请关闭虚拟机后再克隆"
#: vrtManager/instance.py:2549 #: vrtManager/instance.py:2550
msgid "Another job is running on the VM; clone it when that ends" msgid "Another job is running on the VM; clone it when that ends"
msgstr "虚拟机上有另一个任务正在运行;请在其结束后再克隆" msgstr "虚拟机上有另一个任务正在运行;请在其结束后再克隆"
#: vrtManager/instance.py:2562 #: vrtManager/instance.py:2563
#, python-format #, python-format
msgid "Volume %(name)s already exists in storage pool %(pool)s" msgid "Volume %(name)s already exists in storage pool %(pool)s"
msgstr "卷 %(name)s 已存在于存储池 %(pool)s 中" msgstr "卷 %(name)s 已存在于存储池 %(pool)s 中"
#: vrtManager/instance.py:2581 #: vrtManager/instance.py:2582
#, python-format #, python-format
msgid "" msgid ""
"Storage pool %(pool)s has %(free).1f GiB free; the clone needs %(size).1f GiB" "Storage pool %(pool)s has %(free).1f GiB free; the clone needs %(size).1f GiB"
@ -8815,92 +8793,92 @@ msgstr ""
"存储池 %(pool)s 可用 %(free).1f GiB;克隆需要 %(size).1f GiB(复制的磁盘,再加其 %(percent)g%%,至少" "存储池 %(pool)s 可用 %(free).1f GiB;克隆需要 %(size).1f GiB(复制的磁盘,再加其 %(percent)g%%,至少"
" %(minimum)g GiB)" " %(minimum)g GiB)"
#: vrtManager/instance.py:2720 #: vrtManager/instance.py:2721
msgid "A network interface that is a host device is removed in the XML editor" msgid "A network interface that is a host device is removed in the XML editor"
msgstr "作为主机设备的网络接口需在 XML 编辑器中删除" msgstr "作为主机设备的网络接口需在 XML 编辑器中删除"
#: vrtManager/instance.py:2736 #: vrtManager/instance.py:2737
#, python-format #, python-format
msgid "No network interface with MAC %(old_mac)s" msgid "No network interface with MAC %(old_mac)s"
msgstr "没有 MAC 为 %(old_mac)s 的网络接口" msgstr "没有 MAC 为 %(old_mac)s 的网络接口"
#: vrtManager/instance.py:2739 #: vrtManager/instance.py:2740
msgid "A network interface that is a host device is changed in the XML editor" msgid "A network interface that is a host device is changed in the XML editor"
msgstr "作为主机设备的网络接口需在 XML 编辑器中修改" msgstr "作为主机设备的网络接口需在 XML 编辑器中修改"
#: vrtManager/instance.py:2830 #: vrtManager/instance.py:2831
msgid "" msgid ""
"A VM changes its PCI devices while it runs, or is shut off without a saved " "A VM changes its PCI devices while it runs, or is shut off without a saved "
"state" "state"
msgstr "虚拟机只能在运行时或无保存的状态的关机时更改其 PCI 设备" msgstr "虚拟机只能在运行时或无保存的状态的关机时更改其 PCI 设备"
#: vrtManager/instance.py:2842 #: vrtManager/instance.py:2843
#, python-format #, python-format
msgid "%(err)s; whether the VM has PCI device %(address)s now is not known" msgid "%(err)s; whether the VM has PCI device %(address)s now is not known"
msgstr "%(err)s;虚拟机现在是否有 PCI 设备 %(address)s 未知" msgstr "%(err)s;虚拟机现在是否有 PCI 设备 %(address)s 未知"
#: vrtManager/instance.py:2844 #: vrtManager/instance.py:2845
#, python-format #, python-format
msgid "" msgid ""
"%(err)s; PCI device %(address)s: the VM is not running, its next start has it" "%(err)s; PCI device %(address)s: the VM is not running, its next start has it"
msgstr "%(err)s;PCI 设备 %(address)s:虚拟机未运行,下次启动时有它" msgstr "%(err)s;PCI 设备 %(address)s:虚拟机未运行,下次启动时有它"
#: vrtManager/instance.py:2846 #: vrtManager/instance.py:2847
#, python-format #, python-format
msgid "" msgid ""
"%(err)s; PCI device %(address)s: the VM is not running, its next start does " "%(err)s; PCI device %(address)s: the VM is not running, its next start does "
"not have it" "not have it"
msgstr "%(err)s;PCI 设备 %(address)s:虚拟机未运行,下次启动时没有它" msgstr "%(err)s;PCI 设备 %(address)s:虚拟机未运行,下次启动时没有它"
#: vrtManager/instance.py:2847 #: vrtManager/instance.py:2848
#, python-format #, python-format
msgid "" msgid ""
"%(err)s; PCI device %(address)s: the running VM has it, its next start has it" "%(err)s; PCI device %(address)s: the running VM has it, its next start has it"
msgstr "%(err)s;PCI 设备 %(address)s:运行中的虚拟机有它,下次启动时有它" msgstr "%(err)s;PCI 设备 %(address)s:运行中的虚拟机有它,下次启动时有它"
#: vrtManager/instance.py:2849 #: vrtManager/instance.py:2850
#, python-format #, python-format
msgid "" msgid ""
"%(err)s; PCI device %(address)s: the running VM has it, its next start does " "%(err)s; PCI device %(address)s: the running VM has it, its next start does "
"not have it" "not have it"
msgstr "%(err)s;PCI 设备 %(address)s:运行中的虚拟机有它,下次启动时没有它" msgstr "%(err)s;PCI 设备 %(address)s:运行中的虚拟机有它,下次启动时没有它"
#: vrtManager/instance.py:2851 #: vrtManager/instance.py:2852
#, python-format #, python-format
msgid "" msgid ""
"%(err)s; PCI device %(address)s: the running VM does not have it, its next " "%(err)s; PCI device %(address)s: the running VM does not have it, its next "
"start has it" "start has it"
msgstr "%(err)s;PCI 设备 %(address)s:运行中的虚拟机没有它,下次启动时有它" msgstr "%(err)s;PCI 设备 %(address)s:运行中的虚拟机没有它,下次启动时有它"
#: vrtManager/instance.py:2853 #: vrtManager/instance.py:2854
#, python-format #, python-format
msgid "" msgid ""
"%(err)s; PCI device %(address)s: the running VM does not have it, its next " "%(err)s; PCI device %(address)s: the running VM does not have it, its next "
"start does not have it" "start does not have it"
msgstr "%(err)s;PCI 设备 %(address)s:运行中的虚拟机没有它,下次启动时没有它" msgstr "%(err)s;PCI 设备 %(address)s:运行中的虚拟机没有它,下次启动时没有它"
#: vrtManager/instance.py:2887 #: vrtManager/instance.py:2888
#, python-format #, python-format
msgid "The VM has no PCI device %(address)s" msgid "The VM has no PCI device %(address)s"
msgstr "虚拟机没有 PCI 设备 %(address)s" msgstr "虚拟机没有 PCI 设备 %(address)s"
#: vrtManager/instance.py:2905 #: vrtManager/instance.py:2906
msgid "The VM has no USB controller" msgid "The VM has no USB controller"
msgstr "虚拟机没有 USB 控制器" msgstr "虚拟机没有 USB 控制器"
#: vrtManager/instance.py:2924 #: vrtManager/instance.py:2925
msgid "The VM has no such USB device" msgid "The VM has no such USB device"
msgstr "虚拟机没有此 USB 设备" msgstr "虚拟机没有此 USB 设备"
#: vrtManager/instance.py:2965 #: vrtManager/instance.py:2966
msgid "The VM has its own RNG device: change it in the XML editor" msgid "The VM has its own RNG device: change it in the XML editor"
msgstr "虚拟机有自己的 RNG 设备:请在 XML 编辑器中修改" msgstr "虚拟机有自己的 RNG 设备:请在 XML 编辑器中修改"
#: vrtManager/instance.py:2992 #: vrtManager/instance.py:2993
msgid "The VM has its own TPM: change it in the XML editor" msgid "The VM has its own TPM: change it in the XML editor"
msgstr "虚拟机有自己的 TPM:请在 XML 编辑器中修改" msgstr "虚拟机有自己的 TPM:请在 XML 编辑器中修改"
#: vrtManager/instance.py:3011 #: vrtManager/instance.py:3012
#, python-format #, python-format
msgid "Unknown crash action %(action)s" msgid "Unknown crash action %(action)s"
msgstr "未知的崩溃操作 %(action)s" msgstr "未知的崩溃操作 %(action)s"

View file

@ -132,6 +132,34 @@ th[aria-sort="ascending"]:not([data-sort-method="none"])::after {
/* the access tab's two login buttons line up */ /* the access tab's two login buttons line up */
.access-act { min-width: 9rem; } .access-act { min-width: 9rem; }
/* the resize tab: one cell per vCPU up to the maximum, filled when on; memory now within its maximum */
.vcpu-cell {
display: inline-flex;
align-items: center;
justify-content: center;
min-width: 2.25rem;
height: 2.25rem;
padding: 0 .4rem;
border-radius: var(--bs-border-radius);
border: 2px solid var(--bs-primary);
background: var(--bs-body-bg);
color: var(--bs-primary);
font-size: .875rem;
font-weight: 600;
}
.vcpu-cell.on { background: var(--bs-primary); color: #fff; }
button.vcpu-cell:not(:disabled):hover { box-shadow: 0 0 0 .2rem rgba(var(--bs-primary-rgb), .25); }
button.vcpu-cell:disabled { opacity: .65; }
.memory-bar {
width: min(18rem, 100%);
height: .9rem;
border: 2px solid var(--bs-primary);
border-radius: var(--bs-border-radius);
overflow: hidden;
}
.memory-bar-now { height: 100%; background: var(--bs-primary); }
.resize-act { min-width: 9rem; }
/* the boot order: the devices the VM tries in turn, numbered and joined by a line */ /* the boot order: the devices the VM tries in turn, numbered and joined by a line */
.boot-chain { counter-reset: boot; } .boot-chain { counter-reset: boot; }
.boot-node { position: relative; padding: .5rem 0; } .boot-node { position: relative; padding: .5rem 0; }