From c247a7a3f0480b13d994e10c674b106619458ba5 Mon Sep 17 00:00:00 2001 From: catborise Date: Tue, 3 Nov 2026 19:15:43 +0300 Subject: [PATCH] feat(instances): the Power tab shows the VM's state and where each action takes it The tab put Power Off and Suspend, then Power Cycle and Force Off, in joined button groups with a paragraph under each, so which sentence told which button was left to the reader, and the two power cuts looked like one control as large as the rest. Now the tab shows the three states a VM moves between, Active, Suspended and Off, the current one marked, and under each the action that takes the VM there with one line on what it does. The power cuts are small outlined buttons on a line of their own with one warning; their confirmations stay. A state outside the three (shutting down, crashed) is named above them. The test of the tab now finds the outlined power-cut buttons, which its class match missed. --- instances/states.py | 2 + instances/templates/instances/power_tab.html | 105 +-- instances/tests/test_page_controls.py | 19 +- instances/views.py | 3 +- locale/tr/LC_MESSAGES/django.mo | Bin 191451 -> 190758 bytes locale/tr/LC_MESSAGES/django.po | 589 ++++++++------- locale/zh/LC_MESSAGES/django.mo | Bin 178916 -> 178286 bytes locale/zh/LC_MESSAGES/django.po | 725 ++++++++----------- static/css/webvirtcloud.css | 10 + 9 files changed, 694 insertions(+), 759 deletions(-) diff --git a/instances/states.py b/instances/states.py index 404e92e0..6cd90943 100644 --- a/instances/states.py +++ b/instances/states.py @@ -19,6 +19,8 @@ STATES = { UNKNOWN = (_("Unknown"), "secondary") # the VM cannot be read RUNNING = {"suspend", "poweroff", "powercycle", "force_off", "console"} +# the states the power tab shows as its strip: active, blocked, suspended, off, PM suspended +POWER_STATES = (1, 2, 3, 5, 7) STATE_ACTIONS = { 1: RUNNING, 2: RUNNING, diff --git a/instances/templates/instances/power_tab.html b/instances/templates/instances/power_tab.html index 688863ea..6479bdac 100644 --- a/instances/templates/instances/power_tab.html +++ b/instances/templates/instances/power_tab.html @@ -4,54 +4,75 @@ {% if not can_power %}

{% trans "Only the owners of this instance and administrators can change its power state." %}

{% else %} - {# the actions the VM's state allows this user (states.allowed_actions): those that keep the guest's data, and those that cut the power #} + {# the three states a VM moves between, the current one marked; under each, the action that takes the VM there #} {% vm_state instance.status as state %}
-

{% trans "Power" %} · {{ state.0 }}

- {% if "poweroff" in power_actions or "suspend" in power_actions or "resume" in power_actions or "poweron" in power_actions or "force_off" in power_actions or "powercycle" in power_actions %} -
- {% if "poweroff" in power_actions or "suspend" in power_actions or "resume" in power_actions or "poweron" in power_actions %} -
{% csrf_token %} -
- {% if "poweron" in power_actions %}{% endif %} - {% if "poweroff" in power_actions %}{% endif %} - {% if "resume" in power_actions %}{% endif %} - {% if "suspend" in power_actions %}{% endif %} -
-

- {% if "poweron" in power_actions %}{% trans "Power On starts the VM." %}{% endif %} - {% if "poweroff" in power_actions %}{% trans "Power Off asks the guest to shut down; the guest decides." %}{% endif %} - {% if "resume" in power_actions %}{% trans "Resume lets the paused VM run on." %}{% endif %} - {% if "suspend" in power_actions %}{% trans "Suspend pauses its vCPUs; the VM stays in memory." %}{% endif %} -

-
- {% endif %} - {% if "force_off" in power_actions or "powercycle" in power_actions %} -
{% csrf_token %} -
- {% if "powercycle" in power_actions %} - - {% endif %} - {% if "force_off" in power_actions %} - + {% if instance.status not in power_states %} +

{% blocktrans with state=state.0 %}The VM's state: {{ state }}{% endblocktrans %}

+ {% endif %} + {% csrf_token %} +
+
+
+ {% if instance.status == 1 or instance.status == 2 %} + {% trans "Active" %}{% trans "now" %} + {% else %} + {% trans "Active" %} {% endif %}
-

- {% trans "These cut the power: what the guest has not written to disk is lost." %} - {% if "powercycle" in power_actions %}{% trans "Power Cycle then starts the VM again, with the settings pending its next start." %}{% endif %} -

- - {% endif %} + {% if "poweron" in power_actions %} + +

{% trans "Starts the VM." %}

+ {% elif "resume" in power_actions %} + +

{% trans "Lets it run on." %}

+ {% endif %} +
+
+
+ {% if instance.status == 3 or instance.status == 7 %} + {% trans "Suspended" %}{% trans "now" %} + {% else %} + {% trans "Suspended" %} + {% endif %} +
+ {% if "suspend" in power_actions %} + +

{% trans "Pauses it; it stays in memory." %}

+ {% elif instance.status == 3 and not power_actions %} +

{% trans "An administrator can resume it." %}

+ {% endif %} +
+
+
+ {% if instance.status == 5 %} + {% trans "Off" %}{% trans "now" %} + {% else %} + {% trans "Off" %} + {% endif %} +
+ {% if "poweroff" in power_actions %} + +

{% trans "Asks the guest to shut down." %}

+ {% elif instance.status == 5 and instance.is_template %} +

{% trans "A template is not started: clone it to make a VM." %}

+ {% endif %} +
- {% elif instance.status == 3 %} -

{% trans "The VM is paused. An administrator can resume it." %}

- {% elif instance.status == 5 and instance.is_template %} -

{% trans "A template is not started: clone it to make a VM." %}

- {% else %} -

{% trans "There is no power action for the VM in this state." %}

+ + {% if "force_off" in power_actions or "powercycle" in power_actions %} +
{% csrf_token %} + {% trans "A power cut: what the guest has not written to disk is lost." %} + {% if "force_off" in power_actions %} + + {% endif %} + {% if "powercycle" in power_actions %} + + {% endif %} +
{% endif %}
diff --git a/instances/tests/test_page_controls.py b/instances/tests/test_page_controls.py index afcc8650..a08c547c 100644 --- a/instances/tests/test_page_controls.py +++ b/instances/tests/test_page_controls.py @@ -208,19 +208,32 @@ class PageControlsTestCase(PageControls, TestCase): def test_the_power_tab_offers_the_state_s_actions_and_confirms_a_power_cut(self): admin = get_user_model().objects.create_superuser("power_admin", "pa@example.com", "x") owner = self.user("power_owner", owner={}) - for user, status, names in ((admin, 1, ["poweroff", "suspend", "powercycle", "powerforce"]), + # each action under the state it leads to (active, suspended, off), the power cut ones after them + for user, status, names in ((admin, 1, ["suspend", "poweroff", "powerforce", "powercycle"]), (admin, 3, ["resume", "powerforce"]), (owner, 3, []), (admin, 5, ["poweron"])): with self.subTest(user=user.username, status=status): self.controls(user, status=status) (tab,) = lxml_html.fromstring(self.last_page).xpath("//div[@id='power']") self.assertEqual(tab.xpath(".//button/@name"), names) # the power-cut actions ask first - self.assertTrue(all(b.get("data-confirm") for b in tab.xpath(".//button[contains(@class, 'btn-danger')]"))) + danger = tab.xpath(".//button[contains(@class, 'danger')]") + self.assertEqual(len(danger), len({"powerforce", "powercycle"} & set(names))) + self.assertTrue(all(b.get("data-confirm") for b in danger)) if user == owner: - self.assertIn("The VM is paused. An administrator can resume it.", tab.text_content()) + self.assertIn("An administrator can resume it.", tab.text_content()) if status == 5: self.assertEqual(tab.xpath(".//form/@data-please-wait"), [""]) + def test_the_power_tab_marks_the_current_state_or_names_another(self): + admin = get_user_model().objects.create_superuser("power_strip_admin", "ps@example.com", "x") + for status, now in ((1, "Active"), (3, "Suspended"), (5, "Off"), (6, None)): + with self.subTest(status=status): + self.controls(admin, status=status) + (tab,) = lxml_html.fromstring(self.last_page).xpath("//div[@id='power']") + marked = [s.text_content() for s in tab.xpath(".//span[@class='fw-semibold']")] + self.assertEqual(marked, [now] if now else []) + self.assertEqual("The VM's state: Crashed" in tab.text_content(), now is None) + def test_a_running_paused_or_shut_off_vm_can_be_cloned(self): changer = self.user("vm_cloner", perms=("clone_instances",), owner={"is_change": True}) for status, enabled in ((1, True), (3, True), (5, True), (4, False)): diff --git a/instances/views.py b/instances/views.py index eed36682..07346efc 100755 --- a/instances/views.py +++ b/instances/views.py @@ -67,7 +67,7 @@ from . import addresses, report, utils from .api.serializers import DestroyOptionsSerializer from .forms import ConsoleForm, FlavorForm, NewVMForm from .models import Flavor -from .states import STATES, UNKNOWN, allowed_actions, state_label +from .states import POWER_STATES, STATES, UNKNOWN, allowed_actions, state_label # the VM page waits this long (seconds) for the compute's drbdadm status DRBD_STATUS_TIMEOUT = 10 @@ -295,6 +295,7 @@ def _instance_page(request, pk, instance, compute): can_open_console = utils.can_open_console(request.user, instance) can_power = request.user.is_superuser or userinstance is not None power_actions = allowed_actions(request.user, instance, instance.status) + power_states = POWER_STATES # the power tab names any other state above its strip # a remote viewer on the user's computer reaches a VNC or SPICE console that listens beyond the host's loopback vdi_reachable = instance.console_type in ("vnc", "spice") and not util.is_loopback(instance.console_listener_address) # root's password and keys change in a shut-off VM's disk (gstfsd on the host), or through a running VM's agent diff --git a/locale/tr/LC_MESSAGES/django.mo b/locale/tr/LC_MESSAGES/django.mo index 9c4bfc615f229fb11143ebef81458d1966df4a76..2d20bf0093902ef78dd3589ada3bd72c3900cf27 100644 GIT binary patch delta 43027 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 mvqUNp<#v-cGpW79joEv1O4EhU8$, 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" "Language: tr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -406,8 +405,8 @@ msgstr "API anahtarı oluşturuldu" #: accounts/templates/api_token_created.html:9 msgid "" -"Copy the token now: it is not shown again. Anyone who has it can use the " -"REST API as you." +"Copy the token now: it is not shown again. Anyone who has it can use the REST" +" API as you." msgstr "" "Anahtarı şimdi kopyalayın: bir daha gösterilmez. Ona sahip olan herkes REST " "API'yi sizin adınıza kullanabilir." @@ -528,9 +527,9 @@ msgid "" "or one that may have leaked." msgstr "" "Anahtar, bir betiğin ya da aracın REST API'yi parolanız veya OTP olmadan " -"sizin adınıza kullanmasını sağlar: Authorization: Token <token> olarak gönderin. Parola değişikliği anahtarları silmez: artık " -"kullanmadığınız ya da sızmış olabilecek bir anahtarı silin." +"sizin adınıza kullanmasını sağlar: Authorization: Token " +"<token> olarak gönderin. Parola değişikliği anahtarları silmez: " +"artık kullanmadığınız ya da sızmış olabilecek bir anahtarı silin." #: accounts/templates/profile.html:73 #: storages/templates/create_stg_vol_block.html:69 @@ -644,8 +643,8 @@ msgid "" "Clone the VMs they may change and the templates they may view, within their " "quota" msgstr "" -"Kotası dahilinde, değiştirebildiği sanal makineleri ve görebildiği " -"şablonları klonlama" +"Kotası dahilinde, değiştirebildiği sanal makineleri ve görebildiği şablonları" +" klonlama" #: admin/forms.py:20 msgid "Open a console without the VM's console password" @@ -864,8 +863,8 @@ msgstr "Kaldırılan Sanal Makineler" #: admin/templates/admin/tombstone_list.html:11 msgid "" -"VMs that vanished from their compute. Their owners come back if the same " -"UUID shows up again before the record expires." +"VMs that vanished from their compute. Their owners come back if the same UUID" +" shows up again before the record expires." msgstr "" "Sunucularından kaybolan sanal makineler. Kayıt süresi dolmadan aynı UUID " "yeniden görünürse sahipleri geri gelir." @@ -1020,6 +1019,8 @@ msgstr "Kullanıcı ara" #: admin/templates/admin/user_list.html:26 #: admin/templates/admin/user_list.html:39 instances/states.py:11 +#: instances/templates/instances/power_tab.html:19 +#: instances/templates/instances/power_tab.html:21 #: interfaces/templates/interface.html:49 networks/templates/network.html:53 #: networks/templates/networks.html:27 storages/templates/storage.html:93 #: storages/templates/storages.html:31 @@ -1432,8 +1433,8 @@ msgstr "Anlık görüntü en az boş alan (GiB)" msgid "" "Free space a storage pool keeps for a snapshot at least, in GiB (0: none)" msgstr "" -"Bir depolama havuzunun anlık görüntü için en az ayırdığı boş alan, GiB " -"olarak (0: yok)" +"Bir depolama havuzunun anlık görüntü için en az ayırdığı boş alan, GiB olarak" +" (0: yok)" #: appsettings/migrations/0018_worker_settings.py:7 msgid "Worker Concurrency" @@ -1811,9 +1812,9 @@ msgstr "gstfsd anahtarı" #: computes/models.py:39 msgid "" -"GSTFSD_KEY in the host's /etc/default/webvirt-gstfsd: the panel sets the " -"root password and SSH key of a shut-off VM with it; empty: they cannot be " -"set there" +"GSTFSD_KEY in the host's /etc/default/webvirt-gstfsd: the panel sets the root" +" password and SSH key of a shut-off VM with it; empty: they cannot be set " +"there" msgstr "" "Sunucudaki /etc/default/webvirt-gstfsd içindeki GSTFSD_KEY: panel kapalı bir " "sanal makinenin root parolasını ve SSH anahtarını bununla ayarlar; boş: bu " @@ -2322,8 +2323,8 @@ msgstr "Şema veya port olmadan bir IP adresi ya da sunucu adı girin" #: computes/validators.py:60 msgid "" -"Enter the 64 hexadecimal characters of GSTFSD_KEY in the host's /etc/default/" -"webvirt-gstfsd" +"Enter the 64 hexadecimal characters of GSTFSD_KEY in the host's " +"/etc/default/webvirt-gstfsd" msgstr "" "Sunucudaki /etc/default/webvirt-gstfsd içindeki GSTFSD_KEY değerinin 64 " "onaltılık karakterini girin" @@ -2512,8 +2513,8 @@ msgid "" msgstr "" "Buraya yazın: sanal makine metni, kendi klavye düzeninin tuşları olarak tuş " "tuş alır; üretici yazılımında, bir kurulum programında veya giriş ekranında " -"da çalışır. Sanal makinenin panosu metni yalnızca sanal makinede pano " -"desteği varsa alır; sanal makinenin kopyaladıkları burada görünür." +"da çalışır. Sanal makinenin panosu metni yalnızca sanal makinede pano desteği" +" varsa alır; sanal makinenin kopyaladıkları burada görünür." #: console/templates/console-vnc.html:106 msgid "The VM's keyboard layout" @@ -2562,8 +2563,8 @@ msgid "" "TLS. Let the console listen on all interfaces in the VM's console settings, " "or add the host as an SSH host." msgstr "" -"Bu konsol yalnızca kendi sunucusunda dinliyor; panel bu sunucuya TCP veya " -"TLS üzerinden ulaşıyor. Sanal makinenin konsol ayarlarında konsolun tüm " +"Bu konsol yalnızca kendi sunucusunda dinliyor; panel bu sunucuya TCP veya TLS" +" üzerinden ulaşıyor. Sanal makinenin konsol ayarlarında konsolun tüm " "arabirimlerde dinlemesini sağlayın ya da sunucuyu SSH sunucusu olarak " "ekleyin." @@ -2735,9 +2736,9 @@ msgstr "libvirt anlık görüntüyü hâlâ birleştiriyor" #: instances/jobs.py:347 msgid "" -"The snapshot is still listed and no merge runs. It cannot be told whether " -"the disks changed; check the VM before deleting the snapshot again or " -"reverting to it." +"The snapshot is still listed and no merge runs. It cannot be told whether the" +" disks changed; check the VM before deleting the snapshot again or reverting " +"to it." msgstr "" "Anlık görüntü hâlâ listede ve çalışan bir birleştirme yok. Disklerin değişip " "değişmediği bilinemiyor; anlık görüntüyü yeniden silmeden ya da ona dönmeden " @@ -2782,8 +2783,8 @@ msgstr "libvirt sanal makineyi hâlâ geri döndürüyor" #: instances/jobs.py:467 msgid "" -"It cannot be told whether the VM was reverted; check it, then revert again " -"or resolve this job." +"It cannot be told whether the VM was reverted; check it, then revert again or" +" resolve this job." msgstr "" "Sanal makinenin geri döndürülüp döndürülmediği bilinemiyor; kontrol edin, " "sonra yeniden geri döndürün ya da bu işi çözün." @@ -2876,7 +2877,7 @@ msgstr "" msgid "Create VM" msgstr "Sanal makine oluştur" -#: instances/jobs.py:746 instances/views.py:2468 +#: instances/jobs.py:746 instances/views.py:2469 msgid "A virtual machine with this name already exists" msgstr "Bu isimde bir sanal makine mevcut" @@ -2978,8 +2979,8 @@ msgstr "Sanal makine kaynak sunucuda kaldı" msgid "" "The VM is on both computes or on neither; check them, then resolve this job." msgstr "" -"Sanal makine ya iki sunucuda da var ya da hiçbirinde yok; kontrol edin, " -"sonra bu işi çözün." +"Sanal makine ya iki sunucuda da var ya da hiçbirinde yok; kontrol edin, sonra" +" bu işi çözün." #: instances/jobs.py:1035 msgid "Move disk" @@ -3109,7 +3110,8 @@ msgstr "Parolasız konsol erişimi yapabilir" msgid "No state" msgstr "Durum yok" -#: instances/states.py:13 +#: instances/states.py:13 instances/templates/instances/power_tab.html:35 +#: instances/templates/instances/power_tab.html:37 msgid "Suspended" msgstr "Duraklatılmış" @@ -3117,7 +3119,9 @@ msgstr "Duraklatılmış" msgid "Shutting down" msgstr "Kapanıyor" -#: instances/states.py:15 interfaces/templates/create_iface_block.html:58 +#: instances/states.py:15 instances/templates/instances/power_tab.html:50 +#: instances/templates/instances/power_tab.html:52 +#: interfaces/templates/create_iface_block.html:58 #: interfaces/templates/interface.html:76 networks/templates/network.html:105 msgid "Off" msgstr "Kapalı" @@ -3244,7 +3248,7 @@ msgid "Disk source" msgstr "Disk kaynağı" #: instances/templates/add_instance_volume.html:21 -#: instances/templates/create_instance_w2.html:134 instances/views.py:2487 +#: instances/templates/create_instance_w2.html:134 instances/views.py:2488 msgid "New disk" msgstr "Yeni disk" @@ -3388,8 +3392,8 @@ msgstr "" msgid "" "Guest agents not read (a paused VM, no answer in time, or an error): %%(n)s." msgstr "" -"Okunamayan konuk ajanları (duraklatılmış sanal makine, zamanında yanıt yok " -"ya da hata): %%(n)s." +"Okunamayan konuk ajanları (duraklatılmış sanal makine, zamanında yanıt yok ya" +" da hata): %%(n)s." #: instances/templates/allinstances.html:80 #, python-format @@ -3616,7 +3620,7 @@ msgstr "Özel CPU modelleri" msgid "Size (GiB)" msgstr "Boyut (GiB)" -#: instances/templates/create_instance_w2.html:161 instances/views.py:2488 +#: instances/templates/create_instance_w2.html:161 instances/views.py:2489 msgid "Existing volumes" msgstr "Mevcut birimler" @@ -3651,7 +3655,7 @@ msgstr "Aygıt" msgid "Remove" msgstr "Kaldır" -#: instances/templates/create_instance_w2.html:194 instances/views.py:2489 +#: instances/templates/create_instance_w2.html:194 instances/views.py:2490 msgid "Clone from template" msgstr "Şablondan klonla" @@ -3799,7 +3803,6 @@ msgid "Instance actions" msgstr "Sanal makine işlemleri" #: instances/templates/instance.html:80 -#: instances/templates/instances/power_tab.html:11 msgid "Power" msgstr "Güç" @@ -3838,7 +3841,7 @@ msgstr "Başlat" #: instances/templates/instance_actions.html:22 #: instances/templates/instance_actions.html:31 -#: instances/templates/instances/power_tab.html:19 +#: instances/templates/instances/power_tab.html:28 msgid "Resume" msgstr "Devam ettir" @@ -3854,12 +3857,12 @@ msgid "More actions" msgstr "Diğer işlemler" #: instances/templates/instance_actions.html:44 -#: instances/templates/instances/power_tab.html:20 +#: instances/templates/instances/power_tab.html:41 msgid "Suspend" msgstr "Duraklat" #: instances/templates/instance_actions.html:50 -#: instances/templates/instances/power_tab.html:39 +#: instances/templates/instances/power_tab.html:69 #, python-format msgid "" "Force off %(name)s? It stops at once, as after a power cut; what the guest " @@ -3873,7 +3876,7 @@ msgid "Force off" msgstr "Zorla kapat" #: instances/templates/instance_actions.html:56 -#: instances/templates/instances/power_tab.html:35 +#: instances/templates/instances/power_tab.html:73 #, python-format msgid "" "Power cycle %(name)s? It stops at once, as after a power cut, and starts " @@ -3922,8 +3925,8 @@ msgstr "VDI uzak görüntüleyicinizi açar; console.vv virt-viewer'ı ayarlar." #: instances/templates/instances/access_tab.html:31 msgid "" -"A remote viewer cannot reach this console: it listens on the host only, or " -"it is a serial one." +"A remote viewer cannot reach this console: it listens on the host only, or it" +" is a serial one." msgstr "" "Uzak görüntüleyici bu konsola ulaşamaz: konsol yalnızca sunucuda dinliyor ya " "da seri konsol." @@ -3932,7 +3935,7 @@ msgstr "" msgid "Start the VM to open its console." msgstr "Konsolunu açmak için sanal makineyi başlatın." -#: instances/templates/instances/access_tab.html:40 instances/views.py:1103 +#: instances/templates/instances/access_tab.html:40 instances/views.py:1104 msgid "Reset root password" msgstr "Root parolasını sıfırla" @@ -3991,9 +3994,9 @@ msgid "" "The VM's definition, saved state and snapshot records are removed. A running " "VM is forced off first; what the guest has not written to disk is lost." msgstr "" -"Sanal makinenin tanımı, kayıtlı durumu ve anlık görüntü kayıtları " -"kaldırılır. Çalışan bir sanal makine önce zorla kapatılır; konuk sistemin " -"diske yazmadıkları kaybolur." +"Sanal makinenin tanımı, kayıtlı durumu ve anlık görüntü kayıtları kaldırılır." +" Çalışan bir sanal makine önce zorla kapatılır; konuk sistemin diske " +"yazmadıkları kaybolur." #: instances/templates/instances/destroy_instance_form.html:13 msgid "What should happen to the files?" @@ -4020,8 +4023,8 @@ msgid "" "They stay with their internal snapshot data; the snapshot records still go " "with the VM." msgstr "" -"Dosyalar iç anlık görüntü verileriyle birlikte kalır; anlık görüntü " -"kayıtları yine de sanal makineyle birlikte silinir." +"Dosyalar iç anlık görüntü verileriyle birlikte kalır; anlık görüntü kayıtları" +" yine de sanal makineyle birlikte silinir." #: instances/templates/instances/destroy_instance_form.html:35 msgid "no file" @@ -4029,9 +4032,9 @@ msgstr "dosya yok" #: instances/templates/instances/destroy_instance_form.html:39 msgid "" -"A file another VM uses on any of the panel's hosts, directly or under its " -"own disk, is kept, and so is the template a disk was made from. If a host " -"cannot be checked, the VM is not destroyed." +"A file another VM uses on any of the panel's hosts, directly or under its own" +" disk, is kept, and so is the template a disk was made from. If a host cannot" +" be checked, the VM is not destroyed." msgstr "" "Panelin herhangi bir sunucusunda başka bir sanal makinenin doğrudan ya da " "kendi diskinin altında kullandığı dosyalar korunur; bir diskin oluşturulduğu " @@ -4064,8 +4067,8 @@ msgstr "Silmeyi gözden geçir" #: instances/templates/instances/destroy_tab.html:10 msgid "The next page shows what goes and lets you keep the disk files." msgstr "" -"Sonraki sayfa neyin silineceğini gösterir ve disk dosyalarını korumanıza " -"izin verir." +"Sonraki sayfa neyin silineceğini gösterir ve disk dosyalarını korumanıza izin" +" verir." #: instances/templates/instances/destroy_tab.html:12 msgid "" @@ -4186,8 +4189,8 @@ msgstr "" #: instances/templates/instances/host_devices_form.html:26 msgid "" "The device is plugged into the running VM at once and kept for its next " -"start; libvirt binds it to vfio-pci. It needs a free slot: on a q35 VM a " -"free pcie-root-port, added while the VM is shut off." +"start; libvirt binds it to vfio-pci. It needs a free slot: on a q35 VM a free" +" pcie-root-port, added while the VM is shut off." msgstr "" "Aygıt çalışan sanal makineye hemen takılır ve bir sonraki başlatma için " "korunur; libvirt onu vfio-pci'ye bağlar. Boş bir yuva gerekir: q35 sanal " @@ -4195,9 +4198,9 @@ msgstr "" #: instances/templates/instances/host_devices_form.html:27 msgid "" -"libvirt binds the device to vfio-pci when the VM starts, and gives it back " -"to the host when the VM stops; a device bound to vfio-pci before stays bound " -"to it." +"libvirt binds the device to vfio-pci when the VM starts, and gives it back to" +" the host when the VM stops; a device bound to vfio-pci before stays bound to" +" it." msgstr "" "libvirt, sanal makine başlarken aygıtı vfio-pci'ye bağlar ve sanal makine " "durduğunda sunucuya geri verir; önceden vfio-pci'ye bağlı olan bir aygıt " @@ -4312,8 +4315,8 @@ msgid "" "A copy is made during the migration and takes as long as the disk's data " "needs. Disks on network storage stay where they are." msgstr "" -"Taşıma sırasında bir kopya oluşturulur ve diskteki verinin gerektirdiği " -"kadar sürer. Ağ depolamadaki diskler oldukları yerde kalır." +"Taşıma sırasında bir kopya oluşturulur ve diskteki verinin gerektirdiği kadar" +" sürer. Ağ depolamadaki diskler oldukları yerde kalır." #: instances/templates/instances/migrate_plan.html:53 msgid "" @@ -4344,8 +4347,8 @@ msgstr "Sunucuda diskin taşınabileceği başka depolama havuzu yok." #: instances/templates/instances/move_disk.html:24 #, python-format msgid "" -"The disk is copied into the pool, a running VM's without stopping it, and " -"the VM uses the copy; %(path)s is deleted then, unless a VM or volume of any " +"The disk is copied into the pool, a running VM's without stopping it, and the" +" VM uses the copy; %(path)s is deleted then, unless a VM or volume of any " "host uses it." msgstr "" "Disk havuza kopyalanır (çalışan bir sanal makinenin diski durdurulmadan) ve " @@ -4415,70 +4418,60 @@ msgstr "" "Bu sanal makinenin güç durumunu yalnızca sahipleri ve yöneticiler " "değiştirebilir." -#: instances/templates/instances/power_tab.html:16 -msgid "Power actions that keep the guest's data" -msgstr "Konuk sistemin verilerini koruyan güç işlemleri" +#: instances/templates/instances/power_tab.html:12 +#, python-format +msgid "The VM's state: %(state)s" +msgstr "VM'in durumu: %(state)s" -#: instances/templates/instances/power_tab.html:17 +#: instances/templates/instances/power_tab.html:19 +#: instances/templates/instances/power_tab.html:35 +#: instances/templates/instances/power_tab.html:50 +msgid "now" +msgstr "şu an" + +#: instances/templates/instances/power_tab.html:25 msgid "Power On" msgstr "Başlat" -#: instances/templates/instances/power_tab.html:18 +#: instances/templates/instances/power_tab.html:26 +msgid "Starts the VM." +msgstr "VM'i başlatır." + +#: instances/templates/instances/power_tab.html:29 +msgid "Lets it run on." +msgstr "Kaldığı yerden çalışmaya devam eder." + +#: instances/templates/instances/power_tab.html:42 +msgid "Pauses it; it stays in memory." +msgstr "Duraklatır; bellekte kalır." + +#: instances/templates/instances/power_tab.html:44 +msgid "An administrator can resume it." +msgstr "Bir yönetici devam ettirebilir." + +#: instances/templates/instances/power_tab.html:56 msgid "Power Off" msgstr "Kapat" -#: instances/templates/instances/power_tab.html:23 -msgid "Power On starts the VM." -msgstr "Başlat, sanal makineyi başlatır." +#: instances/templates/instances/power_tab.html:57 +msgid "Asks the guest to shut down." +msgstr "Konuktan kapanmasını ister." -#: instances/templates/instances/power_tab.html:24 -msgid "Power Off asks the guest to shut down; the guest decides." -msgstr "Kapat, konuk sistemden kapanmasını ister; karar konuk sisteme aittir." - -#: instances/templates/instances/power_tab.html:25 -msgid "Resume lets the paused VM run on." -msgstr "" -"Devam ettir, duraklatılmış sanal makinenin çalışmayı sürdürmesini sağlar." - -#: instances/templates/instances/power_tab.html:26 -msgid "Suspend pauses its vCPUs; the VM stays in memory." -msgstr "Duraklat, vCPU'larını duraklatır; sanal makine bellekte kalır." - -#: instances/templates/instances/power_tab.html:32 -msgid "Power actions that cut the power" -msgstr "Gücü kesen güç işlemleri" - -#: instances/templates/instances/power_tab.html:35 -msgid "Power Cycle" -msgstr "Yeniden başlat" - -#: instances/templates/instances/power_tab.html:39 -msgid "Force Off" -msgstr "Zorla Kapat" - -#: instances/templates/instances/power_tab.html:43 -msgid "These cut the power: what the guest has not written to disk is lost." -msgstr "Bunlar gücü keser: konuk sistemin diske yazmadıkları kaybolur." - -#: instances/templates/instances/power_tab.html:44 -msgid "" -"Power Cycle then starts the VM again, with the settings pending its next " -"start." -msgstr "" -"Yeniden başlat, ardından sanal makineyi bir sonraki başlatmayı bekleyen " -"ayarlarla yeniden başlatır." - -#: instances/templates/instances/power_tab.html:50 -msgid "The VM is paused. An administrator can resume it." -msgstr "Sanal makine duraklatıldı. Bir yönetici devam ettirebilir." - -#: instances/templates/instances/power_tab.html:52 +#: instances/templates/instances/power_tab.html:59 msgid "A template is not started: clone it to make a VM." msgstr "Şablon başlatılmaz: sanal makine oluşturmak için klonlayın." -#: instances/templates/instances/power_tab.html:54 -msgid "There is no power action for the VM in this state." -msgstr "Bu durumdaki sanal makine için güç işlemi yok." +#: instances/templates/instances/power_tab.html:66 +msgid "A power cut: what the guest has not written to disk is lost." +msgstr "Güç kesintisi: konuğun diske yazmadıkları kaybolur." + +#: instances/templates/instances/power_tab.html:69 +msgid "Force Off" +msgstr "Zorla Kapat" + +#: instances/templates/instances/power_tab.html:73 +msgid "Power Cycle" +msgstr "Yeniden başlat" #: instances/templates/instances/resize_tab.html:33 msgid "CPU allocation" @@ -4526,8 +4519,8 @@ 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 "" -"Bir vCPU'yu şimdi açın veya kapatın; sonraki başlatmada da öyle kalır. vCPU " -"0 açık kalır." +"Bir vCPU'yu şimdi açın veya kapatın; sonraki başlatmada da öyle kalır. vCPU 0" +" açık kalır." #: instances/templates/instances/resize_tab.html:73 msgid "A paused VM cannot let one go: resume it to turn vCPUs off." @@ -4605,8 +4598,8 @@ msgstr "%(total)s bellek" #: instances/templates/instances/resize_tab.html:139 msgid "" -"The current memory changes now, up to the maximum; shut the VM down to " -"change the maximum." +"The current memory changes now, up to the maximum; shut the VM down to change" +" the maximum." msgstr "" "Geçerli bellek, azami değere kadar hemen değişir; azami değeri değiştirmek " "için sanal makineyi kapatın." @@ -4631,9 +4624,8 @@ msgstr "Diskleri büyüt" #: instances/templates/instances/resize_tab.html:170 msgid "" -"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." +"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." msgstr "" "GiB cinsinden, diskin boyutundan büyük yeni bir boyut; boş bırakılırsa disk " "olduğu gibi kalır. Diskler sanal makine çalışırken büyür; ardından konuk " @@ -4758,8 +4750,8 @@ msgstr "Çıkarılabilir ortam" #: instances/templates/instances/settings_tab.html:158 msgid "" -"Read the storage pools again: an ISO image copied to a pool by hand is " -"listed then" +"Read the storage pools again: an ISO image copied to a pool by hand is listed" +" then" msgstr "" "Depolama havuzlarını yeniden oku: bir havuza elle kopyalanan ISO imajı " "böylece listelenir" @@ -4911,8 +4903,8 @@ msgstr "gelen, giden" #: instances/templates/instances/settings_tab.html:356 msgid "" -"Average and peak are in KiB/s, burst in KiB. A running VM gets a change " -"after it is powered off and on." +"Average and peak are in KiB/s, burst in KiB. A running VM gets a change after" +" it is powered off and on." msgstr "" "Ortalama ve tepe KiB/s, ani yük KiB cinsindendir. Çalışan bir sanal makine " "değişikliği kapatılıp açıldıktan sonra alır." @@ -5154,8 +5146,8 @@ msgstr "Sıkıştırılmış" #: instances/templates/instances/settings_tab.html:593 msgid "Compresses the memory sent: less network, more CPU on both hosts." msgstr "" -"Gönderilen belleği sıkıştırır: daha az ağ trafiği, iki sunucuda da daha " -"fazla CPU." +"Gönderilen belleği sıkıştırır: daha az ağ trafiği, iki sunucuda da daha fazla" +" CPU." #: instances/templates/instances/settings_tab.html:598 msgid "Unsafe migration" @@ -5175,8 +5167,8 @@ msgstr "Kopyalanan disklerin kaynak dosyalarını sil" #: instances/templates/instances/settings_tab.html:608 msgid "" -"After a migration that copied disks, their files on the source host go. " -"Disks on shared storage stay." +"After a migration that copied disks, their files on the source host go. Disks" +" on shared storage stay." msgstr "" "Diskleri kopyalayan bir taşımadan sonra kaynak sunucudaki dosyaları silinir. " "Paylaşımlı depolamadaki diskler kalır." @@ -5189,8 +5181,8 @@ msgstr "Taşıma arka planda bir iş olarak çalışır." msgid "" "This is the definition for the VM's next start; a saved change applies then." msgstr "" -"Bu, sanal makinenin sonraki başlatmasındaki tanımdır; kaydedilen değişiklik " -"o zaman uygulanır." +"Bu, sanal makinenin sonraki başlatmasındaki tanımdır; kaydedilen değişiklik o" +" zaman uygulanır." #: instances/templates/instances/settings_tab.html:638 msgid "Review changes" @@ -5458,11 +5450,11 @@ msgstr "Konuk sistem çöktüğünde" #: instances/templates/instances/settings_tab.html:995 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." +"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 "" -"Konuk sistemin bildirdiği bir çökme içindir, donma için değil. Durdur, " -"tekrar tekrar çöken bir sanal makineyi incelemek için kapalı tutar. Sonraki " +"Konuk sistemin bildirdiği bir çökme içindir, donma için değil. Durdur, tekrar" +" tekrar çöken bir sanal makineyi incelemek için kapalı tutar. Sonraki " "başlatmadan itibaren." #: instances/templates/instances/settings_tab.html:1002 @@ -5633,8 +5625,8 @@ msgstr "geçerli" #, python-format msgid "Revert to snapshot %(name)s? Changes made since it are lost." msgstr "" -"%(name)s anlık görüntüsüne dönülsün mü? O zamandan beri yapılan " -"değişiklikler kaybolur." +"%(name)s anlık görüntüsüne dönülsün mü? O zamandan beri yapılan değişiklikler" +" kaybolur." #: instances/templates/instances/snapshots_tab.html:89 msgid "" @@ -5655,8 +5647,8 @@ msgid "" "These disks are detached; their writes since the current snapshot are " "discarded and their files are kept:" msgstr "" -"Bu diskler ayrılır; geçerli anlık görüntüden beri yapılan yazmaları atılır " -"ve dosyaları korunur:" +"Bu diskler ayrılır; geçerli anlık görüntüden beri yapılan yazmaları atılır ve" +" dosyaları korunur:" #: instances/templates/instances/snapshots_tab.html:89 msgid "Firmware variables (NVRAM) are not restored." @@ -5786,8 +5778,8 @@ msgstr "Disk dosyaları %(host)s üzerinde denetlenemiyor: %(err)s" #: instances/utils.py:79 msgid "" -"The quota cannot be checked because a host of your virtual machines cannot " -"be reached. Nothing was changed." +"The quota cannot be checked because a host of your virtual machines cannot be" +" reached. Nothing was changed." msgstr "" "Sanal makinelerinizin bir sunucusuna erişilemediği için kota denetlenemiyor. " "Hiçbir şey değiştirilmedi." @@ -5852,16 +5844,16 @@ msgstr "'%(name)s' sanal makinesinin sunucusuna şu anda erişilemiyor." msgid " Jobs on it can be followed under Jobs in the menu." msgstr " Üzerindeki işler menüdeki İşler bölümünden izlenebilir." -#: instances/views.py:361 +#: instances/views.py:362 msgid "There is no other host to migrate to." msgstr "Taşınacak başka bir sunucu yok." -#: instances/views.py:363 +#: instances/views.py:364 msgid "A VM migrates when it is running, paused or shut off." msgstr "" "Sanal makine çalışırken, duraklatılmışken ya da kapalıyken taşınabilir." -#: instances/views.py:365 +#: instances/views.py:366 msgid "" "A VM with snapshots cannot be migrated: its snapshots stay on this host. " "Delete them first." @@ -5869,19 +5861,19 @@ msgstr "" "Anlık görüntüsü olan bir sanal makine taşınamaz: anlık görüntüleri bu " "sunucuda kalır. Önce onları silin." -#: instances/views.py:367 +#: instances/views.py:368 msgid "" -"A VM with host devices cannot be migrated: the destination may not have " -"them. Remove them first." +"A VM with host devices cannot be migrated: the destination may not have them." +" Remove them first." msgstr "" "Sunucu aygıtları olan bir sanal makine taşınamaz: hedefte bu aygıtlar " "olmayabilir. Önce onları kaldırın." -#: instances/views.py:633 +#: instances/views.py:634 msgid "The VM was moved meanwhile; try again." msgstr "Sanal makine bu arada taşındı; yeniden deneyin." -#: instances/views.py:745 +#: instances/views.py:746 msgid "" "The running VM has no free PCI slot for another disk on this bus: choose the " "scsi bus if the VM has a SCSI controller, or shut the VM down and add the " @@ -5894,194 +5886,194 @@ msgstr "" "yuvaları ekle, sonraki başlatmadan itibaren ona boş yuvalar verir. Yeni bir " "birim havuzunda kalır, mevcut birim olarak eklenebilir." -#: instances/views.py:749 +#: instances/views.py:750 msgid "" "The running VM has no free PCI slot for the SCSI controller the disk needs: " -"shut the VM down and add the disk then; Add PCIe slots on the Disks tab " -"gives it free ones from its next start. A new volume stays in its pool, to " -"attach as an existing volume." +"shut the VM down and add the disk then; Add PCIe slots on the Disks tab gives" +" it free ones from its next start. A new volume stays in its pool, to attach " +"as an existing volume." msgstr "" "Çalışan sanal makinenin diskin gerektirdiği SCSI denetleyicisi için boş PCI " "yuvası yok: sanal makineyi kapatıp diski sonra ekleyin; Diskler sekmesindeki " "PCIe yuvaları ekle, sonraki başlatmadan itibaren ona boş yuvalar verir. Yeni " "bir birim havuzunda kalır, mevcut birim olarak eklenebilir." -#: instances/views.py:767 +#: instances/views.py:768 #, python-format msgid "Invalid disk options: %(options)s" msgstr "Geçersiz disk seçenekleri: %(options)s" -#: instances/views.py:777 instances/views.py:792 +#: instances/views.py:778 instances/views.py:793 msgid "Templates cannot be started." msgstr "Şablon makineler başlatılamaz." -#: instances/views.py:888 +#: instances/views.py:889 #, python-format msgid "Disk %(path)s was kept: a disk file that stays needs it" msgstr "%(path)s diski korundu: kalan bir disk dosyası ona ihtiyaç duyuyor" -#: instances/views.py:894 +#: instances/views.py:895 #, python-format msgid "The VM is removed, but disk %(path)s was not deleted: %(err)s" msgstr "Sanal makine kaldırıldı, ancak %(path)s diski silinmedi: %(err)s" -#: instances/views.py:903 +#: instances/views.py:904 #, python-format msgid "Disk %(path)s is used by another VM and was kept" msgstr "" "%(path)s diski başka bir sanal makine tarafından kullanılıyor ve korundu" -#: instances/views.py:1025 +#: instances/views.py:1026 #, python-format msgid "Set the gstfsd key of %(compute)s first (Computes, edit the host)" msgstr "" -"Önce %(compute)s sunucusunun gstfsd anahtarını ayarlayın (Sunucular, " -"sunucuyu düzenle)" +"Önce %(compute)s sunucusunun gstfsd anahtarını ayarlayın (Sunucular, sunucuyu" +" düzenle)" -#: instances/views.py:1031 instances/views.py:1045 instances/views.py:1054 +#: instances/views.py:1032 instances/views.py:1046 instances/views.py:1055 #, python-format msgid "gstfsd error: %(err)s" msgstr "gstfsd hatası: %(err)s" -#: instances/views.py:1055 +#: instances/views.py:1056 msgid "the reply is not signed with the key" msgstr "yanıt anahtarla imzalanmamış" -#: instances/views.py:1063 +#: instances/views.py:1064 msgid "Shut the VM down, or start its QEMU guest agent, and try again" msgstr "" "Sanal makineyi kapatın ya da QEMU konuk ajanını başlatın ve yeniden deneyin" -#: instances/views.py:1076 +#: instances/views.py:1077 msgid "The change may still be made when the agent answers again." msgstr "Ajan yeniden yanıt verdiğinde değişiklik yine de yapılabilir." -#: instances/views.py:1107 +#: instances/views.py:1108 msgid "Enter a password" msgstr "Bir parola girin" -#: instances/views.py:1121 +#: instances/views.py:1122 msgid "Select an SSH public key" msgstr "Bir SSH açık anahtarı seçin" -#: instances/views.py:1143 +#: instances/views.py:1144 #, python-format msgid "Installed new SSH public key %(keyname)s" msgstr "Yeni %(keyname)s SSH açık anahtarı yüklendi" -#: instances/views.py:1163 +#: instances/views.py:1164 msgid "Enter a whole number of vCPUs" msgstr "vCPU sayısı için bir tam sayı girin" -#: instances/views.py:1167 +#: instances/views.py:1168 msgid "Shut off the VM to change its vCPUs" msgstr "vCPU'larını değiştirmek için sanal makineyi kapatın" -#: instances/views.py:1170 +#: instances/views.py:1171 msgid "The current vCPUs cannot be more than the maximum" msgstr "Geçerli vCPU sayısı en fazla değerden büyük olamaz" -#: instances/views.py:1177 +#: instances/views.py:1178 #, python-format msgid "%(quota)s: cannot resize the CPU of '%(instance_name)s'." msgstr "%(quota)s: '%(instance_name)s' CPU'su yeniden boyutlandırılamıyor." -#: instances/views.py:1185 +#: instances/views.py:1186 #, python-format msgid "vCPUs set to %(cur)s (maximum %(max)s)" msgstr "vCPU sayısı %(cur)s olarak ayarlandı (en fazla %(max)s)" -#: instances/views.py:1204 +#: instances/views.py:1205 msgid "Enter a whole number for memory" msgstr "Bellek için bir tam sayı girin" -#: instances/views.py:1207 +#: instances/views.py:1208 msgid "The current memory cannot be more than the maximum" msgstr "Geçerli bellek en fazla değerden büyük olamaz" -#: instances/views.py:1211 +#: instances/views.py:1212 #, python-format msgid "%(quota)s: cannot resize the memory of '%(instance_name)s'." msgstr "%(quota)s: '%(instance_name)s' belleği yeniden boyutlandırılamıyor." -#: instances/views.py:1217 +#: instances/views.py:1218 #, python-format msgid "Memory set to %(cur)s MiB (maximum %(max)s MiB)" msgstr "Bellek %(cur)s MiB olarak ayarlandı (en fazla %(max)s MiB)" -#: instances/views.py:1237 +#: instances/views.py:1238 msgid "Enter disk sizes as whole GiB" msgstr "Disk boyutlarını tam GiB olarak girin" -#: instances/views.py:1241 +#: instances/views.py:1242 #, python-format msgid "%(dev)s is %(size)s: a disk cannot shrink" msgstr "%(dev)s boyutu %(size)s: disk küçültülemez" -#: instances/views.py:1249 +#: instances/views.py:1250 msgid "No disks were selected or valid for resizing." msgstr "Boyutlandırma için seçilmiş ya da geçerli disk yok." -#: instances/views.py:1258 +#: instances/views.py:1259 #, python-format msgid "%(quota)s: cannot resize the disks of '%(instance_name)s'." msgstr "%(quota)s: '%(instance_name)s' diskleri yeniden boyutlandırılamıyor." -#: instances/views.py:1270 +#: instances/views.py:1271 #, python-format msgid "The storage pool of %(dev)s cannot resize its volumes" msgstr "%(dev)s diskinin depolama havuzu birimlerini boyutlandıramaz" -#: instances/views.py:1272 +#: instances/views.py:1273 #, python-format msgid "Disk is resized: %(dev)s" msgstr "Disk boyutu değiştirildi: %(dev)s" -#: instances/views.py:1366 +#: instances/views.py:1367 msgid "The VM's machine has no PCIe slots to add" msgstr "Sanal makinenin makine tipinde eklenecek PCIe yuvası yok" -#: instances/views.py:1371 +#: instances/views.py:1372 #, python-format msgid "%(count)s PCIe slots added" msgstr "%(count)s PCIe yuvası eklendi" -#: instances/views.py:1373 +#: instances/views.py:1374 #, python-format msgid "%(count)s PCIe slots added: the VM gets them at its next start" msgstr "" "%(count)s PCIe yuvası eklendi: sanal makine bunları sonraki başlatmasında " "alır" -#: instances/views.py:1504 +#: instances/views.py:1505 msgid "Volume changes are applied. But it will be activated after shutdown" msgstr "" "Birim değişiklikleri uygulandı. Ama yeniden başlatıldıktan sonra uygulanacak" -#: instances/views.py:1509 +#: instances/views.py:1510 msgid "Volume is changed successfully." msgstr "Birim başarıyla değiştirildi." -#: instances/views.py:1527 +#: instances/views.py:1528 #, python-format msgid "Disk %(dev)s is not a storage volume of this instance" msgstr "%(dev)s diski bu sanal makinenin bir depolama birimi değil" -#: instances/views.py:1534 +#: instances/views.py:1535 #, python-format msgid "Disk %(dev)s has a pending change; delete it once the VM is shut down" msgstr "" "%(dev)s diskinin bekleyen bir değişikliği var; sanal makine kapatıldığında " "silin" -#: instances/views.py:1549 +#: instances/views.py:1550 #, python-format msgid "Volume %(vol)s is used by another VM; detach it instead" msgstr "" "%(vol)s birimi başka bir sanal makine tarafından kullanılıyor; onun yerine " "ayırın" -#: instances/views.py:1561 +#: instances/views.py:1562 #, python-format msgid "" "The guest has not released disk %(dev)s yet; volume %(vol)s was kept. Delete " @@ -6090,57 +6082,57 @@ msgstr "" "Konuk sistem %(dev)s diskini henüz bırakmadı; %(vol)s birimi korundu. Sanal " "makine kapatıldığında depolama havuzundan silin." -#: instances/views.py:1572 +#: instances/views.py:1573 #, python-format msgid "Disk %(dev)s was detached, but its volume was kept: %(err)s" msgstr "%(dev)s diski ayrıldı, ancak birimi korundu: %(err)s" -#: instances/views.py:1598 +#: instances/views.py:1599 #, python-format msgid "This VM cannot take a CD-ROM on the %(bus)s bus now" msgstr "Bu sanal makineye şu anda %(bus)s veri yolunda CD-ROM eklenemez" -#: instances/views.py:1601 +#: instances/views.py:1602 msgid "A USB CD-ROM needs an ISO image: libvirt has no empty USB drive" msgstr "USB CD-ROM bir ISO imajı ister: libvirt boş USB sürücü desteklemiyor" -#: instances/views.py:1682 +#: instances/views.py:1683 #, python-format msgid "Pool %(pool)s was not read again: %(err)s" msgstr "%(pool)s havuzu yeniden okunamadı: %(err)s" -#: instances/views.py:1703 +#: instances/views.py:1704 #, python-format msgid "Snapshot was not deleted: %(err)s" msgstr "Anlık görüntü silinmedi: %(err)s" -#: instances/views.py:1818 +#: instances/views.py:1819 msgid "Check at least one device to boot from." msgstr "Önyükleme için en az bir aygıt işaretleyin." -#: instances/views.py:1832 +#: instances/views.py:1833 msgid "Boot order changed. It applies at the next start." msgstr "Ön yükleme sırası değiştirildi. Sonraki başlatmada uygulanır." -#: instances/views.py:1834 +#: instances/views.py:1835 msgid "Boot order changed successfully." msgstr "Ön yükleme sırası başarıyla değiştirildi." -#: instances/views.py:1854 +#: instances/views.py:1855 msgid "The XML is empty" msgstr "XML boş" -#: instances/views.py:1858 instances/views.py:2478 +#: instances/views.py:1859 instances/views.py:2479 #, python-format msgid "The XML is not well-formed: %(error)s" msgstr "XML düzgün biçimlendirilmemiş: %(error)s" -#: instances/views.py:1860 +#: instances/views.py:1861 #, python-format msgid "The XML must keep the VM's UUID %(uuid)s." msgstr "XML, sanal makinenin %(uuid)s UUID'sini korumalıdır." -#: instances/views.py:1864 +#: instances/views.py:1865 msgid "" "The definition has changed since the editor was opened. Reload the page to " "edit the current one." @@ -6148,35 +6140,35 @@ msgstr "" "Düzenleyici açıldığından beri tanım değişti. Geçerli tanımı düzenlemek için " "sayfayı yeniden yükleyin." -#: instances/views.py:1876 +#: instances/views.py:1877 msgid "The XML definition was saved." msgstr "XML tanımı kaydedildi." -#: instances/views.py:1878 +#: instances/views.py:1879 msgid "The XML definition was saved; the VM uses it from its next start." msgstr "" "XML tanımı kaydedildi; sanal makine onu sonraki başlatmasından itibaren " "kullanır." -#: instances/views.py:1959 +#: instances/views.py:1960 msgid "Select one network interface to change" msgstr "Değiştirilecek bir ağ arabirimi seçin" -#: instances/views.py:1997 +#: instances/views.py:1998 msgid "Network Device Config is changed. Please shutdown instance to activate." msgstr "" "Ağ aygıtı yapılandırması değiştirildi. Aktifleştirmek için lütfen sanal " "makineyi kapatın." -#: instances/views.py:1999 +#: instances/views.py:2000 msgid "Network device changed" msgstr "Ağ aygıtı değiştirildi" -#: instances/views.py:2011 +#: instances/views.py:2012 msgid "No network selected" msgstr "Ağ seçilmedi" -#: instances/views.py:2031 +#: instances/views.py:2032 msgid "" "The running VM has no free PCI slot for another network device: shut it down " "and add the device then; Add PCIe slots on the Disks tab gives it free ones " @@ -6186,44 +6178,44 @@ msgstr "" "aygıtı sonra ekleyin; Diskler sekmesindeki PCIe yuvaları ekle, sonraki " "başlatmadan itibaren ona boş yuvalar verir." -#: instances/views.py:2072 instances/views.py:2078 +#: instances/views.py:2073 instances/views.py:2079 msgid "The VM has it" msgstr "Sanal makinede var" -#: instances/views.py:2109 +#: instances/views.py:2110 #, python-format msgid "The host has no USB device %(device)s" msgstr "Sunucuda %(device)s USB aygıtı yok" -#: instances/views.py:2130 +#: instances/views.py:2131 #, python-format msgid "The host has no PCI device %(device)s" msgstr "Sunucuda %(device)s PCI aygıtı yok" -#: instances/views.py:2148 +#: instances/views.py:2149 #, python-format msgid "" -"Removal of PCI device %(address)s requested: the guest has not let it go " -"yet; it stays in the running VM until it does or the VM stops." +"Removal of PCI device %(address)s requested: the guest has not let it go yet;" +" it stays in the running VM until it does or the VM stops." msgstr "" "%(address)s PCI aygıtının kaldırılması istendi: konuk sistem aygıtı henüz " "bırakmadı; bırakana ya da sanal makine durana kadar çalışan sanal makinede " "kalır." -#: instances/views.py:2193 instances/views.py:2223 +#: instances/views.py:2194 instances/views.py:2224 msgid "Select a network interface and a QoS direction" msgstr "Bir ağ arabirimi ve bir QoS yönü seçin" -#: instances/views.py:2196 vrtManager/network.py:459 +#: instances/views.py:2197 vrtManager/network.py:459 msgid "QoS rates must be whole numbers" msgstr "QoS hızları tam sayı olmalıdır" -#: instances/views.py:2203 networks/views.py:229 +#: instances/views.py:2204 networks/views.py:229 #, python-format msgid "%(qos_dir)s QoS is set" msgstr "%(qos_dir)s QoS ayarlandı" -#: instances/views.py:2208 +#: instances/views.py:2209 #, python-format msgid "" "%(qos_dir)s QoS is set. A running VM gets it after it is powered off and on." @@ -6231,12 +6223,12 @@ msgstr "" "%(qos_dir)s QoS ayarlandı. Çalışan bir sanal makine, kapatılıp açıldıktan " "sonra bunu alır." -#: instances/views.py:2230 networks/views.py:255 +#: instances/views.py:2231 networks/views.py:255 #, python-format msgid "%(qos_dir)s QoS is deleted" msgstr "%(qos_dir)s QoS silindi" -#: instances/views.py:2235 +#: instances/views.py:2236 #, python-format msgid "" "%(qos_dir)s QoS is deleted. A running VM keeps the old limit until it is " @@ -6245,91 +6237,91 @@ msgstr "" "%(qos_dir)s QoS silindi. Çalışan bir sanal makine, kapatılıp açılana kadar " "eski sınırı korur." -#: instances/views.py:2263 +#: instances/views.py:2264 msgid "Only one owner is allowed and the one already added" msgstr "Sadece bir sahibe izin verilmiştir ve bir sahip zaten eklenmiş" -#: instances/views.py:2265 +#: instances/views.py:2266 #, python-format msgid "%(user)s is already an owner" msgstr "%(user)s zaten bir sahip" -#: instances/views.py:2309 +#: instances/views.py:2310 #, python-format msgid "Console settings were not saved: %(errors)s" msgstr "Konsol ayarları kaydedilmedi: %(errors)s" -#: instances/views.py:2331 +#: instances/views.py:2332 msgid "" "Error setting console password. You should check that your instance have an " "graphic device." msgstr "" -"Konsol parolası ayarlanırken hata oluştu. Sanal makinenin bir grafik " -"aygıtına sahip olduğundan emin olunuz." +"Konsol parolası ayarlanırken hata oluştu. Sanal makinenin bir grafik aygıtına" +" sahip olduğundan emin olunuz." -#: instances/views.py:2378 +#: instances/views.py:2379 msgid "Shut the VM down to change whether it is a template." msgstr "Şablon olup olmadığını değiştirmek için sanal makineyi kapatın." -#: instances/views.py:2384 +#: instances/views.py:2385 #, python-format msgid "%(quota)s: '%(instance_name)s' stays a template." msgstr "%(quota)s: '%(instance_name)s' şablon olarak kalıyor." -#: instances/views.py:2466 +#: instances/views.py:2467 msgid "The XML has no name" msgstr "XML'de ad yok" -#: instances/views.py:2480 webvirtcloud/middleware.py:79 +#: instances/views.py:2481 webvirtcloud/middleware.py:79 #, python-format msgid "libvirt Error - %(exception)s" msgstr "libvirt Hatası - %(exception)s" -#: instances/views.py:2487 +#: instances/views.py:2488 msgid "An empty disk of the size you set" msgstr "Belirlediğiniz boyutta boş bir disk" -#: instances/views.py:2488 +#: instances/views.py:2489 msgid "Volumes already in a pool" msgstr "Bir havuzda zaten bulunan birimler" -#: instances/views.py:2489 +#: instances/views.py:2490 msgid "A copy of a template volume" msgstr "Bir şablon biriminin kopyası" -#: instances/views.py:2578 +#: instances/views.py:2579 msgid "You haven't defined any storage pools" msgstr "Hiç bir depolama havuzu tanımlamadınız" -#: instances/views.py:2580 +#: instances/views.py:2581 msgid "You haven't defined any network pools" msgstr "Hiç bir ağ havuzu tanımlamadınız" -#: instances/views.py:2643 +#: instances/views.py:2644 msgid "Flavor Created" msgstr "Flavor Oluşturuldu" -#: instances/views.py:2651 +#: instances/views.py:2652 msgid "Create Flavor" msgstr "Kullanıcı Oluştur" -#: instances/views.py:2666 +#: instances/views.py:2667 msgid "Flavor Updated" msgstr "Flavor Güncellendi" -#: instances/views.py:2672 +#: instances/views.py:2673 msgid "Update Flavor" msgstr "Flavor Güncelle" -#: instances/views.py:2684 +#: instances/views.py:2685 msgid "Flavor Deleted" msgstr "Flavor Silindi" -#: instances/views.py:2690 +#: instances/views.py:2691 msgid "Only the size template goes; VMs made from it keep their size." msgstr "" -"Yalnızca boyut şablonu silinir; ondan oluşturulan sanal makineler " -"boyutlarını korur." +"Yalnızca boyut şablonu silinir; ondan oluşturulan sanal makineler boyutlarını" +" korur." #: interfaces/forms.py:53 msgid "The IPv4 address is not valid (e.g. 192.0.2.10/24)" @@ -6395,8 +6387,8 @@ msgid "" "An ethernet interface configures a device of this host in no bridge, bond or " "VLAN" msgstr "" -"Ethernet arabirimi, bu sunucunun hiçbir köprü, bond ya da VLAN içinde " -"olmayan bir aygıtını yapılandırır" +"Ethernet arabirimi, bu sunucunun hiçbir köprü, bond ya da VLAN içinde olmayan" +" bir aygıtını yapılandırır" #: interfaces/models.py:10 msgid "No interface name has been entered" @@ -6488,8 +6480,8 @@ msgid "" "The device's own addresses go: the bridge takes the ones below, and " "connections through the device drop while it is rebuilt." msgstr "" -"Aygıtın kendi adresleri kaldırılır: köprü aşağıdakileri alır ve aygıt " -"yeniden oluşturulurken onun üzerinden geçen bağlantılar kopar." +"Aygıtın kendi adresleri kaldırılır: köprü aşağıdakileri alır ve aygıt yeniden" +" oluşturulurken onun üzerinden geçen bağlantılar kopar." #: interfaces/templates/create_iface_block.html:87 msgid "The host has every device defined already; a device's page shows it." @@ -6867,8 +6859,8 @@ msgstr "Macvtap" msgid "" "VMs share an interface of the host; the host cannot reach them through it." msgstr "" -"Sanal makineler sunucunun bir arabirimini paylaşır; sunucu onlara bu " -"arabirim üzerinden erişemez." +"Sanal makineler sunucunun bir arabirimini paylaşır; sunucu onlara bu arabirim" +" üzerinden erişemez." #: networks/templates/create_net_block.html:42 msgid "Network name" @@ -6966,9 +6958,8 @@ msgid "" "Disable autostart of network %(name)s? After the host restarts it stays " "stopped, and VMs that use it do not start." msgstr "" -"%(name)s ağının otomatik başlatması kapatılsın mı? Sunucu yeniden " -"başladıktan sonra ağ durdurulmuş kalır ve onu kullanan sanal makineler " -"başlamaz." +"%(name)s ağının otomatik başlatması kapatılsın mı? Sunucu yeniden başladıktan" +" sonra ağ durdurulmuş kalır ve onu kullanan sanal makineler başlamaz." #: networks/templates/network.html:27 storages/templates/storage.html:31 msgid "Disable autostart" @@ -7049,8 +7040,8 @@ msgstr "%(address)s için eylemler" #: networks/templates/network.html:168 #, python-format msgid "" -"Delete the fixed address %(address)s? The VM may get another address when " -"its lease ends." +"Delete the fixed address %(address)s? The VM may get another address when its" +" lease ends." msgstr "" "%(address)s sabit adresi silinsin mi? Sanal makine, kirası bittiğinde başka " "bir adres alabilir." @@ -7158,11 +7149,11 @@ msgstr "Ağın XML'ini değiştir" #: networks/templates/network.html:332 msgid "" -"The saved definition: a running network takes a change when it is stopped " -"and started again." +"The saved definition: a running network takes a change when it is stopped and" +" started again." msgstr "" -"Kayıtlı tanım: çalışan bir ağ, değişikliği durdurulup yeniden " -"başlatıldığında alır." +"Kayıtlı tanım: çalışan bir ağ, değişikliği durdurulup yeniden başlatıldığında" +" alır." #: networks/templates/network.html:334 msgid "Network XML" @@ -7285,8 +7276,8 @@ msgstr "Ağ XML i değiştirildi." #: networks/views.py:222 #, python-format msgid "" -"%(qos_dir)s QoS is updated. Network XML is changed. Stop and start network " -"to activate new config" +"%(qos_dir)s QoS is updated. Network XML is changed. Stop and start network to" +" activate new config" msgstr "" "%(qos_dir)s QoS is updated.Ağ XML i değiştirildi. \\ Aktifleştirmek için " "durdurun ve yeniden başlatın." @@ -7294,8 +7285,8 @@ msgstr "" #: networks/views.py:247 #, python-format msgid "" -"%(qos_dir)s QoS is deleted. Network XML is changed. Stop and start network " -"to activate new config" +"%(qos_dir)s QoS is deleted. Network XML is changed. Stop and start network to" +" activate new config" msgstr "" "%(qos_dir)s QoS silindi. Ağ XML'i değiştirildi. Yeni yapılandırmayı " "etkinleştirmek için ağı durdurup başlatın" @@ -7361,8 +7352,8 @@ msgstr "Veriyolu / aygıt" #: nodedevs/templates/nodedevs.html:92 msgid "" -"One of several of this model: a VM that names the model alone may take any " -"of them." +"One of several of this model: a VM that names the model alone may take any of" +" them." msgstr "" "Bu modelden birkaç taneden biri: yalnızca modeli belirten bir sanal makine " "bunlardan herhangi birini alabilir." @@ -7830,8 +7821,8 @@ msgstr "Bu kaynakta kısa bir işlem sürüyor; birazdan yeniden deneyin." #: operations/utils.py:160 #, python-format msgid "" -"%(label)s is %(state)s on this resource (started by %(user)s, %(since)s " -"ago); see the Jobs page." +"%(label)s is %(state)s on this resource (started by %(user)s, %(since)s ago);" +" see the Jobs page." msgstr "" "%(label)s bu kaynakta %(state)s (%(user)s başlattı, %(since)s önce); İşler " "sayfasına bakın." @@ -8196,8 +8187,8 @@ msgstr "%(pool)s havuzu için eylemler" #: storages/templates/storage.html:18 #, python-format msgid "" -"Stop pool %(name)s? Its files stay, but until it is started again its " -"volumes cannot be managed and VMs with disks in it may not start." +"Stop pool %(name)s? Its files stay, but until it is started again its volumes" +" cannot be managed and VMs with disks in it may not start." msgstr "" "%(name)s havuzu durdurulsun mu? Dosyaları kalır, ancak yeniden başlatılana " "kadar birimleri yönetilemez ve diskleri bu havuzda olan sanal makineler " @@ -8496,8 +8487,8 @@ msgstr "Form gönderilemedi" #: templates/403_csrf.html:11 msgid "" "This submission was rejected because its security check failed. It usually " -"happens when the page was open for a long time, or after signing in or out " -"in another tab." +"happens when the page was open for a long time, or after signing in or out in" +" another tab." msgstr "" "Bu gönderim, güvenlik denetimi başarısız olduğu için reddedildi. Genellikle " "sayfa uzun süre açık kaldığında ya da başka bir sekmede oturum açılıp " @@ -8612,8 +8603,8 @@ msgstr "Ceph parola adı" #: virtsecrets/forms.py:19 msgid "" -"The name a disk or pool names it by, e.g. client.libvirt secret, not the " -"Ceph user; one secret per name." +"The name a disk or pool names it by, e.g. client.libvirt secret, not the Ceph" +" user; one secret per name." msgstr "" "Bir disk veya havuzun ona başvurduğu ad, örn. client.libvirt secret; Ceph " "kullanıcısı değil. Her ad için bir parola." @@ -8796,8 +8787,8 @@ msgstr "Bağlantı kapandı (istemci kapattı)" #: vrtManager/connection.py:139 #, python-format msgid "" -"Connection Failed: %(host)s does not answer: %(requests)s requests still " -"wait for it" +"Connection Failed: %(host)s does not answer: %(requests)s requests still wait" +" for it" msgstr "" "Bağlantı başarısız: %(host)s yanıt vermiyor: %(requests)s istek hâlâ onu " "bekliyor" @@ -8886,8 +8877,8 @@ msgid "" "%(target)s (%(path)s): the destination host does not share it; choose a pool " "to copy it to" msgstr "" -"%(target)s (%(path)s): hedef sunucu bunu paylaşmıyor; kopyalanacağı bir " -"havuz seçin" +"%(target)s (%(path)s): hedef sunucu bunu paylaşmıyor; kopyalanacağı bir havuz" +" seçin" #: vrtManager/instance.py:350 #, python-format @@ -8972,8 +8963,8 @@ msgstr "Sanal makine taşıma sırasında kaynak sunucuda başlatıldı" #: vrtManager/instance.py:572 #, python-format msgid "" -"%(error)s; the VM may now be defined only on the destination host: check " -"both hosts" +"%(error)s; the VM may now be defined only on the destination host: check both" +" hosts" msgstr "" "%(error)s; sanal makine artık yalnızca hedef sunucuda tanımlı olabilir: iki " "sunucuyu da kontrol edin" @@ -8992,8 +8983,8 @@ msgid "" "Snapshot names are 1-64 letters, digits, '.', '_' or '-' and do not start " "with '.'" msgstr "" -"Anlık görüntü adları 1-64 harf, rakam, '.', '_' veya '-' karakterinden " -"oluşur ve '.' ile başlamaz" +"Anlık görüntü adları 1-64 harf, rakam, '.', '_' veya '-' karakterinden oluşur" +" ve '.' ile başlamaz" #: vrtManager/instance.py:1076 msgid "" @@ -9057,8 +9048,8 @@ msgstr "" #: vrtManager/instance.py:1867 msgid "A snapshot with memory is not quiesced; it keeps the whole guest state" msgstr "" -"Bellekli bir anlık görüntüde dosya sistemleri dondurulmaz; tüm konuk " -"durumunu saklar" +"Bellekli bir anlık görüntüde dosya sistemleri dondurulmaz; tüm konuk durumunu" +" saklar" #: vrtManager/instance.py:1869 msgid "Only a running VM's file systems can be frozen" @@ -9122,12 +9113,12 @@ msgstr "" #, python-format msgid "" "Storage pool %(pool)s has %(free).1f GiB free; the snapshot needs %(size).1f " -"GiB (%(percent)g%% of the VM's disks in it, at least %(minimum)g GiB, and " -"the memory if it is saved)" +"GiB (%(percent)g%% of the VM's disks in it, at least %(minimum)g GiB, and the" +" memory if it is saved)" msgstr "" "%(pool)s depolama havuzunda %(free).1f GiB boş alan var; anlık görüntü " -"%(size).1f GiB gerektiriyor (sanal makinenin oradaki disklerinin %%" -"%(percent)g kadarı, en az %(minimum)g GiB, ve kaydediliyorsa bellek)" +"%(size).1f GiB gerektiriyor (sanal makinenin oradaki disklerinin " +"%%%(percent)g kadarı, en az %(minimum)g GiB, ve kaydediliyorsa bellek)" #: vrtManager/instance.py:1974 msgid "" @@ -9233,8 +9224,8 @@ msgstr "Sanal makinenin %(name)s adlı dahili anlık görüntüsü yok" #: vrtManager/instance.py:2290 msgid "The VM has a saved state; start it or remove the saved state first" msgstr "" -"Sanal makinenin kaydedilmiş durumu var; önce başlatın veya kaydedilmiş " -"durumu kaldırın" +"Sanal makinenin kaydedilmiş durumu var; önce başlatın veya kaydedilmiş durumu" +" kaldırın" #: vrtManager/instance.py:2292 msgid "A snapshot job is still running on this VM; try again when it ends" @@ -9306,8 +9297,8 @@ msgstr "%(name)s birimi %(pool)s depolama havuzunda zaten var" #: vrtManager/instance.py:2581 #, python-format msgid "" -"Storage pool %(pool)s has %(free).1f GiB free; the clone needs %(size).1f " -"GiB (the copied disks, plus %(percent)g%% of them, at least %(minimum)g GiB)" +"Storage pool %(pool)s has %(free).1f GiB free; the clone needs %(size).1f GiB" +" (the copied disks, plus %(percent)g%% of them, at least %(minimum)g GiB)" msgstr "" "%(pool)s depolama havuzunda %(free).1f GiB boş alan var; klon %(size).1f GiB " "gerektiriyor (kopyalanan diskler, artı bunların %%%(percent)g kadarı, en az " @@ -9437,8 +9428,8 @@ msgstr "%(iface)s arabirimini silmeden önce durdurun" #: vrtManager/interface.py:273 #, python-format msgid "" -"Bridge %(iface)s has addresses and several members: give the addresses to " -"one of them on the host first" +"Bridge %(iface)s has addresses and several members: give the addresses to one" +" of them on the host first" msgstr "" "%(iface)s köprüsünün adresleri ve birden fazla üyesi var: önce adresleri " "sunucuda üyelerden birine verin" diff --git a/locale/zh/LC_MESSAGES/django.mo b/locale/zh/LC_MESSAGES/django.mo index 70a1bdede7e9e9d72d2bd9e07ad28d92319fb3a3..90529ac1f20ced137b438985d7085251850702f4 100644 GIT binary patch delta 42969 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 MxxI^gBkUjcA7<{;Hvj+t delta 43579 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 QH|m>y@nRWOC&dTif0x!vYXATM diff --git a/locale/zh/LC_MESSAGES/django.po b/locale/zh/LC_MESSAGES/django.po index f617c85b..79836ee7 100644 --- a/locale/zh/LC_MESSAGES/django.po +++ b/locale/zh/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-11-03 15:16+0000\n" +"POT-Creation-Date: 2026-11-03 16:13+0000\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -402,10 +402,9 @@ msgstr "API 令牌已创建" #: accounts/templates/api_token_created.html:9 msgid "" -"Copy the token now: it is not shown again. Anyone who has it can use the " -"REST API as you." -msgstr "" -"请立即复制令牌:它不会再次显示。任何持有它的人都能以你的身份使用 REST API。" +"Copy the token now: it is not shown again. Anyone who has it can use the REST" +" API as you." +msgstr "请立即复制令牌:它不会再次显示。任何持有它的人都能以你的身份使用 REST API。" #: accounts/templates/api_token_created.html:11 msgid "Token" @@ -521,9 +520,8 @@ msgid "" "A password change does not delete tokens: delete a token you no longer use, " "or one that may have leaked." msgstr "" -"令牌可让脚本或工具以你的身份使用 REST API,无需密码或 OTP:以 " -"Authorization: Token <token> 的形式发送。修改密码不会删除" -"令牌:请删除不再使用或可能已泄露的令牌。" +"令牌可让脚本或工具以你的身份使用 REST API,无需密码或 OTP:以 Authorization: Token " +"<token> 的形式发送。修改密码不会删除令牌:请删除不再使用或可能已泄露的令牌。" #: accounts/templates/profile.html:73 #: storages/templates/create_stg_vol_block.html:69 @@ -845,11 +843,9 @@ msgstr "已移除的虚拟机" #: admin/templates/admin/tombstone_list.html:11 msgid "" -"VMs that vanished from their compute. Their owners come back if the same " -"UUID shows up again before the record expires." -msgstr "" -"从其计算节点上消失的虚拟机。若在记录过期前同一 UUID 再次出现,其所有者将恢" -"复。" +"VMs that vanished from their compute. Their owners come back if the same UUID" +" shows up again before the record expires." +msgstr "从其计算节点上消失的虚拟机。若在记录过期前同一 UUID 再次出现,其所有者将恢复。" #: admin/templates/admin/tombstone_list.html:14 msgid "No removed VMs" @@ -997,6 +993,8 @@ msgstr "搜索用户" #: admin/templates/admin/user_list.html:26 #: admin/templates/admin/user_list.html:39 instances/states.py:11 +#: instances/templates/instances/power_tab.html:19 +#: instances/templates/instances/power_tab.html:21 #: interfaces/templates/interface.html:49 networks/templates/network.html:53 #: networks/templates/networks.html:27 storages/templates/storage.html:93 #: storages/templates/storages.html:31 @@ -1387,9 +1385,7 @@ msgstr "快照预留空间百分比" msgid "" "Free space a storage pool keeps for a snapshot, in percent of the VM's disks " "in it (0: none)" -msgstr "" -"存储池为快照预留的可用空间,按虚拟机在该存储池中磁盘大小的百分比计(0:不预" -"留)" +msgstr "存储池为快照预留的可用空间,按虚拟机在该存储池中磁盘大小的百分比计(0:不预留)" #: appsettings/migrations/0017_snapshot_free_space_settings.py:9 msgid "Snapshot Free Min GiB" @@ -1752,9 +1748,7 @@ msgstr "迁移地址" msgid "" "IP address or host name the other hosts send migrating VMs to; empty: the " "address the panel reaches the host at" -msgstr "" -"其他主机向此主机迁移虚拟机时使用的 IP 地址或主机名;留空:使用面板连接该主机" -"的地址" +msgstr "其他主机向此主机迁移虚拟机时使用的 IP 地址或主机名;留空:使用面板连接该主机的地址" #: computes/models.py:33 computes/templates/computes/form.html:34 msgid "gstfsd key" @@ -1762,20 +1756,19 @@ msgstr "gstfsd 密钥" #: computes/models.py:39 msgid "" -"GSTFSD_KEY in the host's /etc/default/webvirt-gstfsd: the panel sets the " -"root password and SSH key of a shut-off VM with it; empty: they cannot be " -"set there" +"GSTFSD_KEY in the host's /etc/default/webvirt-gstfsd: the panel sets the root" +" password and SSH key of a shut-off VM with it; empty: they cannot be set " +"there" msgstr "" -"主机 /etc/default/webvirt-gstfsd 中的 GSTFSD_KEY:面板用它为已关机的虚拟机设" -"置 root 密码和 SSH 密钥;留空:无法在此设置" +"主机 /etc/default/webvirt-gstfsd 中的 GSTFSD_KEY:面板用它为已关机的虚拟机设置 root 密码和 SSH " +"密钥;留空:无法在此设置" #: computes/templates/computes/capacity_line.txt:2 #, python-format msgid "Given to VMs: %(counter)s vCPU (%(ratio)s:1), %(assigned)s memory." msgid_plural "" "Given to VMs: %(counter)s vCPUs (%(ratio)s:1), %(assigned)s memory." -msgstr[0] "" -"已分配给虚拟机:%(counter)s 个 vCPU(%(ratio)s:1),%(assigned)s 内存。" +msgstr[0] "已分配给虚拟机:%(counter)s 个 vCPU(%(ratio)s:1),%(assigned)s 内存。" #: computes/templates/computes/capacity_line.txt:4 #: computes/templates/computes/list.html:95 computes/templates/overview.html:83 @@ -2255,10 +2248,9 @@ msgstr "请输入 IP 地址或主机名,不带协议或端口" #: computes/validators.py:60 msgid "" -"Enter the 64 hexadecimal characters of GSTFSD_KEY in the host's /etc/default/" -"webvirt-gstfsd" -msgstr "" -"请输入主机 /etc/default/webvirt-gstfsd 中 GSTFSD_KEY 的 64 个十六进制字符" +"Enter the 64 hexadecimal characters of GSTFSD_KEY in the host's " +"/etc/default/webvirt-gstfsd" +msgstr "请输入主机 /etc/default/webvirt-gstfsd 中 GSTFSD_KEY 的 64 个十六进制字符" #: computes/views.py:197 #, python-format @@ -2266,9 +2258,7 @@ msgid "" "Its VMs keep running on the host and leave the panel; their owners are kept " "for %(days)s days on the Removed VMs page and come back if the host is added " "again." -msgstr "" -"其虚拟机继续在主机上运行并离开面板;其所有者在“已移除的虚拟机”页面保留 " -"%(days)s 天,如果再次添加该主机则会恢复。" +msgstr "其虚拟机继续在主机上运行并离开面板;其所有者在“已移除的虚拟机”页面保留 %(days)s 天,如果再次添加该主机则会恢复。" #: console/templates/console-menu.html:6 msgid "Send key(s)" @@ -2441,9 +2431,7 @@ msgid "" "in its firmware, an installer or a login prompt. The VM's clipboard takes it " "only with clipboard support in the VM; what the VM copies shows here." msgstr "" -"键入:虚拟机按其键盘布局的按键逐键接收文本,在固件、安装程序或登录提示中同样" -"有效。只有虚拟机内支持剪贴板时,虚拟机的剪贴板才会接收文本;虚拟机复制的内容" -"会显示在这里。" +"键入:虚拟机按其键盘布局的按键逐键接收文本,在固件、安装程序或登录提示中同样有效。只有虚拟机内支持剪贴板时,虚拟机的剪贴板才会接收文本;虚拟机复制的内容会显示在这里。" #: console/templates/console-vnc.html:106 msgid "The VM's keyboard layout" @@ -2489,8 +2477,7 @@ msgid "" "TLS. Let the console listen on all interfaces in the VM's console settings, " "or add the host as an SSH host." msgstr "" -"此控制台只在其主机上监听,而面板通过 TCP 或 TLS 连接该主机。请在虚拟机的控制" -"台设置中让控制台监听所有接口,或将该主机添加为 SSH 主机。" +"此控制台只在其主机上监听,而面板通过 TCP 或 TLS 连接该主机。请在虚拟机的控制台设置中让控制台监听所有接口,或将该主机添加为 SSH 主机。" #: console/views.py:80 msgid "" @@ -2652,12 +2639,10 @@ msgstr "libvirt 仍在合并快照" #: instances/jobs.py:347 msgid "" -"The snapshot is still listed and no merge runs. It cannot be told whether " -"the disks changed; check the VM before deleting the snapshot again or " -"reverting to it." -msgstr "" -"快照仍在列表中,且没有正在运行的合并。无法判断磁盘是否已更改;再次删除该快照" -"或恢复到它之前,请检查虚拟机。" +"The snapshot is still listed and no merge runs. It cannot be told whether the" +" disks changed; check the VM before deleting the snapshot again or reverting " +"to it." +msgstr "快照仍在列表中,且没有正在运行的合并。无法判断磁盘是否已更改;再次删除该快照或恢复到它之前,请检查虚拟机。" #: instances/jobs.py:354 msgid "The VM is no longer on the compute the job ran on" @@ -2698,8 +2683,8 @@ msgstr "libvirt 仍在恢复虚拟机" #: instances/jobs.py:467 msgid "" -"It cannot be told whether the VM was reverted; check it, then revert again " -"or resolve this job." +"It cannot be told whether the VM was reverted; check it, then revert again or" +" resolve this job." msgstr "无法判断虚拟机是否已恢复;请检查后再次恢复,或处理此任务。" #: instances/jobs.py:484 @@ -2711,9 +2696,7 @@ msgstr "虚拟机必须处于运行、暂停或关机状态才能克隆" msgid "" "The guest's file systems could not be thawed (%(error)s); thaw them with: " "virsh domfsthaw %(vm)s" -msgstr "" -"无法解冻客户机的文件系统(%(error)s);请用以下命令解冻:virsh domfsthaw " -"%(vm)s" +msgstr "无法解冻客户机的文件系统(%(error)s);请用以下命令解冻:virsh domfsthaw %(vm)s" #: instances/jobs.py:504 msgid "Clone VM" @@ -2732,9 +2715,7 @@ msgstr "libvirt 没有复制的结果" msgid "" "The copy failed: %(error)s. The guest's file systems could not be thawed " "(%(thaw)s); thaw them with: virsh domfsthaw %(vm)s" -msgstr "" -"复制失败:%(error)s。无法解冻客户机的文件系统(%(thaw)s);请用以下命令解冻:" -"virsh domfsthaw %(vm)s" +msgstr "复制失败:%(error)s。无法解冻客户机的文件系统(%(thaw)s);请用以下命令解冻:virsh domfsthaw %(vm)s" #: instances/jobs.py:616 instances/jobs.py:700 msgid "The copy failed" @@ -2745,8 +2726,7 @@ msgstr "复制失败" msgid "" "The VM is no longer on the compute the job ran on; check these volumes, then " "resolve this job: %(volumes)s" -msgstr "" -"虚拟机已不在运行该任务的计算节点上;请检查这些卷,然后处理此任务:%(volumes)s" +msgstr "虚拟机已不在运行该任务的计算节点上;请检查这些卷,然后处理此任务:%(volumes)s" #: instances/jobs.py:676 #, python-format @@ -2782,7 +2762,7 @@ msgstr "libvirt 没有复制的结果;请检查这些卷,然后处理此任 msgid "Create VM" msgstr "创建虚拟机" -#: instances/jobs.py:746 instances/views.py:2468 +#: instances/jobs.py:746 instances/views.py:2469 msgid "A virtual machine with this name already exists" msgstr "同名虚拟机已存在" @@ -3009,7 +2989,8 @@ msgstr "可无密码访问控制台" msgid "No state" msgstr "无状态" -#: instances/states.py:13 +#: instances/states.py:13 instances/templates/instances/power_tab.html:35 +#: instances/templates/instances/power_tab.html:37 msgid "Suspended" msgstr "已暂停" @@ -3017,7 +2998,9 @@ msgstr "已暂停" msgid "Shutting down" msgstr "正在关机" -#: instances/states.py:15 interfaces/templates/create_iface_block.html:58 +#: instances/states.py:15 instances/templates/instances/power_tab.html:50 +#: instances/templates/instances/power_tab.html:52 +#: interfaces/templates/create_iface_block.html:58 #: interfaces/templates/interface.html:76 networks/templates/network.html:105 msgid "Off" msgstr "关机" @@ -3061,17 +3044,15 @@ msgstr "无介质" msgid "" "Windows sees USB, SATA and IDE drives without a driver; SCSI ones need the " "virtio driver." -msgstr "" -"Windows 无需驱动即可识别 USB、SATA 和 IDE 驱动器;SCSI 驱动器需要 virtio 驱" -"动。" +msgstr "Windows 无需驱动即可识别 USB、SATA 和 IDE 驱动器;SCSI 驱动器需要 virtio 驱动。" #: instances/templates/add_instance_cdrom.html:33 msgid "" "A running VM takes USB and SCSI drives. A USB drive needs an ISO image, is " "detached instead of ejected, and needs a QEMU with usb-bot (not RHEL 9's)." msgstr "" -"运行中的虚拟机可添加 USB 和 SCSI 驱动器。USB 驱动器需要 ISO 镜像,会被分离而" -"不是弹出,并需要支持 usb-bot 的 QEMU(RHEL 9 自带的不支持)。" +"运行中的虚拟机可添加 USB 和 SCSI 驱动器。USB 驱动器需要 ISO 镜像,会被分离而不是弹出,并需要支持 usb-bot 的 " +"QEMU(RHEL 9 自带的不支持)。" #: instances/templates/add_instance_network_block.html:4 #: instances/templates/add_instance_network_block.html:10 @@ -3142,7 +3123,7 @@ msgid "Disk source" msgstr "磁盘来源" #: instances/templates/add_instance_volume.html:21 -#: instances/templates/create_instance_w2.html:134 instances/views.py:2487 +#: instances/templates/create_instance_w2.html:134 instances/views.py:2488 msgid "New disk" msgstr "新磁盘" @@ -3506,7 +3487,7 @@ msgstr "自定义 CPU 型号" msgid "Size (GiB)" msgstr "大小(GiB)" -#: instances/templates/create_instance_w2.html:161 instances/views.py:2488 +#: instances/templates/create_instance_w2.html:161 instances/views.py:2489 msgid "Existing volumes" msgstr "已有卷" @@ -3541,7 +3522,7 @@ msgstr "设备" msgid "Remove" msgstr "移除" -#: instances/templates/create_instance_w2.html:194 instances/views.py:2489 +#: instances/templates/create_instance_w2.html:194 instances/views.py:2490 msgid "Clone from template" msgstr "从模板克隆" @@ -3686,7 +3667,6 @@ msgid "Instance actions" msgstr "虚拟机操作" #: instances/templates/instance.html:80 -#: instances/templates/instances/power_tab.html:11 msgid "Power" msgstr "电源" @@ -3725,7 +3705,7 @@ msgstr "启动" #: instances/templates/instance_actions.html:22 #: instances/templates/instance_actions.html:31 -#: instances/templates/instances/power_tab.html:19 +#: instances/templates/instances/power_tab.html:28 msgid "Resume" msgstr "恢复" @@ -3741,32 +3721,29 @@ msgid "More actions" msgstr "更多操作" #: instances/templates/instance_actions.html:44 -#: instances/templates/instances/power_tab.html:20 +#: instances/templates/instances/power_tab.html:41 msgid "Suspend" msgstr "暂停" #: instances/templates/instance_actions.html:50 -#: instances/templates/instances/power_tab.html:39 +#: instances/templates/instances/power_tab.html:69 #, python-format msgid "" "Force off %(name)s? It stops at once, as after a power cut; what the guest " "has not written to disk is lost." -msgstr "" -"强制关闭 %(name)s?它会像断电一样立即停止;客户机尚未写入磁盘的数据将丢失。" +msgstr "强制关闭 %(name)s?它会像断电一样立即停止;客户机尚未写入磁盘的数据将丢失。" #: instances/templates/instance_actions.html:50 msgid "Force off" msgstr "强制关闭" #: instances/templates/instance_actions.html:56 -#: instances/templates/instances/power_tab.html:35 +#: instances/templates/instances/power_tab.html:73 #, python-format msgid "" "Power cycle %(name)s? It stops at once, as after a power cut, and starts " "again; what the guest has not written to disk is lost." -msgstr "" -"电源重置 %(name)s?它会像断电一样立即停止并重新启动;客户机尚未写入磁盘的数据" -"将丢失。" +msgstr "电源重置 %(name)s?它会像断电一样立即停止并重新启动;客户机尚未写入磁盘的数据将丢失。" #: instances/templates/instance_actions.html:56 msgid "Power cycle" @@ -3807,15 +3784,15 @@ msgstr "VDI 会打开你的远程查看器;console.vv 用于配置 virt-viewer #: instances/templates/instances/access_tab.html:31 msgid "" -"A remote viewer cannot reach this console: it listens on the host only, or " -"it is a serial one." +"A remote viewer cannot reach this console: it listens on the host only, or it" +" is a serial one." msgstr "远程查看器无法连接此控制台:它只在主机上监听,或者是串口控制台。" #: instances/templates/instances/access_tab.html:34 msgid "Start the VM to open its console." msgstr "启动虚拟机后才能打开其控制台。" -#: instances/templates/instances/access_tab.html:40 instances/views.py:1103 +#: instances/templates/instances/access_tab.html:40 instances/views.py:1104 msgid "Reset root password" msgstr "重置 root 密码" @@ -3872,9 +3849,7 @@ msgstr "位于 %(host)s" msgid "" "The VM's definition, saved state and snapshot records are removed. A running " "VM is forced off first; what the guest has not written to disk is lost." -msgstr "" -"虚拟机的定义、已保存状态和快照记录将被删除。运行中的虚拟机会先被强制关闭;客" -"户机尚未写入磁盘的数据将丢失。" +msgstr "虚拟机的定义、已保存状态和快照记录将被删除。运行中的虚拟机会先被强制关闭;客户机尚未写入磁盘的数据将丢失。" #: instances/templates/instances/destroy_instance_form.html:13 msgid "What should happen to the files?" @@ -3906,12 +3881,10 @@ msgstr "无文件" #: instances/templates/instances/destroy_instance_form.html:39 msgid "" -"A file another VM uses on any of the panel's hosts, directly or under its " -"own disk, is kept, and so is the template a disk was made from. If a host " -"cannot be checked, the VM is not destroyed." -msgstr "" -"面板任一主机上其他虚拟机直接使用或作为其磁盘底层使用的文件会被保留,磁盘所基" -"于的模板也会保留。如果某台主机无法检查,则不会销毁该虚拟机。" +"A file another VM uses on any of the panel's hosts, directly or under its own" +" disk, is kept, and so is the template a disk was made from. If a host cannot" +" be checked, the VM is not destroyed." +msgstr "面板任一主机上其他虚拟机直接使用或作为其磁盘底层使用的文件会被保留,磁盘所基于的模板也会保留。如果某台主机无法检查,则不会销毁该虚拟机。" #: instances/templates/instances/destroy_instance_form.html:43 msgid "Delete the NVRAM file (firmware settings). Untick to keep it." @@ -4052,21 +4025,18 @@ msgstr "已暂停或有已保存状态的虚拟机不能更改其 PCI 设备。" #: instances/templates/instances/host_devices_form.html:26 msgid "" "The device is plugged into the running VM at once and kept for its next " -"start; libvirt binds it to vfio-pci. It needs a free slot: on a q35 VM a " -"free pcie-root-port, added while the VM is shut off." +"start; libvirt binds it to vfio-pci. It needs a free slot: on a q35 VM a free" +" pcie-root-port, added while the VM is shut off." msgstr "" -"设备会立即插入运行中的虚拟机,并在下次启动时保留;libvirt 会将其绑定到 vfio-" -"pci。它需要一个空闲插槽:对于 q35 虚拟机,需要一个在虚拟机关机时添加的空闲 " -"pcie-root-port。" +"设备会立即插入运行中的虚拟机,并在下次启动时保留;libvirt 会将其绑定到 vfio-pci。它需要一个空闲插槽:对于 q35 " +"虚拟机,需要一个在虚拟机关机时添加的空闲 pcie-root-port。" #: instances/templates/instances/host_devices_form.html:27 msgid "" -"libvirt binds the device to vfio-pci when the VM starts, and gives it back " -"to the host when the VM stops; a device bound to vfio-pci before stays bound " -"to it." -msgstr "" -"虚拟机启动时 libvirt 会将设备绑定到 vfio-pci,虚拟机停止时再归还给主机;此前" -"已绑定到 vfio-pci 的设备会保持绑定。" +"libvirt binds the device to vfio-pci when the VM starts, and gives it back to" +" the host when the VM stops; a device bound to vfio-pci before stays bound to" +" it." +msgstr "虚拟机启动时 libvirt 会将设备绑定到 vfio-pci,虚拟机停止时再归还给主机;此前已绑定到 vfio-pci 的设备会保持绑定。" #: instances/templates/instances/host_link.html:3 msgid "Location" @@ -4177,9 +4147,7 @@ msgstr "迁移期间会复制一份,耗时取决于磁盘数据量。网络存 msgid "" "A shut-off VM is started paused for a copy, its CPUs never run, and is shut " "off on the destination." -msgstr "" -"已关机的虚拟机会以暂停状态启动以进行复制,其 CPU 从不运行,并在目标主机上处于" -"关机状态。" +msgstr "已关机的虚拟机会以暂停状态启动以进行复制,其 CPU 从不运行,并在目标主机上处于关机状态。" #: instances/templates/instances/move_disk.html:5 msgid "Move to another pool" @@ -4202,12 +4170,10 @@ msgstr "主机上没有其他可移入此磁盘的存储池。" #: instances/templates/instances/move_disk.html:24 #, python-format msgid "" -"The disk is copied into the pool, a running VM's without stopping it, and " -"the VM uses the copy; %(path)s is deleted then, unless a VM or volume of any " +"The disk is copied into the pool, a running VM's without stopping it, and the" +" VM uses the copy; %(path)s is deleted then, unless a VM or volume of any " "host uses it." -msgstr "" -"磁盘会被复制到该存储池(运行中的虚拟机无需停止),虚拟机改用副本;随后删除 " -"%(path)s,除非任一主机上的虚拟机或卷仍在使用它。" +msgstr "磁盘会被复制到该存储池(运行中的虚拟机无需停止),虚拟机改用副本;随后删除 %(path)s,除非任一主机上的虚拟机或卷仍在使用它。" #: instances/templates/instances/nic_qos_form.html:3 #: instances/templates/instances/settings_tab.html:353 @@ -4256,9 +4222,7 @@ msgstr "突发" msgid "" "Remove the %(direction)s limit of %(mac)s? A running VM keeps it until it is " "powered off and on." -msgstr "" -"移除 %(mac)s 的%(direction)s限制?运行中的虚拟机会保持该限制,直到关机后再开" -"机。" +msgstr "移除 %(mac)s 的%(direction)s限制?运行中的虚拟机会保持该限制,直到关机后再开机。" #: instances/templates/instances/nic_qos_form.html:25 msgid "Delete limit" @@ -4270,67 +4234,60 @@ msgid "" "state." msgstr "只有此虚拟机的所有者和管理员可以更改其电源状态。" -#: instances/templates/instances/power_tab.html:16 -msgid "Power actions that keep the guest's data" -msgstr "保留客户机数据的电源操作" +#: instances/templates/instances/power_tab.html:12 +#, python-format +msgid "The VM's state: %(state)s" +msgstr "虚拟机状态:%(state)s" -#: instances/templates/instances/power_tab.html:17 +#: instances/templates/instances/power_tab.html:19 +#: instances/templates/instances/power_tab.html:35 +#: instances/templates/instances/power_tab.html:50 +msgid "now" +msgstr "当前" + +#: instances/templates/instances/power_tab.html:25 msgid "Power On" msgstr "开机" -#: instances/templates/instances/power_tab.html:18 +#: instances/templates/instances/power_tab.html:26 +msgid "Starts the VM." +msgstr "启动虚拟机。" + +#: instances/templates/instances/power_tab.html:29 +msgid "Lets it run on." +msgstr "让它继续运行。" + +#: instances/templates/instances/power_tab.html:42 +msgid "Pauses it; it stays in memory." +msgstr "暂停运行;仍保留在内存中。" + +#: instances/templates/instances/power_tab.html:44 +msgid "An administrator can resume it." +msgstr "管理员可以将其恢复运行。" + +#: instances/templates/instances/power_tab.html:56 msgid "Power Off" msgstr "关机" -#: instances/templates/instances/power_tab.html:23 -msgid "Power On starts the VM." -msgstr "“开机”会启动虚拟机。" +#: instances/templates/instances/power_tab.html:57 +msgid "Asks the guest to shut down." +msgstr "请求客户机关机。" -#: instances/templates/instances/power_tab.html:24 -msgid "Power Off asks the guest to shut down; the guest decides." -msgstr "“关机”会请求客户机关机;是否关机由客户机决定。" - -#: instances/templates/instances/power_tab.html:25 -msgid "Resume lets the paused VM run on." -msgstr "“恢复”让已暂停的虚拟机继续运行。" - -#: instances/templates/instances/power_tab.html:26 -msgid "Suspend pauses its vCPUs; the VM stays in memory." -msgstr "“暂停”会暂停其 vCPU;虚拟机保留在内存中。" - -#: instances/templates/instances/power_tab.html:32 -msgid "Power actions that cut the power" -msgstr "切断电源的电源操作" - -#: instances/templates/instances/power_tab.html:35 -msgid "Power Cycle" -msgstr "电源重置" - -#: instances/templates/instances/power_tab.html:39 -msgid "Force Off" -msgstr "强制关闭" - -#: instances/templates/instances/power_tab.html:43 -msgid "These cut the power: what the guest has not written to disk is lost." -msgstr "这些操作会切断电源:客户机尚未写入磁盘的数据将丢失。" - -#: instances/templates/instances/power_tab.html:44 -msgid "" -"Power Cycle then starts the VM again, with the settings pending its next " -"start." -msgstr "“电源重置”随后会重新启动虚拟机,并应用等待下次启动生效的设置。" - -#: instances/templates/instances/power_tab.html:50 -msgid "The VM is paused. An administrator can resume it." -msgstr "虚拟机已暂停。管理员可以恢复它。" - -#: instances/templates/instances/power_tab.html:52 +#: instances/templates/instances/power_tab.html:59 msgid "A template is not started: clone it to make a VM." msgstr "模板不能启动:请克隆它来创建虚拟机。" -#: instances/templates/instances/power_tab.html:54 -msgid "There is no power action for the VM in this state." -msgstr "虚拟机在此状态下没有可用的电源操作。" +#: instances/templates/instances/power_tab.html:66 +msgid "A power cut: what the guest has not written to disk is lost." +msgstr "相当于断电:客户机尚未写入磁盘的数据将丢失。" + +#: instances/templates/instances/power_tab.html:69 +msgid "Force Off" +msgstr "强制关闭" + +#: instances/templates/instances/power_tab.html:73 +msgid "Power Cycle" +msgstr "电源重置" #: instances/templates/instances/resize_tab.html:33 msgid "CPU allocation" @@ -4451,8 +4408,8 @@ msgstr "%(total)s 内存" #: instances/templates/instances/resize_tab.html:139 msgid "" -"The current memory changes now, up to the maximum; shut the VM down to " -"change the maximum." +"The current memory changes now, up to the maximum; shut the VM down to change" +" the maximum." msgstr "当前内存可立即调整,但不能超过最大值;修改最大值需先关闭虚拟机。" #: instances/templates/instances/resize_tab.html:143 @@ -4475,12 +4432,9 @@ msgstr "扩容磁盘" #: instances/templates/instances/resize_tab.html:170 msgid "" -"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." -msgstr "" -"新大小(GiB),须大于磁盘当前大小;留空则保持不变。磁盘可在虚拟机运行时扩容," -"之后由客户机扩展其分区和文件系统。" +"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." +msgstr "新大小(GiB),须大于磁盘当前大小;留空则保持不变。磁盘可在虚拟机运行时扩容,之后由客户机扩展其分区和文件系统。" #: instances/templates/instances/resize_tab.html:178 #: instances/templates/instances/settings_tab.html:223 @@ -4587,8 +4541,8 @@ msgid "" "The VM is running: CD-ROM drives added now use the USB or SCSI bus. Shut it " "down to detach a SATA or IDE CD-ROM drive, or to detach or delete disks." msgstr "" -"虚拟机正在运行:现在添加的 CD-ROM 驱动器使用 USB 或 SCSI 总线。如需分离 SATA " -"或 IDE CD-ROM 驱动器,或分离、删除磁盘,请先关闭虚拟机。" +"虚拟机正在运行:现在添加的 CD-ROM 驱动器使用 USB 或 SCSI 总线。如需分离 SATA 或 IDE CD-ROM " +"驱动器,或分离、删除磁盘,请先关闭虚拟机。" #: instances/templates/instances/settings_tab.html:154 msgid "Removable media" @@ -4596,8 +4550,8 @@ msgstr "可移动介质" #: instances/templates/instances/settings_tab.html:158 msgid "" -"Read the storage pools again: an ISO image copied to a pool by hand is " -"listed then" +"Read the storage pools again: an ISO image copied to a pool by hand is listed" +" then" msgstr "重新读取存储池:手动复制到存储池的 ISO 镜像随后会列出" #: instances/templates/instances/settings_tab.html:158 @@ -4745,11 +4699,9 @@ msgstr "入站、出站" #: instances/templates/instances/settings_tab.html:356 msgid "" -"Average and peak are in KiB/s, burst in KiB. A running VM gets a change " -"after it is powered off and on." -msgstr "" -"平均值和峰值单位为 KiB/s,突发量单位为 KiB。运行中的虚拟机需关机再开机后才会" -"应用更改。" +"Average and peak are in KiB/s, burst in KiB. A running VM gets a change after" +" it is powered off and on." +msgstr "平均值和峰值单位为 KiB/s,突发量单位为 KiB。运行中的虚拟机需关机再开机后才会应用更改。" #: instances/templates/instances/settings_tab.html:359 msgid "" @@ -4779,9 +4731,7 @@ msgstr "该虚拟机没有网络设备。" msgid "" "Devices of the host given to the VM. The VM starts only on a host that has " "them; it is not migrated while it has them, and its clones get none." -msgstr "" -"分配给虚拟机的主机设备。虚拟机只能在拥有这些设备的主机上启动;持有这些设备时" -"不会被迁移,其克隆也不会获得这些设备。" +msgstr "分配给虚拟机的主机设备。虚拟机只能在拥有这些设备的主机上启动;持有这些设备时不会被迁移,其克隆也不会获得这些设备。" #: instances/templates/instances/settings_tab.html:446 msgid "The host's devices could not be read." @@ -4962,8 +4912,7 @@ msgstr "自动收敛" msgid "" "Slows the guest's CPUs so that a busy VM's live migration can finish. Only " "with Live migration." -msgstr "" -"降低客户机 CPU 速度,使繁忙虚拟机的在线迁移能够完成。仅适用于在线迁移。" +msgstr "降低客户机 CPU 速度,使繁忙虚拟机的在线迁移能够完成。仅适用于在线迁移。" #: instances/templates/instances/settings_tab.html:591 msgid "Compressed" @@ -4989,8 +4938,8 @@ msgstr "删除已复制磁盘的源文件" #: instances/templates/instances/settings_tab.html:608 msgid "" -"After a migration that copied disks, their files on the source host go. " -"Disks on shared storage stay." +"After a migration that copied disks, their files on the source host go. Disks" +" on shared storage stay." msgstr "迁移复制磁盘后,删除其在源主机上的文件。共享存储上的磁盘保留。" #: instances/templates/instances/settings_tab.html:617 @@ -5028,9 +4977,7 @@ msgstr "虚拟机所有者" msgid "" "Every owner can power the VM and open its console. A new owner has no other " "right until it is given one." -msgstr "" -"每个所有者都可以控制虚拟机电源并打开其控制台。新所有者在被授予其他权限之前没" -"有其他权限。" +msgstr "每个所有者都可以控制虚拟机电源并打开其控制台。新所有者在被授予其他权限之前没有其他权限。" #: instances/templates/instances/settings_tab.html:686 msgid "Edit rights" @@ -5105,9 +5052,7 @@ msgstr "源虚拟机:%(name)s" msgid "" "The clone gets a new, empty TPM: keys in this VM's TPM, such as BitLocker's, " "do not come along." -msgstr "" -"克隆将获得一个新的空 TPM:此虚拟机 TPM 中的密钥(例如 BitLocker 的密钥)不会" -"被带过去。" +msgstr "克隆将获得一个新的空 TPM:此虚拟机 TPM 中的密钥(例如 BitLocker 的密钥)不会被带过去。" #: instances/templates/instances/settings_tab.html:774 #: instances/templates/instances/settings_tab.html:787 @@ -5218,9 +5163,7 @@ msgstr "随机数生成器" 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 设备:新虚拟机启动时无需等待熵。下次启动时" -"生效。" +msgstr "一个从主机为客户机提供熵的 virtio 设备:新虚拟机启动时无需等待熵。下次启动时生效。" #: instances/templates/instances/settings_tab.html:963 msgid "Virtio RNG" @@ -5240,8 +5183,8 @@ msgid "" "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 时会恢复该状态。下次启动时生效。" +"模拟的 TPM 2.0,Windows 11 配合 UEFI 安全启动时需要。其状态保留在主机上,直到虚拟机被销毁:再次添加 TPM " +"时会恢复该状态。下次启动时生效。" #: instances/templates/instances/settings_tab.html:984 msgid "The VM has its own TPM: change it in the XML editor." @@ -5257,11 +5200,9 @@ msgstr "客户机崩溃时" #: instances/templates/instances/settings_tab.html:995 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 "" -"适用于客户机报告的崩溃,而非挂起。“停止”会让反复崩溃的虚拟机保持停止状态以便" -"排查。下次启动时生效。" +"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:1002 msgid "Restart" @@ -5378,9 +5319,7 @@ msgstr "创建内部快照" msgid "" "The disks and memory go into the disk files. The VM does not respond while " "its memory is saved, which can take long: avoid it in production." -msgstr "" -"磁盘和内存保存到磁盘文件中。保存内存期间虚拟机不响应,可能耗时较长:生产环境" -"中请避免使用。" +msgstr "磁盘和内存保存到磁盘文件中。保存内存期间虚拟机不响应,可能耗时较长:生产环境中请避免使用。" #: instances/templates/instances/snapshots_tab.html:58 msgid "" @@ -5453,9 +5392,7 @@ msgstr "删除快照 %(name)s?其文件将合并到磁盘中;虚拟机的数 msgid "" "Revert to snapshot %(name)s? Disk changes made since it are lost; a snapshot " "of a running VM starts it again as it was then." -msgstr "" -"恢复到快照 %(name)s?此后的磁盘更改将丢失;运行中虚拟机的快照会使其以当时的状" -"态重新启动。" +msgstr "恢复到快照 %(name)s?此后的磁盘更改将丢失;运行中虚拟机的快照会使其以当时的状态重新启动。" #: instances/templates/instances/snapshots_tab.html:104 #: instances/templates/instances/snapshots_tab.html:116 @@ -5553,8 +5490,8 @@ msgstr "无法在 %(host)s 上检查磁盘文件:%(err)s" #: instances/utils.py:79 msgid "" -"The quota cannot be checked because a host of your virtual machines cannot " -"be reached. Nothing was changed." +"The quota cannot be checked because a host of your virtual machines cannot be" +" reached. Nothing was changed." msgstr "无法检查配额,因为您的某台虚拟机所在主机无法连接。未做任何更改。" #: instances/utils.py:85 @@ -5617,447 +5554,440 @@ msgstr "目前无法连接“%(name)s”所在的主机。" msgid " Jobs on it can be followed under Jobs in the menu." msgstr " 其上的任务可在菜单的“任务”中跟踪。" -#: instances/views.py:361 +#: instances/views.py:362 msgid "There is no other host to migrate to." msgstr "没有其他可迁移到的主机。" -#: instances/views.py:363 +#: instances/views.py:364 msgid "A VM migrates when it is running, paused or shut off." msgstr "虚拟机在运行、暂停或关机状态下均可迁移。" -#: instances/views.py:365 +#: instances/views.py:366 msgid "" "A VM with snapshots cannot be migrated: its snapshots stay on this host. " "Delete them first." msgstr "有快照的虚拟机无法迁移:其快照保留在本主机上。请先删除快照。" -#: instances/views.py:367 +#: instances/views.py:368 msgid "" -"A VM with host devices cannot be migrated: the destination may not have " -"them. Remove them first." +"A VM with host devices cannot be migrated: the destination may not have them." +" Remove them first." msgstr "有主机设备的虚拟机无法迁移:目标主机可能没有这些设备。请先移除它们。" -#: instances/views.py:633 +#: instances/views.py:634 msgid "The VM was moved meanwhile; try again." msgstr "该虚拟机在此期间已被移动;请重试。" -#: instances/views.py:745 +#: instances/views.py:746 msgid "" "The running VM has no free PCI slot for another disk on this bus: choose the " "scsi bus if the VM has a SCSI controller, or shut the VM down and add the " "disk then; Add PCIe slots on the Disks tab gives it free ones from its next " "start. A new volume stays in its pool, to attach as an existing volume." msgstr "" -"运行中的虚拟机在此总线上没有可用 PCI 插槽来添加磁盘:如果虚拟机有 SCSI 控制" -"器,请选择 scsi 总线;或关闭虚拟机后再添加磁盘。“磁盘”选项卡上的“添加 PCIe 插" -"槽”可使其从下次启动起获得可用插槽。新卷会保留在其存储池中,可作为现有卷挂载。" +"运行中的虚拟机在此总线上没有可用 PCI 插槽来添加磁盘:如果虚拟机有 SCSI 控制器,请选择 scsi " +"总线;或关闭虚拟机后再添加磁盘。“磁盘”选项卡上的“添加 PCIe 插槽”可使其从下次启动起获得可用插槽。新卷会保留在其存储池中,可作为现有卷挂载。" -#: instances/views.py:749 +#: instances/views.py:750 msgid "" "The running VM has no free PCI slot for the SCSI controller the disk needs: " -"shut the VM down and add the disk then; Add PCIe slots on the Disks tab " -"gives it free ones from its next start. A new volume stays in its pool, to " -"attach as an existing volume." +"shut the VM down and add the disk then; Add PCIe slots on the Disks tab gives" +" it free ones from its next start. A new volume stays in its pool, to attach " +"as an existing volume." msgstr "" -"运行中的虚拟机没有可用 PCI 插槽来添加磁盘所需的 SCSI 控制器:请关闭虚拟机后再" -"添加磁盘。“磁盘”选项卡上的“添加 PCIe 插槽”可使其从下次启动起获得可用插槽。新" -"卷会保留在其存储池中,可作为现有卷挂载。" +"运行中的虚拟机没有可用 PCI 插槽来添加磁盘所需的 SCSI 控制器:请关闭虚拟机后再添加磁盘。“磁盘”选项卡上的“添加 PCIe " +"插槽”可使其从下次启动起获得可用插槽。新卷会保留在其存储池中,可作为现有卷挂载。" -#: instances/views.py:767 +#: instances/views.py:768 #, python-format msgid "Invalid disk options: %(options)s" msgstr "无效的磁盘选项:%(options)s" -#: instances/views.py:777 instances/views.py:792 +#: instances/views.py:778 instances/views.py:793 msgid "Templates cannot be started." msgstr "模板无法启动。" -#: instances/views.py:888 +#: instances/views.py:889 #, python-format msgid "Disk %(path)s was kept: a disk file that stays needs it" msgstr "磁盘 %(path)s 已保留:某个保留的磁盘文件依赖它" -#: instances/views.py:894 +#: instances/views.py:895 #, python-format msgid "The VM is removed, but disk %(path)s was not deleted: %(err)s" msgstr "虚拟机已删除,但磁盘 %(path)s 未被删除:%(err)s" -#: instances/views.py:903 +#: instances/views.py:904 #, python-format msgid "Disk %(path)s is used by another VM and was kept" msgstr "磁盘 %(path)s 正被另一台虚拟机使用,已保留" -#: instances/views.py:1025 +#: instances/views.py:1026 #, python-format msgid "Set the gstfsd key of %(compute)s first (Computes, edit the host)" msgstr "请先设置 %(compute)s 的 gstfsd 密钥(计算节点,编辑该主机)" -#: instances/views.py:1031 instances/views.py:1045 instances/views.py:1054 +#: instances/views.py:1032 instances/views.py:1046 instances/views.py:1055 #, python-format msgid "gstfsd error: %(err)s" msgstr "gstfsd 错误:%(err)s" -#: instances/views.py:1055 +#: instances/views.py:1056 msgid "the reply is not signed with the key" msgstr "回复未使用该密钥签名" -#: instances/views.py:1063 +#: instances/views.py:1064 msgid "Shut the VM down, or start its QEMU guest agent, and try again" msgstr "请关闭虚拟机,或启动其 QEMU 客户机代理,然后重试" -#: instances/views.py:1076 +#: instances/views.py:1077 msgid "The change may still be made when the agent answers again." msgstr "当代理再次响应时,此更改仍可能生效。" -#: instances/views.py:1107 +#: instances/views.py:1108 msgid "Enter a password" msgstr "请输入密码" -#: instances/views.py:1121 +#: instances/views.py:1122 msgid "Select an SSH public key" msgstr "请选择 SSH 公钥" -#: instances/views.py:1143 +#: instances/views.py:1144 #, python-format msgid "Installed new SSH public key %(keyname)s" msgstr "已安装新的 SSH 公钥 %(keyname)s" -#: instances/views.py:1163 +#: instances/views.py:1164 msgid "Enter a whole number of vCPUs" msgstr "请输入整数个 vCPU" -#: instances/views.py:1167 +#: instances/views.py:1168 msgid "Shut off the VM to change its vCPUs" msgstr "请关闭虚拟机以更改其 vCPU" -#: instances/views.py:1170 +#: instances/views.py:1171 msgid "The current vCPUs cannot be more than the maximum" msgstr "当前 vCPU 数不能超过最大值" -#: instances/views.py:1177 +#: instances/views.py:1178 #, python-format msgid "%(quota)s: cannot resize the CPU of '%(instance_name)s'." msgstr "%(quota)s:无法调整“%(instance_name)s”的 CPU。" -#: instances/views.py:1185 +#: instances/views.py:1186 #, python-format msgid "vCPUs set to %(cur)s (maximum %(max)s)" msgstr "vCPU 已设为 %(cur)s(最大 %(max)s)" -#: instances/views.py:1204 +#: instances/views.py:1205 msgid "Enter a whole number for memory" msgstr "请输入整数内存值" -#: instances/views.py:1207 +#: instances/views.py:1208 msgid "The current memory cannot be more than the maximum" msgstr "当前内存不能超过最大值" -#: instances/views.py:1211 +#: instances/views.py:1212 #, python-format msgid "%(quota)s: cannot resize the memory of '%(instance_name)s'." msgstr "%(quota)s:无法调整“%(instance_name)s”的内存。" -#: instances/views.py:1217 +#: instances/views.py:1218 #, python-format msgid "Memory set to %(cur)s MiB (maximum %(max)s MiB)" msgstr "内存已设为 %(cur)s MiB(最大 %(max)s MiB)" -#: instances/views.py:1237 +#: instances/views.py:1238 msgid "Enter disk sizes as whole GiB" msgstr "请以整数 GiB 输入磁盘大小" -#: instances/views.py:1241 +#: instances/views.py:1242 #, python-format msgid "%(dev)s is %(size)s: a disk cannot shrink" msgstr "%(dev)s 为 %(size)s:磁盘不能缩小" -#: instances/views.py:1249 +#: instances/views.py:1250 msgid "No disks were selected or valid for resizing." msgstr "未选择磁盘或没有可调整大小的有效磁盘。" -#: instances/views.py:1258 +#: instances/views.py:1259 #, python-format msgid "%(quota)s: cannot resize the disks of '%(instance_name)s'." msgstr "%(quota)s:无法调整“%(instance_name)s”的磁盘。" -#: instances/views.py:1270 +#: instances/views.py:1271 #, python-format msgid "The storage pool of %(dev)s cannot resize its volumes" msgstr "%(dev)s 所在的存储池无法调整其卷的大小" -#: instances/views.py:1272 +#: instances/views.py:1273 #, python-format msgid "Disk is resized: %(dev)s" msgstr "磁盘已调整大小:%(dev)s" -#: instances/views.py:1366 +#: instances/views.py:1367 msgid "The VM's machine has no PCIe slots to add" msgstr "该虚拟机的机器类型没有可添加的 PCIe 插槽" -#: instances/views.py:1371 +#: instances/views.py:1372 #, python-format msgid "%(count)s PCIe slots added" msgstr "已添加 %(count)s 个 PCIe 插槽" -#: instances/views.py:1373 +#: instances/views.py:1374 #, python-format msgid "%(count)s PCIe slots added: the VM gets them at its next start" msgstr "已添加 %(count)s 个 PCIe 插槽:虚拟机在下次启动时获得它们" -#: instances/views.py:1504 +#: instances/views.py:1505 msgid "Volume changes are applied. But it will be activated after shutdown" msgstr "卷更改已应用,但将在关机后生效" -#: instances/views.py:1509 +#: instances/views.py:1510 msgid "Volume is changed successfully." msgstr "卷已成功更改。" -#: instances/views.py:1527 +#: instances/views.py:1528 #, python-format msgid "Disk %(dev)s is not a storage volume of this instance" msgstr "磁盘 %(dev)s 不是此虚拟机的存储卷" -#: instances/views.py:1534 +#: instances/views.py:1535 #, python-format msgid "Disk %(dev)s has a pending change; delete it once the VM is shut down" msgstr "磁盘 %(dev)s 有待生效的更改;请在虚拟机关机后删除它" -#: instances/views.py:1549 +#: instances/views.py:1550 #, python-format msgid "Volume %(vol)s is used by another VM; detach it instead" msgstr "卷 %(vol)s 正被另一台虚拟机使用;请改为分离它" -#: instances/views.py:1561 +#: instances/views.py:1562 #, python-format msgid "" "The guest has not released disk %(dev)s yet; volume %(vol)s was kept. Delete " "it from the storage pool once the VM is shut down." -msgstr "" -"客户机尚未释放磁盘 %(dev)s;卷 %(vol)s 已保留。请在虚拟机关机后从存储池中删除" -"它。" +msgstr "客户机尚未释放磁盘 %(dev)s;卷 %(vol)s 已保留。请在虚拟机关机后从存储池中删除它。" -#: instances/views.py:1572 +#: instances/views.py:1573 #, python-format msgid "Disk %(dev)s was detached, but its volume was kept: %(err)s" msgstr "磁盘 %(dev)s 已分离,但其卷已保留:%(err)s" -#: instances/views.py:1598 +#: instances/views.py:1599 #, python-format msgid "This VM cannot take a CD-ROM on the %(bus)s bus now" msgstr "该虚拟机现在无法在 %(bus)s 总线上添加 CD-ROM" -#: instances/views.py:1601 +#: instances/views.py:1602 msgid "A USB CD-ROM needs an ISO image: libvirt has no empty USB drive" msgstr "USB CD-ROM 需要 ISO 镜像:libvirt 不支持空的 USB 驱动器" -#: instances/views.py:1682 +#: instances/views.py:1683 #, python-format msgid "Pool %(pool)s was not read again: %(err)s" msgstr "未重新读取存储池 %(pool)s:%(err)s" -#: instances/views.py:1703 +#: instances/views.py:1704 #, python-format msgid "Snapshot was not deleted: %(err)s" msgstr "快照未删除:%(err)s" -#: instances/views.py:1818 +#: instances/views.py:1819 msgid "Check at least one device to boot from." msgstr "请至少勾选一个启动设备。" -#: instances/views.py:1832 +#: instances/views.py:1833 msgid "Boot order changed. It applies at the next start." msgstr "启动顺序已更改,将在下次启动时生效。" -#: instances/views.py:1834 +#: instances/views.py:1835 msgid "Boot order changed successfully." msgstr "启动顺序已成功更改。" -#: instances/views.py:1854 +#: instances/views.py:1855 msgid "The XML is empty" msgstr "XML 为空" -#: instances/views.py:1858 instances/views.py:2478 +#: instances/views.py:1859 instances/views.py:2479 #, python-format msgid "The XML is not well-formed: %(error)s" msgstr "XML 格式不正确:%(error)s" -#: instances/views.py:1860 +#: instances/views.py:1861 #, python-format msgid "The XML must keep the VM's UUID %(uuid)s." msgstr "XML 必须保留虚拟机的 UUID %(uuid)s。" -#: instances/views.py:1864 +#: instances/views.py:1865 msgid "" "The definition has changed since the editor was opened. Reload the page to " "edit the current one." msgstr "自打开编辑器以来定义已被更改。请重新加载页面以编辑当前定义。" -#: instances/views.py:1876 +#: instances/views.py:1877 msgid "The XML definition was saved." msgstr "XML 定义已保存。" -#: instances/views.py:1878 +#: instances/views.py:1879 msgid "The XML definition was saved; the VM uses it from its next start." msgstr "XML 定义已保存;虚拟机从下次启动起使用它。" -#: instances/views.py:1959 +#: instances/views.py:1960 msgid "Select one network interface to change" msgstr "请选择一个要更改的网络接口" -#: instances/views.py:1997 +#: instances/views.py:1998 msgid "Network Device Config is changed. Please shutdown instance to activate." msgstr "网络设备配置已更改。请关闭虚拟机以使其生效。" -#: instances/views.py:1999 +#: instances/views.py:2000 msgid "Network device changed" msgstr "网络设备已更改" -#: instances/views.py:2011 +#: instances/views.py:2012 msgid "No network selected" msgstr "未选择网络" -#: instances/views.py:2031 +#: instances/views.py:2032 msgid "" "The running VM has no free PCI slot for another network device: shut it down " "and add the device then; Add PCIe slots on the Disks tab gives it free ones " "from its next start." msgstr "" -"运行中的虚拟机没有可用 PCI 插槽来添加网络设备:请关机后再添加设备。“磁盘”选项" -"卡上的“添加 PCIe 插槽”可使其从下次启动起获得可用插槽。" +"运行中的虚拟机没有可用 PCI 插槽来添加网络设备:请关机后再添加设备。“磁盘”选项卡上的“添加 PCIe 插槽”可使其从下次启动起获得可用插槽。" -#: instances/views.py:2072 instances/views.py:2078 +#: instances/views.py:2073 instances/views.py:2079 msgid "The VM has it" msgstr "虚拟机已有此设备" -#: instances/views.py:2109 +#: instances/views.py:2110 #, python-format msgid "The host has no USB device %(device)s" msgstr "主机上没有 USB 设备 %(device)s" -#: instances/views.py:2130 +#: instances/views.py:2131 #, python-format msgid "The host has no PCI device %(device)s" msgstr "主机上没有 PCI 设备 %(device)s" -#: instances/views.py:2148 +#: instances/views.py:2149 #, python-format msgid "" -"Removal of PCI device %(address)s requested: the guest has not let it go " -"yet; it stays in the running VM until it does or the VM stops." -msgstr "" -"已请求移除 PCI 设备 %(address)s:客户机尚未释放它;在客户机释放或虚拟机停止之" -"前,它仍保留在运行中的虚拟机中。" +"Removal of PCI device %(address)s requested: the guest has not let it go yet;" +" it stays in the running VM until it does or the VM stops." +msgstr "已请求移除 PCI 设备 %(address)s:客户机尚未释放它;在客户机释放或虚拟机停止之前,它仍保留在运行中的虚拟机中。" -#: instances/views.py:2193 instances/views.py:2223 +#: instances/views.py:2194 instances/views.py:2224 msgid "Select a network interface and a QoS direction" msgstr "请选择网络接口和 QoS 方向" -#: instances/views.py:2196 vrtManager/network.py:459 +#: instances/views.py:2197 vrtManager/network.py:459 msgid "QoS rates must be whole numbers" msgstr "QoS 速率必须为整数" -#: instances/views.py:2203 networks/views.py:229 +#: instances/views.py:2204 networks/views.py:229 #, python-format msgid "%(qos_dir)s QoS is set" msgstr "%(qos_dir)s QoS 已设置" -#: instances/views.py:2208 +#: instances/views.py:2209 #, python-format msgid "" "%(qos_dir)s QoS is set. A running VM gets it after it is powered off and on." msgstr "%(qos_dir)s QoS 已设置。运行中的虚拟机需关机再开机后才能生效。" -#: instances/views.py:2230 networks/views.py:255 +#: instances/views.py:2231 networks/views.py:255 #, python-format msgid "%(qos_dir)s QoS is deleted" msgstr "%(qos_dir)s QoS 已删除" -#: instances/views.py:2235 +#: instances/views.py:2236 #, python-format msgid "" "%(qos_dir)s QoS is deleted. A running VM keeps the old limit until it is " "powered off and on." msgstr "%(qos_dir)s QoS 已删除。运行中的虚拟机在关机再开机之前保留旧的限制。" -#: instances/views.py:2263 +#: instances/views.py:2264 msgid "Only one owner is allowed and the one already added" msgstr "只允许一个所有者,且已添加" -#: instances/views.py:2265 +#: instances/views.py:2266 #, python-format msgid "%(user)s is already an owner" msgstr "%(user)s 已是所有者" -#: instances/views.py:2309 +#: instances/views.py:2310 #, python-format msgid "Console settings were not saved: %(errors)s" msgstr "控制台设置未保存:%(errors)s" -#: instances/views.py:2331 +#: instances/views.py:2332 msgid "" "Error setting console password. You should check that your instance have an " "graphic device." msgstr "设置控制台密码出错。请检查虚拟机是否有图形设备。" -#: instances/views.py:2378 +#: instances/views.py:2379 msgid "Shut the VM down to change whether it is a template." msgstr "请关闭虚拟机以更改其是否为模板。" -#: instances/views.py:2384 +#: instances/views.py:2385 #, python-format msgid "%(quota)s: '%(instance_name)s' stays a template." msgstr "%(quota)s:“%(instance_name)s”仍为模板。" -#: instances/views.py:2466 +#: instances/views.py:2467 msgid "The XML has no name" msgstr "XML 中没有名称" -#: instances/views.py:2480 webvirtcloud/middleware.py:79 +#: instances/views.py:2481 webvirtcloud/middleware.py:79 #, python-format msgid "libvirt Error - %(exception)s" msgstr "libvirt 错误 - %(exception)s" -#: instances/views.py:2487 +#: instances/views.py:2488 msgid "An empty disk of the size you set" msgstr "按设定大小创建的空磁盘" -#: instances/views.py:2488 +#: instances/views.py:2489 msgid "Volumes already in a pool" msgstr "存储池中已有的卷" -#: instances/views.py:2489 +#: instances/views.py:2490 msgid "A copy of a template volume" msgstr "模板卷的副本" -#: instances/views.py:2578 +#: instances/views.py:2579 msgid "You haven't defined any storage pools" msgstr "您尚未定义任何存储池" -#: instances/views.py:2580 +#: instances/views.py:2581 msgid "You haven't defined any network pools" msgstr "您尚未定义任何网络池" -#: instances/views.py:2643 +#: instances/views.py:2644 msgid "Flavor Created" msgstr "规格已创建" -#: instances/views.py:2651 +#: instances/views.py:2652 msgid "Create Flavor" msgstr "创建规格" -#: instances/views.py:2666 +#: instances/views.py:2667 msgid "Flavor Updated" msgstr "规格已更新" -#: instances/views.py:2672 +#: instances/views.py:2673 msgid "Update Flavor" msgstr "更新规格" -#: instances/views.py:2684 +#: instances/views.py:2685 msgid "Flavor Deleted" msgstr "规格已删除" -#: instances/views.py:2690 +#: instances/views.py:2691 msgid "Only the size template goes; VMs made from it keep their size." msgstr "仅删除此规格;由它创建的虚拟机保持其大小。" @@ -6211,8 +6141,7 @@ msgstr "转发延迟(秒)" msgid "" "The device's own addresses go: the bridge takes the ones below, and " "connections through the device drop while it is rebuilt." -msgstr "" -"设备自身的地址将被移除:网桥使用下方的地址,重建期间经由该设备的连接会中断。" +msgstr "设备自身的地址将被移除:网桥使用下方的地址,重建期间经由该设备的连接会中断。" #: interfaces/templates/create_iface_block.html:87 msgid "The host has every device defined already; a device's page shows it." @@ -6273,9 +6202,7 @@ msgstr "接口 %(iface)s 的操作" msgid "" "Stop interface %(name)s? The host and its VMs lose their connections through " "it at once; if you reach the host through it, you lose the host." -msgstr "" -"停止接口 %(name)s?主机及其虚拟机经由它的连接会立即断开;如果您通过它访问主" -"机,将失去与主机的连接。" +msgstr "停止接口 %(name)s?主机及其虚拟机经由它的连接会立即断开;如果您通过它访问主机,将失去与主机的连接。" #: interfaces/templates/interface.html:26 #, python-format @@ -6283,9 +6210,7 @@ msgid "" "Delete interface %(name)s? Its definition is removed from the host; a " "bridge's members are defined again on their own, its addresses going to its " "only member." -msgstr "" -"删除接口 %(name)s?其定义将从主机中移除;网桥的成员会重新单独定义,其地址转给" -"唯一的成员。" +msgstr "删除接口 %(name)s?其定义将从主机中移除;网桥的成员会重新单独定义,其地址转给唯一的成员。" #: interfaces/templates/interface.html:26 msgid "Delete (stop it first)" @@ -6387,9 +6312,7 @@ msgstr "没有与搜索匹配的接口。" msgid "" "This host's libvirt only reads network interfaces and does not tell their " "addresses: change them on the host, for example with NetworkManager." -msgstr "" -"此主机的 libvirt 只能读取网络接口,且不提供其地址:请在主机上更改,例如使用 " -"NetworkManager。" +msgstr "此主机的 libvirt 只能读取网络接口,且不提供其地址:请在主机上更改,例如使用 NetworkManager。" #: interfaces/templates/link_badge.html:1 #, python-format @@ -6676,9 +6599,7 @@ msgstr "停止网络 %(name)s?其上运行中的虚拟机将立即失去经由 msgid "" "Disable autostart of network %(name)s? After the host restarts it stays " "stopped, and VMs that use it do not start." -msgstr "" -"禁用网络 %(name)s 的自动启动?主机重启后该网络保持停止,使用它的虚拟机将无法" -"启动。" +msgstr "禁用网络 %(name)s 的自动启动?主机重启后该网络保持停止,使用它的虚拟机将无法启动。" #: networks/templates/network.html:27 storages/templates/storage.html:31 msgid "Disable autostart" @@ -6757,8 +6678,8 @@ msgstr "%(address)s 的操作" #: networks/templates/network.html:168 #, python-format msgid "" -"Delete the fixed address %(address)s? The VM may get another address when " -"its lease ends." +"Delete the fixed address %(address)s? The VM may get another address when its" +" lease ends." msgstr "删除固定地址 %(address)s?租约到期后虚拟机可能获得其他地址。" #: networks/templates/network.html:180 @@ -6840,9 +6761,7 @@ msgstr "限制的操作" msgid "" "Remove the %(direction)s limit of network %(name)s? It stays in force until " "the network is stopped and started." -msgstr "" -"移除网络 %(name)s 的%(direction)s限制?在网络停止并重新启动前,该限制仍然有" -"效。" +msgstr "移除网络 %(name)s 的%(direction)s限制?在网络停止并重新启动前,该限制仍然有效。" #: networks/templates/network.html:315 msgid "No limits: the network's VMs share the host's bandwidth freely." @@ -6862,8 +6781,8 @@ msgstr "修改网络的 XML" #: networks/templates/network.html:332 msgid "" -"The saved definition: a running network takes a change when it is stopped " -"and started again." +"The saved definition: a running network takes a change when it is stopped and" +" started again." msgstr "已保存的定义:运行中的网络需停止并重新启动后才应用更改。" #: networks/templates/network.html:334 @@ -6978,15 +6897,15 @@ msgstr "网络 XML 已更改。" #: networks/views.py:222 #, python-format msgid "" -"%(qos_dir)s QoS is updated. Network XML is changed. Stop and start network " -"to activate new config" +"%(qos_dir)s QoS is updated. Network XML is changed. Stop and start network to" +" activate new config" msgstr "%(qos_dir)s QoS 已更新。网络 XML 已更改。请停止并启动网络以应用新配置" #: networks/views.py:247 #, python-format msgid "" -"%(qos_dir)s QoS is deleted. Network XML is changed. Stop and start network " -"to activate new config" +"%(qos_dir)s QoS is deleted. Network XML is changed. Stop and start network to" +" activate new config" msgstr "%(qos_dir)s QoS 已删除。网络 XML 已更改。请停止并启动网络以应用新配置" #: nodedevs/templates/nodedevs.html:17 @@ -6995,8 +6914,8 @@ msgid "" "needs its IOMMU (Intel VT-d, AMD-Vi) turned on in the firmware and the " "kernel; on Intel, boot it with intel_iommu=on." msgstr "" -"未检测到 IOMMU 组:无法将 PCI 设备分配给虚拟机。主机需要在固件和内核中启用 " -"IOMMU(Intel VT-d、AMD-Vi);Intel 平台请使用 intel_iommu=on 启动。" +"未检测到 IOMMU 组:无法将 PCI 设备分配给虚拟机。主机需要在固件和内核中启用 IOMMU(Intel VT-d、AMD-Vi);Intel " +"平台请使用 intel_iommu=on 启动。" #: nodedevs/templates/nodedevs.html:22 msgid "Search devices" @@ -7048,8 +6967,8 @@ msgstr "总线 / 设备" #: nodedevs/templates/nodedevs.html:92 msgid "" -"One of several of this model: a VM that names the model alone may take any " -"of them." +"One of several of this model: a VM that names the model alone may take any of" +" them." msgstr "此型号有多个设备:仅指定型号的虚拟机可能使用其中任意一个。" #: nodedevs/templates/nodedevs.html:98 @@ -7076,8 +6995,8 @@ msgid "" "UUID. In a rule, in is traffic to the VM, out from it; a lower priority " "applies first." msgstr "" -"为其命名,并给出规则及其引用的过滤器;libvirt 会为其分配 UUID。规则中,in 表" -"示发往虚拟机的流量,out 表示来自虚拟机的流量;优先级数值越低越先应用。" +"为其命名,并给出规则及其引用的过滤器;libvirt 会为其分配 UUID。规则中,in 表示发往虚拟机的流量,out " +"表示来自虚拟机的流量;优先级数值越低越先应用。" #: nwfilters/templates/create_nwfilter_block.html:22 msgid "libvirt's filter format" @@ -7212,17 +7131,13 @@ msgstr "修改过滤器的 XML" msgid "" "A change applies at once, also to the running VMs that use the filter; it " "keeps the filter's name and UUID." -msgstr "" -"更改立即生效,也作用于使用该过滤器的运行中虚拟机;过滤器的名称和 UUID 保持不" -"变。" +msgstr "更改立即生效,也作用于使用该过滤器的运行中虚拟机;过滤器的名称和 UUID 保持不变。" #: nwfilters/templates/nwfilter.html:169 msgid "" "One rule: in is traffic to the VM, out from it; a lower priority applies " "first (500 if none is given)." -msgstr "" -"一条规则:in 表示发往虚拟机的流量,out 表示来自虚拟机的流量;优先级数值越低越" -"先应用(未指定时为 500)。" +msgstr "一条规则:in 表示发往虚拟机的流量,out 表示来自虚拟机的流量;优先级数值越低越先应用(未指定时为 500)。" #: nwfilters/templates/nwfilter.html:170 msgid "The protocols and their attributes" @@ -7506,11 +7421,9 @@ msgstr "此资源上正在进行一项短时操作,请稍后重试。" #: operations/utils.py:160 #, python-format msgid "" -"%(label)s is %(state)s on this resource (started by %(user)s, %(since)s " -"ago); see the Jobs page." -msgstr "" -"此资源上的%(label)s%(state)s(由 %(user)s 于 %(since)s前发起),请查看任务页" -"面。" +"%(label)s is %(state)s on this resource (started by %(user)s, %(since)s ago);" +" see the Jobs page." +msgstr "此资源上的%(label)s%(state)s(由 %(user)s 于 %(since)s前发起),请查看任务页面。" #: operations/utils.py:162 #, python-format @@ -7521,16 +7434,13 @@ msgstr "此资源上的%(label)s%(state)s(自 %(since)s起)。" msgid "" "libvirt's merge finished copying but never completed (for example after a " "libvirtd restart); check the VM before resolving" -msgstr "" -"libvirt 的合并已完成复制但从未结束(例如 libvirtd 重启后);处理前请检查虚拟" -"机" +msgstr "libvirt 的合并已完成复制但从未结束(例如 libvirtd 重启后);处理前请检查虚拟机" #: operations/worker.py:42 msgid "" "The worker that ran this job stopped responding; an administrator must make " "sure it is no longer running, then resolve this job" -msgstr "" -"运行此任务的工作进程已停止响应;管理员必须确认它已不再运行,然后处理此任务" +msgstr "运行此任务的工作进程已停止响应;管理员必须确认它已不再运行,然后处理此任务" #: operations/worker.py:44 msgid "Waiting for recovery" @@ -7768,8 +7678,8 @@ msgid "" "key, and this host has none. Add one on the " "Secrets page, then come back." msgstr "" -"Ceph 存储池需要一个 Ceph 类型的 libvirt 机密来保存 Ceph 用户的密钥,而此主机" -"上没有。在机密页面添加一个,然后返回此处。" +"Ceph 存储池需要一个 Ceph 类型的 libvirt 机密来保存 Ceph 用户的密钥,而此主机上没有。在机密页面添加一个,然后返回此处。" #: storages/templates/create_stg_block.html:145 msgid "Protocol" @@ -7866,11 +7776,9 @@ msgstr "存储池 %(pool)s 的操作" #: storages/templates/storage.html:18 #, python-format msgid "" -"Stop pool %(name)s? Its files stay, but until it is started again its " -"volumes cannot be managed and VMs with disks in it may not start." -msgstr "" -"停止存储池 %(name)s?其文件会保留,但在再次启动之前无法管理其中的卷,且磁盘位" -"于其中的虚拟机可能无法启动。" +"Stop pool %(name)s? Its files stay, but until it is started again its volumes" +" cannot be managed and VMs with disks in it may not start." +msgstr "停止存储池 %(name)s?其文件会保留,但在再次启动之前无法管理其中的卷,且磁盘位于其中的虚拟机可能无法启动。" #: storages/templates/storage.html:31 #, python-format @@ -8153,11 +8061,9 @@ msgstr "无法提交表单" #: templates/403_csrf.html:11 msgid "" "This submission was rejected because its security check failed. It usually " -"happens when the page was open for a long time, or after signing in or out " -"in another tab." -msgstr "" -"此次提交因安全校验失败而被拒绝。这通常发生在页面打开时间过长,或在其他标签页" -"中登录或退出之后。" +"happens when the page was open for a long time, or after signing in or out in" +" another tab." +msgstr "此次提交因安全校验失败而被拒绝。这通常发生在页面打开时间过长,或在其他标签页中登录或退出之后。" #: templates/403_csrf.html:12 msgid "Go back, reload the page and submit the form again." @@ -8168,9 +8074,7 @@ msgid "" "If it happens on every form, the browser may block cookies, or the panel's " "proxy or address settings may be wrong. The reason is written to the panel's " "log." -msgstr "" -"如果每个表单都出现此问题,可能是浏览器阻止了 Cookie,或面板的代理或地址设置有" -"误。原因已写入面板日志。" +msgstr "如果每个表单都出现此问题,可能是浏览器阻止了 Cookie,或面板的代理或地址设置有误。原因已写入面板日志。" #: templates/404.html:4 templates/404.html:8 msgid "Page not found" @@ -8209,8 +8113,7 @@ msgstr "请检查主机是否正在运行且可以连接,然后重新加载页 msgid "" "The panel failed while handling this request. This is a fault in the panel, " "not something you did, and it was written to the panel's log." -msgstr "" -"面板在处理此请求时出错。这是面板的故障,并非您的操作所致,已写入面板日志。" +msgstr "面板在处理此请求时出错。这是面板的故障,并非您的操作所致,已写入面板日志。" #: templates/500.html:16 #, python-format @@ -8258,11 +8161,9 @@ msgstr "Ceph 机密名称" #: virtsecrets/forms.py:19 msgid "" -"The name a disk or pool names it by, e.g. client.libvirt secret, not the " -"Ceph user; one secret per name." -msgstr "" -"磁盘或存储池引用它时使用的名称,例如 client.libvirt secret,而不是 Ceph 用" -"户;每个名称一个机密。" +"The name a disk or pool names it by, e.g. client.libvirt secret, not the Ceph" +" user; one secret per name." +msgstr "磁盘或存储池引用它时使用的名称,例如 client.libvirt secret,而不是 Ceph 用户;每个名称一个机密。" #: virtsecrets/forms.py:20 msgid "Key" @@ -8399,8 +8300,8 @@ msgid "" "definition of a VM or pool names it; snapshots, LUKS volumes and qemu.conf's " "TLS settings are not checked." msgstr "" -"删除机密 %(usage)s?其存储的值将丢失。当前没有任何虚拟机或存储池的现有定义或" -"已保存定义引用它;快照、LUKS 卷以及 qemu.conf 的 TLS 设置未做检查。" +"删除机密 %(usage)s?其存储的值将丢失。当前没有任何虚拟机或存储池的现有定义或已保存定义引用它;快照、LUKS 卷以及 qemu.conf 的 " +"TLS 设置未做检查。" #: virtsecrets/templates/secrets.html:75 msgid "Delete secret" @@ -8439,8 +8340,8 @@ msgstr "连接已关闭(客户端已关闭)" #: vrtManager/connection.py:139 #, python-format msgid "" -"Connection Failed: %(host)s does not answer: %(requests)s requests still " -"wait for it" +"Connection Failed: %(host)s does not answer: %(requests)s requests still wait" +" for it" msgstr "连接失败:%(host)s 无响应:仍有 %(requests)s 个请求在等待它" #: vrtManager/connection.py:208 @@ -8604,8 +8505,8 @@ msgstr "迁移期间虚拟机在源主机上被启动" #: vrtManager/instance.py:572 #, python-format msgid "" -"%(error)s; the VM may now be defined only on the destination host: check " -"both hosts" +"%(error)s; the VM may now be defined only on the destination host: check both" +" hosts" msgstr "%(error)s;虚拟机现在可能只在目标主机上定义:请检查两台主机" #: vrtManager/instance.py:578 @@ -8613,8 +8514,7 @@ msgstr "%(error)s;虚拟机现在可能只在目标主机上定义:请检查 msgid "" "%(error)s; the VM is now defined on both hosts, remove it from the " "destination: %(undo_error)s" -msgstr "" -"%(error)s;虚拟机现在在两台主机上都有定义,请从目标主机删除它:%(undo_error)s" +msgstr "%(error)s;虚拟机现在在两台主机上都有定义,请从目标主机删除它:%(undo_error)s" #: vrtManager/instance.py:584 msgid "" @@ -8735,11 +8635,11 @@ msgstr "%(disk)s 不在存储池中;内存只能保存到存储池中" #, python-format msgid "" "Storage pool %(pool)s has %(free).1f GiB free; the snapshot needs %(size).1f " -"GiB (%(percent)g%% of the VM's disks in it, at least %(minimum)g GiB, and " -"the memory if it is saved)" +"GiB (%(percent)g%% of the VM's disks in it, at least %(minimum)g GiB, and the" +" memory if it is saved)" msgstr "" -"存储池 %(pool)s 可用 %(free).1f GiB;快照需要 %(size).1f GiB(其中虚拟机磁盘" -"的 %(percent)g%%,至少 %(minimum)g GiB,若保存内存则另加内存)" +"存储池 %(pool)s 可用 %(free).1f GiB;快照需要 %(size).1f GiB(其中虚拟机磁盘的 %(percent)g%%,至少 " +"%(minimum)g GiB,若保存内存则另加内存)" #: vrtManager/instance.py:1974 msgid "" @@ -8893,11 +8793,11 @@ msgstr "卷 %(name)s 已存在于存储池 %(pool)s 中" #: vrtManager/instance.py:2581 #, python-format msgid "" -"Storage pool %(pool)s has %(free).1f GiB free; the clone needs %(size).1f " -"GiB (the copied disks, plus %(percent)g%% of them, at least %(minimum)g GiB)" +"Storage pool %(pool)s has %(free).1f GiB free; the clone needs %(size).1f GiB" +" (the copied disks, plus %(percent)g%% of them, at least %(minimum)g GiB)" msgstr "" -"存储池 %(pool)s 可用 %(free).1f GiB;克隆需要 %(size).1f GiB(复制的磁盘,再" -"加其 %(percent)g%%,至少 %(minimum)g GiB)" +"存储池 %(pool)s 可用 %(free).1f GiB;克隆需要 %(size).1f GiB(复制的磁盘,再加其 %(percent)g%%,至少" +" %(minimum)g GiB)" #: vrtManager/instance.py:2720 msgid "A network interface that is a host device is removed in the XML editor" @@ -9004,8 +8904,8 @@ msgstr "删除接口 %(iface)s 前请先停止它" #: vrtManager/interface.py:273 #, python-format msgid "" -"Bridge %(iface)s has addresses and several members: give the addresses to " -"one of them on the host first" +"Bridge %(iface)s has addresses and several members: give the addresses to one" +" of them on the host first" msgstr "网桥 %(iface)s 有地址和多个成员:请先在主机上把地址分配给其中一个成员" #: vrtManager/network.py:299 @@ -9244,8 +9144,7 @@ msgid "" "%(device)s shares IOMMU group %(group)s with %(member)s (%(product)s), which " "%(vms)s uses" msgstr "" -"%(device)s 与 %(member)s (%(product)s) 共享 IOMMU 组 %(group)s,后者正被 " -"%(vms)s 使用" +"%(device)s 与 %(member)s (%(product)s) 共享 IOMMU 组 %(group)s,后者正被 %(vms)s 使用" #: vrtManager/nodedevs.py:171 #, python-format @@ -9260,8 +9159,8 @@ msgid "" "%(device)s shares IOMMU group %(group)s with %(member)s (%(product)s), which " "the host (driver %(driver)s) uses" msgstr "" -"%(device)s 与 %(member)s (%(product)s) 共享 IOMMU 组 %(group)s,后者正被主机" -"(驱动 %(driver)s)使用" +"%(device)s 与 %(member)s (%(product)s) 共享 IOMMU 组 %(group)s,后者正被主机(驱动 " +"%(driver)s)使用" #: vrtManager/nodedevs.py:187 #, python-format @@ -9350,9 +9249,7 @@ msgstr "存储池 %(name)s 中有运行中的虚拟机 %(vms)s 的磁盘;请 msgid "" "VMs %(vms)s have disks in pool %(name)s by its name and would no longer " "start; detach those disks first" -msgstr "" -"虚拟机 %(vms)s 通过名称使用存储池 %(name)s 中的磁盘,将无法再启动;请先分离这" -"些磁盘" +msgstr "虚拟机 %(vms)s 通过名称使用存储池 %(name)s 中的磁盘,将无法再启动;请先分离这些磁盘" #: vrtManager/storage.py:279 #, python-format diff --git a/static/css/webvirtcloud.css b/static/css/webvirtcloud.css index b0bdb825..70573c09 100644 --- a/static/css/webvirtcloud.css +++ b/static/css/webvirtcloud.css @@ -121,6 +121,16 @@ th[aria-sort="ascending"]:not([data-sort-method="none"])::after { } /* the boot order editor numbers its checked devices, top to bottom */ +/* the power tab's states: the current one filled, the others a ring */ +.power-dot { + width: .8rem; + height: .8rem; + border-radius: 50%; + flex-shrink: 0; + border: 2px solid var(--bs-border-color); +} +.power-dot.bg-success, .power-dot.bg-warning, .power-dot.bg-secondary { border-color: transparent; } + .boot-sequence { counter-reset: boot; }