mirror of
https://github.com/retspen/webvirtcloud
synced 2026-11-08 11:16:47 +00:00
feat(instances): the Options tab groups what the VM is and what the guest sees
The tab listed seven settings at one weight, each a two-column card with a heading and a paragraph beside its control. The controls disagreed: three switches posted on change, while the video model, the crash action and the guest agent (an Enabled/Disabled select) each had their own Save, and "From the next start" was repeated under three of them. Now it has three parts. VM details: title and description with their Save, and the template switch below them. Devices the guest sees: video, virtio RNG, TPM 2.0 and the guest agent as rows of name, control and a one-line note, under one line saying when changes apply; the video model posts on change and the guest agent is a switch, with its connection shown beside it as the Power tab's dot. When the guest crashes: Restart / Stop as two buttons that post on click. Form names, posts and who sees what are unchanged. The Turkish catalog now calls the guest agent "konuk ajanı" everywhere.
This commit is contained in:
parent
607c8381b4
commit
07ca42dcdf
7 changed files with 248 additions and 332 deletions
|
|
@ -877,155 +877,99 @@
|
|||
{% endif %}
|
||||
{% if can_change %}
|
||||
<div role="tabpanel" class="tab-pane" id="options">
|
||||
{# what the VM is (its name, a template or not), then what the guest sees and what happens when it crashes #}
|
||||
<div class="list-group">
|
||||
<form class="list-group-item p-3 p-md-4" action="{% url 'instances:change_options' instance.id %}" method="post" aria-labelledby="options-details">{% csrf_token %}
|
||||
<div class="row g-3">
|
||||
<div class="col-12 col-lg-4">
|
||||
<h2 class="h6" id="options-details">{% bs_icon 'pencil-square' %} {% trans "VM details" %}</h2>
|
||||
<p class="small text-body-secondary mb-0">{% trans "A title and description to identify the VM." %}</p>
|
||||
<div class="list-group-item p-3 p-md-4">
|
||||
<h2 class="h6 mb-3" id="options-details">{% trans "VM details" %}</h2>
|
||||
<form action="{% url 'instances:change_options' instance.id %}" method="post" aria-labelledby="options-details">{% csrf_token %}
|
||||
<div class="row g-2 mb-2">
|
||||
<label class="col-sm-2 col-form-label" for="options-title">{% trans "Title" %}</label>
|
||||
<div class="col-sm-10"><input class="form-control" type="text" id="options-title" name="title" value="{{ instance.config_title }}"></div>
|
||||
</div>
|
||||
<div class="col-12 col-lg-8">
|
||||
<label class="form-label" for="options-title">{% trans "Title" %}</label>
|
||||
<input class="form-control mb-3" type="text" id="options-title" name="title" value="{{ instance.config_title }}">
|
||||
<label class="form-label" for="options-description">{% trans "Description" %}</label>
|
||||
<textarea class="form-control mb-3" id="options-description" name="description" rows="2">{{ instance.config_description }}</textarea>
|
||||
<div class="text-end">
|
||||
<button class="btn btn-primary" type="submit" name="change_options">{% trans "Save" %}</button>
|
||||
</div>
|
||||
<div class="row g-2 mb-2">
|
||||
<label class="col-sm-2 col-form-label" for="options-description">{% trans "Description" %}</label>
|
||||
<div class="col-sm-10"><textarea class="form-control" id="options-description" name="description" rows="2">{{ instance.config_description }}</textarea></div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<form class="list-group-item p-3 p-md-4" action="{% url 'instances:set_template' instance.id %}" method="post">{% csrf_token %}
|
||||
<div class="row g-3 align-items-center">
|
||||
<div class="col-12 col-lg-4">
|
||||
<label class="form-label fw-semibold mb-0" for="is_template">{% trans "Template" %}</label>
|
||||
<p class="small text-body-secondary mb-0" id="template-help">{% trans "A template is a VM to clone: it is not counted in quotas and cannot be started." %}</p>
|
||||
<div class="text-end">
|
||||
<button class="btn btn-primary" type="submit" name="change_options">{% trans "Save" %}</button>
|
||||
</div>
|
||||
<div class="col-12 col-lg-8">
|
||||
<div class="form-check form-switch">
|
||||
<input class="form-check-input" type="checkbox" role="switch" name="is_template" value="True" id="is_template" aria-describedby="template-help template-state"
|
||||
{% if instance.is_template %}checked{% endif %}
|
||||
{% if instance.status != 5 or not request.user.is_superuser and not request.user.is_staff %}disabled{% endif %} data-submit-on-change>
|
||||
<label class="form-check-label" for="is_template">{% trans "Use as a template" %}</label>
|
||||
</div>
|
||||
<p class="small text-body-secondary mt-1 mb-0" id="template-state">
|
||||
{% if not request.user.is_superuser and not request.user.is_staff %}{% trans "Only administrators and staff can change this." %}
|
||||
{% elif instance.status != 5 %}{% trans "Shut the VM down to change this." %}{% endif %}
|
||||
</p>
|
||||
</form>
|
||||
<form class="border-top mt-3 pt-3" action="{% url 'instances:set_template' instance.id %}" method="post">{% csrf_token %}
|
||||
<div class="form-check form-switch mb-1">
|
||||
<input class="form-check-input" type="checkbox" role="switch" name="is_template" value="True" id="is_template" aria-describedby="template-help"
|
||||
{% if instance.is_template %}checked{% endif %}
|
||||
{% if instance.status != 5 or not request.user.is_superuser and not request.user.is_staff %}disabled{% endif %} data-submit-on-change>
|
||||
<label class="form-check-label" for="is_template">{% trans "Use as a template" %}</label>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<p class="small text-body-secondary mb-0" id="template-help">{% trans "A template is a VM to clone: it is not counted in quotas and cannot be started." %}
|
||||
{% if not request.user.is_superuser and not request.user.is_staff %}{% trans "Only administrators and staff can change this." %}
|
||||
{% elif instance.status != 5 %}{% trans "Shut the VM down to change this." %}{% endif %}</p>
|
||||
</form>
|
||||
</div>
|
||||
{% if request.user.is_superuser %}
|
||||
<form class="list-group-item p-3 p-md-4" action="{% url 'instances:set_video_model' instance.id %}" method="post">{% csrf_token %}
|
||||
<div class="row g-3 align-items-center">
|
||||
<div class="col-12 col-lg-4">
|
||||
<label class="form-label fw-semibold mb-0" for="video_model_select">{% trans "Primary video model" %}</label>
|
||||
<p class="small text-body-secondary mb-0" id="video-help">{% trans "The graphics device the guest sees." %}</p>
|
||||
</div>
|
||||
<div class="col-12 col-lg-8">
|
||||
<div class="row g-2">
|
||||
<div class="col-12 col-sm">
|
||||
<select id="video_model_select" class="form-select" name="video_model" aria-describedby="video-help">
|
||||
{% for vmodel in instance.video_models %}
|
||||
<option value="{{ vmodel }}"{% if vmodel == instance.config_video_model %} selected{% endif %}>{{ vmodel }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-12 col-sm-auto d-grid">
|
||||
<button class="btn btn-secondary" type="submit" name="set_video_model">{% trans "Save" %}</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="list-group-item p-3 p-md-4" role="group" aria-labelledby="options-devices">
|
||||
<div class="d-flex flex-wrap justify-content-between column-gap-3 mb-2">
|
||||
<h2 class="h6 mb-0" id="options-devices">{% trans "Devices the guest sees" %}</h2>
|
||||
<span class="small text-body-secondary">{% trans "Changes apply from the next start; the guest agent's at once." %}</span>
|
||||
</div>
|
||||
</form>
|
||||
<form class="list-group-item p-3 p-md-4" action="{% url 'instances:set_rng' instance.id %}" method="post">{% csrf_token %}
|
||||
<div class="row g-3 align-items-center">
|
||||
<div class="col-12 col-lg-4">
|
||||
<label class="form-label fw-semibold mb-0" for="rng">{% trans "Random number generator" %}</label>
|
||||
<p class="small text-body-secondary mb-0" id="rng-help">{% trans "A virtio device that feeds the guest's entropy from the host: a new VM does not wait for it at boot. From the next start." %}</p>
|
||||
<form class="option-row" action="{% url 'instances:set_video_model' instance.id %}" method="post">{% csrf_token %}
|
||||
<label class="option-name" for="video_model_select">{% trans "Video" %}</label>
|
||||
<select id="video_model_select" class="form-select form-select-sm w-auto" name="video_model" data-submit-on-change>
|
||||
{% for vmodel in instance.video_models %}
|
||||
<option value="{{ vmodel }}"{% if vmodel == instance.config_video_model %} selected{% endif %}>{{ vmodel }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
<span class="small text-body-secondary">{% trans "The graphics device the guest sees." %}</span>
|
||||
</form>
|
||||
<form class="option-row border-top" action="{% url 'instances:set_rng' instance.id %}" method="post">{% csrf_token %}
|
||||
<label class="option-name" for="rng">{% trans "Virtio RNG" %}</label>
|
||||
<div class="form-check form-switch mb-0">
|
||||
<input class="form-check-input" type="checkbox" role="switch" name="rng" value="True" id="rng" aria-describedby="rng-help"
|
||||
{% if instance.config_rng %}checked{% endif %}{% if instance.config_rng == "custom" %} disabled{% endif %} data-submit-on-change>
|
||||
</div>
|
||||
<div class="col-12 col-lg-8">
|
||||
<div class="form-check form-switch">
|
||||
<input class="form-check-input" type="checkbox" role="switch" name="rng" value="True" id="rng" aria-describedby="rng-help rng-state"
|
||||
{% if instance.config_rng %}checked{% endif %}{% if instance.config_rng == "custom" %} disabled{% endif %} data-submit-on-change>
|
||||
<label class="form-check-label" for="rng">{% trans "Virtio RNG" %}</label>
|
||||
</div>
|
||||
{% if instance.config_rng == "custom" %}
|
||||
<p class="small text-body-secondary mt-1 mb-0" id="rng-state">{% trans "The VM has its own RNG device: change it in the XML editor." %}</p>
|
||||
{% endif %}
|
||||
<span class="small text-body-secondary" id="rng-help">{% if instance.config_rng == "custom" %}{% trans "The VM has its own RNG device: change it in the XML editor." %}{% else %}{% trans "Feeds the guest's entropy from the host, so a new VM does not wait for it at boot." %}{% endif %}</span>
|
||||
</form>
|
||||
<form class="option-row border-top" action="{% url 'instances:set_tpm' instance.id %}" method="post">{% csrf_token %}
|
||||
<label class="option-name" for="tpm">{% trans "TPM 2.0" %}</label>
|
||||
<div class="form-check form-switch mb-0">
|
||||
<input class="form-check-input" type="checkbox" role="switch" name="tpm" value="True" id="tpm" aria-describedby="tpm-help"
|
||||
{% if instance.config_tpm %}checked{% endif %}{% if instance.config_tpm == "custom" or not instance.config_tpm and not tpm_support %} disabled{% endif %} data-submit-on-change>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<form class="list-group-item p-3 p-md-4" action="{% url 'instances:set_tpm' instance.id %}" method="post">{% csrf_token %}
|
||||
<div class="row g-3 align-items-center">
|
||||
<div class="col-12 col-lg-4">
|
||||
<label class="form-label fw-semibold mb-0" for="tpm">{% trans "TPM" %}</label>
|
||||
<p class="small text-body-secondary mb-0" id="tpm-help">{% trans "An emulated TPM 2.0, as Windows 11 needs with UEFI Secure Boot. Its state stays on the host until the VM is destroyed: a TPM added again has it back. From the next start." %}</p>
|
||||
<span class="small text-body-secondary" id="tpm-help">
|
||||
{% if instance.config_tpm == "custom" %}{% trans "The VM has its own TPM: change it in the XML editor." %}
|
||||
{% elif not instance.config_tpm and not tpm_support %}{% trans "This host offers no TPM 2.0: install swtpm on it." %}
|
||||
{% elif instance.config_tpm %}{% trans "Turned off, its state stays on the host until the VM is destroyed; turned on again, it is back." %}
|
||||
{% else %}{% trans "Windows 11 needs it, with UEFI Secure Boot." %}{% endif %}</span>
|
||||
</form>
|
||||
<form class="option-row border-top" action="{% url 'instances:set_guest_agent' instance.id %}" method="post">{% csrf_token %}
|
||||
<input type="hidden" name="guest_agent" value="{% if instance.config_guest_agent %}False{% else %}True{% endif %}">
|
||||
<label class="option-name" for="guest_agent">{% trans "Guest agent" %}</label>
|
||||
<div class="form-check form-switch mb-0">
|
||||
<input class="form-check-input" type="checkbox" role="switch" id="guest_agent" aria-describedby="agent-help"{% if instance.config_guest_agent %} checked{% endif %} data-submit-on-change>
|
||||
</div>
|
||||
<div class="col-12 col-lg-8">
|
||||
<div class="form-check form-switch">
|
||||
<input class="form-check-input" type="checkbox" role="switch" name="tpm" value="True" id="tpm" aria-describedby="tpm-help tpm-state"
|
||||
{% if instance.config_tpm %}checked{% endif %}{% if instance.config_tpm == "custom" or not instance.config_tpm and not tpm_support %} disabled{% endif %} data-submit-on-change>
|
||||
<label class="form-check-label" for="tpm">{% trans "TPM 2.0" %}</label>
|
||||
</div>
|
||||
{% if instance.config_tpm == "custom" %}
|
||||
<p class="small text-body-secondary mt-1 mb-0" id="tpm-state">{% trans "The VM has its own TPM: change it in the XML editor." %}</p>
|
||||
{% elif not instance.config_tpm and not tpm_support %}
|
||||
<p class="small text-body-secondary mt-1 mb-0" id="tpm-state">{% trans "This host offers no TPM 2.0: install swtpm on it." %}</p>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<form class="list-group-item p-3 p-md-4" action="{% url 'instances:set_on_crash' instance.id %}" method="post">{% csrf_token %}
|
||||
<div class="row g-3 align-items-center">
|
||||
<div class="col-12 col-lg-4">
|
||||
<label class="form-label fw-semibold mb-0" for="on_crash">{% trans "When the guest crashes" %}</label>
|
||||
<p class="small text-body-secondary mb-0" id="on-crash-help">{% trans "For a crash the guest reports, not a hang. Stop keeps a VM that crashes again and again down for a look. From the next start." %}</p>
|
||||
</div>
|
||||
<div class="col-12 col-lg-8">
|
||||
{% if instance.config_on_crash == "restart" or instance.config_on_crash == "destroy" %}
|
||||
<div class="row g-2">
|
||||
<div class="col-12 col-sm">
|
||||
<select id="on_crash" class="form-select" name="on_crash" aria-describedby="on-crash-help">
|
||||
<option value="restart"{% if instance.config_on_crash == "restart" %} selected{% endif %}>{% trans "Restart" %}</option>
|
||||
<option value="destroy"{% if instance.config_on_crash == "destroy" %} selected{% endif %}>{% trans "Stop" %}</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-12 col-sm-auto d-grid">
|
||||
<button class="btn btn-secondary" type="submit" name="set_on_crash">{% trans "Save" %}</button>
|
||||
</div>
|
||||
</div>
|
||||
{% else %}
|
||||
<p class="small mb-0" id="on_crash">{% blocktrans with action=instance.config_on_crash %}{{ action }}: change it in the XML editor.{% endblocktrans %}</p>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<form class="list-group-item p-3 p-md-4" action="{% url 'instances:set_guest_agent' instance.id %}" method="post">{% csrf_token %}
|
||||
<div class="row g-3 align-items-center">
|
||||
<div class="col-12 col-lg-4">
|
||||
<label class="form-label fw-semibold mb-0" for="guest_agent">{% trans "QEMU guest agent" %}</label>
|
||||
<p class="small text-body-secondary mb-0" id="agent-help">{% trans "The channel to the agent in the guest: a running VM gets it at once." %}</p>
|
||||
<p class="small mt-2 mb-0">{% trans "Agent" %}:
|
||||
{% if instance.status != 1 and instance.status != 3 %}<span class="badge bg-secondary">{% trans "VM not running" %}</span>
|
||||
{% elif not instance.guest_agent %}<span class="badge bg-secondary">{% trans "No channel" %}</span>
|
||||
{% elif instance.guest_agent_ready %}<span class="badge bg-success">{% trans "Connected" %}</span>
|
||||
{% else %}<span class="badge bg-danger">{% trans "Not connected" %}</span>{% endif %}
|
||||
</p>
|
||||
</div>
|
||||
<div class="col-12 col-lg-8">
|
||||
<div class="row g-2">
|
||||
<div class="col-12 col-sm">
|
||||
<select id="guest_agent" class="form-select" name="guest_agent" aria-describedby="agent-help">
|
||||
<option value="True"{% if instance.config_guest_agent %} selected{% endif %}>{% trans "Enabled" %}</option>
|
||||
<option value="False"{% if not instance.config_guest_agent %} 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_guest_agent">{% trans "Save" %}</button>
|
||||
</div>
|
||||
</div>
|
||||
<span class="small d-inline-flex align-items-center gap-2" id="agent-help">
|
||||
{% if not instance.config_guest_agent %}<span class="text-body-secondary">{% trans "The channel to the agent in the guest: a running VM gets it at once." %}</span>
|
||||
{% elif instance.status != 1 and instance.status != 3 %}<span class="power-dot" aria-hidden="true"></span>{% trans "VM not running" %}
|
||||
{% elif not instance.guest_agent %}<span class="power-dot" aria-hidden="true"></span>{% trans "No channel" %}
|
||||
{% elif instance.guest_agent_ready %}<span class="power-dot bg-success" aria-hidden="true"></span>{% trans "Connected" %}
|
||||
{% else %}<span class="power-dot bg-danger" aria-hidden="true"></span>{% trans "Not connected: is the agent installed and running in the guest?" %}{% endif %}
|
||||
</span>
|
||||
</form>
|
||||
</div>
|
||||
<form class="list-group-item p-3 p-md-4" action="{% url 'instances:set_on_crash' instance.id %}" method="post" aria-labelledby="options-crash">{% csrf_token %}
|
||||
<h2 class="h6 mb-2" id="options-crash">{% trans "When the guest crashes" %}</h2>
|
||||
<div class="d-flex flex-wrap align-items-center column-gap-3 row-gap-2">
|
||||
{% if instance.config_on_crash == "restart" or instance.config_on_crash == "destroy" %}
|
||||
<div class="btn-group btn-group-sm" role="radiogroup" aria-labelledby="options-crash">
|
||||
<input type="radio" class="btn-check" name="on_crash" value="restart" id="on_crash_restart"{% if instance.config_on_crash == "restart" %} checked{% endif %} data-submit-on-change>
|
||||
<label class="btn btn-outline-primary" for="on_crash_restart">{% trans "Restart" %}</label>
|
||||
<input type="radio" class="btn-check" name="on_crash" value="destroy" id="on_crash_destroy"{% if instance.config_on_crash == "destroy" %} checked{% endif %} data-submit-on-change>
|
||||
<label class="btn btn-outline-primary" for="on_crash_destroy">{% trans "Stop" %}</label>
|
||||
</div>
|
||||
<span class="small text-body-secondary">{% trans "For a crash the guest reports, not a hang. Stop keeps a VM that crashes again and again down for a look. From the next start." %}</span>
|
||||
{% else %}
|
||||
<p class="small mb-0" id="on_crash">{% blocktrans with action=instance.config_on_crash %}{{ action }}: change it in the XML editor.{% endblocktrans %}</p>
|
||||
{% endif %}
|
||||
</div>
|
||||
</form>
|
||||
{% endif %}
|
||||
|
|
|
|||
|
|
@ -208,20 +208,22 @@ class PendingEditsTestCase(TestCase):
|
|||
hotplug = {"0": {"enabled": "yes", "hotpluggable": "no", "order": "1"},
|
||||
"1": {"enabled": "yes", "hotpluggable": "yes", "order": "2"}}
|
||||
doc = self.page(get_guest_agent=(None, object()), get_vcpus=({}, hotplug))
|
||||
self.assertEqual(doc.xpath("//select[@name='guest_agent']/option[@selected]/@value"), ["True"])
|
||||
# the agent switch shows the pending channel on; flipping it posts off
|
||||
self.assertEqual(doc.xpath("//input[@id='guest_agent']/@checked"), ["checked"])
|
||||
self.assertEqual(doc.xpath("//input[@name='guest_agent']/@value"), ["False"])
|
||||
# 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[.//input[@name='guest_agent']])"))
|
||||
|
||||
def test_a_custom_rng_or_crash_action_is_left_to_the_xml_editor(self):
|
||||
doc = self.page(get_rng=("custom", "custom"), get_on_crash=("preserve", "preserve"))
|
||||
self.assertIsNotNone(doc.xpath("//input[@name='rng']")[0].get("disabled"))
|
||||
self.assertEqual(doc.xpath("//select[@name='on_crash']"), [])
|
||||
self.assertEqual(doc.xpath("//input[@name='on_crash']"), [])
|
||||
self.assertIn("preserve: change it in the XML editor.", doc.xpath("string(//p[@id='on_crash'])"))
|
||||
doc = self.page(get_rng=("virtio", "virtio"), get_on_crash=("restart", "restart")) # read from the persistent definition
|
||||
self.assertEqual(doc.xpath("//input[@name='rng']/@checked"), ["checked"])
|
||||
self.assertEqual(doc.xpath("//select[@name='on_crash']/option[@selected]/@value"), ["restart"])
|
||||
self.assertEqual(doc.xpath("//input[@name='on_crash'][@checked]/@value"), ["restart"])
|
||||
|
||||
def test_the_tpm_switch_is_off_where_it_cannot_change(self):
|
||||
tpm = "//input[@name='tpm']"
|
||||
|
|
@ -229,11 +231,11 @@ class PendingEditsTestCase(TestCase):
|
|||
self.assertEqual((doc.xpath(f"{tpm}/@checked"), doc.xpath(f"{tpm}/@disabled")), (["checked"], []))
|
||||
doc = self.page(get_tpm=("custom", "custom"))
|
||||
self.assertTrue(doc.xpath(f"{tpm}/@disabled"))
|
||||
self.assertIn("change it in the XML editor", doc.xpath("string(//p[@id='tpm-state'])"))
|
||||
self.assertIn("change it in the XML editor", doc.xpath("string(//span[@id='tpm-help'])"))
|
||||
# no swtpm: none can be added, one the VM has can still go
|
||||
doc = self.page(get_tpm=(None, None), tpm_model=None)
|
||||
self.assertTrue(doc.xpath(f"{tpm}/@disabled"))
|
||||
self.assertIn("install swtpm", doc.xpath("string(//p[@id='tpm-state'])"))
|
||||
self.assertIn("install swtpm", doc.xpath("string(//span[@id='tpm-help'])"))
|
||||
doc = self.page(get_tpm=("emulator", "emulator"), tpm_model=None)
|
||||
self.assertEqual(doc.xpath(f"{tpm}/@disabled"), [])
|
||||
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -11,7 +11,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2026-11-03 19:32+0000\n"
|
||||
"POT-Creation-Date: 2026-11-04 04:57+0000\n"
|
||||
"PO-Revision-Date: 2020-11-04 12:00+0000\n"
|
||||
"Last-Translator: catborise <muhammetalisag@gmail.com>, 2020\n"
|
||||
"Language-Team: Turkish (https://www.transifex.com/catborise/teams/110663/tr/)\n"
|
||||
|
|
@ -710,10 +710,7 @@ msgstr "Üyeler"
|
|||
#: instances/templates/instances/nic_qos_form.html:23
|
||||
#: instances/templates/instances/settings_tab.html:410
|
||||
#: instances/templates/instances/settings_tab.html:644
|
||||
#: instances/templates/instances/settings_tab.html:893
|
||||
#: instances/templates/instances/settings_tab.html:935
|
||||
#: instances/templates/instances/settings_tab.html:995
|
||||
#: instances/templates/instances/settings_tab.html:1025
|
||||
#: instances/templates/instances/settings_tab.html:894
|
||||
#: networks/templates/add_network_qos.html:36
|
||||
#: networks/templates/network.html:336 networks/templates/network.html:376
|
||||
#: networks/templates/network.html:403 networks/templates/network.html:442
|
||||
|
|
@ -878,7 +875,6 @@ msgstr "Kaldırılan sanal makinelerde ara"
|
|||
|
||||
#: admin/templates/admin/tombstone_list.html:28
|
||||
#: instances/templates/instance.html:27
|
||||
#: instances/templates/instances/settings_tab.html:901
|
||||
msgid "Template"
|
||||
msgstr "Şablon"
|
||||
|
||||
|
|
@ -2137,14 +2133,13 @@ msgstr "vCPU"
|
|||
#: console/templates/console-vnc.html:13
|
||||
#: console/templates/console-xterm.html:16
|
||||
#: instances/templates/allinstances_index_grouped.html:36
|
||||
#: instances/templates/instances/settings_tab.html:1012
|
||||
#: instances/templates/instances/settings_tab.html:954
|
||||
#: networks/templates/network.html:260
|
||||
msgid "Connected"
|
||||
msgstr "Bağlı"
|
||||
|
||||
#: computes/templates/computes/list.html:73 computes/templates/overview.html:21
|
||||
#: instances/templates/allinstances_index_grouped.html:38
|
||||
#: instances/templates/instances/settings_tab.html:1013
|
||||
msgid "Not connected"
|
||||
msgstr "Bağlı değil"
|
||||
|
||||
|
|
@ -3594,7 +3589,7 @@ msgid "Firmware"
|
|||
msgstr "Üretici yazılımı"
|
||||
|
||||
#: instances/templates/create_instance_w2.html:86
|
||||
#: instances/templates/instances/settings_tab.html:969
|
||||
#: instances/templates/instances/settings_tab.html:933
|
||||
msgid "TPM 2.0"
|
||||
msgstr "TPM 2.0"
|
||||
|
||||
|
|
@ -3696,7 +3691,9 @@ msgstr "NIC tipi"
|
|||
msgid "Network filter"
|
||||
msgstr "Ağ filtresi"
|
||||
|
||||
#: instances/templates/create_instance_w2.html:293 vrtManager/nodedevs.py:30
|
||||
#: instances/templates/create_instance_w2.html:293
|
||||
#: instances/templates/instances/settings_tab.html:916
|
||||
#: vrtManager/nodedevs.py:30
|
||||
msgid "Video"
|
||||
msgstr "Görüntü"
|
||||
|
||||
|
|
@ -3709,8 +3706,9 @@ msgid "Input device"
|
|||
msgstr "Girdi aygıtı"
|
||||
|
||||
#: instances/templates/create_instance_w2.html:334
|
||||
#: instances/templates/instances/settings_tab.html:946
|
||||
msgid "Guest agent"
|
||||
msgstr "Misafir aracı"
|
||||
msgstr "Konuk ajanı"
|
||||
|
||||
#: instances/templates/create_instance_w2.html:338
|
||||
msgid "Cloud-init seed"
|
||||
|
|
@ -3768,15 +3766,15 @@ msgstr "Yenile"
|
|||
|
||||
#: instances/templates/instance.html:45
|
||||
msgid "Guest agent off"
|
||||
msgstr "Misafir aracı kapalı"
|
||||
msgstr "Konuk ajanı kapalı"
|
||||
|
||||
#: instances/templates/instance.html:47
|
||||
msgid "Guest agent connected"
|
||||
msgstr "Misafir aracı bağlı"
|
||||
msgstr "Konuk ajanı bağlı"
|
||||
|
||||
#: instances/templates/instance.html:49
|
||||
msgid "Guest agent not connected"
|
||||
msgstr "Misafir aracı bağlı değil"
|
||||
msgstr "Konuk ajanı bağlı değil"
|
||||
|
||||
#: instances/templates/instance.html:51
|
||||
#, python-format
|
||||
|
|
@ -4570,7 +4568,7 @@ msgstr ""
|
|||
"sağlar."
|
||||
|
||||
#: instances/templates/instances/resize_tab.html:77
|
||||
#: instances/templates/instances/settings_tab.html:913
|
||||
#: instances/templates/instances/settings_tab.html:906
|
||||
msgid "Shut the VM down to change this."
|
||||
msgstr "Bunu değiştirmek için sanal makineyi kapatın."
|
||||
|
||||
|
|
@ -5342,7 +5340,7 @@ msgid "Optional details"
|
|||
msgstr "İsteğe bağlı ayrıntılar"
|
||||
|
||||
#: instances/templates/instances/settings_tab.html:856
|
||||
#: instances/templates/instances/settings_tab.html:888
|
||||
#: instances/templates/instances/settings_tab.html:886
|
||||
msgid "Title"
|
||||
msgstr "Başlık"
|
||||
|
||||
|
|
@ -5358,84 +5356,105 @@ msgstr ""
|
|||
msgid "Cloning runs as a background job."
|
||||
msgstr "Klonlama arka planda bir iş olarak çalışır."
|
||||
|
||||
#: instances/templates/instances/settings_tab.html:884
|
||||
#: instances/templates/instances/settings_tab.html:883
|
||||
msgid "VM details"
|
||||
msgstr "Sanal makine ayrıntıları"
|
||||
|
||||
#: instances/templates/instances/settings_tab.html:885
|
||||
msgid "A title and description to identify the VM."
|
||||
msgstr "Sanal makineyi tanımlamak için bir başlık ve açıklama."
|
||||
|
||||
#: instances/templates/instances/settings_tab.html:902
|
||||
msgid "Use as a template"
|
||||
msgstr "Şablon olarak kullan"
|
||||
|
||||
#: instances/templates/instances/settings_tab.html:904
|
||||
msgid ""
|
||||
"A template is a VM to clone: it is not counted in quotas and cannot be "
|
||||
"started."
|
||||
msgstr ""
|
||||
"Şablon, klonlanacak bir sanal makinedir: kotalarda sayılmaz ve başlatılamaz."
|
||||
|
||||
#: instances/templates/instances/settings_tab.html:909
|
||||
msgid "Use as a template"
|
||||
msgstr "Şablon olarak kullan"
|
||||
|
||||
#: instances/templates/instances/settings_tab.html:912
|
||||
#: instances/templates/instances/settings_tab.html:905
|
||||
msgid "Only administrators and staff can change this."
|
||||
msgstr "Bunu yalnızca yöneticiler ve personel değiştirebilir."
|
||||
|
||||
#: instances/templates/instances/settings_tab.html:922
|
||||
msgid "Primary video model"
|
||||
msgstr "Birincil video modeli"
|
||||
#: instances/templates/instances/settings_tab.html:912
|
||||
msgid "Devices the guest sees"
|
||||
msgstr "Konuk sistemin gördüğü aygıtlar"
|
||||
|
||||
#: instances/templates/instances/settings_tab.html:923
|
||||
#: instances/templates/instances/settings_tab.html:913
|
||||
msgid "Changes apply from the next start; the guest agent's at once."
|
||||
msgstr "Değişiklikler sonraki başlatmada geçerli olur; konuk ajanınki hemen."
|
||||
|
||||
#: instances/templates/instances/settings_tab.html:922
|
||||
msgid "The graphics device the guest sees."
|
||||
msgstr "Konuk sistemin gördüğü grafik aygıtı."
|
||||
|
||||
#: instances/templates/instances/settings_tab.html:944
|
||||
msgid "Random number generator"
|
||||
msgstr "Rastgele sayı üreteci"
|
||||
|
||||
#: instances/templates/instances/settings_tab.html:945
|
||||
msgid ""
|
||||
"A virtio device that feeds the guest's entropy from the host: a new VM does "
|
||||
"not wait for it at boot. From the next start."
|
||||
msgstr ""
|
||||
"Konuk sistemin entropisini sunucudan besleyen bir virtio aygıtı: yeni bir "
|
||||
"sanal makine açılışta onu beklemez. Sonraki başlatmadan itibaren."
|
||||
|
||||
#: instances/templates/instances/settings_tab.html:951
|
||||
#: instances/templates/instances/settings_tab.html:925
|
||||
msgid "Virtio RNG"
|
||||
msgstr "Virtio RNG"
|
||||
|
||||
#: instances/templates/instances/settings_tab.html:954
|
||||
#: instances/templates/instances/settings_tab.html:930
|
||||
msgid "The VM has its own RNG device: change it in the XML editor."
|
||||
msgstr "Sanal makinenin kendi RNG aygıtı var: XML düzenleyicide değiştirin."
|
||||
|
||||
#: instances/templates/instances/settings_tab.html:962
|
||||
msgid "TPM"
|
||||
msgstr "TPM"
|
||||
|
||||
#: instances/templates/instances/settings_tab.html:963
|
||||
#: instances/templates/instances/settings_tab.html:930
|
||||
msgid ""
|
||||
"An emulated TPM 2.0, as Windows 11 needs with UEFI Secure Boot. Its state "
|
||||
"stays on the host until the VM is destroyed: a TPM added again has it back. "
|
||||
"From the next start."
|
||||
"Feeds the guest's entropy from the host, so a new VM does not wait for it at "
|
||||
"boot."
|
||||
msgstr ""
|
||||
"Windows 11'in UEFI Secure Boot ile birlikte istediği emüle edilmiş bir TPM "
|
||||
"2.0. Durumu sanal makine yok edilene kadar sunucuda kalır: yeniden eklenen "
|
||||
"TPM onu geri alır. Bir sonraki başlatmadan itibaren."
|
||||
"Konuk sistemin entropisini sunucudan besler; yeni bir sanal makine açılışta "
|
||||
"onu beklemez."
|
||||
|
||||
#: instances/templates/instances/settings_tab.html:972
|
||||
#: instances/templates/instances/settings_tab.html:939
|
||||
msgid "The VM has its own TPM: change it in the XML editor."
|
||||
msgstr "Sanal makinenin kendi TPM'i var: XML düzenleyicide değiştirin."
|
||||
|
||||
#: instances/templates/instances/settings_tab.html:974
|
||||
#: instances/templates/instances/settings_tab.html:940
|
||||
msgid "This host offers no TPM 2.0: install swtpm on it."
|
||||
msgstr "Bu sunucu TPM 2.0 sunmuyor: üzerine swtpm kurun."
|
||||
|
||||
#: instances/templates/instances/settings_tab.html:982
|
||||
#: instances/templates/instances/settings_tab.html:941
|
||||
msgid ""
|
||||
"Turned off, its state stays on the host until the VM is destroyed; turned on "
|
||||
"again, it is back."
|
||||
msgstr ""
|
||||
"Kapatıldığında durumu, sanal makine silinene kadar sunucuda kalır; yeniden "
|
||||
"açıldığında geri gelir."
|
||||
|
||||
#: instances/templates/instances/settings_tab.html:942
|
||||
msgid "Windows 11 needs it, with UEFI Secure Boot."
|
||||
msgstr "Windows 11, UEFI Secure Boot ile birlikte bunu ister."
|
||||
|
||||
#: instances/templates/instances/settings_tab.html:951
|
||||
msgid "The channel to the agent in the guest: a running VM gets it at once."
|
||||
msgstr ""
|
||||
"Konuk sistemdeki ajana giden kanal: çalışan bir sanal makine onu hemen alır."
|
||||
|
||||
#: instances/templates/instances/settings_tab.html:952
|
||||
msgid "VM not running"
|
||||
msgstr "Sanal makine çalışmıyor"
|
||||
|
||||
#: instances/templates/instances/settings_tab.html:953
|
||||
msgid "No channel"
|
||||
msgstr "Kanal yok"
|
||||
|
||||
#: instances/templates/instances/settings_tab.html:955
|
||||
msgid "Not connected: is the agent installed and running in the guest?"
|
||||
msgstr "Bağlı değil: ajan konuk sistemde kurulu ve çalışıyor mu?"
|
||||
|
||||
#: instances/templates/instances/settings_tab.html:960
|
||||
msgid "When the guest crashes"
|
||||
msgstr "Konuk sistem çöktüğünde"
|
||||
|
||||
#: instances/templates/instances/settings_tab.html:983
|
||||
#: instances/templates/instances/settings_tab.html:965
|
||||
msgid "Restart"
|
||||
msgstr "Yeniden başlat"
|
||||
|
||||
#: instances/templates/instances/settings_tab.html:967
|
||||
#: interfaces/templates/interface.html:16 networks/templates/network.html:16
|
||||
#: storages/templates/storage.html:18
|
||||
msgid "Stop"
|
||||
msgstr "Durdur"
|
||||
|
||||
#: instances/templates/instances/settings_tab.html:969
|
||||
msgid ""
|
||||
"For a crash the guest reports, not a hang. Stop keeps a VM that crashes again"
|
||||
" and again down for a look. From the next start."
|
||||
|
|
@ -5444,50 +5463,11 @@ msgstr ""
|
|||
" tekrar çöken bir sanal makineyi incelemek için kapalı tutar. Sonraki "
|
||||
"başlatmadan itibaren."
|
||||
|
||||
#: instances/templates/instances/settings_tab.html:990
|
||||
msgid "Restart"
|
||||
msgstr "Yeniden başlat"
|
||||
|
||||
#: instances/templates/instances/settings_tab.html:991
|
||||
#: interfaces/templates/interface.html:16 networks/templates/network.html:16
|
||||
#: storages/templates/storage.html:18
|
||||
msgid "Stop"
|
||||
msgstr "Durdur"
|
||||
|
||||
#: instances/templates/instances/settings_tab.html:999
|
||||
#: instances/templates/instances/settings_tab.html:971
|
||||
#, python-format
|
||||
msgid "%(action)s: change it in the XML editor."
|
||||
msgstr "%(action)s: XML düzenleyicide değiştirin."
|
||||
|
||||
#: instances/templates/instances/settings_tab.html:1007
|
||||
msgid "QEMU guest agent"
|
||||
msgstr "QEMU konuk ajanı"
|
||||
|
||||
#: instances/templates/instances/settings_tab.html:1008
|
||||
msgid "The channel to the agent in the guest: a running VM gets it at once."
|
||||
msgstr ""
|
||||
"Konuk sistemdeki ajana giden kanal: çalışan bir sanal makine onu hemen alır."
|
||||
|
||||
#: instances/templates/instances/settings_tab.html:1009
|
||||
msgid "Agent"
|
||||
msgstr "Ajan"
|
||||
|
||||
#: instances/templates/instances/settings_tab.html:1010
|
||||
msgid "VM not running"
|
||||
msgstr "Sanal makine çalışmıyor"
|
||||
|
||||
#: instances/templates/instances/settings_tab.html:1011
|
||||
msgid "No channel"
|
||||
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
|
||||
msgid "Snapshots"
|
||||
msgstr "Anlık görüntüler"
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -7,7 +7,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2026-11-03 19:32+0000\n"
|
||||
"POT-Creation-Date: 2026-11-04 04:57+0000\n"
|
||||
"PO-Revision-Date: \n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
|
|
@ -692,10 +692,7 @@ msgstr "成员"
|
|||
#: instances/templates/instances/nic_qos_form.html:23
|
||||
#: instances/templates/instances/settings_tab.html:410
|
||||
#: instances/templates/instances/settings_tab.html:644
|
||||
#: instances/templates/instances/settings_tab.html:893
|
||||
#: instances/templates/instances/settings_tab.html:935
|
||||
#: instances/templates/instances/settings_tab.html:995
|
||||
#: instances/templates/instances/settings_tab.html:1025
|
||||
#: instances/templates/instances/settings_tab.html:894
|
||||
#: networks/templates/add_network_qos.html:36
|
||||
#: networks/templates/network.html:336 networks/templates/network.html:376
|
||||
#: networks/templates/network.html:403 networks/templates/network.html:442
|
||||
|
|
@ -856,7 +853,6 @@ msgstr "搜索已移除的虚拟机"
|
|||
|
||||
#: admin/templates/admin/tombstone_list.html:28
|
||||
#: instances/templates/instance.html:27
|
||||
#: instances/templates/instances/settings_tab.html:901
|
||||
msgid "Template"
|
||||
msgstr "模板"
|
||||
|
||||
|
|
@ -2068,14 +2064,13 @@ msgstr "vCPU"
|
|||
#: console/templates/console-vnc.html:13
|
||||
#: console/templates/console-xterm.html:16
|
||||
#: instances/templates/allinstances_index_grouped.html:36
|
||||
#: instances/templates/instances/settings_tab.html:1012
|
||||
#: instances/templates/instances/settings_tab.html:954
|
||||
#: networks/templates/network.html:260
|
||||
msgid "Connected"
|
||||
msgstr "已连接"
|
||||
|
||||
#: computes/templates/computes/list.html:73 computes/templates/overview.html:21
|
||||
#: instances/templates/allinstances_index_grouped.html:38
|
||||
#: instances/templates/instances/settings_tab.html:1013
|
||||
msgid "Not connected"
|
||||
msgstr "未连接"
|
||||
|
||||
|
|
@ -3461,7 +3456,7 @@ msgid "Firmware"
|
|||
msgstr "固件"
|
||||
|
||||
#: instances/templates/create_instance_w2.html:86
|
||||
#: instances/templates/instances/settings_tab.html:969
|
||||
#: instances/templates/instances/settings_tab.html:933
|
||||
msgid "TPM 2.0"
|
||||
msgstr "TPM 2.0"
|
||||
|
||||
|
|
@ -3563,7 +3558,9 @@ msgstr "网卡类型"
|
|||
msgid "Network filter"
|
||||
msgstr "网络过滤器"
|
||||
|
||||
#: instances/templates/create_instance_w2.html:293 vrtManager/nodedevs.py:30
|
||||
#: instances/templates/create_instance_w2.html:293
|
||||
#: instances/templates/instances/settings_tab.html:916
|
||||
#: vrtManager/nodedevs.py:30
|
||||
msgid "Video"
|
||||
msgstr "显卡"
|
||||
|
||||
|
|
@ -3576,6 +3573,7 @@ msgid "Input device"
|
|||
msgstr "输入设备"
|
||||
|
||||
#: instances/templates/create_instance_w2.html:334
|
||||
#: instances/templates/instances/settings_tab.html:946
|
||||
msgid "Guest agent"
|
||||
msgstr "客户机代理"
|
||||
|
||||
|
|
@ -4380,7 +4378,7 @@ msgid "Lets vCPUs up to the maximum be turned on and off while the VM runs."
|
|||
msgstr "允许在虚拟机运行时开启或关闭不超过最大数量的 vCPU。"
|
||||
|
||||
#: instances/templates/instances/resize_tab.html:77
|
||||
#: instances/templates/instances/settings_tab.html:913
|
||||
#: instances/templates/instances/settings_tab.html:906
|
||||
msgid "Shut the VM down to change this."
|
||||
msgstr "请先关闭虚拟机再修改此项。"
|
||||
|
||||
|
|
@ -5097,7 +5095,7 @@ msgid "Optional details"
|
|||
msgstr "可选详情"
|
||||
|
||||
#: instances/templates/instances/settings_tab.html:856
|
||||
#: instances/templates/instances/settings_tab.html:888
|
||||
#: instances/templates/instances/settings_tab.html:886
|
||||
msgid "Title"
|
||||
msgstr "标题"
|
||||
|
||||
|
|
@ -5111,128 +5109,109 @@ msgstr "克隆不会获得虚拟机的任何主机设备:一个主机设备只
|
|||
msgid "Cloning runs as a background job."
|
||||
msgstr "克隆作为后台任务运行。"
|
||||
|
||||
#: instances/templates/instances/settings_tab.html:884
|
||||
#: instances/templates/instances/settings_tab.html:883
|
||||
msgid "VM details"
|
||||
msgstr "虚拟机详情"
|
||||
|
||||
#: instances/templates/instances/settings_tab.html:885
|
||||
msgid "A title and description to identify the VM."
|
||||
msgstr "用于识别虚拟机的标题和描述。"
|
||||
|
||||
#: instances/templates/instances/settings_tab.html:902
|
||||
msgid "Use as a template"
|
||||
msgstr "用作模板"
|
||||
|
||||
#: instances/templates/instances/settings_tab.html:904
|
||||
msgid ""
|
||||
"A template is a VM to clone: it is not counted in quotas and cannot be "
|
||||
"started."
|
||||
msgstr "模板是用于克隆的虚拟机:不计入配额,且无法启动。"
|
||||
|
||||
#: instances/templates/instances/settings_tab.html:909
|
||||
msgid "Use as a template"
|
||||
msgstr "用作模板"
|
||||
|
||||
#: instances/templates/instances/settings_tab.html:912
|
||||
#: instances/templates/instances/settings_tab.html:905
|
||||
msgid "Only administrators and staff can change this."
|
||||
msgstr "只有管理员和工作人员可以更改此项。"
|
||||
|
||||
#: instances/templates/instances/settings_tab.html:922
|
||||
msgid "Primary video model"
|
||||
msgstr "主显卡型号"
|
||||
#: instances/templates/instances/settings_tab.html:912
|
||||
msgid "Devices the guest sees"
|
||||
msgstr "客户机看到的设备"
|
||||
|
||||
#: instances/templates/instances/settings_tab.html:923
|
||||
#: instances/templates/instances/settings_tab.html:913
|
||||
msgid "Changes apply from the next start; the guest agent's at once."
|
||||
msgstr "更改在下次启动时生效;客户机代理的更改立即生效。"
|
||||
|
||||
#: instances/templates/instances/settings_tab.html:922
|
||||
msgid "The graphics device the guest sees."
|
||||
msgstr "客户机看到的图形设备。"
|
||||
|
||||
#: instances/templates/instances/settings_tab.html:944
|
||||
msgid "Random number generator"
|
||||
msgstr "随机数生成器"
|
||||
|
||||
#: instances/templates/instances/settings_tab.html:945
|
||||
msgid ""
|
||||
"A virtio device that feeds the guest's entropy from the host: a new VM does "
|
||||
"not wait for it at boot. From the next start."
|
||||
msgstr "一个从主机为客户机提供熵的 virtio 设备:新虚拟机启动时无需等待熵。下次启动时生效。"
|
||||
|
||||
#: instances/templates/instances/settings_tab.html:951
|
||||
#: instances/templates/instances/settings_tab.html:925
|
||||
msgid "Virtio RNG"
|
||||
msgstr "Virtio RNG"
|
||||
|
||||
#: instances/templates/instances/settings_tab.html:954
|
||||
#: instances/templates/instances/settings_tab.html:930
|
||||
msgid "The VM has its own RNG device: change it in the XML editor."
|
||||
msgstr "该虚拟机有自定义的 RNG 设备:请在 XML 编辑器中更改。"
|
||||
|
||||
#: instances/templates/instances/settings_tab.html:962
|
||||
msgid "TPM"
|
||||
msgstr "TPM"
|
||||
|
||||
#: instances/templates/instances/settings_tab.html:963
|
||||
#: instances/templates/instances/settings_tab.html:930
|
||||
msgid ""
|
||||
"An emulated TPM 2.0, as Windows 11 needs with UEFI Secure Boot. Its state "
|
||||
"stays on the host until the VM is destroyed: a TPM added again has it back. "
|
||||
"From the next start."
|
||||
msgstr ""
|
||||
"模拟的 TPM 2.0,Windows 11 配合 UEFI 安全启动时需要。其状态保留在主机上,直到虚拟机被销毁:再次添加 TPM "
|
||||
"时会恢复该状态。下次启动时生效。"
|
||||
"Feeds the guest's entropy from the host, so a new VM does not wait for it at "
|
||||
"boot."
|
||||
msgstr "从主机为客户机提供熵,新虚拟机启动时无需等待。"
|
||||
|
||||
#: instances/templates/instances/settings_tab.html:972
|
||||
#: instances/templates/instances/settings_tab.html:939
|
||||
msgid "The VM has its own TPM: change it in the XML editor."
|
||||
msgstr "该虚拟机有自定义的 TPM:请在 XML 编辑器中更改。"
|
||||
|
||||
#: instances/templates/instances/settings_tab.html:974
|
||||
#: instances/templates/instances/settings_tab.html:940
|
||||
msgid "This host offers no TPM 2.0: install swtpm on it."
|
||||
msgstr "此主机不提供 TPM 2.0:请在其上安装 swtpm。"
|
||||
|
||||
#: instances/templates/instances/settings_tab.html:982
|
||||
#: instances/templates/instances/settings_tab.html:941
|
||||
msgid ""
|
||||
"Turned off, its state stays on the host until the VM is destroyed; turned on "
|
||||
"again, it is back."
|
||||
msgstr "关闭后,其状态保留在主机上,直到虚拟机被销毁;再次开启时会恢复。"
|
||||
|
||||
#: instances/templates/instances/settings_tab.html:942
|
||||
msgid "Windows 11 needs it, with UEFI Secure Boot."
|
||||
msgstr "Windows 11 需要它,并需 UEFI 安全启动。"
|
||||
|
||||
#: instances/templates/instances/settings_tab.html:951
|
||||
msgid "The channel to the agent in the guest: a running VM gets it at once."
|
||||
msgstr "通往客户机内代理的通道:运行中的虚拟机会立即获得。"
|
||||
|
||||
#: instances/templates/instances/settings_tab.html:952
|
||||
msgid "VM not running"
|
||||
msgstr "虚拟机未运行"
|
||||
|
||||
#: instances/templates/instances/settings_tab.html:953
|
||||
msgid "No channel"
|
||||
msgstr "无通道"
|
||||
|
||||
#: instances/templates/instances/settings_tab.html:955
|
||||
msgid "Not connected: is the agent installed and running in the guest?"
|
||||
msgstr "未连接:客户机中是否已安装并运行代理?"
|
||||
|
||||
#: instances/templates/instances/settings_tab.html:960
|
||||
msgid "When the guest crashes"
|
||||
msgstr "客户机崩溃时"
|
||||
|
||||
#: instances/templates/instances/settings_tab.html:983
|
||||
msgid ""
|
||||
"For a crash the guest reports, not a hang. Stop keeps a VM that crashes again"
|
||||
" and again down for a look. From the next start."
|
||||
msgstr "适用于客户机报告的崩溃,而非挂起。“停止”会让反复崩溃的虚拟机保持停止状态以便排查。下次启动时生效。"
|
||||
|
||||
#: instances/templates/instances/settings_tab.html:990
|
||||
#: instances/templates/instances/settings_tab.html:965
|
||||
msgid "Restart"
|
||||
msgstr "重启"
|
||||
|
||||
#: instances/templates/instances/settings_tab.html:991
|
||||
#: instances/templates/instances/settings_tab.html:967
|
||||
#: interfaces/templates/interface.html:16 networks/templates/network.html:16
|
||||
#: storages/templates/storage.html:18
|
||||
msgid "Stop"
|
||||
msgstr "停止"
|
||||
|
||||
#: instances/templates/instances/settings_tab.html:999
|
||||
#: instances/templates/instances/settings_tab.html:969
|
||||
msgid ""
|
||||
"For a crash the guest reports, not a hang. Stop keeps a VM that crashes again"
|
||||
" and again down for a look. From the next start."
|
||||
msgstr "适用于客户机报告的崩溃,而非挂起。“停止”会让反复崩溃的虚拟机保持停止状态以便排查。下次启动时生效。"
|
||||
|
||||
#: instances/templates/instances/settings_tab.html:971
|
||||
#, python-format
|
||||
msgid "%(action)s: change it in the XML editor."
|
||||
msgstr "%(action)s:请在 XML 编辑器中更改。"
|
||||
|
||||
#: instances/templates/instances/settings_tab.html:1007
|
||||
msgid "QEMU guest agent"
|
||||
msgstr "QEMU 客户机代理"
|
||||
|
||||
#: instances/templates/instances/settings_tab.html:1008
|
||||
msgid "The channel to the agent in the guest: a running VM gets it at once."
|
||||
msgstr "通往客户机内代理的通道:运行中的虚拟机会立即获得。"
|
||||
|
||||
#: instances/templates/instances/settings_tab.html:1009
|
||||
msgid "Agent"
|
||||
msgstr "代理"
|
||||
|
||||
#: instances/templates/instances/settings_tab.html:1010
|
||||
msgid "VM not running"
|
||||
msgstr "虚拟机未运行"
|
||||
|
||||
#: instances/templates/instances/settings_tab.html:1011
|
||||
msgid "No channel"
|
||||
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
|
||||
msgid "Snapshots"
|
||||
msgstr "快照"
|
||||
|
|
|
|||
|
|
@ -132,6 +132,17 @@ th[aria-sort="ascending"]:not([data-sort-method="none"])::after {
|
|||
/* the access tab's two login buttons line up */
|
||||
.access-act { min-width: 9rem; }
|
||||
|
||||
/* the options tab: one row per device the guest sees, its name, its control and a note */
|
||||
.option-row {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
align-items: center;
|
||||
column-gap: 1rem;
|
||||
row-gap: .25rem;
|
||||
padding: .6rem 0;
|
||||
}
|
||||
.option-name { flex: 0 0 8rem; }
|
||||
|
||||
/* the resize tab: one cell per vCPU up to the maximum, filled when on; memory now within its maximum */
|
||||
.vcpu-cell {
|
||||
display: inline-flex;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue